diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2023-01-04 09:23:07 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2023-01-04 12:29:49 -0500 |
| commit | 4a31f97824095610cfdbc1ac1180fd8690f9f477 (patch) | |
| tree | 27c6126516f7163885b2f5f8cea206bef33e1458 /lib/sqlalchemy/dialects | |
| parent | 72268e9387140df6444e9e88391ce604b9719639 (diff) | |
| download | sqlalchemy-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.py | 12 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/mysql/reflection.py | 7 |
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.""" |
