[jOOQ/jOOQ#12605] Add support for Firebird 4 TIME[STAMP] WITH TIME ZONE data types

This commit is contained in:
Lukas Eder 2024-08-19 11:44:14 +02:00
parent 3b26957826
commit 94e97b229a
4 changed files with 47 additions and 31 deletions

View File

@ -749,6 +749,8 @@ public class FirebirdDatabase extends AbstractDatabase implements ResultQueryDat
.when((short) 24, "DECFLOAT(16)")
.when((short) 25, "DECFLOAT(34)")
.when((short) 27, "DOUBLE")
.when((short) 28, "TIME WITH TIME ZONE")
.when((short) 29, "TIMESTAMP WITH TIME ZONE")
.when((short) 35, "TIMESTAMP")
.when((short) 37, "VARCHAR")
.when((short) 40, "CSTRING")

View File

@ -29458,7 +29458,7 @@ public class DSL {
* {@link Instant} (in UTC) as the input.
*/
@NotNull
@Support({ H2, HSQLDB, POSTGRES, SQLITE })
@Support({ FIREBIRD, H2, HSQLDB, POSTGRES, SQLITE })
public static Field<OffsetTime> offsetTime(String value) {
return Tools.field(Convert.convert(value, OffsetTime.class));
}
@ -29473,7 +29473,7 @@ public class DSL {
* {@link Instant} (in UTC) as the input.
*/
@NotNull
@Support({ H2, HSQLDB, POSTGRES, SQLITE })
@Support({ FIREBIRD, H2, HSQLDB, POSTGRES, SQLITE })
public static Field<OffsetTime> offsetTime(OffsetTime value) {
return Tools.field(value);
}
@ -29488,7 +29488,7 @@ public class DSL {
* {@link Instant} (in UTC) as the input.
*/
@NotNull
@Support({ H2, HSQLDB, POSTGRES, SQLITE })
@Support({ FIREBIRD, H2, HSQLDB, POSTGRES, SQLITE })
public static Field<OffsetTime> offsetTime(Field<OffsetTime> field) {
return new DateOrTime<>(field, SQLDataType.OFFSETTIME);
}
@ -29503,7 +29503,7 @@ public class DSL {
* {@link Instant} (in UTC) as the input.
*/
@NotNull
@Support({ H2, HSQLDB, POSTGRES, SQLITE })
@Support({ FIREBIRD, H2, HSQLDB, POSTGRES, SQLITE })
public static Field<OffsetDateTime> offsetDateTime(String value) {
return Tools.field(Convert.convert(value, OffsetDateTime.class));
}
@ -29518,7 +29518,7 @@ public class DSL {
* {@link Instant} (in UTC) as the input.
*/
@NotNull
@Support({ H2, HSQLDB, POSTGRES, SQLITE })
@Support({ FIREBIRD, H2, HSQLDB, POSTGRES, SQLITE })
public static Field<OffsetDateTime> offsetDateTime(OffsetDateTime value) {
return Tools.field(value);
}
@ -29533,7 +29533,7 @@ public class DSL {
* {@link Instant} (in UTC) as the input.
*/
@NotNull
@Support({ H2, HSQLDB, POSTGRES, SQLITE })
@Support({ FIREBIRD, H2, HSQLDB, POSTGRES, SQLITE })
public static Field<OffsetDateTime> offsetDateTime(Field<OffsetDateTime> field) {
return new DateOrTime<>(field, SQLDataType.OFFSETDATETIME);
}
@ -29548,7 +29548,7 @@ public class DSL {
* {@link Instant} (in UTC) as the input.
*/
@NotNull
@Support({ H2, HSQLDB, POSTGRES, SQLITE })
@Support({ FIREBIRD, H2, HSQLDB, POSTGRES, SQLITE })
public static Field<Instant> instant(String value) {
return Tools.field(Convert.convert(value, Instant.class));
}
@ -29563,7 +29563,7 @@ public class DSL {
* {@link Instant} (in UTC) as the input.
*/
@NotNull
@Support({ H2, HSQLDB, POSTGRES, SQLITE })
@Support({ FIREBIRD, H2, HSQLDB, POSTGRES, SQLITE })
public static Field<Instant> instant(Instant value) {
return Tools.field(value);
}
@ -29578,7 +29578,7 @@ public class DSL {
* {@link Instant} (in UTC) as the input.
*/
@NotNull
@Support({ H2, HSQLDB, POSTGRES, SQLITE })
@Support({ FIREBIRD, H2, HSQLDB, POSTGRES, SQLITE })
public static Field<Instant> instant(Field<Instant> field) {
return new DateOrTime<>(field, SQLDataType.INSTANT);
}

View File

@ -3611,6 +3611,7 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
// [#5895] HSQLDB derives the specific data type from the literal
case FIREBIRD:
case HSQLDB:
case TRINO:
ctx.render().visit(K_TIMESTAMP).sql(" '").sql(escape(format(value, family), ctx.render())).sql('\'');
@ -3672,6 +3673,9 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
else if (family == FIREBIRD)
ctx.statement().setString(ctx.index(), value.toString());
else
ctx.statement().setString(ctx.index(), format(value, family));
}
@ -3845,6 +3849,7 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
switch (ctx.family()) {
// [#5895] HSQLDB derives the specific data type from the literal
case FIREBIRD:
case HSQLDB:
case TRINO:
ctx.render().visit(K_TIME).sql(" '").sql(escape(format(value), ctx.render())).sql('\'');
@ -3881,6 +3886,9 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
ctx.statement().setString(ctx.index(), string);
}
else if (ctx.family() == FIREBIRD)
ctx.statement().setString(ctx.index(), value.toString());
else
ctx.statement().setObject(ctx.index(), value);
}

View File

@ -43,6 +43,9 @@ import java.math.BigInteger;
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.OffsetTime;
import java.time.Year;
import java.util.UUID;
@ -83,28 +86,31 @@ public class FirebirdDataType {
// Default SQL data types and synonyms thereof
// -------------------------------------------------------------------------
public static final DataType<Short> SMALLINT = new BuiltInDataType<>(FAMILY, SQLDataType.SMALLINT, "smallint");
public static final DataType<Integer> INTEGER = new BuiltInDataType<>(FAMILY, SQLDataType.INTEGER, "integer");
public static final DataType<Integer> INT = new BuiltInDataType<>(FAMILY, SQLDataType.INTEGER, "int");
public static final DataType<Long> BIGINT = new BuiltInDataType<>(FAMILY, SQLDataType.BIGINT, "bigint");
public static final DataType<Long> INT64 = new BuiltInDataType<>(FAMILY, SQLDataType.BIGINT, "int64");
public static final DataType<Double> DOUBLEPRECISION = new BuiltInDataType<>(FAMILY, SQLDataType.DOUBLE, "double precision");
public static final DataType<Double> DOUBLE = new BuiltInDataType<>(FAMILY, SQLDataType.DOUBLE, "double");
public static final DataType<Double> D_FLOAT = new BuiltInDataType<>(FAMILY, SQLDataType.DOUBLE, "d_float");
public static final DataType<Float> FLOAT = new BuiltInDataType<>(FAMILY, SQLDataType.REAL, "float");
public static final DataType<Boolean> BOOLEAN = new BuiltInDataType<>(FAMILY, SQLDataType.BOOLEAN, "boolean");
public static final DataType<BigDecimal> DECIMAL = new BuiltInDataType<>(FAMILY, SQLDataType.DECIMAL, "decimal");
public static final DataType<BigDecimal> NUMERIC = new BuiltInDataType<>(FAMILY, SQLDataType.NUMERIC, "numeric");
public static final DataType<String> VARCHAR = new BuiltInDataType<>(FAMILY, SQLDataType.VARCHAR, "varchar", "varchar(4000)");
public static final DataType<String> CHARACTERVARYING = new BuiltInDataType<>(FAMILY, SQLDataType.VARCHAR, "character varying", "varchar(4000)");
public static final DataType<String> CHAR = new BuiltInDataType<>(FAMILY, SQLDataType.CHAR, "char");
public static final DataType<String> CHARACTER = new BuiltInDataType<>(FAMILY, SQLDataType.CHAR, "character");
public static final DataType<String> CLOB = new BuiltInDataType<>(FAMILY, SQLDataType.CLOB, "blob sub_type text");
public static final DataType<Date> DATE = new BuiltInDataType<>(FAMILY, SQLDataType.DATE, "date");
public static final DataType<Time> TIME = new BuiltInDataType<>(FAMILY, SQLDataType.TIME, "time");
public static final DataType<Timestamp> TIMESTAMP = new BuiltInDataType<>(FAMILY, SQLDataType.TIMESTAMP, "timestamp");
public static final DataType<byte[]> BLOB = new BuiltInDataType<>(FAMILY, SQLDataType.BLOB, "blob");
public static final DataType<Decfloat> DECFLOAT = new BuiltInDataType<>(FAMILY, SQLDataType.DECFLOAT, "decfloat");
public static final DataType<Short> SMALLINT = new BuiltInDataType<>(FAMILY, SQLDataType.SMALLINT, "smallint");
public static final DataType<Integer> INTEGER = new BuiltInDataType<>(FAMILY, SQLDataType.INTEGER, "integer");
public static final DataType<Integer> INT = new BuiltInDataType<>(FAMILY, SQLDataType.INTEGER, "int");
public static final DataType<Long> BIGINT = new BuiltInDataType<>(FAMILY, SQLDataType.BIGINT, "bigint");
public static final DataType<Long> INT64 = new BuiltInDataType<>(FAMILY, SQLDataType.BIGINT, "int64");
public static final DataType<Double> DOUBLEPRECISION = new BuiltInDataType<>(FAMILY, SQLDataType.DOUBLE, "double precision");
public static final DataType<Double> DOUBLE = new BuiltInDataType<>(FAMILY, SQLDataType.DOUBLE, "double");
public static final DataType<Double> D_FLOAT = new BuiltInDataType<>(FAMILY, SQLDataType.DOUBLE, "d_float");
public static final DataType<Float> FLOAT = new BuiltInDataType<>(FAMILY, SQLDataType.REAL, "float");
public static final DataType<Boolean> BOOLEAN = new BuiltInDataType<>(FAMILY, SQLDataType.BOOLEAN, "boolean");
public static final DataType<BigDecimal> DECIMAL = new BuiltInDataType<>(FAMILY, SQLDataType.DECIMAL, "decimal");
public static final DataType<BigDecimal> NUMERIC = new BuiltInDataType<>(FAMILY, SQLDataType.NUMERIC, "numeric");
public static final DataType<String> VARCHAR = new BuiltInDataType<>(FAMILY, SQLDataType.VARCHAR, "varchar", "varchar(4000)");
public static final DataType<String> CHARACTERVARYING = new BuiltInDataType<>(FAMILY, SQLDataType.VARCHAR, "character varying", "varchar(4000)");
public static final DataType<String> CHAR = new BuiltInDataType<>(FAMILY, SQLDataType.CHAR, "char");
public static final DataType<String> CHARACTER = new BuiltInDataType<>(FAMILY, SQLDataType.CHAR, "character");
public static final DataType<String> CLOB = new BuiltInDataType<>(FAMILY, SQLDataType.CLOB, "blob sub_type text");
public static final DataType<Date> DATE = new BuiltInDataType<>(FAMILY, SQLDataType.DATE, "date");
public static final DataType<Time> TIME = new BuiltInDataType<>(FAMILY, SQLDataType.TIME, "time");
public static final DataType<Timestamp> TIMESTAMP = new BuiltInDataType<>(FAMILY, SQLDataType.TIMESTAMP, "timestamp");
public static final DataType<byte[]> BLOB = new BuiltInDataType<>(FAMILY, SQLDataType.BLOB, "blob");
public static final DataType<Decfloat> DECFLOAT = new BuiltInDataType<>(FAMILY, SQLDataType.DECFLOAT, "decfloat");
public static final DataType<OffsetDateTime> TIMESTAMPWITHTIMEZONE = new BuiltInDataType<>(FAMILY, SQLDataType.TIMESTAMPWITHTIMEZONE, "timestamp with time zone");
public static final DataType<Instant> INSTANT = new BuiltInDataType<>(FAMILY, SQLDataType.INSTANT, "timestamp with time zone");
public static final DataType<OffsetTime> TIMEWITHTIMEZONE = new BuiltInDataType<>(FAMILY, SQLDataType.TIMEWITHTIMEZONE, "time with time zone");
// TODO Below are HSQLDB data types. Fix this