Skip to content

Commit 57e6504

Browse files
author
David Hayes
committed
Add support for multiple Trino JSON functions
Adding support for clauses in JSON Functions. Fixes #2368 Before: Result "net.sf.jsqlparser.benchmark.JSQLParserBenchmark.parseSQLStatements": 33.555 ±(99.9%) 2.650 ms/op [Average] (min, avg, max) = (31.657, 33.555, 37.077), stdev = 2.479 CI (99.9%): [30.905, 36.205] (assumes normal distribution) After: Result "net.sf.jsqlparser.benchmark.JSQLParserBenchmark.parseSQLStatements": 36.242 ±(99.9%) 1.573 ms/op [Average] (min, avg, max) = (33.253, 36.242, 38.801), stdev = 2.100 CI (99.9%): [34.669, 37.815] (assumes normal distribution)
1 parent d61020c commit 57e6504

File tree

15 files changed

+2532
-46
lines changed

15 files changed

+2532
-46
lines changed

src/main/java/net/sf/jsqlparser/expression/ExpressionVisitor.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -658,6 +658,14 @@ default void visit(JsonFunction jsonFunction) {
658658
this.visit(jsonFunction, null);
659659
}
660660

661+
default <S> T visit(JsonTableFunction jsonTableFunction, S context) {
662+
return visit((Function) jsonTableFunction, context);
663+
}
664+
665+
default void visit(JsonTableFunction jsonTableFunction) {
666+
this.visit(jsonTableFunction, null);
667+
}
668+
661669
<S> T visit(ConnectByRootOperator connectByRootOperator, S context);
662670

663671
default void visit(ConnectByRootOperator connectByRootOperator) {

src/main/java/net/sf/jsqlparser/expression/ExpressionVisitorAdapter.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -729,12 +729,40 @@ public <S> T visit(JsonAggregateFunction jsonAggregateFunction, S context) {
729729
@Override
730730
public <S> T visit(JsonFunction jsonFunction, S context) {
731731
ArrayList<Expression> subExpressions = new ArrayList<>();
732+
for (JsonKeyValuePair keyValuePair : jsonFunction.getKeyValuePairs()) {
733+
if (keyValuePair.getKey() instanceof Expression) {
734+
subExpressions.add((Expression) keyValuePair.getKey());
735+
}
736+
if (keyValuePair.getValue() instanceof Expression) {
737+
subExpressions.add((Expression) keyValuePair.getValue());
738+
}
739+
}
732740
for (JsonFunctionExpression expr : jsonFunction.getExpressions()) {
733741
subExpressions.add(expr.getExpression());
734742
}
743+
if (jsonFunction.getInputExpression() != null) {
744+
subExpressions.add(jsonFunction.getInputExpression().getExpression());
745+
}
746+
if (jsonFunction.getJsonPathExpression() != null) {
747+
subExpressions.add(jsonFunction.getJsonPathExpression());
748+
}
749+
subExpressions.addAll(jsonFunction.getPassingExpressions());
750+
if (jsonFunction.getOnEmptyBehavior() != null
751+
&& jsonFunction.getOnEmptyBehavior().getExpression() != null) {
752+
subExpressions.add(jsonFunction.getOnEmptyBehavior().getExpression());
753+
}
754+
if (jsonFunction.getOnErrorBehavior() != null
755+
&& jsonFunction.getOnErrorBehavior().getExpression() != null) {
756+
subExpressions.add(jsonFunction.getOnErrorBehavior().getExpression());
757+
}
735758
return visitExpressions(jsonFunction, context, subExpressions);
736759
}
737760

761+
@Override
762+
public <S> T visit(JsonTableFunction jsonTableFunction, S context) {
763+
return visitExpressions(jsonTableFunction, context, jsonTableFunction.getAllExpressions());
764+
}
765+
738766
@Override
739767
public <S> T visit(ConnectByRootOperator connectByRootOperator, S context) {
740768
return connectByRootOperator.getColumn().accept(this, context);

0 commit comments

Comments
 (0)