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

   ## Background
   
   Hi community.\
   The ShardingSphere SQL parser engine helps users to parse SQL to create the 
AST (Abstract Syntax Tree) and visit the AST to get SQLStatement (Java Object). 
Currently, we are planning to enhance the support for Doris SQL parsing in 
ShardingSphere.
   
   More details:
   
<https://shardingsphere.apache.org/document/current/en/reference/sharding/parse/>
  
   
   
   ## Issue Background Explanation
   
   The current issue involves using a custom web scraping script to fetch SQL 
cases from the official website of a corresponding database. These SQL cases 
are then passed to ShardingSphere's parsing engine for analysis. For SQL cases 
that fail to be parsed successfully, every 3 to 5 SQL cases are grouped 
together as an issue.
   1. Since  SQL cases are obtained through web scraping, it cannot be 
guaranteed that all SQL cases are correct. Please follow the following process 
to handle this pull request (PR).
   2. Some SQL cases may have already been fixed in other PRs. For cases that 
can already be executed successfully, simply leave a comment to ignore them.
   3. If a SQL case can be executed successfully without any code changes, 
there is no need to add a corresponding test assert file.  
   
   
   ## Task
   
   This issue is to support more Doris sql parsing, as follows:
   
   ```
   ADMIN SET REPLICA STATUS PROPERTIES("tablet_id" = "10003", "backend_id" = 
"10001", "status" = "drop")
   ```
   
   - [ ] 
[link](https://doris.apache.org/zh-CN/docs/dev/sql-manual/sql-statements/Database-Administration-Statements/ADMIN-SET-REPLICA-STATUS/)
   
   ```
   ADMIN SET REPLICA STATUS PROPERTIES("tablet_id" = "10003", "backend_id" = 
"10001", "status" = "ok")
   ```
   
   - [ ] 
[link](https://doris.apache.org/zh-CN/docs/dev/sql-manual/sql-statements/Database-Administration-Statements/ADMIN-SET-REPLICA-STATUS/)
   
   ```
   ADMIN, SET, REPLICA, STATUS
   ```
   
   - [ ] 
[link](https://doris.apache.org/zh-CN/docs/dev/sql-manual/sql-statements/Database-Administration-Statements/ADMIN-SET-REPLICA-STATUS/)
   
   ```
   T array_first(lambda, ARRAY<T>)
   ```
   
   - [ ] 
[link](https://doris.apache.org/zh-CN/docs/dev/sql-manual/sql-functions/array-functions/array-first/)
   
   ```
   BITXOR
   ```
   
   - [ ] 
[link](https://doris.apache.org/docs/1.2/sql-manual/sql-functions/bitwise-functions/bitxor/)
   
   ```
   BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, LARGEINT, FLOAT, DOUBLE, DECIMAL, 
DATE, DATEV2, DATETIME, DATETIMEV2, CHAR, VARCHAR, STRING
   ```
   
   - [ ] 
[link](https://doris.apache.org/zh-CN/docs/dev/sql-manual/sql-types/Data-Types/ARRAY/)
   
   ```
   ARRAY
   ```
   
   - [ ] 
[link](https://doris.apache.org/zh-CN/docs/dev/sql-manual/sql-types/Data-Types/ARRAY/)
   
   ```
   DOUBLE ST_Area_Square_Meters(GEOMETRY geo) DOUBLE ST_Area_Square_Km(GEOMETRY 
geo)
   ```
   
   - [ ] 
[link](https://doris.apache.org/docs/dev/sql-manual/sql-functions/spatial-functions/st-area/)
   
   ```
   CREATE SQL_BLOCK_RULE test_rule PROPERTIES(   "sql"="select \\* from 
order_analysis",   "global"="false",   "enable"="true" )
   ```
   
   - [ ] 
[link](https://doris.apache.org/zh-CN/docs/dev/sql-manual/sql-statements/Data-Definition-Statements/Create/CREATE-SQL-BLOCK-RULE/)
   
   ```
   CREATE SQL_BLOCK_RULE test_rule2 PROPERTIES (    "partition_num" = "30",    
"cardinality" = "10000000000",    "global" = "false",    "enable" = "true" )
   ```
   
   - [ ] 
[link](https://doris.apache.org/zh-CN/docs/dev/sql-manual/sql-statements/Data-Definition-Statements/Create/CREATE-SQL-BLOCK-RULE/)
   
   
   
   
   ## Overall Procedure
   
   If you intend to participate in fixing this issue, please feel free to leave 
a comment below the issue. Community members will assign the issue accordingly. 
 
   
   ><u>For example, you can leave a comment like this: "Hi, please assign this 
issue to me. Thank you!"</u>
   
   Once you have claimed the issue, please review the syntax of the SQL on the 
official website of the corresponding database. Execute the SQL on the 
respective database to ensure the correctness of the SQL syntax.
   
   ><u>You can check the corresponding source of each SQL case on the official 
database website by clicking on the link provided below each case.</u> 
   
   Next, execute the problematic SQL cases mentioned above in the database (you 
can quickly start the                     corresponding database using the 
Docker image for that database, and then connect to it using 
   a client you are  familiar with), to ensure that the SQL syntax itself is 
correct.  
   
   ## Fixing ANTLR Grammar Parsing Issue
   
   Once you have confirmed the correctness of the SQL syntax, you can validate 
and fix the grammar parsing issue in ShardingSphere. 
   
   >If you are using IntelliJ IDEA, you will need to install the ANTLR plugin 
before proceeding.
   
   If it is an ANTLR parsing error message, try to repair the `.g4` file by 
comparing it with the official database syntax until the SQL can be correctly 
parsed by ANTLR.
   
   When there is no error message in the ANTLR Preview window, it means that 
ANTLR can correctly parse the SQL.  
   
   ## Visitor problem fix
   
   After ANTLR parses SQL into an abstract syntax tree, ShardingSphere will 
access the abstract syntax tree through Visitor and extract the required 
information.
   If you need to extract Segments, you need to first execute:
    ```
    mvn -T 2C clean install -DskipTests
    ```  
    Under the shardingsphere-parser module to compile the entire parser module.\
   Then rewrite the corresponding visit method in SQLStatementVisitorr as 
needed to extract the corresponding Segment.
   
   ## Add assertion test file  
   
   After the above SQL parsing problem is repaired, the corresponding Test 
needs to be added. 
   The steps are as follows:
   1. Add the corresponding `sql-case` in the `sql/supported` directory.
   2. Add case assertions in the case directory of the 
`shardingsphere-test-it-parser` module.
   3.  Run 
`org.apache.shardingsphere.test.it.sql.parser.internal.InternalSQLParserIT`\
    After SQL Parser IT runs successfully, you can submit a PR.   
   
   ## Relevant Skills
   
   1. Master JAVA language
   2. Have a basic understanding of Antlr g4 file
   3. Be familiar with Doris 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