[jOOQ/jOOQ#19206] Support parsing multi dimensional array simplified syntaxes

This commit is contained in:
Lukas Eder 2025-10-13 12:07:20 +02:00
parent 8afb2a5516
commit 38aa42ad37

View File

@ -9175,7 +9175,7 @@ final class DefaultParseContext extends AbstractParseContext implements ParseCon
else if (parseFunctionNameIf("ASCII_CHAR"))
return chr((Field) parseFieldParenthesised());
else if ((field = parseArrayValueConstructorIf()) != null)
else if ((field = parseArrayValueConstructorIf(true)) != null)
return field;
else if (parseFunctionNameIf("ADD_YEARS"))
@ -11153,8 +11153,15 @@ final class DefaultParseContext extends AbstractParseContext implements ParseCon
return key(key).value(parseField());
}
private final Field<?> parseArrayValueConstructorIf() {
if (parseKeywordIf("ARRAY")) {
private final Field<?> parseArrayValueConstructorOrField() {
if (peek('['))
return parseArrayValueConstructorIf(false);
else
return parseField();
}
private final Field<?> parseArrayValueConstructorIf(boolean requireArrayKeyword) {
if (requireArrayKeyword |= parseKeywordIf("ARRAY") || !requireArrayKeyword) {
if (parseIf('[')) {
List<Field<?>> fields;
@ -11162,20 +11169,20 @@ final class DefaultParseContext extends AbstractParseContext implements ParseCon
fields = emptyList();
}
else {
fields = parseList(',', c -> c.parseField());
fields = parseList(',', c -> parseArrayValueConstructorOrField());
parse(']');
}
// Prevent "wrong" javac method bind
return DSL.array((Collection) fields);
}
else if (parseIf('(')) {
else if (requireArrayKeyword && parseIf('(')) {
SelectQueryImpl select = parseWithOrSelect(1);
parse(')');
return DSL.array(select);
}
else
else if (requireArrayKeyword)
throw expected("[", "(");
}