[jOOQ/jOOQ#16227] Add JSON_ARRAY_LENGTH() function support

Support also:

- MariaDB
- MySQL
- Oracle
- SQL Server
- SQLite
This commit is contained in:
Lukas Eder 2024-02-07 15:31:35 +01:00
parent 35aa5fb38d
commit 1e31cbd88a
4 changed files with 81 additions and 6 deletions

View File

@ -23320,7 +23320,7 @@ public class DSL {
* @param field is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ POSTGRES, YUGABYTEDB })
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<Integer> jsonArrayLength(JSON field) {
return new JSONArrayLength(Tools.field(field));
}
@ -23331,7 +23331,7 @@ public class DSL {
* Calculate the length of a JSON array.
*/
@NotNull
@Support({ POSTGRES, YUGABYTEDB })
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<Integer> jsonArrayLength(Field<JSON> field) {
return new JSONArrayLength(field);
}
@ -23344,7 +23344,7 @@ public class DSL {
* @param field is wrapped as {@link DSL#val(Object)}.
*/
@NotNull
@Support({ POSTGRES, YUGABYTEDB })
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<Integer> jsonbArrayLength(JSONB field) {
return new JSONBArrayLength(Tools.field(field));
}
@ -23355,7 +23355,7 @@ public class DSL {
* Calculate the length of a JSONB array.
*/
@NotNull
@Support({ POSTGRES, YUGABYTEDB })
@Support({ MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB })
public static Field<Integer> jsonbArrayLength(Field<JSONB> field) {
return new JSONBArrayLength(field);
}

View File

@ -91,7 +91,29 @@ implements
@Override
final boolean parenthesised(Context<?> ctx) {
return true;
switch (ctx.family()) {
case MARIADB:
case MYSQL:
return true;
case POSTGRES:
case SQLITE:
case YUGABYTEDB:
return true;
default:
return true;
}
}
@Override
@ -105,7 +127,23 @@ implements
case MARIADB:
case MYSQL:
ctx.visit(function(N_JSON_LENGTH, getDataType(), field));
break;
case POSTGRES:
case SQLITE:
case YUGABYTEDB:
ctx.visit(function(N_JSON_ARRAY_LENGTH, getDataType(), field));
break;

View File

@ -91,7 +91,28 @@ implements
@Override
final boolean parenthesised(Context<?> ctx) {
return true;
switch (ctx.family()) {
case MARIADB:
case MYSQL:
return true;
case POSTGRES:
case YUGABYTEDB:
return true;
default:
return true;
}
}
@Override
@ -105,6 +126,21 @@ implements
case MARIADB:
case MYSQL:
ctx.visit(function(N_JSON_LENGTH, getDataType(), field));
break;
case POSTGRES:
case YUGABYTEDB:
ctx.visit(function(N_JSONB_ARRAY_LENGTH, getDataType(), field));

View File

@ -451,6 +451,7 @@ final class Names {
static final Name N_JSON_GET_ELEMENT_AS_TEXT = systemName("json_get_element_as_text");
static final Name N_JSON_INSERT = systemName("json_insert");
static final Name N_JSON_KEYS = systemName("json_keys");
static final Name N_JSON_LENGTH = systemName("json_length");
static final Name N_JSON_MODIFY = systemName("json_modify");
static final Name N_JSON_OBJECT = systemName("json_object");
static final Name N_JSON_REMOVE = systemName("json_remove");