Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
0bbc61f2
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 搜索 >>
未验证
提交
0bbc61f2
编写于
11月 16, 2020
作者:
L
Liang Zhang
提交者:
GitHub
11月 16, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Do not permit return null for ProxyContext.getMetaData() (#8168)
上级
d531e285
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
36 addition
and
44 deletion
+36
-44
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngineFactory.java
...end/communication/DatabaseCommunicationEngineFactory.java
+2
-9
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java
...he/shardingsphere/proxy/backend/context/ProxyContext.java
+8
-5
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/ShowTablesBackendHandler.java
...re/proxy/backend/text/admin/ShowTablesBackendHandler.java
+2
-8
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/query/QueryBackendHandler.java
...gsphere/proxy/backend/text/query/QueryBackendHandler.java
+1
-7
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/explain/ShardingCTLExplainBackendHandler.java
...d/text/sctl/explain/ShardingCTLExplainBackendHandler.java
+0
-4
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/hint/internal/executor/HintShowTableStatusExecutor.java
...l/hint/internal/executor/HintShowTableStatusExecutor.java
+0
-4
shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/context/ProxyContextTest.java
...hardingsphere/proxy/backend/context/ProxyContextTest.java
+21
-3
shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/binary/bind/PostgreSQLComBindExecutor.java
.../command/query/binary/bind/PostgreSQLComBindExecutor.java
+2
-4
未找到文件。
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngineFactory.java
浏览文件 @
0bbc61f2
...
...
@@ -17,7 +17,6 @@
package
org.apache.shardingsphere.proxy.backend.communication
;
import
com.google.common.base.Preconditions
;
import
lombok.AccessLevel
;
import
lombok.NoArgsConstructor
;
import
org.apache.shardingsphere.infra.binder.LogicSQL
;
...
...
@@ -62,7 +61,7 @@ public final class DatabaseCommunicationEngineFactory {
* @return text protocol backend handler
*/
public
DatabaseCommunicationEngine
newTextProtocolInstance
(
final
SQLStatement
sqlStatement
,
final
String
sql
,
final
BackendConnection
backendConnection
)
{
ShardingSphereMetaData
metaData
=
getMetaData
(
backendConnection
);
ShardingSphereMetaData
metaData
=
ProxyContext
.
getInstance
().
getMetaData
(
backendConnection
.
getSchemaName
()
);
LogicSQL
logicSQL
=
createLogicSQL
(
sqlStatement
,
sql
,
Collections
.
emptyList
(),
metaData
);
JDBCExecuteEngine
jdbcExecuteEngine
=
new
JDBCExecuteEngine
(
backendConnection
,
new
StatementAccessor
());
return
new
JDBCDatabaseCommunicationEngine
(
logicSQL
,
metaData
,
jdbcExecuteEngine
);
...
...
@@ -78,18 +77,12 @@ public final class DatabaseCommunicationEngineFactory {
* @return binary protocol backend handler
*/
public
DatabaseCommunicationEngine
newBinaryProtocolInstance
(
final
SQLStatement
sqlStatement
,
final
String
sql
,
final
List
<
Object
>
parameters
,
final
BackendConnection
backendConnection
)
{
ShardingSphereMetaData
metaData
=
getMetaData
(
backendConnection
);
ShardingSphereMetaData
metaData
=
ProxyContext
.
getInstance
().
getMetaData
(
backendConnection
.
getSchemaName
()
);
LogicSQL
logicSQL
=
createLogicSQL
(
sqlStatement
,
sql
,
new
ArrayList
<>(
parameters
),
metaData
);
JDBCExecuteEngine
jdbcExecuteEngine
=
new
JDBCExecuteEngine
(
backendConnection
,
new
PreparedStatementAccessor
());
return
new
JDBCDatabaseCommunicationEngine
(
logicSQL
,
metaData
,
jdbcExecuteEngine
);
}
private
ShardingSphereMetaData
getMetaData
(
final
BackendConnection
backendConnection
)
{
ShardingSphereMetaData
result
=
ProxyContext
.
getInstance
().
getMetaData
(
backendConnection
.
getSchemaName
());
Preconditions
.
checkNotNull
(
result
);
return
result
;
}
private
LogicSQL
createLogicSQL
(
final
SQLStatement
sqlStatement
,
final
String
sql
,
final
List
<
Object
>
parameters
,
final
ShardingSphereMetaData
metaData
)
{
SQLStatementContext
<?>
sqlStatementContext
=
SQLStatementContextFactory
.
newInstance
(
metaData
.
getSchema
(),
parameters
,
sqlStatement
);
return
new
LogicSQL
(
sqlStatementContext
,
sql
,
parameters
);
...
...
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java
浏览文件 @
0bbc61f2
...
...
@@ -23,6 +23,7 @@ import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
import
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts
;
import
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData
;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.datasource.JDBCBackendDataSource
;
import
org.apache.shardingsphere.proxy.backend.exception.NoDatabaseSelectedException
;
import
org.apache.shardingsphere.transaction.context.TransactionContexts
;
import
org.apache.shardingsphere.transaction.context.impl.StandardTransactionContexts
;
...
...
@@ -30,7 +31,6 @@ import javax.sql.DataSource;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.Optional
;
/**
...
...
@@ -84,13 +84,16 @@ public final class ProxyContext {
}
/**
* Get meta data.
* Get
ShardingSphere
meta data.
*
* @param schemaName schema name
* @return meta data
* @return
ShardingSphere
meta data
*/
public
ShardingSphereMetaData
getMetaData
(
final
String
schemaName
)
{
return
Strings
.
isNullOrEmpty
(
schemaName
)
?
null
:
metaDataContexts
.
getMetaDataMap
().
get
(
schemaName
);
if
(
Strings
.
isNullOrEmpty
(
schemaName
)
||
!
metaDataContexts
.
getMetaDataMap
().
containsKey
(
schemaName
))
{
throw
new
NoDatabaseSelectedException
();
}
return
metaDataContexts
.
getMetaDataMap
().
get
(
schemaName
);
}
/**
...
...
@@ -112,7 +115,7 @@ public final class ProxyContext {
if
(
schemaNames
.
isEmpty
())
{
return
Optional
.
empty
();
}
Map
<
String
,
DataSource
>
dataSources
=
Objects
.
requireNonNull
(
getMetaData
(
schemaNames
.
get
(
0
)
)).
getResource
().
getDataSources
();
Map
<
String
,
DataSource
>
dataSources
=
getMetaData
(
schemaNames
.
get
(
0
)).
getResource
().
getDataSources
();
return
dataSources
.
values
().
stream
().
findFirst
();
}
}
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/ShowTablesBackendHandler.java
浏览文件 @
0bbc61f2
...
...
@@ -19,12 +19,10 @@ package org.apache.shardingsphere.proxy.backend.text.admin;
import
lombok.RequiredArgsConstructor
;
import
org.apache.shardingsphere.infra.executor.sql.raw.execute.result.query.QueryHeader
;
import
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData
;
import
org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngine
;
import
org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngineFactory
;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection
;
import
org.apache.shardingsphere.proxy.backend.context.ProxyContext
;
import
org.apache.shardingsphere.proxy.backend.exception.NoDatabaseSelectedException
;
import
org.apache.shardingsphere.proxy.backend.response.BackendResponse
;
import
org.apache.shardingsphere.proxy.backend.response.query.QueryData
;
import
org.apache.shardingsphere.proxy.backend.response.query.QueryResponse
;
...
...
@@ -53,14 +51,10 @@ public final class ShowTablesBackendHandler implements TextProtocolBackendHandle
@Override
public
BackendResponse
execute
()
throws
SQLException
{
ShardingSphereMetaData
metaData
=
ProxyContext
.
getInstance
().
getMetaData
(
backendConnection
.
getSchemaName
());
if
(
null
==
metaData
)
{
throw
new
NoDatabaseSelectedException
();
}
if
(!
metaData
.
isComplete
())
{
if
(!
ProxyContext
.
getInstance
().
getMetaData
(
backendConnection
.
getSchemaName
()).
isComplete
())
{
return
getDefaultQueryResponse
(
backendConnection
.
getSchemaName
());
}
// TODO Get all tables from meta data
.
// TODO Get all tables from meta data
databaseCommunicationEngine
=
databaseCommunicationEngineFactory
.
newTextProtocolInstance
(
sqlStatement
,
sql
,
backendConnection
);
return
databaseCommunicationEngine
.
execute
();
}
...
...
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/query/QueryBackendHandler.java
浏览文件 @
0bbc61f2
...
...
@@ -18,12 +18,10 @@
package
org.apache.shardingsphere.proxy.backend.text.query
;
import
lombok.RequiredArgsConstructor
;
import
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData
;
import
org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngine
;
import
org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngineFactory
;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection
;
import
org.apache.shardingsphere.proxy.backend.context.ProxyContext
;
import
org.apache.shardingsphere.proxy.backend.exception.NoDatabaseSelectedException
;
import
org.apache.shardingsphere.proxy.backend.exception.RuleNotExistsException
;
import
org.apache.shardingsphere.proxy.backend.response.BackendResponse
;
import
org.apache.shardingsphere.proxy.backend.response.query.QueryData
;
...
...
@@ -50,11 +48,7 @@ public final class QueryBackendHandler implements TextProtocolBackendHandler {
@Override
public
BackendResponse
execute
()
throws
SQLException
{
ShardingSphereMetaData
metaData
=
ProxyContext
.
getInstance
().
getMetaData
(
backendConnection
.
getSchemaName
());
if
(
null
==
metaData
)
{
throw
new
NoDatabaseSelectedException
();
}
if
(!
metaData
.
isComplete
())
{
if
(!
ProxyContext
.
getInstance
().
getMetaData
(
backendConnection
.
getSchemaName
()).
isComplete
())
{
throw
new
RuleNotExistsException
();
}
databaseCommunicationEngine
=
databaseCommunicationEngineFactory
.
newTextProtocolInstance
(
sqlStatement
,
sql
,
backendConnection
);
...
...
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/explain/ShardingCTLExplainBackendHandler.java
浏览文件 @
0bbc61f2
...
...
@@ -29,7 +29,6 @@ import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine
;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection
;
import
org.apache.shardingsphere.proxy.backend.context.ProxyContext
;
import
org.apache.shardingsphere.proxy.backend.exception.NoDatabaseSelectedException
;
import
org.apache.shardingsphere.proxy.backend.exception.RuleNotExistsException
;
import
org.apache.shardingsphere.proxy.backend.response.BackendResponse
;
import
org.apache.shardingsphere.proxy.backend.response.query.QueryData
;
...
...
@@ -68,9 +67,6 @@ public final class ShardingCTLExplainBackendHandler implements TextProtocolBacke
throw
new
InvalidShardingCTLFormatException
(
sql
);
}
ShardingSphereMetaData
metaData
=
ProxyContext
.
getInstance
().
getMetaData
(
backendConnection
.
getSchemaName
());
if
(
null
==
metaData
)
{
throw
new
NoDatabaseSelectedException
();
}
if
(!
metaData
.
isComplete
())
{
throw
new
RuleNotExistsException
();
}
...
...
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/hint/internal/executor/HintShowTableStatusExecutor.java
浏览文件 @
0bbc61f2
...
...
@@ -25,7 +25,6 @@ import org.apache.shardingsphere.infra.merge.result.MergedResult;
import
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData
;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection
;
import
org.apache.shardingsphere.proxy.backend.context.ProxyContext
;
import
org.apache.shardingsphere.proxy.backend.exception.NoDatabaseSelectedException
;
import
org.apache.shardingsphere.proxy.backend.exception.RuleNotExistsException
;
import
org.apache.shardingsphere.proxy.backend.text.sctl.hint.internal.command.HintShowTableStatusCommand
;
import
org.apache.shardingsphere.proxy.backend.text.sctl.hint.internal.result.HintShowTableStatusResult
;
...
...
@@ -60,9 +59,6 @@ public final class HintShowTableStatusExecutor extends AbstractHintQueryExecutor
protected
MergedResult
createMergedResult
()
{
Map
<
String
,
HintShowTableStatusResult
>
results
=
new
HashMap
<>();
ShardingSphereMetaData
metaData
=
ProxyContext
.
getInstance
().
getMetaData
(
backendConnection
.
getSchemaName
());
if
(
null
==
metaData
)
{
throw
new
NoDatabaseSelectedException
();
}
if
(!
metaData
.
isComplete
())
{
throw
new
RuleNotExistsException
();
}
...
...
shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/context/ProxyContextTest.java
浏览文件 @
0bbc61f2
...
...
@@ -25,6 +25,7 @@ import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
import
org.apache.shardingsphere.infra.executor.kernel.ExecutorKernel
;
import
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData
;
import
org.apache.shardingsphere.jdbc.test.MockedDataSource
;
import
org.apache.shardingsphere.proxy.backend.exception.NoDatabaseSelectedException
;
import
org.apache.shardingsphere.transaction.context.TransactionContexts
;
import
org.junit.Test
;
...
...
@@ -86,6 +87,26 @@ public final class ProxyContextTest {
assertFalse
(
ProxyContext
.
getInstance
().
schemaExists
(
"schema_2"
));
}
@Test
(
expected
=
NoDatabaseSelectedException
.
class
)
public
void
assertGetSchemaWithNull
()
{
assertNull
(
ProxyContext
.
getInstance
().
getMetaData
(
null
));
}
@Test
(
expected
=
NoDatabaseSelectedException
.
class
)
public
void
assertGetSchemaWithEmptyString
()
{
assertNull
(
ProxyContext
.
getInstance
().
getMetaData
(
""
));
}
@Test
(
expected
=
NoDatabaseSelectedException
.
class
)
public
void
assertGetSchemaWhenNotExisted
()
throws
NoSuchFieldException
,
IllegalAccessException
{
Map
<
String
,
ShardingSphereMetaData
>
metaDataMap
=
mockMetaDataMap
(
Collections
.
emptyMap
());
Field
metaDataContexts
=
ProxyContext
.
getInstance
().
getClass
().
getDeclaredField
(
"metaDataContexts"
);
metaDataContexts
.
setAccessible
(
true
);
metaDataContexts
.
set
(
ProxyContext
.
getInstance
(),
new
StandardMetaDataContexts
(
metaDataMap
,
mock
(
ExecutorKernel
.
class
),
new
Authentication
(),
new
ConfigurationProperties
(
new
Properties
()),
new
MySQLDatabaseType
()));
ProxyContext
.
getInstance
().
getMetaData
(
"schema1"
);
}
@Test
public
void
assertGetSchema
()
throws
NoSuchFieldException
,
IllegalAccessException
{
Map
<
String
,
ShardingSphereMetaData
>
metaDataMap
=
mockMetaDataMap
(
Collections
.
emptyMap
());
...
...
@@ -93,9 +114,6 @@ public final class ProxyContextTest {
metaDataContexts
.
setAccessible
(
true
);
metaDataContexts
.
set
(
ProxyContext
.
getInstance
(),
new
StandardMetaDataContexts
(
metaDataMap
,
mock
(
ExecutorKernel
.
class
),
new
Authentication
(),
new
ConfigurationProperties
(
new
Properties
()),
new
MySQLDatabaseType
()));
assertNull
(
ProxyContext
.
getInstance
().
getMetaData
(
null
));
assertNull
(
ProxyContext
.
getInstance
().
getMetaData
(
""
));
assertNull
(
ProxyContext
.
getInstance
().
getMetaData
(
"schema1"
));
assertThat
(
metaDataMap
.
get
(
"schema"
),
is
(
ProxyContext
.
getInstance
().
getMetaData
(
"schema"
)));
}
...
...
shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/binary/bind/PostgreSQLComBindExecutor.java
浏览文件 @
0bbc61f2
...
...
@@ -32,7 +32,7 @@ import org.apache.shardingsphere.db.protocol.postgresql.packet.generic.PostgreSQ
import
org.apache.shardingsphere.infra.database.type.DatabaseTypeRegistry
;
import
org.apache.shardingsphere.infra.executor.sql.QueryResult
;
import
org.apache.shardingsphere.infra.executor.sql.raw.execute.result.query.QueryHeader
;
import
org.apache.shardingsphere.infra.
metadata.ShardingSphereMetaData
;
import
org.apache.shardingsphere.infra.
parser.ShardingSphereSQLParserEngine
;
import
org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngine
;
import
org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngineFactory
;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection
;
...
...
@@ -43,7 +43,6 @@ import org.apache.shardingsphere.proxy.backend.response.query.QueryResponse;
import
org.apache.shardingsphere.proxy.backend.response.update.UpdateResponse
;
import
org.apache.shardingsphere.proxy.frontend.command.executor.QueryCommandExecutor
;
import
org.apache.shardingsphere.proxy.frontend.command.executor.ResponseType
;
import
org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine
;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement
;
import
java.sql.ResultSetMetaData
;
...
...
@@ -69,8 +68,7 @@ public final class PostgreSQLComBindExecutor implements QueryCommandExecutor {
public
PostgreSQLComBindExecutor
(
final
PostgreSQLComBindPacket
packet
,
final
BackendConnection
backendConnection
)
{
this
.
packet
=
packet
;
ShardingSphereMetaData
metaData
=
ProxyContext
.
getInstance
().
getMetaData
(
backendConnection
.
getSchemaName
());
if
(
null
!=
packet
.
getSql
()
&&
null
!=
metaData
)
{
if
(
null
!=
packet
.
getSql
())
{
ShardingSphereSQLParserEngine
sqlStatementParserEngine
=
new
ShardingSphereSQLParserEngine
(
DatabaseTypeRegistry
.
getTrunkDatabaseTypeName
(
ProxyContext
.
getInstance
().
getMetaDataContexts
().
getDatabaseType
()));
SQLStatement
sqlStatement
=
sqlStatementParserEngine
.
parse
(
packet
.
getSql
(),
true
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录