diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractAggregateFunction.java b/jOOQ/src/main/java/org/jooq/impl/AbstractAggregateFunction.java index 722481c792..712dead3df 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractAggregateFunction.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractAggregateFunction.java @@ -171,7 +171,7 @@ implements ctx.sql(')'); } - final void acceptArguments2(Context ctx, QueryPartCollectionView> args) { + /* non-final */ void acceptArguments2(Context ctx, QueryPartCollectionView> args) { if (filter == null || SUPPORT_FILTER.contains(ctx.dialect())) ctx.visit(args); diff --git a/jOOQ/src/main/java/org/jooq/impl/AnyValue.java b/jOOQ/src/main/java/org/jooq/impl/AnyValue.java index dbb39b40a9..61fb8451e1 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AnyValue.java +++ b/jOOQ/src/main/java/org/jooq/impl/AnyValue.java @@ -103,6 +103,7 @@ extends case DERBY: case FIREBIRD: case H2: + case HSQLDB: case IGNITE: case MARIADB: @@ -127,12 +128,5 @@ extends } } - @Override - public void accept(Context ctx) { - super.accept(ctx); - } - - - } diff --git a/jOOQ/src/main/java/org/jooq/impl/Keywords.java b/jOOQ/src/main/java/org/jooq/impl/Keywords.java index c722e7f81f..85dcf7a17e 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Keywords.java +++ b/jOOQ/src/main/java/org/jooq/impl/Keywords.java @@ -288,6 +288,7 @@ final class Keywords { static final Keyword K_NULLS_LAST = keyword("nulls last"); static final Keyword K_NUMERIC = keyword("numeric"); static final Keyword K_NVARCHAR = keyword("nvarchar"); + static final Keyword K_OCCURRENCE = keyword("occurrence"); static final Keyword K_OF = keyword("of"); static final Keyword K_OFFSET = keyword("offset"); static final Keyword K_OLD = keyword("old"); diff --git a/jOOQ/src/main/java/org/jooq/impl/Limit.java b/jOOQ/src/main/java/org/jooq/impl/Limit.java index 24904e12dc..0c5f3328b9 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Limit.java +++ b/jOOQ/src/main/java/org/jooq/impl/Limit.java @@ -268,6 +268,8 @@ final class Limit extends AbstractQueryPart { + + @@ -279,7 +281,6 @@ final class Limit extends AbstractQueryPart { - case MYSQL: case SQLITE: { acceptDefaultLimitMandatory(ctx, castMode); diff --git a/jOOQ/src/main/java/org/jooq/impl/Names.java b/jOOQ/src/main/java/org/jooq/impl/Names.java index 2cc842475e..f4b8cdd161 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Names.java +++ b/jOOQ/src/main/java/org/jooq/impl/Names.java @@ -293,6 +293,7 @@ final class Names { static final Name N_REGR_SYY = unquotedName("regr_syy"); static final Name N_REPEAT = unquotedName("repeat"); static final Name N_REPLACE = unquotedName("replace"); + static final Name N_REPLACE_REGEXPR = unquotedName("replace_regexpr"); static final Name N_REPLICATE = unquotedName("replicate"); static final Name N_REVERSE = unquotedName("reverse"); static final Name N_RIGHT = unquotedName("right"); diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index cd19fc6f0b..739469c869 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -9805,6 +9805,19 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { ? regexpReplaceFirst(field, pattern, replacement) : regexpReplaceAll(field, pattern, replacement); } + else if (parseFunctionNameIf("REPLACE_REGEXPR")) { + parse('('); + Field pattern = parseField(S); + parseKeyword("IN"); + Field field = parseField(S); + Field replacement = parseKeywordIf("WITH") ? parseField(S) : inline(""); + first = parseKeywordIf("OCCURRENCE") && !parseKeywordIf("ALL") && parse("1"); + + parse(')'); + return first + ? regexpReplaceFirst(field, pattern, replacement) + : regexpReplaceAll(field, pattern, replacement); + } return null; } diff --git a/jOOQ/src/main/java/org/jooq/impl/RegexpReplace.java b/jOOQ/src/main/java/org/jooq/impl/RegexpReplace.java index 1f22ca9c50..690d23d40b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/RegexpReplace.java +++ b/jOOQ/src/main/java/org/jooq/impl/RegexpReplace.java @@ -37,8 +37,12 @@ */ package org.jooq.impl; +import static org.jooq.impl.Keywords.K_IN; +import static org.jooq.impl.Keywords.K_OCCURRENCE; +import static org.jooq.impl.Keywords.K_WITH; import static org.jooq.impl.Names.N_REGEXP_REPLACE; import static org.jooq.impl.Names.N_REGEX_REPLACE; +import static org.jooq.impl.Names.N_REPLACE_REGEXPR; import org.jooq.Context; import org.jooq.Field; @@ -88,6 +92,15 @@ final class RegexpReplace extends AbstractField { + + + + + + + + + diff --git a/jOOQ/src/main/java/org/jooq/impl/Tools.java b/jOOQ/src/main/java/org/jooq/impl/Tools.java index 47b6a25aef..27ab0f55c6 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tools.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tools.java @@ -4838,7 +4838,6 @@ final class Tools { - case CUBRID: ctx.sql(' ').visit(K_AUTO_INCREMENT); break; case HSQLDB: ctx.sql(' ').visit(K_GENERATED_BY_DEFAULT_AS_IDENTITY).sql('(').visit(K_START_WITH).sql(" 1)"); break; @@ -4872,6 +4871,7 @@ final class Tools { switch (ctx.family()) { + case H2: ctx.sql(' ').visit(K_GENERATED_BY_DEFAULT_AS_IDENTITY); break; diff --git a/jOOQ/src/main/java/org/jooq/impl/Uuid.java b/jOOQ/src/main/java/org/jooq/impl/Uuid.java index 9bb2e0629b..5fee1b4402 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Uuid.java +++ b/jOOQ/src/main/java/org/jooq/impl/Uuid.java @@ -127,6 +127,10 @@ extends + + + + case H2: ctx.visit(function(N_RANDOM_UUID, getDataType())); break;