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

   # 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 MATERIALIZED VIEW LOG ON sales WITH ROWID;
   CREATE MATERIALIZED VIEW LOG ON times WITH ROWID;
   CREATE MATERIALIZED VIEW LOG ON customers WITH ROWID;
   CREATE MATERIALIZED VIEW detail_sales_mv 
   PARALLEL BUILD IMMEDIATE
   REFRESH FAST AS
   SELECT s.rowid "sales_rid", t.rowid "times_rid", c.rowid "customers_rid",
          c.cust_id, c.cust_last_name, s.amount_sold, s.quantity_sold, s.time_id
   FROM sales s, times t, customers c 
   WHERE  s.cust_id = c.cust_id(+) AND s.time_id = t.time_id(+);
   ```
   
   ```sql
   CREATE MATERIALIZED VIEW LOG ON sales WITH SEQUENCE, ROWID
   (prod_id, cust_id, time_id, channel_id, promo_id, 
    quantity_sold, amount_sold) INCLUDING NEW VALUES;
   ```
   
   ```sql
   CREATE MATERIALIZED VIEW LOG ON sales WITH SEQUENCE, ROWID
   (prod_id, cust_id, time_id, channel_id, promo_id, quantity_sold, amount_sold)
   INCLUDING NEW VALUES;
   
   CREATE MATERIALIZED VIEW sum_sales
   PARALLEL
   BUILD IMMEDIATE  
   REFRESH FAST ON COMMIT AS  
   SELECT s.prod_id, s.time_id, COUNT(*) AS count_grp,
      SUM(s.amount_sold) AS sum_dollar_sales,
      COUNT(s.amount_sold) AS count_dollar_sales,
      SUM(s.quantity_sold) AS sum_quantity_sales,
      COUNT(s.quantity_sold) AS count_quantity_sales
   FROM sales s
   GROUP BY s.prod_id, s.time_id;
   ```
   
   ```sql
   CREATE MATERIALIZED VIEW LOG ON times
      WITH ROWID, SEQUENCE (time_id, calendar_year)
      INCLUDING NEW VALUES;
   
   CREATE MATERIALIZED VIEW LOG ON products
      WITH ROWID, SEQUENCE (prod_id)
      INCLUDING NEW VALUES;
   
   CREATE MATERIALIZED VIEW sales_mv
      BUILD IMMEDIATE
      REFRESH FAST ON COMMIT
      AS SELECT t.calendar_year, p.prod_id, 
         SUM(s.amount_sold) AS sum_sales
         FROM times t, products p, sales s
         WHERE t.time_id = s.time_id AND p.prod_id = s.prod_id
         GROUP BY t.calendar_year, p.prod_id;
   ```
   
   ```sql
   CREATE MATERIALIZED VIEW cust_postal_mv
   ENABLE QUERY REWRITE AS
   SELECT 1 AS marker, c.cust_gender, c.cust_city, c.cust_postal_code
   FROM customers c
   WHERE c.cust_city = 'Los Angeles'
   UNION ALL
   SELECT 2 AS marker, c.cust_gender, c.cust_city, c.cust_postal_code
   FROM customers c
   WHERE c.cust_city = 'San Francisco';
   ```
   
   # 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