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

   # 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 sales_transactions_ext
   (PROD_ID NUMBER,
    CUST_ID NUMBER,
    TIME_ID DATE,
    CHANNEL_ID CHAR,
    PROMO_ID NUMBER,
    QUANTITY_SOLD NUMBER,
    AMOUNT_SOLD NUMBER(10,2),
    UNIT_COST NUMBER(10,2),
    UNIT_PRICE NUMBER(10,2))
   ORGANIZATION external
   (TYPE oracle_loader
    DEFAULT DIRECTORY data_file_dir
    ACCESS PARAMETERS
     (RECORDS DELIMITED BY NEWLINE
      CHARACTERSET AL32UTF8
      PREPROCESSOR exec_file_dir:'zcat'
      BADFILE log_file_dir:'sh_sales.bad_xt'
      LOGFILE log_file_dir:'sh_sales.log_xt'
      FIELDS TERMINATED BY "|" LDRTRIM
     ( PROD_ID,
       CUST_ID,
       TIME_ID,
       CHANNEL_ID,
       PROMO_ID,
       QUANTITY_SOLD,
       AMOUNT_SOLD,
       UNIT_COST,
       UNIT_PRICE))
    location ('sh_sales.dat.gz')
   )REJECT LIMIT UNLIMITED;
   ```
   
   ```sql
   CREATE TABLE sales(acct_no NUMBER(5), 
                      acct_name CHAR(30), 
                      amount_of_sale NUMBER(6), 
                      week_no INTEGER,
                      sale_details VARCHAR2(1000),
                PRIMARY KEY (acct_no, acct_name, week_no)) 
        ORGANIZATION INDEX 
                INCLUDING week_no
        OVERFLOW
             PARTITION BY HASH (week_no)
                PARTITIONS 16
                STORE IN (ts1, ts2, ts3, ts4)
                OVERFLOW STORE IN (ts3, ts6, ts9);
   ```
   
   ```sql
   CREATE TABLE sales_transactions_ext
   (PROD_ID NUMBER, CUST_ID NUMBER,
    TIME_ID DATE, CHANNEL_ID NUMBER,
    PROMO_ID NUMBER, QUANTITY_SOLD NUMBER,
    AMOUNT_SOLD NUMBER(10,2), UNIT_COST NUMBER(10,2),
    UNIT_PRICE NUMBER(10,2))
   ORGANIZATION external (TYPE oracle_loader
     DEFAULT DIRECTORY data_file_dir ACCESS PARAMETERS
     (RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCII
       PREPROCESSOR EXECDIR:'zcat' 
       BADFILE log_file_dir:'sh_sales.bad_xt'
       LOGFILE log_file_dir:'sh_sales.log_xt'
       FIELDS TERMINATED BY "|" LDRTRIM
       ( PROD_ID, CUST_ID,
         TIME_ID         DATE(10) "YYYY-MM-DD", 
         CHANNEL_ID, PROMO_ID, QUANTITY_SOLD, AMOUNT_SOLD,
         UNIT_COST, UNIT_PRICE))
     location ('sh_sales.gz') 
   )REJECT LIMIT UNLIMITED;
   ```
   
   ```sql
   CREATE TABLE shipments
   ( order_id      NUMBER NOT NULL
   , order_date    DATE NOT NULL
   , delivery_date DATE NOT NULL
   , customer_id   NUMBER NOT NULL
   , sales_amount  NUMBER NOT NULL
   )
   PARTITION BY RANGE (order_date)
   SUBPARTITION BY RANGE (delivery_date)
   ( PARTITION p_2006_jul VALUES LESS THAN 
(TO_DATE('01-AUG-2006','dd-MON-yyyy'))
     ( SUBPARTITION p06_jul_e VALUES LESS THAN 
(TO_DATE('15-AUG-2006','dd-MON-yyyy'))
     , SUBPARTITION p06_jul_a VALUES LESS THAN 
(TO_DATE('01-SEP-2006','dd-MON-yyyy'))
     , SUBPARTITION p06_jul_l VALUES LESS THAN (MAXVALUE)
     )
   , PARTITION p_2006_aug VALUES LESS THAN 
(TO_DATE('01-SEP-2006','dd-MON-yyyy'))
     ( SUBPARTITION p06_aug_e VALUES LESS THAN 
(TO_DATE('15-SEP-2006','dd-MON-yyyy'))
     , SUBPARTITION p06_aug_a VALUES LESS THAN 
(TO_DATE('01-OCT-2006','dd-MON-yyyy'))
     , SUBPARTITION p06_aug_l VALUES LESS THAN (MAXVALUE)
     )
   , PARTITION p_2006_sep VALUES LESS THAN 
(TO_DATE('01-OCT-2006','dd-MON-yyyy'))
     ( SUBPARTITION p06_sep_e VALUES LESS THAN 
(TO_DATE('15-OCT-2006','dd-MON-yyyy'))
     , SUBPARTITION p06_sep_a VALUES LESS THAN 
(TO_DATE('01-NOV-2006','dd-MON-yyyy'))
     , SUBPARTITION p06_sep_l VALUES LESS THAN (MAXVALUE)
     )
   , PARTITION p_2006_oct VALUES LESS THAN 
(TO_DATE('01-NOV-2006','dd-MON-yyyy'))
     ( SUBPARTITION p06_oct_e VALUES LESS THAN 
(TO_DATE('15-NOV-2006','dd-MON-yyyy'))
     , SUBPARTITION p06_oct_a VALUES LESS THAN 
(TO_DATE('01-DEC-2006','dd-MON-yyyy'))
     , SUBPARTITION p06_oct_l VALUES LESS THAN (MAXVALUE)
     )
   , PARTITION p_2006_nov VALUES LESS THAN 
(TO_DATE('01-DEC-2006','dd-MON-yyyy'))
     ( SUBPARTITION p06_nov_e VALUES LESS THAN 
(TO_DATE('15-DEC-2006','dd-MON-yyyy'))
     , SUBPARTITION p06_nov_a VALUES LESS THAN 
(TO_DATE('01-JAN-2007','dd-MON-yyyy'))
     , SUBPARTITION p06_nov_l VALUES LESS THAN (MAXVALUE)
     )
   , PARTITION p_2006_dec VALUES LESS THAN 
(TO_DATE('01-JAN-2007','dd-MON-yyyy'))
     ( SUBPARTITION p06_dec_e VALUES LESS THAN 
(TO_DATE('15-JAN-2007','dd-MON-yyyy'))
     , SUBPARTITION p06_dec_a VALUES LESS THAN 
(TO_DATE('01-FEB-2007','dd-MON-yyyy'))
     , SUBPARTITION p06_dec_l VALUES LESS THAN (MAXVALUE)
     )
   );
   ```
   
   ```sql
   CREATE TABLE scubagear
        (id NUMBER,
         name VARCHAR2 (60))
      PARTITION BY HASH (id)
      PARTITIONS 4 
      STORE IN (gear1, gear2, gear3, gear4);
   ```
   
   # 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