Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
1c074d4c
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,发现更多精彩内容 >>
提交
1c074d4c
编写于
3月 08, 2018
作者:
T
terrymanu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
support SHOW CREATE TABLE
上级
da5a67c9
变更
7
显示空白变更内容
内联
并排
Showing
7 changed file
with
110 addition
and
9 deletion
+110
-9
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/jdbc/core/statement/ShardingPreparedStatement.java
...c/core/jdbc/core/statement/ShardingPreparedStatement.java
+2
-1
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/jdbc/core/statement/ShardingStatement.java
...rdingjdbc/core/jdbc/core/statement/ShardingStatement.java
+2
-1
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/merger/DALMergeEngine.java
...main/java/io/shardingjdbc/core/merger/DALMergeEngine.java
+5
-0
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/merger/show/ShowCreateTableResultSetMerger.java
...jdbc/core/merger/show/ShowCreateTableResultSetMerger.java
+78
-0
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/parsing/parser/dialect/mysql/sql/MySQLShowParser.java
...ore/parsing/parser/dialect/mysql/sql/MySQLShowParser.java
+10
-3
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/parsing/parser/dialect/mysql/statement/ShowCreateTableStatement.java
...ser/dialect/mysql/statement/ShowCreateTableStatement.java
+11
-0
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/routing/router/ParsingSQLRouter.java
...io/shardingjdbc/core/routing/router/ParsingSQLRouter.java
+2
-4
未找到文件。
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/jdbc/core/statement/ShardingPreparedStatement.java
浏览文件 @
1c074d4c
...
...
@@ -35,6 +35,7 @@ import io.shardingjdbc.core.merger.SelectMergeEngine;
import
io.shardingjdbc.core.parsing.parser.context.GeneratedKey
;
import
io.shardingjdbc.core.parsing.parser.sql.dal.DALStatement
;
import
io.shardingjdbc.core.parsing.parser.sql.dml.insert.InsertStatement
;
import
io.shardingjdbc.core.parsing.parser.sql.dql.DQLStatement
;
import
io.shardingjdbc.core.parsing.parser.sql.dql.select.SelectStatement
;
import
io.shardingjdbc.core.routing.PreparedStatementRoutingEngine
;
import
io.shardingjdbc.core.routing.SQLExecutionUnit
;
...
...
@@ -274,7 +275,7 @@ public final class ShardingPreparedStatement extends AbstractShardingPreparedSta
if
(
null
!=
currentResultSet
)
{
return
currentResultSet
;
}
if
(
1
==
routedStatements
.
size
())
{
if
(
1
==
routedStatements
.
size
()
&&
routeResult
.
getSqlStatement
()
instanceof
DQLStatement
)
{
currentResultSet
=
routedStatements
.
iterator
().
next
().
getResultSet
();
return
currentResultSet
;
}
...
...
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/jdbc/core/statement/ShardingStatement.java
浏览文件 @
1c074d4c
...
...
@@ -31,6 +31,7 @@ import io.shardingjdbc.core.merger.SelectMergeEngine;
import
io.shardingjdbc.core.parsing.parser.context.GeneratedKey
;
import
io.shardingjdbc.core.parsing.parser.sql.dal.DALStatement
;
import
io.shardingjdbc.core.parsing.parser.sql.dml.insert.InsertStatement
;
import
io.shardingjdbc.core.parsing.parser.sql.dql.DQLStatement
;
import
io.shardingjdbc.core.parsing.parser.sql.dql.select.SelectStatement
;
import
io.shardingjdbc.core.routing.SQLExecutionUnit
;
import
io.shardingjdbc.core.routing.SQLRouteResult
;
...
...
@@ -249,7 +250,7 @@ public class ShardingStatement extends AbstractStatementAdapter {
if
(
null
!=
currentResultSet
)
{
return
currentResultSet
;
}
if
(
1
==
routedStatements
.
size
())
{
if
(
1
==
routedStatements
.
size
()
&&
routeResult
.
getSqlStatement
()
instanceof
DQLStatement
)
{
currentResultSet
=
routedStatements
.
iterator
().
next
().
getResultSet
();
return
currentResultSet
;
}
...
...
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/merger/DALMergeEngine.java
浏览文件 @
1c074d4c
...
...
@@ -17,9 +17,11 @@
package
io.shardingjdbc.core.merger
;
import
io.shardingjdbc.core.merger.show.ShowCreateTableResultSetMerger
;
import
io.shardingjdbc.core.merger.show.ShowDatabasesResultSetMerger
;
import
io.shardingjdbc.core.merger.show.ShowOtherResultSetMerger
;
import
io.shardingjdbc.core.merger.show.ShowTablesResultSetMerger
;
import
io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowCreateTableStatement
;
import
io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowDatabasesStatement
;
import
io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowTablesStatement
;
import
io.shardingjdbc.core.parsing.parser.sql.dal.DALStatement
;
...
...
@@ -52,6 +54,9 @@ public final class DALMergeEngine implements MergeEngine {
if
(
dalStatement
instanceof
ShowTablesStatement
)
{
return
new
ShowTablesResultSetMerger
(
shardingRule
,
resultSets
);
}
if
(
dalStatement
instanceof
ShowCreateTableStatement
)
{
return
new
ShowCreateTableResultSetMerger
(
shardingRule
,
resultSets
);
}
return
new
ShowOtherResultSetMerger
(
resultSets
.
get
(
0
));
}
}
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/merger/show/ShowCreateTableResultSetMerger.java
0 → 100644
浏览文件 @
1c074d4c
package
io.shardingjdbc.core.merger.show
;
import
com.google.common.base.Optional
;
import
io.shardingjdbc.core.constant.DatabaseType
;
import
io.shardingjdbc.core.merger.common.AbstractMemoryResultSetMerger
;
import
io.shardingjdbc.core.merger.common.MemoryResultSetRow
;
import
io.shardingjdbc.core.parsing.SQLParsingEngine
;
import
io.shardingjdbc.core.rule.ShardingRule
;
import
io.shardingjdbc.core.rule.TableRule
;
import
java.sql.ResultSet
;
import
java.sql.SQLException
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.Map
;
/**
* Show create table result set merger.
*
* @author zhangliang
*/
public
final
class
ShowCreateTableResultSetMerger
extends
AbstractMemoryResultSetMerger
{
private
static
final
Map
<
String
,
Integer
>
LABEL_AND_INDEX_MAP
=
new
HashMap
<>(
2
,
1
);
private
final
ShardingRule
shardingRule
;
private
final
Iterator
<
MemoryResultSetRow
>
memoryResultSetRows
;
static
{
LABEL_AND_INDEX_MAP
.
put
(
"Table"
,
1
);
LABEL_AND_INDEX_MAP
.
put
(
"Create Table"
,
2
);
}
public
ShowCreateTableResultSetMerger
(
final
ShardingRule
shardingRule
,
final
List
<
ResultSet
>
resultSets
)
throws
SQLException
{
super
(
LABEL_AND_INDEX_MAP
);
this
.
shardingRule
=
shardingRule
;
memoryResultSetRows
=
init
(
resultSets
);
}
private
Iterator
<
MemoryResultSetRow
>
init
(
final
List
<
ResultSet
>
resultSets
)
throws
SQLException
{
List
<
MemoryResultSetRow
>
result
=
new
LinkedList
<>();
for
(
ResultSet
each
:
resultSets
)
{
while
(
each
.
next
())
{
MemoryResultSetRow
memoryResultSetRow
=
new
MemoryResultSetRow
(
each
);
String
tableName
=
memoryResultSetRow
.
getCell
(
1
).
toString
();
Optional
<
TableRule
>
tableRule
=
shardingRule
.
tryFindTableRuleByActualTable
(
tableName
);
if
(
tableRule
.
isPresent
())
{
String
logicTableName
=
tableRule
.
get
().
getLogicTable
();
memoryResultSetRow
.
setCell
(
1
,
logicTableName
);
String
createTableDDL
=
memoryResultSetRow
.
getCell
(
2
).
toString
();
SQLParsingEngine
sqlParsingEngine
=
new
SQLParsingEngine
(
DatabaseType
.
MySQL
,
createTableDDL
,
shardingRule
);
String
actualTableName
=
sqlParsingEngine
.
parse
().
getTables
().
getSingleTableName
();
if
(
actualTableName
.
startsWith
(
"`"
))
{
logicTableName
=
"`"
+
logicTableName
+
"`"
;
}
memoryResultSetRow
.
setCell
(
2
,
createTableDDL
.
replaceFirst
(
actualTableName
,
logicTableName
));
result
.
add
(
memoryResultSetRow
);
}
}
}
if
(!
result
.
isEmpty
())
{
setCurrentResultSetRow
(
result
.
get
(
0
));
}
return
result
.
iterator
();
}
@Override
public
boolean
next
()
throws
SQLException
{
if
(
memoryResultSetRows
.
hasNext
())
{
setCurrentResultSetRow
(
memoryResultSetRows
.
next
());
return
true
;
}
return
false
;
}
}
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/parsing/parser/dialect/mysql/sql/MySQLShowParser.java
浏览文件 @
1c074d4c
...
...
@@ -5,6 +5,7 @@ import io.shardingjdbc.core.parsing.lexer.dialect.mysql.MySQLKeyword;
import
io.shardingjdbc.core.parsing.lexer.token.DefaultKeyword
;
import
io.shardingjdbc.core.parsing.parser.clause.TableReferencesClauseParser
;
import
io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowColumnsStatement
;
import
io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowCreateTableStatement
;
import
io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowDatabasesStatement
;
import
io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowOtherStatement
;
import
io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowTablesStatement
;
...
...
@@ -45,9 +46,15 @@ public final class MySQLShowParser extends AbstractShowParser {
DALStatement
result
=
new
ShowColumnsStatement
();
lexerEngine
.
skipIfEqual
(
DefaultKeyword
.
FROM
,
DefaultKeyword
.
IN
);
tableReferencesClauseParser
.
parseSingleTableWithoutAlias
(
result
);
lexerEngine
.
skipIfEqual
(
DefaultKeyword
.
FROM
,
DefaultKeyword
.
IN
);
if
(
lexerEngine
.
skipIfEqual
(
DefaultKeyword
.
FROM
,
DefaultKeyword
.
IN
))
{
int
beginPosition
=
lexerEngine
.
getCurrentToken
().
getEndPosition
()
-
lexerEngine
.
getCurrentToken
().
getLiterals
().
length
();
result
.
getSqlTokens
().
add
(
new
SchemaToken
(
beginPosition
,
lexerEngine
.
getCurrentToken
().
getLiterals
(),
result
.
getTables
().
getSingleTableName
()));
}
return
result
;
}
if
(
lexerEngine
.
skipIfEqual
(
DefaultKeyword
.
CREATE
)
&&
lexerEngine
.
skipIfEqual
(
DefaultKeyword
.
TABLE
))
{
DALStatement
result
=
new
ShowCreateTableStatement
();
tableReferencesClauseParser
.
parseSingleTableWithoutAlias
(
result
);
return
result
;
}
return
new
ShowOtherStatement
();
...
...
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/parsing/parser/dialect/mysql/statement/ShowCreateTableStatement.java
0 → 100644
浏览文件 @
1c074d4c
package
io.shardingjdbc.core.parsing.parser.dialect.mysql.statement
;
import
io.shardingjdbc.core.parsing.parser.sql.dal.DALStatement
;
/**
* Show create table statement.
*
* @author zhangliang
*/
public
final
class
ShowCreateTableStatement
extends
DALStatement
{
}
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/routing/router/ParsingSQLRouter.java
浏览文件 @
1c074d4c
...
...
@@ -21,13 +21,11 @@ import io.shardingjdbc.core.constant.DatabaseType;
import
io.shardingjdbc.core.jdbc.core.ShardingContext
;
import
io.shardingjdbc.core.parsing.SQLParsingEngine
;
import
io.shardingjdbc.core.parsing.parser.context.GeneratedKey
;
import
io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.DescribeStatement
;
import
io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowColumnsStatement
;
import
io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowDatabasesStatement
;
import
io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowOtherStatement
;
import
io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowTablesStatement
;
import
io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.UseStatement
;
import
io.shardingjdbc.core.parsing.parser.sql.SQLStatement
;
import
io.shardingjdbc.core.parsing.parser.sql.dal.DALStatement
;
import
io.shardingjdbc.core.parsing.parser.sql.ddl.DDLStatement
;
import
io.shardingjdbc.core.parsing.parser.sql.dml.insert.InsertStatement
;
import
io.shardingjdbc.core.parsing.parser.sql.dql.select.SelectStatement
;
...
...
@@ -125,7 +123,7 @@ public final class ParsingSQLRouter implements SQLRouter {
routingEngine
=
new
TableBroadcastRoutingEngine
(
shardingRule
,
sqlStatement
);
}
else
if
(
sqlStatement
instanceof
ShowDatabasesStatement
||
sqlStatement
instanceof
ShowTablesStatement
)
{
routingEngine
=
new
DatabaseBroadcastRoutingEngine
(
shardingRule
);
}
else
if
(
sqlStatement
instanceof
ShowColumnsStatement
||
sqlStatement
instanceof
ShowOtherStatement
||
sqlStatement
instanceof
Describe
Statement
)
{
}
else
if
(
sqlStatement
instanceof
DAL
Statement
)
{
routingEngine
=
new
UnicastRoutingEngine
(
shardingRule
,
sqlStatement
);
}
else
if
(
tableNames
.
isEmpty
()
&&
sqlStatement
instanceof
SelectStatement
)
{
routingEngine
=
new
UnicastRoutingEngine
(
shardingRule
,
sqlStatement
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录