[jOOQ/jOOQ#7539] Support for SQLDialect.CLICKHOUSE - WIP

This commit is contained in:
Lukas Eder 2024-03-12 09:19:40 +01:00
parent 423069a6ce
commit 73ccac60c4
28 changed files with 195 additions and 90 deletions

View File

@ -75,7 +75,7 @@ public interface JSONArrayNullStep<T> extends JSONArrayReturningStep<T> {
* <p>
* Include <code>NULL</code> values in output JSON.
*/
@Support({ H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@NotNull @CheckReturnValue
JSONArrayReturningStep<T> nullOnNull();

View File

@ -73,7 +73,7 @@ public interface JSONArrayReturningStep<T> extends Field<T> {
/**
* Add the <code>RETURNING</code> clause to the <code>JSON ARRAY</code> function.
*/
@Support({ H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@NotNull @CheckReturnValue
Field<T> returning(DataType<?> returning);
}

View File

@ -75,7 +75,7 @@ public interface JSONObjectNullStep<T> extends JSONObjectReturningStep<T> {
* <p>
* Include <code>NULL</code> values in output JSON.
*/
@Support({ H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@NotNull @CheckReturnValue
JSONObjectReturningStep<T> nullOnNull();

View File

@ -73,7 +73,7 @@ public interface JSONObjectReturningStep<T> extends Field<T> {
/**
* Add the <code>RETURNING</code> clause to the <code>JSON OBJECT</code> function.
*/
@Support({ H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@NotNull @CheckReturnValue
Field<T> returning(DataType<?> returning);
}

View File

@ -22924,7 +22924,7 @@ public class DSL {
* The <code>JSON_ARRAY</code> function.
*/
@NotNull
@Support({ H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static JSONArrayNullStep<JSON> jsonArray(Field<?>... fields) {
return new JSONArray(SQLDataType.JSON, Arrays.asList(fields));
}
@ -22933,7 +22933,7 @@ public class DSL {
* The <code>JSON_ARRAY</code> function.
*/
@NotNull
@Support({ H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static JSONArrayNullStep<JSON> jsonArray(Collection<? extends Field<?>> fields) {
return new JSONArray(SQLDataType.JSON, new QueryPartList<>(fields));
}
@ -22942,7 +22942,7 @@ public class DSL {
* The <code>JSONB_ARRAY</code> function.
*/
@NotNull
@Support({ H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static JSONArrayNullStep<JSONB> jsonbArray(Field<?>... fields) {
return new JSONArray(SQLDataType.JSONB, Arrays.asList(fields));
}
@ -22951,7 +22951,7 @@ public class DSL {
* The <code>JSONB_ARRAY</code> function.
*/
@NotNull
@Support({ H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static JSONArrayNullStep<JSONB> jsonbArray(Collection<? extends Field<?>> fields) {
return new JSONArray(SQLDataType.JSONB, new QueryPartList<>(fields));
}
@ -22960,7 +22960,7 @@ public class DSL {
* The <code>JSON_OBJECT</code> function.
*/
@NotNull
@Support({ H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static JSONObjectNullStep<JSON> jsonObject(JSONEntry<?>... entries) {
return new JSONObject(SQLDataType.JSON, Arrays.asList(entries));
}
@ -22969,7 +22969,7 @@ public class DSL {
* The <code>JSON_OBJECT</code> function.
*/
@NotNull
@Support({ H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static JSONObjectNullStep<JSON> jsonObject(Collection<? extends JSONEntry<?>> entries) {
return new JSONObject(SQLDataType.JSON, new QueryPartList<>(entries));
}
@ -22978,7 +22978,7 @@ public class DSL {
* The <code>JSONB_OBJECT</code> function.
*/
@NotNull
@Support({ H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static JSONObjectNullStep<JSONB> jsonbObject(JSONEntry<?>... entries) {
return new JSONObject(SQLDataType.JSONB, Arrays.asList(entries));
}
@ -22987,7 +22987,7 @@ public class DSL {
* The <code>JSONB_OBJECT</code> function.
*/
@NotNull
@Support({ H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static JSONObjectNullStep<JSONB> jsonbObject(Collection<? extends JSONEntry<?>> entries) {
return new JSONObject(SQLDataType.JSONB, new QueryPartList<>(entries));
}
@ -23001,7 +23001,7 @@ public class DSL {
* @param index is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static Field<JSON> jsonGetElement(JSON field, int index) {
return new JSONGetElement(Tools.field(field), Tools.field(index));
}
@ -23014,7 +23014,7 @@ public class DSL {
* @param field is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static Field<JSON> jsonGetElement(JSON field, Field<Integer> index) {
return new JSONGetElement(Tools.field(field), index);
}
@ -23027,7 +23027,7 @@ public class DSL {
* @param index is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static Field<JSON> jsonGetElement(Field<JSON> field, int index) {
return new JSONGetElement(field, Tools.field(index));
}
@ -23038,7 +23038,7 @@ public class DSL {
* Access an array element from a JSON array expression.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static Field<JSON> jsonGetElement(Field<JSON> field, Field<Integer> index) {
return new JSONGetElement(field, index);
}
@ -23052,7 +23052,7 @@ public class DSL {
* @param index is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static Field<JSONB> jsonbGetElement(JSONB field, int index) {
return new JSONBGetElement(Tools.field(field), Tools.field(index));
}
@ -23065,7 +23065,7 @@ public class DSL {
* @param field is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static Field<JSONB> jsonbGetElement(JSONB field, Field<Integer> index) {
return new JSONBGetElement(Tools.field(field), index);
}
@ -23078,7 +23078,7 @@ public class DSL {
* @param index is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static Field<JSONB> jsonbGetElement(Field<JSONB> field, int index) {
return new JSONBGetElement(field, Tools.field(index));
}
@ -23089,7 +23089,7 @@ public class DSL {
* Access an array element from a JSONB array expression.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static Field<JSONB> jsonbGetElement(Field<JSONB> field, Field<Integer> index) {
return new JSONBGetElement(field, index);
}
@ -23103,7 +23103,7 @@ public class DSL {
* @param index is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<String> jsonGetElementAsText(JSON field, int index) {
return new JSONGetElementAsText(Tools.field(field), Tools.field(index));
}
@ -23116,7 +23116,7 @@ public class DSL {
* @param field is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<String> jsonGetElementAsText(JSON field, Field<Integer> index) {
return new JSONGetElementAsText(Tools.field(field), index);
}
@ -23129,7 +23129,7 @@ public class DSL {
* @param index is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<String> jsonGetElementAsText(Field<JSON> field, int index) {
return new JSONGetElementAsText(field, Tools.field(index));
}
@ -23140,7 +23140,7 @@ public class DSL {
* Access an array element from a JSON array expression and return it as a string.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<String> jsonGetElementAsText(Field<JSON> field, Field<Integer> index) {
return new JSONGetElementAsText(field, index);
}
@ -23154,7 +23154,7 @@ public class DSL {
* @param index is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<String> jsonbGetElementAsText(JSONB field, int index) {
return new JSONBGetElementAsText(Tools.field(field), Tools.field(index));
}
@ -23167,7 +23167,7 @@ public class DSL {
* @param field is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<String> jsonbGetElementAsText(JSONB field, Field<Integer> index) {
return new JSONBGetElementAsText(Tools.field(field), index);
}
@ -23180,7 +23180,7 @@ public class DSL {
* @param index is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<String> jsonbGetElementAsText(Field<JSONB> field, int index) {
return new JSONBGetElementAsText(field, Tools.field(index));
}
@ -23191,7 +23191,7 @@ public class DSL {
* Access an array element from a JSONB array expression and return it as a string.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<String> jsonbGetElementAsText(Field<JSONB> field, Field<Integer> index) {
return new JSONBGetElementAsText(field, index);
}
@ -23205,7 +23205,7 @@ public class DSL {
* @param attribute is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static Field<JSON> jsonGetAttribute(JSON field, @Stringly.Param String attribute) {
return new JSONGetAttribute(Tools.field(field), Tools.field(attribute));
}
@ -23218,7 +23218,7 @@ public class DSL {
* @param field is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static Field<JSON> jsonGetAttribute(JSON field, Field<String> attribute) {
return new JSONGetAttribute(Tools.field(field), attribute);
}
@ -23231,7 +23231,7 @@ public class DSL {
* @param attribute is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static Field<JSON> jsonGetAttribute(Field<JSON> field, @Stringly.Param String attribute) {
return new JSONGetAttribute(field, Tools.field(attribute));
}
@ -23242,7 +23242,7 @@ public class DSL {
* Access an object attribute value from a JSON object expression.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static Field<JSON> jsonGetAttribute(Field<JSON> field, Field<String> attribute) {
return new JSONGetAttribute(field, attribute);
}
@ -23256,7 +23256,7 @@ public class DSL {
* @param attribute is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static Field<JSONB> jsonbGetAttribute(JSONB field, @Stringly.Param String attribute) {
return new JSONBGetAttribute(Tools.field(field), Tools.field(attribute));
}
@ -23269,7 +23269,7 @@ public class DSL {
* @param field is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static Field<JSONB> jsonbGetAttribute(JSONB field, Field<String> attribute) {
return new JSONBGetAttribute(Tools.field(field), attribute);
}
@ -23282,7 +23282,7 @@ public class DSL {
* @param attribute is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static Field<JSONB> jsonbGetAttribute(Field<JSONB> field, @Stringly.Param String attribute) {
return new JSONBGetAttribute(field, Tools.field(attribute));
}
@ -23293,7 +23293,7 @@ public class DSL {
* Access an object attribute value from a JSONB object expression.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static Field<JSONB> jsonbGetAttribute(Field<JSONB> field, Field<String> attribute) {
return new JSONBGetAttribute(field, attribute);
}
@ -23307,7 +23307,7 @@ public class DSL {
* @param attribute is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<String> jsonGetAttributeAsText(JSON field, @Stringly.Param String attribute) {
return new JSONGetAttributeAsText(Tools.field(field), Tools.field(attribute));
}
@ -23320,7 +23320,7 @@ public class DSL {
* @param field is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<String> jsonGetAttributeAsText(JSON field, Field<String> attribute) {
return new JSONGetAttributeAsText(Tools.field(field), attribute);
}
@ -23333,7 +23333,7 @@ public class DSL {
* @param attribute is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<String> jsonGetAttributeAsText(Field<JSON> field, @Stringly.Param String attribute) {
return new JSONGetAttributeAsText(field, Tools.field(attribute));
}
@ -23344,7 +23344,7 @@ public class DSL {
* Access an object attribute value from a JSON object expression and return it as string.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<String> jsonGetAttributeAsText(Field<JSON> field, Field<String> attribute) {
return new JSONGetAttributeAsText(field, attribute);
}
@ -23359,7 +23359,7 @@ public class DSL {
* @param attribute is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<String> jsonbGetAttributeAsText(JSONB field, @Stringly.Param String attribute) {
return new JSONBGetAttributeAsText(Tools.field(field), Tools.field(attribute));
}
@ -23373,7 +23373,7 @@ public class DSL {
* @param field is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<String> jsonbGetAttributeAsText(JSONB field, Field<String> attribute) {
return new JSONBGetAttributeAsText(Tools.field(field), attribute);
}
@ -23387,7 +23387,7 @@ public class DSL {
* @param attribute is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<String> jsonbGetAttributeAsText(Field<JSONB> field, @Stringly.Param String attribute) {
return new JSONBGetAttributeAsText(field, Tools.field(attribute));
}
@ -23399,7 +23399,7 @@ public class DSL {
* string.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<String> jsonbGetAttributeAsText(Field<JSONB> field, Field<String> attribute) {
return new JSONBGetAttributeAsText(field, attribute);
}
@ -23412,7 +23412,7 @@ public class DSL {
* @param field is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<Integer> jsonArrayLength(JSON field) {
return new JSONArrayLength(Tools.field(field));
}
@ -23423,7 +23423,7 @@ public class DSL {
* Calculate the length of a JSON array.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<Integer> jsonArrayLength(Field<JSON> field) {
return new JSONArrayLength(field);
}
@ -23436,7 +23436,7 @@ public class DSL {
* @param field is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<Integer> jsonbArrayLength(JSONB field) {
return new JSONBArrayLength(Tools.field(field));
}
@ -23447,7 +23447,7 @@ public class DSL {
* Calculate the length of a JSONB array.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<Integer> jsonbArrayLength(Field<JSONB> field) {
return new JSONBArrayLength(field);
}
@ -23460,7 +23460,7 @@ public class DSL {
* @param field is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static Field<JSON> jsonKeys(JSON field) {
return new JSONKeys(Tools.field(field));
}
@ -23471,7 +23471,7 @@ public class DSL {
* Retrieve all keys from a JSON object as an array of strings.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static Field<JSON> jsonKeys(Field<JSON> field) {
return new JSONKeys(field);
}
@ -23484,7 +23484,7 @@ public class DSL {
* @param field is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static Field<JSONB> jsonbKeys(JSONB field) {
return new JSONBKeys(Tools.field(field));
}
@ -23495,7 +23495,7 @@ public class DSL {
* Retrieve all keys from a JSONB object as an array of strings.
*/
@NotNull
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static Field<JSONB> jsonbKeys(Field<JSONB> field) {
return new JSONBKeys(field);
}
@ -32057,7 +32057,7 @@ public class DSL {
* The <code>ntile([number]) over ([analytic clause])</code> function.
*/
@NotNull
@Support({ CUBRID, DUCKDB, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, CUBRID, DUCKDB, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static WindowOverStep<Integer> ntile(int number) {
return new Ntile(inline(number));
}
@ -32066,7 +32066,7 @@ public class DSL {
* The <code>ntile([number]) over ([analytic clause])</code> function.
*/
@NotNull
@Support({ CUBRID, DUCKDB, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
@Support({ CLICKHOUSE, CUBRID, DUCKDB, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
public static WindowOverStep<Integer> ntile(Field<Integer> number) {
return new Ntile(number);
}

View File

@ -365,6 +365,7 @@ implements
moreWhere = trueCondition();
Condition where = DSL.and(getWhere(), moreWhere);
boolean noQualifyInWhere = NO_SUPPORT_QUALIFY_IN_WHERE.contains(ctx.dialect());
if (limit != null && NO_SUPPORT_LIMIT.contains(ctx.dialect()) || !orderBy.isEmpty() && NO_SUPPORT_ORDER_BY_LIMIT.contains(ctx.dialect())) {
Field<?>[] keyFields =
@ -379,10 +380,16 @@ implements
.visit(K_WHERE).sql(' ');
ctx.paramTypeIf(ParamType.INLINED, noSupportParametersInWhere, c -> {
if (noQualifyInWhere)
ctx.data(DATA_UNQUALIFY_LOCAL_SCOPE, true);
if (keyFields.length == 1)
c.visit(keyFields[0].in(select((Field) keyFields[0]).from(table()).where(where).orderBy(orderBy).limit(limit)));
else
c.visit(row(keyFields).in(select(keyFields).from(table()).where(where).orderBy(orderBy).limit(limit)));
if (noQualifyInWhere)
ctx.data(DATA_UNQUALIFY_LOCAL_SCOPE, false);
});
ctx.end(DELETE_WHERE);
@ -394,10 +401,13 @@ implements
ctx.paramTypeIf(ParamType.INLINED, noSupportParametersInWhere, c -> {
c.formatSeparator().visit(K_WHERE).sql(' ');
if (NO_SUPPORT_QUALIFY_IN_WHERE.contains(ctx.dialect()))
ctx.data(DATA_UNQUALIFY_LOCAL_SCOPE, true, c1 -> c1.visit(where));
else
ctx.visit(where);
if (noQualifyInWhere)
ctx.data(DATA_UNQUALIFY_LOCAL_SCOPE, true);
ctx.visit(where);
if (noQualifyInWhere)
ctx.data(DATA_UNQUALIFY_LOCAL_SCOPE, false);
});
ctx.end(DELETE_WHERE);

View File

@ -67,6 +67,7 @@ final class Iif<T> extends AbstractField<T> implements QOM.Iif<T> {
public final void accept(Context<?> ctx) {
switch (ctx.family()) {
case CLICKHOUSE:
case MARIADB:
case MYSQL:

View File

@ -206,6 +206,17 @@ implements
case CLICKHOUSE: {
// [#7539] ARRAY types can't mix data types, so use TUPLE for degrees > 1
if (fields.size() > 1)
ctx.visit(function(N_toJSONString, getDataType(), function(N_TUPLE, OTHER, fields.toArray(EMPTY_FIELD))));
else
ctx.visit(function(N_toJSONString, getDataType(), array(fields)));
break;
}
case TRINO: {
// [#11485] While JSON_OBJECT is supported in Trino, it seems there are a few show stopping bugs, including:

View File

@ -104,11 +104,7 @@ implements
case MYSQL:
return true;
case POSTGRES:
case SQLITE:
case YUGABYTEDB:
case CLICKHOUSE:
return true;
default:
@ -140,12 +136,8 @@ implements
ctx.visit(function(N_JSON_LENGTH, getDataType(), field));
break;
case POSTGRES:
case SQLITE:
case YUGABYTEDB:
ctx.visit(function(N_JSON_ARRAY_LENGTH, getDataType(), field));
case CLICKHOUSE:
ctx.visit(function(N_JSONArrayLength, getDataType(), field));
break;
default:

View File

@ -107,10 +107,7 @@ implements
case SQLITE:
return true;
case POSTGRES:
case YUGABYTEDB:
case CLICKHOUSE:
return true;
default:
@ -146,11 +143,8 @@ implements
ctx.visit(function(N_JSON_ARRAY_LENGTH, getDataType(), field));
break;
case POSTGRES:
case YUGABYTEDB:
ctx.visit(function(N_JSONB_ARRAY_LENGTH, getDataType(), field));
case CLICKHOUSE:
ctx.visit(function(N_JSONArrayLength, getDataType(), field));
break;
default:

View File

@ -115,6 +115,9 @@ implements
case TRINO:
return false;
case CLICKHOUSE:
return false;
default:
return false;
}
@ -166,6 +169,10 @@ implements
ctx.visit(function(N_JSON_EXTRACT, JSONB, field, inline("$.").concat(attribute)));
break;
case CLICKHOUSE:
ctx.visit(function(N_JSONExtractRaw, JSONB, field, isub(attribute, one())));
break;
default:
ctx.sql('(').visit(field).sql("->").visit(attribute).sql(')');
break;

View File

@ -138,6 +138,10 @@ implements
ctx.visit(function(N_JSON_EXTRACT, JSONB, field, inline("$.").concat(attribute)));
break;
case CLICKHOUSE:
ctx.visit(function(N_JSONExtractString, JSONB, field, isub(attribute, one())));
break;
default:
ctx.sql('(').visit(field).sql("->>").visit(attribute).sql(')');
break;

View File

@ -115,6 +115,9 @@ implements
case TRINO:
return false;
case CLICKHOUSE:
return false;
default:
return false;
}
@ -161,6 +164,10 @@ implements
ctx.visit(function(N_JSON_EXTRACT, JSONB, field, inline("$[").concat(index).concat(inline("]"))));
break;
case CLICKHOUSE:
ctx.visit(function(N_JSONExtractRaw, JSONB, field, isub(index, one())));
break;
default:
ctx.sql('(').visit(field).sql("->").visit(index).sql(')');
break;

View File

@ -136,6 +136,10 @@ implements
ctx.visit(function(N_JSON_EXTRACT, JSONB, field, inline("$[").concat(index).concat(inline("]"))));
break;
case CLICKHOUSE:
ctx.visit(function(N_JSONExtractRaw, JSONB, field, isub(index, one())));
break;
default:
ctx.sql('(').visit(field).sql("->>").visit(index).sql(')');
break;

View File

@ -111,6 +111,9 @@ implements
case SQLITE:
return false;
case CLICKHOUSE:
return true;
case TRINO:
return false;
@ -155,6 +158,10 @@ implements
ctx.visit(DSL.field(select(jsonbArrayAgg(DSL.field(name("key")))).from("json_each({0})", field)));
break;
case CLICKHOUSE:
ctx.visit(function(N_JSONExtractKeys, getDataType(), field));
break;
case TRINO:
ctx.visit(DSL.cast(function(N_MAP_KEYS, OTHER, DSL.field("cast({0} as map(varchar, json))", OTHER, field)), JSON));
break;

View File

@ -115,6 +115,9 @@ implements
case TRINO:
return false;
case CLICKHOUSE:
return false;
default:
return false;
}
@ -166,6 +169,10 @@ implements
ctx.visit(function(N_JSON_EXTRACT, JSON, field, inline("$.").concat(attribute)));
break;
case CLICKHOUSE:
ctx.visit(function(N_JSONExtractRaw, JSON, field, isub(attribute, one())));
break;
default:
ctx.sql('(').visit(field).sql("->").visit(attribute).sql(')');
break;

View File

@ -139,6 +139,10 @@ implements
ctx.visit(function(N_JSON_EXTRACT, JSON, field, inline("$.").concat(attribute)));
break;
case CLICKHOUSE:
ctx.visit(function(N_JSONExtractString, JSON, field, isub(attribute, one())));
break;
default:
ctx.sql('(').visit(field).sql("->>").visit(attribute).sql(')');
break;

View File

@ -115,6 +115,9 @@ implements
case TRINO:
return false;
case CLICKHOUSE:
return false;
default:
return false;
}
@ -161,6 +164,10 @@ implements
ctx.visit(function(N_JSON_EXTRACT, JSON, field, inline("$[").concat(index).concat(inline("]"))));
break;
case CLICKHOUSE:
ctx.visit(function(N_JSONExtractRaw, JSON, field, isub(index, one())));
break;
default:
ctx.sql('(').visit(field).sql("->").visit(index).sql(')');
break;

View File

@ -136,6 +136,10 @@ implements
ctx.visit(function(N_JSON_EXTRACT, JSON, field, inline("$[").concat(index).concat(inline("]"))));
break;
case CLICKHOUSE:
ctx.visit(function(N_JSONExtractString, JSON, field, isub(index, one())));
break;
default:
ctx.sql('(').visit(field).sql("->>").visit(index).sql(')');
break;

View File

@ -109,6 +109,9 @@ implements
case SQLITE:
return false;
case CLICKHOUSE:
return true;
case TRINO:
return false;
@ -149,6 +152,10 @@ implements
ctx.visit(DSL.field(select(jsonArrayAgg(DSL.field(name("key")))).from("json_each({0})", field)));
break;
case CLICKHOUSE:
ctx.visit(function(N_JSONExtractKeys, getDataType(), field));
break;
case TRINO:
ctx.visit(DSL.cast(function(N_MAP_KEYS, OTHER, DSL.field("cast({0} as map(varchar, json))", OTHER, field)), JSON));
break;

View File

@ -245,6 +245,13 @@ implements
break;
}
case CLICKHOUSE: {
ctx.visit(function(N_toJSONString, getDataType(), array((List<Field<?>>)
flatMap(entries, e -> Arrays.<Field<?>>asList(e.key(), e.value()))
)));
break;
}
case TRINO: {
// [#11485] While JSON_OBJECT is supported in Trino, it seems there are a few show stopping bugs, including:
// https://github.com/trinodb/trino/issues/16522

View File

@ -183,8 +183,19 @@ final class Limit extends AbstractQueryPart implements UTransient {
break;
}
case CLICKHOUSE: {
// Use standard OFFSET .. FETCH only with WITH TIES to work around
// https://github.com/ClickHouse/ClickHouse/issues/61195
if (!withTies() && !percent())
acceptDefault(ctx, castMode);
else
acceptStandard(ctx, castMode);
break;
}
case CLICKHOUSE:
case DERBY:
case TRINO: {
acceptStandard(ctx, castMode);

View File

@ -46,6 +46,7 @@ import static java.util.Collections.emptyList;
// ...
// ...
// ...
import static org.jooq.SQLDialect.CLICKHOUSE;
// ...
// ...
import static org.jooq.SQLDialect.DERBY;
@ -152,7 +153,7 @@ import org.jooq.tools.StringUtils;
final class MetaImpl extends AbstractMeta {
private static final JooqLogger log = JooqLogger.getLogger(MetaImpl.class);
private static final Set<SQLDialect> INVERSE_SCHEMA_CATALOG = SQLDialect.supportedBy(MARIADB, MYSQL);
private static final Set<SQLDialect> INVERSE_SCHEMA_CATALOG = SQLDialect.supportedBy(CLICKHOUSE, MARIADB, MYSQL);
private static final Set<SQLDialect> CURRENT_TIMESTAMP_COLUMN_DEFAULT = SQLDialect.supportedBy(MARIADB, MYSQL);
private static final Set<SQLDialect> EXPRESSION_COLUMN_DEFAULT = SQLDialect.supportedBy(DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, POSTGRES, SQLITE, YUGABYTEDB);
private static final Set<SQLDialect> NO_SUPPORT_SCHEMAS = SQLDialect.supportedBy(FIREBIRD, SQLITE);

View File

@ -295,11 +295,13 @@ final class Names {
static final Name N_TIMESTAMPSUB = systemName("timestampsub");
static final Name N_TIMESTAMP_DIFF = systemName("timestamp_diff");
static final Name N_TIMESTAMP_SUB = systemName("timestamp_sub");
static final Name N_toJSONString = systemName("toJSONString");
static final Name N_TO_CLOB = systemName("to_clob");
static final Name N_TO_NUMBER = systemName("to_number");
static final Name N_TO_VARIANT = systemName("to_variant");
static final Name N_TRUNCATE = systemName("truncate");
static final Name N_TRUNCNUM = systemName("truncnum");
static final Name N_TUPLE = systemName("tuple");
static final Name N_UNNEST = systemName("unnest");
static final Name N_USER = systemName("user");
static final Name N_UUID_TO_CHAR = systemName("uuid_to_char");
@ -453,6 +455,7 @@ final class Names {
static final Name N_INSERTING = systemName("inserting");
static final Name N_INSTR = systemName("instr");
static final Name N_ISJSON = systemName("isjson");
static final Name N_JSONArrayLength = systemName("JSONArrayLength");
static final Name N_JSONB_ARRAY = systemName("jsonb_array");
static final Name N_JSONB_ARRAY_LENGTH = systemName("jsonb_array_length");
static final Name N_JSONB_GET_ATTRIBUTE = systemName("jsonb_get_attribute");
@ -465,6 +468,9 @@ final class Names {
static final Name N_JSONB_REMOVE = systemName("jsonb_remove");
static final Name N_JSONB_REPLACE = systemName("jsonb_replace");
static final Name N_JSONB_SET = systemName("jsonb_set");
static final Name N_JSONExtractKeys = systemName("JSONExtractKeys");
static final Name N_JSONExtractRaw = systemName("JSONExtractRaw");
static final Name N_JSONExtractString = systemName("JSONExtractString");
static final Name N_JSON_ARRAY = systemName("json_array");
static final Name N_JSON_ARRAY_LENGTH = systemName("json_array_length");
static final Name N_JSON_EXTRACT = systemName("json_extract");

View File

@ -9047,9 +9047,9 @@ final class DefaultParseContext extends AbstractScope implements ParseContext {
return field;
else if ((field = parseFieldJSONLiteralIf()) != null)
return field;
else if (parseFunctionNameIf("JSON_ARRAY_LENGTH", "JSON_LENGTH"))
else if (parseFunctionNameIf("JSON_ARRAY_LENGTH", "JSON_LENGTH", "JSONARRAYLENGTH"))
return parseFunctionArgs1(DSL::jsonArrayLength);
else if (parseFunctionNameIf("JSON_KEYS"))
else if (parseFunctionNameIf("JSON_KEYS", "JSONExtractKeys"))
return parseFunctionArgs1(DSL::jsonKeys);
else if (parseFunctionNameIf("JSON_INSERT"))
return parseFunctionArgs3(DSL::jsonInsert);
@ -14308,7 +14308,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext {
if (parseIf("=") || parseKeywordIf("EQ"))
if (parseIf("==") || parseIf("=") || parseKeywordIf("EQ"))
return Comparator.EQUALS;
else if (parseIf("!=") || parseIf("<>") || parseIf("^=") || parseKeywordIf("NE"))
return Comparator.NOT_EQUALS;
@ -14671,7 +14671,9 @@ final class DefaultParseContext extends AbstractScope implements ParseContext {
}
private final boolean peekKeyword(String keyword, boolean updatePosition, boolean peekIntoParens, boolean requireFunction) {
boolean caseSensitive = Character.isLowerCase(keyword.charAt(0));
boolean caseSensitive =
Character.isLowerCase(keyword.charAt(0))
|| Character.isLowerCase(keyword.charAt(keyword.length() - 1));
int length = keyword.length();
int p = position();

View File

@ -42,6 +42,7 @@ import static org.jooq.Comparator.IS_NOT_DISTINCT_FROM;
// ...
// ...
// ...
import static org.jooq.SQLDialect.CLICKHOUSE;
import static org.jooq.SQLDialect.CUBRID;
// ...
import static org.jooq.SQLDialect.DERBY;
@ -86,7 +87,7 @@ import org.jooq.impl.QOM.UNotYetImplemented;
* @author Lukas Eder
*/
final class RowIsDistinctFrom extends AbstractCondition implements UNotYetImplemented {
private static final Set<SQLDialect> EMULATE_DISTINCT = SQLDialect.supportedBy(CUBRID, DERBY);
private static final Set<SQLDialect> EMULATE_DISTINCT = SQLDialect.supportedBy(CLICKHOUSE, CUBRID, DERBY);
// An emulation may be required only for the version where a subquery is used
// E.g. in HSQLDB: https://sourceforge.net/p/hsqldb/bugs/1579/

View File

@ -42,6 +42,7 @@ import static java.util.Arrays.asList;
// ...
// ...
// ...
import static org.jooq.SQLDialect.CLICKHOUSE;
// ...
import static org.jooq.SQLDialect.CUBRID;
// ...
@ -83,7 +84,7 @@ final class RowIsNull extends AbstractCondition implements QOM.RowIsNull {
// Currently not yet supported in SQLite:
// https://www.sqlite.org/rowvalue.html
static final Set<SQLDialect> EMULATE_NULL_ROW = SQLDialect.supportedBy(CUBRID, DERBY, DUCKDB, FIREBIRD, HSQLDB, MARIADB, MYSQL, SQLITE, TRINO);
static final Set<SQLDialect> EMULATE_NULL_ROW = SQLDialect.supportedBy(CLICKHOUSE, CUBRID, DERBY, DUCKDB, FIREBIRD, HSQLDB, MARIADB, MYSQL, SQLITE, TRINO);
private final Row row;

View File

@ -785,6 +785,7 @@ implements
acceptFrom(ctx);
boolean noQualifyInWhere = NO_SUPPORT_QUALIFY_IN_WHERE.contains(ctx.dialect());
if (limit != null && NO_SUPPORT_LIMIT.contains(ctx.dialect()) || !orderBy.isEmpty() && NO_SUPPORT_ORDER_BY_LIMIT.contains(ctx.dialect())) {
Field<?>[] keyFields =
@ -798,11 +799,17 @@ implements
.formatSeparator()
.visit(K_WHERE).sql(' ');
if (noQualifyInWhere)
ctx.data(DATA_UNQUALIFY_LOCAL_SCOPE, true);
if (keyFields.length == 1)
ctx.visit(keyFields[0].in(select((Field) keyFields[0]).from(table()).where(getWhere()).orderBy(orderBy).limit(limit)));
else
ctx.visit(row(keyFields).in(select(keyFields).from(table()).where(getWhere()).orderBy(orderBy).limit(limit)));
if (noQualifyInWhere)
ctx.data(DATA_UNQUALIFY_LOCAL_SCOPE, false);
ctx.end(UPDATE_WHERE);
}
else {
@ -812,10 +819,13 @@ implements
ctx.formatSeparator()
.visit(K_WHERE).sql(' ');
if (NO_SUPPORT_QUALIFY_IN_WHERE.contains(ctx.dialect()))
ctx.data(DATA_UNQUALIFY_LOCAL_SCOPE, true, c -> c.visit(getWhere()));
else
ctx.visit(getWhere());
if (noQualifyInWhere)
ctx.data(DATA_UNQUALIFY_LOCAL_SCOPE, true);
ctx.visit(getWhere());
if (noQualifyInWhere)
ctx.data(DATA_UNQUALIFY_LOCAL_SCOPE, false);
}
else if (REQUIRES_WHERE.contains(ctx.dialect()))
ctx.formatSeparator()