diff --git a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java index 8f3316d865..630526fd8a 100644 --- a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java +++ b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java @@ -5657,28 +5657,27 @@ public abstract class jOOQAbstractTest< // --------------------------------------------------------------------- // DECODE // --------------------------------------------------------------------- - assertEquals(null, create().select(sNull.decode(sNull, sNull)).fetchOne(0)); + assertEquals(null, create().select(decode(sNull, sNull, sNull)).fetchOne(0)); + assertEquals(null, create().select(decode(iNull, val(2), val(1))).fetchOne(0)); + assertEquals(Integer.valueOf(1), create().select(decode(iNull, val(2), val(1), val(1))).fetchOne(0)); + assertEquals(Integer.valueOf(1), create().select(decode(iNull, iNull, val(1))).fetchOne(0)); + assertEquals(Integer.valueOf(1), create().select(decode(iNull, iNull, val(1), val(2))).fetchOne(0)); + assertEquals(Integer.valueOf(1), create().select(decode(iNull, val(2), val(2), iNull, val(1))).fetchOne(0)); + assertEquals(Integer.valueOf(1), create().select(decode(iNull, val(2), val(2), iNull, val(1), val(3))).fetchOne(0)); - assertEquals(null, create().select(iNull.decode(2, 1)).fetchOne(0)); - assertEquals(Integer.valueOf(1), create().select(iNull.decode(2, 1, 1)).fetchOne(0)); - assertEquals(Integer.valueOf(1), create().select(iNull.decode(iNull, val(1))).fetchOne(0)); - assertEquals(Integer.valueOf(1), create().select(iNull.decode(iNull, val(1), val(2))).fetchOne(0)); - assertEquals(Integer.valueOf(1), create().select(iNull.decode(val(2), val(2), iNull, val(1))).fetchOne(0)); - assertEquals(Integer.valueOf(1), create().select(iNull.decode(val(2), val(2), iNull, val(1), val(3))).fetchOne(0)); - - assertEquals(null, create().select(sNull.decode("2", "1")).fetchOne(0)); - assertEquals("1", create().select(sNull.decode("2", "1", "1")).fetchOne(0)); - assertEquals("1", create().select(sNull.decode(sNull, val("1"))).fetchOne(0)); - assertEquals("1", create().select(sNull.decode(sNull, val("1"), val("2"))).fetchOne(0)); - assertEquals("1", create().select(sNull.decode(val("2"), val("2"), sNull, val("1"))).fetchOne(0)); - assertEquals("1", create().select(sNull.decode(val("2"), val("2"), sNull, val("1"), val("3"))).fetchOne(0)); + assertEquals(null, create().select(decode(sNull, "2", "1")).fetchOne(0)); + assertEquals("1", create().select(decode(sNull, "2", "1", "1")).fetchOne(0)); + assertEquals("1", create().select(decode(sNull, sNull, val("1"))).fetchOne(0)); + assertEquals("1", create().select(decode(sNull, sNull, val("1"), val("2"))).fetchOne(0)); + assertEquals("1", create().select(decode(sNull, val("2"), val("2"), sNull, val("1"))).fetchOne(0)); + assertEquals("1", create().select(decode(sNull, val("2"), val("2"), sNull, val("1"), val("3"))).fetchOne(0)); Field lang = TBook_LANGUAGE_ID().cast(Integer.class); Result result = create().select( - lang.decode(1, "EN"), - lang.decode(1, "EN", "Other"), - lang.decode(1, "EN", 2, "DE"), - lang.decode(1, "EN", 2, "DE", "Other")) + decode(lang, 1, "EN"), + decode(lang, 1, "EN", "Other"), + decode(lang, 1, "EN", 2, "DE"), + decode(lang, 1, "EN", 2, "DE", "Other")) .from(TBook()) .orderBy(TBook_ID()).fetch(); diff --git a/jOOQ/src/main/java/org/jooq/Field.java b/jOOQ/src/main/java/org/jooq/Field.java index fca548d346..3f5f93fe09 100644 --- a/jOOQ/src/main/java/org/jooq/Field.java +++ b/jOOQ/src/main/java/org/jooq/Field.java @@ -332,64 +332,6 @@ public interface Field extends NamedTypeProviderQueryPart, AliasProvider mod(Field value); - // ------------------------------------------------------------------------ - // General functions created from this field - // ------------------------------------------------------------------------ - - /** - * Gets the Oracle-style - * DECODE(expression, search, result[, search , result]... [, default]) - * function - * - * @see #decode(Field, Field, Field[]) - */ - Field decode(T search, Z result); - - /** - * Gets the Oracle-style - * DECODE(expression, search, result[, search , result]... [, default]) - * function - * - * @see #decode(Field, Field, Field[]) - */ - Field decode(T search, Z result, Object... more); - - /** - * Gets the Oracle-style - * DECODE(expression, search, result[, search , result]... [, default]) - * function - * - * @see #decode(Field, Field, Field[]) - */ - Field decode(Field search, Field result); - - /** - * Gets the Oracle-style - * DECODE(expression, search, result[, search , result]... [, default]) - * function - *

- * Returns the dialect's equivalent to DECODE: - *

- *

- * Other dialects:

-     * CASE WHEN [this = search] THEN [result],
-     *     [WHEN more...         THEN more...]
-     *     [ELSE more...]
-     * END
-     * 
- * - * @param search the mandatory first search parameter - * @param result the mandatory first result parameter - * @param more the optional parameters. If more.length is even, - * then it is assumed that it contains more search/result pairs. - * If more.length is odd, then it is assumed that it - * contains more search/result pairs plus a default at the end. - */ - Field decode(Field search, Field result, Field... more); - // ------------------------------------------------------------------------ // Conditions created from this field // ------------------------------------------------------------------------ diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractField.java b/jOOQ/src/main/java/org/jooq/impl/AbstractField.java index c2005a0982..b2ee95e8b2 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractField.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractField.java @@ -280,33 +280,6 @@ abstract class AbstractField extends AbstractNamedTypeProviderQueryPart im return new Mod(this, nullSafe(value)); } - // ------------------------------------------------------------------------ - // Other functions created from this field - // ------------------------------------------------------------------------ - - @Override - public final Field decode(T search, Z result) { - return decode(search, result, new Object[0]); - } - - @Override - public final Field decode(T search, Z result, Object... more) { - return decode( - val(search), - val(result), - vals(more).toArray(new Field[0])); - } - - @Override - public final Field decode(Field search, Field result) { - return decode(nullSafe(search), nullSafe(result), new Field[0]); - } - - @Override - public final Field decode(Field search, Field result, Field... more) { - return new Decode(this, nullSafe(search), nullSafe(result), nullSafe(more)); - } - // ------------------------------------------------------------------------ // Conditions created from this field // ------------------------------------------------------------------------ diff --git a/jOOQ/src/main/java/org/jooq/impl/Factory.java b/jOOQ/src/main/java/org/jooq/impl/Factory.java index 2a6ec9eab2..c36aecee51 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Factory.java +++ b/jOOQ/src/main/java/org/jooq/impl/Factory.java @@ -1174,7 +1174,7 @@ public class Factory implements FactoryOperations { * @see Field#decode(Field, Field, Field[]) */ public static Field decode(T value, T search, Z result) { - return val(value).decode(search, result); + return decode(value, search, result, new Object[0]); } /** @@ -1185,7 +1185,7 @@ public class Factory implements FactoryOperations { * @see Field#decode(Field, Field, Field[]) */ public static Field decode(T value, T search, Z result, Object... more) { - return val(value).decode(search, result, more); + return decode(val(value), val(search), val(result), vals(more).toArray(new Field[0])); } /** @@ -1196,18 +1196,39 @@ public class Factory implements FactoryOperations { * @see Field#decode(Field, Field, Field[]) */ public static Field decode(Field value, Field search, Field result) { - return nullSafe(value).decode(nullSafe(search), nullSafe(result)); + return decode(nullSafe(value), nullSafe(search), nullSafe(result), new Field[0]); } /** * Gets the Oracle-style * DECODE(expression, search, result[, search , result]... [, default]) * function + *

+ * Returns the dialect's equivalent to DECODE: + *

+ *

+ * Other dialects:

+     * CASE WHEN [this = search] THEN [result],
+     *     [WHEN more...         THEN more...]
+     *     [ELSE more...]
+     * END
+     * 
+ * + * @param value The value to decode + * @param search the mandatory first search parameter + * @param result the mandatory first result candidate parameter + * @param more the optional parameters. If more.length is even, + * then it is assumed that it contains more search/result pairs. + * If more.length is odd, then it is assumed that it + * contains more search/result pairs plus a default at the end. * * * @see Field#decode(Field, Field, Field[]) */ public static Field decode(Field value, Field search, Field result, Field... more) { - return nullSafe(value).decode(nullSafe(search), nullSafe(result), nullSafe(more)); + return new Decode(nullSafe(value), nullSafe(search), nullSafe(result), nullSafe(more)); } /** diff --git a/jOOQ/src/test/java/org/jooq/test/jOOQTest.java b/jOOQ/src/test/java/org/jooq/test/jOOQTest.java index 65a3af3a7f..5974e57cc0 100644 --- a/jOOQ/src/test/java/org/jooq/test/jOOQTest.java +++ b/jOOQ/src/test/java/org/jooq/test/jOOQTest.java @@ -194,9 +194,6 @@ public class jOOQTest { assertEquals( FIELD_ID1.between((Integer) null, null), FIELD_ID1.between((Field) null, null)); - assertEquals( - FIELD_ID1.decode((Integer) null, null), - FIELD_ID1.decode((Field) null, null)); assertEquals( FIELD_ID1.div((Integer) null), FIELD_ID1.div((Field) null)); @@ -353,6 +350,9 @@ public class jOOQTest { assertEquals( Factory.decode((Integer) null, null, null), Factory.decode((Field) null, null, null)); + assertEquals( + Factory.decode((Integer) null, null, null), + Factory.decode((Field) null, null, null)); assertEquals( Factory.deg((Integer) null), Factory.deg((Field) null));