Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
07c68eaf
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 搜索 >>
未验证
提交
07c68eaf
编写于
10月 15, 2020
作者:
L
Liang Zhang
提交者:
GitHub
10月 15, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Refactor DatabaseMetaDataDialectHandlerFactory (#7794)
上级
4d9bbfcf
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
65 addition
and
40 deletion
+65
-40
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/MetaDataConnectionAdapter.java
...tadata/model/physical/jdbc/MetaDataConnectionAdapter.java
+10
-2
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/DatabaseMetaDataDialectHandlerFactory.java
...l/jdbc/handler/DatabaseMetaDataDialectHandlerFactory.java
+13
-36
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/model/table/PhysicalTableMetaDataLoader.java
...del/physical/model/table/PhysicalTableMetaDataLoader.java
+2
-2
shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/DatabaseMetaDataDialectHandlerFactoryTest.java
...bc/handler/DatabaseMetaDataDialectHandlerFactoryTest.java
+40
-0
未找到文件。
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/MetaDataConnectionAdapter.java
浏览文件 @
07c68eaf
...
...
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.infra.metadata.model.physical.jdbc;
import
lombok.RequiredArgsConstructor
;
import
org.apache.shardingsphere.infra.database.type.DatabaseType
;
import
org.apache.shardingsphere.infra.metadata.model.physical.jdbc.handler.
impl.DatabaseMetaDataDialectHandlerFacade
;
import
org.apache.shardingsphere.infra.metadata.model.physical.jdbc.handler.
DatabaseMetaDataDialectHandlerFactory
;
import
java.sql.Array
;
import
java.sql.Blob
;
...
...
@@ -67,7 +67,15 @@ public final class MetaDataConnectionAdapter implements Connection {
@Override
public
String
getSchema
()
{
return
DatabaseMetaDataDialectHandlerFacade
.
getSchema
(
connection
,
databaseType
);
return
DatabaseMetaDataDialectHandlerFactory
.
findHandler
(
databaseType
).
map
(
handler
->
handler
.
getSchema
(
connection
)).
orElse
(
getSchema
(
connection
));
}
private
String
getSchema
(
final
Connection
connection
)
{
try
{
return
connection
.
getSchema
();
}
catch
(
final
SQLException
ex
)
{
return
null
;
}
}
@Override
...
...
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/
impl/DatabaseMetaDataDialectHandlerFacade
.java
→
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/
DatabaseMetaDataDialectHandlerFactory
.java
浏览文件 @
07c68eaf
...
...
@@ -15,58 +15,35 @@
* limitations under the License.
*/
package
org.apache.shardingsphere.infra.metadata.model.physical.jdbc.handler
.impl
;
package
org.apache.shardingsphere.infra.metadata.model.physical.jdbc.handler
;
import
java.sql.Connection
;
import
java.sql.SQLException
;
import
java.util.Optional
;
import
java.util.Properties
;
import
lombok.AccessLevel
;
import
lombok.NoArgsConstructor
;
import
org.apache.shardingsphere.infra.database.type.DatabaseType
;
import
org.apache.shardingsphere.infra.metadata.model.physical.jdbc.handler.DatabaseMetaDataDialectHandler
;
import
org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader
;
import
org.apache.shardingsphere.infra.spi.exception.ServiceProviderNotFoundException
;
import
org.apache.shardingsphere.infra.spi.typed.TypedSPIRegistry
;
import
java.util.Optional
;
import
java.util.Properties
;
/**
* Database meta data dialect handler fac
ade
.
* Database meta data dialect handler fac
tory
.
*/
public
final
class
DatabaseMetaDataDialectHandlerFacade
{
@NoArgsConstructor
(
access
=
AccessLevel
.
PRIVATE
)
public
final
class
DatabaseMetaDataDialectHandlerFactory
{
static
{
ShardingSphereServiceLoader
.
register
(
DatabaseMetaDataDialectHandler
.
class
);
}
/**
* Get schema.
*
* @param connection connection
* @param databaseType database type
* @return schema
*/
public
static
String
getSchema
(
final
Connection
connection
,
final
DatabaseType
databaseType
)
{
return
findDatabaseSpecialHandler
(
databaseType
).
map
(
handler
->
handler
.
getSchema
(
connection
)).
orElse
(
getSchema
(
connection
));
}
private
static
String
getSchema
(
final
Connection
connection
)
{
try
{
return
connection
.
getSchema
();
}
catch
(
final
SQLException
ex
)
{
return
null
;
}
}
/**
* Get table name pattern.
*
* @param tableNamePattern table name pattern
* Find database meta data dialect handler.
*
* @param databaseType database type
* @return
table name pattern
* @return
database meta data dialect handler
*/
public
static
String
getTableNamePattern
(
final
String
tableNamePattern
,
final
DatabaseType
databaseType
)
{
return
findDatabaseSpecialHandler
(
databaseType
).
map
(
handler
->
handler
.
decorate
(
tableNamePattern
)).
orElse
(
tableNamePattern
);
}
private
static
Optional
<
DatabaseMetaDataDialectHandler
>
findDatabaseSpecialHandler
(
final
DatabaseType
databaseType
)
{
public
static
Optional
<
DatabaseMetaDataDialectHandler
>
findHandler
(
final
DatabaseType
databaseType
)
{
try
{
return
Optional
.
of
(
TypedSPIRegistry
.
getRegisteredService
(
DatabaseMetaDataDialectHandler
.
class
,
databaseType
.
getName
(),
new
Properties
()));
}
catch
(
final
ServiceProviderNotFoundException
ignored
)
{
...
...
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/model/table/PhysicalTableMetaDataLoader.java
浏览文件 @
07c68eaf
...
...
@@ -21,7 +21,7 @@ import lombok.AccessLevel;
import
lombok.NoArgsConstructor
;
import
org.apache.shardingsphere.infra.database.type.DatabaseType
;
import
org.apache.shardingsphere.infra.metadata.model.physical.jdbc.MetaDataConnectionAdapter
;
import
org.apache.shardingsphere.infra.metadata.model.physical.jdbc.handler.
impl.DatabaseMetaDataDialectHandlerFacade
;
import
org.apache.shardingsphere.infra.metadata.model.physical.jdbc.handler.
DatabaseMetaDataDialectHandlerFactory
;
import
org.apache.shardingsphere.infra.metadata.model.physical.model.column.PhysicalColumnMetaDataLoader
;
import
org.apache.shardingsphere.infra.metadata.model.physical.model.index.PhysicalIndexMetaDataLoader
;
...
...
@@ -48,7 +48,7 @@ public final class PhysicalTableMetaDataLoader {
*/
public
static
Optional
<
PhysicalTableMetaData
>
load
(
final
DataSource
dataSource
,
final
String
tableNamePattern
,
final
DatabaseType
databaseType
)
throws
SQLException
{
try
(
MetaDataConnectionAdapter
connectionAdapter
=
new
MetaDataConnectionAdapter
(
databaseType
,
dataSource
.
getConnection
()))
{
String
tableName
=
DatabaseMetaDataDialectHandlerFac
ade
.
getTableNamePattern
(
tableNamePattern
,
databaseType
);
String
tableName
=
DatabaseMetaDataDialectHandlerFac
tory
.
findHandler
(
databaseType
).
map
(
handler
->
handler
.
decorate
(
tableNamePattern
)).
orElse
(
tableNamePattern
);
return
isTableExist
(
connectionAdapter
,
tableName
)
?
Optional
.
of
(
new
PhysicalTableMetaData
(
PhysicalColumnMetaDataLoader
.
load
(
connectionAdapter
,
tableName
,
databaseType
),
PhysicalIndexMetaDataLoader
.
load
(
connectionAdapter
,
tableName
)))
...
...
shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/
impl/OracleDatabaseMetaDataDialectFacade
Test.java
→
shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/
DatabaseMetaDataDialectHandlerFactory
Test.java
浏览文件 @
07c68eaf
...
...
@@ -15,51 +15,26 @@
* limitations under the License.
*/
package
org.apache.shardingsphere.infra.metadata.model.physical.jdbc.handler
.impl
;
package
org.apache.shardingsphere.infra.metadata.model.physical.jdbc.handler
;
import
java.sql.Connection
;
import
java.sql.DatabaseMetaData
;
import
java.sql.SQLException
;
import
org.apache.shardingsphere.infra.database.type.DatabaseType
;
import
org.apache.shardingsphere.infra.database.type.DatabaseTypes
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.mockito.Mock
;
import
org.mockito.junit.MockitoJUnitRunner
;
import
static
org
.
hamcrest
.
CoreMatchers
.
is
;
import
static
org
.
junit
.
Assert
.
assertThat
;
import
static
org
.
mockito
.
Mockito
.
when
;
import
static
org
.
junit
.
Assert
.
assertFalse
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
@RunWith
(
MockitoJUnitRunner
.
class
)
public
final
class
OracleDatabaseMetaDataDialectFacadeTest
{
private
static
final
String
USER_NAME
=
"root"
;
private
static
final
String
TABLE_NAME_PATTERN
=
"t_order_0"
;
private
final
DatabaseType
oracleDatabaseType
=
DatabaseTypes
.
getTrunkDatabaseType
(
"Oracle"
);
private
final
DatabaseType
mysqlDatabaseType
=
DatabaseTypes
.
getTrunkDatabaseType
(
"MySQL"
);
@Mock
private
Connection
connection
;
@Mock
private
DatabaseMetaData
databaseMetaData
;
public
final
class
DatabaseMetaDataDialectHandlerFactoryTest
{
@Test
public
void
assertGetSchema
()
throws
SQLException
{
when
(
connection
.
getMetaData
()).
thenReturn
(
databaseMetaData
);
when
(
databaseMetaData
.
getUserName
()).
thenReturn
(
USER_NAME
);
assertThat
(
DatabaseMetaDataDialectHandlerFacade
.
getSchema
(
connection
,
oracleDatabaseType
),
is
(
USER_NAME
.
toUpperCase
()));
public
void
assertFindHandlerForOracle
()
{
assertTrue
(
DatabaseMetaDataDialectHandlerFactory
.
findHandler
(
DatabaseTypes
.
getTrunkDatabaseType
(
"Oracle"
)).
isPresent
());
}
@Test
public
void
assertGetTableNamePattern
()
{
assertThat
(
DatabaseMetaDataDialectHandlerFacade
.
getTableNamePattern
(
TABLE_NAME_PATTERN
,
oracleDatabaseType
),
is
(
TABLE_NAME_PATTERN
.
toUpperCase
()));
assertThat
(
DatabaseMetaDataDialectHandlerFacade
.
getTableNamePattern
(
TABLE_NAME_PATTERN
,
mysqlDatabaseType
),
is
(
TABLE_NAME_PATTERN
));
public
void
assertFindHandlerMySQL
()
{
assertFalse
(
DatabaseMetaDataDialectHandlerFactory
.
findHandler
(
DatabaseTypes
.
getTrunkDatabaseType
(
"MySQL"
)).
isPresent
());
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录