Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
e240277d
Shardingsphere
项目概览
apache
/
Shardingsphere
通知
56
Star
3
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Shardingsphere
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
e240277d
编写于
11月 02, 2020
作者:
J
Juan Pan(Trista)
提交者:
GitHub
11月 02, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
New API for sql parser engine (#8008)
* New API for sql parser engine * check style * Add EXECUTORS
上级
400e32c6
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
26 addition
and
27 deletion
+26
-27
shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngine.java
...dingsphere/infra/parser/sql/SQLStatementParserEngine.java
+9
-6
shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLParserEngine.java
...apache/shardingsphere/sql/parser/api/SQLParserEngine.java
+8
-11
shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLVisitorEngine.java
...pache/shardingsphere/sql/parser/api/SQLVisitorEngine.java
+7
-6
shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/engine/SQLParserParameterizedTest.java
...rser/parameterized/engine/SQLParserParameterizedTest.java
+1
-3
shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/engine/UnsupportedSQLParserParameterizedTest.java
...terized/engine/UnsupportedSQLParserParameterizedTest.java
+1
-1
未找到文件。
shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngine.java
浏览文件 @
e240277d
...
...
@@ -19,8 +19,6 @@ package org.apache.shardingsphere.infra.parser.sql;
import
com.google.common.cache.Cache
;
import
com.google.common.cache.CacheBuilder
;
import
lombok.RequiredArgsConstructor
;
import
org.antlr.v4.runtime.tree.ParseTree
;
import
org.apache.shardingsphere.sql.parser.api.SQLParserEngine
;
import
org.apache.shardingsphere.sql.parser.api.SQLVisitorEngine
;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement
;
...
...
@@ -30,13 +28,19 @@ import java.util.Optional;
/**
* SQL statement parser engine.
*/
@RequiredArgsConstructor
public
final
class
SQLStatementParserEngine
{
private
final
String
databaseTypeName
;
private
final
SQLParserEngine
parserEngine
;
private
final
SQLVisitorEngine
visitorEngine
;
private
final
Cache
<
String
,
SQLStatement
>
cache
=
CacheBuilder
.
newBuilder
().
softValues
().
initialCapacity
(
2000
).
maximumSize
(
65535
).
build
();
public
SQLStatementParserEngine
(
final
String
databaseTypeName
)
{
parserEngine
=
new
SQLParserEngine
(
databaseTypeName
);
visitorEngine
=
new
SQLVisitorEngine
(
databaseTypeName
,
"STATEMENT"
);
}
/**
* Parse to SQL statement.
*
...
...
@@ -58,7 +62,6 @@ public final class SQLStatementParserEngine {
}
private
SQLStatement
parse
(
final
String
sql
)
{
ParseTree
parseTree
=
SQLParserEngine
.
parse
(
databaseTypeName
,
sql
,
false
);
return
SQLVisitorEngine
.
visit
(
databaseTypeName
,
"STATEMENT"
,
parseTree
);
return
visitorEngine
.
visit
(
parserEngine
.
parse
(
sql
,
false
));
}
}
shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLParserEngine.java
浏览文件 @
e240277d
...
...
@@ -17,8 +17,7 @@
package
org.apache.shardingsphere.sql.parser.api
;
import
lombok.AccessLevel
;
import
lombok.NoArgsConstructor
;
import
lombok.RequiredArgsConstructor
;
import
org.antlr.v4.runtime.tree.ParseTree
;
import
org.apache.shardingsphere.sql.parser.core.parser.SQLParserExecutor
;
...
...
@@ -28,24 +27,22 @@ import java.util.concurrent.ConcurrentHashMap;
/**
* SQL parser engine.
*/
@
NoArgsConstructor
(
access
=
AccessLevel
.
PRIVATE
)
@
RequiredArgsConstructor
public
final
class
SQLParserEngine
{
private
static
final
Map
<
String
,
SQLParserExecutor
>
ENGINES
=
new
ConcurrentHashMap
<>();
private
static
final
Map
<
String
,
SQLParserExecutor
>
EXECUTORS
=
new
ConcurrentHashMap
<>();
private
final
String
databaseType
;
/**
* Parse SQL.
*
* @param databaseType database type
* @param sql SQL to be parsed
* @param useCache whether use cache
* @return parse tree
*/
public
static
ParseTree
parse
(
final
String
databaseType
,
final
String
sql
,
final
boolean
useCache
)
{
return
getSQLParserExecutor
(
databaseType
).
parse
(
sql
,
useCache
);
}
private
static
SQLParserExecutor
getSQLParserExecutor
(
final
String
databaseType
)
{
return
ENGINES
.
containsKey
(
databaseType
)
?
ENGINES
.
get
(
databaseType
)
:
ENGINES
.
computeIfAbsent
(
databaseType
,
SQLParserExecutor:
:
new
);
public
ParseTree
parse
(
final
String
sql
,
final
boolean
useCache
)
{
SQLParserExecutor
executor
=
EXECUTORS
.
containsKey
(
databaseType
)
?
EXECUTORS
.
get
(
databaseType
)
:
EXECUTORS
.
computeIfAbsent
(
databaseType
,
SQLParserExecutor:
:
new
);
return
executor
.
parse
(
sql
,
useCache
);
}
}
shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLVisitorEngine.java
浏览文件 @
e240277d
...
...
@@ -17,8 +17,7 @@
package
org.apache.shardingsphere.sql.parser.api
;
import
lombok.AccessLevel
;
import
lombok.NoArgsConstructor
;
import
lombok.RequiredArgsConstructor
;
import
org.antlr.v4.runtime.tree.ParseTree
;
import
org.antlr.v4.runtime.tree.ParseTreeVisitor
;
import
org.apache.shardingsphere.sql.parser.core.visitor.SQLVisitorFactory
;
...
...
@@ -27,19 +26,21 @@ import org.apache.shardingsphere.sql.parser.core.visitor.SQLVisitorRule;
/**
* SQL visitor engine.
*/
@
NoArgsConstructor
(
access
=
AccessLevel
.
PRIVATE
)
@
RequiredArgsConstructor
public
final
class
SQLVisitorEngine
{
private
final
String
databaseType
;
private
final
String
visitorType
;
/**
* Visit parse tree.
*
* @param databaseType database type
* @param visitorType SQL visitor type
* @param parseTree parse tree
* @param <T> type of SQL visitor result
* @return SQL visitor result
*/
public
static
<
T
>
T
visit
(
final
String
databaseType
,
final
String
visitorType
,
final
ParseTree
parseTree
)
{
public
<
T
>
T
visit
(
final
ParseTree
parseTree
)
{
ParseTreeVisitor
<
T
>
visitor
=
SQLVisitorFactory
.
newInstance
(
databaseType
,
visitorType
,
SQLVisitorRule
.
valueOf
(
parseTree
.
getClass
()));
return
parseTree
.
accept
(
visitor
);
}
...
...
shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/engine/SQLParserParameterizedTest.java
浏览文件 @
e240277d
...
...
@@ -18,7 +18,6 @@
package
org.apache.shardingsphere.test.sql.parser.parameterized.engine
;
import
lombok.RequiredArgsConstructor
;
import
org.antlr.v4.runtime.tree.ParseTree
;
import
org.apache.shardingsphere.sql.parser.api.SQLParserEngine
;
import
org.apache.shardingsphere.sql.parser.api.SQLVisitorEngine
;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement
;
...
...
@@ -85,7 +84,6 @@ public abstract class SQLParserParameterizedTest {
}
private
SQLStatement
parseSQLStatement
(
final
String
databaseType
,
final
String
sql
)
{
ParseTree
parseTree
=
SQLParserEngine
.
parse
(
databaseType
,
sql
,
false
);
return
SQLVisitorEngine
.
visit
(
databaseType
,
"STATEMENT"
,
parseTree
);
return
new
SQLVisitorEngine
(
databaseType
,
"STATEMENT"
).
visit
(
new
SQLParserEngine
(
databaseType
).
parse
(
sql
,
false
));
}
}
shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/engine/UnsupportedSQLParserParameterizedTest.java
浏览文件 @
e240277d
...
...
@@ -47,6 +47,6 @@ public abstract class UnsupportedSQLParserParameterizedTest {
public
final
void
assertUnsupportedSQL
()
{
String
sql
=
SQL_CASES_LOADER
.
getSQL
(
sqlCaseId
,
sqlCaseType
,
Collections
.
emptyList
());
String
databaseType
=
"H2"
.
equals
(
this
.
databaseType
)
?
"MySQL"
:
this
.
databaseType
;
SQLParserEngine
.
parse
(
databaseType
,
sql
,
false
);
new
SQLParserEngine
(
databaseType
).
parse
(
sql
,
false
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录