[jOOQ/jOOQ#17785] Revert change for most dialects
The change was introduced because some dialects (BIGQUERY, SQLDATAWAREHOUSE) don't have LIKE .. ESCAPE support, which is a requirement for the historic implementation of CONTAINS, STARTS_WITH, ENDS_WITH. For other dialects, switching to POSITION() is a risk, especially when case insensitive string types are involved, such as PostgreSQL's citext type.
This commit is contained in:
parent
44ef3b2f22
commit
b4486c4209
@ -113,12 +113,6 @@ implements
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
case CLICKHOUSE:
|
||||
@ -134,6 +128,12 @@ implements
|
||||
case TRINO:
|
||||
return false;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
@ -159,7 +159,7 @@ implements
|
||||
else if (value.getDataType().getType() == JSONB.class || content.getDataType().getType() == JSONB.class)
|
||||
ctx.visit(value).sql(" @> ").visit(content);
|
||||
else
|
||||
acceptDefault(ctx);
|
||||
acceptLike(ctx);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -175,13 +175,6 @@ implements
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -196,10 +189,18 @@ implements
|
||||
case MYSQL:
|
||||
case SQLITE:
|
||||
case TRINO: {
|
||||
acceptDefault(ctx);
|
||||
acceptLike(ctx);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
default:
|
||||
ctx.visit(function(N_CONTAINS, BOOLEAN, value, content));
|
||||
break;
|
||||
@ -215,7 +216,11 @@ implements
|
||||
|
||||
|
||||
|
||||
private final void acceptDefault(Context<?> ctx) {
|
||||
private final void acceptLike(Context<?> ctx) {
|
||||
ctx.visit(value.like(DSL.concat(inline("%"), Tools.escapeForLike(content, ctx.configuration()), inline("%")), Tools.ESCAPE));
|
||||
}
|
||||
|
||||
private final void acceptPosition(Context<?> ctx) {
|
||||
ctx.visit(DSL.position(Like.requiresStringCast(value), Like.requiresStringCast(content)).gt(inline(0)));
|
||||
}
|
||||
|
||||
|
||||
@ -108,12 +108,6 @@ implements
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -136,6 +130,10 @@ implements
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
case DUCKDB:
|
||||
return true;
|
||||
|
||||
@ -165,13 +163,6 @@ implements
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -191,9 +182,16 @@ implements
|
||||
case POSTGRES:
|
||||
case SQLITE:
|
||||
case TRINO:
|
||||
case YUGABYTEDB:
|
||||
ctx.visit(DSL.position(Like.requiresStringCast(string), Like.requiresStringCast(suffix)).eq(iadd(isub(Like.requiresStringCast(string).length(), Like.requiresStringCast(suffix).length()), inline(1))));
|
||||
case YUGABYTEDB: {
|
||||
acceptLike(ctx);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -224,6 +222,14 @@ implements
|
||||
|
||||
|
||||
|
||||
private final void acceptLike(Context<?> ctx) {
|
||||
ctx.visit(string.like(DSL.concat(inline("%"), Tools.escapeForLike(suffix, ctx.configuration())), Tools.ESCAPE));
|
||||
}
|
||||
|
||||
private final void acceptPosition(Context<?> ctx) {
|
||||
ctx.visit(DSL.position(Like.requiresStringCast(string), Like.requiresStringCast(suffix)).eq(iadd(isub(Like.requiresStringCast(string).length(), Like.requiresStringCast(suffix).length()), inline(1))));
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// XXX: Query Object Model
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
@ -108,12 +108,6 @@ implements
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -135,6 +129,10 @@ implements
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
case DUCKDB:
|
||||
case TRINO:
|
||||
return true;
|
||||
@ -165,13 +163,6 @@ implements
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -190,9 +181,16 @@ implements
|
||||
case MYSQL:
|
||||
case POSTGRES:
|
||||
case SQLITE:
|
||||
case YUGABYTEDB:
|
||||
ctx.visit(DSL.position(Like.requiresStringCast(string), Like.requiresStringCast(prefix)).eq(inline(1)));
|
||||
case YUGABYTEDB: {
|
||||
acceptLike(ctx);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -224,6 +222,14 @@ implements
|
||||
|
||||
|
||||
|
||||
private final void acceptLike(Context<?> ctx) {
|
||||
ctx.visit(string.like(DSL.concat(Tools.escapeForLike(prefix, ctx.configuration()), inline("%")), Tools.ESCAPE));
|
||||
}
|
||||
|
||||
private final void acceptPosition(Context<?> ctx) {
|
||||
ctx.visit(DSL.position(Like.requiresStringCast(string), Like.requiresStringCast(prefix)).eq(inline(1)));
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// XXX: Query Object Model
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
Loading…
Reference in New Issue
Block a user