1515import net .sf .jsqlparser .parser .ASTNodeAccessImpl ;
1616
1717/**
18+ * Represents a JSON-Function.<br>
19+ * Currently supported are the types in {@link JsonFunctionType}.<br>
20+ * <br>
21+ * For JSON_OBJECT and JSON_OBJECTAGG the parameters are available from {@link #getKeyValuePairs()}<br>
22+ * <br>
23+ * For JSON_ARRAY and JSON_ARRAYAGG the parameters are availble from {@link #getExpressions()}.<br>
24+ *
1825 * @author <a href="mailto:[email protected] ">Andreas Reichel</a> 1926 */
20-
2127public class JsonFunction extends ASTNodeAccessImpl implements Expression {
2228 private final ArrayList <JsonKeyValuePair > keyValuePairs = new ArrayList <>();
2329 private final ArrayList <JsonFunctionExpression > expressions = new ArrayList <>();
@@ -27,10 +33,21 @@ public class JsonFunction extends ASTNodeAccessImpl implements Expression {
2733
2834 private boolean isStrict = false ;
2935
36+ /**
37+ * Returns the Parameters of an JSON_OBJECT or JSON_OBJECTAGG<br>
38+ * The KeyValuePairs may not have both key and value set, in some cases only the Key is set.
39+ *
40+ * @return A List of KeyValuePairs, never NULL
41+ */
3042 public ArrayList <JsonKeyValuePair > getKeyValuePairs () {
3143 return keyValuePairs ;
3244 }
3345
46+ /**
47+ * Returns the parameters of JSON_ARRAY or JSON_ARRAYAGG<br>
48+ *
49+ * @return A List of {@link JsonFunctionExpression}s, never NULL
50+ */
3451 public ArrayList <JsonFunctionExpression > getExpressions () {
3552 return expressions ;
3653 }
@@ -138,13 +155,9 @@ public <T, S> T accept(ExpressionVisitor<T> expressionVisitor, S context) {
138155 public StringBuilder append (StringBuilder builder ) {
139156 switch (functionType ) {
140157 case OBJECT :
141- appendObject (builder );
142- break ;
143158 case POSTGRES_OBJECT :
144- appendPostgresObject (builder );
145- break ;
146159 case MYSQL_OBJECT :
147- appendMySqlObject (builder );
160+ appendObject (builder );
148161 break ;
149162 case ARRAY :
150163 appendArray (builder );
@@ -163,14 +176,14 @@ public StringBuilder appendObject(StringBuilder builder) {
163176 if (i > 0 ) {
164177 builder .append (", " );
165178 }
166- if (keyValuePair .isUsingValueKeyword () ) {
167- if ( keyValuePair . isUsingKeyKeyword ()) {
168- builder . append ( "KEY " );
169- }
170- builder . append ( keyValuePair . getKey ()). append ( " VALUE " )
171- . append (keyValuePair .getValue ());
172- } else {
173- builder .append (keyValuePair .getKey ()). append ( ":" ). append ( keyValuePair . getValue ());
179+ if (keyValuePair .isUsingKeyKeyword () && keyValuePair . getSeparator () == JsonKeyValuePairSeparator . VALUE ) {
180+ builder . append ( "KEY " );
181+ }
182+ builder . append ( keyValuePair . getKey ());
183+
184+ if (keyValuePair .getValue () != null ) {
185+ builder . append ( keyValuePair . getSeparator (). getSeparatorString ());
186+ builder .append (keyValuePair .getValue ());
174187 }
175188
176189 if (keyValuePair .isUsingFormatJson ()) {
@@ -220,44 +233,6 @@ private void appendUniqueKeys(StringBuilder builder) {
220233 }
221234 }
222235
223-
224- @ SuppressWarnings ({"PMD.CyclomaticComplexity" , "PMD.NPathComplexity" })
225- public StringBuilder appendPostgresObject (StringBuilder builder ) {
226- builder .append ("JSON_OBJECT( " );
227- for (JsonKeyValuePair keyValuePair : keyValuePairs ) {
228- builder .append (keyValuePair .getKey ());
229- if (keyValuePair .getValue () != null ) {
230- builder .append (", " ).append (keyValuePair .getValue ());
231- }
232- }
233-
234- appendOnNullType (builder );
235- if (isStrict ) {
236- builder .append (" STRICT" );
237- }
238- appendUniqueKeys (builder );
239-
240- builder .append (" ) " );
241-
242- return builder ;
243- }
244-
245- public StringBuilder appendMySqlObject (StringBuilder builder ) {
246- builder .append ("JSON_OBJECT( " );
247- int i = 0 ;
248- for (JsonKeyValuePair keyValuePair : keyValuePairs ) {
249- if (i > 0 ) {
250- builder .append (", " );
251- }
252- builder .append (keyValuePair .getKey ());
253- builder .append (", " ).append (keyValuePair .getValue ());
254- i ++;
255- }
256- builder .append (" ) " );
257-
258- return builder ;
259- }
260-
261236 @ SuppressWarnings ({"PMD.CyclomaticComplexity" , "PMD.NPathComplexity" })
262237 public StringBuilder appendArray (StringBuilder builder ) {
263238 builder .append ("JSON_ARRAY( " );
@@ -271,18 +246,7 @@ public StringBuilder appendArray(StringBuilder builder) {
271246 i ++;
272247 }
273248
274- if (onNullType != null ) {
275- switch (onNullType ) {
276- case NULL :
277- builder .append (" NULL ON NULL " );
278- break ;
279- case ABSENT :
280- builder .append (" ABSENT ON NULL " );
281- break ;
282- default :
283- // "ON NULL" was omitted
284- }
285- }
249+ appendOnNullType (builder );
286250 builder .append (") " );
287251
288252 return builder ;
0 commit comments