提交 41bcbcf6 编写于 作者: T tuohai666

Merge remote-tracking branch 'upstream/dev' into dev

......@@ -92,7 +92,7 @@ public class WhereClauseParser implements SQLClauseParser {
private void parseWhere(final ShardingRule shardingRule, final SQLStatement sqlStatement, final List<SelectItem> items) {
OrCondition orCondition = parseOr(shardingRule, sqlStatement, items).optimize();
if (1 != orCondition.getAndConditions().size() || !(orCondition.getAndConditions().iterator().next().getConditions().iterator().next() instanceof NullCondition)) {
if (1 != orCondition.getAndConditions().size() || !(orCondition.getAndConditions().get(0).getConditions().get(0) instanceof NullCondition)) {
sqlStatement.getConditions().getOrCondition().getAndConditions().addAll(orCondition.getAndConditions());
}
}
......
......@@ -61,7 +61,7 @@ public final class OrCondition {
*/
public OrCondition optimize() {
for (AndCondition each : andConditions) {
if (each.getConditions().iterator().next() instanceof NullCondition) {
if (each.getConditions().get(0) instanceof NullCondition) {
OrCondition result = new OrCondition();
result.add(new NullCondition());
return result;
......
......@@ -66,9 +66,9 @@ public final class StandardRoutingEngine implements RoutingEngine {
if (shardingConditions.getShardingConditions().isEmpty()) {
routedDataNodes.addAll(route(tableRule, Collections.<ShardingValue>emptyList(), Collections.<ShardingValue>emptyList()));
} else {
for (ShardingCondition shardingCondition : shardingConditions.getShardingConditions()) {
List<ShardingValue> databaseShardingValues = getShardingValues(databaseShardingColumns, shardingCondition);
List<ShardingValue> tableShardingValues = getShardingValues(tableShardingColumns, shardingCondition);
for (ShardingCondition each : shardingConditions.getShardingConditions()) {
List<ShardingValue> databaseShardingValues = getShardingValues(databaseShardingColumns, each);
List<ShardingValue> tableShardingValues = getShardingValues(tableShardingColumns, each);
routedDataNodes.addAll(route(tableRule, databaseShardingValues, tableShardingValues));
}
}
......
......@@ -374,6 +374,22 @@ public final class ShardingRuleTest {
new ShardingRule(shardingRuleConfig, createDataSourceNames()).findDataNode("logic_table_x");
}
@Test(expected = ShardingConfigurationException.class)
public void assertFindDataNodeByLogicTableFailureWithDataSourceName() {
ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
TableRuleConfiguration tableRuleConfig = createTableRuleConfig();
shardingRuleConfig.getTableRuleConfigs().add(tableRuleConfig);
assertThat(new ShardingRule(shardingRuleConfig, createDataSourceNames()).findDataNode("ds3", "logic_table").getDataSourceName(), is("ds0"));
}
@Test
public void assertIsLogicIndex() {
ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
TableRuleConfiguration tableRuleConfig = createTableRuleConfigWithLogicIndex();
shardingRuleConfig.getTableRuleConfigs().add(tableRuleConfig);
assertTrue(new ShardingRule(shardingRuleConfig, createDataSourceNames()).isLogicIndex("index_table", "logic_table"));
}
private ShardingRule createShardingRule() {
ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
TableRuleConfiguration tableRuleConfig = createTableRuleConfig();
......@@ -442,4 +458,5 @@ public final class ShardingRuleTest {
result.setTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("column", new TestPreciseShardingAlgorithm()));
return result;
}
}
......@@ -411,9 +411,9 @@
<table name="t_order_item" alias="i"/>
</tables>
<tokens>
<table-token begin-position="20" original-literals="t_order" />
<table-token begin-position="60" original-literals="t_order_item" />
<index-token begin-position="42" original-literals="order_index" table-name="t_order" />
<table-token begin-position="16" original-literals="t_order" />
<table-token begin-position="56" original-literals="t_order_item" />
<index-token begin-position="38" original-literals="order_index" table-name="t_order" />
</tokens>
<or-condition>
<and-condition>
......
<dataset>
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
</dataset>
<dataset>
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
</dataset>
<dataset>
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
<t_order a="1" />
</dataset>
<dataset>
<t_order item_id="100000" order_id="1000" user_id="10" status="init" c_date="2017-08-08" />
<t_order item_id="100001" order_id="1000" user_id="10" status="init" c_date="2017-08-08" />
<t_order item_id="110000" order_id="1100" user_id="11" status="init" c_date="2017-08-18" />
<t_order item_id="110001" order_id="1100" user_id="11" status="init" c_date="2017-08-18" />
</dataset>
......@@ -19,7 +19,7 @@
<sql-case id="assertSelectCountWithBindingTable" value="SELECT COUNT(*) AS items_count FROM t_order o, t_order_item i WHERE o.user_id = i.user_id AND o.order_id = i.order_id AND o.user_id IN (%s, %s) AND o.order_id BETWEEN %s AND %s" />
<sql-case id="assertSelectCountWithBindingTableWithJoin" value="SELECT COUNT(*) AS items_count FROM t_order o JOIN t_order_item i ON o.user_id = i.user_id AND o.order_id = i.order_id WHERE o.user_id IN (%s, %s) AND o.order_id BETWEEN %s AND %s" />
<sql-case id="assertSelectAliasWithKeyword" value="SELECT length.item_id password FROM t_order_item length where length.item_id = %s " db-types="MySQL,H2,SQLServer,Oracle" />
<sql-case id="assertSelectWithJoinForceIndex" value="SELECT o.*,i.* FROM t_order o FORCE INDEX(order_index) JOIN t_order_item i WHERE o.order_id = %s" db-types="MySQL" />
<sql-case id="assertSelectWithJoinForceIndex" value="SELECT i.* FROM t_order o FORCE INDEX(order_index) JOIN t_order_item i WHERE o.order_id = %s" db-types="MySQL" />
<sql-case id="assertSelectEqualsWithJsonAnGeo" value="SELECT * FROM t_place WHERE rule = %s::jsonb AND start_point=ST_GeographyFromText('SRID=4326;POINT('||%s||' '||%s||')') AND user_new_id = %s" db-types="PostgreSQL" />
<sql-case id="assertSelectInWithJsonAnGeo" value="SELECT * FROM t_place WHERE rule IN (%s::jsonb, %s::jsonb) AND start_point=ST_GeographyFromText('SRID=4326;POINT('||%s||' '||%s||')') AND user_new_id = %s" db-types="PostgreSQL" />
<sql-case id="assertSelectBetweenWithJsonAnGeo" value="SELECT * FROM t_place WHERE rule BETWEEN %s::jsonb AND %s::jsonb AND start_point=ST_GeographyFromText('SRID=4326;POINT('||%s||' '||%s||')') AND user_new_id = %s" db-types="PostgreSQL" />
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册