Uploaded image for project: 'Phoenix'
  1. Phoenix
  2. PHOENIX-3305

Parser doesn't accept UNION ALL with LIMIT

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Not A Problem
    • 4.7.0
    • None
    • None
    • None

    Description

      UNION ALL and LIMIT appear to not work in tandem.

      > create table test1(a integer, b varchar, constraint pk primary key (a));
      > create table test2(a integer, b varchar, constraint pk primary key (a));
      > upsert into test1 values(1, 'one');
      > upsert into test1 values(2, 'two');
      > upsert into test2 values(3, 'three');
      > upsert into test2 values(4, 'four');
      > select a, b from test1 limit 1 union all select a, b from test2 limit 1;
      Error: ERROR 602 (42P00): Syntax error. Missing "EOF" at line 1, column 32. (state=42P00,code=602)
      org.apache.phoenix.exception.PhoenixParserException: ERROR 602 (42P00): Syntax error. Missing "EOF" at line 1, column 32.
              at org.apache.phoenix.exception.PhoenixParserException.newException(PhoenixParserException.java:33)
              at org.apache.phoenix.parse.SQLParser.parseStatement(SQLParser.java:111)
              at org.apache.phoenix.jdbc.PhoenixStatement$PhoenixStatementParser.parseStatement(PhoenixStatement.java:1185)
              at org.apache.phoenix.jdbc.PhoenixStatement.parseStatement(PhoenixStatement.java:1268)
              at org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:1339)
              at sqlline.Commands.execute(Commands.java:822)
              at sqlline.Commands.sql(Commands.java:732)
              at sqlline.SqlLine.dispatch(SqlLine.java:808)
              at sqlline.SqlLine.begin(SqlLine.java:681)
              at sqlline.SqlLine.start(SqlLine.java:398)
              at sqlline.SqlLine.main(SqlLine.java:292)
      Caused by: MissingTokenException(inserted [@-1,0:0='<missing EOF>',<-1>,1:31] at union)
              at org.apache.phoenix.parse.PhoenixSQLParser.recoverFromMismatchedToken(PhoenixSQLParser.java:350)
              at org.antlr.runtime.BaseRecognizer.match(BaseRecognizer.java:115)
              at org.apache.phoenix.parse.PhoenixSQLParser.statement(PhoenixSQLParser.java:510)
              at org.apache.phoenix.parse.SQLParser.parseStatement(SQLParser.java:108)
              ... 9 more
      

      A workaround using subselect is required

      > select a, b from (select a, b from test1 limit 1) union all select a, b from (select a, b from test2 limit 1);
      +----+--------+
      | A  |   B    |
      +----+--------+
      | 1  | one    |
      | 3  | three  |
      +----+--------+
      

      Attachments

        Activity

          People

            Unassigned Unassigned
            ndimiduk Nick Dimiduk
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: