9
9
*/
10
10
package net .sf .jsqlparser .expression ;
11
11
12
- import java .util .Objects ;
13
12
import net .sf .jsqlparser .JSQLParserException ;
14
13
import net .sf .jsqlparser .parser .CCJSqlParserUtil ;
15
14
import net .sf .jsqlparser .test .TestUtils ;
16
15
import org .junit .jupiter .api .Assertions ;
17
- import static org .junit .jupiter .api .Assertions .assertEquals ;
18
- import static org .junit .jupiter .api .Assertions .assertFalse ;
19
- import static org .junit .jupiter .api .Assertions .assertNotNull ;
20
- import static org .junit .jupiter .api .Assertions .assertTrue ;
21
16
import org .junit .jupiter .api .Test ;
22
17
23
18
/**
@@ -69,17 +64,17 @@ public void testObjectBuilder() throws JSQLParserException {
69
64
JsonKeyValuePair keyValuePair2 = new JsonKeyValuePair ("foo" , "bar" , false , false ).withUsingKeyKeyword (true ).withUsingValueKeyword (true ).withUsingFormatJson (false );
70
65
71
66
// this should work because we compare based on KEY only
72
- assertEquals (keyValuePair1 , keyValuePair2 );
67
+ Assertions . assertEquals (keyValuePair1 , keyValuePair2 );
73
68
74
69
// this must fail because all the properties are considered
75
- assertFalse ( Objects . equals (keyValuePair1 .toString (), keyValuePair2 .toString () ));
70
+ Assertions . assertNotEquals (keyValuePair1 .toString (), keyValuePair2 .toString ());
76
71
77
72
JsonKeyValuePair keyValuePair3 = new JsonKeyValuePair ("foo" , "bar" , false , false ).withUsingKeyKeyword (false ).withUsingValueKeyword (false ).withUsingFormatJson (false );
78
- assertNotNull (keyValuePair3 );
79
- assertEquals (keyValuePair3 , keyValuePair3 );
80
- assertFalse ( Objects . equals (keyValuePair3 , f ) );
73
+ Assertions . assertNotNull (keyValuePair3 );
74
+ Assertions . assertEquals (keyValuePair3 , keyValuePair3 );
75
+ Assertions . assertNotEquals (keyValuePair3 , f );
81
76
82
- assertTrue (keyValuePair3 .hashCode () != 0 );
77
+ Assertions . assertTrue (keyValuePair3 .hashCode () != 0 );
83
78
84
79
f .add (keyValuePair2 );
85
80
}
@@ -95,7 +90,7 @@ public void testArrayBuilder() throws JSQLParserException {
95
90
JsonFunctionExpression expression2 = new JsonFunctionExpression (new NullValue ()).withUsingFormatJson (
96
91
true );
97
92
98
- assertTrue ( Objects . equals (expression1 .toString (), expression2 .toString () ));
93
+ Assertions . assertEquals (expression1 .toString (), expression2 .toString ());
99
94
100
95
f .add (expression1 );
101
96
f .add (expression2 );
@@ -131,24 +126,24 @@ public void testArrayAgg() throws JSQLParserException {
131
126
@ Test
132
127
public void testObject () throws JSQLParserException {
133
128
TestUtils .assertSqlCanBeParsedAndDeparsed (
134
- "SELECT JSON_OBJECT( KEY foo VALUE bar, KEY foo VALUE bar) FROM dual " , true );
135
- TestUtils .assertSqlCanBeParsedAndDeparsed ("SELECT JSON_OBJECT( foo: bar, foo: bar) FROM dual " ,
129
+ "SELECT JSON_OBJECT( KEY ' foo' VALUE bar, KEY ' foo' VALUE bar) FROM dual " , true );
130
+ TestUtils .assertSqlCanBeParsedAndDeparsed ("SELECT JSON_OBJECT( ' foo' : bar, ' foo' : bar) FROM dual " ,
136
131
true );
137
132
TestUtils .assertSqlCanBeParsedAndDeparsed (
138
- "SELECT JSON_OBJECT( foo:bar, foo:bar FORMAT JSON) FROM dual " , true );
133
+ "SELECT JSON_OBJECT( ' foo' :bar, ' foo' :bar FORMAT JSON) FROM dual " , true );
139
134
TestUtils .assertSqlCanBeParsedAndDeparsed (
140
- "SELECT JSON_OBJECT( KEY foo VALUE bar, foo:bar FORMAT JSON, foo:bar NULL ON NULL) FROM dual " ,
135
+ "SELECT JSON_OBJECT( KEY ' foo' VALUE bar, ' foo' :bar FORMAT JSON, ' foo' :bar NULL ON NULL) FROM dual " ,
141
136
true );
142
137
TestUtils .assertSqlCanBeParsedAndDeparsed (
143
- "SELECT JSON_OBJECT( KEY foo VALUE bar FORMAT JSON, foo:bar, foo:bar ABSENT ON NULL) FROM dual " ,
138
+ "SELECT JSON_OBJECT( KEY ' foo' VALUE bar FORMAT JSON, ' foo' :bar, ' foo' :bar ABSENT ON NULL) FROM dual " ,
144
139
true );
145
140
146
141
TestUtils .assertSqlCanBeParsedAndDeparsed (
147
- "SELECT JSON_OBJECT( KEY foo VALUE bar FORMAT JSON, foo:bar, foo:bar ABSENT ON NULL WITH UNIQUE KEYS) FROM dual " ,
142
+ "SELECT JSON_OBJECT( KEY ' foo' VALUE bar FORMAT JSON, ' foo' :bar, ' foo' :bar ABSENT ON NULL WITH UNIQUE KEYS) FROM dual " ,
148
143
true );
149
144
150
145
TestUtils .assertSqlCanBeParsedAndDeparsed (
151
- "SELECT JSON_OBJECT( KEY foo VALUE bar FORMAT JSON, foo:bar, foo:bar ABSENT ON NULL WITHOUT UNIQUE KEYS) FROM dual " ,
146
+ "SELECT JSON_OBJECT( KEY ' foo' VALUE bar FORMAT JSON, ' foo' :bar, ' foo' :bar ABSENT ON NULL WITHOUT UNIQUE KEYS) FROM dual " ,
152
147
true );
153
148
154
149
TestUtils .assertExpressionCanBeParsedAndDeparsed ("json_object(null on null)" , true );
@@ -158,6 +153,42 @@ public void testObject() throws JSQLParserException {
158
153
TestUtils .assertExpressionCanBeParsedAndDeparsed ("json_object()" , true );
159
154
}
160
155
156
+ @ Test
157
+ public void testObjectWithExpression () throws JSQLParserException {
158
+ TestUtils .assertSqlCanBeParsedAndDeparsed (
159
+ "SELECT JSON_OBJECT( KEY 'foo' VALUE cast( bar AS VARCHAR(40)), KEY 'foo' VALUE bar) FROM dual " , true );
160
+
161
+ TestUtils .assertSqlCanBeParsedAndDeparsed (
162
+ "SELECT JSON_ARRAYAGG(obj) FROM (SELECT trt.relevance_id,JSON_OBJECT('id',CAST(trt.id AS CHAR),'taskName',trt.task_name,'openStatus',trt.open_status,'taskSort',trt.task_sort) as obj FROM tb_review_task trt ORDER BY trt.task_sort ASC)" , true );
163
+ }
164
+
165
+ @ Test
166
+ public void testObjectIssue1504 () throws JSQLParserException {
167
+ TestUtils .assertSqlCanBeParsedAndDeparsed (
168
+ "SELECT JSON_OBJECT(key 'person' value tp.account) obj" , true );
169
+
170
+ TestUtils .assertSqlCanBeParsedAndDeparsed (
171
+ "SELECT JSON_OBJECT(key 'person' value tp.account, key 'person' value tp.account) obj" , true );
172
+
173
+ TestUtils .assertSqlCanBeParsedAndDeparsed (
174
+ "SELECT JSON_OBJECT( 'person' : tp.account) obj" , true );
175
+
176
+ TestUtils .assertSqlCanBeParsedAndDeparsed (
177
+ "SELECT JSON_OBJECT( 'person' : tp.account, 'person' : tp.account) obj" , true );
178
+
179
+ TestUtils .assertSqlCanBeParsedAndDeparsed (
180
+ "SELECT JSON_OBJECT( 'person' : '1', 'person' : '2') obj" , true );
181
+
182
+ TestUtils .assertSqlCanBeParsedAndDeparsed (
183
+ "SELECT JSON_OBJECT( 'person' VALUE tp.person, 'account' VALUE tp.account) obj" , true );
184
+ }
185
+
186
+ @ Test
187
+ public void testObjectMySQL () throws JSQLParserException {
188
+ TestUtils .assertSqlCanBeParsedAndDeparsed (
189
+ "SELECT JSON_OBJECT('person', tp.person, 'account', tp.account) obj" , true );
190
+ }
191
+
161
192
@ Test
162
193
public void testArray () throws JSQLParserException {
163
194
TestUtils .assertSqlCanBeParsedAndDeparsed (
@@ -213,14 +244,14 @@ public void testIssue1371() throws JSQLParserException {
213
244
214
245
@ Test
215
246
public void testJavaMethods () throws JSQLParserException {
216
- String expressionStr = "JSON_OBJECT( KEY foo VALUE bar FORMAT JSON, foo:bar, foo:bar ABSENT ON NULL WITHOUT UNIQUE KEYS)" ;
247
+ String expressionStr = "JSON_OBJECT( KEY ' foo' VALUE bar FORMAT JSON, ' foo' :bar, ' foo' :bar ABSENT ON NULL WITHOUT UNIQUE KEYS)" ;
217
248
JsonFunction jsonFunction = (JsonFunction ) CCJSqlParserUtil .parseExpression (expressionStr );
218
249
219
250
Assertions .assertEquals (JsonFunctionType .OBJECT , jsonFunction .getType ());
220
251
Assertions .assertNotEquals (jsonFunction .withType (JsonFunctionType .POSTGRES_OBJECT ), jsonFunction .getType ());
221
252
222
253
Assertions .assertEquals (3 , jsonFunction .getKeyValuePairs ().size ());
223
- Assertions .assertEquals (new JsonKeyValuePair ("foo" , "bar" , true , true ), jsonFunction .getKeyValuePair (0 ));
254
+ Assertions .assertEquals (new JsonKeyValuePair ("' foo' " , "bar" , true , true ), jsonFunction .getKeyValuePair (0 ));
224
255
225
256
jsonFunction .setOnNullType (JsonAggregateOnNullType .NULL );
226
257
Assertions .assertEquals (JsonAggregateOnNullType .ABSENT , jsonFunction .withOnNullType (JsonAggregateOnNullType .ABSENT ).getOnNullType ());
0 commit comments