@@ -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