else:
default = self.get_column_default_string(column)
if default is not None:
- if isinstance(
- column.server_default.arg, functions.FunctionElement
+ if (
+ isinstance(
+ column.server_default.arg, functions.FunctionElement
+ )
+ and self.dialect._support_default_function
):
colspec.append(f"DEFAULT ({default})")
else:
# ref https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-17.html#mysqld-8-0-17-feature # noqa
return self.server_version_info >= (8, 0, 17)
+ @property
+ def _support_default_function(self):
+ if not self.server_version_info:
+ return False
+ elif self.is_mariadb:
+ # ref https://mariadb.com/kb/en/mariadb-1021-release-notes/
+ return self.server_version_info >= (10, 2, 1)
+ else:
+ # ref https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html # noqa
+ return self.server_version_info >= (8, 0, 13)
+
@property
def _is_mariadb(self):
return self.is_mariadb
"PRIMARY KEY (data) USING btree)",
)
- def test_create_server_default_with_function_using(self):
+ @testing.combinations(
+ (True, (10, 2, 2)),
+ (True, (10, 2, 1)),
+ (True, (10, 2, 0)),
+ (False, (8, 0, 14)),
+ (False, (8, 0, 13)),
+ (False, (8, 0, 12)),
+ argnames="is_mariadb,version",
+ )
+ def test_create_server_default_with_function_using(
+ self, is_mariadb, version
+ ):
+ dialect = mysql.dialect(is_mariadb=is_mariadb)
+ dialect.server_version_info = version
+
m = MetaData()
tbl = Table(
"testtbl",
),
Column("data", JSON, server_default=func.json_object()),
)
+
+ if not dialect._support_default_function:
+ return
+
self.assert_compile(
schema.CreateTable(tbl),
"CREATE TABLE testtbl (time DATETIME DEFAULT (CURRENT_TIMESTAMP), "
"name VARCHAR(255) DEFAULT 'some str', "
"description VARCHAR(255) DEFAULT (lower('hi')), "
"data JSON DEFAULT (json_object()))",
+ dialect=dialect,
)
def test_create_index_expr(self):