16
16
import net .sf .jsqlparser .expression .JdbcParameter ;
17
17
import net .sf .jsqlparser .expression .LongValue ;
18
18
import net .sf .jsqlparser .expression .StringValue ;
19
+ import net .sf .jsqlparser .expression .operators .relational .ExistsExpression ;
19
20
import net .sf .jsqlparser .expression .operators .relational .ExpressionList ;
20
21
import net .sf .jsqlparser .expression .operators .relational .ParenthesedExpressionList ;
21
22
import net .sf .jsqlparser .parser .CCJSqlParserManager ;
22
23
import net .sf .jsqlparser .parser .CCJSqlParserUtil ;
23
24
import net .sf .jsqlparser .schema .Column ;
24
25
import net .sf .jsqlparser .schema .Table ;
25
- import net .sf .jsqlparser .statement .select .AllColumns ;
26
- import net .sf .jsqlparser .statement .select .PlainSelect ;
27
- import net .sf .jsqlparser .statement .select .Select ;
28
- import net .sf .jsqlparser .statement .select .Values ;
26
+ import net .sf .jsqlparser .statement .select .*;
29
27
import net .sf .jsqlparser .statement .update .UpdateSet ;
30
28
import org .junit .jupiter .api .Disabled ;
31
29
import org .junit .jupiter .api .Test ;
32
30
import org .junit .jupiter .api .function .Executable ;
33
31
34
32
import java .io .StringReader ;
33
+ import java .util .List ;
35
34
35
+ import static junit .framework .Assert .assertNull ;
36
36
import static net .sf .jsqlparser .test .TestUtils .assertDeparse ;
37
37
import static net .sf .jsqlparser .test .TestUtils .assertOracleHintExists ;
38
38
import static net .sf .jsqlparser .test .TestUtils .assertSqlCanBeParsedAndDeparsed ;
@@ -277,12 +277,26 @@ public void testInsertSelect() throws JSQLParserException {
277
277
278
278
@ Test
279
279
public void testInsertWithSelect () throws JSQLParserException {
280
- assertSqlCanBeParsedAndDeparsed (
281
- "INSERT INTO mytable (mycolumn) WITH a AS (SELECT mycolumn FROM mytable) SELECT mycolumn FROM a" ,
282
- true );
283
- assertSqlCanBeParsedAndDeparsed (
284
- "INSERT INTO mytable (mycolumn) (WITH a AS (SELECT mycolumn FROM mytable) SELECT mycolumn FROM a)" ,
285
- true );
280
+ String sqlStr1 = "INSERT INTO mytable (mycolumn) WITH a AS (SELECT mycolumn FROM mytable) SELECT mycolumn FROM a" ;
281
+ Insert insert1 = (Insert ) assertSqlCanBeParsedAndDeparsed (sqlStr1 , true );
282
+ List <WithItem > insertWithItems1 = insert1 .getWithItemsList ();
283
+ List <WithItem > selectWithItems1 = insert1 .getSelect ().getWithItemsList ();
284
+ assertEquals ("mytable" , insert1 .getTable ().getFullyQualifiedName ());
285
+ assertNull (insertWithItems1 );
286
+ assertEquals (1 , selectWithItems1 .size ());
287
+ assertEquals ("SELECT mycolumn FROM mytable" , selectWithItems1 .get (0 ).getSelect ().getPlainSelect ().toString ());
288
+ assertEquals (" a" , selectWithItems1 .get (0 ).getAlias ().toString ());
289
+
290
+ String sqlStr2 = "INSERT INTO mytable (mycolumn) (WITH a AS (SELECT mycolumn FROM mytable) SELECT mycolumn FROM a)" ;
291
+ Insert insert2 = (Insert ) assertSqlCanBeParsedAndDeparsed (sqlStr2 , true );
292
+ List <WithItem > insertWithItems2 = insert2 .getWithItemsList ();
293
+ assertEquals ("mytable" , insert2 .getTable ().getFullyQualifiedName ());
294
+ assertNull (insertWithItems2 );
295
+ ParenthesedSelect select = (ParenthesedSelect ) insert2 .getSelect ();
296
+ List <WithItem > selectWithItems2 = select .getSelect ().getWithItemsList ();
297
+ assertEquals (1 , selectWithItems2 .size ());
298
+ assertEquals ("SELECT mycolumn FROM mytable" , selectWithItems2 .get (0 ).getSelect ().getPlainSelect ().toString ());
299
+ assertEquals (" a" , selectWithItems2 .get (0 ).getAlias ().toString ());
286
300
}
287
301
288
302
@ Test
@@ -348,9 +362,15 @@ public void testKeywordPrecisionIssue363() throws JSQLParserException {
348
362
349
363
@ Test
350
364
public void testWithDeparsingIssue406 () throws JSQLParserException {
351
- assertSqlCanBeParsedAndDeparsed (
352
- "insert into mytab3 (a,b,c) select a,b,c from mytab where exists(with t as (select * from mytab2) select * from t)" ,
353
- true );
365
+ String sqlStr = "insert into mytab3 (a,b,c) select a,b,c from mytab where exists(with t as (select * from mytab2) select * from t)" ;
366
+ Insert insert = (Insert ) assertSqlCanBeParsedAndDeparsed (sqlStr , true );
367
+ List <WithItem > insertWithItems = insert .getWithItemsList ();
368
+ List <WithItem > selectWithItems = insert .getSelect ().getWithItemsList ();
369
+ assertEquals ("mytab3" , insert .getTable ().getFullyQualifiedName ());
370
+ assertNull (insertWithItems );
371
+ assertNull (selectWithItems );
372
+ ExistsExpression exists = (ExistsExpression ) insert .getPlainSelect ().getWhere ();
373
+ assertEquals ("(WITH t AS (SELECT * FROM mytab2) SELECT * FROM t)" , exists .getRightExpression ().toString ());
354
374
}
355
375
356
376
@ Test
@@ -390,9 +410,16 @@ public void testInsertKeyWordIntervalIssue682() throws JSQLParserException {
390
410
391
411
@ Test
392
412
public void testWithAtFront () throws JSQLParserException {
393
- assertSqlCanBeParsedAndDeparsed (
394
- "WITH foo AS ( SELECT attr FROM bar ) INSERT INTO lalelu (attr) SELECT attr FROM foo" ,
395
- true );
413
+ String sqlStr = "WITH foo AS ( SELECT attr FROM bar ) INSERT INTO lalelu (attr) SELECT attr FROM foo" ;
414
+ Insert insert = (Insert ) assertSqlCanBeParsedAndDeparsed (sqlStr , true );
415
+ List <WithItem > insertWithItems = insert .getWithItemsList ();
416
+ assertEquals ("lalelu" , insert .getTable ().getFullyQualifiedName ());
417
+ assertEquals (1 , insertWithItems .size ());
418
+ assertEquals ("SELECT attr FROM bar" , insertWithItems .get (0 ).getSelect ().getPlainSelect ().toString ());
419
+ assertEquals (" foo" , insertWithItems .get (0 ).getAlias ().toString ());
420
+ assertEquals ("SELECT attr FROM foo" , insert .getSelect ().toString ());
421
+ assertEquals ("foo" , insert .getSelect ().getPlainSelect ().getFromItem ().toString ());
422
+ assertEquals ("[attr]" , insert .getSelect ().getPlainSelect ().getSelectItems ().toString ());
396
423
}
397
424
398
425
@ Test
@@ -427,8 +454,16 @@ public void testDisableKeywordIssue945() throws JSQLParserException {
427
454
428
455
@ Test
429
456
public void testWithListIssue282 () throws JSQLParserException {
430
- assertSqlCanBeParsedAndDeparsed (
431
- "WITH myctl AS (SELECT a, b FROM mytable) INSERT INTO mytable SELECT a, b FROM myctl" );
457
+ String sqlStr = "WITH myctl AS (SELECT a, b FROM mytable) INSERT INTO mytable SELECT a, b FROM myctl" ;
458
+ Insert insert = (Insert ) assertSqlCanBeParsedAndDeparsed (sqlStr , true );
459
+ List <WithItem > insertWithItems = insert .getWithItemsList ();
460
+ assertEquals ("mytable" , insert .getTable ().getFullyQualifiedName ());
461
+ assertEquals (1 , insertWithItems .size ());
462
+ assertEquals ("SELECT a, b FROM mytable" , insertWithItems .get (0 ).getSelect ().getPlainSelect ().toString ());
463
+ assertEquals (" myctl" , insertWithItems .get (0 ).getAlias ().toString ());
464
+ assertEquals ("SELECT a, b FROM myctl" , insert .getSelect ().toString ());
465
+ assertEquals ("myctl" , insert .getSelect ().getPlainSelect ().getFromItem ().toString ());
466
+ assertEquals ("[a, b]" , insert .getSelect ().getPlainSelect ().getSelectItems ().toString ());
432
467
}
433
468
434
469
@ Test
@@ -468,8 +503,18 @@ public void testInsertUnionSelectIssue1491() throws JSQLParserException {
468
503
assertSqlCanBeParsedAndDeparsed ("insert into table1 (tf1,tf2,tf2)\n "
469
504
+ "((select sf1,sf2,sf3 from s1)" + "union " + "(select rf1,rf2,rf2 from r1))" ,
470
505
true );
506
+ }
471
507
472
- assertSqlCanBeParsedAndDeparsed ("(with a as (select * from dual) select * from a)" , true );
508
+ @ Test
509
+ public void testWithSelectFromDual () throws JSQLParserException {
510
+ String sqlStr = "(with a as (select * from dual) select * from a)" ;
511
+ ParenthesedSelect parenthesedSelect = (ParenthesedSelect ) assertSqlCanBeParsedAndDeparsed (sqlStr , true );
512
+ List <WithItem > withItems = parenthesedSelect .getSelect ().getWithItemsList ();
513
+ assertEquals (1 , withItems .size ());
514
+ assertEquals ("SELECT * FROM dual" , withItems .get (0 ).getSelect ().getPlainSelect ().toString ());
515
+ assertEquals (" a" , withItems .get (0 ).getAlias ().toString ());
516
+ assertEquals ("a" , parenthesedSelect .getPlainSelect ().getFromItem ().toString ());
517
+ assertEquals ("[*]" , parenthesedSelect .getPlainSelect ().getSelectItems ().toString ());
473
518
}
474
519
475
520
@ Test
@@ -528,6 +573,11 @@ public void insertOnConflictObjectsTest() throws JSQLParserException {
528
573
String sqlStr = "WITH a ( a, b , c ) \n " + "AS (SELECT 1 , 2 , 3 )\n "
529
574
+ "insert into test\n " + "select * from a" ;
530
575
Insert insert = (Insert ) CCJSqlParserUtil .parse (sqlStr );
576
+ List <WithItem > withItems = insert .getWithItemsList ();
577
+ assertEquals ("test" , insert .getTable ().getFullyQualifiedName ());
578
+ assertEquals (1 , withItems .size ());
579
+ assertEquals ("[1, 2, 3]" , withItems .get (0 ).getSelect ().getPlainSelect ().getSelectItems ().toString ());
580
+ assertEquals (" a" , withItems .get (0 ).getAlias ().toString ());
531
581
532
582
Expression whereExpression = CCJSqlParserUtil .parseExpression ("a=1" , false );
533
583
Expression valueExpression = CCJSqlParserUtil .parseExpression ("b/2" , false );
@@ -608,8 +658,7 @@ public void testDefaultValues() throws JSQLParserException {
608
658
@ Test
609
659
public void testDefaultValuesWithAlias () throws JSQLParserException {
610
660
String statement = "INSERT INTO mytable x DEFAULT VALUES" ;
611
- assertSqlCanBeParsedAndDeparsed (statement );
612
- Insert insert = (Insert ) parserManager .parse (new StringReader (statement ));
661
+ Insert insert = (Insert ) assertSqlCanBeParsedAndDeparsed (statement );
613
662
assertEquals ("mytable" , insert .getTable ().getFullyQualifiedName ());
614
663
assertEquals ("INSERT INTO MYTABLE X DEFAULT VALUES" , insert .toString ().toUpperCase ());
615
664
assertEquals ("x" , insert .getTable ().getAlias ().getName ());
@@ -623,8 +672,7 @@ public void testDefaultValuesWithAlias() throws JSQLParserException {
623
672
@ Test
624
673
public void testDefaultValuesWithAliasAndAs () throws JSQLParserException {
625
674
String statement = "INSERT INTO mytable AS x DEFAULT VALUES" ;
626
- assertSqlCanBeParsedAndDeparsed (statement );
627
- Insert insert = (Insert ) parserManager .parse (new StringReader (statement ));
675
+ Insert insert = (Insert ) assertSqlCanBeParsedAndDeparsed (statement );
628
676
assertEquals ("mytable" , insert .getTable ().getFullyQualifiedName ());
629
677
assertEquals ("INSERT INTO MYTABLE AS X DEFAULT VALUES" , insert .toString ().toUpperCase ());
630
678
assertEquals ("x" , insert .getTable ().getAlias ().getName ());
0 commit comments