Skip to content

Commit d39df7f

Browse files
committed
[chore] Started to add oracle JSON_TABLE features
1 parent 81ccfa6 commit d39df7f

File tree

4 files changed

+254
-325
lines changed

4 files changed

+254
-325
lines changed

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
*/
2828
public class JsonFunction extends ASTNodeAccessImpl implements Expression {
2929
public enum JsonOnResponseBehaviorType {
30-
ERROR, NULL, DEFAULT, EMPTY_ARRAY, EMPTY_OBJECT, TRUE, FALSE, UNKNOWN
30+
ERROR, NULL, DEFAULT, EMPTY, EMPTY_ARRAY, EMPTY_OBJECT, TRUE, FALSE, UNKNOWN
3131
}
3232

3333
public enum JsonWrapperType {
@@ -42,6 +42,10 @@ public enum JsonQuotesType {
4242
KEEP, OMIT
4343
}
4444

45+
public enum ScalarsType {
46+
ALLOW, DISALLOW
47+
}
48+
4549
public static class JsonOnResponseBehavior {
4650
private JsonOnResponseBehaviorType type;
4751
private Expression expression;
@@ -82,6 +86,9 @@ public StringBuilder append(StringBuilder builder) {
8286
case DEFAULT:
8387
builder.append("DEFAULT ").append(expression);
8488
break;
89+
case EMPTY:
90+
builder.append("EMPTY ");
91+
break;
8592
case EMPTY_ARRAY:
8693
builder.append("EMPTY ARRAY");
8794
break;
@@ -98,6 +105,7 @@ public StringBuilder append(StringBuilder builder) {
98105
builder.append("UNKNOWN");
99106
break;
100107
default:
108+
throw new IllegalStateException("Unhandled JsonOnResponseBehavior: " + type );
101109
// this should never happen
102110
}
103111
return builder;
@@ -130,6 +138,7 @@ public String toString() {
130138
private boolean wrapperArray;
131139
private JsonQuotesType quotesType;
132140
private boolean quotesOnScalarString;
141+
private ScalarsType scalarsType;
133142

134143
public JsonFunction() {}
135144

@@ -294,6 +303,14 @@ public void setQuotesOnScalarString(boolean quotesOnScalarString) {
294303
this.quotesOnScalarString = quotesOnScalarString;
295304
}
296305

306+
public ScalarsType getScalarsType() {
307+
return scalarsType;
308+
}
309+
310+
public void setScalarsType(ScalarsType type) {
311+
this.scalarsType = type;
312+
}
313+
297314
public boolean isEmpty() {
298315
return keyValuePairs.isEmpty();
299316
}

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

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public String getDisplay() {
3333
}
3434

3535
public enum JsonTableOnErrorType {
36-
ERROR, EMPTY
36+
ERROR, NULL, EMPTY
3737
}
3838

3939
public static class JsonTablePassingClause extends ASTNodeAccessImpl implements Serializable {
@@ -395,6 +395,7 @@ public static class JsonTableValueColumnDefinition extends JsonTableColumnDefini
395395
private JsonTableQuotesClause quotesClause;
396396
private JsonFunction.JsonOnResponseBehavior onEmptyBehavior;
397397
private JsonFunction.JsonOnResponseBehavior onErrorBehavior;
398+
private JsonFunction.ScalarsType scalarsType;
398399

399400
public String getColumnName() {
400401
return columnName;
@@ -489,6 +490,14 @@ public JsonTableValueColumnDefinition setOnErrorBehavior(
489490
return this;
490491
}
491492

493+
public void setScalarsType(JsonFunction.ScalarsType scalarsType) {
494+
this.scalarsType = scalarsType;
495+
}
496+
497+
public JsonFunction.ScalarsType getScalarsType() {
498+
return scalarsType;
499+
}
500+
492501
@Override
493502
public void collectExpressions(List<Expression> expressions) {
494503
if (pathExpression != null) {
@@ -509,14 +518,20 @@ public String toString() {
509518
builder.append(" FOR ORDINALITY");
510519
return builder.toString();
511520
}
512-
513-
builder.append(" ").append(dataType);
521+
if (dataType != null) {
522+
builder.append(" ").append(dataType);
523+
}
514524
if (formatJson) {
515525
builder.append(" FORMAT JSON");
516526
if (encoding != null) {
517527
builder.append(" ENCODING ").append(encoding);
518528
}
519529
}
530+
if (scalarsType != null) {
531+
builder.append(" ");
532+
builder.append(scalarsType);
533+
builder.append(" SCALARS");
534+
}
520535
if (pathExpression != null) {
521536
builder.append(" PATH ").append(pathExpression);
522537
}
@@ -676,7 +691,10 @@ public <T, S> T accept(ExpressionVisitor<T> expressionVisitor, S context) {
676691
@Override
677692
public String toString() {
678693
StringBuilder builder = new StringBuilder("JSON_TABLE(");
679-
builder.append(jsonInputExpression).append(", ").append(jsonPathExpression);
694+
builder.append(jsonInputExpression);
695+
if (jsonPathExpression != null) {
696+
builder.append(", ").append(jsonPathExpression);
697+
}
680698
if (pathName != null) {
681699
builder.append(" AS ").append(pathName);
682700
}

0 commit comments

Comments
 (0)