Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
00ce0051
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,发现更多精彩内容 >>
提交
00ce0051
编写于
3月 30, 2018
作者:
T
terrymanu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
for #660: add sql case type demension
上级
ccf91790
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
131 addition
and
40 deletion
+131
-40
sharding-core/src/test/java/io/shardingjdbc/core/parsing/integrate/engine/IntegrateSupportedSQLParsingTest.java
...ng/integrate/engine/IntegrateSupportedSQLParsingTest.java
+45
-33
sharding-core/src/test/java/io/shardingjdbc/core/parsing/integrate/engine/IntegrateUnsupportedSQLParsingTest.java
.../integrate/engine/IntegrateUnsupportedSQLParsingTest.java
+6
-2
sharding-sql-test/src/main/java/io/shardingjdbc/test/sql/SQLCaseType.java
...t/src/main/java/io/shardingjdbc/test/sql/SQLCaseType.java
+28
-0
sharding-sql-test/src/main/java/io/shardingjdbc/test/sql/SQLCasesLoader.java
...rc/main/java/io/shardingjdbc/test/sql/SQLCasesLoader.java
+52
-5
未找到文件。
sharding-core/src/test/java/io/shardingjdbc/core/parsing/integrate/engine/IntegrateSupportedSQLParsingTest.java
浏览文件 @
00ce0051
...
...
@@ -20,8 +20,6 @@ package io.shardingjdbc.core.parsing.integrate.engine;
import
com.google.common.base.Optional
;
import
io.shardingjdbc.core.constant.DatabaseType
;
import
io.shardingjdbc.core.parsing.SQLParsingEngine
;
import
io.shardingjdbc.core.parsing.integrate.asserts.ParserAssertHelper
;
import
io.shardingjdbc.core.parsing.integrate.asserts.ParserJAXBHelper
;
import
io.shardingjdbc.core.parsing.integrate.jaxb.condition.ConditionAssert
;
import
io.shardingjdbc.core.parsing.integrate.jaxb.condition.Value
;
import
io.shardingjdbc.core.parsing.integrate.jaxb.root.ParserAssert
;
...
...
@@ -41,7 +39,6 @@ import io.shardingjdbc.core.parsing.parser.context.condition.Conditions;
import
io.shardingjdbc.core.parsing.parser.context.table.Table
;
import
io.shardingjdbc.core.parsing.parser.context.table.Tables
;
import
io.shardingjdbc.core.parsing.parser.sql.SQLStatement
;
import
io.shardingjdbc.core.parsing.parser.sql.dql.select.SelectStatement
;
import
io.shardingjdbc.core.parsing.parser.token.GeneratedKeyToken
;
import
io.shardingjdbc.core.parsing.parser.token.IndexToken
;
import
io.shardingjdbc.core.parsing.parser.token.ItemsToken
;
...
...
@@ -51,6 +48,7 @@ import io.shardingjdbc.core.parsing.parser.token.OrderByToken;
import
io.shardingjdbc.core.parsing.parser.token.RowCountToken
;
import
io.shardingjdbc.core.parsing.parser.token.SQLToken
;
import
io.shardingjdbc.core.parsing.parser.token.TableToken
;
import
io.shardingjdbc.test.sql.SQLCaseType
;
import
io.shardingjdbc.test.sql.SQLCasesLoader
;
import
lombok.RequiredArgsConstructor
;
import
org.junit.Test
;
...
...
@@ -79,38 +77,35 @@ public final class IntegrateSupportedSQLParsingTest extends AbstractBaseIntegrat
private
final
DatabaseType
databaseType
;
@Parameters
(
name
=
"{0}In{1}"
)
private
final
SQLCaseType
sqlCaseType
;
@Parameters
(
name
=
"{0}_in_{1}_for_{2}"
)
public
static
Collection
<
Object
[]>
getTestParameters
()
{
return
sqlCasesLoader
.
getSupportedSQLTestParameters
(
Arrays
.<
Enum
>
asList
(
DatabaseType
.
values
()),
DatabaseType
.
class
);
}
@Test
public
void
assert
Literal
SQL
()
throws
NoSuchFieldException
,
IllegalAccessException
{
assertSQLStatement
(
new
SQLParsingEngine
(
databaseType
,
sqlCasesLoader
.
getSupportedLiteralSQL
(
sqlCaseId
,
parserAssertsLoader
.
getParserAssert
(
sqlCaseId
).
getParameters
()),
getShardingRule
()).
parse
(),
false
);
public
void
assert
Supported
SQL
()
throws
NoSuchFieldException
,
IllegalAccessException
{
String
sql
=
sqlCasesLoader
.
getSupportedSQL
(
sqlCaseId
,
sqlCaseType
,
parserAssertsLoader
.
getParserAssert
(
sqlCaseId
).
getParameters
());
assertSQLStatement
(
new
SQLParsingEngine
(
databaseType
,
sql
,
getShardingRule
()).
parse
()
);
}
@Test
public
void
assertPlaceholderSQL
()
throws
NoSuchFieldException
,
IllegalAccessException
{
assertSQLStatement
(
new
SQLParsingEngine
(
databaseType
,
sqlCasesLoader
.
getSupportedPlaceholderSQL
(
sqlCaseId
),
getShardingRule
()).
parse
(),
true
);
}
private
void
assertSQLStatement
(
final
SQLStatement
actual
,
final
boolean
withPlaceholder
)
throws
NoSuchFieldException
,
IllegalAccessException
{
private
void
assertSQLStatement
(
final
SQLStatement
actual
)
throws
NoSuchFieldException
,
IllegalAccessException
{
ParserAssert
parserAssert
=
parserAssertsLoader
.
getParserAssert
(
sqlCaseId
);
assertTables
(
actual
.
getTables
(),
parserAssert
.
getTables
());
assertConditions
(
actual
.
getConditions
(),
parserAssert
.
getConditions
());
assertSQLTokens
(
actual
.
getSqlTokens
(),
parserAssert
.
getTokens
()
,
withPlaceholder
);
assertSQLTokens
(
actual
.
getSqlTokens
(),
parserAssert
.
getTokens
());
if
(
actual
instanceof
SelectStatement
)
{
SelectStatement
selectStatement
=
(
SelectStatement
)
actual
;
SelectStatement
expectedSqlStatement
=
ParserJAXBHelper
.
getSelectStatement
(
parserAssert
);
ParserAssertHelper
.
assertOrderBy
(
expectedSqlStatement
.
getOrderByItems
(),
selectStatement
.
getOrderByItems
());
ParserAssertHelper
.
assertGroupBy
(
expectedSqlStatement
.
getGroupByItems
(),
selectStatement
.
getGroupByItems
());
ParserAssertHelper
.
assertAggregationSelectItem
(
expectedSqlStatement
.
getAggregationSelectItems
(),
selectStatement
.
getAggregationSelectItems
());
ParserAssertHelper
.
assertLimit
(
parserAssert
.
getLimit
(),
selectStatement
.
getLimit
(),
withPlaceholder
);
}
//
if (actual instanceof SelectStatement) {
//
SelectStatement selectStatement = (SelectStatement) actual;
//
SelectStatement expectedSqlStatement = ParserJAXBHelper.getSelectStatement(parserAssert);
//
ParserAssertHelper.assertOrderBy(expectedSqlStatement.getOrderByItems(), selectStatement.getOrderByItems());
//
ParserAssertHelper.assertGroupBy(expectedSqlStatement.getGroupByItems(), selectStatement.getGroupByItems());
//
ParserAssertHelper.assertAggregationSelectItem(expectedSqlStatement.getAggregationSelectItems(), selectStatement.getAggregationSelectItems());
//
ParserAssertHelper.assertLimit(parserAssert.getLimit(), selectStatement.getLimit(), withPlaceholder);
//
}
}
private
void
assertTables
(
final
Tables
actual
,
final
List
<
TableAssert
>
expected
)
{
...
...
@@ -165,13 +160,13 @@ public final class IntegrateSupportedSQLParsingTest extends AbstractBaseIntegrat
return
field
.
get
(
actual
);
}
private
void
assertSQLTokens
(
final
List
<
SQLToken
>
actual
,
final
SQLTokenAsserts
expected
,
final
boolean
withPlaceholder
)
{
private
void
assertSQLTokens
(
final
List
<
SQLToken
>
actual
,
final
SQLTokenAsserts
expected
)
{
assertTableTokens
(
actual
,
expected
);
assertIndexToken
(
actual
,
expected
);
assertItemsToken
(
actual
,
expected
);
assertGeneratedKeyToken
(
actual
,
expected
,
withPlaceholder
);
assertGeneratedKeyToken
(
actual
,
expected
);
assertMultipleInsertValuesToken
(
actual
,
expected
);
assertOrderByToken
(
actual
,
expected
,
withPlaceholder
);
assertOrderByToken
(
actual
,
expected
);
// TODO fix offset and row count
// assertOffsetToken(actual, expected);
// assertRowCountToken(actual, expected);
...
...
@@ -249,17 +244,17 @@ public final class IntegrateSupportedSQLParsingTest extends AbstractBaseIntegrat
return
Optional
.
absent
();
}
private
void
assertGeneratedKeyToken
(
final
List
<
SQLToken
>
actual
,
final
SQLTokenAsserts
expected
,
final
boolean
withPlaceholder
)
{
private
void
assertGeneratedKeyToken
(
final
List
<
SQLToken
>
actual
,
final
SQLTokenAsserts
expected
)
{
Optional
<
GeneratedKeyToken
>
generatedKeyToken
=
getGeneratedKeyToken
(
actual
);
if
(
generatedKeyToken
.
isPresent
())
{
assertGeneratedKeyToken
(
generatedKeyToken
.
get
(),
expected
.
getGeneratedKeyToken
()
,
withPlaceholder
);
assertGeneratedKeyToken
(
generatedKeyToken
.
get
(),
expected
.
getGeneratedKeyToken
());
}
else
{
assertNull
(
expected
.
getGeneratedKeyToken
());
}
}
private
void
assertGeneratedKeyToken
(
final
GeneratedKeyToken
actual
,
final
GeneratedKeyTokenAssert
expected
,
final
boolean
withPlaceholder
)
{
if
(
withPlaceholder
)
{
private
void
assertGeneratedKeyToken
(
final
GeneratedKeyToken
actual
,
final
GeneratedKeyTokenAssert
expected
)
{
if
(
SQLCaseType
.
Placeholder
==
sqlCaseType
)
{
assertThat
(
actual
.
getBeginPosition
(),
is
(
expected
.
getBeginPositionWithPlaceholder
()));
}
else
{
assertThat
(
actual
.
getBeginPosition
(),
is
(
expected
.
getBeginPositionWithoutPlaceholder
()));
...
...
@@ -298,17 +293,17 @@ public final class IntegrateSupportedSQLParsingTest extends AbstractBaseIntegrat
return
Optional
.
absent
();
}
private
void
assertOrderByToken
(
final
List
<
SQLToken
>
actual
,
final
SQLTokenAsserts
expected
,
final
boolean
withPlaceholder
)
{
private
void
assertOrderByToken
(
final
List
<
SQLToken
>
actual
,
final
SQLTokenAsserts
expected
)
{
Optional
<
OrderByToken
>
orderByToken
=
getOrderByToken
(
actual
);
if
(
orderByToken
.
isPresent
())
{
assertOrderByToken
(
orderByToken
.
get
(),
expected
.
getOrderByToken
()
,
withPlaceholder
);
assertOrderByToken
(
orderByToken
.
get
(),
expected
.
getOrderByToken
());
}
else
{
assertNull
(
expected
.
getOrderByToken
());
}
}
private
void
assertOrderByToken
(
final
OrderByToken
actual
,
final
OrderByTokenAssert
expected
,
final
boolean
withPlaceholder
)
{
if
(
withPlaceholder
)
{
private
void
assertOrderByToken
(
final
OrderByToken
actual
,
final
OrderByTokenAssert
expected
)
{
if
(
SQLCaseType
.
Placeholder
==
sqlCaseType
)
{
assertThat
(
actual
.
getBeginPosition
(),
is
(
expected
.
getBeginPositionWithPlaceholder
()));
}
else
{
assertThat
(
actual
.
getBeginPosition
(),
is
(
expected
.
getBeginPositionWithoutPlaceholder
()));
...
...
@@ -369,4 +364,21 @@ public final class IntegrateSupportedSQLParsingTest extends AbstractBaseIntegrat
}
return
Optional
.
absent
();
}
private
String
getFullAssertMessage
(
final
String
assertMessage
)
{
StringBuilder
result
=
new
StringBuilder
(
System
.
getProperty
(
"line.separator"
));
result
.
append
(
"SQL case id: "
);
result
.
append
(
sqlCaseId
);
result
.
append
(
System
.
getProperty
(
"line.separator"
));
result
.
append
(
"SQL: "
);
if
(
SQLCaseType
.
Placeholder
==
sqlCaseType
)
{
result
.
append
(
SQLCasesLoader
.
getInstance
().
getSupportedPlaceholderSQL
(
sqlCaseId
));
}
else
{
result
.
append
(
SQLCasesLoader
.
getInstance
().
getSupportedLiteralSQL
(
sqlCaseId
,
parserAssertsLoader
.
getParserAssert
(
sqlCaseId
).
getParameters
()));
}
result
.
append
(
System
.
getProperty
(
"line.separator"
));
result
.
append
(
assertMessage
);
result
.
append
(
System
.
getProperty
(
"line.separator"
));
return
result
.
toString
();
}
}
sharding-core/src/test/java/io/shardingjdbc/core/parsing/integrate/engine/IntegrateUnsupportedSQLParsingTest.java
浏览文件 @
00ce0051
...
...
@@ -20,6 +20,7 @@ package io.shardingjdbc.core.parsing.integrate.engine;
import
io.shardingjdbc.core.constant.DatabaseType
;
import
io.shardingjdbc.core.parsing.SQLParsingEngine
;
import
io.shardingjdbc.core.parsing.parser.exception.SQLParsingUnsupportedException
;
import
io.shardingjdbc.test.sql.SQLCaseType
;
import
io.shardingjdbc.test.sql.SQLCasesLoader
;
import
lombok.RequiredArgsConstructor
;
import
org.junit.Test
;
...
...
@@ -27,6 +28,7 @@ import org.junit.runners.Parameterized.Parameters;
import
java.util.Arrays
;
import
java.util.Collection
;
import
java.util.Collections
;
@RequiredArgsConstructor
public
final
class
IntegrateUnsupportedSQLParsingTest
extends
AbstractBaseIntegrateSQLParsingTest
{
...
...
@@ -37,13 +39,15 @@ public final class IntegrateUnsupportedSQLParsingTest extends AbstractBaseIntegr
private
final
DatabaseType
databaseType
;
@Parameters
(
name
=
"{0}In{1}"
)
private
final
SQLCaseType
sqlCaseType
;
@Parameters
(
name
=
"{0}_in_{1}_for_{2}"
)
public
static
Collection
<
Object
[]>
getTestParameters
()
{
return
sqlCasesLoader
.
getUnsupportedSQLTestParameters
(
Arrays
.<
Enum
>
asList
(
DatabaseType
.
values
()),
DatabaseType
.
class
);
}
@Test
(
expected
=
SQLParsingUnsupportedException
.
class
)
public
void
assertUnsupportedSQL
()
{
new
SQLParsingEngine
(
databaseType
,
sqlCasesLoader
.
getUnsupportedSQL
(
sqlCaseId
),
getShardingRule
()).
parse
();
new
SQLParsingEngine
(
databaseType
,
sqlCasesLoader
.
getUnsupportedSQL
(
sqlCaseId
,
sqlCaseType
,
Collections
.
emptyList
()
),
getShardingRule
()).
parse
();
}
}
sharding-sql-test/src/main/java/io/shardingjdbc/test/sql/SQLCaseType.java
0 → 100644
浏览文件 @
00ce0051
/*
* Copyright 1999-2015 dangdang.com.
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* </p>
*/
package
io.shardingjdbc.test.sql
;
/**
* SQL case type.
*
* @author zhangliang
*/
public
enum
SQLCaseType
{
Literal
,
Placeholder
}
sharding-sql-test/src/main/java/io/shardingjdbc/test/sql/SQLCasesLoader.java
浏览文件 @
00ce0051
...
...
@@ -165,13 +165,50 @@ public final class SQLCasesLoader {
return
getSQLFromMap
(
sqlCaseId
,
supportedSQLCaseMap
).
replace
(
"%s"
,
"?"
).
replace
(
"%%"
,
"%"
);
}
/**
* Get supported SQL.
*
* @param sqlCaseId SQL case ID
* @param sqlCaseType SQL case type
* @param parameters SQL parameters
* @return SQL
*/
public
String
getSupportedSQL
(
final
String
sqlCaseId
,
final
SQLCaseType
sqlCaseType
,
final
List
<?>
parameters
)
{
return
getSQL
(
supportedSQLCaseMap
,
sqlCaseId
,
sqlCaseType
,
parameters
);
}
/**
* Get unsupported SQL.
*
* @param sqlCaseId SQL case ID
* @param sqlCaseType SQL case type
* @param parameters SQL parameters
* @return SQL
*/
public
String
getUnsupportedSQL
(
final
String
sqlCaseId
)
{
return
getSQLFromMap
(
sqlCaseId
,
unsupportedSQLCaseMap
);
public
String
getUnsupportedSQL
(
final
String
sqlCaseId
,
final
SQLCaseType
sqlCaseType
,
final
List
<?>
parameters
)
{
return
getSQL
(
unsupportedSQLCaseMap
,
sqlCaseId
,
sqlCaseType
,
parameters
);
}
private
String
getSQL
(
final
Map
<
String
,
SQLCase
>
sqlCaseMap
,
final
String
sqlCaseId
,
final
SQLCaseType
sqlCaseType
,
final
List
<?>
parameters
)
{
switch
(
sqlCaseType
)
{
case
Literal:
return
getLiteralSQL
(
getSQLFromMap
(
sqlCaseId
,
sqlCaseMap
),
parameters
);
case
Placeholder:
return
getPlaceholderSQL
(
getSQLFromMap
(
sqlCaseId
,
sqlCaseMap
));
default
:
throw
new
UnsupportedOperationException
(
sqlCaseType
.
name
());
}
}
private
String
getPlaceholderSQL
(
final
String
sql
)
{
return
sql
.
replace
(
"%s"
,
"?"
).
replace
(
"%%"
,
"%"
);
}
private
String
getLiteralSQL
(
final
String
sql
,
final
List
<?>
parameters
)
{
if
(
null
==
parameters
||
parameters
.
isEmpty
())
{
return
sql
;
}
return
String
.
format
(
sql
,
parameters
.
toArray
()).
replace
(
"%%"
,
"%"
);
}
private
String
getSQLFromMap
(
final
String
id
,
final
Map
<
String
,
SQLCase
>
sqlCaseMap
)
{
...
...
@@ -205,17 +242,27 @@ public final class SQLCasesLoader {
private
Collection
<
Object
[]>
getTestParameters
(
final
Map
<
String
,
SQLCase
>
sqlCaseMap
,
final
Collection
<?
extends
Enum
>
allDatabaseTypes
,
final
Class
<?
extends
Enum
>
enumType
)
{
Collection
<
Object
[]>
result
=
new
LinkedList
<>();
for
(
SQLCase
each
:
sqlCaseMap
.
values
())
{
result
.
addAll
(
getTestParameters
(
each
,
allDatabaseTypes
,
enumType
));
result
.
addAll
(
getTestParameters
(
allDatabaseTypes
,
enumType
,
each
));
}
return
result
;
}
private
Collection
<
Object
[]>
getTestParameters
(
final
Collection
<?
extends
Enum
>
allDatabaseTypes
,
final
Class
<?
extends
Enum
>
enumType
,
final
SQLCase
sqlCase
)
{
Collection
<
Object
[]>
result
=
new
LinkedList
<>();
for
(
final
SQLCaseType
each
:
SQLCaseType
.
values
())
{
result
.
addAll
(
getTestParameters
(
sqlCase
,
allDatabaseTypes
,
enumType
,
each
));
}
return
result
;
}
private
static
Collection
<
Object
[]>
getTestParameters
(
final
SQLCase
sqlCase
,
final
Collection
<?
extends
Enum
>
allDatabaseTypes
,
final
Class
<?
extends
Enum
>
enumType
)
{
private
static
Collection
<
Object
[]>
getTestParameters
(
final
SQLCase
sqlCase
,
final
Collection
<?
extends
Enum
>
allDatabaseTypes
,
final
Class
<?
extends
Enum
>
enumType
,
final
SQLCaseType
sqlCaseType
)
{
Collection
<
Object
[]>
result
=
new
LinkedList
<>();
for
(
Enum
each
:
getDatabaseTypes
(
sqlCase
.
getDatabaseTypes
(),
allDatabaseTypes
,
enumType
))
{
Object
[]
parameters
=
new
Object
[
2
];
Object
[]
parameters
=
new
Object
[
3
];
parameters
[
0
]
=
sqlCase
.
getId
();
parameters
[
1
]
=
each
;
parameters
[
2
]
=
sqlCaseType
;
result
.
add
(
parameters
);
}
return
result
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录