File tree Expand file tree Collapse file tree 4 files changed +58
-0
lines changed
jjtree/net/sf/jsqlparser/parser
test/java/net/sf/jsqlparser/statement/select Expand file tree Collapse file tree 4 files changed +58
-0
lines changed Original file line number Diff line number Diff line change 2929@ SuppressWarnings ({"PMD.CyclomaticComplexity" })
3030public class PlainSelect extends Select {
3131
32+ public enum BigQuerySelectQualifier {
33+ AS_STRUCT , AS_VALUE
34+ }
35+
3236 private Distinct distinct = null ;
37+ private BigQuerySelectQualifier bigQuerySelectQualifier = null ;
3338 private List <SelectItem <?>> selectItems ;
3439 private List <Table > intoTables ;
3540 private FromItem fromItem ;
@@ -369,6 +374,15 @@ public void setDistinct(Distinct distinct) {
369374 this .distinct = distinct ;
370375 }
371376
377+ public BigQuerySelectQualifier getBigQuerySelectQualifier () {
378+ return bigQuerySelectQualifier ;
379+ }
380+
381+ public PlainSelect setBigQuerySelectQualifier (BigQuerySelectQualifier bigQuerySelectQualifier ) {
382+ this .bigQuerySelectQualifier = bigQuerySelectQualifier ;
383+ return this ;
384+ }
385+
372386 public Expression getHaving () {
373387 return having ;
374388 }
@@ -478,6 +492,18 @@ public StringBuilder appendSelectBodyTo(StringBuilder builder) {
478492 if (distinct != null ) {
479493 builder .append (distinct ).append (" " );
480494 }
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+
481507 if (top != null ) {
482508 builder .append (top ).append (" " );
483509 }
Original file line number Diff line number Diff line change @@ -179,6 +179,17 @@ public void visit(PlainSelect plainSelect) {
179179
180180 deparseDistinctClause (plainSelect , plainSelect .getDistinct ());
181181
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+
182193 Top top = plainSelect .getTop ();
183194 if (top != null ) {
184195 visit (top );
Original file line number Diff line number Diff line change @@ -2395,6 +2395,15 @@ PlainSelect PlainSelect() #PlainSelect:
23952395 )
23962396 ]
23972397
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+
23982407 [ LOOKAHEAD(2) top = Top() { plainSelect.setTop(top); } ]
23992408
24002409 selectItems=SelectItemsList()
Original file line number Diff line number Diff line change @@ -80,4 +80,16 @@ void testAggregateFunctionHaving() throws JSQLParserException {
8080 "SELECT ANY_VALUE(fruit HAVING MAX sold) AS a_highest_selling_fruit FROM Store;\n " ;
8181 TestUtils .assertSqlCanBeParsedAndDeparsed (sqlStr , true );
8282 }
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+ }
8395}
You can’t perform that action at this time.
0 commit comments