[jOOQ/jOOQ#9609] Add SQLDialect.H2_2_0_202

This commit is contained in:
Lukas Eder 2021-12-02 15:15:29 +01:00
parent 5ade54ae2b
commit 814bb5b142
53 changed files with 992 additions and 313 deletions

View File

@ -519,8 +519,6 @@ class GenerationUtil {
}
case H2:
return name(H2DataType.OTHER.getTypeName());
case HSQLDB:
default: {

View File

@ -2783,6 +2783,8 @@ public abstract class AbstractDatabase implements Database {
@Override
public final boolean isArrayType(String dataType) {
String upper = dataType.toUpperCase();
switch (getDialect().family()) {
@ -2793,17 +2795,19 @@ public abstract class AbstractDatabase implements Database {
case H2:
case POSTGRES:
case YUGABYTE:
return "ARRAY".equals(dataType.toUpperCase());
return "ARRAY".equals(upper);
case H2:
return "ARRAY".equals(upper) || upper.endsWith(" ARRAY");
case HSQLDB:
default:
// TODO: Is there any more robust way to recognise these?
// For instance, there could be a UDT that is called this way
return dataType.toUpperCase().endsWith(" ARRAY");
return upper.endsWith(" ARRAY");
}
}

View File

@ -37,7 +37,14 @@
*/
package org.jooq.meta.h2;
import static java.util.Arrays.asList;
import static org.jooq.Records.mapping;
import static org.jooq.SQLDialect.H2;
// ...
// ...
import static org.jooq.impl.DSL.arrayAgg;
import static org.jooq.impl.DSL.coalesce;
import static org.jooq.impl.DSL.concat;
import static org.jooq.impl.DSL.condition;
import static org.jooq.impl.DSL.falseCondition;
import static org.jooq.impl.DSL.field;
@ -46,6 +53,7 @@ import static org.jooq.impl.DSL.name;
import static org.jooq.impl.DSL.noCondition;
import static org.jooq.impl.DSL.not;
import static org.jooq.impl.DSL.nullif;
import static org.jooq.impl.DSL.nvl;
import static org.jooq.impl.DSL.one;
import static org.jooq.impl.DSL.select;
import static org.jooq.impl.DSL.upper;
@ -65,6 +73,13 @@ import static org.jooq.meta.h2.information_schema.Tables.SEQUENCES;
import static org.jooq.meta.h2.information_schema.Tables.TABLES;
import static org.jooq.meta.h2.information_schema.Tables.TYPE_INFO;
import static org.jooq.meta.h2.information_schema.Tables.VIEWS;
import static org.jooq.meta.hsqldb.information_schema.Tables.CHECK_CONSTRAINTS;
import static org.jooq.meta.hsqldb.information_schema.Tables.DOMAIN_CONSTRAINTS;
import static org.jooq.meta.hsqldb.information_schema.Tables.ELEMENT_TYPES;
import static org.jooq.meta.hsqldb.information_schema.Tables.KEY_COLUMN_USAGE;
import static org.jooq.meta.hsqldb.information_schema.Tables.REFERENTIAL_CONSTRAINTS;
import static org.jooq.meta.hsqldb.information_schema.Tables.ROUTINES;
import static org.jooq.meta.hsqldb.information_schema.Tables.TABLE_CONSTRAINTS;
import java.io.StringReader;
import java.math.BigDecimal;
@ -90,7 +105,6 @@ import org.jooq.Table;
import org.jooq.TableField;
import org.jooq.TableOptions.TableType;
import org.jooq.impl.DSL;
import org.jooq.impl.SQLDataType;
import org.jooq.meta.AbstractDatabase;
import org.jooq.meta.AbstractIndexDefinition;
import org.jooq.meta.ArrayDefinition;
@ -115,6 +129,12 @@ import org.jooq.meta.SchemaDefinition;
import org.jooq.meta.SequenceDefinition;
import org.jooq.meta.TableDefinition;
import org.jooq.meta.UDTDefinition;
import org.jooq.meta.hsqldb.information_schema.Tables;
import org.jooq.meta.hsqldb.information_schema.tables.CheckConstraints;
import org.jooq.meta.hsqldb.information_schema.tables.DomainConstraints;
import org.jooq.meta.hsqldb.information_schema.tables.Domains;
import org.jooq.meta.hsqldb.information_schema.tables.KeyColumnUsage;
import org.jooq.tools.JooqLogger;
import org.jooq.tools.StringUtils;
import org.jooq.tools.csv.CSVReader;
import org.jooq.util.h2.H2DataType;
@ -149,25 +169,7 @@ public class H2Database extends AbstractDatabase implements ResultQueryDatabase
List<IndexDefinition> result = new ArrayList<>();
// Same implementation as in HSQLDBDatabase and MySQLDatabase
Map<Record, Result<Record>> indexes = create()
.select(
INDEXES.TABLE_SCHEMA,
INDEXES.TABLE_NAME,
INDEXES.INDEX_NAME,
INDEXES.NON_UNIQUE,
INDEXES.COLUMN_NAME,
INDEXES.ORDINAL_POSITION,
INDEXES.ASC_OR_DESC)
.from(INDEXES)
.where(INDEXES.TABLE_SCHEMA.in(getInputSchemata()))
.and(getIncludeSystemIndexes()
? noCondition()
: not(condition(INDEXES.IS_GENERATED)))
.orderBy(
INDEXES.TABLE_SCHEMA,
INDEXES.TABLE_NAME,
INDEXES.INDEX_NAME,
INDEXES.ORDINAL_POSITION)
Map<Record, Result<Record>> indexes = indexes()
.fetchGroups(
new Field[] {
INDEXES.TABLE_SCHEMA,
@ -226,6 +228,61 @@ public class H2Database extends AbstractDatabase implements ResultQueryDatabase
return result;
}
private ResultQuery<?> indexes() {
if (is2_0_202())
return indexes2_0();
else
return indexes1_4();
}
private ResultQuery<?> indexes2_0() {
return create()
.select(
INDEXES.TABLE_SCHEMA,
INDEXES.TABLE_NAME,
INDEXES.INDEX_NAME,
field(field(INDEXES.getQualifiedName().append("INDEX_TYPE_NAME")).ne(inline("UNIQUE INDEX"))).as(INDEXES.NON_UNIQUE),
field("i.column_name", INDEXES.COLUMN_NAME).as(INDEXES.COLUMN_NAME),
field("i.ordinal_position", INDEXES.ORDINAL_POSITION).as(INDEXES.ORDINAL_POSITION),
field("i.ordering_specification", INDEXES.ASC_OR_DESC).as(INDEXES.ASC_OR_DESC))
.from(INDEXES)
.join("information_schema.index_columns i")
.on("{0} = i.table_schema", INDEXES.TABLE_SCHEMA)
.and("{0} = i.table_name", INDEXES.TABLE_NAME)
.and("{0} = i.index_name", INDEXES.INDEX_NAME)
.where(INDEXES.TABLE_SCHEMA.in(getInputSchemata()))
.and(getIncludeSystemIndexes()
? noCondition()
: not(condition(INDEXES.IS_GENERATED)))
.orderBy(
INDEXES.TABLE_SCHEMA,
INDEXES.TABLE_NAME,
INDEXES.INDEX_NAME,
field("i.ordinal_position"));
}
private ResultQuery<?> indexes1_4() {
return create()
.select(
INDEXES.TABLE_SCHEMA,
INDEXES.TABLE_NAME,
INDEXES.INDEX_NAME,
INDEXES.NON_UNIQUE,
INDEXES.COLUMN_NAME,
INDEXES.ORDINAL_POSITION,
INDEXES.ASC_OR_DESC)
.from(INDEXES)
.where(INDEXES.TABLE_SCHEMA.in(getInputSchemata()))
.and(getIncludeSystemIndexes()
? noCondition()
: not(condition(INDEXES.IS_GENERATED)))
.orderBy(
INDEXES.TABLE_SCHEMA,
INDEXES.TABLE_NAME,
INDEXES.INDEX_NAME,
INDEXES.ORDINAL_POSITION);
}
@Override
protected void loadPrimaryKeys(DefaultRelations relations) throws SQLException {
for (Record record : primaryKeys(getInputSchemata())) {
@ -263,16 +320,42 @@ public class H2Database extends AbstractDatabase implements ResultQueryDatabase
@Override
public ResultQuery<Record6<String, String, String, String, String, Integer>> primaryKeys(List<String> schemas) {
if (is2_0_202())
return keys2_0(schemas, Arrays.<Field<String>>asList(inline("PRIMARY KEY"), inline("PRIMARY_KEY")));
// Workaround for https://github.com/h2database/h2database/issues/1000
return keys(schemas, Arrays.<Field<String>>asList(inline("PRIMARY KEY"), inline("PRIMARY_KEY")));
else
return keys1_4(schemas, Arrays.<Field<String>>asList(inline("PRIMARY KEY"), inline("PRIMARY_KEY")));
}
@Override
public ResultQuery<Record6<String, String, String, String, String, Integer>> uniqueKeys(List<String> schemas) {
return keys(schemas, Arrays.<Field<String>>asList(inline("UNIQUE")));
if (is2_0_202())
return keys2_0(schemas, Arrays.<Field<String>>asList(inline("UNIQUE")));
else
return keys1_4(schemas, Arrays.<Field<String>>asList(inline("UNIQUE")));
}
private ResultQuery<Record6<String, String, String, String, String, Integer>> keys(List<String> schemas, List<Field<String>> constraintTypes) {
private ResultQuery<Record6<String, String, String, String, String, Integer>> keys2_0(List<String> schemas, List<Field<String>> constraintTypes) {
return create()
.select(
KEY_COLUMN_USAGE.TABLE_CATALOG,
KEY_COLUMN_USAGE.TABLE_SCHEMA,
KEY_COLUMN_USAGE.TABLE_NAME,
KEY_COLUMN_USAGE.CONSTRAINT_NAME,
KEY_COLUMN_USAGE.COLUMN_NAME,
KEY_COLUMN_USAGE.ORDINAL_POSITION.coerce(INTEGER))
.from(KEY_COLUMN_USAGE)
.where(KEY_COLUMN_USAGE.tableConstraints().CONSTRAINT_TYPE.in(constraintTypes))
.and(KEY_COLUMN_USAGE.tableConstraints().TABLE_SCHEMA.in(schemas))
.orderBy(
KEY_COLUMN_USAGE.TABLE_SCHEMA.asc(),
KEY_COLUMN_USAGE.TABLE_NAME.asc(),
KEY_COLUMN_USAGE.CONSTRAINT_NAME.asc(),
KEY_COLUMN_USAGE.ORDINAL_POSITION.asc());
}
private ResultQuery<Record6<String, String, String, String, String, Integer>> keys1_4(List<String> schemas, List<Field<String>> constraintTypes) {
return create().select(
CONSTRAINTS.TABLE_CATALOG,
CONSTRAINTS.TABLE_SCHEMA,
@ -295,6 +378,72 @@ public class H2Database extends AbstractDatabase implements ResultQueryDatabase
@Override
protected void loadForeignKeys(DefaultRelations relations) throws SQLException {
if (is2_0_202())
loadForeignKeys2_0(relations);
else
loadForeignKeys1_4(relations);
}
private void loadForeignKeys2_0(DefaultRelations relations) {
KeyColumnUsage fkKcu = KEY_COLUMN_USAGE.as("fk_kcu");
KeyColumnUsage pkKcu = KEY_COLUMN_USAGE.as("pk_kcu");
for (Record record : create()
.select(
REFERENTIAL_CONSTRAINTS.UNIQUE_CONSTRAINT_NAME,
REFERENTIAL_CONSTRAINTS.UNIQUE_CONSTRAINT_SCHEMA,
TABLE_CONSTRAINTS.TABLE_NAME,
fkKcu.CONSTRAINT_NAME,
fkKcu.TABLE_SCHEMA,
fkKcu.TABLE_NAME,
fkKcu.COLUMN_NAME,
pkKcu.COLUMN_NAME
)
.from(REFERENTIAL_CONSTRAINTS)
.join(fkKcu)
.on(fkKcu.CONSTRAINT_SCHEMA.equal(REFERENTIAL_CONSTRAINTS.CONSTRAINT_SCHEMA))
.and(fkKcu.CONSTRAINT_NAME.equal(REFERENTIAL_CONSTRAINTS.CONSTRAINT_NAME))
.join(TABLE_CONSTRAINTS)
.on(TABLE_CONSTRAINTS.CONSTRAINT_SCHEMA.eq(REFERENTIAL_CONSTRAINTS.UNIQUE_CONSTRAINT_SCHEMA))
.and(TABLE_CONSTRAINTS.CONSTRAINT_NAME.eq(REFERENTIAL_CONSTRAINTS.UNIQUE_CONSTRAINT_NAME))
.join(pkKcu)
.on(pkKcu.CONSTRAINT_SCHEMA.eq(TABLE_CONSTRAINTS.CONSTRAINT_SCHEMA))
.and(pkKcu.CONSTRAINT_NAME.eq(TABLE_CONSTRAINTS.CONSTRAINT_NAME))
.and(pkKcu.ORDINAL_POSITION.eq(fkKcu.POSITION_IN_UNIQUE_CONSTRAINT))
.where(fkKcu.TABLE_SCHEMA.in(getInputSchemata()))
.orderBy(
fkKcu.TABLE_SCHEMA.asc(),
fkKcu.TABLE_NAME.asc(),
fkKcu.CONSTRAINT_NAME.asc(),
fkKcu.ORDINAL_POSITION.asc())
) {
SchemaDefinition foreignKeySchema = getSchema(record.get(fkKcu.TABLE_SCHEMA));
SchemaDefinition uniqueKeySchema = getSchema(record.get(REFERENTIAL_CONSTRAINTS.UNIQUE_CONSTRAINT_SCHEMA));
String foreignKey = record.get(fkKcu.CONSTRAINT_NAME);
String foreignKeyTableName = record.get(fkKcu.TABLE_NAME);
String foreignKeyColumn = record.get(fkKcu.COLUMN_NAME);
String uniqueKey = record.get(REFERENTIAL_CONSTRAINTS.UNIQUE_CONSTRAINT_NAME);
String uniqueKeyTableName = record.get(TABLE_CONSTRAINTS.TABLE_NAME);
String uniqueKeyColumn = record.get(pkKcu.COLUMN_NAME);
TableDefinition foreignKeyTable = getTable(foreignKeySchema, foreignKeyTableName);
TableDefinition uniqueKeyTable = getTable(uniqueKeySchema, uniqueKeyTableName);
if (foreignKeyTable != null && uniqueKeyTable != null)
relations.addForeignKey(
foreignKey,
foreignKeyTable,
foreignKeyTable.getColumn(foreignKeyColumn),
uniqueKey,
uniqueKeyTable,
uniqueKeyTable.getColumn(uniqueKeyColumn),
true
);
}
}
private void loadForeignKeys1_4(DefaultRelations relations) {
for (Record record : create().select(
CROSS_REFERENCES.FK_NAME,
CROSS_REFERENCES.FKTABLE_NAME,
@ -345,10 +494,45 @@ public class H2Database extends AbstractDatabase implements ResultQueryDatabase
@Override
protected void loadCheckConstraints(DefaultRelations relations) throws SQLException {
if (is2_0_202())
loadCheckConstraints2_0(relations);
else
loadCheckConstraints1_4(relations);
}
private void loadCheckConstraints2_0(DefaultRelations relations) {
CheckConstraints cc = CHECK_CONSTRAINTS.as("cc");
for (Record record : create()
.select(
cc.tableConstraints().TABLE_SCHEMA,
cc.tableConstraints().TABLE_NAME,
cc.CONSTRAINT_NAME,
cc.CHECK_CLAUSE
)
.from(cc)
.where(cc.tableConstraints().TABLE_SCHEMA.in(getInputSchemata()))
) {
SchemaDefinition schema = getSchema(record.get(cc.tableConstraints().TABLE_SCHEMA));
TableDefinition table = getTable(schema, record.get(cc.tableConstraints().TABLE_NAME));
if (table != null) {
relations.addCheckConstraint(table, new DefaultCheckConstraintDefinition(
schema,
table,
record.get(cc.CONSTRAINT_NAME),
record.get(cc.CHECK_CLAUSE)
));
}
}
}
private void loadCheckConstraints1_4(DefaultRelations relations) {
// TODO [https://github.com/h2database/h2database/issues/2286]
// Starting from H2 1.4.201, we should no longer produce the below UNION
Select<Record4<String, String, String, String>> inlineChecks = is1_4_201()
Select<Record4<String, String, String, String>> inlineChecks = is2_0_202()
? select(inline(""), inline(""), inline(""), inline("")).where(falseCondition())
: select(
COLUMNS.TABLE_SCHEMA,
@ -406,6 +590,18 @@ public class H2Database extends AbstractDatabase implements ResultQueryDatabase
@Override
public ResultQuery<Record12<String, String, String, String, Integer, Integer, Long, Long, BigDecimal, BigDecimal, Boolean, Long>> sequences(List<String> schemas) {
Field<Long> minValue = is2_0_202()
? field(SEQUENCES.getQualifiedName().append("MINIMUM_VALUE"), SEQUENCES.MIN_VALUE.getDataType())
: SEQUENCES.MIN_VALUE;
Field<Long> maxValue = is2_0_202()
? field(SEQUENCES.getQualifiedName().append("MAXIMUM_VALUE"), SEQUENCES.MAX_VALUE.getDataType())
: SEQUENCES.MAX_VALUE;
Field<Boolean> isCycle = is2_0_202()
? field(field(SEQUENCES.getQualifiedName().append("CYCLE_OPTION")).eq(inline("YES")))
: SEQUENCES.IS_CYCLE;
return create()
.select(
inline(null, VARCHAR).as("catalog"),
@ -416,9 +612,9 @@ public class H2Database extends AbstractDatabase implements ResultQueryDatabase
inline(null, INTEGER).as("scale"),
inline(null, BIGINT).as("start_value"),
nullif(SEQUENCES.INCREMENT, inline(1L)).as(SEQUENCES.INCREMENT),
nullif(SEQUENCES.MIN_VALUE, inline(1L)).coerce(NUMERIC).as(SEQUENCES.MIN_VALUE),
nullif(SEQUENCES.MAX_VALUE, inline(DEFAULT_SEQUENCE_MAXVALUE)).coerce(NUMERIC).as(SEQUENCES.MAX_VALUE),
SEQUENCES.IS_CYCLE,
nullif(minValue, inline(1L)).coerce(NUMERIC).as(SEQUENCES.MIN_VALUE),
nullif(maxValue, inline(DEFAULT_SEQUENCE_MAXVALUE)).coerce(NUMERIC).as(SEQUENCES.MAX_VALUE),
isCycle.as(SEQUENCES.IS_CYCLE),
nullif(SEQUENCES.CACHE, inline(DEFAULT_SEQUENCE_CACHE)).as(SEQUENCES.CACHE)
)
.from(SEQUENCES)
@ -487,9 +683,12 @@ public class H2Database extends AbstractDatabase implements ResultQueryDatabase
.fetch(mapping(TableRecord::new))) {
SchemaDefinition schema = getSchema(r.schema);
String source = r.source;
if (source != null && !source.toLowerCase().startsWith("create"))
source = "create view \"" + r.table + "\" as " + source;
if (schema != null)
result.add(new H2TableDefinition(schema, r.table, r.comment, r.type, r.source));
result.add(new H2TableDefinition(schema, r.table, r.comment, r.type, source));
}
return result;
@ -497,6 +696,56 @@ public class H2Database extends AbstractDatabase implements ResultQueryDatabase
@Override
protected List<RoutineDefinition> getRoutines0() throws SQLException {
if (is2_0_202())
return getRoutines2_0();
else
return getRoutines1_4();
}
private List<RoutineDefinition> getRoutines2_0() {
List<RoutineDefinition> result = new ArrayList<>();
for (Record record : create()
.select(
ROUTINES.ROUTINE_SCHEMA,
ROUTINES.ROUTINE_NAME,
ROUTINES.SPECIFIC_NAME,
coalesce(
concat(ELEMENT_TYPES.DATA_TYPE, inline(" ARRAY")),
ROUTINES.DATA_TYPE,
when(ROUTINES.ROUTINE_TYPE.eq(inline("FUNCTION")), inline("RESULT_SET"))
).as(ROUTINES.DATA_TYPE),
ROUTINES.NUMERIC_PRECISION,
ROUTINES.NUMERIC_SCALE)
.from(ROUTINES)
.leftOuterJoin(ELEMENT_TYPES)
.on(ROUTINES.ROUTINE_SCHEMA.equal(ELEMENT_TYPES.OBJECT_SCHEMA))
.and(ROUTINES.ROUTINE_NAME.equal(ELEMENT_TYPES.OBJECT_NAME))
.and(ROUTINES.DTD_IDENTIFIER.equal(ELEMENT_TYPES.COLLECTION_TYPE_IDENTIFIER))
.where(ROUTINES.ROUTINE_SCHEMA.in(getInputSchemata()))
.and(tableValuedFunctions()
? ROUTINES.DATA_TYPE.isNull().or(ROUTINES.DATA_TYPE.notLike(inline("ROW(%")))
: noCondition())
.orderBy(
ROUTINES.ROUTINE_SCHEMA,
ROUTINES.ROUTINE_NAME)
) {
result.add(new H2RoutineDefinition(
getSchema(record.get(ROUTINES.ROUTINE_SCHEMA)),
record.get(ROUTINES.ROUTINE_NAME),
record.get(ROUTINES.SPECIFIC_NAME),
record.get(ROUTINES.DATA_TYPE),
record.get(ROUTINES.NUMERIC_PRECISION),
record.get(ROUTINES.NUMERIC_SCALE),
null,
null
));
}
return result;
}
private List<RoutineDefinition> getRoutines1_4() {
List<RoutineDefinition> result = new ArrayList<>();
Field<Boolean> overloaded = field(select(field(DSL.exists(
@ -541,7 +790,7 @@ public class H2Database extends AbstractDatabase implements ResultQueryDatabase
? record.get(FUNCTION_ALIASES.COLUMN_COUNT, String.class)
: null;
result.add(new H2RoutineDefinition(schema, name, comment, typeName, precision, scale, overload));
result.add(new H2RoutineDefinition(schema, name, null, typeName, precision, scale, comment, overload));
}
}
@ -558,18 +807,69 @@ public class H2Database extends AbstractDatabase implements ResultQueryDatabase
protected List<EnumDefinition> getEnums0() throws SQLException {
List<EnumDefinition> result = new ArrayList<>();
if (!is1_4_197())
if (!is1_4_197() && !is2_0_202())
return result;
getInlineEnums(result);
getDomainEnums(result);
if (is2_0_202()) {
getInlineEnums2_0(result);
getDomainEnums2_0(result);
}
else {
getInlineEnums1_4(result);
getDomainEnums1_4(result);
}
return result;
}
private void getInlineEnums2_0(List<EnumDefinition> result) {
// TODO: Re-generate the H2 schema and use generated code to run this query
create().resultQuery(("" +
"select c.TABLE_SCHEMA , c.TABLE_NAME , c.COLUMN_NAME , array_agg(ev.value_name order by ev.VALUE_ORDINAL)\n" +
"from INFORMATION_SCHEMA.ENUM_VALUES ev\n" +
"join information_schema.columns c\n" +
"on ev.OBJECT_SCHEMA = c.TABLE_SCHEMA\n" +
"and ev.OBJECT_NAME = c.TABLE_NAME\n" +
"and ev.ENUM_IDENTIFIER = c.DTD_IDENTIFIER\n" +
"where ev.OBJECT_TYPE = 'TABLE'\n" +
"and c.DOMAIN_NAME IS NULL\n" +
"group by c.TABLE_SCHEMA , c.TABLE_NAME , c.COLUMN_NAME\n" +
"order by 1, 2, 3\n" +
""))
.coerce(COLUMNS.TABLE_SCHEMA, COLUMNS.TABLE_NAME, COLUMNS.COLUMN_NAME, arrayAgg(COLUMNS.COLUMN_NAME))
.forEach(r -> {
SchemaDefinition schema = getSchema(r.value1());
if (schema == null)
return;
// [#1237] Don't generate enum classes for columns in MySQL tables
// that are excluded from code generation
TableDefinition tableDefinition = getTable(schema, r.value2());
if (tableDefinition != null) {
ColumnDefinition columnDefinition = tableDefinition.getColumn(r.value3());
if (columnDefinition != null) {
// [#1137] Avoid generating enum classes for enum types that
// are explicitly forced to another type
if (getConfiguredForcedType(columnDefinition, columnDefinition.getType()) == null) {
String name = r.value2() + "_" + r.value3();
DefaultEnumDefinition definition = new DefaultEnumDefinition(schema, name, "");
for (String string : r.value4())
definition.addLiteral(string);
result.add(definition);
}
}
}
});
}
static final /* record */ class EnumRecord { private final String schema; private final String table; private final String column; private final String type; public EnumRecord(String schema, String table, String column, String type) { this.schema = schema; this.table = table; this.column = column; this.type = type; } public String schema() { return schema; } public String table() { return table; } public String column() { return column; } public String type() { return type; } @Override public boolean equals(Object o) { if (!(o instanceof EnumRecord)) return false; EnumRecord other = (EnumRecord) o; if (!java.util.Objects.equals(this.schema, other.schema)) return false; if (!java.util.Objects.equals(this.table, other.table)) return false; if (!java.util.Objects.equals(this.column, other.column)) return false; if (!java.util.Objects.equals(this.type, other.type)) return false; return true; } @Override public int hashCode() { return java.util.Objects.hash(this.schema, this.table, this.column, this.type); } @Override public String toString() { return new StringBuilder("EnumRecord[").append("schema=").append(this.schema).append(", table=").append(this.table).append(", column=").append(this.column).append(", type=").append(this.type).append("]").toString(); } }
private void getInlineEnums(List<EnumDefinition> result) {
private void getInlineEnums1_4(List<EnumDefinition> result) {
enumLoop:
for (EnumRecord r : create()
@ -592,11 +892,10 @@ public class H2Database extends AbstractDatabase implements ResultQueryDatabase
if (schema == null)
continue enumLoop;
String name = r.table + "_" + r.column;
// [#1237] Don't generate enum classes for columns in MySQL tables
// that are excluded from code generation
TableDefinition tableDefinition = getTable(schema, r.table);
if (tableDefinition != null) {
ColumnDefinition columnDefinition = tableDefinition.getColumn(r.column);
@ -605,6 +904,7 @@ public class H2Database extends AbstractDatabase implements ResultQueryDatabase
// [#1137] Avoid generating enum classes for enum types that
// are explicitly forced to another type
if (getConfiguredForcedType(columnDefinition, columnDefinition.getType()) == null) {
String name = r.table + "_" + r.column;
DefaultEnumDefinition definition = new DefaultEnumDefinition(schema, name, "");
CSVReader reader = new CSVReader(
@ -624,9 +924,34 @@ public class H2Database extends AbstractDatabase implements ResultQueryDatabase
}
}
private void getDomainEnums2_0(List<EnumDefinition> result) {
// TODO: Re-generate the H2 schema and use generated code to run this query
create().resultQuery(("" +
"select object_schema, object_name, array_agg(ev.value_name order by ev.VALUE_ORDINAL)\n" +
"from INFORMATION_SCHEMA.ENUM_VALUES ev\n" +
"where ev.OBJECT_TYPE = 'DOMAIN'\n" +
"group by object_schema, object_name\n" +
"order by 1, 2\n" +
""))
.coerce(COLUMNS.TABLE_SCHEMA, COLUMNS.TABLE_NAME, arrayAgg(COLUMNS.COLUMN_NAME))
.forEach(r -> {
SchemaDefinition schema = getSchema(r.value1());
if (schema == null)
return;
DefaultEnumDefinition definition = new DefaultEnumDefinition(schema, r.value2(), "");
for (String string : r.value3())
definition.addLiteral(string);
result.add(definition);
});
}
static final /* record */ class DomainRecord { private final String schema; private final String name; private final String sql; public DomainRecord(String schema, String name, String sql) { this.schema = schema; this.name = name; this.sql = sql; } public String schema() { return schema; } public String name() { return name; } public String sql() { return sql; } @Override public boolean equals(Object o) { if (!(o instanceof DomainRecord)) return false; DomainRecord other = (DomainRecord) o; if (!java.util.Objects.equals(this.schema, other.schema)) return false; if (!java.util.Objects.equals(this.name, other.name)) return false; if (!java.util.Objects.equals(this.sql, other.sql)) return false; return true; } @Override public int hashCode() { return java.util.Objects.hash(this.schema, this.name, this.sql); } @Override public String toString() { return new StringBuilder("DomainRecord[").append("schema=").append(this.schema).append(", name=").append(this.name).append(", sql=").append(this.sql).append("]").toString(); } }
private void getDomainEnums(List<EnumDefinition> result) {
private void getDomainEnums1_4(List<EnumDefinition> result) {
enumLoop:
for (DomainRecord r : create()
@ -664,25 +989,85 @@ public class H2Database extends AbstractDatabase implements ResultQueryDatabase
@Override
protected List<DomainDefinition> getDomains0() throws SQLException {
if (is2_0_202())
return getDomains2_0();
else
return getDomains1_4();
}
private List<DomainDefinition> getDomains2_0() {
List<DomainDefinition> result = new ArrayList<>();
Domains d = Tables.DOMAINS.as("d");
DomainConstraints dc = DOMAIN_CONSTRAINTS.as("dc");
for (Record record : create()
.select(
DOMAINS.DOMAIN_SCHEMA,
DOMAINS.DOMAIN_NAME,
DOMAINS.TYPE_NAME,
DOMAINS.PRECISION,
DOMAINS.SCALE,
DOMAINS.IS_NULLABLE,
DOMAINS.COLUMN_DEFAULT,
DOMAINS.CHECK_CONSTRAINT)
.from(DOMAINS)
.where(DOMAINS.DOMAIN_SCHEMA.in(getInputSchemata()))
// [#7917] Starting from 1.4.198, ENUM types are stored as domains
.and(DOMAINS.TYPE_NAME.ne(inline("ENUM")))
.orderBy(DOMAINS.DOMAIN_SCHEMA, DOMAINS.DOMAIN_NAME)
d.DOMAIN_SCHEMA,
d.DOMAIN_NAME,
d.DATA_TYPE,
d.CHARACTER_MAXIMUM_LENGTH,
coalesce(d.DATETIME_PRECISION, d.NUMERIC_PRECISION).as(d.NUMERIC_PRECISION),
d.NUMERIC_SCALE,
d.DOMAIN_DEFAULT,
dc.checkConstraints().CHECK_CLAUSE)
.from(d)
.leftJoin(dc)
.on(d.DOMAIN_CATALOG.eq(dc.DOMAIN_CATALOG))
.and(d.DOMAIN_SCHEMA.eq(dc.DOMAIN_SCHEMA))
.and(d.DOMAIN_NAME.eq(dc.DOMAIN_NAME))
.where(d.DOMAIN_SCHEMA.in(getInputSchemata()))
.and(d.DATA_TYPE.ne(inline("ENUM")))
.orderBy(d.DOMAIN_SCHEMA, d.DOMAIN_NAME)
) {
SchemaDefinition schema = getSchema(record.get(d.DOMAIN_SCHEMA));
DataTypeDefinition baseType = new DefaultDataTypeDefinition(
this,
schema,
record.get(d.DATA_TYPE),
record.get(d.CHARACTER_MAXIMUM_LENGTH),
record.get(d.NUMERIC_PRECISION),
record.get(d.NUMERIC_SCALE),
true,
record.get(d.DOMAIN_DEFAULT)
);
DefaultDomainDefinition domain = new DefaultDomainDefinition(
schema,
record.get(d.DOMAIN_NAME),
baseType
);
if (!StringUtils.isBlank(record.get(dc.checkConstraints().CHECK_CLAUSE)))
domain.addCheckClause(record.get(dc.checkConstraints().CHECK_CLAUSE));
result.add(domain);
}
return result;
}
private List<DomainDefinition> getDomains1_4() {
List<DomainDefinition> result = new ArrayList<>();
for (Record record : create()
.select(
DOMAINS.DOMAIN_SCHEMA,
DOMAINS.DOMAIN_NAME,
DOMAINS.TYPE_NAME,
DOMAINS.PRECISION,
DOMAINS.SCALE,
DOMAINS.IS_NULLABLE,
DOMAINS.COLUMN_DEFAULT,
DOMAINS.CHECK_CONSTRAINT)
.from(DOMAINS)
.where(DOMAINS.DOMAIN_SCHEMA.in(getInputSchemata()))
// [#7917] Starting from 1.4.198, ENUM types are stored as domains
.and(DOMAINS.TYPE_NAME.ne(inline("ENUM")))
.orderBy(DOMAINS.DOMAIN_SCHEMA, DOMAINS.DOMAIN_NAME)) {
// [#7644] [#11721] H2 puts DATETIME_PRECISION in NUMERIC_SCALE column
boolean isTimestamp = record.get(DOMAINS.TYPE_NAME).trim().toLowerCase().startsWith("timestamp");
@ -732,13 +1117,13 @@ public class H2Database extends AbstractDatabase implements ResultQueryDatabase
private Boolean is1_4_197;
private Boolean is1_4_198;
private Boolean is1_4_201;
private Boolean is2_0_202;
boolean is1_4_197() {
// [#5874] The COLUMNS.COLUMN_TYPE column was introduced in H2 1.4.197
// [#5874] The COLUMNS.COLUMN_TYPE column was introduced in H2 1.4.197 but removed again in H2 2.0.202
if (is1_4_197 == null)
is1_4_197 = exists(COLUMNS.COLUMN_TYPE);
is1_4_197 = configuredDialectIsNotFamilyAndSupports(asList(H2), () -> exists(COLUMNS.COLUMN_TYPE));
return is1_4_197;
}
@ -747,18 +1132,17 @@ public class H2Database extends AbstractDatabase implements ResultQueryDatabase
// [#5874] The COLUMNS.IS_VISIBLE column was introduced in H2 1.4.198
if (is1_4_198 == null)
is1_4_198 = exists(COLUMNS.IS_VISIBLE);
is1_4_198 = configuredDialectIsNotFamilyAndSupports(asList(H2), () -> exists(COLUMNS.IS_VISIBLE));
return is1_4_198;
}
boolean is1_4_201() {
boolean is2_0_202() {
// [https://github.com/h2database/h2database/issues/2286]
// The COLUMNS.CHECK_CONSTRAINT column was removed backwards incompatibly in H2 1.4.201
if (is1_4_201 == null)
is1_4_201 = !exists(COLUMNS.CHECK_CONSTRAINT);
// [#9609] The view was removed in H2 2.0: https://github.com/h2database/h2database/issues/2286
if (is2_0_202 == null)
is2_0_202 = configuredDialectIsNotFamilyAndSupports(asList(H2), () -> !exists(CONSTRAINTS));
return is1_4_201;
return is2_0_202;
}
}

View File

@ -38,12 +38,21 @@
package org.jooq.meta.h2;
import static org.jooq.impl.DSL.concat;
import static org.jooq.impl.DSL.condition;
import static org.jooq.impl.DSL.inline;
import static org.jooq.impl.DSL.noCondition;
import static org.jooq.impl.DSL.nvl;
import static org.jooq.impl.DSL.val;
import static org.jooq.meta.h2.information_schema.Tables.FUNCTION_COLUMNS;
import static org.jooq.meta.hsqldb.information_schema.Tables.ELEMENT_TYPES;
import static org.jooq.meta.hsqldb.information_schema.Tables.PARAMETERS;
import static org.jooq.meta.hsqldb.information_schema.Tables.ROUTINES;
import java.sql.SQLException;
import org.jooq.Record;
import org.jooq.Result;
import org.jooq.meta.AbstractRoutineDefinition;
import org.jooq.meta.DataTypeDefinition;
import org.jooq.meta.DefaultDataTypeDefinition;
@ -62,18 +71,16 @@ import org.jooq.util.h2.H2DataType;
*/
public class H2RoutineDefinition extends AbstractRoutineDefinition {
public H2RoutineDefinition(SchemaDefinition schema, String name, String comment, String typeName, Number precision, Number scale) {
this(schema, name, comment, typeName, precision, scale, null);
}
private final String specificName; // internal name for the function used by H2
public H2RoutineDefinition(SchemaDefinition schema, String name, String comment, String typeName, Number precision, Number scale, String overload) {
public H2RoutineDefinition(SchemaDefinition schema, String name, String specificName, String dataType, Number precision, Number scale, String comment, String overload) {
super(schema, null, name, comment, overload);
if (!StringUtils.isBlank(typeName)) {
if (!StringUtils.isBlank(dataType)) {
DataTypeDefinition type = new DefaultDataTypeDefinition(
getDatabase(),
schema,
typeName,
dataType,
precision,
precision,
scale,
@ -83,10 +90,65 @@ public class H2RoutineDefinition extends AbstractRoutineDefinition {
this.returnValue = new DefaultParameterDefinition(this, "RETURN_VALUE", -1, type);
}
this.specificName = specificName;
}
@Override
protected void init0() throws SQLException {
if (((H2Database) getDatabase()).is2_0_202())
init2_0();
else
init1_4();
}
private void init2_0() {
Result<?> result = create().select(
PARAMETERS.PARAMETER_MODE,
PARAMETERS.PARAMETER_NAME,
nvl(concat(ELEMENT_TYPES.DATA_TYPE, inline(" ARRAY")), PARAMETERS.DATA_TYPE).as(PARAMETERS.DATA_TYPE),
nvl(ELEMENT_TYPES.CHARACTER_MAXIMUM_LENGTH, PARAMETERS.CHARACTER_MAXIMUM_LENGTH).as(PARAMETERS.CHARACTER_MAXIMUM_LENGTH),
nvl(ELEMENT_TYPES.NUMERIC_PRECISION, PARAMETERS.NUMERIC_PRECISION).as(PARAMETERS.NUMERIC_PRECISION),
nvl(ELEMENT_TYPES.NUMERIC_SCALE, PARAMETERS.NUMERIC_SCALE).as(PARAMETERS.NUMERIC_SCALE),
PARAMETERS.ORDINAL_POSITION)
.from(PARAMETERS)
.join(ROUTINES)
.on(PARAMETERS.SPECIFIC_SCHEMA.eq(ROUTINES.SPECIFIC_SCHEMA))
.and(PARAMETERS.SPECIFIC_NAME.eq(ROUTINES.SPECIFIC_NAME))
.leftJoin(ELEMENT_TYPES)
.on(PARAMETERS.SPECIFIC_SCHEMA.eq(ELEMENT_TYPES.OBJECT_SCHEMA))
.and(PARAMETERS.SPECIFIC_NAME.eq(ELEMENT_TYPES.OBJECT_NAME))
.and(PARAMETERS.DTD_IDENTIFIER.eq(ELEMENT_TYPES.COLLECTION_TYPE_IDENTIFIER))
.where(PARAMETERS.SPECIFIC_SCHEMA.eq(getSchema().getName()))
.and(PARAMETERS.SPECIFIC_NAME.eq(specificName))
.orderBy(PARAMETERS.ORDINAL_POSITION.asc()).fetch();
for (Record record : result) {
String inOut = record.get(PARAMETERS.PARAMETER_MODE);
DataTypeDefinition type = new DefaultDataTypeDefinition(
getDatabase(),
getSchema(),
record.get(PARAMETERS.DATA_TYPE),
record.get(PARAMETERS.CHARACTER_MAXIMUM_LENGTH),
record.get(PARAMETERS.NUMERIC_PRECISION),
record.get(PARAMETERS.NUMERIC_SCALE),
null,
(String) null
);
ParameterDefinition parameter = new DefaultParameterDefinition(
this,
record.get(PARAMETERS.PARAMETER_NAME).replaceAll("@", ""),
record.get(PARAMETERS.ORDINAL_POSITION, int.class),
type
);
addParameter(InOutDefinition.getFromString(inOut), parameter);
}
}
private void init1_4() {
for (Record record : create()
.select(
FUNCTION_COLUMNS.COLUMN_NAME,

View File

@ -39,28 +39,39 @@ package org.jooq.meta.h2;
import static org.jooq.impl.DSL.any;
import static org.jooq.impl.DSL.choose;
import static org.jooq.impl.DSL.coalesce;
import static org.jooq.impl.DSL.concat;
import static org.jooq.impl.DSL.condition;
import static org.jooq.impl.DSL.field;
import static org.jooq.impl.DSL.inline;
import static org.jooq.impl.DSL.name;
import static org.jooq.impl.DSL.noCondition;
import static org.jooq.impl.DSL.nvl;
import static org.jooq.impl.DSL.when;
import static org.jooq.impl.DSL.zero;
import static org.jooq.impl.SQLDataType.BOOLEAN;
import static org.jooq.impl.SQLDataType.INTEGER;
import static org.jooq.meta.h2.information_schema.Tables.COLUMNS;
import static org.jooq.meta.hsqldb.information_schema.Tables.ELEMENT_TYPES;
import static org.jooq.tools.StringUtils.defaultString;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.jooq.Field;
import org.jooq.Name;
import org.jooq.Param;
import org.jooq.Record;
import org.jooq.Table;
import org.jooq.TableOptions.TableType;
import org.jooq.meta.AbstractTableDefinition;
import org.jooq.meta.ColumnDefinition;
import org.jooq.meta.DataTypeDefinition;
import org.jooq.meta.Database;
import org.jooq.meta.DefaultColumnDefinition;
import org.jooq.meta.DefaultDataTypeDefinition;
import org.jooq.meta.SchemaDefinition;
import org.jooq.meta.hsqldb.information_schema.Tables;
/**
* H2 table definition
@ -78,64 +89,163 @@ public class H2TableDefinition extends AbstractTableDefinition {
super(schema, name, comment, tableType, source);
}
final H2Database getH2Database() {
return (H2Database) super.getDatabase();
}
@Override
public List<ColumnDefinition> getElements0() throws SQLException {
if (getH2Database().is2_0_202())
return getElements2_0();
else
return getElements1_4();
}
public List<ColumnDefinition> getElements2_0() {
List<ColumnDefinition> result = new ArrayList<>();
// [#7206] H2 defaults to these precision/scale values when a DECIMAL/NUMERIC type
// does not have any precision/scale. What works in H2 works in almost no
// other database, which is relevant when using the DDLDatabase for instance,
// which is based on the H2Database
Param<Integer> maxP = inline(65535);
Param<Integer> maxS = inline(32767);
H2Database db = (H2Database) getDatabase();
for (Record record : create().select(
COLUMNS.COLUMN_NAME,
COLUMNS.ORDINAL_POSITION,
// [#2230] [#11733] Translate INTERVAL_TYPE to supported types
(((H2Database) getDatabase()).is1_4_198()
? (when(COLUMNS.INTERVAL_TYPE.like(any(inline("%YEAR%"), inline("%MONTH%"))), inline("INTERVAL YEAR TO MONTH"))
nvl(concat(ELEMENT_TYPES.DATA_TYPE, inline(" ARRAY")),
when(COLUMNS.INTERVAL_TYPE.like(any(inline("%YEAR%"), inline("%MONTH%"))), inline("INTERVAL YEAR TO MONTH"))
.when(COLUMNS.INTERVAL_TYPE.like(any(inline("%DAY%"), inline("%HOUR%"), inline("%MINUTE%"), inline("%SECOND%"))), inline("INTERVAL DAY TO SECOND"))
.else_(COLUMNS.TYPE_NAME))
: COLUMNS.TYPE_NAME
.else_(Tables.COLUMNS.DATA_TYPE)
).as(COLUMNS.TYPE_NAME),
(((H2Database) getDatabase()).is1_4_197()
? COLUMNS.COLUMN_TYPE
: COLUMNS.TYPE_NAME
).as(COLUMNS.COLUMN_TYPE),
choose().when(COLUMNS.NUMERIC_PRECISION.eq(maxP).and(COLUMNS.NUMERIC_SCALE.eq(maxS)), zero())
.otherwise(COLUMNS.CHARACTER_MAXIMUM_LENGTH).as(COLUMNS.CHARACTER_MAXIMUM_LENGTH),
COLUMNS.NUMERIC_PRECISION.decode(maxP, zero(), COLUMNS.NUMERIC_PRECISION).as(COLUMNS.NUMERIC_PRECISION),
COLUMNS.NUMERIC_SCALE.decode(maxS, zero(), COLUMNS.NUMERIC_SCALE).as(COLUMNS.NUMERIC_SCALE),
nvl(ELEMENT_TYPES.CHARACTER_MAXIMUM_LENGTH, COLUMNS.CHARACTER_MAXIMUM_LENGTH).as(COLUMNS.CHARACTER_MAXIMUM_LENGTH),
coalesce(
ELEMENT_TYPES.DATETIME_PRECISION,
ELEMENT_TYPES.NUMERIC_PRECISION,
COLUMNS.DATETIME_PRECISION,
COLUMNS.NUMERIC_PRECISION).as(COLUMNS.NUMERIC_PRECISION),
nvl(ELEMENT_TYPES.NUMERIC_SCALE, COLUMNS.NUMERIC_SCALE).as(COLUMNS.NUMERIC_SCALE),
COLUMNS.IS_NULLABLE,
COLUMNS.IS_COMPUTED,
field(Tables.COLUMNS.IS_GENERATED.eq(inline("ALWAYS"))).as(COLUMNS.IS_COMPUTED),
Tables.COLUMNS.GENERATION_EXPRESSION,
COLUMNS.COLUMN_DEFAULT,
COLUMNS.REMARKS,
COLUMNS.SEQUENCE_NAME,
((H2Database) getDatabase()).is1_4_198() ? COLUMNS.DOMAIN_SCHEMA : inline("").as(COLUMNS.DOMAIN_SCHEMA),
((H2Database) getDatabase()).is1_4_198() ? COLUMNS.DOMAIN_NAME : inline("").as(COLUMNS.DOMAIN_NAME)
field(Tables.COLUMNS.IS_IDENTITY.eq(inline("YES"))).as(Tables.COLUMNS.IS_IDENTITY),
COLUMNS.DOMAIN_SCHEMA,
COLUMNS.DOMAIN_NAME
)
.from(COLUMNS)
.leftJoin(ELEMENT_TYPES)
.on(Tables.COLUMNS.TABLE_SCHEMA.equal(ELEMENT_TYPES.OBJECT_SCHEMA))
.and(Tables.COLUMNS.TABLE_NAME.equal(ELEMENT_TYPES.OBJECT_NAME))
.and(Tables.COLUMNS.DTD_IDENTIFIER.equal(ELEMENT_TYPES.COLLECTION_TYPE_IDENTIFIER))
.where(COLUMNS.TABLE_SCHEMA.equal(getSchema().getName()))
.and(COLUMNS.TABLE_NAME.equal(getName()))
.and(!getDatabase().getIncludeInvisibleColumns()
? ((H2Database) getDatabase()).is1_4_198()
? COLUMNS.IS_VISIBLE.eq(inline("TRUE"))
: COLUMNS.COLUMN_TYPE.notLike(inline("%INVISIBLE%"))
? condition(COLUMNS.IS_VISIBLE.coerce(BOOLEAN))
: noCondition())
.orderBy(COLUMNS.ORDINAL_POSITION)) {
.orderBy(COLUMNS.ORDINAL_POSITION)
) {
// [#5331] AUTO_INCREMENT (MySQL style)
// [#5331] DEFAULT nextval('sequence') (PostgreSQL style)
// [#6332] [#6339] system-generated defaults shouldn't produce a default clause
boolean isIdentity =
null != record.get(COLUMNS.SEQUENCE_NAME)
record.get(Tables.COLUMNS.IS_IDENTITY, boolean.class)
|| defaultString(record.get(COLUMNS.COLUMN_DEFAULT)).trim().toLowerCase().startsWith("nextval");
boolean isComputed = record.get(COLUMNS.IS_COMPUTED, boolean.class);
// [#7644] H2 puts DATETIME_PRECISION in NUMERIC_SCALE column
// [#681] Domain name if available
Name userType = record.get(COLUMNS.DOMAIN_NAME) != null
? name(record.get(COLUMNS.DOMAIN_SCHEMA), record.get(COLUMNS.DOMAIN_NAME))
: name(getSchema().getName(), getName() + "_" + record.get(COLUMNS.COLUMN_NAME));
DataTypeDefinition type = new DefaultDataTypeDefinition(
getDatabase(),
getSchema(),
record.get(COLUMNS.TYPE_NAME),
record.get(COLUMNS.CHARACTER_MAXIMUM_LENGTH),
record.get(COLUMNS.NUMERIC_PRECISION),
record.get(COLUMNS.NUMERIC_SCALE),
record.get(COLUMNS.IS_NULLABLE, boolean.class),
isIdentity || isComputed ? null : record.get(COLUMNS.COLUMN_DEFAULT),
userType
).generatedAlwaysAs(isComputed ? record.get(Tables.COLUMNS.GENERATION_EXPRESSION) : null);
result.add(new DefaultColumnDefinition(
getDatabase().getTable(getSchema(), getName()),
record.get(COLUMNS.COLUMN_NAME),
result.size() + 1,
type,
isIdentity,
record.get(COLUMNS.REMARKS))
);
}
return result;
}
public List<ColumnDefinition> getElements1_4() {
List<ColumnDefinition> result = new ArrayList<>();
// [#7206] H2 defaults to these precision/scale values when a DECIMAL/NUMERIC type
// does not have any precision/scale. What works in H2 works in almost no
// other database, which is relevant when using the DDLDatabase for instance,
// which is based on the H2Database
Param<Long> maxP = inline(65535L);
Param<Long> maxS = inline(32767L);
H2Database db = (H2Database) getDatabase();
Field<String> columnsDataType =
db.is1_4_197()
? COLUMNS.COLUMN_TYPE
: COLUMNS.TYPE_NAME;
for (Record record : create().select(
COLUMNS.COLUMN_NAME,
COLUMNS.ORDINAL_POSITION,
// [#2230] [#11733] Translate INTERVAL_TYPE to supported types
(db.is1_4_198()
? (when(COLUMNS.INTERVAL_TYPE.like(any(inline("%YEAR%"), inline("%MONTH%"))), inline("INTERVAL YEAR TO MONTH"))
.when(COLUMNS.INTERVAL_TYPE.like(any(inline("%DAY%"), inline("%HOUR%"), inline("%MINUTE%"), inline("%SECOND%"))), inline("INTERVAL DAY TO SECOND"))
.else_(columnsDataType))
: columnsDataType
).as(COLUMNS.TYPE_NAME),
columnsDataType.as(COLUMNS.COLUMN_TYPE),
choose().when(COLUMNS.NUMERIC_PRECISION.eq(maxP).and(COLUMNS.NUMERIC_SCALE.eq(maxS)), inline(0L))
.otherwise(COLUMNS.CHARACTER_MAXIMUM_LENGTH).as(COLUMNS.CHARACTER_MAXIMUM_LENGTH),
COLUMNS.NUMERIC_PRECISION.decode(maxP, inline(0L), COLUMNS.NUMERIC_PRECISION).as(COLUMNS.NUMERIC_PRECISION),
COLUMNS.NUMERIC_SCALE.decode(maxS, inline(0L), COLUMNS.NUMERIC_SCALE).as(COLUMNS.NUMERIC_SCALE),
COLUMNS.IS_NULLABLE,
COLUMNS.IS_COMPUTED.as(COLUMNS.IS_COMPUTED),
COLUMNS.COLUMN_DEFAULT.as("GENERATION_EXPRESSION"),
COLUMNS.COLUMN_DEFAULT,
COLUMNS.REMARKS,
field(COLUMNS.SEQUENCE_NAME.isNotNull()).as("IS_IDENTITY"),
db.is1_4_198() ? COLUMNS.DOMAIN_SCHEMA : inline("").as(COLUMNS.DOMAIN_SCHEMA),
db.is1_4_198() ? COLUMNS.DOMAIN_NAME : inline("").as(COLUMNS.DOMAIN_NAME)
)
.from(COLUMNS)
.where(COLUMNS.TABLE_SCHEMA.equal(getSchema().getName()))
.and(COLUMNS.TABLE_NAME.equal(getName()))
.and(!getDatabase().getIncludeInvisibleColumns()
? db.is1_4_198()
? COLUMNS.IS_VISIBLE.eq(inline("TRUE"))
: COLUMNS.COLUMN_TYPE.notLike(inline("%INVISIBLE%"))
: noCondition())
.orderBy(COLUMNS.ORDINAL_POSITION)
) {
// [#5331] AUTO_INCREMENT (MySQL style)
// [#5331] DEFAULT nextval('sequence') (PostgreSQL style)
// [#6332] [#6339] system-generated defaults shouldn't produce a default clause
boolean isIdentity =
record.get("IS_IDENTITY", boolean.class)
|| defaultString(record.get(COLUMNS.COLUMN_DEFAULT)).trim().toLowerCase().startsWith("nextval");
boolean isComputed = record.get(COLUMNS.IS_COMPUTED, boolean.class);
// [#7644] H2 1.4.200 puts DATETIME_PRECISION in NUMERIC_SCALE column
boolean isTimestamp = record.get(COLUMNS.TYPE_NAME).trim().toLowerCase().startsWith("timestamp");
// [#681] Domain name if available
@ -157,10 +267,10 @@ public class H2TableDefinition extends AbstractTableDefinition {
record.get(COLUMNS.IS_NULLABLE, boolean.class),
isIdentity || isComputed ? null : record.get(COLUMNS.COLUMN_DEFAULT),
userType
).generatedAlwaysAs(isComputed ? record.get(COLUMNS.COLUMN_DEFAULT) : null);
).generatedAlwaysAs(isComputed ? record.get("GENERATION_EXPRESSION", String.class) : null);
result.add(new DefaultColumnDefinition(
getDatabase().getTable(getSchema(), getName()),
getDatabase().getTable(getSchema(), getName()),
record.get(COLUMNS.COLUMN_NAME),
result.size() + 1,
type,

View File

@ -42,22 +42,22 @@ public class Columns extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.TABLE_CATALOG</code>.
*/
public final TableField<Record, String> TABLE_CATALOG = createField(DSL.name("TABLE_CATALOG"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> TABLE_CATALOG = createField(DSL.name("TABLE_CATALOG"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.TABLE_SCHEMA</code>.
*/
public final TableField<Record, String> TABLE_SCHEMA = createField(DSL.name("TABLE_SCHEMA"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> TABLE_SCHEMA = createField(DSL.name("TABLE_SCHEMA"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.TABLE_NAME</code>.
*/
public final TableField<Record, String> TABLE_NAME = createField(DSL.name("TABLE_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> TABLE_NAME = createField(DSL.name("TABLE_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME</code>.
*/
public final TableField<Record, String> COLUMN_NAME = createField(DSL.name("COLUMN_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> COLUMN_NAME = createField(DSL.name("COLUMN_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION</code>.
@ -67,27 +67,27 @@ public class Columns extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.DOMAIN_CATALOG</code>.
*/
public final TableField<Record, String> DOMAIN_CATALOG = createField(DSL.name("DOMAIN_CATALOG"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> DOMAIN_CATALOG = createField(DSL.name("DOMAIN_CATALOG"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.DOMAIN_SCHEMA</code>.
*/
public final TableField<Record, String> DOMAIN_SCHEMA = createField(DSL.name("DOMAIN_SCHEMA"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> DOMAIN_SCHEMA = createField(DSL.name("DOMAIN_SCHEMA"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.DOMAIN_NAME</code>.
*/
public final TableField<Record, String> DOMAIN_NAME = createField(DSL.name("DOMAIN_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> DOMAIN_NAME = createField(DSL.name("DOMAIN_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.COLUMN_DEFAULT</code>.
*/
public final TableField<Record, String> COLUMN_DEFAULT = createField(DSL.name("COLUMN_DEFAULT"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> COLUMN_DEFAULT = createField(DSL.name("COLUMN_DEFAULT"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.IS_NULLABLE</code>.
*/
public final TableField<Record, String> IS_NULLABLE = createField(DSL.name("IS_NULLABLE"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> IS_NULLABLE = createField(DSL.name("IS_NULLABLE"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.DATA_TYPE</code>.
@ -97,7 +97,7 @@ public class Columns extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.CHARACTER_MAXIMUM_LENGTH</code>.
*/
public final TableField<Record, Integer> CHARACTER_MAXIMUM_LENGTH = createField(DSL.name("CHARACTER_MAXIMUM_LENGTH"), SQLDataType.INTEGER, this, "");
public final TableField<Record, Long> CHARACTER_MAXIMUM_LENGTH = createField(DSL.name("CHARACTER_MAXIMUM_LENGTH"), SQLDataType.BIGINT, this, "");
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.CHARACTER_OCTET_LENGTH</code>.
@ -107,7 +107,7 @@ public class Columns extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.NUMERIC_PRECISION</code>.
*/
public final TableField<Record, Integer> NUMERIC_PRECISION = createField(DSL.name("NUMERIC_PRECISION"), SQLDataType.INTEGER, this, "");
public final TableField<Record, Long> NUMERIC_PRECISION = createField(DSL.name("NUMERIC_PRECISION"), SQLDataType.BIGINT, this, "");
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.NUMERIC_PRECISION_RADIX</code>.
@ -117,7 +117,7 @@ public class Columns extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.NUMERIC_SCALE</code>.
*/
public final TableField<Record, Integer> NUMERIC_SCALE = createField(DSL.name("NUMERIC_SCALE"), SQLDataType.INTEGER, this, "");
public final TableField<Record, Long> NUMERIC_SCALE = createField(DSL.name("NUMERIC_SCALE"), SQLDataType.BIGINT, this, "");
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.DATETIME_PRECISION</code>.
@ -127,7 +127,7 @@ public class Columns extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.INTERVAL_TYPE</code>.
*/
public final TableField<Record, String> INTERVAL_TYPE = createField(DSL.name("INTERVAL_TYPE"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> INTERVAL_TYPE = createField(DSL.name("INTERVAL_TYPE"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.INTERVAL_PRECISION</code>.
@ -137,17 +137,17 @@ public class Columns extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.CHARACTER_SET_NAME</code>.
*/
public final TableField<Record, String> CHARACTER_SET_NAME = createField(DSL.name("CHARACTER_SET_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> CHARACTER_SET_NAME = createField(DSL.name("CHARACTER_SET_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.COLLATION_NAME</code>.
*/
public final TableField<Record, String> COLLATION_NAME = createField(DSL.name("COLLATION_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> COLLATION_NAME = createField(DSL.name("COLLATION_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.TYPE_NAME</code>.
*/
public final TableField<Record, String> TYPE_NAME = createField(DSL.name("TYPE_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> TYPE_NAME = createField(DSL.name("TYPE_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.NULLABLE</code>.
@ -167,17 +167,17 @@ public class Columns extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.CHECK_CONSTRAINT</code>.
*/
public final TableField<Record, String> CHECK_CONSTRAINT = createField(DSL.name("CHECK_CONSTRAINT"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> CHECK_CONSTRAINT = createField(DSL.name("CHECK_CONSTRAINT"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.SEQUENCE_NAME</code>.
*/
public final TableField<Record, String> SEQUENCE_NAME = createField(DSL.name("SEQUENCE_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> SEQUENCE_NAME = createField(DSL.name("SEQUENCE_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.REMARKS</code>.
*/
public final TableField<Record, String> REMARKS = createField(DSL.name("REMARKS"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> REMARKS = createField(DSL.name("REMARKS"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.SOURCE_DATA_TYPE</code>.
@ -187,17 +187,17 @@ public class Columns extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.COLUMN_TYPE</code>.
*/
public final TableField<Record, String> COLUMN_TYPE = createField(DSL.name("COLUMN_TYPE"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> COLUMN_TYPE = createField(DSL.name("COLUMN_TYPE"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.COLUMN_ON_UPDATE</code>.
*/
public final TableField<Record, String> COLUMN_ON_UPDATE = createField(DSL.name("COLUMN_ON_UPDATE"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> COLUMN_ON_UPDATE = createField(DSL.name("COLUMN_ON_UPDATE"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.COLUMNS.IS_VISIBLE</code>.
*/
public final TableField<Record, String> IS_VISIBLE = createField(DSL.name("IS_VISIBLE"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> IS_VISIBLE = createField(DSL.name("IS_VISIBLE"), SQLDataType.VARCHAR, this, "");
private Columns(Name alias, Table<Record> aliased) {
this(alias, aliased, null);

View File

@ -47,62 +47,62 @@ public class Constraints extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_CATALOG</code>.
*/
public final TableField<Record, String> CONSTRAINT_CATALOG = createField(DSL.name("CONSTRAINT_CATALOG"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> CONSTRAINT_CATALOG = createField(DSL.name("CONSTRAINT_CATALOG"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_SCHEMA</code>.
*/
public final TableField<Record, String> CONSTRAINT_SCHEMA = createField(DSL.name("CONSTRAINT_SCHEMA"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> CONSTRAINT_SCHEMA = createField(DSL.name("CONSTRAINT_SCHEMA"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_NAME</code>.
*/
public final TableField<Record, String> CONSTRAINT_NAME = createField(DSL.name("CONSTRAINT_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> CONSTRAINT_NAME = createField(DSL.name("CONSTRAINT_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_TYPE</code>.
*/
public final TableField<Record, String> CONSTRAINT_TYPE = createField(DSL.name("CONSTRAINT_TYPE"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> CONSTRAINT_TYPE = createField(DSL.name("CONSTRAINT_TYPE"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.CONSTRAINTS.TABLE_CATALOG</code>.
*/
public final TableField<Record, String> TABLE_CATALOG = createField(DSL.name("TABLE_CATALOG"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> TABLE_CATALOG = createField(DSL.name("TABLE_CATALOG"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.CONSTRAINTS.TABLE_SCHEMA</code>.
*/
public final TableField<Record, String> TABLE_SCHEMA = createField(DSL.name("TABLE_SCHEMA"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> TABLE_SCHEMA = createField(DSL.name("TABLE_SCHEMA"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.CONSTRAINTS.TABLE_NAME</code>.
*/
public final TableField<Record, String> TABLE_NAME = createField(DSL.name("TABLE_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> TABLE_NAME = createField(DSL.name("TABLE_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.CONSTRAINTS.UNIQUE_INDEX_NAME</code>.
*/
public final TableField<Record, String> UNIQUE_INDEX_NAME = createField(DSL.name("UNIQUE_INDEX_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> UNIQUE_INDEX_NAME = createField(DSL.name("UNIQUE_INDEX_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.CONSTRAINTS.CHECK_EXPRESSION</code>.
*/
public final TableField<Record, String> CHECK_EXPRESSION = createField(DSL.name("CHECK_EXPRESSION"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> CHECK_EXPRESSION = createField(DSL.name("CHECK_EXPRESSION"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.CONSTRAINTS.COLUMN_LIST</code>.
*/
public final TableField<Record, String> COLUMN_LIST = createField(DSL.name("COLUMN_LIST"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> COLUMN_LIST = createField(DSL.name("COLUMN_LIST"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.CONSTRAINTS.REMARKS</code>.
*/
public final TableField<Record, String> REMARKS = createField(DSL.name("REMARKS"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> REMARKS = createField(DSL.name("REMARKS"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.CONSTRAINTS.SQL</code>.
*/
public final TableField<Record, String> SQL = createField(DSL.name("SQL"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> SQL = createField(DSL.name("SQL"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.CONSTRAINTS.ID</code>.

View File

@ -46,42 +46,42 @@ public class CrossReferences extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.CROSS_REFERENCES.PKTABLE_CATALOG</code>.
*/
public final TableField<Record, String> PKTABLE_CATALOG = createField(DSL.name("PKTABLE_CATALOG"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> PKTABLE_CATALOG = createField(DSL.name("PKTABLE_CATALOG"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.CROSS_REFERENCES.PKTABLE_SCHEMA</code>.
*/
public final TableField<Record, String> PKTABLE_SCHEMA = createField(DSL.name("PKTABLE_SCHEMA"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> PKTABLE_SCHEMA = createField(DSL.name("PKTABLE_SCHEMA"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.CROSS_REFERENCES.PKTABLE_NAME</code>.
*/
public final TableField<Record, String> PKTABLE_NAME = createField(DSL.name("PKTABLE_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> PKTABLE_NAME = createField(DSL.name("PKTABLE_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.CROSS_REFERENCES.PKCOLUMN_NAME</code>.
*/
public final TableField<Record, String> PKCOLUMN_NAME = createField(DSL.name("PKCOLUMN_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> PKCOLUMN_NAME = createField(DSL.name("PKCOLUMN_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.CROSS_REFERENCES.FKTABLE_CATALOG</code>.
*/
public final TableField<Record, String> FKTABLE_CATALOG = createField(DSL.name("FKTABLE_CATALOG"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> FKTABLE_CATALOG = createField(DSL.name("FKTABLE_CATALOG"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.CROSS_REFERENCES.FKTABLE_SCHEMA</code>.
*/
public final TableField<Record, String> FKTABLE_SCHEMA = createField(DSL.name("FKTABLE_SCHEMA"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> FKTABLE_SCHEMA = createField(DSL.name("FKTABLE_SCHEMA"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.CROSS_REFERENCES.FKTABLE_NAME</code>.
*/
public final TableField<Record, String> FKTABLE_NAME = createField(DSL.name("FKTABLE_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> FKTABLE_NAME = createField(DSL.name("FKTABLE_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.CROSS_REFERENCES.FKCOLUMN_NAME</code>.
*/
public final TableField<Record, String> FKCOLUMN_NAME = createField(DSL.name("FKCOLUMN_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> FKCOLUMN_NAME = createField(DSL.name("FKCOLUMN_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.CROSS_REFERENCES.ORDINAL_POSITION</code>.
@ -101,12 +101,12 @@ public class CrossReferences extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.CROSS_REFERENCES.FK_NAME</code>.
*/
public final TableField<Record, String> FK_NAME = createField(DSL.name("FK_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> FK_NAME = createField(DSL.name("FK_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.CROSS_REFERENCES.PK_NAME</code>.
*/
public final TableField<Record, String> PK_NAME = createField(DSL.name("PK_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> PK_NAME = createField(DSL.name("PK_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.CROSS_REFERENCES.DEFERRABILITY</code>.

View File

@ -47,27 +47,27 @@ public class Domains extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.DOMAINS.DOMAIN_CATALOG</code>.
*/
public final TableField<Record, String> DOMAIN_CATALOG = createField(DSL.name("DOMAIN_CATALOG"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> DOMAIN_CATALOG = createField(DSL.name("DOMAIN_CATALOG"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.DOMAINS.DOMAIN_SCHEMA</code>.
*/
public final TableField<Record, String> DOMAIN_SCHEMA = createField(DSL.name("DOMAIN_SCHEMA"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> DOMAIN_SCHEMA = createField(DSL.name("DOMAIN_SCHEMA"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.DOMAINS.DOMAIN_NAME</code>.
*/
public final TableField<Record, String> DOMAIN_NAME = createField(DSL.name("DOMAIN_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> DOMAIN_NAME = createField(DSL.name("DOMAIN_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.DOMAINS.COLUMN_DEFAULT</code>.
*/
public final TableField<Record, String> COLUMN_DEFAULT = createField(DSL.name("COLUMN_DEFAULT"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> COLUMN_DEFAULT = createField(DSL.name("COLUMN_DEFAULT"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.DOMAINS.IS_NULLABLE</code>.
*/
public final TableField<Record, String> IS_NULLABLE = createField(DSL.name("IS_NULLABLE"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> IS_NULLABLE = createField(DSL.name("IS_NULLABLE"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.DOMAINS.DATA_TYPE</code>.
@ -87,7 +87,7 @@ public class Domains extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.DOMAINS.TYPE_NAME</code>.
*/
public final TableField<Record, String> TYPE_NAME = createField(DSL.name("TYPE_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> TYPE_NAME = createField(DSL.name("TYPE_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.DOMAINS.SELECTIVITY</code>.
@ -97,17 +97,17 @@ public class Domains extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.DOMAINS.CHECK_CONSTRAINT</code>.
*/
public final TableField<Record, String> CHECK_CONSTRAINT = createField(DSL.name("CHECK_CONSTRAINT"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> CHECK_CONSTRAINT = createField(DSL.name("CHECK_CONSTRAINT"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.DOMAINS.REMARKS</code>.
*/
public final TableField<Record, String> REMARKS = createField(DSL.name("REMARKS"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> REMARKS = createField(DSL.name("REMARKS"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.DOMAINS.SQL</code>.
*/
public final TableField<Record, String> SQL = createField(DSL.name("SQL"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> SQL = createField(DSL.name("SQL"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.DOMAINS.ID</code>.

View File

@ -42,27 +42,27 @@ public class FunctionAliases extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.FUNCTION_ALIASES.ALIAS_CATALOG</code>.
*/
public final TableField<Record, String> ALIAS_CATALOG = createField(DSL.name("ALIAS_CATALOG"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> ALIAS_CATALOG = createField(DSL.name("ALIAS_CATALOG"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.FUNCTION_ALIASES.ALIAS_SCHEMA</code>.
*/
public final TableField<Record, String> ALIAS_SCHEMA = createField(DSL.name("ALIAS_SCHEMA"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> ALIAS_SCHEMA = createField(DSL.name("ALIAS_SCHEMA"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.FUNCTION_ALIASES.ALIAS_NAME</code>.
*/
public final TableField<Record, String> ALIAS_NAME = createField(DSL.name("ALIAS_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> ALIAS_NAME = createField(DSL.name("ALIAS_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.FUNCTION_ALIASES.JAVA_CLASS</code>.
*/
public final TableField<Record, String> JAVA_CLASS = createField(DSL.name("JAVA_CLASS"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> JAVA_CLASS = createField(DSL.name("JAVA_CLASS"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.FUNCTION_ALIASES.JAVA_METHOD</code>.
*/
public final TableField<Record, String> JAVA_METHOD = createField(DSL.name("JAVA_METHOD"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> JAVA_METHOD = createField(DSL.name("JAVA_METHOD"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.FUNCTION_ALIASES.DATA_TYPE</code>.
@ -72,7 +72,7 @@ public class FunctionAliases extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.FUNCTION_ALIASES.TYPE_NAME</code>.
*/
public final TableField<Record, String> TYPE_NAME = createField(DSL.name("TYPE_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> TYPE_NAME = createField(DSL.name("TYPE_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.FUNCTION_ALIASES.COLUMN_COUNT</code>.
@ -87,7 +87,7 @@ public class FunctionAliases extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.FUNCTION_ALIASES.REMARKS</code>.
*/
public final TableField<Record, String> REMARKS = createField(DSL.name("REMARKS"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> REMARKS = createField(DSL.name("REMARKS"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.FUNCTION_ALIASES.ID</code>.
@ -97,7 +97,7 @@ public class FunctionAliases extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.FUNCTION_ALIASES.SOURCE</code>.
*/
public final TableField<Record, String> SOURCE = createField(DSL.name("SOURCE"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> SOURCE = createField(DSL.name("SOURCE"), SQLDataType.VARCHAR, this, "");
private FunctionAliases(Name alias, Table<Record> aliased) {
this(alias, aliased, null);

View File

@ -42,27 +42,27 @@ public class FunctionColumns extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.FUNCTION_COLUMNS.ALIAS_CATALOG</code>.
*/
public final TableField<Record, String> ALIAS_CATALOG = createField(DSL.name("ALIAS_CATALOG"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> ALIAS_CATALOG = createField(DSL.name("ALIAS_CATALOG"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.FUNCTION_COLUMNS.ALIAS_SCHEMA</code>.
*/
public final TableField<Record, String> ALIAS_SCHEMA = createField(DSL.name("ALIAS_SCHEMA"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> ALIAS_SCHEMA = createField(DSL.name("ALIAS_SCHEMA"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.FUNCTION_COLUMNS.ALIAS_NAME</code>.
*/
public final TableField<Record, String> ALIAS_NAME = createField(DSL.name("ALIAS_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> ALIAS_NAME = createField(DSL.name("ALIAS_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.FUNCTION_COLUMNS.JAVA_CLASS</code>.
*/
public final TableField<Record, String> JAVA_CLASS = createField(DSL.name("JAVA_CLASS"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> JAVA_CLASS = createField(DSL.name("JAVA_CLASS"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.FUNCTION_COLUMNS.JAVA_METHOD</code>.
*/
public final TableField<Record, String> JAVA_METHOD = createField(DSL.name("JAVA_METHOD"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> JAVA_METHOD = createField(DSL.name("JAVA_METHOD"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_COUNT</code>.
@ -77,7 +77,7 @@ public class FunctionColumns extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_NAME</code>.
*/
public final TableField<Record, String> COLUMN_NAME = createField(DSL.name("COLUMN_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> COLUMN_NAME = createField(DSL.name("COLUMN_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.FUNCTION_COLUMNS.DATA_TYPE</code>.
@ -87,7 +87,7 @@ public class FunctionColumns extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.FUNCTION_COLUMNS.TYPE_NAME</code>.
*/
public final TableField<Record, String> TYPE_NAME = createField(DSL.name("TYPE_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> TYPE_NAME = createField(DSL.name("TYPE_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.FUNCTION_COLUMNS.PRECISION</code>.
@ -117,12 +117,12 @@ public class FunctionColumns extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.FUNCTION_COLUMNS.REMARKS</code>.
*/
public final TableField<Record, String> REMARKS = createField(DSL.name("REMARKS"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> REMARKS = createField(DSL.name("REMARKS"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_DEFAULT</code>.
*/
public final TableField<Record, String> COLUMN_DEFAULT = createField(DSL.name("COLUMN_DEFAULT"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> COLUMN_DEFAULT = createField(DSL.name("COLUMN_DEFAULT"), SQLDataType.VARCHAR, this, "");
private FunctionColumns(Name alias, Table<Record> aliased) {
this(alias, aliased, null);

View File

@ -42,17 +42,17 @@ public class Indexes extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.INDEXES.TABLE_CATALOG</code>.
*/
public final TableField<Record, String> TABLE_CATALOG = createField(DSL.name("TABLE_CATALOG"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> TABLE_CATALOG = createField(DSL.name("TABLE_CATALOG"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.INDEXES.TABLE_SCHEMA</code>.
*/
public final TableField<Record, String> TABLE_SCHEMA = createField(DSL.name("TABLE_SCHEMA"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> TABLE_SCHEMA = createField(DSL.name("TABLE_SCHEMA"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.INDEXES.TABLE_NAME</code>.
*/
public final TableField<Record, String> TABLE_NAME = createField(DSL.name("TABLE_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> TABLE_NAME = createField(DSL.name("TABLE_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.INDEXES.NON_UNIQUE</code>.
@ -62,7 +62,7 @@ public class Indexes extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.INDEXES.INDEX_NAME</code>.
*/
public final TableField<Record, String> INDEX_NAME = createField(DSL.name("INDEX_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> INDEX_NAME = createField(DSL.name("INDEX_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.INDEXES.ORDINAL_POSITION</code>.
@ -72,7 +72,7 @@ public class Indexes extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.INDEXES.COLUMN_NAME</code>.
*/
public final TableField<Record, String> COLUMN_NAME = createField(DSL.name("COLUMN_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> COLUMN_NAME = createField(DSL.name("COLUMN_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.INDEXES.CARDINALITY</code>.
@ -87,7 +87,7 @@ public class Indexes extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.INDEXES.INDEX_TYPE_NAME</code>.
*/
public final TableField<Record, String> INDEX_TYPE_NAME = createField(DSL.name("INDEX_TYPE_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> INDEX_TYPE_NAME = createField(DSL.name("INDEX_TYPE_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.INDEXES.IS_GENERATED</code>.
@ -102,7 +102,7 @@ public class Indexes extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.INDEXES.ASC_OR_DESC</code>.
*/
public final TableField<Record, String> ASC_OR_DESC = createField(DSL.name("ASC_OR_DESC"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> ASC_OR_DESC = createField(DSL.name("ASC_OR_DESC"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.INDEXES.PAGES</code>.
@ -112,17 +112,17 @@ public class Indexes extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.INDEXES.FILTER_CONDITION</code>.
*/
public final TableField<Record, String> FILTER_CONDITION = createField(DSL.name("FILTER_CONDITION"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> FILTER_CONDITION = createField(DSL.name("FILTER_CONDITION"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.INDEXES.REMARKS</code>.
*/
public final TableField<Record, String> REMARKS = createField(DSL.name("REMARKS"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> REMARKS = createField(DSL.name("REMARKS"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.INDEXES.SQL</code>.
*/
public final TableField<Record, String> SQL = createField(DSL.name("SQL"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> SQL = createField(DSL.name("SQL"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.INDEXES.ID</code>.
@ -137,12 +137,12 @@ public class Indexes extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.INDEXES.CONSTRAINT_NAME</code>.
*/
public final TableField<Record, String> CONSTRAINT_NAME = createField(DSL.name("CONSTRAINT_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> CONSTRAINT_NAME = createField(DSL.name("CONSTRAINT_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.INDEXES.INDEX_CLASS</code>.
*/
public final TableField<Record, String> INDEX_CLASS = createField(DSL.name("INDEX_CLASS"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> INDEX_CLASS = createField(DSL.name("INDEX_CLASS"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.INDEXES.AFFINITY</code>.

View File

@ -47,27 +47,27 @@ public class Schemata extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.SCHEMATA.CATALOG_NAME</code>.
*/
public final TableField<Record, String> CATALOG_NAME = createField(DSL.name("CATALOG_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> CATALOG_NAME = createField(DSL.name("CATALOG_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.SCHEMATA.SCHEMA_NAME</code>.
*/
public final TableField<Record, String> SCHEMA_NAME = createField(DSL.name("SCHEMA_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> SCHEMA_NAME = createField(DSL.name("SCHEMA_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.SCHEMATA.SCHEMA_OWNER</code>.
*/
public final TableField<Record, String> SCHEMA_OWNER = createField(DSL.name("SCHEMA_OWNER"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> SCHEMA_OWNER = createField(DSL.name("SCHEMA_OWNER"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.SCHEMATA.DEFAULT_CHARACTER_SET_NAME</code>.
*/
public final TableField<Record, String> DEFAULT_CHARACTER_SET_NAME = createField(DSL.name("DEFAULT_CHARACTER_SET_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> DEFAULT_CHARACTER_SET_NAME = createField(DSL.name("DEFAULT_CHARACTER_SET_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.SCHEMATA.DEFAULT_COLLATION_NAME</code>.
*/
public final TableField<Record, String> DEFAULT_COLLATION_NAME = createField(DSL.name("DEFAULT_COLLATION_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> DEFAULT_COLLATION_NAME = createField(DSL.name("DEFAULT_COLLATION_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.SCHEMATA.IS_DEFAULT</code>.
@ -77,7 +77,7 @@ public class Schemata extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.SCHEMATA.REMARKS</code>.
*/
public final TableField<Record, String> REMARKS = createField(DSL.name("REMARKS"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> REMARKS = createField(DSL.name("REMARKS"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.SCHEMATA.ID</code>.

View File

@ -47,17 +47,17 @@ public class Sequences extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_CATALOG</code>.
*/
public final TableField<Record, String> SEQUENCE_CATALOG = createField(DSL.name("SEQUENCE_CATALOG"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> SEQUENCE_CATALOG = createField(DSL.name("SEQUENCE_CATALOG"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA</code>.
*/
public final TableField<Record, String> SEQUENCE_SCHEMA = createField(DSL.name("SEQUENCE_SCHEMA"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> SEQUENCE_SCHEMA = createField(DSL.name("SEQUENCE_SCHEMA"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_NAME</code>.
*/
public final TableField<Record, String> SEQUENCE_NAME = createField(DSL.name("SEQUENCE_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> SEQUENCE_NAME = createField(DSL.name("SEQUENCE_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.SEQUENCES.CURRENT_VALUE</code>.
@ -77,7 +77,7 @@ public class Sequences extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.SEQUENCES.REMARKS</code>.
*/
public final TableField<Record, String> REMARKS = createField(DSL.name("REMARKS"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> REMARKS = createField(DSL.name("REMARKS"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.SEQUENCES.CACHE</code>.

View File

@ -47,37 +47,37 @@ public class Tables extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.TABLES.TABLE_CATALOG</code>.
*/
public final TableField<Record, String> TABLE_CATALOG = createField(DSL.name("TABLE_CATALOG"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> TABLE_CATALOG = createField(DSL.name("TABLE_CATALOG"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA</code>.
*/
public final TableField<Record, String> TABLE_SCHEMA = createField(DSL.name("TABLE_SCHEMA"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> TABLE_SCHEMA = createField(DSL.name("TABLE_SCHEMA"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.TABLES.TABLE_NAME</code>.
*/
public final TableField<Record, String> TABLE_NAME = createField(DSL.name("TABLE_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> TABLE_NAME = createField(DSL.name("TABLE_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.TABLES.TABLE_TYPE</code>.
*/
public final TableField<Record, String> TABLE_TYPE = createField(DSL.name("TABLE_TYPE"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> TABLE_TYPE = createField(DSL.name("TABLE_TYPE"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.TABLES.STORAGE_TYPE</code>.
*/
public final TableField<Record, String> STORAGE_TYPE = createField(DSL.name("STORAGE_TYPE"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> STORAGE_TYPE = createField(DSL.name("STORAGE_TYPE"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.TABLES.SQL</code>.
*/
public final TableField<Record, String> SQL = createField(DSL.name("SQL"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> SQL = createField(DSL.name("SQL"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.TABLES.REMARKS</code>.
*/
public final TableField<Record, String> REMARKS = createField(DSL.name("REMARKS"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> REMARKS = createField(DSL.name("REMARKS"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.TABLES.LAST_MODIFICATION</code>.
@ -92,12 +92,12 @@ public class Tables extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.TABLES.TYPE_NAME</code>.
*/
public final TableField<Record, String> TYPE_NAME = createField(DSL.name("TYPE_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> TYPE_NAME = createField(DSL.name("TYPE_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.TABLES.TABLE_CLASS</code>.
*/
public final TableField<Record, String> TABLE_CLASS = createField(DSL.name("TABLE_CLASS"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> TABLE_CLASS = createField(DSL.name("TABLE_CLASS"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.TABLES.ROW_COUNT_ESTIMATE</code>.

View File

@ -42,7 +42,7 @@ public class TypeInfo extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.TYPE_INFO.TYPE_NAME</code>.
*/
public final TableField<Record, String> TYPE_NAME = createField(DSL.name("TYPE_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> TYPE_NAME = createField(DSL.name("TYPE_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.TYPE_INFO.DATA_TYPE</code>.
@ -57,17 +57,17 @@ public class TypeInfo extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.TYPE_INFO.PREFIX</code>.
*/
public final TableField<Record, String> PREFIX = createField(DSL.name("PREFIX"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> PREFIX = createField(DSL.name("PREFIX"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.TYPE_INFO.SUFFIX</code>.
*/
public final TableField<Record, String> SUFFIX = createField(DSL.name("SUFFIX"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> SUFFIX = createField(DSL.name("SUFFIX"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.TYPE_INFO.PARAMS</code>.
*/
public final TableField<Record, String> PARAMS = createField(DSL.name("PARAMS"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> PARAMS = createField(DSL.name("PARAMS"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.TYPE_INFO.AUTO_INCREMENT</code>.

View File

@ -42,42 +42,42 @@ public class Views extends TableImpl<Record> {
/**
* The column <code>INFORMATION_SCHEMA.VIEWS.TABLE_CATALOG</code>.
*/
public final TableField<Record, String> TABLE_CATALOG = createField(DSL.name("TABLE_CATALOG"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> TABLE_CATALOG = createField(DSL.name("TABLE_CATALOG"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.VIEWS.TABLE_SCHEMA</code>.
*/
public final TableField<Record, String> TABLE_SCHEMA = createField(DSL.name("TABLE_SCHEMA"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> TABLE_SCHEMA = createField(DSL.name("TABLE_SCHEMA"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.VIEWS.TABLE_NAME</code>.
*/
public final TableField<Record, String> TABLE_NAME = createField(DSL.name("TABLE_NAME"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> TABLE_NAME = createField(DSL.name("TABLE_NAME"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.VIEWS.VIEW_DEFINITION</code>.
*/
public final TableField<Record, String> VIEW_DEFINITION = createField(DSL.name("VIEW_DEFINITION"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> VIEW_DEFINITION = createField(DSL.name("VIEW_DEFINITION"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.VIEWS.CHECK_OPTION</code>.
*/
public final TableField<Record, String> CHECK_OPTION = createField(DSL.name("CHECK_OPTION"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> CHECK_OPTION = createField(DSL.name("CHECK_OPTION"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.VIEWS.IS_UPDATABLE</code>.
*/
public final TableField<Record, String> IS_UPDATABLE = createField(DSL.name("IS_UPDATABLE"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> IS_UPDATABLE = createField(DSL.name("IS_UPDATABLE"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.VIEWS.STATUS</code>.
*/
public final TableField<Record, String> STATUS = createField(DSL.name("STATUS"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> STATUS = createField(DSL.name("STATUS"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.VIEWS.REMARKS</code>.
*/
public final TableField<Record, String> REMARKS = createField(DSL.name("REMARKS"), SQLDataType.VARCHAR(2147483647), this, "");
public final TableField<Record, String> REMARKS = createField(DSL.name("REMARKS"), SQLDataType.VARCHAR, this, "");
/**
* The column <code>INFORMATION_SCHEMA.VIEWS.ID</code>.

View File

@ -292,7 +292,7 @@ public class HSQLDBDatabase extends AbstractDatabase implements ResultQueryDatab
.join(pkKcu)
.on(pkKcu.CONSTRAINT_SCHEMA.eq(TABLE_CONSTRAINTS.CONSTRAINT_SCHEMA))
.and(pkKcu.CONSTRAINT_NAME.eq(TABLE_CONSTRAINTS.CONSTRAINT_NAME))
.and(pkKcu.ORDINAL_POSITION.eq(fkKcu.ORDINAL_POSITION))
.and(pkKcu.ORDINAL_POSITION.eq(fkKcu.POSITION_IN_UNIQUE_CONSTRAINT))
.where(fkKcu.TABLE_SCHEMA.in(getInputSchemata()))
.orderBy(
fkKcu.TABLE_SCHEMA.asc(),

View File

@ -80,7 +80,7 @@ public interface AlterTableDropStep extends AlterTableFinalStep {
* <code>ALTER TABLE .. DROP</code> statement.
*/
@NotNull @CheckReturnValue
@Support({ DERBY, H2, HSQLDB, POSTGRES, YUGABYTE })
@Support({ DERBY, HSQLDB, POSTGRES, YUGABYTE })
AlterTableFinalStep cascade();
/**

View File

@ -11610,7 +11610,6 @@ public interface DSLContext extends Scope {
* <li>{@link SQLDialect#ACCESS}: Using <code>@@identity</code></li>
* <li>{@link SQLDialect#ASE}: Using <code>@@identity</code></li>
* <li>{@link SQLDialect#DERBY}: Using <code>identity_val_local()</code></li>
* <li>{@link SQLDialect#H2}: Using <code>identity()</code></li>
* <li>{@link SQLDialect#HSQLDB}: Using <code>identity()</code></li>
* <li>{@link SQLDialect#INFORMIX}: Using
* <code>dbinfo('sqlca.sqlerrd1')</code></li>
@ -11629,7 +11628,7 @@ public interface DSLContext extends Scope {
* @throws DataAccessException if something went wrong executing the query
*/
@NotNull
@Support({ CUBRID, DERBY, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE })
@Support({ CUBRID, DERBY, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE })
BigInteger lastID() throws DataAccessException;
/**

View File

@ -156,6 +156,14 @@ public enum SQLDialect {

View File

@ -50,6 +50,8 @@ import static org.jooq.SQLDialect.DERBY;
import static org.jooq.SQLDialect.FIREBIRD;
import static org.jooq.SQLDialect.H2;
// ...
// ...
// ...
import static org.jooq.SQLDialect.HSQLDB;
import static org.jooq.SQLDialect.IGNITE;
// ...
@ -178,13 +180,14 @@ import org.jooq.tools.jdbc.JDBCUtils;
*/
abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery implements DMLQuery<R> {
private static final JooqLogger log = JooqLogger.getLogger(AbstractQuery.class);
private static final JooqLogger log = JooqLogger.getLogger(AbstractQuery.class);
private static final Set<SQLDialect> NO_SUPPORT_INSERT_ALIASED_TABLE = SQLDialect.supportedBy(DERBY, FIREBIRD, H2, MARIADB, MYSQL);
private static final Set<SQLDialect> NATIVE_SUPPORT_INSERT_RETURNING = SQLDialect.supportedBy(FIREBIRD, MARIADB, POSTGRES, YUGABYTE);
private static final Set<SQLDialect> NATIVE_SUPPORT_UPDATE_RETURNING = SQLDialect.supportedBy(FIREBIRD, POSTGRES, YUGABYTE);
private static final Set<SQLDialect> NATIVE_SUPPORT_DELETE_RETURNING = SQLDialect.supportedBy(FIREBIRD, MARIADB, POSTGRES, YUGABYTE);
private static final Set<SQLDialect> NO_SUPPORT_FETCHING_KEYS = SQLDialect.supportedBy(IGNITE);
private static final Set<SQLDialect> NO_SUPPORT_INSERT_ALIASED_TABLE = SQLDialect.supportedBy(DERBY, FIREBIRD, H2, MARIADB, MYSQL);
private static final Set<SQLDialect> NATIVE_SUPPORT_INSERT_RETURNING = SQLDialect.supportedBy(FIREBIRD, MARIADB, POSTGRES, YUGABYTE);
private static final Set<SQLDialect> NATIVE_SUPPORT_UPDATE_RETURNING = SQLDialect.supportedBy(FIREBIRD, POSTGRES, YUGABYTE);
private static final Set<SQLDialect> NATIVE_SUPPORT_DELETE_RETURNING = SQLDialect.supportedBy(FIREBIRD, MARIADB, POSTGRES, YUGABYTE);
private static final Set<SQLDialect> NATIVE_SUPPORT_DATA_CHANGE_DELTA_TABLE = SQLDialect.supportedBy(H2);
private static final Set<SQLDialect> NO_SUPPORT_FETCHING_KEYS = SQLDialect.supportedBy(IGNITE);
@ -847,6 +850,10 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
|| this instanceof Delete && NATIVE_SUPPORT_DELETE_RETURNING.contains(ctx.dialect());
}
final boolean nativeSupportReturningOrDataChangeDeltaTable(Scope ctx) {
return NATIVE_SUPPORT_DATA_CHANGE_DELTA_TABLE.contains(ctx.dialect()) || nativeSupportReturning(ctx);
}
@Override
protected final void prepare(ExecuteContext ctx) throws SQLException {
prepare0(ctx);
@ -864,7 +871,7 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
else if (NO_SUPPORT_FETCHING_KEYS.contains(ctx.dialect()))
super.prepare(ctx);
else if (nativeSupportReturning(ctx))
else if (nativeSupportReturningOrDataChangeDeltaTable(ctx))
super.prepare(ctx);
@ -885,8 +892,6 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
// SQLite will select last_insert_rowid() after the INSER
case SQLITE:
case CUBRID:
@ -905,7 +910,6 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
case DERBY:
case H2:
// [#9212] Older MariaDB versions that don't support RETURNING
// yet, or UPDATE .. RETURNING
@ -1040,7 +1044,6 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
case DERBY:
case H2:
case MYSQL: {
return executeReturningGeneratedKeysFetchAdditionalRows(ctx, listener);
}
@ -1053,6 +1056,15 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
break;
}
// [#9676] H2 2.0.202 has introduced support for data change delta tables
case H2:
rs = executeReturningQuery(ctx, listener);
break;

View File

@ -55,6 +55,7 @@ import static org.jooq.SQLDialect.CUBRID;
import static org.jooq.SQLDialect.DERBY;
// ...
import static org.jooq.SQLDialect.FIREBIRD;
import static org.jooq.SQLDialect.H2;
// ...
import static org.jooq.SQLDialect.HSQLDB;
// ...
@ -108,7 +109,7 @@ abstract class AbstractInList<T> extends AbstractCondition {
static final int IN_LIMIT = 1000;
static final Set<SQLDialect> REQUIRES_IN_LIMIT = SQLDialect.supportedBy(FIREBIRD);
static final Set<SQLDialect> NO_SUPPORT_EMPTY_LISTS = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, HSQLDB, MARIADB, MYSQL, POSTGRES, YUGABYTE);
static final Set<SQLDialect> NO_SUPPORT_EMPTY_LISTS = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, YUGABYTE);
final Field<T> field;
final QueryPartList<Field<T>> values;

View File

@ -63,6 +63,7 @@ import static org.jooq.SQLDialect.CUBRID;
import static org.jooq.SQLDialect.DERBY;
// ...
import static org.jooq.SQLDialect.FIREBIRD;
import static org.jooq.SQLDialect.H2;
// ...
import static org.jooq.SQLDialect.HSQLDB;
// ...
@ -1661,7 +1662,12 @@ implements
private final void acceptCascade(Context<?> ctx) {
switch (ctx.family()) {
case H2:
// H2 defaults to CASCADE but doesn't support the keywords
acceptCascade(ctx, dropCascade);
break;

View File

@ -43,6 +43,7 @@ import org.jooq.Configuration;
import org.jooq.DataType;
import org.jooq.Field;
import org.jooq.Nullability;
import org.jooq.SQLDialect;
import org.jooq.impl.QOM.GenerationOption;
/**
@ -151,7 +152,12 @@ final class ArrayDataType<T> extends DefaultDataType<T[]> {
return dataType + "[]";
case H2:
return "array";
return dataType + " array";
// Default implementation is needed for hash-codes and toString()
default:

View File

@ -103,9 +103,15 @@ implements
case H2:
ctx.visit(N_ARRAY_GET).sql('(').visit(array).sql(", ").visit(index).sql(')');
break;
case HSQLDB:
ctx.visit(when(cardinality(array).ge(index), new Standard()));

View File

@ -265,7 +265,6 @@ implements
case H2:
case IGNITE:
case MARIADB:
case MYSQL:
@ -274,6 +273,15 @@ implements
ctx.visit(N_BIT_AND);
break;
case H2:
ctx.visit(N_BIT_AND_AGG);
break;
default:
super.acceptFunctionName(ctx);
break;

View File

@ -265,7 +265,6 @@ implements
case H2:
case IGNITE:
case MARIADB:
case MYSQL:
@ -274,6 +273,15 @@ implements
ctx.visit(N_BIT_OR);
break;
case H2:
ctx.visit(N_BIT_OR_AGG);
break;
default:
super.acceptFunctionName(ctx);
break;

View File

@ -271,7 +271,6 @@ implements
case H2:
case IGNITE:
case MARIADB:
case MYSQL:
@ -279,6 +278,15 @@ implements
ctx.visit(N_BIT_XOR);
break;
case H2:
ctx.visit(N_BIT_XOR_AGG);
break;
default:
super.acceptFunctionName(ctx);
break;

View File

@ -92,7 +92,7 @@ implements
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, H2, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);

View File

@ -92,7 +92,7 @@ implements
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, H2, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);

View File

@ -98,20 +98,15 @@ import static org.jooq.SQLDialect.SQLITE;
// ...
import static org.jooq.SQLDialect.YUGABYTE;
import static org.jooq.conf.ParamType.INLINED;
import static org.jooq.impl.Keywords.K_GROUPING_SETS;
import static org.jooq.impl.Names.N_AVG;
import static org.jooq.impl.Names.N_COUNT;
import static org.jooq.impl.Names.N_CUME_DIST;
import static org.jooq.impl.Names.N_DENSE_RANK;
import static org.jooq.impl.Names.N_IF;
import static org.jooq.impl.Names.N_IIF;
import static org.jooq.impl.Names.N_MAX;
import static org.jooq.impl.Names.N_MIN;
import static org.jooq.impl.Names.N_PERCENTILE_CONT;
import static org.jooq.impl.Names.N_PERCENTILE_DISC;
import static org.jooq.impl.Names.N_PERCENT_RANK;
import static org.jooq.impl.Names.N_RANK;
import static org.jooq.impl.Names.N_SUM;
import static org.jooq.impl.Names.N_SYSTEM_TIME;
import static org.jooq.impl.Names.N_VALUE;
import static org.jooq.impl.SQLDataType.DATE;
@ -421,8 +416,8 @@ import org.jooq.XMLTablePassingStep;
import org.jooq.conf.NestedCollectionEmulation;
import org.jooq.conf.Settings;
import org.jooq.exception.SQLDialectNotSupportedException;
import org.jooq.impl.QOM.ResultOption;
import org.jooq.impl.QOM.DocumentOrContent;
import org.jooq.impl.QOM.ResultOption;
import org.jooq.tools.StringUtils;
import org.jooq.tools.jdbc.JDBCUtils;
import org.jooq.types.DayToSecond;
@ -18339,7 +18334,7 @@ public class DSL {
* @param formatMask The vendor-specific formatting string.
*/
@NotNull
@Support({ H2, HSQLDB, POSTGRES, YUGABYTE })
@Support({ HSQLDB, POSTGRES, YUGABYTE })
public static Field<Date> toDate(@Stringly.Param String value, @Stringly.Param String formatMask) {
return new ToDate(Tools.field(value), Tools.field(formatMask));
}
@ -18353,7 +18348,7 @@ public class DSL {
* @param formatMask The vendor-specific formatting string.
*/
@NotNull
@Support({ H2, HSQLDB, POSTGRES, YUGABYTE })
@Support({ HSQLDB, POSTGRES, YUGABYTE })
public static Field<Date> toDate(@Stringly.Param String value, Field<String> formatMask) {
return new ToDate(Tools.field(value), formatMask);
}
@ -18367,7 +18362,7 @@ public class DSL {
* @param formatMask The vendor-specific formatting string.
*/
@NotNull
@Support({ H2, HSQLDB, POSTGRES, YUGABYTE })
@Support({ HSQLDB, POSTGRES, YUGABYTE })
public static Field<Date> toDate(Field<String> value, @Stringly.Param String formatMask) {
return new ToDate(value, Tools.field(formatMask));
}
@ -18381,7 +18376,7 @@ public class DSL {
* @param formatMask The vendor-specific formatting string.
*/
@NotNull
@Support({ H2, HSQLDB, POSTGRES, YUGABYTE })
@Support({ HSQLDB, POSTGRES, YUGABYTE })
public static Field<Date> toDate(Field<String> value, Field<String> formatMask) {
return new ToDate(value, formatMask);
}
@ -18419,7 +18414,7 @@ public class DSL {
* @param formatMask The vendor-specific formatting string.
*/
@NotNull
@Support({ H2, HSQLDB, POSTGRES, YUGABYTE })
@Support({ HSQLDB, POSTGRES, YUGABYTE })
public static Field<Timestamp> toTimestamp(@Stringly.Param String value, @Stringly.Param String formatMask) {
return new ToTimestamp(Tools.field(value), Tools.field(formatMask));
}
@ -18433,7 +18428,7 @@ public class DSL {
* @param formatMask The vendor-specific formatting string.
*/
@NotNull
@Support({ H2, HSQLDB, POSTGRES, YUGABYTE })
@Support({ HSQLDB, POSTGRES, YUGABYTE })
public static Field<Timestamp> toTimestamp(@Stringly.Param String value, Field<String> formatMask) {
return new ToTimestamp(Tools.field(value), formatMask);
}
@ -18447,7 +18442,7 @@ public class DSL {
* @param formatMask The vendor-specific formatting string.
*/
@NotNull
@Support({ H2, HSQLDB, POSTGRES, YUGABYTE })
@Support({ HSQLDB, POSTGRES, YUGABYTE })
public static Field<Timestamp> toTimestamp(Field<String> value, @Stringly.Param String formatMask) {
return new ToTimestamp(value, Tools.field(formatMask));
}
@ -18461,7 +18456,7 @@ public class DSL {
* @param formatMask The vendor-specific formatting string.
*/
@NotNull
@Support({ H2, HSQLDB, POSTGRES, YUGABYTE })
@Support({ HSQLDB, POSTGRES, YUGABYTE })
public static Field<Timestamp> toTimestamp(Field<String> value, Field<String> formatMask) {
return new ToTimestamp(value, formatMask);
}

View File

@ -61,6 +61,8 @@ import static org.jooq.SQLDialect.FIREBIRD;
// ...
import static org.jooq.SQLDialect.H2;
// ...
// ...
// ...
import static org.jooq.SQLDialect.HSQLDB;
// ...
// ...
@ -634,7 +636,7 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
// -----------------------------------------------------------------------------------------------------------------
abstract static class AbstractBinding<T, U> implements org.jooq.Binding<T, U> {
static final Set<SQLDialect> NEEDS_PRECISION_SCALE_ON_BIGDECIMAL = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, HSQLDB);
static final Set<SQLDialect> NEEDS_PRECISION_SCALE_ON_BIGDECIMAL = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, H2, HSQLDB);
static final Set<SQLDialect> REQUIRES_JSON_CAST = SQLDialect.supportedBy(POSTGRES, YUGABYTE);
static final Set<SQLDialect> NO_SUPPORT_ENUM_CAST = SQLDialect.supportedBy(POSTGRES, YUGABYTE);
static final Set<SQLDialect> NO_SUPPORT_NVARCHAR = SQLDialect.supportedBy(DERBY, FIREBIRD, POSTGRES, SQLITE, YUGABYTE);
@ -1100,6 +1102,11 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
static final class DefaultArrayBinding<U> extends AbstractBinding<Object[], U> {
private static final Set<SQLDialect> REQUIRES_ARRAY_CAST = SQLDialect.supportedBy(POSTGRES, YUGABYTE);
DefaultArrayBinding(DataType<Object[]> dataType, Converter<Object[], U> converter) {
super(dataType, converter);
}
@ -1109,20 +1116,7 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
final void sqlInline0(BindingSQLContext<U> ctx, Object[] value) throws SQLException {
String separator = "";
// H2 renders arrays as rows
if (ctx.family() == H2) {
ctx.render().sql('(');
for (Object o : value) {
ctx.render().sql(separator);
binding((DataType<Object>) dataType.getArrayComponentDataType()).sql(new DefaultBindingSQLContext<>(ctx.configuration(), ctx.data(), ctx.render(), o));
separator = ", ";
}
ctx.render().sql(')');
}
else if (REQUIRES_ARRAY_CAST.contains(ctx.dialect())) {
if (REQUIRES_ARRAY_CAST.contains(ctx.dialect())) {
// [#8933] In some cases, we cannot derive the cast type from
// array type directly
@ -1134,6 +1128,22 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
ctx.render().visit(cast(inline(PostgresUtils.toPGArrayString(value)), arrayType));
}
// By default, render HSQLDB syntax
else {
boolean squareBrackets = true;

View File

@ -39,7 +39,9 @@ package org.jooq.impl;
import static java.util.Collections.unmodifiableCollection;
// ...
// ...
import static org.jooq.SQLDialect.FIREBIRD;
import static org.jooq.SQLDialect.H2;
import static org.jooq.SQLDialect.HSQLDB;
// ...
import static org.jooq.SQLDialect.MARIADB;
@ -131,6 +133,7 @@ public class DefaultDataType<T> extends AbstractDataTypeX<T> {
private static final Set<SQLDialect> ENCODED_TIMESTAMP_PRECISION = SQLDialect.supportedBy(HSQLDB, MARIADB);
private static final Set<SQLDialect> NO_SUPPORT_TIMESTAMP_PRECISION = SQLDialect.supportedBy(FIREBIRD, MYSQL, SQLITE);
private static final Set<SQLDialect> SUPPORT_POSTGRES_ARRAY_NOTATION = SQLDialect.supportedBy(POSTGRES, YUGABYTE);
private static final Set<SQLDialect> SUPPORT_HSQLDB_ARRAY_NOTATION = SQLDialect.supportedBy(H2, HSQLDB);
/**
* A pattern for data type name normalisation.
@ -644,10 +647,14 @@ public class DefaultDataType<T> extends AbstractDataTypeX<T> {
else if (result == null && SUPPORT_POSTGRES_ARRAY_NOTATION.contains(dialect) && normalised.charAt(0) == '_')
result = getDataType(dialect, normalised.substring(1)).getArrayDataType();
// [#6466] HSQLDB reports array types as XYZARRAY
else if (result == null && family == HSQLDB && upper.endsWith(" ARRAY"))
// [#6466] HSQLDB reports array types as XYZARRAY. H2 should, too
else if (result == null && SUPPORT_HSQLDB_ARRAY_NOTATION.contains(dialect) && upper.endsWith(" ARRAY"))
result = getDataType(dialect, typeName.substring(0, typeName.length() - 6)).getArrayDataType();
// [#9609] H2 might still report an untyped array, too
else if (result == null && SUPPORT_HSQLDB_ARRAY_NOTATION.contains(dialect) && upper.equals("ARRAY"))
result = SQLDataType.OTHER.getArrayDataType();

View File

@ -588,6 +588,7 @@ final class InsertQueryImpl<R extends Record> extends AbstractStoreQuery<R> impl
case H2:

View File

@ -166,6 +166,7 @@ final class Limit extends AbstractQueryPart implements UTransient {
case DERBY:

View File

@ -40,6 +40,7 @@ package org.jooq.impl;
import static java.lang.Boolean.FALSE;
import static java.lang.Boolean.TRUE;
import static java.util.Arrays.asList;
import static java.util.Collections.emptyList;
// ...
// ...
// ...
@ -75,6 +76,7 @@ import static org.jooq.impl.SQLDataType.VARCHAR;
import static org.jooq.impl.Tools.EMPTY_OBJECT;
import static org.jooq.impl.Tools.EMPTY_SORTFIELD;
import static org.jooq.impl.Tools.flatMap;
import static org.jooq.impl.Tools.ignoreNPE;
import static org.jooq.impl.Tools.map;
import static org.jooq.tools.StringUtils.defaultIfEmpty;
import static org.jooq.tools.StringUtils.defaultString;
@ -85,6 +87,7 @@ import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@ -125,6 +128,7 @@ import org.jooq.exception.SQLDialectNotSupportedException;
import org.jooq.impl.ThreadGuard.Guard;
import org.jooq.tools.JooqLogger;
import org.jooq.tools.StringUtils;
import org.jooq.tools.jdbc.MockResultSet;
/**
* An implementation of the public {@link Meta} type.
@ -688,30 +692,36 @@ final class MetaImpl extends AbstractMeta {
@Override
public final List<Index> getIndexes() {
Result<Record> result = removeSystemIndexes(meta(meta -> {
try (ResultSet rs = catalogSchema(getCatalog(), getSchema(), (c, s) -> meta.getIndexInfo(c, s, getName(), false, true))) {
return dsl().fetch(
rs,
String.class, // TABLE_CAT
String.class, // TABLE_SCHEM
String.class, // TABLE_NAME
boolean.class, // NON_UNIQUE
String.class, // INDEX_QUALIFIER
String.class, // INDEX_NAME
int.class, // TYPE
int.class, // ORDINAL_POSITION
String.class, // COLUMN_NAME
String.class, // ASC_OR_DESC
long.class, // CARDINALITY
long.class, // PAGES
String.class // FILTER_CONDITION
);
}
}));
// See https://github.com/h2database/h2database/issues/3236
return ignoreNPE(
() -> {
Result<Record> result = removeSystemIndexes(meta(meta -> {
try (ResultSet rs = catalogSchema(getCatalog(), getSchema(), (c, s) -> meta.getIndexInfo(c, s, getName(), false, true))) {
return dsl().fetch(
rs,
String.class, // TABLE_CAT
String.class, // TABLE_SCHEM
String.class, // TABLE_NAME
boolean.class, // NON_UNIQUE
String.class, // INDEX_QUALIFIER
String.class, // INDEX_NAME
int.class, // TYPE
int.class, // ORDINAL_POSITION
String.class, // COLUMN_NAME
String.class, // ASC_OR_DESC
long.class, // CARDINALITY
long.class, // PAGES
String.class // FILTER_CONDITION
);
}
}));
// Sort by INDEX_NAME (5), ORDINAL_POSITION (7)
result.sortAsc(7).sortAsc(5);
return createIndexes(result);
// Sort by INDEX_NAME (5), ORDINAL_POSITION (7)
result.sortAsc(7).sortAsc(5);
return createIndexes(result);
},
() -> emptyList()
);
}
private final Result<Record> removeSystemIndexes(Result<Record> result) {

View File

@ -30,7 +30,7 @@ final class MetaSQL {
static {
M_UNIQUE_KEYS.put(FIREBIRD, "select null catalog, null schema, trim(RDB$RELATION_CONSTRAINTS.RDB$RELATION_NAME) RDB$RELATION_NAME, trim(RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_NAME) RDB$CONSTRAINT_NAME, trim(RDB$INDEX_SEGMENTS.RDB$FIELD_NAME) RDB$FIELD_NAME, RDB$INDEX_SEGMENTS.RDB$FIELD_POSITION from RDB$RELATION_CONSTRAINTS join RDB$INDEX_SEGMENTS on RDB$INDEX_SEGMENTS.RDB$INDEX_NAME = RDB$RELATION_CONSTRAINTS.RDB$INDEX_NAME where RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_TYPE = 'UNIQUE' order by RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_NAME asc, RDB$INDEX_SEGMENTS.RDB$FIELD_POSITION asc");
M_UNIQUE_KEYS.put(H2, "select INFORMATION_SCHEMA.CONSTRAINTS.TABLE_CATALOG, INFORMATION_SCHEMA.CONSTRAINTS.TABLE_SCHEMA, INFORMATION_SCHEMA.CONSTRAINTS.TABLE_NAME, INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_NAME, INFORMATION_SCHEMA.INDEXES.COLUMN_NAME, INFORMATION_SCHEMA.INDEXES.ORDINAL_POSITION from INFORMATION_SCHEMA.CONSTRAINTS join INFORMATION_SCHEMA.INDEXES on (INFORMATION_SCHEMA.CONSTRAINTS.TABLE_SCHEMA = INFORMATION_SCHEMA.INDEXES.TABLE_SCHEMA and INFORMATION_SCHEMA.CONSTRAINTS.TABLE_NAME = INFORMATION_SCHEMA.INDEXES.TABLE_NAME and INFORMATION_SCHEMA.CONSTRAINTS.UNIQUE_INDEX_NAME = INFORMATION_SCHEMA.INDEXES.INDEX_NAME) where (INFORMATION_SCHEMA.CONSTRAINTS.TABLE_SCHEMA in (cast(? as varchar(2147483647))) and INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_TYPE in ('UNIQUE')) order by INFORMATION_SCHEMA.CONSTRAINTS.TABLE_SCHEMA, INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_NAME, INFORMATION_SCHEMA.INDEXES.ORDINAL_POSITION");
M_UNIQUE_KEYS.put(H2, "select INFORMATION_SCHEMA.KEY_COLUMN_USAGE.TABLE_CATALOG, INFORMATION_SCHEMA.KEY_COLUMN_USAGE.TABLE_SCHEMA, INFORMATION_SCHEMA.KEY_COLUMN_USAGE.TABLE_NAME, INFORMATION_SCHEMA.KEY_COLUMN_USAGE.CONSTRAINT_NAME, INFORMATION_SCHEMA.KEY_COLUMN_USAGE.COLUMN_NAME, INFORMATION_SCHEMA.KEY_COLUMN_USAGE.ORDINAL_POSITION from (INFORMATION_SCHEMA.KEY_COLUMN_USAGE left outer join INFORMATION_SCHEMA.TABLE_CONSTRAINTS alias_10316587 on (INFORMATION_SCHEMA.KEY_COLUMN_USAGE.CONSTRAINT_CATALOG = alias_10316587.CONSTRAINT_CATALOG and INFORMATION_SCHEMA.KEY_COLUMN_USAGE.CONSTRAINT_SCHEMA = alias_10316587.CONSTRAINT_SCHEMA and INFORMATION_SCHEMA.KEY_COLUMN_USAGE.CONSTRAINT_NAME = alias_10316587.CONSTRAINT_NAME)) where (alias_10316587.CONSTRAINT_TYPE in ('UNIQUE') and alias_10316587.TABLE_SCHEMA in (cast(? as varchar(128)))) order by INFORMATION_SCHEMA.KEY_COLUMN_USAGE.TABLE_SCHEMA asc, INFORMATION_SCHEMA.KEY_COLUMN_USAGE.TABLE_NAME asc, INFORMATION_SCHEMA.KEY_COLUMN_USAGE.CONSTRAINT_NAME asc, INFORMATION_SCHEMA.KEY_COLUMN_USAGE.ORDINAL_POSITION asc");
M_UNIQUE_KEYS.put(HSQLDB, "select INFORMATION_SCHEMA.KEY_COLUMN_USAGE.TABLE_CATALOG, INFORMATION_SCHEMA.KEY_COLUMN_USAGE.TABLE_SCHEMA, INFORMATION_SCHEMA.KEY_COLUMN_USAGE.TABLE_NAME, INFORMATION_SCHEMA.KEY_COLUMN_USAGE.CONSTRAINT_NAME, INFORMATION_SCHEMA.KEY_COLUMN_USAGE.COLUMN_NAME, INFORMATION_SCHEMA.KEY_COLUMN_USAGE.ORDINAL_POSITION from (INFORMATION_SCHEMA.KEY_COLUMN_USAGE left outer join INFORMATION_SCHEMA.TABLE_CONSTRAINTS as alias_10316587 on (INFORMATION_SCHEMA.KEY_COLUMN_USAGE.CONSTRAINT_CATALOG = alias_10316587.CONSTRAINT_CATALOG and INFORMATION_SCHEMA.KEY_COLUMN_USAGE.CONSTRAINT_SCHEMA = alias_10316587.CONSTRAINT_SCHEMA and INFORMATION_SCHEMA.KEY_COLUMN_USAGE.CONSTRAINT_NAME = alias_10316587.CONSTRAINT_NAME)) where (alias_10316587.CONSTRAINT_TYPE = 'UNIQUE' and alias_10316587.TABLE_SCHEMA in (cast(? as varchar(128)))) order by INFORMATION_SCHEMA.KEY_COLUMN_USAGE.TABLE_SCHEMA asc, INFORMATION_SCHEMA.KEY_COLUMN_USAGE.TABLE_NAME asc, INFORMATION_SCHEMA.KEY_COLUMN_USAGE.CONSTRAINT_NAME asc, INFORMATION_SCHEMA.KEY_COLUMN_USAGE.ORDINAL_POSITION asc");
M_UNIQUE_KEYS.put(MARIADB, "select distinct null as TABLE_CATALOG, information_schema.STATISTICS.TABLE_SCHEMA, information_schema.STATISTICS.TABLE_NAME, information_schema.STATISTICS.INDEX_NAME, information_schema.STATISTICS.COLUMN_NAME, information_schema.STATISTICS.SEQ_IN_INDEX from information_schema.STATISTICS where (information_schema.STATISTICS.TABLE_SCHEMA in (?, 'ee7f6174-34f2-484b-8d81-20a4d9fc866d') and information_schema.STATISTICS.INDEX_NAME <> 'PRIMARY' and information_schema.STATISTICS.NON_UNIQUE = 0) order by information_schema.STATISTICS.TABLE_SCHEMA, information_schema.STATISTICS.TABLE_NAME, information_schema.STATISTICS.INDEX_NAME, information_schema.STATISTICS.SEQ_IN_INDEX");
M_UNIQUE_KEYS.put(MYSQL, "select distinct null as TABLE_CATALOG, information_schema.STATISTICS.TABLE_SCHEMA, information_schema.STATISTICS.TABLE_NAME, information_schema.STATISTICS.INDEX_NAME, information_schema.STATISTICS.COLUMN_NAME, information_schema.STATISTICS.SEQ_IN_INDEX from information_schema.STATISTICS where (information_schema.STATISTICS.TABLE_SCHEMA in (?, 'ee7f6174-34f2-484b-8d81-20a4d9fc866d') and information_schema.STATISTICS.INDEX_NAME <> 'PRIMARY' and information_schema.STATISTICS.NON_UNIQUE = 0) order by information_schema.STATISTICS.TABLE_SCHEMA, information_schema.STATISTICS.TABLE_NAME, information_schema.STATISTICS.INDEX_NAME, information_schema.STATISTICS.SEQ_IN_INDEX");
@ -86,11 +86,12 @@ final class MetaSQL {
M_SEQUENCES.put(DERBY, "select cast(null as varchar(32672)) as catalog, alias_8805161.SCHEMANAME, SYS.SYSSEQUENCES.SEQUENCENAME, SYS.SYSSEQUENCES.SEQUENCEDATATYPE, cast(null as int) as numeric_precision, cast(null as int) as numeric_scale, nullif(SYS.SYSSEQUENCES.STARTVALUE, 1) as STARTVALUE, nullif(SYS.SYSSEQUENCES.INCREMENT, 1) as INCREMENT, nullif(SYS.SYSSEQUENCES.MINIMUMVALUE, case when cast(SYS.SYSSEQUENCES.SEQUENCEDATATYPE as varchar(32672)) = 'SMALLINT' then -32768 when cast(SYS.SYSSEQUENCES.SEQUENCEDATATYPE as varchar(32672)) = 'INTEGER' then -2147483648 when cast(SYS.SYSSEQUENCES.SEQUENCEDATATYPE as varchar(32672)) = 'BIGINT' then -9223372036854775808 end) as MINIMUMVALUE, nullif(SYS.SYSSEQUENCES.MAXIMUMVALUE, case when cast(SYS.SYSSEQUENCES.SEQUENCEDATATYPE as varchar(32672)) = 'SMALLINT' then 32767 when cast(SYS.SYSSEQUENCES.SEQUENCEDATATYPE as varchar(32672)) = 'INTEGER' then 2147483647 when cast(SYS.SYSSEQUENCES.SEQUENCEDATATYPE as varchar(32672)) = 'BIGINT' then 9223372036854775807 end) as MAXIMUMVALUE, (SYS.SYSSEQUENCES.CYCLEOPTION = 'Y') as CYCLEOPTION, cast(null as bigint) as cache from (SYS.SYSSEQUENCES join SYS.SYSSCHEMAS as alias_8805161 on SYS.SYSSEQUENCES.SCHEMAID = alias_8805161.SCHEMAID) where cast(alias_8805161.SCHEMANAME as varchar(32672)) in (cast(? as varchar(32672))) order by alias_8805161.SCHEMANAME, SYS.SYSSEQUENCES.SEQUENCENAME");
M_SEQUENCES.put(FIREBIRD, "select null catalog, null schema, trim(RDB$GENERATORS.RDB$GENERATOR_NAME) RDB$GENERATOR_NAME, 'BIGINT' type_name, null numeric_precision, null numeric_scale, nullif(RDB$GENERATORS.RDB$INITIAL_VALUE, 0) RDB$INITIAL_VALUE, nullif(RDB$GENERATORS.RDB$GENERATOR_INCREMENT, 1) RDB$GENERATOR_INCREMENT, null min_value, null max_value, null cycle, null cache from RDB$GENERATORS where RDB$GENERATORS.RDB$GENERATOR_NAME not in (select RDB$RELATION_FIELDS.RDB$GENERATOR_NAME from RDB$RELATION_FIELDS where (RDB$RELATION_FIELDS.RDB$GENERATOR_NAME is not null and RDB$RELATION_FIELDS.RDB$IDENTITY_TYPE = 1)) order by RDB$GENERATORS.RDB$GENERATOR_NAME");
M_SEQUENCES.put(H2, "select null catalog, INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA, INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_NAME, 'BIGINT' type_name, null precision, null scale, null start_value, nullif(INFORMATION_SCHEMA.SEQUENCES.INCREMENT, 1) INCREMENT, nullif(INFORMATION_SCHEMA.SEQUENCES.MIN_VALUE, 1) MIN_VALUE, nullif(INFORMATION_SCHEMA.SEQUENCES.MAX_VALUE, 9223372036854775807) MAX_VALUE, INFORMATION_SCHEMA.SEQUENCES.IS_CYCLE, nullif(INFORMATION_SCHEMA.SEQUENCES.CACHE, 32) CACHE from INFORMATION_SCHEMA.SEQUENCES where (INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA in (cast(? as varchar(2147483647))) and upper(INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_NAME) not like 'SYSTEM!_SEQUENCE!_%' escape '!') order by INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA, INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_NAME");
M_SEQUENCES.put(H2, "select null catalog, INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA, INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_NAME, 'BIGINT' type_name, null precision, null scale, null start_value, nullif(INFORMATION_SCHEMA.SEQUENCES.INCREMENT, 1) INCREMENT, nullif(SEQUENCES.MINIMUM_VALUE, 1) MIN_VALUE, nullif(SEQUENCES.MAXIMUM_VALUE, 9223372036854775807) MAX_VALUE, (SEQUENCES.CYCLE_OPTION = 'YES') IS_CYCLE, nullif(INFORMATION_SCHEMA.SEQUENCES.CACHE, 32) CACHE from INFORMATION_SCHEMA.SEQUENCES where (INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA in (cast(? as varchar)) and upper(INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_NAME) not like 'SYSTEM!_SEQUENCE!_%' escape '!') order by INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA, INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_NAME");
M_SEQUENCES.put(HSQLDB, "select null as catalog, INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA, INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_NAME, INFORMATION_SCHEMA.SEQUENCES.DATA_TYPE, INFORMATION_SCHEMA.SEQUENCES.NUMERIC_PRECISION, INFORMATION_SCHEMA.SEQUENCES.NUMERIC_SCALE, INFORMATION_SCHEMA.SEQUENCES.START_WITH, INFORMATION_SCHEMA.SEQUENCES.INCREMENT, INFORMATION_SCHEMA.SEQUENCES.MINIMUM_VALUE, INFORMATION_SCHEMA.SEQUENCES.MAXIMUM_VALUE, case when INFORMATION_SCHEMA.SEQUENCES.CYCLE_OPTION is not distinct from 'YES' then true else false end as CYCLE_OPTION, null as cache from INFORMATION_SCHEMA.SEQUENCES where INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA in (cast(? as varchar(128))) order by INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA, INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_NAME");
M_SEQUENCES.put(POSTGRES, "with schemas(schema) as (select v.c1 from (values (?)) as v (c1)) (select null as catalog, information_schema.sequences.sequence_schema, information_schema.sequences.sequence_name, information_schema.sequences.data_type, information_schema.sequences.numeric_precision, information_schema.sequences.numeric_scale, nullif(cast(information_schema.sequences.start_value as bigint), 1) as start_value, nullif(cast(information_schema.sequences.increment as bigint), 1) as increment, nullif(cast(information_schema.sequences.minimum_value as bigint), 1) as minimum_value, nullif(cast(information_schema.sequences.maximum_value as decimal), (power(cast(2 as decimal), cast((information_schema.sequences.numeric_precision - 1) as decimal)) - 1)) as maximum_value, cast(information_schema.sequences.cycle_option as boolean) as cycle_option, null as cache from information_schema.sequences where (information_schema.sequences.sequence_schema in (select schemas.schema from schemas) and (information_schema.sequences.sequence_schema, information_schema.sequences.sequence_name) not in (select information_schema.columns.table_schema, (((information_schema.columns.table_name || '_') || information_schema.columns.column_name) || '_seq') from information_schema.columns where (information_schema.columns.column_default = (('nextval(''' || ((information_schema.columns.table_name || '_') || information_schema.columns.column_name)) || '_seq''::regclass)') or information_schema.columns.column_default = (('nextval(''' || ((((information_schema.columns.table_schema || '.') || information_schema.columns.table_name) || '_') || information_schema.columns.column_name)) || '_seq''::regclass)'))))) union all (select '', '', '', '', 0, 0, 0, 0, 0, 0, false, 0 where false) order by 2, 3");
M_SEQUENCES.put(YUGABYTE, "with schemas(schema) as (select v.c1 from (values (?)) as v (c1)) (select null as catalog, information_schema.sequences.sequence_schema, information_schema.sequences.sequence_name, information_schema.sequences.data_type, information_schema.sequences.numeric_precision, information_schema.sequences.numeric_scale, nullif(cast(information_schema.sequences.start_value as bigint), 1) as start_value, nullif(cast(information_schema.sequences.increment as bigint), 1) as increment, nullif(cast(information_schema.sequences.minimum_value as bigint), 1) as minimum_value, nullif(cast(information_schema.sequences.maximum_value as decimal), (power(cast(2 as decimal), cast((information_schema.sequences.numeric_precision - 1) as decimal)) - 1)) as maximum_value, cast(information_schema.sequences.cycle_option as boolean) as cycle_option, null as cache from information_schema.sequences where (information_schema.sequences.sequence_schema in (select schemas.schema from schemas) and (information_schema.sequences.sequence_schema, information_schema.sequences.sequence_name) not in (select information_schema.columns.table_schema, (((information_schema.columns.table_name || '_') || information_schema.columns.column_name) || '_seq') from information_schema.columns where (information_schema.columns.column_default = (('nextval(''' || ((information_schema.columns.table_name || '_') || information_schema.columns.column_name)) || '_seq''::regclass)') or information_schema.columns.column_default = (('nextval(''' || ((((information_schema.columns.table_schema || '.') || information_schema.columns.table_name) || '_') || information_schema.columns.column_name)) || '_seq''::regclass)'))))) union all (select '', '', '', '', 0, 0, 0, 0, 0, 0, false, 0 where false) order by 2, 3");
@ -131,11 +132,12 @@ final class MetaSQL {
M_SEQUENCES_INCLUDING_SYSTEM_SEQUENCES.put(DERBY, "select cast(null as varchar(32672)) as catalog, alias_8805161.SCHEMANAME, SYS.SYSSEQUENCES.SEQUENCENAME, SYS.SYSSEQUENCES.SEQUENCEDATATYPE, cast(null as int) as numeric_precision, cast(null as int) as numeric_scale, nullif(SYS.SYSSEQUENCES.STARTVALUE, 1) as STARTVALUE, nullif(SYS.SYSSEQUENCES.INCREMENT, 1) as INCREMENT, nullif(SYS.SYSSEQUENCES.MINIMUMVALUE, case when cast(SYS.SYSSEQUENCES.SEQUENCEDATATYPE as varchar(32672)) = 'SMALLINT' then -32768 when cast(SYS.SYSSEQUENCES.SEQUENCEDATATYPE as varchar(32672)) = 'INTEGER' then -2147483648 when cast(SYS.SYSSEQUENCES.SEQUENCEDATATYPE as varchar(32672)) = 'BIGINT' then -9223372036854775808 end) as MINIMUMVALUE, nullif(SYS.SYSSEQUENCES.MAXIMUMVALUE, case when cast(SYS.SYSSEQUENCES.SEQUENCEDATATYPE as varchar(32672)) = 'SMALLINT' then 32767 when cast(SYS.SYSSEQUENCES.SEQUENCEDATATYPE as varchar(32672)) = 'INTEGER' then 2147483647 when cast(SYS.SYSSEQUENCES.SEQUENCEDATATYPE as varchar(32672)) = 'BIGINT' then 9223372036854775807 end) as MAXIMUMVALUE, (SYS.SYSSEQUENCES.CYCLEOPTION = 'Y') as CYCLEOPTION, cast(null as bigint) as cache from (SYS.SYSSEQUENCES join SYS.SYSSCHEMAS as alias_8805161 on SYS.SYSSEQUENCES.SCHEMAID = alias_8805161.SCHEMAID) where cast(alias_8805161.SCHEMANAME as varchar(32672)) in (cast(? as varchar(32672))) order by alias_8805161.SCHEMANAME, SYS.SYSSEQUENCES.SEQUENCENAME");
M_SEQUENCES_INCLUDING_SYSTEM_SEQUENCES.put(FIREBIRD, "select null catalog, null schema, trim(RDB$GENERATORS.RDB$GENERATOR_NAME) RDB$GENERATOR_NAME, 'BIGINT' type_name, null numeric_precision, null numeric_scale, nullif(RDB$GENERATORS.RDB$INITIAL_VALUE, 0) RDB$INITIAL_VALUE, nullif(RDB$GENERATORS.RDB$GENERATOR_INCREMENT, 1) RDB$GENERATOR_INCREMENT, null min_value, null max_value, null cycle, null cache from RDB$GENERATORS order by RDB$GENERATORS.RDB$GENERATOR_NAME");
M_SEQUENCES_INCLUDING_SYSTEM_SEQUENCES.put(H2, "select null catalog, INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA, INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_NAME, 'BIGINT' type_name, null precision, null scale, null start_value, nullif(INFORMATION_SCHEMA.SEQUENCES.INCREMENT, 1) INCREMENT, nullif(INFORMATION_SCHEMA.SEQUENCES.MIN_VALUE, 1) MIN_VALUE, nullif(INFORMATION_SCHEMA.SEQUENCES.MAX_VALUE, 9223372036854775807) MAX_VALUE, INFORMATION_SCHEMA.SEQUENCES.IS_CYCLE, nullif(INFORMATION_SCHEMA.SEQUENCES.CACHE, 32) CACHE from INFORMATION_SCHEMA.SEQUENCES where INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA in (cast(? as varchar(2147483647))) order by INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA, INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_NAME");
M_SEQUENCES_INCLUDING_SYSTEM_SEQUENCES.put(H2, "select null catalog, INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA, INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_NAME, 'BIGINT' type_name, null precision, null scale, null start_value, nullif(INFORMATION_SCHEMA.SEQUENCES.INCREMENT, 1) INCREMENT, nullif(SEQUENCES.MINIMUM_VALUE, 1) MIN_VALUE, nullif(SEQUENCES.MAXIMUM_VALUE, 9223372036854775807) MAX_VALUE, (SEQUENCES.CYCLE_OPTION = 'YES') IS_CYCLE, nullif(INFORMATION_SCHEMA.SEQUENCES.CACHE, 32) CACHE from INFORMATION_SCHEMA.SEQUENCES where INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA in (cast(? as varchar)) order by INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA, INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_NAME");
M_SEQUENCES_INCLUDING_SYSTEM_SEQUENCES.put(HSQLDB, "select null as catalog, INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA, INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_NAME, INFORMATION_SCHEMA.SEQUENCES.DATA_TYPE, INFORMATION_SCHEMA.SEQUENCES.NUMERIC_PRECISION, INFORMATION_SCHEMA.SEQUENCES.NUMERIC_SCALE, INFORMATION_SCHEMA.SEQUENCES.START_WITH, INFORMATION_SCHEMA.SEQUENCES.INCREMENT, INFORMATION_SCHEMA.SEQUENCES.MINIMUM_VALUE, INFORMATION_SCHEMA.SEQUENCES.MAXIMUM_VALUE, case when INFORMATION_SCHEMA.SEQUENCES.CYCLE_OPTION is not distinct from 'YES' then true else false end as CYCLE_OPTION, null as cache from INFORMATION_SCHEMA.SEQUENCES where INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA in (cast(? as varchar(128))) order by INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA, INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_NAME");
M_SEQUENCES_INCLUDING_SYSTEM_SEQUENCES.put(POSTGRES, "with schemas(schema) as (select v.c1 from (values (?)) as v (c1)) (select null as catalog, information_schema.sequences.sequence_schema, information_schema.sequences.sequence_name, information_schema.sequences.data_type, information_schema.sequences.numeric_precision, information_schema.sequences.numeric_scale, nullif(cast(information_schema.sequences.start_value as bigint), 1) as start_value, nullif(cast(information_schema.sequences.increment as bigint), 1) as increment, nullif(cast(information_schema.sequences.minimum_value as bigint), 1) as minimum_value, nullif(cast(information_schema.sequences.maximum_value as decimal), (power(cast(2 as decimal), cast((information_schema.sequences.numeric_precision - 1) as decimal)) - 1)) as maximum_value, cast(information_schema.sequences.cycle_option as boolean) as cycle_option, null as cache from information_schema.sequences where information_schema.sequences.sequence_schema in (select schemas.schema from schemas)) union all (select null, alias_14763223.nspname, alias_75351712.relname, alias_109453426.typname, information_schema._pg_numeric_precision(alias_109453426.typbasetype, alias_109453426.typtypmod), 0, pg_catalog.pg_sequence.seqstart, pg_catalog.pg_sequence.seqincrement, pg_catalog.pg_sequence.seqmin, pg_catalog.pg_sequence.seqmax, pg_catalog.pg_sequence.seqcycle, null as cache from (pg_catalog.pg_sequence join (pg_catalog.pg_class as alias_75351712 join pg_catalog.pg_namespace as alias_14763223 on alias_75351712.relnamespace = alias_14763223.oid) on pg_catalog.pg_sequence.seqrelid = alias_75351712.oid join pg_catalog.pg_type as alias_109453426 on pg_catalog.pg_sequence.seqtypid = alias_109453426.oid) where (alias_14763223.nspname in (select schemas.schema from schemas) and alias_75351712.oid in (select pg_catalog.pg_depend.objid from pg_catalog.pg_depend where (pg_catalog.pg_depend.deptype = 'i' and pg_catalog.pg_depend.classid = 'pg_class'::regclass)))) order by 2, 3");
M_SEQUENCES_INCLUDING_SYSTEM_SEQUENCES.put(YUGABYTE, "with schemas(schema) as (select v.c1 from (values (?)) as v (c1)) (select null as catalog, information_schema.sequences.sequence_schema, information_schema.sequences.sequence_name, information_schema.sequences.data_type, information_schema.sequences.numeric_precision, information_schema.sequences.numeric_scale, nullif(cast(information_schema.sequences.start_value as bigint), 1) as start_value, nullif(cast(information_schema.sequences.increment as bigint), 1) as increment, nullif(cast(information_schema.sequences.minimum_value as bigint), 1) as minimum_value, nullif(cast(information_schema.sequences.maximum_value as decimal), (power(cast(2 as decimal), cast((information_schema.sequences.numeric_precision - 1) as decimal)) - 1)) as maximum_value, cast(information_schema.sequences.cycle_option as boolean) as cycle_option, null as cache from information_schema.sequences where information_schema.sequences.sequence_schema in (select schemas.schema from schemas)) union all (select '', '', '', '', 0, 0, 0, 0, 0, 0, false, 0 where false) order by 2, 3");
@ -175,6 +177,7 @@ final class MetaSQL {
}

View File

@ -418,7 +418,7 @@ final class R2DBC {
&& !q2.nativeSupportReturning(configuration.dsl()))
&& !q2.nativeSupportReturningOrDataChangeDeltaTable(configuration.dsl()))
stmt.returnGeneratedValues(Tools.map(q2.returningResolvedAsterisks, Field::getName, String[]::new));
stmt.execute().subscribe(resultSubscriber.apply(query, downstream));

View File

@ -92,7 +92,7 @@ implements
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);

View File

@ -92,7 +92,7 @@ implements
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);

View File

@ -92,7 +92,7 @@ implements
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);

View File

@ -92,7 +92,7 @@ implements
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);

View File

@ -92,7 +92,7 @@ implements
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);

View File

@ -92,7 +92,7 @@ implements
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);

View File

@ -92,7 +92,7 @@ implements
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);

View File

@ -92,7 +92,7 @@ implements
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);

View File

@ -92,7 +92,7 @@ implements
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);

View File

@ -42,6 +42,7 @@ import static org.jooq.Clause.SEQUENCE_REFERENCE;
import static org.jooq.SQLDialect.CUBRID;
import static org.jooq.SQLDialect.FIREBIRD;
import static org.jooq.SQLDialect.H2;
// ...
import static org.jooq.SQLDialect.HSQLDB;
// ...
import static org.jooq.SQLDialect.MARIADB;
@ -265,9 +266,11 @@ implements
case MARIADB:
if (method == SequenceMethod.NEXTVAL)
ctx.visit(K_NEXT_VALUE_FOR).sql(' ').visit(sequence);
else if (family == H2)
ctx.visit(sequence).sql('.').visit(method.keyword);
else if (family == HSQLDB)
else if (family == HSQLDB || family == H2)
ctx.visit(K_CURRENT_VALUE_FOR).sql(' ').visit(sequence);
else if (family == MARIADB)
ctx.visit(K_PREVIOUS_VALUE_FOR).sql(' ').visit(sequence);

View File

@ -316,6 +316,7 @@ import org.jooq.conf.ThrowExceptions;
import org.jooq.exception.DataAccessException;
import org.jooq.exception.DataTypeException;
import org.jooq.exception.DetachedException;
import org.jooq.exception.ExceptionTools;
import org.jooq.exception.MappingException;
import org.jooq.exception.NoDataFoundException;
import org.jooq.exception.TemplatingException;
@ -5261,6 +5262,9 @@ final class Tools {
@ -6659,4 +6663,23 @@ final class Tools {
else
return (int) value;
}
/**
* Used to work around bugs in JDBC drivers, e.g.
* https://github.com/h2database/h2database/issues/3236
*/
static final <T, E extends Exception> T ignoreNPE(ThrowingSupplier<? extends T, ? extends E> supplier, Supplier<? extends T> ifNPE) throws E {
try {
return supplier.get();
}
catch (NullPointerException e) {
return ifNPE.get();
}
catch (Exception e) {
if (ExceptionTools.getCause(e, NullPointerException.class) != null)
return ifNPE.get();
else
throw e;
}
}
}

View File

@ -396,6 +396,8 @@ public class JDBCUtils {
return H2;
}

View File

@ -102,6 +102,7 @@ public class H2DataType {
public static final DataType<BigDecimal> NUMBER = new DefaultDataType<>(FAMILY, SQLDataType.NUMERIC, "number(p, s)");
public static final DataType<BigDecimal> NUMERIC = new DefaultDataType<>(FAMILY, SQLDataType.NUMERIC, "numeric(p, s)");
public static final DataType<Double> DOUBLE = new DefaultDataType<>(FAMILY, SQLDataType.DOUBLE, "double");
public static final DataType<Double> DOUBLEPRECISION = new DefaultDataType<>(FAMILY, SQLDataType.DOUBLE, "double precision");
public static final DataType<Double> FLOAT = new DefaultDataType<>(FAMILY, SQLDataType.FLOAT, "float");
public static final DataType<Double> FLOAT4 = new DefaultDataType<>(FAMILY, SQLDataType.FLOAT, "float4");
public static final DataType<Double> FLOAT8 = new DefaultDataType<>(FAMILY, SQLDataType.FLOAT, "float8");
@ -116,13 +117,17 @@ public class H2DataType {
public static final DataType<byte[]> VARBINARY = new DefaultDataType<>(FAMILY, SQLDataType.VARBINARY, "varbinary(l)");
public static final DataType<byte[]> LONGVARBINARY = new DefaultDataType<>(FAMILY, SQLDataType.LONGVARBINARY, "longvarbinary(l)");
public static final DataType<byte[]> BLOB = new DefaultDataType<>(FAMILY, SQLDataType.BLOB, "blob");
public static final DataType<byte[]> BINARYLARGEOBJECT = new DefaultDataType<>(FAMILY, SQLDataType.BLOB, "binary large object");
public static final DataType<Object> OTHER = new DefaultDataType<>(FAMILY, SQLDataType.OTHER, "other");
public static final DataType<Object> JAVAOBJECT = new DefaultDataType<>(FAMILY, SQLDataType.OTHER, "java_object");
public static final DataType<String> VARCHAR = new DefaultDataType<>(FAMILY, SQLDataType.VARCHAR, "varchar(l)");
public static final DataType<String> VARCHAR2 = new DefaultDataType<>(FAMILY, SQLDataType.VARCHAR, "varchar2(l)");
public static final DataType<String> CHARACTERVARYING = new DefaultDataType<>(FAMILY, SQLDataType.VARCHAR, "character varying(l)");
public static final DataType<String> CHAR = new DefaultDataType<>(FAMILY, SQLDataType.CHAR, "char(l)");
public static final DataType<String> CHARACTER = new DefaultDataType<>(FAMILY, SQLDataType.CHAR, "character(l)");
public static final DataType<String> LONGVARCHAR = new DefaultDataType<>(FAMILY, SQLDataType.LONGVARCHAR, "longvarchar(l)");
public static final DataType<String> CLOB = new DefaultDataType<>(FAMILY, SQLDataType.CLOB, "clob");
public static final DataType<String> CHARACTERLARGEOBJECT = new DefaultDataType<>(FAMILY, SQLDataType.CLOB, "character large object");
public static final DataType<String> NVARCHAR = new DefaultDataType<>(FAMILY, SQLDataType.NVARCHAR, "nvarchar(l)");
public static final DataType<String> NVARCHAR2 = new DefaultDataType<>(FAMILY, SQLDataType.NVARCHAR, "nvarchar2(l)");
public static final DataType<String> NCHAR = new DefaultDataType<>(FAMILY, SQLDataType.NCHAR, "nchar(l)");
@ -162,7 +167,6 @@ public class H2DataType {
public static final DataType<byte[]> MEDIUMBLOB = new DefaultDataType<>(FAMILY, SQLDataType.BLOB, "mediumblob");
public static final DataType<byte[]> LONGBLOB = new DefaultDataType<>(FAMILY, SQLDataType.BLOB, "longblob");
public static final DataType<byte[]> IMAGE = new DefaultDataType<>(FAMILY, SQLDataType.BLOB, "image");
public static final DataType<byte[]> OID = new DefaultDataType<>(FAMILY, SQLDataType.BLOB, "oid");
public static final DataType<String> VARCHAR_CASESENSITIVE = new DefaultDataType<>(FAMILY, SQLDataType.VARCHAR, "varchar_casesensitive(l)");
public static final DataType<String> VARCHAR_IGNORECASE = new DefaultDataType<>(FAMILY, SQLDataType.VARCHAR, "varchar_ignorecase(l)");
public static final DataType<UUID> UUID = new DefaultDataType<>(FAMILY, SQLDataType.UUID, "uuid");

View File

@ -27,7 +27,7 @@
<properties>
<!-- These in-memory DBs are used by jOOQ-meta-extensions and a variety of integration tests -->
<h2.version>1.4.200</h2.version>
<h2.version>2.0.202</h2.version>
<sqlite.version>3.32.3.2</sqlite.version>
<derby.version>10.14.2.0</derby.version>
<hsqldb.version>2.5.1</hsqldb.version>