Skip to content

Commit c2b441d

Browse files
committed
Split JSON_TABLE rendering into focused clause helpers
Signed-off-by: minleejae <mmj9808@gmail.com>
1 parent 1e02ab3 commit c2b441d

1 file changed

Lines changed: 59 additions & 40 deletions

File tree

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

Lines changed: 59 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -699,6 +699,27 @@ public StringBuilder appendTo(StringBuilder builder,
699699
builder.append(" FOR ORDINALITY");
700700
return builder;
701701
}
702+
appendTypeOptions(builder);
703+
appendPathOptions(builder, expressionPrinter);
704+
if (onEmptyBehavior != null && !onEmptyAfterOnError) {
705+
builder.append(" ");
706+
onEmptyBehavior.appendTo(builder, expressionPrinter);
707+
builder.append(" ON EMPTY");
708+
}
709+
if (onErrorBehavior != null) {
710+
builder.append(" ");
711+
onErrorBehavior.appendTo(builder, expressionPrinter);
712+
builder.append(" ON ERROR");
713+
}
714+
if (onEmptyBehavior != null && onEmptyAfterOnError) {
715+
builder.append(" ");
716+
onEmptyBehavior.appendTo(builder, expressionPrinter);
717+
builder.append(" ON EMPTY");
718+
}
719+
return builder;
720+
}
721+
722+
private void appendTypeOptions(StringBuilder builder) {
702723
if (dataType != null) {
703724
builder.append(" ").append(dataType);
704725
}
@@ -719,6 +740,10 @@ public StringBuilder appendTo(StringBuilder builder,
719740
if (exists) {
720741
builder.append(" EXISTS");
721742
}
743+
}
744+
745+
private void appendPathOptions(StringBuilder builder,
746+
Consumer<Expression> expressionPrinter) {
722747
if (wrapperClause != null && wrapperClause.isBeforePathExpression()) {
723748
builder.append(" ").append(wrapperClause);
724749
}
@@ -732,22 +757,6 @@ public StringBuilder appendTo(StringBuilder builder,
732757
if (quotesClause != null) {
733758
builder.append(" ").append(quotesClause);
734759
}
735-
if (onEmptyBehavior != null && !onEmptyAfterOnError) {
736-
builder.append(" ");
737-
onEmptyBehavior.appendTo(builder, expressionPrinter);
738-
builder.append(" ON EMPTY");
739-
}
740-
if (onErrorBehavior != null) {
741-
builder.append(" ");
742-
onErrorBehavior.appendTo(builder, expressionPrinter);
743-
builder.append(" ON ERROR");
744-
}
745-
if (onEmptyBehavior != null && onEmptyAfterOnError) {
746-
builder.append(" ");
747-
onEmptyBehavior.appendTo(builder, expressionPrinter);
748-
builder.append(" ON EMPTY");
749-
}
750-
return builder;
751760
}
752761
}
753762

@@ -925,6 +934,36 @@ public String toString() {
925934

926935
public StringBuilder appendTo(StringBuilder builder, Consumer<Expression> expressionPrinter) {
927936
builder.append("JSON_TABLE(");
937+
appendInputAndPath(builder, expressionPrinter);
938+
appendPassingClauses(builder, expressionPrinter);
939+
if (onErrorClause != null && onErrorClause.isBeforeColumns()) {
940+
builder.append(" ").append(onErrorClause);
941+
}
942+
if (parsingTypeClause != null) {
943+
builder.append(" ").append(parsingTypeClause);
944+
}
945+
if (onEmptyClause != null) {
946+
builder.append(" ").append(onEmptyClause);
947+
}
948+
builder.append(" ");
949+
if (columnsClause == null) {
950+
builder.append("null");
951+
} else {
952+
columnsClause.appendTo(builder, expressionPrinter);
953+
}
954+
if (planClause != null) {
955+
builder.append(" ");
956+
planClause.appendTo(builder, expressionPrinter);
957+
}
958+
if (onErrorClause != null && !onErrorClause.isBeforeColumns()) {
959+
builder.append(" ").append(onErrorClause);
960+
}
961+
builder.append(")");
962+
return builder;
963+
}
964+
965+
private void appendInputAndPath(StringBuilder builder,
966+
Consumer<Expression> expressionPrinter) {
928967
printExpression(builder, jsonInputExpression, expressionPrinter);
929968
if (formatJson) {
930969
builder.append(" FORMAT JSON");
@@ -936,6 +975,10 @@ public StringBuilder appendTo(StringBuilder builder, Consumer<Expression> expres
936975
if (pathName != null) {
937976
builder.append(" AS ").append(pathName);
938977
}
978+
}
979+
980+
private void appendPassingClauses(StringBuilder builder,
981+
Consumer<Expression> expressionPrinter) {
939982
if (!passingClauses.isEmpty()) {
940983
builder.append(" PASSING ");
941984
boolean first = true;
@@ -951,30 +994,6 @@ public StringBuilder appendTo(StringBuilder builder, Consumer<Expression> expres
951994
first = false;
952995
}
953996
}
954-
if (onErrorClause != null && onErrorClause.isBeforeColumns()) {
955-
builder.append(" ").append(onErrorClause);
956-
}
957-
if (parsingTypeClause != null) {
958-
builder.append(" ").append(parsingTypeClause);
959-
}
960-
if (onEmptyClause != null) {
961-
builder.append(" ").append(onEmptyClause);
962-
}
963-
builder.append(" ");
964-
if (columnsClause == null) {
965-
builder.append("null");
966-
} else {
967-
columnsClause.appendTo(builder, expressionPrinter);
968-
}
969-
if (planClause != null) {
970-
builder.append(" ");
971-
planClause.appendTo(builder, expressionPrinter);
972-
}
973-
if (onErrorClause != null && !onErrorClause.isBeforeColumns()) {
974-
builder.append(" ").append(onErrorClause);
975-
}
976-
builder.append(")");
977-
return builder;
978997
}
979998

980999
private static void printExpression(StringBuilder builder, Expression expression,

0 commit comments

Comments
 (0)