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

   # 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 OR REPLACE VIEW order_info AS
      SELECT c.customer_id, c.cust_last_name, c.cust_first_name,
             o.order_id, o.order_date, o.order_status
      FROM customers c, orders o
      WHERE c.customer_id = o.customer_id;
   
   CREATE OR REPLACE TRIGGER order_info_insert
      INSTEAD OF INSERT ON order_info
      DECLARE
        duplicate_info EXCEPTION;
        PRAGMA EXCEPTION_INIT (duplicate_info, -00001);
      BEGIN
        INSERT INTO customers
          (customer_id, cust_last_name, cust_first_name)
        VALUES (
        :new.customer_id,
        :new.cust_last_name,
        :new.cust_first_name);
      INSERT INTO orders (order_id, order_date, customer_id)
      VALUES (
        :new.order_id,
        :new.order_date,
        :new.customer_id);
      EXCEPTION
        WHEN duplicate_info THEN
          RAISE_APPLICATION_ERROR (
            num=> -20107,
            msg=> 'Duplicate customer or order ID');
      END order_info_insert;
   ```
   
   ```sql
   CREATE OR REPLACE VIEW sales_marketing_model (year, ols)
      AS SELECT year,
           OLS_Regression( 
           /* mean_y => */
           AVG(sales),
           /* variance_y => */
           var_pop(sales),
           /* MV mean vector => */
           UTL_NLA_ARRAY_DBL (AVG(media),AVG(promo),
                              AVG(disct),AVG(dmail)),
           /* VCM variance covariance matrix => */
           UTL_NLA_ARRAY_DBL (var_pop(media),covar_pop(media,promo),
                              covar_pop(media,disct),covar_pop(media,dmail),
                              var_pop(promo),covar_pop(promo,disct),
                              covar_pop(promo,dmail),var_pop(disct),
                              covar_pop(disct,dmail),var_pop(dmail)),
           /* CV covariance vector => */
     UTL_NLA_ARRAY_DBL (covar_pop(sales,media),covar_pop(sales,promo),
                              covar_pop(sales,disct),covar_pop(sales,dmail)))
    FROM sales_marketing_data
    GROUP BY year;
   ```
   
   ```sql
   CREATE OR REPLACE VIEW sales_rollup_time
   AS
   SELECT country_name country, calendar_year year, calendar_quarter_desc 
quarter,
   GROUPING_ID(calendar_year, calendar_quarter_desc) gid, SUM(amount_sold) sale,
   COUNT(amount_sold) cnt
   FROM sales, times, customers, countries
   WHERE sales.time_id = times.time_id AND sales.cust_id = customers.cust_id
     AND customers.country_id = countries.country_id
   GROUP BY country_name, calendar_year, ROLLUP(calendar_quarter_desc)
   ORDER BY gid, country, year, quarter;
   
   SELECT country, year, quarter, sale, csum
   FROM sales_rollup_time
   WHERE country IN ('United States of America', 'United Kingdom')
   MODEL DIMENSION BY (country, year, quarter)
   MEASURES (sale, gid, 0 csum)
   (
   csum[any, any, any] =
     SUM(sale) OVER (PARTITION BY country, DECODE(gid,0,year,null)
   ORDER BY year, quarter
   ROWS UNBOUNDED PRECEDING)
   )
   ORDER BY country, gid, year, quarter;
   ```
   
   ```sql
   CREATE OR REPLACE VIEW sales_staff AS
        SELECT empno, ename, deptno
        FROM emp
        WHERE deptno = 30
        WITH CHECK OPTION CONSTRAINT sales_staff_cnst;
   ```
   
   ```sql
   CREATE OR REPLACE VIEW oc_inventories OF inventory_typ
    WITH OBJECT OID (product_id)
    AS SELECT i.product_id,
              warehouse_typ(w.warehouse_id, w.warehouse_name, w.location_id),
              i.quantity_on_hand
       FROM inventories i, warehouses w
       WHERE i.warehouse_id=w.warehouse_id;
   ```
   
   # 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