From 2f8d68812c631341454ed4ae3fcaf8609ed2b965 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 8 Dec 2020 17:04:43 +0100 Subject: [PATCH] [jOOQ/jOOQ#11061] [jOOQ/jOOQ#11070] [jOOQ/jOOQ#11091] REPLACE --- jOOQ/src/main/java/org/jooq/impl/DSL.java | 158 ++++++++++++------ jOOQ/src/main/java/org/jooq/impl/Replace.java | 79 ++++++--- 2 files changed, 163 insertions(+), 74 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java index 568d5f96fb..b6b81a12f9 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DSL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java @@ -15151,6 +15151,114 @@ public class DSL { return new Repeat(string, count); } + /** + * The REPLACE function. + */ + @NotNull + @Support({ CUBRID, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) + public static Field replace(String string, String search, String replace) { + return new Replace(Tools.field(string), Tools.field(search), Tools.field(replace)); + } + + /** + * The REPLACE function. + */ + @NotNull + @Support({ CUBRID, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) + public static Field replace(String string, String search, Field replace) { + return new Replace(Tools.field(string), Tools.field(search), replace); + } + + /** + * The REPLACE function. + */ + @NotNull + @Support({ CUBRID, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) + public static Field replace(String string, Field search, String replace) { + return new Replace(Tools.field(string), search, Tools.field(replace)); + } + + /** + * The REPLACE function. + */ + @NotNull + @Support({ CUBRID, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) + public static Field replace(String string, Field search, Field replace) { + return new Replace(Tools.field(string), search, replace); + } + + /** + * The REPLACE function. + */ + @NotNull + @Support({ CUBRID, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) + public static Field replace(Field string, String search, String replace) { + return new Replace(string, Tools.field(search), Tools.field(replace)); + } + + /** + * The REPLACE function. + */ + @NotNull + @Support({ CUBRID, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) + public static Field replace(Field string, String search, Field replace) { + return new Replace(string, Tools.field(search), replace); + } + + /** + * The REPLACE function. + */ + @NotNull + @Support({ CUBRID, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) + public static Field replace(Field string, Field search, String replace) { + return new Replace(string, search, Tools.field(replace)); + } + + /** + * The REPLACE function. + */ + @NotNull + @Support({ CUBRID, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) + public static Field replace(Field string, Field search, Field replace) { + return new Replace(string, search, replace); + } + + /** + * The REPLACE function. + */ + @NotNull + @Support({ CUBRID, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) + public static Field replace(String string, String search) { + return new Replace(Tools.field(string), Tools.field(search)); + } + + /** + * The REPLACE function. + */ + @NotNull + @Support({ CUBRID, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) + public static Field replace(String string, Field search) { + return new Replace(Tools.field(string), search); + } + + /** + * The REPLACE function. + */ + @NotNull + @Support({ CUBRID, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) + public static Field replace(Field string, String search) { + return new Replace(string, Tools.field(search)); + } + + /** + * The REPLACE function. + */ + @NotNull + @Support({ CUBRID, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) + public static Field replace(Field string, Field search) { + return new Replace(string, search); + } + /** * The REVERSE function. */ @@ -15683,56 +15791,6 @@ public class DSL { return replace; } - /** - * Get the replace(field, search) function. - * - * @see #replace(Field, Field) - */ - @NotNull - @Support({ CUBRID, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) - public static Field replace(Field field, String search) { - return replace(Tools.nullSafe(field), Tools.field(search)); - } - - /** - * Get the replace(field, search) function. - *

- * This renders the replace or str_replace function where available: - *

replace([field], [search]) or
-     * str_replace([field], [search])
... or emulates it elsewhere - * using the three-argument replace function: - *
replace([field], [search], '')
- */ - @NotNull - @Support({ CUBRID, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) - public static Field replace(Field field, Field search) { - return new Replace(Tools.nullSafe(field), Tools.nullSafe(search), null); - } - - /** - * Get the replace(field, search, replace) function. - * - * @see #replace(Field, Field, Field) - */ - @NotNull - @Support({ CUBRID, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) - public static Field replace(Field field, String search, String replace) { - return replace(Tools.nullSafe(field), Tools.field(search), Tools.field(replace)); - } - - /** - * Get the replace(field, search, replace) function. - *

- * This renders the replace or str_replace function: - *

replace([field], [search]) or
-     * str_replace([field], [search])
- */ - @NotNull - @Support({ CUBRID, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) - public static Field replace(Field field, Field search, Field replace) { - return new Replace(Tools.nullSafe(field), Tools.nullSafe(search), Tools.nullSafe(replace)); - } - /** * Get the REGEXP_REPLACE_ALL function. */ diff --git a/jOOQ/src/main/java/org/jooq/impl/Replace.java b/jOOQ/src/main/java/org/jooq/impl/Replace.java index eca1ab1243..2929f5a145 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Replace.java +++ b/jOOQ/src/main/java/org/jooq/impl/Replace.java @@ -37,35 +37,64 @@ */ package org.jooq.impl; -import static org.jooq.impl.DSL.function; -import static org.jooq.impl.DSL.val; -import static org.jooq.impl.Names.N_REPLACE; -import static org.jooq.impl.SQLDataType.VARCHAR; +import static org.jooq.impl.DSL.*; +import static org.jooq.impl.Internal.*; +import static org.jooq.impl.Keywords.*; +import static org.jooq.impl.Names.*; +import static org.jooq.impl.SQLDataType.*; +import static org.jooq.impl.Tools.*; +import static org.jooq.impl.Tools.BooleanDataKey.*; +import static org.jooq.SQLDialect.*; -import org.jooq.Context; -import org.jooq.Field; +import org.jooq.*; +import org.jooq.impl.*; + +import java.util.*; /** - * @author Lukas Eder + * The REPLACE statement. */ -final class Replace extends AbstractField { +@SuppressWarnings({ "rawtypes", "unchecked", "unused" }) +final class Replace +extends + AbstractField +{ - /** - * Generated UID - */ - private static final long serialVersionUID = -7273879239726265322L; - private final Field field; - private final Field search; - private final Field replace; + private static final long serialVersionUID = 1L; - Replace(Field field, Field search, Field replace) { - super(N_REPLACE, SQLDataType.VARCHAR); + private final Field string; + private final Field search; + private final Field replace; - this.field = field; - this.search = search; - this.replace = replace; + Replace( + Field string, + Field search + ) { + super(N_REPLACE, allNotNull(VARCHAR, string, search)); + + this.string = nullSafeNotNull(string, VARCHAR); + this.search = nullSafeNotNull(search, VARCHAR); + this.replace = null; } + Replace( + Field string, + Field search, + Field replace + ) { + super(N_REPLACE, allNotNull(VARCHAR, string, search, replace)); + + this.string = nullSafeNotNull(string, VARCHAR); + this.search = nullSafeNotNull(search, VARCHAR); + this.replace = nullSafeNotNull(replace, VARCHAR); + } + + // ------------------------------------------------------------------------- + // XXX: QueryPart API + // ------------------------------------------------------------------------- + + + @Override public final void accept(Context ctx) { @@ -109,19 +138,21 @@ final class Replace extends AbstractField { case POSTGRES: case SQLITE: if (replace == null) - ctx.visit(function("replace", VARCHAR, field, search, val(""))); + ctx.visit(function("replace", VARCHAR, string, search, val(""))); else - ctx.visit(function("replace", VARCHAR, field, search, replace)); + ctx.visit(function("replace", VARCHAR, string, search, replace)); return; default: if (replace == null) - ctx.visit(function("replace", VARCHAR, field, search)); + ctx.visit(function("replace", VARCHAR, string, search)); else - ctx.visit(function("replace", VARCHAR, field, search, replace)); + ctx.visit(function("replace", VARCHAR, string, search, replace)); return; } } + + }