99 */
1010package net .sf .jsqlparser .expression ;
1111
12- import java .util .Objects ;
1312import net .sf .jsqlparser .JSQLParserException ;
1413import net .sf .jsqlparser .parser .CCJSqlParserUtil ;
1514import net .sf .jsqlparser .test .TestUtils ;
1615import 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 ;
2116import org .junit .jupiter .api .Test ;
2217
2318/**
@@ -69,17 +64,17 @@ public void testObjectBuilder() throws JSQLParserException {
6964 JsonKeyValuePair keyValuePair2 = new JsonKeyValuePair ("foo" , "bar" , false , false ).withUsingKeyKeyword (true ).withUsingValueKeyword (true ).withUsingFormatJson (false );
7065
7166 // this should work because we compare based on KEY only
72- assertEquals (keyValuePair1 , keyValuePair2 );
67+ Assertions . assertEquals (keyValuePair1 , keyValuePair2 );
7368
7469 // this must fail because all the properties are considered
75- assertFalse ( Objects . equals (keyValuePair1 .toString (), keyValuePair2 .toString () ));
70+ Assertions . assertNotEquals (keyValuePair1 .toString (), keyValuePair2 .toString ());
7671
7772 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 );
8176
82- assertTrue (keyValuePair3 .hashCode () != 0 );
77+ Assertions . assertTrue (keyValuePair3 .hashCode () != 0 );
8378
8479 f .add (keyValuePair2 );
8580 }
@@ -95,7 +90,7 @@ public void testArrayBuilder() throws JSQLParserException {
9590 JsonFunctionExpression expression2 = new JsonFunctionExpression (new NullValue ()).withUsingFormatJson (
9691 true );
9792
98- assertTrue ( Objects . equals (expression1 .toString (), expression2 .toString () ));
93+ Assertions . assertEquals (expression1 .toString (), expression2 .toString ());
9994
10095 f .add (expression1 );
10196 f .add (expression2 );
@@ -131,24 +126,24 @@ public void testArrayAgg() throws JSQLParserException {
131126 @ Test
132127 public void testObject () throws JSQLParserException {
133128 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 " ,
136131 true );
137132 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 );
139134 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 " ,
141136 true );
142137 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 " ,
144139 true );
145140
146141 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 " ,
148143 true );
149144
150145 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 " ,
152147 true );
153148
154149 TestUtils .assertExpressionCanBeParsedAndDeparsed ("json_object(null on null)" , true );
@@ -158,6 +153,42 @@ public void testObject() throws JSQLParserException {
158153 TestUtils .assertExpressionCanBeParsedAndDeparsed ("json_object()" , true );
159154 }
160155
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+
161192 @ Test
162193 public void testArray () throws JSQLParserException {
163194 TestUtils .assertSqlCanBeParsedAndDeparsed (
@@ -213,14 +244,14 @@ public void testIssue1371() throws JSQLParserException {
213244
214245 @ Test
215246 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)" ;
217248 JsonFunction jsonFunction = (JsonFunction ) CCJSqlParserUtil .parseExpression (expressionStr );
218249
219250 Assertions .assertEquals (JsonFunctionType .OBJECT , jsonFunction .getType ());
220251 Assertions .assertNotEquals (jsonFunction .withType (JsonFunctionType .POSTGRES_OBJECT ), jsonFunction .getType ());
221252
222253 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 ));
224255
225256 jsonFunction .setOnNullType (JsonAggregateOnNullType .NULL );
226257 Assertions .assertEquals (JsonAggregateOnNullType .ABSENT , jsonFunction .withOnNullType (JsonAggregateOnNullType .ABSENT ).getOnNullType ());
0 commit comments