diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java index ee7559830a..dca53b1b00 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java @@ -2497,11 +2497,15 @@ public class JavaGenerator extends AbstractGenerator { sb.append(DefaultDataType.normalise(sqlDataType.getTypeName())); if (dataType.hasPrecision() && p > 0) { - sb.append(".precision(").append(p).append(")"); - } - if (dataType.hasScale() && s > 0) { - sb.append(".scale(").append(s).append(")"); + sb.append(".precision(").append(p); + + if (dataType.hasScale() && s > 0) { + sb.append(", ").append(s); + } + + sb.append(")"); } + if (dataType.hasLength() && l > 0) { sb.append(".length(").append(l).append(")"); } diff --git a/jOOQ-test/src/org/jooq/test/h2/generatedclasses/tables/TBook.java b/jOOQ-test/src/org/jooq/test/h2/generatedclasses/tables/TBook.java index 41247cfc22..fb0bb8dc99 100644 --- a/jOOQ-test/src/org/jooq/test/h2/generatedclasses/tables/TBook.java +++ b/jOOQ-test/src/org/jooq/test/h2/generatedclasses/tables/TBook.java @@ -11,7 +11,7 @@ package org.jooq.test.h2.generatedclasses.tables; @java.lang.SuppressWarnings("all") public class TBook extends org.jooq.impl.UpdatableTableImpl { - private static final long serialVersionUID = 328169272; + private static final long serialVersionUID = 729291910; /** * The singleton instance of PUBLIC.T_BOOK @@ -64,12 +64,12 @@ public class TBook extends org.jooq.impl.UpdatableTableImplPUBLIC.T_BOOK.CONTENT_TEXT. Some textual content of the book */ - public static final org.jooq.TableField CONTENT_TEXT = createField("CONTENT_TEXT", org.jooq.impl.SQLDataType.CLOB, T_BOOK); + public static final org.jooq.TableField CONTENT_TEXT = createField("CONTENT_TEXT", org.jooq.impl.SQLDataType.CLOB.length(2147483647), T_BOOK); /** * The column PUBLIC.T_BOOK.CONTENT_PDF. Some binary content of the book */ - public static final org.jooq.TableField CONTENT_PDF = createField("CONTENT_PDF", org.jooq.impl.SQLDataType.BLOB, T_BOOK); + public static final org.jooq.TableField CONTENT_PDF = createField("CONTENT_PDF", org.jooq.impl.SQLDataType.BLOB.length(2147483647), T_BOOK); /** * The column PUBLIC.T_BOOK.REC_VERSION. diff --git a/jOOQ-test/src/org/jooq/test/h2/generatedclasses/tables/T_639NumbersTable.java b/jOOQ-test/src/org/jooq/test/h2/generatedclasses/tables/T_639NumbersTable.java index b86f0a814e..a84df6ed88 100644 --- a/jOOQ-test/src/org/jooq/test/h2/generatedclasses/tables/T_639NumbersTable.java +++ b/jOOQ-test/src/org/jooq/test/h2/generatedclasses/tables/T_639NumbersTable.java @@ -9,7 +9,7 @@ package org.jooq.test.h2.generatedclasses.tables; @java.lang.SuppressWarnings("all") public class T_639NumbersTable extends org.jooq.impl.UpdatableTableImpl { - private static final long serialVersionUID = 1565640409; + private static final long serialVersionUID = 1016283208; /** * The singleton instance of PUBLIC.T_639_NUMBERS_TABLE @@ -77,7 +77,7 @@ public class T_639NumbersTable extends org.jooq.impl.UpdatableTableImplPUBLIC.T_639_NUMBERS_TABLE.BIG_DECIMAL. */ - public static final org.jooq.TableField BIG_DECIMAL = createField("BIG_DECIMAL", org.jooq.impl.SQLDataType.DECIMAL.precision(22).scale(5), T_639_NUMBERS_TABLE); + public static final org.jooq.TableField BIG_DECIMAL = createField("BIG_DECIMAL", org.jooq.impl.SQLDataType.DECIMAL.precision(22, 5), T_639_NUMBERS_TABLE); /** * The column PUBLIC.T_639_NUMBERS_TABLE.FLOAT. diff --git a/jOOQ-test/src/org/jooq/test/h2/generatedclasses/tables/T_725LobTest.java b/jOOQ-test/src/org/jooq/test/h2/generatedclasses/tables/T_725LobTest.java index 4950e790ce..24092f8369 100644 --- a/jOOQ-test/src/org/jooq/test/h2/generatedclasses/tables/T_725LobTest.java +++ b/jOOQ-test/src/org/jooq/test/h2/generatedclasses/tables/T_725LobTest.java @@ -9,7 +9,7 @@ package org.jooq.test.h2.generatedclasses.tables; @java.lang.SuppressWarnings("all") public class T_725LobTest extends org.jooq.impl.UpdatableTableImpl { - private static final long serialVersionUID = 171668914; + private static final long serialVersionUID = -962962607; /** * The singleton instance of PUBLIC.T_725_LOB_TEST @@ -32,7 +32,7 @@ public class T_725LobTest extends org.jooq.impl.UpdatableTableImplPUBLIC.T_725_LOB_TEST.LOB. */ - public static final org.jooq.TableField LOB = createField("LOB", org.jooq.impl.SQLDataType.BLOB, T_725_LOB_TEST); + public static final org.jooq.TableField LOB = createField("LOB", org.jooq.impl.SQLDataType.BLOB.length(2147483647), T_725_LOB_TEST); /** * No further instances allowed diff --git a/jOOQ-test/src/org/jooq/test/h2/generatedclasses/tables/VBook.java b/jOOQ-test/src/org/jooq/test/h2/generatedclasses/tables/VBook.java index 0c92a71fff..90478cf1dd 100644 --- a/jOOQ-test/src/org/jooq/test/h2/generatedclasses/tables/VBook.java +++ b/jOOQ-test/src/org/jooq/test/h2/generatedclasses/tables/VBook.java @@ -9,7 +9,7 @@ package org.jooq.test.h2.generatedclasses.tables; @java.lang.SuppressWarnings("all") public class VBook extends org.jooq.impl.TableImpl { - private static final long serialVersionUID = -1346732880; + private static final long serialVersionUID = 128508086; /** * The singleton instance of PUBLIC.V_BOOK @@ -62,12 +62,12 @@ public class VBook extends org.jooq.impl.TableImplPUBLIC.V_BOOK.CONTENT_TEXT. */ - public static final org.jooq.TableField CONTENT_TEXT = createField("CONTENT_TEXT", org.jooq.impl.SQLDataType.CLOB, V_BOOK); + public static final org.jooq.TableField CONTENT_TEXT = createField("CONTENT_TEXT", org.jooq.impl.SQLDataType.CLOB.length(2147483647), V_BOOK); /** * The column PUBLIC.V_BOOK.CONTENT_PDF. */ - public static final org.jooq.TableField CONTENT_PDF = createField("CONTENT_PDF", org.jooq.impl.SQLDataType.BLOB, V_BOOK); + public static final org.jooq.TableField CONTENT_PDF = createField("CONTENT_PDF", org.jooq.impl.SQLDataType.BLOB.length(2147483647), V_BOOK); /** * The column PUBLIC.V_BOOK.REC_VERSION. diff --git a/jOOQ-test/src/org/jooq/test/h2/generatedclasses/tables/XUnused.java b/jOOQ-test/src/org/jooq/test/h2/generatedclasses/tables/XUnused.java index 0e551b8dd3..9d749683ea 100644 --- a/jOOQ-test/src/org/jooq/test/h2/generatedclasses/tables/XUnused.java +++ b/jOOQ-test/src/org/jooq/test/h2/generatedclasses/tables/XUnused.java @@ -9,7 +9,7 @@ package org.jooq.test.h2.generatedclasses.tables; @java.lang.SuppressWarnings("all") public class XUnused extends org.jooq.impl.UpdatableTableImpl { - private static final long serialVersionUID = -1778630516; + private static final long serialVersionUID = 425236155; /** * The singleton instance of PUBLIC.X_UNUSED @@ -102,7 +102,7 @@ public class XUnused extends org.jooq.impl.UpdatableTableImplPUBLIC.X_UNUSED.FIELD 737. */ - public static final org.jooq.TableField FIELD_737 = createField("FIELD 737", org.jooq.impl.SQLDataType.DECIMAL.precision(25).scale(2), X_UNUSED); + public static final org.jooq.TableField FIELD_737 = createField("FIELD 737", org.jooq.impl.SQLDataType.DECIMAL.precision(25, 2), X_UNUSED); /** * No further instances allowed diff --git a/jOOQ-test/src/org/jooq/test/hsqldb/generatedclasses/tables/T_639NumbersTable.java b/jOOQ-test/src/org/jooq/test/hsqldb/generatedclasses/tables/T_639NumbersTable.java index a375198023..c0f9e506b1 100644 --- a/jOOQ-test/src/org/jooq/test/hsqldb/generatedclasses/tables/T_639NumbersTable.java +++ b/jOOQ-test/src/org/jooq/test/hsqldb/generatedclasses/tables/T_639NumbersTable.java @@ -9,7 +9,7 @@ package org.jooq.test.hsqldb.generatedclasses.tables; @java.lang.SuppressWarnings("all") public class T_639NumbersTable extends org.jooq.impl.UpdatableTableImpl { - private static final long serialVersionUID = -818421797; + private static final long serialVersionUID = -618860148; /** * The singleton instance of PUBLIC.T_639_NUMBERS_TABLE @@ -77,7 +77,7 @@ public class T_639NumbersTable extends org.jooq.impl.UpdatableTableImplPUBLIC.T_639_NUMBERS_TABLE.BIG_DECIMAL. */ - public final org.jooq.TableField BIG_DECIMAL = createField("BIG_DECIMAL", org.jooq.impl.SQLDataType.DECIMAL.precision(22).scale(5), this); + public final org.jooq.TableField BIG_DECIMAL = createField("BIG_DECIMAL", org.jooq.impl.SQLDataType.DECIMAL.precision(22, 5), this); /** * The column PUBLIC.T_639_NUMBERS_TABLE.FLOAT. diff --git a/jOOQ-test/src/org/jooq/test/hsqldb/generatedclasses/tables/XUnused.java b/jOOQ-test/src/org/jooq/test/hsqldb/generatedclasses/tables/XUnused.java index a0ac7d32a5..ac08a8353f 100644 --- a/jOOQ-test/src/org/jooq/test/hsqldb/generatedclasses/tables/XUnused.java +++ b/jOOQ-test/src/org/jooq/test/hsqldb/generatedclasses/tables/XUnused.java @@ -9,7 +9,7 @@ package org.jooq.test.hsqldb.generatedclasses.tables; @java.lang.SuppressWarnings("all") public class XUnused extends org.jooq.impl.UpdatableTableImpl { - private static final long serialVersionUID = 868916292; + private static final long serialVersionUID = -575442189; /** * The singleton instance of PUBLIC.X_UNUSED @@ -92,7 +92,7 @@ public class XUnused extends org.jooq.impl.UpdatableTableImplPUBLIC.X_UNUSED.FIELD 737. */ - public final org.jooq.TableField FIELD_737 = createField("FIELD 737", org.jooq.impl.SQLDataType.DECIMAL.precision(25).scale(2), this); + public final org.jooq.TableField FIELD_737 = createField("FIELD 737", org.jooq.impl.SQLDataType.DECIMAL.precision(25, 2), this); /** * The column PUBLIC.X_UNUSED.CONNECTION. diff --git a/jOOQ-test/src/org/jooq/test/oracle/generatedclasses/multi_schema/tables/TBookSale.java b/jOOQ-test/src/org/jooq/test/oracle/generatedclasses/multi_schema/tables/TBookSale.java index be8164a5eb..1ad4b7b741 100644 --- a/jOOQ-test/src/org/jooq/test/oracle/generatedclasses/multi_schema/tables/TBookSale.java +++ b/jOOQ-test/src/org/jooq/test/oracle/generatedclasses/multi_schema/tables/TBookSale.java @@ -9,7 +9,7 @@ package org.jooq.test.oracle.generatedclasses.multi_schema.tables; @java.lang.SuppressWarnings("all") public class TBookSale extends org.jooq.impl.UpdatableTableImpl { - private static final long serialVersionUID = -2127720052; + private static final long serialVersionUID = -2069651779; /** * The singleton instance of MULTI_SCHEMA.T_BOOK_SALE @@ -47,7 +47,7 @@ public class TBookSale extends org.jooq.impl.UpdatableTableImplMULTI_SCHEMA.T_BOOK_SALE.SOLD_FOR. */ - public final org.jooq.TableField SOLD_FOR = createField("SOLD_FOR", org.jooq.impl.SQLDataType.NUMERIC.precision(10).scale(2), this); + public final org.jooq.TableField SOLD_FOR = createField("SOLD_FOR", org.jooq.impl.SQLDataType.NUMERIC.precision(10, 2), this); /** * Create a MULTI_SCHEMA.T_BOOK_SALE table reference diff --git a/jOOQ-test/src/org/jooq/test/oracle/generatedclasses/test/tables/T_639NumbersTable.java b/jOOQ-test/src/org/jooq/test/oracle/generatedclasses/test/tables/T_639NumbersTable.java index e0311e9162..e635c5a41a 100644 --- a/jOOQ-test/src/org/jooq/test/oracle/generatedclasses/test/tables/T_639NumbersTable.java +++ b/jOOQ-test/src/org/jooq/test/oracle/generatedclasses/test/tables/T_639NumbersTable.java @@ -9,7 +9,7 @@ package org.jooq.test.oracle.generatedclasses.test.tables; @java.lang.SuppressWarnings("all") public class T_639NumbersTable extends org.jooq.impl.UpdatableTableImpl { - private static final long serialVersionUID = -1297171678; + private static final long serialVersionUID = -382160559; /** * The singleton instance of TEST.T_639_NUMBERS_TABLE @@ -77,7 +77,7 @@ public class T_639NumbersTable extends org.jooq.impl.UpdatableTableImplTEST.T_639_NUMBERS_TABLE.BIG_DECIMAL. */ - public final org.jooq.TableField BIG_DECIMAL = createField("BIG_DECIMAL", org.jooq.impl.SQLDataType.NUMERIC.precision(22).scale(5), this); + public final org.jooq.TableField BIG_DECIMAL = createField("BIG_DECIMAL", org.jooq.impl.SQLDataType.NUMERIC.precision(22, 5), this); /** * Create a TEST.T_639_NUMBERS_TABLE table reference diff --git a/jOOQ-test/src/org/jooq/test/oracle/generatedclasses/test/tables/XUnused.java b/jOOQ-test/src/org/jooq/test/oracle/generatedclasses/test/tables/XUnused.java index fa27473655..e0ca08f97d 100644 --- a/jOOQ-test/src/org/jooq/test/oracle/generatedclasses/test/tables/XUnused.java +++ b/jOOQ-test/src/org/jooq/test/oracle/generatedclasses/test/tables/XUnused.java @@ -11,7 +11,7 @@ package org.jooq.test.oracle.generatedclasses.test.tables; @java.lang.SuppressWarnings("all") public class XUnused extends org.jooq.impl.UpdatableTableImpl { - private static final long serialVersionUID = 1669317032; + private static final long serialVersionUID = -678837737; /** * The singleton instance of TEST.X_UNUSED @@ -94,7 +94,7 @@ public class XUnused extends org.jooq.impl.UpdatableTableImplTEST.X_UNUSED.FIELD 737. */ - public final org.jooq.TableField FIELD_737 = createField("FIELD 737", org.jooq.impl.SQLDataType.NUMERIC.precision(25).scale(2), this); + public final org.jooq.TableField FIELD_737 = createField("FIELD 737", org.jooq.impl.SQLDataType.NUMERIC.precision(25, 2), this); /** * The column TEST.X_UNUSED.MS_UNUSED_ID_REF. diff --git a/jOOQ-test/src/org/jooq/test/postgres/generatedclasses/tables/T_639NumbersTable.java b/jOOQ-test/src/org/jooq/test/postgres/generatedclasses/tables/T_639NumbersTable.java index ddceef266b..9b91637d24 100644 --- a/jOOQ-test/src/org/jooq/test/postgres/generatedclasses/tables/T_639NumbersTable.java +++ b/jOOQ-test/src/org/jooq/test/postgres/generatedclasses/tables/T_639NumbersTable.java @@ -9,7 +9,7 @@ package org.jooq.test.postgres.generatedclasses.tables; @java.lang.SuppressWarnings("all") public class T_639NumbersTable extends org.jooq.impl.UpdatableTableImpl { - private static final long serialVersionUID = -1496351383; + private static final long serialVersionUID = 1869943768; /** * The singleton instance of public.t_639_numbers_table @@ -72,7 +72,7 @@ public class T_639NumbersTable extends org.jooq.impl.UpdatableTableImplpublic.t_639_numbers_table.big_decimal. */ - public final org.jooq.TableField BIG_DECIMAL = createField("big_decimal", org.jooq.impl.SQLDataType.NUMERIC.precision(22).scale(5), this); + public final org.jooq.TableField BIG_DECIMAL = createField("big_decimal", org.jooq.impl.SQLDataType.NUMERIC.precision(22, 5), this); /** * The column public.t_639_numbers_table.float. diff --git a/jOOQ-test/src/org/jooq/test/postgres/generatedclasses/tables/XUnused.java b/jOOQ-test/src/org/jooq/test/postgres/generatedclasses/tables/XUnused.java index a800cefb01..80e47ec933 100644 --- a/jOOQ-test/src/org/jooq/test/postgres/generatedclasses/tables/XUnused.java +++ b/jOOQ-test/src/org/jooq/test/postgres/generatedclasses/tables/XUnused.java @@ -9,7 +9,7 @@ package org.jooq.test.postgres.generatedclasses.tables; @java.lang.SuppressWarnings("all") public class XUnused extends org.jooq.impl.UpdatableTableImpl { - private static final long serialVersionUID = 1011107005; + private static final long serialVersionUID = 1798808172; /** * The singleton instance of public.x_unused @@ -97,7 +97,7 @@ public class XUnused extends org.jooq.impl.UpdatableTableImplpublic.x_unused.FIELD 737. */ - public final org.jooq.TableField FIELD_737 = createField("FIELD 737", org.jooq.impl.SQLDataType.NUMERIC.precision(25).scale(2), this); + public final org.jooq.TableField FIELD_737 = createField("FIELD 737", org.jooq.impl.SQLDataType.NUMERIC.precision(25, 2), this); /** * Create a public.x_unused table reference diff --git a/jOOQ/src/main/java/org/jooq/DataType.java b/jOOQ/src/main/java/org/jooq/DataType.java index 6d59f9c46c..eac4c938f1 100644 --- a/jOOQ/src/main/java/org/jooq/DataType.java +++ b/jOOQ/src/main/java/org/jooq/DataType.java @@ -165,12 +165,28 @@ public interface DataType extends Serializable { * Return a new data type like this, with a new precision value *

* This will have no effect if {@link #hasPrecision()} is false + *

+ * This is the same as calling {@link #precision(int, int)} with + * scale == 0 * * @param precision The new precision value * @return The new data type */ DataType precision(int precision); + /** + * Return a new data type like this, with a new precision and scale value + *

+ * This will have no effect if {@link #hasPrecision()} is false + * , or if scale > 0 and {@link #hasScale()} is + * false + * + * @param precision The new precision value + * @param scale The new scale value + * @return The new data type + */ + DataType precision(int precision, int scale); + /** * Get the precision of this data type * diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java b/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java index e2775e5d3d..67bbd583d1 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java @@ -281,11 +281,16 @@ public class DefaultDataType implements DataType { @Override public final DataType precision(int p) { - if (precision == p) { + return precision(p, scale); + } + + @Override + public final DataType precision(int p, int s) { + if (precision == p && scale == s) { return this; } - else if (hasPrecision()) { - return new DefaultDataType(dialect, sqlDataType, type, typeName, castTypeName, p, scale, length); + else if (hasPrecision() && (s == 0 || hasScale())) { + return new DefaultDataType(dialect, sqlDataType, type, typeName, castTypeName, p, s, length); } else { return this; @@ -362,7 +367,7 @@ public class DefaultDataType implements DataType { // Be sure to reset length, precision, and scale, as those values // were not registered in the below cache - DataType dataType = TYPES_BY_SQL_DATATYPE[configuration.getDialect().ordinal()].get(length(0).precision(0).scale(0)); + DataType dataType = TYPES_BY_SQL_DATATYPE[configuration.getDialect().ordinal()].get(length(0).precision(0, 0)); if (dataType != null) { return (DataType) dataType; diff --git a/jOOQ/src/main/java/org/jooq/impl/Val.java b/jOOQ/src/main/java/org/jooq/impl/Val.java index 8634cce077..1e4c16c14b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Val.java +++ b/jOOQ/src/main/java/org/jooq/impl/Val.java @@ -280,7 +280,7 @@ class Val extends AbstractField implements Param { context.keyword("cast("); toSQL(context, getValue(), getType()); context.keyword(" as ") - .sql(type.length(length).precision(precision).scale(scale).getCastTypeName(context)) + .sql(type.length(length).precision(precision, scale).getCastTypeName(context)) .sql(")"); }