From 10bc1a2ffcd91f80a3c91be298ff5bc5b806894e Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 18 Apr 2023 18:36:55 +0200 Subject: [PATCH] [jOOQ/jOOQ#12052] Add DuckDB support - WIP --- .../main/java/org/jooq/meta/Databases.java | 2 + jOOQ/src/main/java/org/jooq/Allow.java | 2 + .../main/java/org/jooq/AlterTableStep.java | 12 +-- jOOQ/src/main/java/org/jooq/Field.java | 8 +- jOOQ/src/main/java/org/jooq/JoinType.java | 2 +- jOOQ/src/main/java/org/jooq/SQLDialect.java | 5 + .../main/java/org/jooq/SelectJoinStep.java | 12 +-- .../org/jooq/SelectLimitAfterOffsetStep.java | 4 +- .../main/java/org/jooq/SelectLimitStep.java | 12 +-- .../main/java/org/jooq/SelectOffsetStep.java | 4 +- jOOQ/src/main/java/org/jooq/SelectQuery.java | 14 +-- jOOQ/src/main/java/org/jooq/Table.java | 12 +-- jOOQ/src/main/java/org/jooq/impl/DSL.java | 92 +++++++++---------- .../main/java/org/jooq/impl/SQLDataType.java | 6 +- .../main/java/org/jooq/impl/SQLDataTypes.java | 90 ++++++++++++++++++ .../java/org/jooq/tools/jdbc/JDBCUtils.java | 4 + pom.xml | 6 ++ 17 files changed, 200 insertions(+), 87 deletions(-) diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/Databases.java b/jOOQ-meta/src/main/java/org/jooq/meta/Databases.java index 6fc803b211..f7d14eb4f2 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/Databases.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/Databases.java @@ -45,6 +45,7 @@ import org.jooq.SQLDialect; import org.jooq.meta.cubrid.CUBRIDDatabase; // ... import org.jooq.meta.derby.DerbyDatabase; +import org.jooq.meta.duckdb.DuckDBDatabase; // ... import org.jooq.meta.firebird.FirebirdDatabase; import org.jooq.meta.h2.H2Database; @@ -109,6 +110,7 @@ public class Databases { case CUBRID: result = CUBRIDDatabase.class; break; case DERBY: result = DerbyDatabase.class; break; + case DUCKDB: result = DuckDBDatabase.class; break; case FIREBIRD: result = FirebirdDatabase.class; break; case H2: result = H2Database.class; break; case HSQLDB: result = HSQLDBDatabase.class; break; diff --git a/jOOQ/src/main/java/org/jooq/Allow.java b/jOOQ/src/main/java/org/jooq/Allow.java index b5c344d62d..eab966112a 100644 --- a/jOOQ/src/main/java/org/jooq/Allow.java +++ b/jOOQ/src/main/java/org/jooq/Allow.java @@ -52,6 +52,7 @@ import static org.jooq.SQLDialect.CUBRID; // ... import static org.jooq.SQLDialect.DEFAULT; import static org.jooq.SQLDialect.DERBY; +import static org.jooq.SQLDialect.DUCKDB; // ... import static org.jooq.SQLDialect.FIREBIRD; import static org.jooq.SQLDialect.H2; @@ -182,6 +183,7 @@ public @interface Allow { CUBRID, DEFAULT, DERBY, + DUCKDB, FIREBIRD, H2, HSQLDB, diff --git a/jOOQ/src/main/java/org/jooq/AlterTableStep.java b/jOOQ/src/main/java/org/jooq/AlterTableStep.java index a0498263e3..0e32ba038b 100644 --- a/jOOQ/src/main/java/org/jooq/AlterTableStep.java +++ b/jOOQ/src/main/java/org/jooq/AlterTableStep.java @@ -486,7 +486,7 @@ public interface AlterTableStep { * This is an alias for {@link #dropColumn(Field)}. */ @NotNull @CheckReturnValue - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) AlterTableDropStep drop(Field field); /** @@ -496,7 +496,7 @@ public interface AlterTableStep { * This is an alias for {@link #dropColumn(Name)}. */ @NotNull @CheckReturnValue - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) AlterTableDropStep drop(Name field); /** @@ -506,7 +506,7 @@ public interface AlterTableStep { * This is an alias for {@link #dropColumn(String)}. */ @NotNull @CheckReturnValue - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) AlterTableDropStep drop(String field); /** @@ -544,7 +544,7 @@ public interface AlterTableStep { * statement. */ @NotNull @CheckReturnValue - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) AlterTableDropStep dropColumn(Field field); /** @@ -552,7 +552,7 @@ public interface AlterTableStep { * statement. */ @NotNull @CheckReturnValue - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) AlterTableDropStep dropColumn(Name field); /** @@ -560,7 +560,7 @@ public interface AlterTableStep { * statement. */ @NotNull @CheckReturnValue - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) AlterTableDropStep dropColumn(String field); /** diff --git a/jOOQ/src/main/java/org/jooq/Field.java b/jOOQ/src/main/java/org/jooq/Field.java index a8c93845d4..0b76e0ba2b 100644 --- a/jOOQ/src/main/java/org/jooq/Field.java +++ b/jOOQ/src/main/java/org/jooq/Field.java @@ -1433,14 +1433,14 @@ extends * @param exponent is wrapped as {@link #val(Object)}. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) Field power(Number exponent); /** * The POWER operator. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) Field power(Field exponent); /** @@ -1449,14 +1449,14 @@ extends * @param exponent is wrapped as {@link #val(Object)}. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) Field pow(Number exponent); /** * The POW operator, an alias for the POWER operator. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) Field pow(Field exponent); /** diff --git a/jOOQ/src/main/java/org/jooq/JoinType.java b/jOOQ/src/main/java/org/jooq/JoinType.java index b506f377bf..96eed33f95 100644 --- a/jOOQ/src/main/java/org/jooq/JoinType.java +++ b/jOOQ/src/main/java/org/jooq/JoinType.java @@ -97,7 +97,7 @@ public enum JoinType { * CROSS JOIN two tables. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) CROSS_JOIN("cross join", false), /** diff --git a/jOOQ/src/main/java/org/jooq/SQLDialect.java b/jOOQ/src/main/java/org/jooq/SQLDialect.java index c7e938948c..b96a02ef71 100644 --- a/jOOQ/src/main/java/org/jooq/SQLDialect.java +++ b/jOOQ/src/main/java/org/jooq/SQLDialect.java @@ -110,6 +110,11 @@ public enum SQLDialect { */ DERBY("Derby", false, true), + /** + * The DuckDB dialect family. + */ + DUCKDB("DuckDB", false, true), + /** * The Firebird dialect family. *

diff --git a/jOOQ/src/main/java/org/jooq/SelectJoinStep.java b/jOOQ/src/main/java/org/jooq/SelectJoinStep.java index f1b98723a9..a6bff880fd 100644 --- a/jOOQ/src/main/java/org/jooq/SelectJoinStep.java +++ b/jOOQ/src/main/java/org/jooq/SelectJoinStep.java @@ -383,7 +383,7 @@ public interface SelectJoinStep extends SelectWhereStep { * @see Table#crossJoin(TableLike) */ @NotNull @CheckReturnValue - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) SelectJoinStep crossJoin(TableLike table); /** @@ -408,7 +408,7 @@ public interface SelectJoinStep extends SelectWhereStep { * @see SQL */ @NotNull @CheckReturnValue - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) @PlainSQL SelectJoinStep crossJoin(SQL sql); @@ -434,7 +434,7 @@ public interface SelectJoinStep extends SelectWhereStep { * @see SQL */ @NotNull @CheckReturnValue - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) @PlainSQL SelectJoinStep crossJoin(String sql); @@ -461,7 +461,7 @@ public interface SelectJoinStep extends SelectWhereStep { * @see SQL */ @NotNull @CheckReturnValue - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) @PlainSQL SelectJoinStep crossJoin(String sql, Object... bindings); @@ -488,7 +488,7 @@ public interface SelectJoinStep extends SelectWhereStep { * @see SQL */ @NotNull @CheckReturnValue - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) @PlainSQL SelectJoinStep crossJoin(String sql, QueryPart... parts); @@ -508,7 +508,7 @@ public interface SelectJoinStep extends SelectWhereStep { * @see Table#crossJoin(Name) */ @NotNull @CheckReturnValue - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) SelectJoinStep crossJoin(Name name); /** diff --git a/jOOQ/src/main/java/org/jooq/SelectLimitAfterOffsetStep.java b/jOOQ/src/main/java/org/jooq/SelectLimitAfterOffsetStep.java index d0ea3250d8..07557b24e1 100644 --- a/jOOQ/src/main/java/org/jooq/SelectLimitAfterOffsetStep.java +++ b/jOOQ/src/main/java/org/jooq/SelectLimitAfterOffsetStep.java @@ -140,7 +140,7 @@ public interface SelectLimitAfterOffsetStep extends SelectForU * function and nested SELECT statements. */ @NotNull @CheckReturnValue - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) SelectLimitPercentAfterOffsetStep limit(Number numberOfRows); /** @@ -156,7 +156,7 @@ public interface SelectLimitAfterOffsetStep extends SelectForU * statements. */ @NotNull @CheckReturnValue - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) SelectLimitPercentAfterOffsetStep limit(Field numberOfRows); } diff --git a/jOOQ/src/main/java/org/jooq/SelectLimitStep.java b/jOOQ/src/main/java/org/jooq/SelectLimitStep.java index 31a3e12c34..4a9d75bf36 100644 --- a/jOOQ/src/main/java/org/jooq/SelectLimitStep.java +++ b/jOOQ/src/main/java/org/jooq/SelectLimitStep.java @@ -178,7 +178,7 @@ public interface SelectLimitStep extends SelectForUpdateStepSELECT statements. */ @NotNull @CheckReturnValue - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) SelectWithTiesAfterOffsetStep limit(Number offset, Number numberOfRows); /** @@ -194,7 +194,7 @@ public interface SelectLimitStep extends SelectForUpdateStepSELECT statements. */ @NotNull @CheckReturnValue - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) SelectLimitPercentAfterOffsetStep limit(Number offset, Field numberOfRows); /** @@ -210,7 +210,7 @@ public interface SelectLimitStep extends SelectForUpdateStepSELECT statements. */ @NotNull @CheckReturnValue - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) SelectLimitPercentAfterOffsetStep limit(Field offset, Number numberOfRows); /** @@ -226,7 +226,7 @@ public interface SelectLimitStep extends SelectForUpdateStepSELECT statements. */ @NotNull @CheckReturnValue - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) SelectLimitPercentAfterOffsetStep limit(Field offset, Field numberOfRows); /** @@ -240,7 +240,7 @@ public interface SelectLimitStep extends SelectForUpdateStepSELECT statements. */ @NotNull @CheckReturnValue - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) SelectLimitAfterOffsetStep offset(Number offset); /** @@ -254,6 +254,6 @@ public interface SelectLimitStep extends SelectForUpdateStepSELECT statements. */ @NotNull @CheckReturnValue - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) SelectLimitAfterOffsetStep offset(Field offset); } diff --git a/jOOQ/src/main/java/org/jooq/SelectOffsetStep.java b/jOOQ/src/main/java/org/jooq/SelectOffsetStep.java index b571051e0a..4a3f5e2f47 100644 --- a/jOOQ/src/main/java/org/jooq/SelectOffsetStep.java +++ b/jOOQ/src/main/java/org/jooq/SelectOffsetStep.java @@ -144,7 +144,7 @@ public interface SelectOffsetStep extends SelectForUpdateStep< * SELECT statements. */ @NotNull @CheckReturnValue - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) SelectForUpdateStep offset(Number offset); /** @@ -158,6 +158,6 @@ public interface SelectOffsetStep extends SelectForUpdateStep< * SELECT statements. */ @NotNull @CheckReturnValue - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) SelectForUpdateStep offset(Field offset); } diff --git a/jOOQ/src/main/java/org/jooq/SelectQuery.java b/jOOQ/src/main/java/org/jooq/SelectQuery.java index e06c19f82c..76a9e05d00 100644 --- a/jOOQ/src/main/java/org/jooq/SelectQuery.java +++ b/jOOQ/src/main/java/org/jooq/SelectQuery.java @@ -713,7 +713,7 @@ public interface SelectQuery extends Select, ConditionProvi * emulated with a ROW_NUMBER() window function and nested * SELECT statements. */ - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) void addOffset(Number offset); /** @@ -726,7 +726,7 @@ public interface SelectQuery extends Select, ConditionProvi * emulated with a ROW_NUMBER() window function and nested * SELECT statements. */ - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) void addOffset(Field offset); /** @@ -756,7 +756,7 @@ public interface SelectQuery extends Select, ConditionProvi * * @param numberOfRows The number of rows to return */ - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) void addLimit(Field numberOfRows); /** @@ -773,7 +773,7 @@ public interface SelectQuery extends Select, ConditionProvi * @param offset The lowest offset starting at 0 * @param numberOfRows The number of rows to return */ - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) void addLimit(Number offset, Number numberOfRows); /** @@ -791,7 +791,7 @@ public interface SelectQuery extends Select, ConditionProvi * @param offset The lowest offset starting at 0 * @param numberOfRows The number of rows to return */ - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) void addLimit(Field offset, Number numberOfRows); /** @@ -809,7 +809,7 @@ public interface SelectQuery extends Select, ConditionProvi * @param offset The lowest offset starting at 0 * @param numberOfRows The number of rows to return */ - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) void addLimit(Number offset, Field numberOfRows); /** @@ -827,7 +827,7 @@ public interface SelectQuery extends Select, ConditionProvi * @param offset The lowest offset starting at 0 * @param numberOfRows The number of rows to return */ - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) void addLimit(Field offset, Field numberOfRows); /** diff --git a/jOOQ/src/main/java/org/jooq/Table.java b/jOOQ/src/main/java/org/jooq/Table.java index 88a4db9b64..65dfb3abd7 100644 --- a/jOOQ/src/main/java/org/jooq/Table.java +++ b/jOOQ/src/main/java/org/jooq/Table.java @@ -1797,7 +1797,7 @@ extends * */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) Table crossJoin(TableLike table); /** @@ -1819,7 +1819,7 @@ extends * @see SQL */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) @PlainSQL Table crossJoin(SQL sql); @@ -1842,7 +1842,7 @@ extends * @see SQL */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) @PlainSQL Table crossJoin(String sql); @@ -1866,7 +1866,7 @@ extends * @see SQL */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) @PlainSQL Table crossJoin(String sql, Object... bindings); @@ -1890,7 +1890,7 @@ extends * @see SQL */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) @PlainSQL Table crossJoin(String sql, QueryPart... parts); @@ -1907,7 +1907,7 @@ extends * @see DSL#table(Name) */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) Table crossJoin(Name name); /** diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java index a450f71084..9805df06c4 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DSL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java @@ -16891,7 +16891,7 @@ public class DSL { * @param value is wrapped as {@link #val(Object)}. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field cos(Number value) { return new Cos(Tools.field(value)); } @@ -16900,7 +16900,7 @@ public class DSL { * The COS function. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field cos(Field value) { return new Cos(value); } @@ -16911,7 +16911,7 @@ public class DSL { * @param value is wrapped as {@link #val(Object)}. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field cosh(Number value) { return new Cosh(Tools.field(value)); } @@ -16920,7 +16920,7 @@ public class DSL { * The COSH function. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field cosh(Field value) { return new Cosh(value); } @@ -16931,7 +16931,7 @@ public class DSL { * @param value is wrapped as {@link #val(Object)}. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field cot(Number value) { return new Cot(Tools.field(value)); } @@ -16940,7 +16940,7 @@ public class DSL { * The COT function. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field cot(Field value) { return new Cot(value); } @@ -16951,7 +16951,7 @@ public class DSL { * @param value is wrapped as {@link #val(Object)}. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field coth(Number value) { return new Coth(Tools.field(value)); } @@ -16960,7 +16960,7 @@ public class DSL { * The COTH function. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field coth(Field value) { return new Coth(value); } @@ -17008,7 +17008,7 @@ public class DSL { * @param value is wrapped as {@link #val(Object)}. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field exp(Number value) { return new Exp(Tools.field(value)); } @@ -17017,7 +17017,7 @@ public class DSL { * The EXP function. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field exp(Field value) { return new Exp(value); } @@ -17054,7 +17054,7 @@ public class DSL { * @param value is wrapped as {@link #val(Object)}. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field ln(Number value) { return new Ln(Tools.field(value)); } @@ -17065,7 +17065,7 @@ public class DSL { * Get the natural logarithm of a value. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field ln(Field value) { return new Ln(value); } @@ -17079,7 +17079,7 @@ public class DSL { * @param base is wrapped as {@link #val(Object)}. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field log(Number value, int base) { return new Log(Tools.field(value), Tools.field(base)); } @@ -17092,7 +17092,7 @@ public class DSL { * @param value is wrapped as {@link #val(Object)}. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field log(Number value, Field base) { return new Log(Tools.field(value), base); } @@ -17105,7 +17105,7 @@ public class DSL { * @param base is wrapped as {@link #val(Object)}. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field log(Field value, int base) { return new Log(value, Tools.field(base)); } @@ -17116,7 +17116,7 @@ public class DSL { * Get the logarithm of a value for a base. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field log(Field value, Field base) { return new Log(value, base); } @@ -17129,7 +17129,7 @@ public class DSL { * @param value is wrapped as {@link #val(Object)}. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field log10(Number value) { return new Log10(Tools.field(value)); } @@ -17140,7 +17140,7 @@ public class DSL { * Get the logarithm of a value for base 10. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field log10(Field value) { return new Log10(value); } @@ -17163,7 +17163,7 @@ public class DSL { * @param exponent is wrapped as {@link #val(Object)}. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field power(Number base, Number exponent) { return new Power(Tools.field(base), Tools.field(exponent)); } @@ -17174,7 +17174,7 @@ public class DSL { * @param base is wrapped as {@link #val(Object)}. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field power(Number base, Field exponent) { return new Power(Tools.field(base), exponent); } @@ -17185,7 +17185,7 @@ public class DSL { * @param exponent is wrapped as {@link #val(Object)}. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field power(Field base, Number exponent) { return new Power(base, Tools.field(exponent)); } @@ -17194,7 +17194,7 @@ public class DSL { * The POWER function. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field power(Field base, Field exponent) { return new Power(base, exponent); } @@ -17231,7 +17231,7 @@ public class DSL { * Get a random numeric value. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field rand() { return new Rand(); } @@ -17460,7 +17460,7 @@ public class DSL { * @param value is wrapped as {@link #val(Object)}. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field sin(Number value) { return new Sin(Tools.field(value)); } @@ -17469,7 +17469,7 @@ public class DSL { * The SIN function. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field sin(Field value) { return new Sin(value); } @@ -17480,7 +17480,7 @@ public class DSL { * @param value is wrapped as {@link #val(Object)}. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field sinh(Number value) { return new Sinh(Tools.field(value)); } @@ -17489,7 +17489,7 @@ public class DSL { * The SINH function. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field sinh(Field value) { return new Sinh(value); } @@ -17500,7 +17500,7 @@ public class DSL { * @param value is wrapped as {@link #val(Object)}. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field sqrt(Number value) { return new Sqrt(Tools.field(value)); } @@ -17509,7 +17509,7 @@ public class DSL { * The SQRT function. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field sqrt(Field value) { return new Sqrt(value); } @@ -17540,7 +17540,7 @@ public class DSL { * @param value is wrapped as {@link #val(Object)}. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field tan(Number value) { return new Tan(Tools.field(value)); } @@ -17549,7 +17549,7 @@ public class DSL { * The TAN function. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field tan(Field value) { return new Tan(value); } @@ -17560,7 +17560,7 @@ public class DSL { * @param value is wrapped as {@link #val(Object)}. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field tanh(Number value) { return new Tanh(Tools.field(value)); } @@ -17569,7 +17569,7 @@ public class DSL { * The TANH function. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field tanh(Field value) { return new Tanh(value); } @@ -18271,7 +18271,7 @@ public class DSL { * @param startIndex The start index (1-based) from which to start looking for the substring. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field position(@Stringly.Param String in, @Stringly.Param String search, int startIndex) { return new Position(Tools.field(in), Tools.field(search), Tools.field(startIndex)); } @@ -18286,7 +18286,7 @@ public class DSL { * @param startIndex The start index (1-based) from which to start looking for the substring. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field position(@Stringly.Param String in, @Stringly.Param String search, Field startIndex) { return new Position(Tools.field(in), Tools.field(search), startIndex); } @@ -18301,7 +18301,7 @@ public class DSL { * @param startIndex The start index (1-based) from which to start looking for the substring. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field position(@Stringly.Param String in, Field search, int startIndex) { return new Position(Tools.field(in), search, Tools.field(startIndex)); } @@ -18316,7 +18316,7 @@ public class DSL { * @param startIndex The start index (1-based) from which to start looking for the substring. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field position(@Stringly.Param String in, Field search, Field startIndex) { return new Position(Tools.field(in), search, startIndex); } @@ -18331,7 +18331,7 @@ public class DSL { * @param startIndex The start index (1-based) from which to start looking for the substring. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field position(Field in, @Stringly.Param String search, int startIndex) { return new Position(in, Tools.field(search), Tools.field(startIndex)); } @@ -18346,7 +18346,7 @@ public class DSL { * @param startIndex The start index (1-based) from which to start looking for the substring. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field position(Field in, @Stringly.Param String search, Field startIndex) { return new Position(in, Tools.field(search), startIndex); } @@ -18361,7 +18361,7 @@ public class DSL { * @param startIndex The start index (1-based) from which to start looking for the substring. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field position(Field in, Field search, int startIndex) { return new Position(in, search, Tools.field(startIndex)); } @@ -18376,7 +18376,7 @@ public class DSL { * @param startIndex The start index (1-based) from which to start looking for the substring. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field position(Field in, Field search, Field startIndex) { return new Position(in, search, startIndex); } @@ -18390,7 +18390,7 @@ public class DSL { * @param search The substring to search for. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field position(@Stringly.Param String in, @Stringly.Param String search) { return new Position(Tools.field(in), Tools.field(search)); } @@ -18404,7 +18404,7 @@ public class DSL { * @param search The substring to search for. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field position(@Stringly.Param String in, Field search) { return new Position(Tools.field(in), search); } @@ -18418,7 +18418,7 @@ public class DSL { * @param search The substring to search for. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field position(Field in, @Stringly.Param String search) { return new Position(in, Tools.field(search)); } @@ -18432,7 +18432,7 @@ public class DSL { * @param search The substring to search for. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static Field position(Field in, Field search) { return new Position(in, search); } @@ -21864,7 +21864,7 @@ public class DSL { * The COUNT_DISTINCT function. */ @NotNull - @Support + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) public static AggregateFunction countDistinct(Field field) { return new Count(field, true); } diff --git a/jOOQ/src/main/java/org/jooq/impl/SQLDataType.java b/jOOQ/src/main/java/org/jooq/impl/SQLDataType.java index deb51064a1..71ba630c0a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SQLDataType.java +++ b/jOOQ/src/main/java/org/jooq/impl/SQLDataType.java @@ -46,6 +46,7 @@ package org.jooq.impl; import static org.jooq.SQLDialect.CUBRID; // ... import static org.jooq.SQLDialect.DERBY; +import static org.jooq.SQLDialect.DUCKDB; // ... import static org.jooq.SQLDialect.FIREBIRD; import static org.jooq.SQLDialect.H2; @@ -93,13 +94,13 @@ import org.jooq.Geography; import org.jooq.Geometry; import org.jooq.JSON; import org.jooq.JSONB; -// ... import org.jooq.Record; import org.jooq.Result; import org.jooq.RowId; import org.jooq.SQLDialect; import org.jooq.SQLDialectCategory; import org.jooq.XML; +import org.jooq.impl.SQLDataTypes.DuckDBDataType; import org.jooq.impl.SQLDataTypes.TrinoDataType; import org.jooq.types.DayToSecond; import org.jooq.types.UByte; @@ -851,6 +852,9 @@ public final class SQLDataType { Class.forName(DerbyDataType.class.getName()); initJSR310Types(DERBY); + Class.forName(DuckDBDataType.class.getName()); + initJSR310Types(DUCKDB); + Class.forName(FirebirdDataType.class.getName()); initJSR310Types(FIREBIRD); diff --git a/jOOQ/src/main/java/org/jooq/impl/SQLDataTypes.java b/jOOQ/src/main/java/org/jooq/impl/SQLDataTypes.java index 091c54a9ee..1513eea875 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SQLDataTypes.java +++ b/jOOQ/src/main/java/org/jooq/impl/SQLDataTypes.java @@ -51,7 +51,16 @@ import java.util.UUID; import org.jooq.DataType; import org.jooq.JSON; import org.jooq.JSONB; +import org.jooq.Record; +import org.jooq.Result; import org.jooq.SQLDialect; +import org.jooq.types.DayToSecond; +import org.jooq.types.UByte; +import org.jooq.types.UInteger; +import org.jooq.types.ULong; +import org.jooq.types.UShort; +import org.jooq.types.YearToMonth; +import org.jooq.types.YearToSecond; /** * A wrapper for dialect specific, internal data types. @@ -63,6 +72,87 @@ final class SQLDataTypes { private SQLDataTypes() {} + static class DuckDBDataType { + + private static final SQLDialect FAMILY = SQLDialect.DUCKDB; + + // ------------------------------------------------------------------------- + // Default SQL data types and synonyms thereof + // ------------------------------------------------------------------------- + + public static final DataType TINYINT = new BuiltInDataType<>(FAMILY, SQLDataType.TINYINT, "tinyint"); + public static final DataType SMALLINT = new BuiltInDataType<>(FAMILY, SQLDataType.SMALLINT, "smallint"); + public static final DataType INT = new BuiltInDataType<>(FAMILY, SQLDataType.INTEGER, "int"); + public static final DataType INTEGER = new BuiltInDataType<>(FAMILY, SQLDataType.INTEGER, "integer"); + public static final DataType BIGINT = new BuiltInDataType<>(FAMILY, SQLDataType.BIGINT, "bigint"); + public static final DataType DOUBLE = new BuiltInDataType<>(FAMILY, SQLDataType.DOUBLE, "double"); + public static final DataType DOUBLEPRECISION = new BuiltInDataType<>(FAMILY, SQLDataType.DOUBLE, "double precision"); + public static final DataType FLOAT = new BuiltInDataType<>(FAMILY, SQLDataType.FLOAT, "float"); + public static final DataType REAL = new BuiltInDataType<>(FAMILY, SQLDataType.REAL, "real"); + public static final DataType BOOLEAN = new BuiltInDataType<>(FAMILY, SQLDataType.BOOLEAN, "boolean"); + public static final DataType BIT = new BuiltInDataType<>(FAMILY, SQLDataType.BIT, "bit"); + public static final DataType DECIMAL = new BuiltInDataType<>(FAMILY, SQLDataType.DECIMAL, "decimal(p, s)"); + public static final DataType NUMERIC = new BuiltInDataType<>(FAMILY, SQLDataType.NUMERIC, "numeric(p, s)"); + public static final DataType VARCHAR = new BuiltInDataType<>(FAMILY, SQLDataType.VARCHAR, "varchar(l)", "varchar(32672)"); + public static final DataType LONGVARCHAR = new BuiltInDataType<>(FAMILY, SQLDataType.LONGVARCHAR, "longvarchar(l)"); + public static final DataType CHAR = new BuiltInDataType<>(FAMILY, SQLDataType.CHAR, "char(l)"); + public static final DataType CHARACTER = new BuiltInDataType<>(FAMILY, SQLDataType.CHAR, "character(l)"); + public static final DataType CHARACTERVARYING = new BuiltInDataType<>(FAMILY, SQLDataType.VARCHAR, "character varying(l)", "character varying(32672)"); + public static final DataType CLOB = new BuiltInDataType<>(FAMILY, SQLDataType.CLOB, "clob"); + public static final DataType CHARLARGEOBJECT = new BuiltInDataType<>(FAMILY, SQLDataType.CLOB, "char large object", "clob"); + public static final DataType CHARACTERLARGEOBJECT = new BuiltInDataType<>(FAMILY, SQLDataType.CLOB, "character large object", "clob"); + public static final DataType DATE = new BuiltInDataType<>(FAMILY, SQLDataType.DATE, "date"); + public static final DataType