From bc98ddb7f795d3d900bce9d0665e4648c0d47fe8 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 8 Jul 2020 15:06:51 +0200 Subject: [PATCH] [jOOQ/jOOQ#8029] Support timestamp precision in Informix casts --- .../java/org/jooq/impl/AbstractDataType.java | 7 +++++ jOOQ/src/main/java/org/jooq/impl/Cast.java | 31 +++++++++++++++++++ .../java/org/jooq/impl/DefaultBinding.java | 4 ++- 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractDataType.java b/jOOQ/src/main/java/org/jooq/impl/AbstractDataType.java index f9f7584633..c80583f963 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractDataType.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractDataType.java @@ -39,6 +39,7 @@ package org.jooq.impl; import static org.jooq.Nullability.NOT_NULL; import static org.jooq.SQLDialect.DERBY; +// ... import static org.jooq.impl.DSL.unquotedName; import static org.jooq.impl.SQLDataType.BLOB; import static org.jooq.impl.SQLDataType.CLOB; @@ -447,6 +448,12 @@ abstract class AbstractDataType extends AbstractNamed implements DataType // precision support in DDL. if (isTimestamp() && NO_SUPPORT_TIMESTAMP_PRECISION.contains(dialect)) return castTypePrefix0() + castTypeSuffix0(); + + + + + + else if (scaleDefined() && scale() > 0) return castTypePrefix0() + "(" + precision() + ", " + scale() + ")" + castTypeSuffix0(); else diff --git a/jOOQ/src/main/java/org/jooq/impl/Cast.java b/jOOQ/src/main/java/org/jooq/impl/Cast.java index 18f74091a6..8f0714bcee 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Cast.java +++ b/jOOQ/src/main/java/org/jooq/impl/Cast.java @@ -97,6 +97,10 @@ final class Cast extends AbstractField { + + + + case DERBY: ctx.visit(new CastDerby()); break; @@ -258,6 +262,33 @@ final class Cast extends AbstractField { + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java index ded0794b3e..56c3486c3e 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java @@ -103,8 +103,10 @@ import static org.jooq.impl.Keywords.K_TRUE; import static org.jooq.impl.Keywords.K_YEAR_TO_DAY; import static org.jooq.impl.Keywords.K_YEAR_TO_FRACTION; import static org.jooq.impl.SQLDataType.BLOB; +import static org.jooq.impl.SQLDataType.CHAR; import static org.jooq.impl.SQLDataType.DATE; import static org.jooq.impl.SQLDataType.DOUBLE; +import static org.jooq.impl.SQLDataType.LONGVARCHAR; import static org.jooq.impl.SQLDataType.OTHER; import static org.jooq.impl.SQLDataType.ROWID; import static org.jooq.impl.SQLDataType.TIME; @@ -709,7 +711,7 @@ public class DefaultBinding implements Binding { // [#1727] VARCHAR types should be cast to their actual lengths in some // dialects - else if (FIREBIRD == family && (sqlDataType == SQLDataType.VARCHAR || sqlDataType == SQLDataType.CHAR)) + else if (FIREBIRD == family && (sqlDataType == VARCHAR || sqlDataType == CHAR)) if (dataType.lengthDefined()) sqlCast(ctx, converted, dataType, dataType.length(), null, null); else