FlyingZC opened a new issue, #27110:
URL: https://github.com/apache/shardingsphere/issues/27110

   # Background
   Hi community,
   This issue is for #26878.
   
   ShardingSphere parser engine helps users parse a SQL to get the AST 
(Abstract Syntax Tree) and visit this tree to get SQLStatement (Java Object). 
Currently, we are planning to enhance the support for Oracle SQL parsing in 
ShardingSphere.
   
   More details:
   
https://shardingsphere.apache.org/document/current/en/reference/sharding/parse/
   
   # Task
   This issue is to support more oracle sql parse, as follows:
   ```sql
   CREATE TABLE hash_products
       ( product_id          NUMBER(6)
       , product_name        VARCHAR2(50)
       , product_description VARCHAR2(2000)
       , category_id         NUMBER(2)
       , weight_class        NUMBER(1)
       , warranty_period     INTERVAL YEAR TO MONTH
       , supplier_id         NUMBER(6)
       , product_status      VARCHAR2(20)
       , list_price          NUMBER(8,2)
       , min_price           NUMBER(8,2)
       , catalog_url         VARCHAR2(50)
       , CONSTRAINT          pk_product_id PRIMARY KEY (product_id)
       , CONSTRAINT          product_status_lov_demo
                             CHECK (product_status in ('orderable'
                                                     ,'planned'
                                                     ,'under development'
                                                     ,'obsolete')
    ) )
    PARTITION BY HASH (product_id)
    PARTITIONS 5
    STORE IN (example); 
    
   CREATE TABLE sales_quota
       ( product_id          NUMBER(6)
       , customer_name       VARCHAR2(50)  
       , order_qty           NUMBER(6)
     ,CONSTRAINT u_product_id UNIQUE(product_id)
    ); 
    
   CREATE BITMAP INDEX product_bm_ix
      ON hash_products(list_price)
      FROM hash_products h, sales_quota s
      WHERE h.product_id = s.product_id
      LOCAL(PARTITION ix_p1 TABLESPACE example,
            PARTITION ix_p2,
            PARTITION ix_p3 TABLESPACE example,
            PARTITION ix_p4,
            PARTITION ix_p5 TABLESPACE example)
      TABLESPACE example;
   ```
   
   ```sql
   CREATE TABLE stripe_regional_sales
               ( deptno number, item_no varchar2(20),
                 txn_date date, txn_amount number, state varchar2(2))
      PARTITION BY RANGE (txn_date)
      SUBPARTITION BY LIST (state)
      SUBPARTITION TEMPLATE 
         (SUBPARTITION northwest VALUES ('OR', 'WA') TABLESPACE tbs_1,
          SUBPARTITION southwest VALUES ('AZ', 'UT', 'NM') TABLESPACE tbs_2,
          SUBPARTITION northeast VALUES ('NY', 'VM', 'NJ') TABLESPACE tbs_3,
          SUBPARTITION southeast VALUES ('FL', 'GA') TABLESPACE tbs_4,
          SUBPARTITION midwest VALUES ('SD', 'WI') TABLESPACE tbs_5,
          SUBPARTITION south VALUES ('AL', 'AK') TABLESPACE tbs_6,
          SUBPARTITION others VALUES (DEFAULT ) TABLESPACE tbs_7
         )
     (PARTITION q1_1999 VALUES LESS THAN ( 
TO_DATE('01-APR-1999','DD-MON-YYYY')),
      PARTITION q2_1999 VALUES LESS THAN ( 
TO_DATE('01-JUL-1999','DD-MON-YYYY')),
      PARTITION q3_1999 VALUES LESS THAN ( 
TO_DATE('01-OCT-1999','DD-MON-YYYY')),
      PARTITION q4_1999 VALUES LESS THAN ( TO_DATE('1-JAN-2000','DD-MON-YYYY'))
     );
   ```
   
   ```sql
   CREATE TABLE t AS SELECT * FROM table1@remote_site;
   INSERT INTO t SELECT * FROM table1@remote_site;
   UPDATE t SET lobcol = (SELECT lobcol FROM table1@remote_site);
   INSERT INTO table1@remote_site SELECT * FROM local_table;
   UPDATE table1@remote_site SET lobcol = (SELECT lobcol FROM local_table);
   ```
   
   ```sql
   CREATE TABLE sample_regional_sales
         (deptno number, item_no varchar2(20),
          txn_date date, txn_amount number, state varchar2(2))
     PARTITION BY RANGE (txn_date)
       SUBPARTITION BY LIST (state)
         (PARTITION q1_1999 VALUES LESS THAN 
(TO_DATE('1-APR-1999','DD-MON-YYYY'))
             TABLESPACE tbs_1
            (SUBPARTITION q1_1999_northwest VALUES ('OR', 'WA'),
             SUBPARTITION q1_1999_southwest VALUES ('AZ', 'UT', 'NM'),
             SUBPARTITION q1_1999_northeast VALUES ('NY', 'VM', 'NJ'),
             SUBPARTITION q1_1999_southeast VALUES ('FL', 'GA'),
             SUBPARTITION q1_others VALUES (DEFAULT) TABLESPACE tbs_4
            ),
          PARTITION q2_1999 VALUES LESS THAN ( 
TO_DATE('1-JUL-1999','DD-MON-YYYY'))
             TABLESPACE tbs_2
            (SUBPARTITION q2_1999_northwest VALUES ('OR', 'WA'),
             SUBPARTITION q2_1999_southwest VALUES ('AZ', 'UT', 'NM'),
             SUBPARTITION q2_1999_northeast VALUES ('NY', 'VM', 'NJ'),
             SUBPARTITION q2_1999_southeast VALUES ('FL', 'GA'),
             SUBPARTITION q2_1999_northcentral VALUES ('SD', 'WI'),
             SUBPARTITION q2_1999_southcentral VALUES ('OK', 'TX')
            ),
          PARTITION q3_1999 VALUES LESS THAN 
(TO_DATE('1-OCT-1999','DD-MON-YYYY'))
             TABLESPACE tbs_3
            (SUBPARTITION q3_1999_northwest VALUES ('OR', 'WA'),
             SUBPARTITION q3_1999_southwest VALUES ('AZ', 'UT', 'NM'),
             SUBPARTITION q3_others VALUES (DEFAULT) TABLESPACE tbs_4
            ),
          PARTITION q4_1999 VALUES LESS THAN ( 
TO_DATE('1-JAN-2000','DD-MON-YYYY'))
             TABLESPACE tbs_4
         );
   ```
   
   ```sql
   CREATE TABLE tab AS SELECT DBMS_LOB.GETLENGTH@dbs2(clob_col) len FROM 
tab@dbs2;
   CREATE TABLE tab AS SELECT LENGTH(clob_col) len FROM tab@dbs2;
   ```
   
   # Process
   1. First confirm that this is a correct oracle sql syntax, if not please 
ignore;
   2. Compare SQL definitions in Oficial SQL Doc and ShardingSphere SQL Doc;
   3. If there is any difference in ShardingSphere SQL Doc, please correct them 
by referring to the Official SQL Doc;
   4. Run mvn install the current_file_module;
   5. Check whether there are any exceptions. If indeed, please fix them. 
(Especially xxxVisitor.class);
   6. Add new corresponding SQL case in SQL Cases and expected parsed result in 
Expected Statment XML;
   7. Run SQLParserParameterizedTest to make sure no exceptions.
   
   # Relevant Skills
   1. Master JAVA language
   2. Have a basic understanding of Antlr `g4` file
   3. Be familiar with Oracle SQLs


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: 
[email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to