[jOOQ/jOOQ#681] Added DOMAIN support for Firebird
This commit is contained in:
parent
e11b1f4b9e
commit
f832758b7f
@ -37,6 +37,7 @@
|
||||
*/
|
||||
package org.jooq.meta.firebird;
|
||||
|
||||
import static org.jooq.impl.DSL.any;
|
||||
import static org.jooq.impl.DSL.choose;
|
||||
import static org.jooq.impl.DSL.decode;
|
||||
import static org.jooq.impl.DSL.falseCondition;
|
||||
@ -50,6 +51,7 @@ import static org.jooq.impl.DSL.trim;
|
||||
import static org.jooq.impl.DSL.when;
|
||||
import static org.jooq.impl.DSL.zero;
|
||||
import static org.jooq.meta.firebird.rdb.Tables.RDB$CHECK_CONSTRAINTS;
|
||||
import static org.jooq.meta.firebird.rdb.Tables.RDB$FIELDS;
|
||||
import static org.jooq.meta.firebird.rdb.Tables.RDB$GENERATORS;
|
||||
import static org.jooq.meta.firebird.rdb.Tables.RDB$INDEX_SEGMENTS;
|
||||
import static org.jooq.meta.firebird.rdb.Tables.RDB$INDICES;
|
||||
@ -82,6 +84,7 @@ import org.jooq.meta.CatalogDefinition;
|
||||
import org.jooq.meta.DataTypeDefinition;
|
||||
import org.jooq.meta.DefaultCheckConstraintDefinition;
|
||||
import org.jooq.meta.DefaultDataTypeDefinition;
|
||||
import org.jooq.meta.DefaultDomainDefinition;
|
||||
import org.jooq.meta.DefaultIndexColumnDefinition;
|
||||
import org.jooq.meta.DefaultRelations;
|
||||
import org.jooq.meta.DefaultSequenceDefinition;
|
||||
@ -103,6 +106,7 @@ import org.jooq.meta.firebird.rdb.tables.Rdb$refConstraints;
|
||||
import org.jooq.meta.firebird.rdb.tables.Rdb$relationConstraints;
|
||||
import org.jooq.meta.firebird.rdb.tables.Rdb$triggers;
|
||||
import org.jooq.meta.jaxb.SchemaMappingType;
|
||||
import org.jooq.tools.StringUtils;
|
||||
import org.jooq.util.firebird.FirebirdDataType;
|
||||
|
||||
/**
|
||||
@ -460,6 +464,49 @@ public class FirebirdDatabase extends AbstractDatabase {
|
||||
@Override
|
||||
protected List<DomainDefinition> getDomains0() throws SQLException {
|
||||
List<DomainDefinition> result = new ArrayList<>();
|
||||
|
||||
Rdb$fields f = RDB$FIELDS;
|
||||
|
||||
for (Record record : create()
|
||||
.select(
|
||||
trim(f.RDB$FIELD_NAME).as(f.RDB$FIELD_NAME),
|
||||
|
||||
CHARACTER_LENGTH(f).as("CHAR_LEN"),
|
||||
f.RDB$FIELD_PRECISION,
|
||||
FIELD_SCALE(f).as("FIELD_SCALE"),
|
||||
FIELD_TYPE(f).as("FIELD_TYPE"),
|
||||
DSL.bitOr(f.RDB$NULL_FLAG.nvl((short) 0), f.RDB$NULL_FLAG.nvl((short) 0)).as(f.RDB$NULL_FLAG),
|
||||
trim(f.RDB$VALIDATION_SOURCE).as(f.RDB$VALIDATION_SOURCE),
|
||||
trim(f.RDB$DEFAULT_SOURCE).as(f.RDB$DEFAULT_SOURCE))
|
||||
.from(f)
|
||||
.where(f.RDB$FIELD_NAME.notLike(any("RDB$%", "SEC$%", "MON$%")))
|
||||
.orderBy(f.RDB$FIELD_NAME)
|
||||
) {
|
||||
SchemaDefinition schema = getSchemata().get(0);
|
||||
|
||||
DataTypeDefinition baseType = new DefaultDataTypeDefinition(
|
||||
this,
|
||||
schema,
|
||||
record.get("FIELD_TYPE", String.class),
|
||||
record.get("CHAR_LEN", short.class),
|
||||
record.get(f.RDB$FIELD_PRECISION),
|
||||
record.get("FIELD_SCALE", Integer.class),
|
||||
record.get(f.RDB$NULL_FLAG) == 0,
|
||||
record.get(f.RDB$DEFAULT_SOURCE) == null ? null : record.get(f.RDB$DEFAULT_SOURCE).replaceAll("(?i:default )", "")
|
||||
);
|
||||
|
||||
DefaultDomainDefinition domain = new DefaultDomainDefinition(
|
||||
schema,
|
||||
record.get(f.RDB$FIELD_NAME),
|
||||
baseType
|
||||
);
|
||||
|
||||
if (!StringUtils.isBlank(record.get(f.RDB$VALIDATION_SOURCE)))
|
||||
domain.addCheckClause(record.get(f.RDB$VALIDATION_SOURCE).replaceAll("(?i:check )", ""));
|
||||
|
||||
result.add(domain);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@ -37,6 +37,7 @@
|
||||
*/
|
||||
package org.jooq.meta.firebird;
|
||||
|
||||
import static org.jooq.impl.DSL.trim;
|
||||
import static org.jooq.meta.firebird.FirebirdDatabase.CHARACTER_LENGTH;
|
||||
import static org.jooq.meta.firebird.FirebirdDatabase.FIELD_SCALE;
|
||||
import static org.jooq.meta.firebird.FirebirdDatabase.FIELD_TYPE;
|
||||
@ -85,7 +86,7 @@ public class FirebirdTableDefinition extends AbstractTableDefinition {
|
||||
// DatabaseMetaData implementation
|
||||
for (Record record : create()
|
||||
.select(
|
||||
r.RDB$FIELD_NAME.trim(),
|
||||
trim(r.RDB$FIELD_NAME).as(r.RDB$FIELD_NAME),
|
||||
r.RDB$DESCRIPTION,
|
||||
r.RDB$DEFAULT_VALUE,
|
||||
DSL.bitOr(r.RDB$NULL_FLAG.nvl((short) 0), f.RDB$NULL_FLAG.nvl((short) 0)).as(r.RDB$NULL_FLAG),
|
||||
@ -97,13 +98,12 @@ public class FirebirdTableDefinition extends AbstractTableDefinition {
|
||||
f.RDB$FIELD_PRECISION,
|
||||
FIELD_SCALE(f).as("FIELD_SCALE"),
|
||||
FIELD_TYPE(f).as("FIELD_TYPE"),
|
||||
f.RDB$FIELD_SUB_TYPE,
|
||||
trim(f.RDB$FIELD_NAME).as("DOMAIN_NAME"),
|
||||
r.RDB$DESCRIPTION)
|
||||
.from(r)
|
||||
.leftOuterJoin(f).on(r.RDB$FIELD_SOURCE.eq(f.RDB$FIELD_NAME))
|
||||
.where(r.RDB$RELATION_NAME.eq(getName()))
|
||||
.orderBy(r.RDB$FIELD_POSITION)
|
||||
.fetch()) {
|
||||
.orderBy(r.RDB$FIELD_POSITION)) {
|
||||
|
||||
// [#9411] Firebird reports the DEFAULT keyword in this column, which
|
||||
// we do not want to reproduce in generated code.
|
||||
@ -112,23 +112,24 @@ public class FirebirdTableDefinition extends AbstractTableDefinition {
|
||||
defaultValue = P_DEFAULT.matcher(defaultValue).replaceFirst("");
|
||||
|
||||
DefaultDataTypeDefinition type = new DefaultDataTypeDefinition(
|
||||
getDatabase(),
|
||||
getSchema(),
|
||||
record.get("FIELD_TYPE", String.class),
|
||||
record.get("CHAR_LEN", short.class),
|
||||
record.get(f.RDB$FIELD_PRECISION),
|
||||
record.get("FIELD_SCALE", Integer.class),
|
||||
record.get(r.RDB$NULL_FLAG) == 0,
|
||||
defaultValue
|
||||
getDatabase(),
|
||||
getSchema(),
|
||||
record.get("FIELD_TYPE", String.class),
|
||||
record.get("CHAR_LEN", short.class),
|
||||
record.get(f.RDB$FIELD_PRECISION),
|
||||
record.get("FIELD_SCALE", Integer.class),
|
||||
record.get(r.RDB$NULL_FLAG) == 0,
|
||||
defaultValue,
|
||||
record.get("DOMAIN_NAME") == null ? null : DSL.name(record.get("DOMAIN_NAME", String.class))
|
||||
);
|
||||
|
||||
ColumnDefinition column = new DefaultColumnDefinition(
|
||||
getDatabase().getTable(getSchema(), getName()),
|
||||
record.get(r.RDB$FIELD_NAME.trim()),
|
||||
record.get(r.RDB$FIELD_POSITION),
|
||||
type,
|
||||
false,
|
||||
record.get(r.RDB$DESCRIPTION)
|
||||
getDatabase().getTable(getSchema(), getName()),
|
||||
record.get(r.RDB$FIELD_NAME),
|
||||
record.get(r.RDB$FIELD_POSITION),
|
||||
type,
|
||||
false,
|
||||
record.get(r.RDB$DESCRIPTION)
|
||||
);
|
||||
|
||||
result.add(column);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user