@@ -737,8 +737,10 @@ def parse_foreign_key_error(self, error_message: str) -> dict[str, str | list[st
737737 def get_indexes_sql (self , schema_name : str , table_name : str ) -> str :
738738 """Query to get index definitions.
739739
740- Note: For MySQL 8.0+, EXPRESSION column contains the expression for
740+ Note: For MySQL 8.0.13 +, EXPRESSION column contains the expression for
741741 functional indexes. COLUMN_NAME is NULL for such indexes.
742+ On MySQL < 8.0.13 and MariaDB, the EXPRESSION column does not exist;
743+ heading.py falls back to get_indexes_sql_fallback() in that case.
742744 """
743745 return (
744746 f"SELECT INDEX_NAME as index_name, "
@@ -751,6 +753,19 @@ def get_indexes_sql(self, schema_name: str, table_name: str) -> str:
751753 f"ORDER BY index_name, seq_in_index"
752754 )
753755
756+ def get_indexes_sql_fallback (self , schema_name : str , table_name : str ) -> str :
757+ """Fallback index query for MySQL < 8.0.13 and MariaDB (no EXPRESSION column)."""
758+ return (
759+ f"SELECT INDEX_NAME as index_name, "
760+ f"COLUMN_NAME as column_name, "
761+ f"NON_UNIQUE as non_unique, SEQ_IN_INDEX as seq_in_index "
762+ f"FROM information_schema.statistics "
763+ f"WHERE table_schema = { self .quote_string (schema_name )} "
764+ f"AND table_name = { self .quote_string (table_name )} "
765+ f"AND index_name != 'PRIMARY' "
766+ f"ORDER BY index_name, seq_in_index"
767+ )
768+
754769 def parse_column_info (self , row : dict [str , Any ]) -> dict [str , Any ]:
755770 """
756771 Parse MySQL SHOW FULL COLUMNS output into standardized format.
0 commit comments