summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
authorJohn Bodley <4567245+john-bodley@users.noreply.github.com>2022-09-29 21:58:58 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2022-10-03 22:45:49 -0400
commit322b9b4faa6dfd4eea3d2ba12825850318a59ef4 (patch)
tree002fe6d9246947d8b590044bcb73b91aad32aedf /lib/sqlalchemy
parentf35446512582defc2fcde826b8c059ed09ddabf3 (diff)
downloadsqlalchemy-322b9b4faa6dfd4eea3d2ba12825850318a59ef4.tar.gz
adjust MySQL view reflection for non-standard MySQL variants
Adjusted the regular expression used to match "CREATE VIEW" when testing for views to work more flexibly, no longer requiring the special keyword "ALGORITHM" in the middle, which was intended to be optional but was not working correctly. The change allows view reflection to work more completely on MySQL-compatible variants such as StarRocks. Pull request courtesy John Bodley. Fixes: #8588 Closes: #8589 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/8589 Pull-request-sha: d85b2c5b51e45cec543c9ae9d62d6d659b063354 Change-Id: I173137f0bf68639cad0d5c329055475b40ddb5e4 (cherry picked from commit 9829bc43d69ea5e714014f5ac5f036a94d13bc08)
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/dialects/mysql/base.py2
-rw-r--r--lib/sqlalchemy/dialects/mysql/reflection.py5
2 files changed, 6 insertions, 1 deletions
diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py
index 111c63bff..70b60a0a0 100644
--- a/lib/sqlalchemy/dialects/mysql/base.py
+++ b/lib/sqlalchemy/dialects/mysql/base.py
@@ -3107,7 +3107,7 @@ class MySQLDialect(default.DefaultDialect):
sql = self._show_create_table(
connection, None, charset, full_name=full_name
)
- if re.match(r"^CREATE (?:ALGORITHM)?.* VIEW", sql):
+ if parser._check_view(sql):
# Adapt views to something table-like.
columns = self._describe_table(
connection, None, charset, full_name=full_name
diff --git a/lib/sqlalchemy/dialects/mysql/reflection.py b/lib/sqlalchemy/dialects/mysql/reflection.py
index 27394bbe9..f536496d4 100644
--- a/lib/sqlalchemy/dialects/mysql/reflection.py
+++ b/lib/sqlalchemy/dialects/mysql/reflection.py
@@ -70,6 +70,9 @@ class MySQLTableDefinitionParser(object):
pass
return state
+ def _check_view(self, sql):
+ return bool(self._re_is_view.match(sql))
+
def _parse_constraints(self, line):
"""Parse a KEY or CONSTRAINT line.
@@ -349,6 +352,8 @@ class MySQLTableDefinitionParser(object):
self.preparer._unescape_identifier,
)
+ self._re_is_view = _re_compile(r"^CREATE(?! TABLE)(\s.*)?\sVIEW")
+
# `col`,`col2`(32),`col3`(15) DESC
#
self._re_keyexprs = _re_compile(