File tree 4 files changed +58
-0
lines changed
jjtree/net/sf/jsqlparser/parser
test/java/net/sf/jsqlparser/statement/select
4 files changed +58
-0
lines changed Original file line number Diff line number Diff line change 29
29
@ SuppressWarnings ({"PMD.CyclomaticComplexity" })
30
30
public class PlainSelect extends Select {
31
31
32
+ public enum BigQuerySelectQualifier {
33
+ AS_STRUCT , AS_VALUE
34
+ }
35
+
32
36
private Distinct distinct = null ;
37
+ private BigQuerySelectQualifier bigQuerySelectQualifier = null ;
33
38
private List <SelectItem <?>> selectItems ;
34
39
private List <Table > intoTables ;
35
40
private FromItem fromItem ;
@@ -369,6 +374,15 @@ public void setDistinct(Distinct distinct) {
369
374
this .distinct = distinct ;
370
375
}
371
376
377
+ public BigQuerySelectQualifier getBigQuerySelectQualifier () {
378
+ return bigQuerySelectQualifier ;
379
+ }
380
+
381
+ public PlainSelect setBigQuerySelectQualifier (BigQuerySelectQualifier bigQuerySelectQualifier ) {
382
+ this .bigQuerySelectQualifier = bigQuerySelectQualifier ;
383
+ return this ;
384
+ }
385
+
372
386
public Expression getHaving () {
373
387
return having ;
374
388
}
@@ -478,6 +492,18 @@ public StringBuilder appendSelectBodyTo(StringBuilder builder) {
478
492
if (distinct != null ) {
479
493
builder .append (distinct ).append (" " );
480
494
}
495
+
496
+ if (bigQuerySelectQualifier != null ) {
497
+ switch (bigQuerySelectQualifier ) {
498
+ case AS_STRUCT :
499
+ builder .append ("AS STRUCT " );
500
+ break ;
501
+ case AS_VALUE :
502
+ builder .append ("AS VALUE " );
503
+ break ;
504
+ }
505
+ }
506
+
481
507
if (top != null ) {
482
508
builder .append (top ).append (" " );
483
509
}
Original file line number Diff line number Diff line change @@ -179,6 +179,17 @@ public void visit(PlainSelect plainSelect) {
179
179
180
180
deparseDistinctClause (plainSelect , plainSelect .getDistinct ());
181
181
182
+ if (plainSelect .getBigQuerySelectQualifier () != null ) {
183
+ switch (plainSelect .getBigQuerySelectQualifier ()) {
184
+ case AS_STRUCT :
185
+ buffer .append ("AS STRUCT " );
186
+ break ;
187
+ case AS_VALUE :
188
+ buffer .append ("AS VALUE " );
189
+ break ;
190
+ }
191
+ }
192
+
182
193
Top top = plainSelect .getTop ();
183
194
if (top != null ) {
184
195
visit (top );
Original file line number Diff line number Diff line change @@ -2395,6 +2395,15 @@ PlainSelect PlainSelect() #PlainSelect:
2395
2395
)
2396
2396
]
2397
2397
2398
+ [
2399
+ <K_AS>
2400
+ (
2401
+ <K_STRUCT> { plainSelect.setBigQuerySelectQualifier( PlainSelect.BigQuerySelectQualifier.AS_STRUCT ); }
2402
+ |
2403
+ <K_VALUE> { plainSelect.setBigQuerySelectQualifier( PlainSelect.BigQuerySelectQualifier.AS_VALUE ); }
2404
+ )
2405
+ ]
2406
+
2398
2407
[ LOOKAHEAD(2) top = Top() { plainSelect.setTop(top); } ]
2399
2408
2400
2409
selectItems=SelectItemsList()
Original file line number Diff line number Diff line change @@ -80,4 +80,16 @@ void testAggregateFunctionHaving() throws JSQLParserException {
80
80
"SELECT ANY_VALUE(fruit HAVING MAX sold) AS a_highest_selling_fruit FROM Store;\n " ;
81
81
TestUtils .assertSqlCanBeParsedAndDeparsed (sqlStr , true );
82
82
}
83
+
84
+ @ Test
85
+ void testAsStruct () throws JSQLParserException {
86
+ String sqlStr = "SELECT ARRAY(SELECT AS STRUCT 1 a, 2 b)" ;
87
+ TestUtils .assertSqlCanBeParsedAndDeparsed (sqlStr , true );
88
+ }
89
+
90
+ @ Test
91
+ void testAsValue () throws JSQLParserException {
92
+ String sqlStr = "SELECT AS VALUE STRUCT(1 AS a, 2 AS b) xyz" ;
93
+ TestUtils .assertSqlCanBeParsedAndDeparsed (sqlStr , true );
94
+ }
83
95
}
You can’t perform that action at this time.
0 commit comments