Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
12700b2a
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,体验更适合开发者的 AI 搜索 >>
提交
12700b2a
编写于
7月 24, 2018
作者:
T
terrymanu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor JDBCBackendHandler
上级
6790723a
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
93 addition
and
68 deletion
+93
-68
sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/JDBCBackendHandler.java
...gsphere/proxy/backend/common/jdbc/JDBCBackendHandler.java
+2
-17
sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/statement/JDBCStatementBackendHandler.java
...nd/common/jdbc/statement/JDBCStatementBackendHandler.java
+1
-30
sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/text/JDBCTextBackendHandler.java
...roxy/backend/common/jdbc/text/JDBCTextBackendHandler.java
+1
-18
sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/wrapper/JDBCExecutorWrapper.java
...roxy/backend/common/jdbc/wrapper/JDBCExecutorWrapper.java
+12
-0
sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/wrapper/PreparedStatementExecutorWrapper.java
...common/jdbc/wrapper/PreparedStatementExecutorWrapper.java
+40
-0
sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/wrapper/StatementExecutorWrapper.java
...backend/common/jdbc/wrapper/StatementExecutorWrapper.java
+34
-0
sharding-proxy/src/main/java/io/shardingsphere/proxy/transport/mysql/packet/command/statement/execute/ComStmtExecutePacket.java
...acket/command/statement/execute/ComStmtExecutePacket.java
+1
-1
sharding-proxy/src/main/java/io/shardingsphere/proxy/transport/mysql/packet/command/text/fieldlist/ComFieldListPacket.java
...sql/packet/command/text/fieldlist/ComFieldListPacket.java
+1
-1
sharding-proxy/src/main/java/io/shardingsphere/proxy/transport/mysql/packet/command/text/query/ComQueryPacket.java
...sport/mysql/packet/command/text/query/ComQueryPacket.java
+1
-1
未找到文件。
sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/JDBCBackendHandler.java
浏览文件 @
12700b2a
...
...
@@ -18,18 +18,15 @@
package
io.shardingsphere.proxy.backend.common.jdbc
;
import
com.google.common.base.Optional
;
import
io.shardingsphere.core.constant.DatabaseType
;
import
io.shardingsphere.core.constant.SQLType
;
import
io.shardingsphere.core.constant.TransactionType
;
import
io.shardingsphere.core.exception.ShardingException
;
import
io.shardingsphere.core.merger.MergeEngineFactory
;
import
io.shardingsphere.core.merger.MergedResult
;
import
io.shardingsphere.core.parsing.SQLJudgeEngine
;
import
io.shardingsphere.core.parsing.parser.sql.SQLStatement
;
import
io.shardingsphere.core.parsing.parser.sql.dml.insert.InsertStatement
;
import
io.shardingsphere.core.routing.SQLExecutionUnit
;
import
io.shardingsphere.core.routing.SQLRouteResult
;
import
io.shardingsphere.core.routing.SQLUnit
;
import
io.shardingsphere.core.routing.router.masterslave.MasterSlaveRouter
;
import
io.shardingsphere.proxy.backend.common.BackendHandler
;
import
io.shardingsphere.proxy.backend.common.jdbc.execute.JDBCExecuteEngine
;
import
io.shardingsphere.proxy.backend.common.jdbc.execute.response.ExecuteQueryResponse
;
...
...
@@ -52,7 +49,6 @@ import javax.transaction.Status;
import
javax.transaction.SystemException
;
import
java.sql.SQLException
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
/**
...
...
@@ -94,7 +90,7 @@ public abstract class JDBCBackendHandler implements BackendHandler {
@Override
public
final
CommandResponsePackets
execute
()
{
try
{
return
execute
(
ruleRegistry
.
isMasterSlaveOnly
()
?
doMasterSlaveRoute
()
:
doShardingRoute
(
));
return
execute
(
executeEngine
.
getJdbcExecutorWrapper
().
route
(
sql
,
DatabaseType
.
MySQL
));
}
catch
(
final
SQLException
ex
)
{
return
new
CommandResponsePackets
(
new
ErrPacket
(
1
,
ex
));
}
catch
(
final
SystemException
|
ShardingException
ex
)
{
...
...
@@ -138,17 +134,6 @@ public abstract class JDBCBackendHandler implements BackendHandler {
return
result
;
}
private
SQLRouteResult
doMasterSlaveRoute
()
{
SQLStatement
sqlStatement
=
new
SQLJudgeEngine
(
sql
).
judge
();
SQLRouteResult
result
=
new
SQLRouteResult
(
sqlStatement
);
for
(
String
each
:
new
MasterSlaveRouter
(
ruleRegistry
.
getMasterSlaveRule
(),
ruleRegistry
.
isShowSQL
()).
route
(
sql
))
{
result
.
getExecutionUnits
().
add
(
new
SQLExecutionUnit
(
each
,
new
SQLUnit
(
sql
,
Collections
.<
List
<
Object
>>
emptyList
())));
}
return
result
;
}
protected
abstract
SQLRouteResult
doShardingRoute
();
private
Optional
<
SQLException
>
findSQLException
(
final
Exception
exception
)
{
if
(
null
==
exception
.
getCause
())
{
return
Optional
.
absent
();
...
...
sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/statement/JDBCStatementBackendHandler.java
浏览文件 @
12700b2a
...
...
@@ -17,19 +17,14 @@
package
io.shardingsphere.proxy.backend.common.jdbc.statement
;
import
io.shardingsphere.core.constant.DatabaseType
;
import
io.shardingsphere.core.routing.PreparedStatementRoutingEngine
;
import
io.shardingsphere.core.routing.SQLRouteResult
;
import
io.shardingsphere.proxy.backend.common.jdbc.JDBCBackendHandler
;
import
io.shardingsphere.proxy.backend.common.jdbc.execute.JDBCExecuteEngineFactory
;
import
io.shardingsphere.proxy.config.RuleRegistry
;
import
io.shardingsphere.proxy.transport.common.packet.DatabasePacket
;
import
io.shardingsphere.proxy.transport.mysql.constant.ColumnType
;
import
io.shardingsphere.proxy.transport.mysql.packet.command.statement.PreparedStatementRegistry
;
import
io.shardingsphere.proxy.transport.mysql.packet.command.statement.execute.BinaryResultSetRowPacket
;
import
io.shardingsphere.proxy.transport.mysql.packet.command.statement.execute.PreparedStatementParameter
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
...
...
@@ -40,32 +35,8 @@ import java.util.List;
*/
public
final
class
JDBCStatementBackendHandler
extends
JDBCBackendHandler
{
private
final
List
<
PreparedStatementParameter
>
preparedStatementParameters
;
private
final
DatabaseType
databaseType
;
private
final
RuleRegistry
ruleRegistry
;
public
JDBCStatementBackendHandler
(
final
List
<
PreparedStatementParameter
>
preparedStatementParameters
,
final
int
statementId
,
final
DatabaseType
databaseType
)
{
public
JDBCStatementBackendHandler
(
final
List
<
PreparedStatementParameter
>
preparedStatementParameters
,
final
int
statementId
)
{
super
(
PreparedStatementRegistry
.
getInstance
().
getSQL
(
statementId
),
JDBCExecuteEngineFactory
.
createStatementProtocolInstance
(
preparedStatementParameters
));
this
.
preparedStatementParameters
=
preparedStatementParameters
;
this
.
databaseType
=
databaseType
;
ruleRegistry
=
RuleRegistry
.
getInstance
();
}
@Override
protected
SQLRouteResult
doShardingRoute
()
{
PreparedStatementRoutingEngine
routingEngine
=
new
PreparedStatementRoutingEngine
(
getSql
(),
ruleRegistry
.
getShardingRule
(),
ruleRegistry
.
getShardingMetaData
(),
databaseType
,
ruleRegistry
.
isShowSQL
(),
ruleRegistry
.
getShardingDataSourceMetaData
());
return
routingEngine
.
route
(
getComStmtExecuteParameters
());
}
private
List
<
Object
>
getComStmtExecuteParameters
()
{
List
<
Object
>
result
=
new
ArrayList
<>(
32
);
for
(
PreparedStatementParameter
each
:
preparedStatementParameters
)
{
result
.
add
(
each
.
getValue
());
}
return
result
;
}
@Override
...
...
sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/text/JDBCTextBackendHandler.java
浏览文件 @
12700b2a
...
...
@@ -17,12 +17,8 @@
package
io.shardingsphere.proxy.backend.common.jdbc.text
;
import
io.shardingsphere.core.constant.DatabaseType
;
import
io.shardingsphere.core.routing.SQLRouteResult
;
import
io.shardingsphere.core.routing.StatementRoutingEngine
;
import
io.shardingsphere.proxy.backend.common.jdbc.JDBCBackendHandler
;
import
io.shardingsphere.proxy.backend.common.jdbc.execute.JDBCExecuteEngineFactory
;
import
io.shardingsphere.proxy.config.RuleRegistry
;
import
io.shardingsphere.proxy.transport.common.packet.DatabasePacket
;
import
io.shardingsphere.proxy.transport.mysql.constant.ColumnType
;
import
io.shardingsphere.proxy.transport.mysql.packet.command.text.query.TextResultSetRowPacket
;
...
...
@@ -38,21 +34,8 @@ import java.util.List;
*/
public
final
class
JDBCTextBackendHandler
extends
JDBCBackendHandler
{
private
final
DatabaseType
databaseType
;
private
final
RuleRegistry
ruleRegistry
;
public
JDBCTextBackendHandler
(
final
String
sql
,
final
DatabaseType
databaseType
)
{
public
JDBCTextBackendHandler
(
final
String
sql
)
{
super
(
sql
,
JDBCExecuteEngineFactory
.
createTextProtocolInstance
());
this
.
databaseType
=
databaseType
;
ruleRegistry
=
RuleRegistry
.
getInstance
();
}
@Override
protected
SQLRouteResult
doShardingRoute
()
{
StatementRoutingEngine
routingEngine
=
new
StatementRoutingEngine
(
ruleRegistry
.
getShardingRule
(),
ruleRegistry
.
getShardingMetaData
(),
databaseType
,
ruleRegistry
.
isShowSQL
(),
ruleRegistry
.
getShardingDataSourceMetaData
());
return
routingEngine
.
route
(
getSql
());
}
@Override
...
...
sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/wrapper/JDBCExecutorWrapper.java
浏览文件 @
12700b2a
...
...
@@ -17,6 +17,9 @@
package
io.shardingsphere.proxy.backend.common.jdbc.wrapper
;
import
io.shardingsphere.core.constant.DatabaseType
;
import
io.shardingsphere.core.routing.SQLRouteResult
;
import
java.sql.Connection
;
import
java.sql.SQLException
;
import
java.sql.Statement
;
...
...
@@ -28,6 +31,15 @@ import java.sql.Statement;
*/
public
interface
JDBCExecutorWrapper
{
/**
* Route SQL.
*
* @param sql SQL to be routed
* @param databaseType database type
* @return SQL route result
*/
SQLRouteResult
route
(
String
sql
,
DatabaseType
databaseType
);
/**
* Create statement.
*
...
...
sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/wrapper/PreparedStatementExecutorWrapper.java
浏览文件 @
12700b2a
...
...
@@ -17,6 +17,17 @@
package
io.shardingsphere.proxy.backend.common.jdbc.wrapper
;
import
com.google.common.base.Function
;
import
com.google.common.collect.Lists
;
import
io.shardingsphere.core.constant.DatabaseType
;
import
io.shardingsphere.core.parsing.SQLJudgeEngine
;
import
io.shardingsphere.core.parsing.parser.sql.SQLStatement
;
import
io.shardingsphere.core.routing.PreparedStatementRoutingEngine
;
import
io.shardingsphere.core.routing.SQLExecutionUnit
;
import
io.shardingsphere.core.routing.SQLRouteResult
;
import
io.shardingsphere.core.routing.SQLUnit
;
import
io.shardingsphere.core.routing.router.masterslave.MasterSlaveRouter
;
import
io.shardingsphere.proxy.config.RuleRegistry
;
import
io.shardingsphere.proxy.transport.mysql.packet.command.statement.execute.PreparedStatementParameter
;
import
lombok.RequiredArgsConstructor
;
...
...
@@ -24,6 +35,7 @@ import java.sql.Connection;
import
java.sql.PreparedStatement
;
import
java.sql.SQLException
;
import
java.sql.Statement
;
import
java.util.Collections
;
import
java.util.List
;
/**
...
...
@@ -34,8 +46,36 @@ import java.util.List;
@RequiredArgsConstructor
public
final
class
PreparedStatementExecutorWrapper
implements
JDBCExecutorWrapper
{
private
final
RuleRegistry
ruleRegistry
=
RuleRegistry
.
getInstance
();
private
final
List
<
PreparedStatementParameter
>
preparedStatementParameters
;
@Override
public
SQLRouteResult
route
(
final
String
sql
,
final
DatabaseType
databaseType
)
{
return
ruleRegistry
.
isMasterSlaveOnly
()
?
doMasterSlaveRoute
(
sql
)
:
doShardingRoute
(
sql
,
databaseType
);
}
private
SQLRouteResult
doMasterSlaveRoute
(
final
String
sql
)
{
SQLStatement
sqlStatement
=
new
SQLJudgeEngine
(
sql
).
judge
();
SQLRouteResult
result
=
new
SQLRouteResult
(
sqlStatement
);
for
(
String
each
:
new
MasterSlaveRouter
(
ruleRegistry
.
getMasterSlaveRule
(),
ruleRegistry
.
isShowSQL
()).
route
(
sql
))
{
result
.
getExecutionUnits
().
add
(
new
SQLExecutionUnit
(
each
,
new
SQLUnit
(
sql
,
Collections
.<
List
<
Object
>>
emptyList
())));
}
return
result
;
}
private
SQLRouteResult
doShardingRoute
(
final
String
sql
,
final
DatabaseType
databaseType
)
{
PreparedStatementRoutingEngine
routingEngine
=
new
PreparedStatementRoutingEngine
(
sql
,
ruleRegistry
.
getShardingRule
(),
ruleRegistry
.
getShardingMetaData
(),
databaseType
,
ruleRegistry
.
isShowSQL
(),
ruleRegistry
.
getShardingDataSourceMetaData
());
return
routingEngine
.
route
(
Lists
.
transform
(
preparedStatementParameters
,
new
Function
<
PreparedStatementParameter
,
Object
>()
{
@Override
public
Object
apply
(
final
PreparedStatementParameter
input
)
{
return
input
.
getValue
();
}
}));
}
@Override
public
Statement
createStatement
(
final
Connection
connection
,
final
String
sql
,
final
boolean
isReturnGeneratedKeys
)
throws
SQLException
{
PreparedStatement
result
=
isReturnGeneratedKeys
?
connection
.
prepareStatement
(
sql
,
Statement
.
RETURN_GENERATED_KEYS
)
:
connection
.
prepareStatement
(
sql
);
...
...
sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/wrapper/StatementExecutorWrapper.java
浏览文件 @
12700b2a
...
...
@@ -17,9 +17,21 @@
package
io.shardingsphere.proxy.backend.common.jdbc.wrapper
;
import
io.shardingsphere.core.constant.DatabaseType
;
import
io.shardingsphere.core.parsing.SQLJudgeEngine
;
import
io.shardingsphere.core.parsing.parser.sql.SQLStatement
;
import
io.shardingsphere.core.routing.SQLExecutionUnit
;
import
io.shardingsphere.core.routing.SQLRouteResult
;
import
io.shardingsphere.core.routing.SQLUnit
;
import
io.shardingsphere.core.routing.StatementRoutingEngine
;
import
io.shardingsphere.core.routing.router.masterslave.MasterSlaveRouter
;
import
io.shardingsphere.proxy.config.RuleRegistry
;
import
java.sql.Connection
;
import
java.sql.SQLException
;
import
java.sql.Statement
;
import
java.util.Collections
;
import
java.util.List
;
/**
* Executor wrapper for statement.
...
...
@@ -28,6 +40,28 @@ import java.sql.Statement;
*/
public
final
class
StatementExecutorWrapper
implements
JDBCExecutorWrapper
{
private
final
RuleRegistry
ruleRegistry
=
RuleRegistry
.
getInstance
();
@Override
public
SQLRouteResult
route
(
final
String
sql
,
final
DatabaseType
databaseType
)
{
return
ruleRegistry
.
isMasterSlaveOnly
()
?
doMasterSlaveRoute
(
sql
)
:
doShardingRoute
(
sql
,
databaseType
);
}
private
SQLRouteResult
doMasterSlaveRoute
(
final
String
sql
)
{
SQLStatement
sqlStatement
=
new
SQLJudgeEngine
(
sql
).
judge
();
SQLRouteResult
result
=
new
SQLRouteResult
(
sqlStatement
);
for
(
String
each
:
new
MasterSlaveRouter
(
ruleRegistry
.
getMasterSlaveRule
(),
ruleRegistry
.
isShowSQL
()).
route
(
sql
))
{
result
.
getExecutionUnits
().
add
(
new
SQLExecutionUnit
(
each
,
new
SQLUnit
(
sql
,
Collections
.<
List
<
Object
>>
emptyList
())));
}
return
result
;
}
private
SQLRouteResult
doShardingRoute
(
final
String
sql
,
final
DatabaseType
databaseType
)
{
StatementRoutingEngine
routingEngine
=
new
StatementRoutingEngine
(
ruleRegistry
.
getShardingRule
(),
ruleRegistry
.
getShardingMetaData
(),
databaseType
,
ruleRegistry
.
isShowSQL
(),
ruleRegistry
.
getShardingDataSourceMetaData
());
return
routingEngine
.
route
(
sql
);
}
@Override
public
Statement
createStatement
(
final
Connection
connection
,
final
String
sql
,
final
boolean
isReturnGeneratedKeys
)
throws
SQLException
{
return
connection
.
createStatement
();
...
...
sharding-proxy/src/main/java/io/shardingsphere/proxy/transport/mysql/packet/command/statement/execute/ComStmtExecutePacket.java
浏览文件 @
12700b2a
...
...
@@ -82,7 +82,7 @@ public final class ComStmtExecutePacket extends CommandPacket {
}
newParametersBoundFlag
=
NewParametersBoundFlag
.
valueOf
(
payload
.
readInt1
());
setParameterList
(
payload
,
numParameters
,
newParametersBoundFlag
);
statementExecuteBackendHandler
=
new
JDBCStatementBackendHandler
(
preparedStatementParameters
,
statementId
,
DatabaseType
.
MySQL
);
statementExecuteBackendHandler
=
new
JDBCStatementBackendHandler
(
preparedStatementParameters
,
statementId
);
}
private
void
setParameterList
(
final
MySQLPacketPayload
payload
,
final
int
numParameters
,
final
NewParametersBoundFlag
newParametersBoundFlag
)
{
...
...
sharding-proxy/src/main/java/io/shardingsphere/proxy/transport/mysql/packet/command/text/fieldlist/ComFieldListPacket.java
浏览文件 @
12700b2a
...
...
@@ -95,7 +95,7 @@ public final class ComFieldListPacket extends CommandPacket implements CommandPa
}
private
BackendHandler
getBackendHandler
(
final
String
sql
)
{
return
RuleRegistry
.
getInstance
().
isProxyBackendUseNio
()
?
new
SQLPacketsBackendHandler
(
this
,
DatabaseType
.
MySQL
)
:
new
JDBCTextBackendHandler
(
sql
,
DatabaseType
.
MySQL
);
return
RuleRegistry
.
getInstance
().
isProxyBackendUseNio
()
?
new
SQLPacketsBackendHandler
(
this
,
DatabaseType
.
MySQL
)
:
new
JDBCTextBackendHandler
(
sql
);
}
@Override
...
...
sharding-proxy/src/main/java/io/shardingsphere/proxy/transport/mysql/packet/command/text/query/ComQueryPacket.java
浏览文件 @
12700b2a
...
...
@@ -94,7 +94,7 @@ public final class ComQueryPacket extends CommandPacket implements CommandPacket
}
private
BackendHandler
getBackendHandler
(
final
String
sql
)
{
return
RuleRegistry
.
getInstance
().
isProxyBackendUseNio
()
?
new
SQLPacketsBackendHandler
(
this
,
DatabaseType
.
MySQL
)
:
new
JDBCTextBackendHandler
(
sql
,
DatabaseType
.
MySQL
);
return
RuleRegistry
.
getInstance
().
isProxyBackendUseNio
()
?
new
SQLPacketsBackendHandler
(
this
,
DatabaseType
.
MySQL
)
:
new
JDBCTextBackendHandler
(
sql
);
}
/**
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录