summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/dialects
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2023-01-04 09:23:07 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2023-01-04 12:29:49 -0500
commit4a31f97824095610cfdbc1ac1180fd8690f9f477 (patch)
tree27c6126516f7163885b2f5f8cea206bef33e1458 /lib/sqlalchemy/dialects
parent72268e9387140df6444e9e88391ce604b9719639 (diff)
downloadsqlalchemy-4a31f97824095610cfdbc1ac1180fd8690f9f477.tar.gz
include parsed col length field as integer from mysql index reflection
Added support to MySQL index reflection to correctly reflect the ``mysql_length`` dictionary, which previously was being ignored. Fixes: #9047 Change-Id: I0a5e27123be68741e12af4464a0fa305052ec36e
Diffstat (limited to 'lib/sqlalchemy/dialects')
-rw-r--r--lib/sqlalchemy/dialects/mysql/base.py12
-rw-r--r--lib/sqlalchemy/dialects/mysql/reflection.py7
2 files changed, 16 insertions, 3 deletions
diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py
index fbd20a0ba..e89ebb09d 100644
--- a/lib/sqlalchemy/dialects/mysql/base.py
+++ b/lib/sqlalchemy/dialects/mysql/base.py
@@ -3075,14 +3075,22 @@ class MySQLDialect(default.DefaultDialect):
]
index_d = {}
- if dialect_options:
- index_d["dialect_options"] = dialect_options
index_d["name"] = spec["name"]
index_d["column_names"] = [s[0] for s in spec["columns"]]
+ mysql_length = {
+ s[0]: s[1] for s in spec["columns"] if s[1] is not None
+ }
+ if mysql_length:
+ dialect_options["%s_length" % self.name] = mysql_length
+
index_d["unique"] = unique
if flavor:
index_d["type"] = flavor
+
+ if dialect_options:
+ index_d["dialect_options"] = dialect_options
+
indexes.append(index_d)
indexes.sort(key=lambda d: d["name"] or "~") # sort None as last
return indexes if indexes else ReflectionDefaults.indexes()
diff --git a/lib/sqlalchemy/dialects/mysql/reflection.py b/lib/sqlalchemy/dialects/mysql/reflection.py
index fe92c733a..ec3f82a60 100644
--- a/lib/sqlalchemy/dialects/mysql/reflection.py
+++ b/lib/sqlalchemy/dialects/mysql/reflection.py
@@ -382,7 +382,12 @@ class MySQLTableDefinitionParser:
def _parse_keyexprs(self, identifiers):
"""Unpack '"col"(2),"col" ASC'-ish strings into components."""
- return self._re_keyexprs.findall(identifiers)
+ return [
+ (colname, int(length) if length else None, modifiers)
+ for colname, length, modifiers in self._re_keyexprs.findall(
+ identifiers
+ )
+ ]
def _prep_regexes(self):
"""Pre-compile regular expressions."""