From c9ca7aa207ea2740e44f3bec58453ff9fb659142 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 7 Nov 2024 10:39:06 +0100 Subject: [PATCH] [jOOQ/jOOQ#17570] Replace usage of internal castIfNeeded(Field, Class) utility by castIfNeeded(Field, DataType) --- .../java/org/jooq/impl/AbstractField.java | 9 +++--- jOOQ/src/main/java/org/jooq/impl/Concat.java | 3 +- .../src/main/java/org/jooq/impl/DateDiff.java | 3 +- jOOQ/src/main/java/org/jooq/impl/Degrees.java | 2 +- jOOQ/src/main/java/org/jooq/impl/Extract.java | 2 ++ jOOQ/src/main/java/org/jooq/impl/Like.java | 8 ++--- jOOQ/src/main/java/org/jooq/impl/ListAgg.java | 2 +- jOOQ/src/main/java/org/jooq/impl/Radians.java | 2 +- .../java/org/jooq/impl/TimestampDiff.java | 2 +- jOOQ/src/main/java/org/jooq/impl/Tools.java | 29 ++----------------- .../main/java/org/jooq/impl/TruncDate.java | 1 + 11 files changed, 22 insertions(+), 41 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractField.java b/jOOQ/src/main/java/org/jooq/impl/AbstractField.java index e318cb5871..3c80a86c53 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractField.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractField.java @@ -41,6 +41,7 @@ import static org.jooq.Clause.FIELD; import static org.jooq.impl.DSL.inline; import static org.jooq.impl.ExpressionOperator.ADD; import static org.jooq.impl.ExpressionOperator.SUBTRACT; +import static org.jooq.impl.SQLDataType.VARCHAR; import static org.jooq.impl.Tools.EMPTY_FIELD; import static org.jooq.impl.Tools.castIfNeeded; import static org.jooq.impl.Tools.map; @@ -1232,7 +1233,7 @@ implements else if (t.isBoolean()) return eq(inline(true).coerce(this)); else - return castIfNeeded(this, String.class).in(BooleanValues.TRUE_VALUES); + return castIfNeeded(this, VARCHAR).in(BooleanValues.TRUE_VALUES); } @Override @@ -1246,7 +1247,7 @@ implements else if (t.isBoolean()) return eq(inline(false).coerce(this)); else - return castIfNeeded(this, String.class).in(BooleanValues.FALSE_VALUES); + return castIfNeeded(this, VARCHAR).in(BooleanValues.FALSE_VALUES); } @Override @@ -1504,7 +1505,7 @@ implements @Override public final Condition equalIgnoreCase(Field value) { - return DSL.lower(castIfNeeded(this, String.class)).equal(DSL.lower(value)); + return DSL.lower(castIfNeeded(this, VARCHAR)).equal(DSL.lower(value)); } @Override @@ -1514,7 +1515,7 @@ implements @Override public final Condition notEqualIgnoreCase(Field value) { - return DSL.lower(castIfNeeded(this, String.class)).notEqual(DSL.lower(value)); + return DSL.lower(castIfNeeded(this, VARCHAR)).notEqual(DSL.lower(value)); } @Override diff --git a/jOOQ/src/main/java/org/jooq/impl/Concat.java b/jOOQ/src/main/java/org/jooq/impl/Concat.java index 39c51a91c6..83ca7b8f53 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Concat.java +++ b/jOOQ/src/main/java/org/jooq/impl/Concat.java @@ -42,6 +42,7 @@ import static org.jooq.impl.DSL.inline; import static org.jooq.impl.ExpressionOperator.ADD; import static org.jooq.impl.ExpressionOperator.CONCAT; import static org.jooq.impl.Names.N_CONCAT; +import static org.jooq.impl.SQLDataType.VARCHAR; import static org.jooq.impl.Tools.EMPTY_FIELD; import static org.jooq.impl.Tools.castAllIfNeeded; @@ -137,7 +138,7 @@ final class Concat extends AbstractField implements QOM.Concat { private final List> cast(Context ctx, List> result) { // [#461] Type cast the concat expression, if this isn't a VARCHAR field - for (Field f : castAllIfNeeded(arguments, String.class)) { + for (Field f : castAllIfNeeded(arguments, VARCHAR)) { if (f instanceof Concat c) c.cast(ctx, result); else diff --git a/jOOQ/src/main/java/org/jooq/impl/DateDiff.java b/jOOQ/src/main/java/org/jooq/impl/DateDiff.java index 9a31d79a73..6308ae5ec2 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DateDiff.java +++ b/jOOQ/src/main/java/org/jooq/impl/DateDiff.java @@ -65,6 +65,7 @@ import static org.jooq.impl.Names.N_SQL_TSI_SECOND; import static org.jooq.impl.Names.N_STRFTIME; import static org.jooq.impl.Names.N_TIMESTAMPDIFF; import static org.jooq.impl.Names.N_TIMESTAMP_DIFF; +import static org.jooq.impl.SQLDataType.INTEGER; import static org.jooq.impl.SQLDataType.TIMESTAMP; import static org.jooq.impl.Tools.castIfNeeded; @@ -308,7 +309,7 @@ final class DateDiff extends AbstractField implements UNotYetImpleme return; } - ctx.visit(castIfNeeded(endDate.minus(startDate), Integer.class)); + ctx.visit(castIfNeeded(endDate.minus(startDate), INTEGER)); } private final Field partDiff(DatePart p) { diff --git a/jOOQ/src/main/java/org/jooq/impl/Degrees.java b/jOOQ/src/main/java/org/jooq/impl/Degrees.java index d015746d30..567d776798 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Degrees.java +++ b/jOOQ/src/main/java/org/jooq/impl/Degrees.java @@ -144,7 +144,7 @@ implements case FIREBIRD: ctx.visit(idiv( imul( - castIfNeeded(radians, BigDecimal.class), + castIfNeeded(radians, NUMERIC), inline(180) ), pi() diff --git a/jOOQ/src/main/java/org/jooq/impl/Extract.java b/jOOQ/src/main/java/org/jooq/impl/Extract.java index 9c9d13b025..c69b928f9f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Extract.java +++ b/jOOQ/src/main/java/org/jooq/impl/Extract.java @@ -67,7 +67,9 @@ import static org.jooq.impl.Names.N_TO_CHAR; import static org.jooq.impl.Names.N_TO_NUMBER; import static org.jooq.impl.Names.N_TRUNC; import static org.jooq.impl.Names.N_WEEKDAY; +import static org.jooq.impl.SQLDataType.DATE; import static org.jooq.impl.SQLDataType.INTEGER; +import static org.jooq.impl.SQLDataType.TIMESTAMP; import static org.jooq.impl.SQLDataType.VARCHAR; import static org.jooq.impl.Tools.castIfNeeded; diff --git a/jOOQ/src/main/java/org/jooq/impl/Like.java b/jOOQ/src/main/java/org/jooq/impl/Like.java index 399b969140..9310a0c382 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Like.java +++ b/jOOQ/src/main/java/org/jooq/impl/Like.java @@ -179,18 +179,18 @@ implements case NOT_LIKE: case NOT_SIMILAR_TO: if (!arg1.getDataType().isString() && REQUIRES_CAST_ON_LIKE.contains(ctx.dialect())) - arg1 = castIfNeeded(arg1, String.class); + arg1 = castIfNeeded(arg1, VARCHAR); if (!arg2.getDataType().isString() && REQUIRES_CAST_ON_LIKE.contains(ctx.dialect())) - arg2 = castIfNeeded(arg2, String.class); + arg2 = castIfNeeded(arg2, VARCHAR); break; case LIKE_IGNORE_CASE: case NOT_LIKE_IGNORE_CASE: if (!arg1.getDataType().isString()) - arg1 = castIfNeeded(arg1, String.class); + arg1 = castIfNeeded(arg1, VARCHAR); if (!arg2.getDataType().isString()) - arg2 = castIfNeeded(arg2, String.class); + arg2 = castIfNeeded(arg2, VARCHAR); break; } diff --git a/jOOQ/src/main/java/org/jooq/impl/ListAgg.java b/jOOQ/src/main/java/org/jooq/impl/ListAgg.java index 1ed8c5026e..bc742579b2 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ListAgg.java +++ b/jOOQ/src/main/java/org/jooq/impl/ListAgg.java @@ -244,7 +244,7 @@ implements ctx.sql('('); // The explicit cast is needed in Postgres - QueryPartListView> args = wrap(castIfNeeded((Field) arguments.get(0), String.class)); + QueryPartListView> args = wrap(castIfNeeded((Field) arguments.get(0), VARCHAR)); acceptArguments1(ctx, args); if (arguments.size() > 1) diff --git a/jOOQ/src/main/java/org/jooq/impl/Radians.java b/jOOQ/src/main/java/org/jooq/impl/Radians.java index 47ef702ad9..3c2ff890d5 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Radians.java +++ b/jOOQ/src/main/java/org/jooq/impl/Radians.java @@ -129,7 +129,7 @@ implements case FIREBIRD: ctx.visit(idiv( imul( - castIfNeeded(degrees, BigDecimal.class), + castIfNeeded(degrees, NUMERIC), pi() ), inline(180) diff --git a/jOOQ/src/main/java/org/jooq/impl/TimestampDiff.java b/jOOQ/src/main/java/org/jooq/impl/TimestampDiff.java index 42978587a8..b64451ceb6 100644 --- a/jOOQ/src/main/java/org/jooq/impl/TimestampDiff.java +++ b/jOOQ/src/main/java/org/jooq/impl/TimestampDiff.java @@ -168,7 +168,7 @@ final class TimestampDiff extends AbstractField implements QOM.T default: // Default implementation for equals() and hashCode() - ctx.visit(castIfNeeded(timestamp1.sub(timestamp2), DayToSecond.class)); + ctx.visit(castIfNeeded(timestamp1.sub(timestamp2), INTERVALDAYTOSECOND)); break; } } diff --git a/jOOQ/src/main/java/org/jooq/impl/Tools.java b/jOOQ/src/main/java/org/jooq/impl/Tools.java index 7a8fce8495..995a2fccc2 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tools.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tools.java @@ -1921,19 +1921,6 @@ final class Tools { return new IllegalArgumentException("Cannot interpret argument of type " + value.getClass() + " as a Field: " + value); } - /** - * [#461] [#473] [#2597] [#8234] Some internals need a cast only if necessary. - */ - @SuppressWarnings("unchecked") - static final Field[] castAllIfNeeded(Field[] fields, Class type) { - Field[] castFields = new Field[fields.length]; - - for (int i = 0; i < fields.length; i++) - castFields[i] = castIfNeeded(fields[i], type); - - return castFields; - } - /** * [#461] [#473] [#2597] [#8234] Some internals need a cast only if necessary. */ @@ -1947,17 +1934,6 @@ final class Tools { return castFields; } - /** - * [#461] [#473] [#2597] [#8234] Some internals need a cast only if necessary. - */ - @SuppressWarnings("unchecked") - static final Field castIfNeeded(Field field, Class type) { - if (field.getType().equals(type)) - return (Field) field; - else - return field.cast(type); - } - /** * [#461] [#473] [#2597] [#8234] Some internals need a cast only if necessary. */ @@ -4072,9 +4048,8 @@ final class Tools { return escape((Field) field, ESCAPE); } } - else { - return castIfNeeded(field, String.class); - } + else + return castIfNeeded(field, VARCHAR); } static final boolean isParam(Field field) { diff --git a/jOOQ/src/main/java/org/jooq/impl/TruncDate.java b/jOOQ/src/main/java/org/jooq/impl/TruncDate.java index 31872d1714..edb3cbdf72 100644 --- a/jOOQ/src/main/java/org/jooq/impl/TruncDate.java +++ b/jOOQ/src/main/java/org/jooq/impl/TruncDate.java @@ -45,6 +45,7 @@ import static org.jooq.impl.Keywords.K_CAST; import static org.jooq.impl.Names.N_DATETIME_TRUNC; import static org.jooq.impl.Names.N_DATE_TRUNC; import static org.jooq.impl.Names.N_TRUNC; +import static org.jooq.impl.SQLDataType.DATE; import static org.jooq.impl.SQLDataType.VARCHAR; import static org.jooq.impl.Tools.castIfNeeded;