1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.distsql.parser.core.utility;
19
20 import org.antlr.v4.runtime.misc.ParseCancellationException;
21 import org.antlr.v4.runtime.tree.ErrorNode;
22 import org.apache.shardingsphere.sql.parser.api.ASTNode;
23 import org.apache.shardingsphere.sql.parser.core.ParseASTNode;
24 import org.apache.shardingsphere.sql.parser.core.SQLParserFactory;
25 import org.apache.shardingsphere.sql.parser.exception.SQLParsingException;
26 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
27
28
29
30
31 public final class UtilityDistSQLStatementParserEngine {
32
33
34
35
36
37
38
39 public SQLStatement parse(final String sql) {
40 ASTNode astNode = parseToASTNode(sql);
41 return getSQLStatement(sql, (ParseASTNode) astNode);
42 }
43
44 private ASTNode parseToASTNode(final String sql) {
45 try {
46 return SQLParserFactory.newInstance(sql, UtilityDistSQLLexer.class, UtilityDistSQLParser.class).parse();
47 } catch (final ParseCancellationException ignored) {
48 throw new SQLParsingException(sql);
49 }
50 }
51
52 private SQLStatement getSQLStatement(final String sql, final ParseASTNode parseASTNode) {
53 if (parseASTNode.getRootNode() instanceof ErrorNode) {
54 throw new SQLParsingException(sql);
55 }
56 return (SQLStatement) (new UtilityDistSQLStatementVisitor()).visit(parseASTNode.getRootNode());
57 }
58 }