[jOOQ/jOOQ#13289] Support XMLQUERY() and XMLEXISTS() also in SQL Server

This commit is contained in:
Lukas Eder 2022-03-16 13:00:25 +01:00
parent b3f4dc01a2
commit 20e9d9dd9a
5 changed files with 31 additions and 4 deletions

View File

@ -41,6 +41,7 @@ package org.jooq;
// ...
import static org.jooq.SQLDialect.POSTGRES;
// ...
// ...
import org.jetbrains.annotations.NotNull;

View File

@ -41,6 +41,7 @@ package org.jooq;
// ...
import static org.jooq.SQLDialect.POSTGRES;
// ...
// ...
import org.jetbrains.annotations.NotNull;

View File

@ -169,6 +169,7 @@ final class Keywords {
static final Keyword K_EXECUTE_BLOCK = keyword("execute block");
static final Keyword K_EXECUTE_IMMEDIATE = keyword("execute immediate");
static final Keyword K_EXECUTE_STATEMENT = keyword("execute statement");
static final Keyword K_EXIST = keyword("exist");
static final Keyword K_EXISTS = keyword("exists");
static final Keyword K_EXIT = keyword("exit");
static final Keyword K_EXPLICIT = keyword("explicit");
@ -321,6 +322,7 @@ final class Keywords {
static final Keyword K_PROCEDURE = keyword("procedure");
static final Keyword K_PUBLIC = keyword("public");
static final Keyword K_QUALIFY = keyword("qualify");
static final Keyword K_QUERY = keyword("query");
static final Keyword K_RAISE = keyword("raise");
static final Keyword K_RAISERROR = keyword("raiserror");
static final Keyword K_RAW = keyword("raw");

View File

@ -37,6 +37,9 @@
*/
package org.jooq.impl;
import static org.jooq.conf.ParamType.INLINED;
import static org.jooq.impl.Keywords.K_EXIST;
import static org.jooq.impl.Keywords.K_EXISTS;
import static org.jooq.impl.Keywords.K_XMLEXISTS;
import static org.jooq.impl.QOM.XMLPassingMechanism.BY_REF;
import static org.jooq.impl.QOM.XMLPassingMechanism.BY_VALUE;
@ -55,6 +58,7 @@ import org.jooq.QueryPart;
// ...
import org.jooq.XML;
import org.jooq.XMLExistsPassingStep;
import org.jooq.conf.ParamType;
import org.jooq.impl.QOM.UNotYetImplemented;
import org.jooq.impl.QOM.XMLPassingMechanism;
@ -116,10 +120,20 @@ final class XMLExists extends AbstractCondition implements XMLExistsPassingStep,
@Override
public final void accept(Context<?> ctx) {
ctx.visit(K_XMLEXISTS).sqlIndentStart('(');
acceptXPath(ctx, xpath);
acceptPassing(ctx, passing, passingMechanism);
ctx.sqlIndentEnd(')');
switch (ctx.family()) {
default:
ctx.visit(K_XMLEXISTS).sqlIndentStart('(');
acceptXPath(ctx, xpath);
acceptPassing(ctx, passing, passingMechanism);
ctx.sqlIndentEnd(')');
break;
}
}
// -------------------------------------------------------------------------

View File

@ -38,10 +38,13 @@
package org.jooq.impl;
// ...
import static org.jooq.conf.ParamType.INLINED;
import static org.jooq.impl.DSL.select;
import static org.jooq.impl.DSL.unnest;
import static org.jooq.impl.DSL.xmlagg;
import static org.jooq.impl.Keywords.K_CONTENT;
import static org.jooq.impl.Keywords.K_EXISTS;
import static org.jooq.impl.Keywords.K_QUERY;
import static org.jooq.impl.Keywords.K_RETURNING;
import static org.jooq.impl.Names.N_XMLQUERY;
import static org.jooq.impl.QOM.XMLPassingMechanism.BY_REF;
@ -139,6 +142,12 @@ final class XMLQuery extends AbstractField<XML> implements XMLQueryPassingStep,
break;
default:
ctx.visit(N_XMLQUERY).sqlIndentStart('(');
acceptXPath(ctx, xpath);