From ac6eb7927fd28432decfcefb1028cce0e284e1e0 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Fri, 26 May 2017 14:58:16 +0200 Subject: [PATCH] [#5806] Add support for H2's TIMESTAMP WITH TIME ZONE data type --- jOOQ/src/main/java/org/jooq/impl/DSL.java | 6 +- .../java/org/jooq/impl/DefaultBinding.java | 8 +- .../java/org/jooq/util/h2/H2DataType.java | 86 ++++++++++--------- 3 files changed, 55 insertions(+), 45 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java index 7a8622c916..33c109ea07 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DSL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java @@ -13871,7 +13871,7 @@ public class DSL { * UTC. Regardless of this fact, the result should be the same * {@link Instant} (in UTC) as the input. */ - @Support({ POSTGRES }) + @Support({ H2, POSTGRES }) public static Field offsetDateTime(String value) { return Tools.field(Convert.convert(value, OffsetDateTime.class), OffsetDateTime.class); } @@ -13885,7 +13885,7 @@ public class DSL { * UTC. Regardless of this fact, the result should be the same * {@link Instant} (in UTC) as the input. */ - @Support({ POSTGRES }) + @Support({ H2, POSTGRES }) public static Field offsetDateTime(OffsetDateTime value) { return offsetDateTime(Tools.field(value)); } @@ -13899,7 +13899,7 @@ public class DSL { * UTC. Regardless of this fact, the result should be the same * {@link Instant} (in UTC) as the input. */ - @Support({ POSTGRES }) + @Support({ H2, POSTGRES }) public static Field offsetDateTime(Field field) { return new DateOrTime(field, SQLDataType.OFFSETDATETIME); } diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java index f3e58a27d9..41c2e08c02 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java @@ -674,8 +674,14 @@ public class DefaultBinding implements Binding { + // [#5806] H2 doesn't support TIMESTAMP WITH TIME ZONE literals, see + if (family == H2) { + render.visit(K_CAST).sql("('").sql(escape(string, render)).sql("' ") + .visit(K_AS).sql(' ').visit(K_TIMESTAMP_WITH_TIME_ZONE).sql(')'); + } + // Some dialects implement SQL standard time literals - { + else { render.visit(K_TIMESTAMP_WITH_TIME_ZONE).sql(" '").sql(escape(string, render)).sql('\''); } } diff --git a/jOOQ/src/main/java/org/jooq/util/h2/H2DataType.java b/jOOQ/src/main/java/org/jooq/util/h2/H2DataType.java index 7f66fa1f4f..7df650b208 100644 --- a/jOOQ/src/main/java/org/jooq/util/h2/H2DataType.java +++ b/jOOQ/src/main/java/org/jooq/util/h2/H2DataType.java @@ -39,6 +39,7 @@ import java.math.BigInteger; import java.sql.Date; import java.sql.Time; import java.sql.Timestamp; +import java.time.OffsetDateTime; import java.util.UUID; import org.jooq.DataType; @@ -64,47 +65,50 @@ public class H2DataType { // Default SQL data types and synonyms thereof // ------------------------------------------------------------------------- - public static final DataType TINYINT = new DefaultDataType(SQLDialect.H2, SQLDataType.TINYINT, "tinyint"); - public static final DataType SMALLINT = new DefaultDataType(SQLDialect.H2, SQLDataType.SMALLINT, "smallint"); - public static final DataType INT2 = new DefaultDataType(SQLDialect.H2, SQLDataType.SMALLINT, "int2"); - public static final DataType INT = new DefaultDataType(SQLDialect.H2, SQLDataType.INTEGER, "int"); - public static final DataType INTEGER = new DefaultDataType(SQLDialect.H2, SQLDataType.INTEGER, "integer"); - public static final DataType MEDIUMINT = new DefaultDataType(SQLDialect.H2, SQLDataType.INTEGER, "mediumint"); - public static final DataType INT4 = new DefaultDataType(SQLDialect.H2, SQLDataType.INTEGER, "int4"); - public static final DataType SIGNED = new DefaultDataType(SQLDialect.H2, SQLDataType.INTEGER, "signed"); - public static final DataType BOOLEAN = new DefaultDataType(SQLDialect.H2, SQLDataType.BOOLEAN, "boolean"); - public static final DataType BOOL = new DefaultDataType(SQLDialect.H2, SQLDataType.BOOLEAN, "bool"); - public static final DataType BIT = new DefaultDataType(SQLDialect.H2, SQLDataType.BIT, "bit"); - public static final DataType BIGINT = new DefaultDataType(SQLDialect.H2, SQLDataType.BIGINT, "bigint"); - public static final DataType INT8 = new DefaultDataType(SQLDialect.H2, SQLDataType.BIGINT, "int8"); - public static final DataType DECIMAL = new DefaultDataType(SQLDialect.H2, SQLDataType.DECIMAL, "decimal"); - public static final DataType DEC = new DefaultDataType(SQLDialect.H2, SQLDataType.DECIMAL, "dec"); - public static final DataType NUMBER = new DefaultDataType(SQLDialect.H2, SQLDataType.NUMERIC, "number"); - public static final DataType NUMERIC = new DefaultDataType(SQLDialect.H2, SQLDataType.NUMERIC, "numeric"); - public static final DataType DOUBLE = new DefaultDataType(SQLDialect.H2, SQLDataType.DOUBLE, "double"); - public static final DataType FLOAT = new DefaultDataType(SQLDialect.H2, SQLDataType.FLOAT, "float"); - public static final DataType FLOAT4 = new DefaultDataType(SQLDialect.H2, SQLDataType.FLOAT, "float4"); - public static final DataType FLOAT8 = new DefaultDataType(SQLDialect.H2, SQLDataType.FLOAT, "float8"); - public static final DataType REAL = new DefaultDataType(SQLDialect.H2, SQLDataType.REAL, "real"); - public static final DataType