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
pass
return state
+ def _check_view(self, sql: str) -> bool:
+ return bool(self._re_is_view.match(sql))
+
def _parse_constraints(self, line):
"""Parse a KEY or CONSTRAINT line.
self.preparer._unescape_identifier,
)
+ self._re_is_view = _re_compile(r"^CREATE(\s.*)?\sVIEW")
+
# `col`,`col2`(32),`col3`(15) DESC
#
self._re_keyexprs = _re_compile(
class RawReflectionTest(fixtures.TestBase):
- __backend__ = True
-
def setup_test(self):
dialect = mysql.dialect()
self.parser = _reflection.MySQLTableDefinitionParser(
"SET NULL",
),
)
+
+ @testing.combinations(
+ (
+ "CREATE ALGORITHM=UNDEFINED DEFINER=`scott`@`%` SQL SECURITY DEFINER VIEW `v1` AS SELECT", # noqa: E501
+ True,
+ ),
+ ("CREATE VIEW `v1` AS SELECT", True),
+ ("CREATE TABLE `v1`", False),
+ )
+ def test_is_view(self, sql: str, expected: bool) -> None:
+ is_(self.parser._check_view(sql), expected)