[jOOQ/jOOQ#16853] MySQL error "BLOB, TEXT, GEOMETRY or JSON column can't

have a default value" when running DDL from generated code
This commit is contained in:
Lukas Eder 2024-06-25 08:50:19 +02:00
parent c29eb589f0
commit 84ad560d09
2 changed files with 31 additions and 0 deletions

View File

@ -27270,6 +27270,32 @@ public class DSL {

View File

@ -1210,6 +1210,7 @@ final class Tools {
static final Set<SQLDialect> NO_SUPPORT_TIMESTAMP_PRECISION = SQLDialect.supportedBy(DERBY);
static final Set<SQLDialect> DEFAULT_TIMESTAMP_NOT_NULL = SQLDialect.supportedBy(MARIADB);
static final Set<SQLDialect> REQUIRES_PARENTHESISED_DEFAULT = SQLDialect.supportedBy(SQLITE);
static final Set<SQLDialect> REQUIRES_PARENTHESISED_DEFAULT_FOR_LOBS = SQLDialect.supportedBy(MYSQL);
static final Set<SQLDialect> NO_SUPPORT_DEFAULT_DATETIME_LITERAL_PREFIX = SQLDialect.supportedBy(MARIADB, MYSQL);
@ -5961,6 +5962,10 @@ final class Tools {
if (REQUIRES_PARENTHESISED_DEFAULT.contains(ctx.dialect()))
ctx.sql('(').visit(v).sql(')');
// [#16853] MySQL LOB types can't have defaults. Except if we parenthesise them, then they can o_O
else if (REQUIRES_PARENTHESISED_DEFAULT_FOR_LOBS.contains(ctx.dialect()) && (type.isLob() || type.isJSON() || type.isSpatial()))
ctx.sql('(').visit(v).sql(')');
// [#16498] Special cases where the standard datetime literal prefix needs to be omitted
// See: https://bugs.mysql.com/bug.php?id=114450
else if (NO_SUPPORT_DEFAULT_DATETIME_LITERAL_PREFIX.contains(ctx.dialect()) && type.isDateTime())