提交 212ba064 编写于 作者: H haocao

Refactor statement parsing test cases for conditions.

上级 e069ec69
......@@ -27,11 +27,16 @@ public final class Conditions {
// TODO 添加condition时进行判断, 比如:如果以存在 等于操作 的condition, 而已存在包含 =符号 的相同column的condition, 则不添加现有的condition, 而且删除原有condition
public void add(final Condition condition, final ShardingRule shardingRule) {
// TODO 自关联有问题,表名可考虑使用别名对应
if(shardingRule.isShardingColumn(condition.getColumn())) {
if (shardingRule.isShardingColumn(condition.getColumn())) {
conditions.put(condition.getColumn(), condition);
}
}
// TODO 引入mockito时去掉该方法
public void add(final Condition condition) {
conditions.put(condition.getColumn(), condition);
}
/**
* 查找条件对象.
*
......
......@@ -23,6 +23,7 @@ import com.dangdang.ddframe.rdb.sharding.constant.ShardingOperator;
import com.dangdang.ddframe.rdb.sharding.parsing.jaxb.Assert;
import com.dangdang.ddframe.rdb.sharding.parsing.jaxb.Asserts;
import com.dangdang.ddframe.rdb.sharding.parsing.jaxb.Value;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.condition.Conditions;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.selectitem.AggregationSelectItem;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.condition.Condition;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.GroupBy;
......@@ -42,6 +43,7 @@ import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import lombok.AccessLevel;
import lombok.Getter;
import org.mockito.internal.matchers.apachecommons.ReflectionEquals;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
......@@ -49,11 +51,13 @@ import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
public abstract class AbstractBaseParseTest {
@Getter(AccessLevel.PROTECTED)
......@@ -63,7 +67,7 @@ public abstract class AbstractBaseParseTest {
private final Iterator<Table> expectedTables;
private final Iterator<Condition> expectedConditions;
private final Conditions expectedConditions;
private final Iterator<OrderBy> orderByList;
......@@ -74,11 +78,11 @@ public abstract class AbstractBaseParseTest {
private final Limit limit;
protected AbstractBaseParseTest(final String testCaseName, final String sql, final String expectedSQL,
final Collection<Table> expectedTables, final Collection<Condition> expectedConditions, final SQLStatement expectedSQLStatement) {
final Collection<Table> expectedTables, final Conditions expectedConditions, final SQLStatement expectedSQLStatement) {
this.sql = sql;
this.expectedSQL = expectedSQL;
this.expectedTables = expectedTables.iterator();
this.expectedConditions = expectedConditions.iterator();
this.expectedConditions = expectedConditions;
this.orderByList = expectedSQLStatement.getOrderByList().iterator();
this.groupByList = expectedSQLStatement.getGroupByList().iterator();
this.aggregationColumns = expectedSQLStatement.getAggregationSelectItems().iterator();
......@@ -122,49 +126,42 @@ public abstract class AbstractBaseParseTest {
return new Table(input.getName(), Optional.fromNullable(input.getAlias()));
}
});
if (null == assertObj.getConditionContexts()) {
result[4] = Collections.<Condition>emptyList();
if (null == assertObj.getConditions()) {
result[4] = new Conditions();
} else {
result[4] = Lists.transform(assertObj.getConditionContexts(), new Function<com.dangdang.ddframe.rdb.sharding.parsing.jaxb.ConditionContext, List<Condition>>() {
@Override
public List<Condition> apply(final com.dangdang.ddframe.rdb.sharding.parsing.jaxb.ConditionContext input) {
List<Condition> result = new LinkedList<>();
if (null == input.getConditions()) {
return result;
Conditions conditions = new Conditions();
for (com.dangdang.ddframe.rdb.sharding.parsing.jaxb.Condition each : assertObj.getConditions().getConditions()) {
List<SQLExpression> sqlExpressions = new LinkedList<>();
for (Value value : each.getValues()) {
Comparable<?> valueWithType = value.getValueWithType();
if (valueWithType instanceof Number) {
sqlExpressions.add(new SQLNumberExpression((Number) valueWithType));
} else {
sqlExpressions.add(new SQLTextExpression(valueWithType.toString()));
}
for (com.dangdang.ddframe.rdb.sharding.parsing.jaxb.Condition each : input.getConditions()) {
List<SQLExpression> sqlExpressions = new LinkedList<>();
for (Value value : each.getValues()) {
Comparable<?> valueWithType = value.getValueWithType();
if (valueWithType instanceof Number) {
sqlExpressions.add(new SQLNumberExpression((Number) valueWithType));
} else {
sqlExpressions.add(new SQLTextExpression(valueWithType.toString()));
}
}
for (int index : each.getValueIndices()) {
sqlExpressions.add(new SQLPlaceholderExpression(index));
}
Condition condition;
switch (ShardingOperator.valueOf(each.getOperator().toUpperCase())) {
case EQUAL:
condition = new Condition(new Column(each.getColumnName(), each.getTableName()), sqlExpressions.get(0));
break;
case BETWEEN:
condition = new Condition(new Column(each.getColumnName(), each.getTableName()), sqlExpressions.get(0), sqlExpressions.get(1));
break;
case IN:
condition = new Condition(new Column(each.getColumnName(), each.getTableName()), sqlExpressions);
break;
default:
throw new UnsupportedOperationException();
}
result.add(condition);
}
if (null != each.getValueIndices()) {
for (int index : each.getValueIndices()) {
sqlExpressions.add(new SQLPlaceholderExpression(index));
}
return result;
}
});
Condition condition;
switch (ShardingOperator.valueOf(each.getOperator().toUpperCase())) {
case EQUAL:
condition = new Condition(new Column(each.getColumnName(), each.getTableName()), sqlExpressions.get(0));
break;
case BETWEEN:
condition = new Condition(new Column(each.getColumnName(), each.getTableName()), sqlExpressions.get(0), sqlExpressions.get(1));
break;
case IN:
condition = new Condition(new Column(each.getColumnName(), each.getTableName()), sqlExpressions);
break;
default:
throw new UnsupportedOperationException();
}
conditions.add(condition);
}
result[4] = conditions;
}
SQLStatement selectStatement = new SelectStatement();
if (null != assertObj.getOrderByColumns()) {
......@@ -213,4 +210,13 @@ public abstract class AbstractBaseParseTest {
result[5] = selectStatement;
return result;
}
protected final void assertSQLParsedResult(final SQLStatement actual) {
assertConditionContexts(actual);
}
private void assertConditionContexts(final SQLStatement actual) {
assertThat(actual.getConditions(), is(new ReflectionEquals(expectedConditions)));
}
}
......@@ -45,9 +45,8 @@ public final class Assert {
@XmlElement(name = "table")
private List<Table> tables;
@XmlElementWrapper(name = "condition-contexts")
@XmlElement(name = "condition-context")
private List<ConditionContext> conditionContexts;
@XmlElement(name = "conditions")
private Conditions conditions;
@XmlElementWrapper(name = "order-by-columns")
@XmlElement(name = "order-by-column")
......
......@@ -27,7 +27,7 @@ import lombok.Getter;
@Getter
@XmlAccessorType(XmlAccessType.FIELD)
public final class ConditionContext {
public final class Conditions {
@XmlElement(name = "condition")
private List<Condition> conditions;
......
......@@ -21,7 +21,7 @@ import com.dangdang.ddframe.rdb.sharding.api.fixture.ShardingRuleMockBuilder;
import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType;
import com.dangdang.ddframe.rdb.sharding.parsing.AbstractBaseParseTest;
import com.dangdang.ddframe.rdb.sharding.parsing.SQLParsingEngine;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.condition.Condition;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.condition.Conditions;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.table.Table;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.SQLStatement;
import org.junit.Test;
......@@ -30,13 +30,12 @@ import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import java.util.Collection;
import java.util.List;
@RunWith(Parameterized.class)
public final class MySQLPreparedStatementForOneParameterTest extends AbstractBaseParseTest {
public MySQLPreparedStatementForOneParameterTest(final String testCaseName, final String sql, final String expectedSQL, final Collection<Table> expectedTables,
final List<Condition> expectedConditions, final SQLStatement expectedSQLStatement) {
final Conditions expectedConditions, final SQLStatement expectedSQLStatement) {
super(testCaseName, sql, expectedSQL, expectedTables, expectedConditions, expectedSQLStatement);
}
......
......@@ -21,7 +21,7 @@ import com.dangdang.ddframe.rdb.sharding.api.fixture.ShardingRuleMockBuilder;
import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType;
import com.dangdang.ddframe.rdb.sharding.parsing.AbstractBaseParseTest;
import com.dangdang.ddframe.rdb.sharding.parsing.SQLParsingEngine;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.condition.Condition;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.condition.Conditions;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.table.Table;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.SQLStatement;
import org.junit.Test;
......@@ -30,14 +30,13 @@ import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import java.util.Collection;
import java.util.List;
@RunWith(Parameterized.class)
public final class MySQLPreparedStatementForTwoParametersTest extends AbstractBaseParseTest {
public MySQLPreparedStatementForTwoParametersTest(
final String testCaseName, final String sql, final String expectedSQL,
final Collection<Table> expectedTables, final List<Condition> expectedConditions, final SQLStatement expectedSQLStatement) {
final Collection<Table> expectedTables, final Conditions expectedConditions, final SQLStatement expectedSQLStatement) {
super(testCaseName, sql, expectedSQL, expectedTables, expectedConditions, expectedSQLStatement);
}
......
......@@ -21,7 +21,7 @@ import com.dangdang.ddframe.rdb.sharding.api.fixture.ShardingRuleMockBuilder;
import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType;
import com.dangdang.ddframe.rdb.sharding.parsing.AbstractBaseParseTest;
import com.dangdang.ddframe.rdb.sharding.parsing.SQLParsingEngine;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.condition.Condition;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.condition.Conditions;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.table.Table;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.SQLStatement;
import org.junit.Test;
......@@ -30,14 +30,13 @@ import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import java.util.Collection;
import java.util.List;
@RunWith(Parameterized.class)
public final class MySQLStatementTest extends AbstractBaseParseTest {
public MySQLStatementTest(
final String testCaseName, final String sql, final String expectedSQL,
final Collection<Table> expectedTables, final List<Condition> expectedConditions, final SQLStatement expectedSQLStatement) {
final Collection<Table> expectedTables, final Conditions expectedConditions, final SQLStatement expectedSQLStatement) {
super(testCaseName, sql, expectedSQL, expectedTables, expectedConditions, expectedSQLStatement);
}
......@@ -48,7 +47,7 @@ public final class MySQLStatementTest extends AbstractBaseParseTest {
@Test
public void assertParse() {
new SQLParsingEngine(DatabaseType.MySQL, getSql(), new ShardingRuleMockBuilder().addShardingColumns("user_id").addShardingColumns("order_id").addShardingColumns("state")
.addGenerateKeyColumn("order", "order_id").addGenerateKeyColumn("payment", "id").addGenerateKeyColumn("payment", "order_id").build()).parse();
assertSQLParsedResult(new SQLParsingEngine(DatabaseType.MySQL, getSql(), new ShardingRuleMockBuilder().addShardingColumns("user_id").addShardingColumns("order_id").addShardingColumns("state")
.addGenerateKeyColumn("order", "order_id").addGenerateKeyColumn("payment", "id").addGenerateKeyColumn("payment", "order_id").build()).parse());
}
}
......@@ -21,7 +21,7 @@ import com.dangdang.ddframe.rdb.sharding.api.fixture.ShardingRuleMockBuilder;
import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType;
import com.dangdang.ddframe.rdb.sharding.parsing.AbstractBaseParseTest;
import com.dangdang.ddframe.rdb.sharding.parsing.SQLParsingEngine;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.condition.Condition;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.condition.Conditions;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.table.Table;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.SQLStatement;
import org.junit.Ignore;
......@@ -31,14 +31,13 @@ import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import java.util.Collection;
import java.util.List;
@RunWith(Parameterized.class)
public final class OrParseTest extends AbstractBaseParseTest {
public OrParseTest(
final String testCaseName, final String sql, final String expectedSQL,
final Collection<Table> expectedTables, final List<Condition> expectedConditions, final SQLStatement expectedSQLStatement) {
final Collection<Table> expectedTables, final Conditions expectedConditions, final SQLStatement expectedSQLStatement) {
super(testCaseName, sql, expectedSQL, expectedTables, expectedConditions, expectedSQLStatement);
}
......
<?xml version="1.0" encoding="UTF-8"?>
<asserts>
<!-- // TODO or
<assert id="assertSelectWithOrForOne" sql="select id from travel_record where fee in (3) or days = 5 or name = 'zhangsan'" expected-sql="SELECT id FROM [Token(travel_record)] WHERE fee IN (3) OR days = 5 OR name = 'zhangsan'">
<tables>
<table name="travel_record" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="name" table-name="travel_record" operator="EQUAL">
<value value="zhangsan" type="java.lang.String" />
</condition>
</condition-context>
<condition-context>
<condition column-name="days" table-name="travel_record" operator="EQUAL">
<value value="5" type="int" />
</condition>
</condition-context>
<condition-context>
<condition column-name="fee" table-name="travel_record" operator="IN">
<value value="3" type="int" />
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="name" table-name="travel_record" operator="EQUAL">
<value value="zhangsan" type="java.lang.String" />
</condition>
<condition column-name="days" table-name="travel_record" operator="EQUAL">
<value value="5" type="int" />
</condition>
<condition column-name="fee" table-name="travel_record" operator="IN">
<value value="3" type="int" />
</condition>
</conditions>
</assert>
<assert id="assertSelectWithOrAnd" sql="select id from travel_record where fee in (3) and ( days = 5 or name = 'zhangsan') and age = 3" expected-sql="SELECT id FROM [Token(travel_record)] WHERE fee IN (3) AND (days = 5 OR name = 'zhangsan') AND age = 3">
<tables>
<table name="travel_record" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="name" table-name="travel_record" operator="EQUAL">
<value value="zhangsan" type="java.lang.String" />
</condition>
<condition column-name="fee" table-name="travel_record" operator="IN">
<value value="3" type="int" />
</condition>
<condition column-name="age" table-name="travel_record" operator="EQUAL">
<value value="3" type="int" />
</condition>
</condition-context>
<condition-context>
<condition column-name="days" table-name="travel_record" operator="EQUAL">
<value value="5" type="int" />
</condition>
<condition column-name="fee" table-name="travel_record" operator="IN">
<value value="3" type="int" />
</condition>
<condition column-name="age" table-name="travel_record" operator="EQUAL">
<value value="3" type="int" />
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="name" table-name="travel_record" operator="EQUAL">
<value value="zhangsan" type="java.lang.String" />
</condition>
<condition column-name="fee" table-name="travel_record" operator="IN">
<value value="3" type="int" />
</condition>
<condition column-name="age" table-name="travel_record" operator="EQUAL">
<value value="3" type="int" />
</condition>
<condition column-name="days" table-name="travel_record" operator="EQUAL">
<value value="5" type="int" />
</condition>
<condition column-name="fee" table-name="travel_record" operator="IN">
<value value="3" type="int" />
</condition>
<condition column-name="age" table-name="travel_record" operator="EQUAL">
<value value="3" type="int" />
</condition>
</conditions>
</assert>
<assert id="assertSelectWithComplicatedOrExpression" sql="select id from travel_record where id = 1 and ( fee=3 or days=5 or (travel_date = '2015-05-04 00:00:07.375' and (user_id=2 or days=2 or fee = 0))) and id=2" expected-sql="SELECT id FROM [Token(travel_record)] WHERE id = 1 AND (fee = 3 OR days = 5 OR travel_date = '2015-05-04 00:00:07.375' AND (user_id = 2 OR days = 2 OR fee = 0)) AND id = 2">
......@@ -186,4 +177,5 @@
</condition-context>
</condition-contexts>
</assert>
-->
</asserts>
......@@ -4,13 +4,11 @@
<tables>
<table name="order" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="order_id" table-name="order" operator="IN">
<value value="1" type="java.lang.Integer" />
<valueIndices>0</valueIndices>
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="order_id" table-name="order" operator="IN">
<value value="1" type="java.lang.Integer" />
<valueIndices>0</valueIndices>
</condition>
</conditions>
</assert>
</asserts>
......@@ -4,50 +4,44 @@
<tables>
<table name="order" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="order_id" table-name="order" operator="EQUAL">
<value value="1" type="java.lang.Integer" />
<valueIndices>0</valueIndices>
</condition>
<condition column-name="state" table-name="order" operator="EQUAL">
<value value="RUNNING" type="java.lang.String" />
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="order_id" table-name="order" operator="EQUAL">
<value value="1" type="java.lang.Integer" />
<valueIndices>0</valueIndices>
</condition>
<condition column-name="state" table-name="order" operator="EQUAL">
<value value="RUNNING" type="java.lang.String" />
</condition>
</conditions>
</assert>
<assert id="assertInsertWithParameterAndGenerateKeyColumnIsShardingColumn" sql="insert into `order`('state') values(?)" expected-sql="insert into [Token(order)]('state', order_id) values(?, ?)">
<tables>
<table name="order" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="state" table-name="order" operator="EQUAL">
<value value="1" type="java.lang.Integer" />
<valueIndices>0</valueIndices>
</condition>
<condition column-name="order_id" table-name="order" operator="EQUAL">
<value value="1" type="java.lang.Integer" />
<valueIndices>1</valueIndices>
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="state" table-name="order" operator="EQUAL">
<value value="1" type="java.lang.Integer" />
<valueIndices>0</valueIndices>
</condition>
<condition column-name="order_id" table-name="order" operator="EQUAL">
<value value="1" type="java.lang.Integer" />
<valueIndices>1</valueIndices>
</condition>
</conditions>
</assert>
<assert id="assertInsertWithParameterAndGenerateKeyColumn" sql="insert into `payment`('state') values(?)" expected-sql="insert into [Token(payment)]('state', order_id, pay_no) values(?, ?, ?)">
<tables>
<table name="payment" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="state" table-name="payment" operator="EQUAL">
<value value="1" type="java.lang.Integer" />
<valueIndices>0</valueIndices>
</condition>
<condition column-name="order_id" table-name="payment" operator="EQUAL">
<value value="1" type="java.lang.Integer" />
<valueIndices>1</valueIndices>
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="state" table-name="payment" operator="EQUAL">
<value value="1" type="java.lang.Integer" />
<valueIndices>0</valueIndices>
</condition>
<condition column-name="order_id" table-name="payment" operator="EQUAL">
<value value="1" type="java.lang.Integer" />
<valueIndices>1</valueIndices>
</condition>
</conditions>
</assert>
</asserts>
......@@ -4,15 +4,13 @@
<tables>
<table name="order" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="order_id" table-name="order" operator="IN">
<value value="1" type="int" />
<value value="2" type="int" />
<value value="3" type="int" />
<valueIndices>0</valueIndices>
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="order_id" table-name="order" operator="IN">
<value value="1" type="int" />
<value value="2" type="int" />
<value value="3" type="int" />
<valueIndices>0</valueIndices>
</condition>
</conditions>
</assert>
</asserts>
......@@ -4,9 +4,6 @@
<tables>
<table name="order" alias="o" />
</tables>
<condition-contexts>
<condition-context />
</condition-contexts>
<limit offset="0" row-count="1" offset-index="-1" row-count-index="0"/>
</assert>
</asserts>
......@@ -4,13 +4,11 @@
<tables>
<table name="order" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="order_id" table-name="order" operator="EQUAL">
<value value="1" type="java.lang.Integer" />
<valueIndices>0</valueIndices>
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="order_id" table-name="order" operator="EQUAL">
<value value="1" type="java.lang.Integer" />
<valueIndices>0</valueIndices>
</condition>
</conditions>
</assert>
</asserts>
......@@ -4,15 +4,13 @@
<tables>
<table name="order" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="order_id" table-name="order" operator="BETWEEN">
<value value="1" type="int" />
<value value="2" type="int" />
<valueIndices>0</valueIndices>
<valueIndices>1</valueIndices>
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="order_id" table-name="order" operator="BETWEEN">
<value value="1" type="int" />
<value value="2" type="int" />
<valueIndices>0</valueIndices>
<valueIndices>1</valueIndices>
</condition>
</conditions>
</assert>
</asserts>
......@@ -4,9 +4,6 @@
<tables>
<table name="order" alias="o" />
</tables>
<condition-contexts>
<condition-context />
</condition-contexts>
<limit offset="1" row-count="2" offset-index="0" row-count-index="1"/>
</assert>
</asserts>
......@@ -4,28 +4,24 @@
<tables>
<table name="order" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="order_id" table-name="order" operator="IN">
<value value="1" type="java.lang.Integer" />
<value value="2" type="java.lang.Integer" />
<value value="3" type="java.lang.Integer" />
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="order_id" table-name="order" operator="IN">
<value value="1" type="java.lang.Integer" />
<value value="2" type="java.lang.Integer" />
<value value="3" type="java.lang.Integer" />
</condition>
</conditions>
</assert>
<assert id="assertDeleteWithAlias" sql="DELETE FROM `order` o WHERE order_id BETWEEN 1 AND 3" expected-sql="DELETE FROM [Token(order)] o WHERE order_id BETWEEN 1 AND 3">
<tables>
<table name="order" alias="o" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="order_id" table-name="order" operator="BETWEEN">
<value value="1" type="java.lang.Integer" />
<value value="3" type="java.lang.Integer" />
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="order_id" table-name="order" operator="BETWEEN">
<value value="1" type="java.lang.Integer" />
<value value="3" type="java.lang.Integer" />
</condition>
</conditions>
</assert>
</asserts>
......@@ -4,64 +4,39 @@
<tables>
<table name="order" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="order_id" table-name="order" operator="EQUAL">
<value value="1" type="java.lang.Integer" />
</condition>
<condition column-name="state" table-name="order" operator="EQUAL">
<value value="RUNNING" type="java.lang.String" />
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="order_id" table-name="order" operator="EQUAL">
<value value="1" type="java.lang.Integer" />
</condition>
<condition column-name="state" table-name="order" operator="EQUAL">
<value value="RUNNING" type="java.lang.String" />
</condition>
</conditions>
</assert>
<assert id="assertInsertWithGenerateKeyColumn" sql="insert into `order`('state') values('RUNNING')" expected-sql="insert into [Token(order)]('state', order_id) values('RUNNING', 1)">
<tables>
<table name="order" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="state" table-name="order" operator="EQUAL">
<value value="RUNNING" type="java.lang.String" />
</condition>
<condition column-name="order_id" table-name="order" operator="EQUAL">
<value value="1" type="java.lang.Integer" />
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="state" table-name="order" operator="EQUAL">
<value value="RUNNING" type="java.lang.String" />
</condition>
</conditions>
</assert>
<assert id="assertInsertWithoutGenerateKeyColumn" sql="insert into `user`('user_id', 'state') values(1, 'RUNNING')" expected-sql="insert into [Token(user)]('user_id', 'state') values(1, 'RUNNING')">
<tables>
<table name="user" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="user_id" table-name="user" operator="EQUAL">
<value value="1" type="java.lang.Integer" />
</condition>
<condition column-name="state" table-name="user" operator="EQUAL">
<value value="RUNNING" type="java.lang.String" />
</condition>
</condition-context>
</condition-contexts>
</assert>
<assert id="assertInsertWithMultiGenerateKeyColumn" sql="insert into `payment`('state') values('RUNNING')" expected-sql="insert into [Token(payment)]('state', id, order_id) values('RUNNING', 1, 1)">
<tables>
<table name="payment" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="state" table-name="payment" operator="EQUAL">
<value value="RUNNING" type="java.lang.String" />
</condition>
<condition column-name="order_id" table-name="payment" operator="EQUAL">
<value value="1" type="java.lang.Integer" />
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="user_id" table-name="user" operator="EQUAL">
<value value="1" type="java.lang.Integer" />
</condition>
<condition column-name="state" table-name="user" operator="EQUAL">
<value value="RUNNING" type="java.lang.String" />
</condition>
</conditions>
</assert>
<!-- // TODO
......
......@@ -6,13 +6,11 @@
<table name="order" alias="o" />
<table name="order_item" alias="i" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="user_id" table-name="user" operator="EQUAL">
<value value="1000" type="java.lang.Integer" />
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="user_id" table-name="user" operator="EQUAL">
<value value="1000" type="java.lang.Integer" />
</condition>
</conditions>
</assert>
<assert id="assertSelectWithJoin" sql="SELECT * FROM order INNER JOIN user u ON u.user_id = order.user_id JOIN order_item i ON u.user_id = i.user_id WHERE u.user_id = 1000" expected-sql="SELECT * FROM [Token(order)] INNER JOIN [Token(user)] u ON u.user_id = [Token(order)].user_id JOIN [Token(order_item)] i ON u.user_id = i.user_id WHERE u.user_id = 1000">
......@@ -21,13 +19,11 @@
<table name="user" alias="u" />
<table name="order_item" alias="i" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="user_id" table-name="user" operator="EQUAL">
<value value="1000" type="java.lang.Integer" />
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="user_id" table-name="user" operator="EQUAL">
<value value="1000" type="java.lang.Integer" />
</condition>
</conditions>
</assert>
<assert id="assertSelectWithJoinUsing" sql="SELECT * FROM user u JOIN order o USING(user_id) JOIN order_item USING(user_id) WHERE u.user_id = 1000" expected-sql="SELECT * FROM [Token(user)] u JOIN [Token(order)] o USING(user_id) JOIN [Token(order_item)] USING(user_id) WHERE u.user_id = 1000">
......@@ -36,13 +32,11 @@
<table name="order" alias="o" />
<table name="order_item" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="user_id" table-name="user" operator="EQUAL">
<value value="1000" type="java.lang.Integer" />
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="user_id" table-name="user" operator="EQUAL">
<value value="1000" type="java.lang.Integer" />
</condition>
</conditions>
</assert>
<assert id="assertSelectAmbiguousTableName" sql="SELECT * FROM user u JOIN order o USING(user_id) JOIN order_item USING(user_id) WHERE u.user_id = 1000" expected-sql="SELECT * FROM [Token(user)] u JOIN [Token(order)] o USING(user_id) JOIN [Token(order_item)] USING(user_id) WHERE u.user_id = 1000">
......@@ -51,13 +45,11 @@
<table name="order" alias="o" />
<table name="order_item" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="user_id" table-name="user" operator="EQUAL">
<value value="1000" type="java.lang.Integer" />
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="user_id" table-name="user" operator="EQUAL">
<value value="1000" type="java.lang.Integer" />
</condition>
</conditions>
</assert>
<!-- // TODO 目前无法在条件中解析出来不同子关联对应的条件 -->
......@@ -66,8 +58,5 @@
<table name="order" />
<table name="order_item" />
</tables>
<condition-contexts>
<condition-context />
</condition-contexts>
</assert>
</asserts>
......@@ -4,9 +4,6 @@
<tables>
<table name="order"/>
</tables>
<condition-contexts>
<condition-context />
</condition-contexts>
<aggregation-columns>
<aggregation-column expression="COUNT(MAX(*))" aggregation-type="COUNT" alias="c" index="1" />
<aggregation-column expression="MAX(MIN(date))" aggregation-type="MAX" index="3" />
......@@ -18,9 +15,6 @@
<tables>
<table name="order"/>
</tables>
<condition-contexts>
<condition-context />
</condition-contexts>
<aggregation-columns>
<aggregation-column expression="AVG(MAX(date))" aggregation-type="AVG" alias="date" index="1">
<derived-column expression="COUNT(MAX(date))" aggregation-type="COUNT" alias="sharding_gen_1"/>
......@@ -41,9 +35,6 @@
<tables>
<table name="order"/>
</tables>
<condition-contexts>
<condition-context />
</condition-contexts>
<group-by-columns>
<group-by-column name="order_id" order-by-type="ASC" />
</group-by-columns>
......@@ -56,9 +47,6 @@
<tables>
<table name="order"/>
</tables>
<condition-contexts>
<condition-context />
</condition-contexts>
</assert>
<!-- // TODO 有*时,聚合的偏移量不准确 -->
......@@ -66,9 +54,6 @@
<tables>
<table name="order"/>
</tables>
<condition-contexts>
<condition-context />
</condition-contexts>
<aggregation-columns>
<aggregation-column expression="COUNT(time)" aggregation-type="COUNT" index="2" />
</aggregation-columns>
......
......@@ -4,9 +4,6 @@
<tables>
<table name="order" alias="o" />
</tables>
<condition-contexts>
<condition-context />
</condition-contexts>
<group-by-columns>
<group-by-column owner="o" name="state" alias="sharding_gen_1" order-by-type="ASC" />
</group-by-columns>
......@@ -16,9 +13,6 @@
<tables>
<table name="order" alias="o" />
</tables>
<condition-contexts>
<condition-context />
</condition-contexts>
<group-by-columns>
<group-by-column owner="o" name="state" order-by-type="ASC" />
</group-by-columns>
......@@ -28,9 +22,6 @@
<tables>
<table name="order" alias="o" />
</tables>
<condition-contexts>
<condition-context />
</condition-contexts>
<group-by-columns>
<group-by-column owner="o" name="state" alias="sharding_gen_1" order-by-type="ASC" />
<group-by-column owner="o" name="order_id" alias="sharding_gen_2" order-by-type="DESC" />
......
......@@ -4,9 +4,6 @@
<tables>
<table name="order" alias="o" />
</tables>
<condition-contexts>
<condition-context />
</condition-contexts>
<limit offset="4" row-count="5" offset-index="-1" row-count-index="-1"/>
</assert>
......@@ -14,9 +11,6 @@
<tables>
<table name="order" alias="o" />
</tables>
<condition-contexts>
<condition-context />
</condition-contexts>
<limit offset="0" row-count="5" offset-index="-1" row-count-index="-1" />
</assert>
......@@ -24,9 +18,6 @@
<tables>
<table name="order" alias="o" />
</tables>
<condition-contexts>
<condition-context />
</condition-contexts>
<limit offset="4" row-count="5" offset-index="-1" row-count-index="-1" />
</assert>
......@@ -35,9 +26,6 @@
<tables>
<table name="order" />
</tables>
<condition-contexts>
<condition-context />
</condition-contexts>
</assert>
-->
</asserts>
......@@ -4,9 +4,6 @@
<tables>
<table name="order" alias="o" />
</tables>
<condition-contexts>
<condition-context />
</condition-contexts>
<order-by-columns>
<order-by-column owner="o" name="order_id" order-by-type="ASC" />
<order-by-column index="2" order-by-type="DESC" />
......@@ -18,13 +15,11 @@
<table name="order" alias="o" />
<table name="order_item" alias="i" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="state" table-name="order" operator="EQUAL">
<value value="RUNNING" type="java.lang.String" />
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="state" table-name="order" operator="EQUAL">
<value value="RUNNING" type="java.lang.String" />
</condition>
</conditions>
<order-by-columns>
<order-by-column owner="o" name="order_id" order-by-type="DESC" />
<order-by-column index="2" order-by-type="ASC" />
......@@ -35,10 +30,6 @@
<tables>
<table name="order" alias="o" />
</tables>
<condition-contexts>
<condition-context>
</condition-context>
</condition-contexts>
<order-by-columns>
<order-by-column owner="o" name="order_id" alias="gen_order_id_" order-by-type="ASC" />
</order-by-columns>
......
......@@ -5,9 +5,6 @@
<tables>
<table name="order" />
</tables>
<condition-contexts>
<condition-context />
</condition-contexts>
</assert>
-->
......@@ -15,162 +12,142 @@
<tables>
<table name="db.order" />
</tables>
<condition-contexts>
<condition-context />
</condition-contexts>
</assert>
<assert id="assertSelectWithTableNameAsAlias" sql="select * from order where order.order_id = 1" expected-sql="SELECT * FROM [Token(order)] WHERE [Token(order)].order_id = 1">
<tables>
<table name="order" />
</tables>
<condition-contexts>
<condition-context>
<conditions>
<condition column-name="order_id" table-name="order" operator="EQUAL">
<value value="1" type="java.lang.Integer" />
</condition>
</condition-context>
</condition-contexts>
</conditions>
</assert>
<assert id="assertSelectWithAlias" sql="select * from order o where o.order_id = 1" expected-sql="select * from [Token(order)] o where o.order_id = 1">
<tables>
<table name="order" alias="o" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="order_id" table-name="order" operator="EQUAL">
<value value="1" type="java.lang.Integer" />
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="order_id" table-name="order" operator="EQUAL">
<value value="1" type="java.lang.Integer" />
</condition>
</conditions>
</assert>
<assert id="assertSelectWithCondition" sql="select * from order where order_id = 1 and state = 'RUNNING'" expected-sql="select * from [Token(order)] where order_id = 1 and state = 'RUNNING'">
<tables>
<table name="order" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="order_id" table-name="order" operator="EQUAL">
<value value="1" type="int" />
</condition>
<condition column-name="state" table-name="order" operator="EQUAL">
<value value="RUNNING" type="java.lang.String" />
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="order_id" table-name="order" operator="EQUAL">
<value value="1" type="int" />
</condition>
<condition column-name="state" table-name="order" operator="EQUAL">
<value value="RUNNING" type="java.lang.String" />
</condition>
</conditions>
</assert>
<assert id="assertSelectForShardingKeySelectCondition" sql="select * from order where order_id = 1 and other_state = 'RUNNING'" expected-sql="select * from [Token(order)] where order_id = 1 and other_state = 'RUNNING'">
<tables>
<table name="order" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="order_id" table-name="order" operator="EQUAL">
<value value="1" type="int" />
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="order_id" table-name="order" operator="EQUAL">
<value value="1" type="int" />
</condition>
</conditions>
</assert>
<assert id="assertSelectForBetween" sql="select * from order where order_id between 1 and 10 and other_state = 'RUNNING'" expected-sql="select * from [Token(order)] where order_id between 1 and 10 and other_state = 'RUNNING'">
<tables>
<table name="order" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="order_id" table-name="order" operator="BETWEEN">
<value value="1" type="int" />
<value value="10" type="int" />
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="order_id" table-name="order" operator="BETWEEN">
<value value="1" type="int" />
<value value="10" type="int" />
</condition>
</conditions>
</assert>
<assert id="assertSelectForIn" sql="select * from order where order_id in (1,2,3) and other_state = 'RUNNING'" expected-sql="select * from [Token(order)] where order_id in (1,2,3) and other_state = 'RUNNING'">
<tables>
<table name="order" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="order_id" table-name="order" operator="IN">
<value value="1" type="int" />
<value value="2" type="int" />
<value value="3" type="int" />
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="order_id" table-name="order" operator="IN">
<value value="1" type="int" />
<value value="2" type="int" />
<value value="3" type="int" />
</condition>
</conditions>
</assert>
<assert id="assertSelectForInWithTableName" sql="select * from order where order.order_id in (1,2,3) and order.other_state = 'RUNNING'" expected-sql="SELECT * FROM [Token(order)] WHERE [Token(order)].order_id IN (1, 2, 3) AND [Token(order)].other_state = 'RUNNING'">
<tables>
<table name="order" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="order_id" table-name="order" operator="IN">
<value value="1" type="int" />
<value value="2" type="int" />
<value value="3" type="int" />
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="order_id" table-name="order" operator="IN">
<value value="1" type="int" />
<value value="2" type="int" />
<value value="3" type="int" />
</condition>
</conditions>
</assert>
<assert id="assertSelectForBetweenWithTableName" sql="select * from order where order.order_id between 1 and 3 and order.other_state = 'RUNNING'" expected-sql="SELECT * FROM [Token(order)] WHERE [Token(order)].order_id BETWEEN 1 AND 3 AND [Token(order)].other_state = 'RUNNING'">
<tables>
<table name="order" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="order_id" table-name="order" operator="BETWEEN">
<value value="1" type="int" />
<value value="3" type="int" />
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="order_id" table-name="order" operator="BETWEEN">
<value value="1" type="int" />
<value value="3" type="int" />
</condition>
</conditions>
</assert>
<assert id="assertSelectWithDateFunction" sql="select * from order where date = str_to_date('2013-01-01 01:21:01','%Y-%m-%d %H:%i:%s')" expected-sql="select * from [Token(order)] where date = str_to_date('2013-01-01 01:21:01','%Y-%m-%d %H:%i:%s')">
<tables>
<table name="order" />
</tables>
<condition-contexts>
<condition-context />
</condition-contexts>
</assert>
<!-- // TODO 这里可优化,将两个字段AND = 替换为永false -->
<!-- // TODO 测试用例condition条件不对 -->
<!--
<assert id="assertSelectWithSameShardingColumnForAnd" sql="select * from order where order_id = 1 and order_id = 2" expected-sql="select * from [Token(order)] where order_id = 1 and order_id = 2">
<tables>
<table name="order" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="order_id" table-name="order" operator="EQUAL">
<value value="1" type="int" />
<value value="2" type="int" />
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="order_id" table-name="order" operator="EQUAL">
<value value="1" type="int" />
<value value="2" type="int" />
</condition>
</conditions>
</assert>
-->
<!-- // TODO 目前对于IN多结果不同做到交集处理 仅仅是简单的加入 -->
<!-- // TODO 测试用例condition条件不对 -->
<!--
<assert id="assertSelectWithSameShardingColumnForIn" sql="select * from order where order_id in(1,3) and order_id in (2,4)" expected-sql="select * from [Token(order)] where order_id in(1,3) and order_id in (2,4)">
<tables>
<table name="order" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="order_id" table-name="order" operator="IN">
<value value="1" type="int" />
<value value="3" type="int" />
<value value="2" type="int" />
<value value="4" type="int" />
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="order_id" table-name="order" operator="IN">
<value value="1" type="int" />
<value value="3" type="int" />
<value value="2" type="int" />
<value value="4" type="int" />
</condition>
</conditions>
</assert>
-->
</asserts>
......@@ -4,14 +4,12 @@
<tables>
<table name="order" />
</tables>
<condition-contexts>
<condition-context>
<condition column-name="order_id" table-name="order" operator="IN">
<value value="1" type="java.lang.Integer" />
<value value="2" type="java.lang.Integer" />
<value value="3" type="java.lang.Integer" />
</condition>
</condition-context>
</condition-contexts>
<conditions>
<condition column-name="order_id" table-name="order" operator="IN">
<value value="1" type="java.lang.Integer" />
<value value="2" type="java.lang.Integer" />
<value value="3" type="java.lang.Integer" />
</condition>
</conditions>
</assert>
</asserts>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册