From 1e31cbd88adbacbeb5c9e98d4eacdb1411d840e6 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 7 Feb 2024 15:31:35 +0100 Subject: [PATCH] [jOOQ/jOOQ#16227] Add JSON_ARRAY_LENGTH() function support Support also: - MariaDB - MySQL - Oracle - SQL Server - SQLite --- jOOQ/src/main/java/org/jooq/impl/DSL.java | 8 ++-- .../java/org/jooq/impl/JSONArrayLength.java | 40 ++++++++++++++++++- .../java/org/jooq/impl/JSONBArrayLength.java | 38 +++++++++++++++++- jOOQ/src/main/java/org/jooq/impl/Names.java | 1 + 4 files changed, 81 insertions(+), 6 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java index c149d2127d..8081e8776f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DSL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java @@ -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 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 jsonArrayLength(Field 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 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 jsonbArrayLength(Field field) { return new JSONBArrayLength(field); } diff --git a/jOOQ/src/main/java/org/jooq/impl/JSONArrayLength.java b/jOOQ/src/main/java/org/jooq/impl/JSONArrayLength.java index 17b91cbad1..6fe81e76b4 100644 --- a/jOOQ/src/main/java/org/jooq/impl/JSONArrayLength.java +++ b/jOOQ/src/main/java/org/jooq/impl/JSONArrayLength.java @@ -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; diff --git a/jOOQ/src/main/java/org/jooq/impl/JSONBArrayLength.java b/jOOQ/src/main/java/org/jooq/impl/JSONBArrayLength.java index aeacb247b4..eb5a3bd6b2 100644 --- a/jOOQ/src/main/java/org/jooq/impl/JSONBArrayLength.java +++ b/jOOQ/src/main/java/org/jooq/impl/JSONBArrayLength.java @@ -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)); diff --git a/jOOQ/src/main/java/org/jooq/impl/Names.java b/jOOQ/src/main/java/org/jooq/impl/Names.java index ff5b464120..4a37254ca9 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Names.java +++ b/jOOQ/src/main/java/org/jooq/impl/Names.java @@ -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");