@@ -405,8 +405,29 @@ def _build_create_table_sql(self, table_name: str) -> str:
405
405
""" ,
406
406
(self ._mysql_database , table_name ),
407
407
)
408
- for index in self ._mysql_cur_dict .fetchall ():
408
+ mysql_indices : t .Sequence [t .Optional [t .Dict [str , ToPythonOutputTypes ]]] = self ._mysql_cur_dict .fetchall ()
409
+ for index in mysql_indices :
409
410
if index is not None :
411
+ index_name : str
412
+ if isinstance (index ["name" ], bytes ):
413
+ index_name = index ["name" ].decode ()
414
+ elif isinstance (index ["name" ], str ):
415
+ index_name = index ["name" ]
416
+ else :
417
+ index_name = str (index ["name" ])
418
+
419
+ # check if the index name collides with any table name
420
+ self ._mysql_cur_dict .execute (
421
+ """
422
+ SELECT COUNT(*)
423
+ FROM information_schema.TABLES
424
+ WHERE TABLE_SCHEMA = %s
425
+ AND TABLE_NAME = %s
426
+ """ ,
427
+ (self ._mysql_database , index_name ),
428
+ )
429
+ index_name_collision : t .Optional [t .Dict [str , ToPythonOutputTypes ]] = self ._mysql_cur_dict .fetchone ()
430
+
410
431
columns : str = ""
411
432
if isinstance (index ["columns" ], bytes ):
412
433
columns = index ["columns" ].decode ()
@@ -421,14 +442,9 @@ def _build_create_table_sql(self, table_name: str) -> str:
421
442
else :
422
443
indices += """CREATE {unique} INDEX IF NOT EXISTS "{name}" ON "{table}" ({columns});""" .format (
423
444
unique = "UNIQUE" if index ["unique" ] in {1 , "1" } else "" ,
424
- name = "{table}_{name}" .format (
425
- table = table_name ,
426
- name = index ["name" ].decode () if isinstance (index ["name" ], bytes ) else index ["name" ],
427
- )
428
- if self ._prefix_indices
429
- else index ["name" ].decode ()
430
- if isinstance (index ["name" ], bytes )
431
- else index ["name" ],
445
+ name = f"{ table_name } _{ index_name } "
446
+ if (index_name_collision is not None or self ._prefix_indices )
447
+ else index_name ,
432
448
table = table_name ,
433
449
columns = ", " .join (f'"{ column } "' for column in columns .split ("," )),
434
450
)
0 commit comments