From 2e27ef193c19e59eae0e69c9f51f6910413816ea Mon Sep 17 00:00:00 2001 From: Tomer Shay Date: Wed, 19 Mar 2025 23:48:04 +0700 Subject: [PATCH] Add support for AllTableColumns in primary expression --- .../jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt | 11 +++-------- .../sf/jsqlparser/statement/select/SelectTest.java | 6 ++++++ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index 447af02d6..ffb02c0b5 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -3252,12 +3252,8 @@ SelectItem SelectItem() #SelectItem: // @fixme: Oracle's SEQUENCE.nextval is parsed as COLUMN with a name part nextval // @todo: parse a proper SEQUENCE instead of a COLUMN ( - expression = AllColumns() - | LOOKAHEAD( 3 ) expression = ConnectByPriorOperator() | - LOOKAHEAD(AllTableColumns()) expression = AllTableColumns() - | LOOKAHEAD( 3 ) expression = XorExpression() | LOOKAHEAD( 3 ) expression = ConcatExpression() @@ -5301,6 +5297,9 @@ Expression PrimaryExpression() #PrimaryExpression: | LOOKAHEAD(2, {!interrupted}) retval=CastExpression() + | LOOKAHEAD(AllColumns()) retval=AllColumns() + + | LOOKAHEAD(AllTableColumns()) retval=AllTableColumns() // support timestamp expressions | LOOKAHEAD(2, {!interrupted}) (token= | token=) { retval = new TimeKeyExpression(token.image); } @@ -6450,10 +6449,6 @@ Function InternalFunction(boolean escaped): ) ] ( - "*" { expr = new AllColumns(); expressionList = new ExpressionList(expr); } - | - LOOKAHEAD( AllTableColumns() ) expr=AllTableColumns() { expressionList = new ExpressionList(expr); } - | LOOKAHEAD(3) [ LOOKAHEAD(2) extraKeywordToken = { retval.setExtraKeyword(extraKeywordToken.image); } ] expressionList=ExpressionList() [ orderByList = OrderByElements() { retval.setOrderByElements(orderByList); } ] diff --git a/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java b/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java index 5213a43ae..25515f6ef 100644 --- a/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java @@ -5486,6 +5486,12 @@ public void testReservedKeywordsIssue1352() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("SELECT fulltext from fulltext.fulltext", true); } + @Test + public void testGroupByWithAllTableColumns() throws JSQLParserException { + assertSqlCanBeParsedAndDeparsed( + "select c.post_id, p.* from posts p inner join comments c on c.post_id = p.post_id group by p.post_id, c.post_id, p.*;"); + } + @Test public void testTableSpaceKeyword() throws JSQLParserException { // without extra brackets