[ 
https://issues.apache.org/jira/browse/IMPALA-7618?focusedWorklogId=1008409&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-1008409
 ]

ASF GitHub Bot logged work on IMPALA-7618:
------------------------------------------

                Author: ASF GitHub Bot
            Created on: 08/Mar/26 15:20
            Start Date: 08/Mar/26 15:20
    Worklog Time Spent: 10m 
      Work Description: Kino1994 opened a new pull request, #87:
URL: https://github.com/apache/impala/pull/87

   ## Summary
   - The SQL parser only accepted `<` and `<=` operators in Kudu range 
partition bounds, rejecting logically equivalent forms like `VALUES >= X` and 
`X > VALUES`. This created an inconsistency where `SHOW RANGE PARTITIONS` 
displayed bounds using `>=` notation that couldn't be used in DDL statements 
(`CREATE TABLE`, `ALTER TABLE ADD/DROP RANGE PARTITION`).
   - Adds `>` and `>=` alternatives to the `opt_lower_range_val` and 
`opt_upper_range_val` grammar rules, with a new `RangeBound` class carrying a 
`reversed` flag so bounds are normalized (swapped to the correct semantic 
position) during AST construction.
   - Both reversed and canonical forms now produce identical internal 
`RangePartition` representations, ensuring consistent behavior across DDL 
input, internal representation, and `SHOW RANGE PARTITIONS` display output.
   
   ## Test plan
   - [ ] New parser tests in `ParserTest.java` verify `VALUES >= expr`, `VALUES 
> expr`, `expr >= VALUES`, `expr > VALUES` parse successfully for `CREATE 
TABLE`, `ALTER TABLE ADD`, and `ALTER TABLE DROP` with single and multi-column 
tuples.
   - [ ] New analyzer tests in `AnalyzeKuduDDLTest.java` verify reversed forms 
pass full semantic analysis against Kudu table definitions.
   - [ ] Existing parser and analyzer tests continue to pass, confirming 
backward compatibility.
   - [ ] Manual verification that `ALTER TABLE t ADD RANGE PARTITION VALUES >= 
'2027-01-01'` and `ALTER TABLE t ADD RANGE PARTITION '2027-01-01' <= VALUES` 
produce identical partitions.
   
   🤖 Generated with [Claude Code](https://claude.com/claude-code)




Issue Time Tracking
-------------------

            Worklog Id:     (was: 1008409)
    Remaining Estimate: 0h
            Time Spent: 10m

> Kudu table Create/Alter syntax should accept 'VALUES <= <lit>'
> --------------------------------------------------------------
>
>                 Key: IMPALA-7618
>                 URL: https://issues.apache.org/jira/browse/IMPALA-7618
>             Project: IMPALA
>          Issue Type: Bug
>          Components: Frontend
>    Affects Versions: Impala 2.2.0
>            Reporter: Dan Burkert
>            Priority: Major
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> Currently Impala allows the {{PARTITION 200 <= VALUES}} syntax to specify an 
> unbounded-above range partition in a Kudu table, but not {{PARTITION VALUES 
> >= 200}}.  Since these expressions are equivalent it would be nice if both 
> were accepted.
>  
> I would normally consider this an improvement and not a bug, however there is 
> currently a mismatch between how Kudu pretty-prints these partitions and how 
> Impala parses them.  This mismatch makes it very likely that users will hit 
> this issue and be stumped.  For example:
>  
> {code:java}
> > CREATE TABLE dan_test (a int, PRIMARY KEY (a))
>   PARTITION BY RANGE (a) (
>     PARTITION 0 <= VALUES < 100,
>     PARTITION VALUES >= 200
>   ) STORED AS KUDU;
>     ERROR: AnalysisException: Syntax error in line 4:
>         PARTITION VALUES >= 200
>                         ^
>     Encountered: >
>     Expected: COMMA
>     CAUSED BY: Exception: Syntax error
> > CREATE TABLE dan_test (a int, PRIMARY KEY (a))
>   PARTITION BY RANGE (a) (
>     PARTITION 0 <= VALUES < 100,
>     PARTITION 200 <= VALUES
>   ) STORED AS KUDU;
>     +-------------------------+
>     | summary                 |
>     +-------------------------+
>     | Table has been created. |
>     +-------------------------+
>     Fetched 1 row(s) in 1.65s
> > SHOW RANGE PARTITIONS dan_test;
>     +-------------------+
>     | RANGE (a)         |
>     +-------------------+
>     | 0 <= VALUES < 100 |
>     | VALUES >= 200     |
>     +-------------------+
>     Fetched 2 row(s) in 3.73s
> > ALTER TABLE dan_test DROP RANGE PARTITION VALUES >= 100;
>     Query: ALTER TABLE dan_test DROP RANGE PARTITION VALUES >= 100
>     ERROR: AnalysisException: Syntax error in line 1:
>     ALTER TABLE dan_test DROP RANGE PARTITION VALUES >= 100
>                                                     ^
>     Encountered: >
>     Expected: COMMA
>     CAUSED BY: Exception: Syntax error
> > ALTER TABLE dan_test DROP RANGE PARTITION 100 <= VALUES;
>     Query: ALTER TABLE dan_test DROP RANGE PARTITION 100 <= VALUES
>     ERROR: ImpalaRuntimeException: Error dropping range partition in table 
> dan_test
>     CAUSED BY: NonRecoverableException: No range partition found for drop 
> range partition step: VALUES >= 100
> > ALTER TABLE dan_test DROP RANGE PARTITION 200 <= VALUES;
>     Query: ALTER TABLE dan_test DROP RANGE PARTITION 200 <= VALUES
>     +-----------------------------------+
>     | summary                           |
>     +-----------------------------------+
>     | Range partition has been dropped. |
>     +-----------------------------------+
>     Fetched 1 row(s) in 0.10s
> > SHOW PARTITIONS dan_test;
>     Query: SHOW PARTITIONS dan_test
>     
> +--------+-----------+----------+-----------------------------------+------------+
>     | # Rows | Start Key | Stop Key | Leader Replica                    | # 
> Replicas |
>     
> +--------+-----------+----------+-----------------------------------+------------+
>     | -1     | 80000000  | 80000064 | nightly6x-4.vpc.cloudera.com:7050 | 3   
>        |
>     
> +--------+-----------+----------+-----------------------------------+------------+
>     Fetched 1 row(s) in 0.04s{code}
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to