[jOOQ/jOOQ#14513] Support column COMMENT clause in ALTER TABLE .. ADD
This implements the feature for dialects with native support. Before implementing it for other dialects using an anonymous block, let's refactor the internals, first. There are 2 modes of adding columns to a table, both work differently, even if they're pretty much the same in terms of the QOM, even if the syntax may differ.
This commit is contained in:
parent
37623e733e
commit
b688780bae
@ -296,7 +296,7 @@ extends
|
||||
* as {@link DSLContext#createTable(Table)}.
|
||||
*/
|
||||
@NotNull
|
||||
@Support({ FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
|
||||
@Support({ FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, YUGABYTEDB })
|
||||
Field<T> comment(String comment);
|
||||
|
||||
/**
|
||||
@ -304,7 +304,7 @@ extends
|
||||
* as {@link DSLContext#createTable(Table)}.
|
||||
*/
|
||||
@NotNull
|
||||
@Support({ FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES, YUGABYTEDB })
|
||||
@Support({ FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, YUGABYTEDB })
|
||||
Field<T> comment(Comment comment);
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
@ -1304,6 +1304,7 @@ implements
|
||||
if (part instanceof Field<?> f) {
|
||||
ctx.sql(' ');
|
||||
toSQLDDLTypeDeclarationForAddition(ctx, f.getDataType());
|
||||
CreateTableImpl.acceptColumnComment(ctx, f);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1331,6 +1332,7 @@ implements
|
||||
|
||||
ctx.qualify(false, c -> c.visit(Tools.uncollate(addColumn))).sql(' ');
|
||||
toSQLDDLTypeDeclarationForAddition(ctx, addColumnType);
|
||||
CreateTableImpl.acceptColumnComment(ctx, addColumn);
|
||||
|
||||
|
||||
|
||||
|
||||
@ -342,20 +342,20 @@ implements
|
||||
|
||||
|
||||
|
||||
private static final Set<SQLDialect> NO_SUPPORT_IF_NOT_EXISTS = SQLDialect.supportedBy(DERBY, FIREBIRD);
|
||||
private static final Set<SQLDialect> NO_SUPPORT_WITH_DATA = SQLDialect.supportedBy(H2, MARIADB, MYSQL, SQLITE);
|
||||
private static final Set<SQLDialect> NO_SUPPORT_CTAS_COLUMN_NAMES = SQLDialect.supportedBy(H2);
|
||||
private static final Set<SQLDialect> EMULATE_INDEXES_IN_BLOCK = SQLDialect.supportedBy(FIREBIRD, POSTGRES, YUGABYTEDB);
|
||||
private static final Set<SQLDialect> EMULATE_SOME_ENUM_TYPES_AS_CHECK = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, HSQLDB, POSTGRES, SQLITE, YUGABYTEDB);
|
||||
private static final Set<SQLDialect> EMULATE_STORED_ENUM_TYPES_AS_CHECK = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, HSQLDB, SQLITE);
|
||||
private static final Set<SQLDialect> REQUIRES_WITH_DATA = SQLDialect.supportedBy(HSQLDB);
|
||||
private static final Set<SQLDialect> WRAP_SELECT_IN_PARENS = SQLDialect.supportedBy(HSQLDB);
|
||||
private static final Set<SQLDialect> SUPPORT_TEMPORARY = SQLDialect.supportedBy(MARIADB, MYSQL, POSTGRES, YUGABYTEDB);
|
||||
private static final Set<SQLDialect> EMULATE_TABLE_COMMENT_IN_BLOCK = SQLDialect.supportedBy(FIREBIRD, POSTGRES, YUGABYTEDB);
|
||||
private static final Set<SQLDialect> EMULATE_COLUMN_COMMENT_IN_BLOCK = SQLDialect.supportedBy(FIREBIRD, POSTGRES, YUGABYTEDB);
|
||||
private static final Set<SQLDialect> REQUIRE_EXECUTE_IMMEDIATE = SQLDialect.supportedBy(FIREBIRD);
|
||||
private static final Set<SQLDialect> NO_SUPPORT_NULLABLE_PRIMARY_KEY = SQLDialect.supportedBy(MARIADB, MYSQL);
|
||||
private static final Set<SQLDialect> REQUIRE_NON_PK_COLUMNS = SQLDialect.supportedBy(IGNITE);
|
||||
static final Set<SQLDialect> NO_SUPPORT_IF_NOT_EXISTS = SQLDialect.supportedBy(DERBY, FIREBIRD);
|
||||
static final Set<SQLDialect> NO_SUPPORT_WITH_DATA = SQLDialect.supportedBy(H2, MARIADB, MYSQL, SQLITE);
|
||||
static final Set<SQLDialect> NO_SUPPORT_CTAS_COLUMN_NAMES = SQLDialect.supportedBy(H2);
|
||||
static final Set<SQLDialect> EMULATE_INDEXES_IN_BLOCK = SQLDialect.supportedBy(FIREBIRD, POSTGRES, YUGABYTEDB);
|
||||
static final Set<SQLDialect> EMULATE_SOME_ENUM_TYPES_AS_CHECK = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, HSQLDB, POSTGRES, SQLITE, YUGABYTEDB);
|
||||
static final Set<SQLDialect> EMULATE_STORED_ENUM_TYPES_AS_CHECK = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, HSQLDB, SQLITE);
|
||||
static final Set<SQLDialect> REQUIRES_WITH_DATA = SQLDialect.supportedBy(HSQLDB);
|
||||
static final Set<SQLDialect> WRAP_SELECT_IN_PARENS = SQLDialect.supportedBy(HSQLDB);
|
||||
static final Set<SQLDialect> SUPPORT_TEMPORARY = SQLDialect.supportedBy(MARIADB, MYSQL, POSTGRES, YUGABYTEDB);
|
||||
static final Set<SQLDialect> EMULATE_TABLE_COMMENT_IN_BLOCK = SQLDialect.supportedBy(FIREBIRD, POSTGRES, YUGABYTEDB);
|
||||
static final Set<SQLDialect> EMULATE_COLUMN_COMMENT_IN_BLOCK = SQLDialect.supportedBy(FIREBIRD, POSTGRES, YUGABYTEDB);
|
||||
static final Set<SQLDialect> REQUIRE_EXECUTE_IMMEDIATE = SQLDialect.supportedBy(FIREBIRD);
|
||||
static final Set<SQLDialect> NO_SUPPORT_NULLABLE_PRIMARY_KEY = SQLDialect.supportedBy(MARIADB, MYSQL);
|
||||
static final Set<SQLDialect> REQUIRE_NON_PK_COLUMNS = SQLDialect.supportedBy(IGNITE);
|
||||
|
||||
|
||||
|
||||
@ -522,11 +522,9 @@ implements
|
||||
if (select == null) {
|
||||
ctx.sql(' ');
|
||||
Tools.toSQLDDLTypeDeclarationForAddition(ctx, type);
|
||||
acceptColumnComment(ctx, field);
|
||||
}
|
||||
|
||||
if (!field.getComment().isEmpty() && !EMULATE_COLUMN_COMMENT_IN_BLOCK.contains(ctx.dialect()))
|
||||
ctx.sql(' ').visit(K_COMMENT).sql(' ').visit(inline(field.getComment()));
|
||||
|
||||
first = false;
|
||||
}
|
||||
|
||||
@ -595,6 +593,11 @@ implements
|
||||
}
|
||||
}
|
||||
|
||||
static void acceptColumnComment(Context<?> ctx, Field<?> field) {
|
||||
if (!field.getComment().isEmpty() && !EMULATE_COLUMN_COMMENT_IN_BLOCK.contains(ctx.dialect()))
|
||||
ctx.sql(' ').visit(K_COMMENT).sql(' ').visit(inline(field.getComment()));
|
||||
}
|
||||
|
||||
private final void toSQLDummyColumns(Context<?> ctx) {
|
||||
|
||||
// [#10551] [#11268] TODO: Make this behaviour configurable
|
||||
|
||||
Loading…
Reference in New Issue
Block a user