提交 8104cefe 编写于 作者: H haocao

Refactor Oracle test cases.

上级 0262a890
......@@ -26,11 +26,25 @@ public final class OracleSQLTestSQL extends AbstractDatabaseTestSQL {
+ " FROM t_order order0_ JOIN t_order_item i ON order0_.user_id = i.user_id AND order0_.order_id = i.order_id"
+ " WHERE order0_.user_id IN (%s, %s) AND order0_.order_id BETWEEN %s AND %s ORDER BY i.item_id DESC) row_ WHERE rownum <= ?) WHERE rownum > ?";
private static final String SELECT_PAGING_WITH_ROW_COUNT_SQL = "SELECT i.* 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 ORDER BY i.item_id DESC LIMIT %s";
private static final String SELECT_PAGING_WITH_ROW_COUNT_SQL = "SELECT * FROM (SELECT row_.*, rownum rownum_ FROM (SELECT"
+ " order0_.order_id as order_id, order0_.status as status, order0_.user_id as user_id"
+ " FROM t_order order0_ JOIN t_order_item i ON order0_.user_id = i.user_id AND order0_.order_id = i.order_id"
+ " WHERE order0_.user_id IN (%s, %s) AND order0_.order_id BETWEEN %s AND %s ORDER BY i.item_id DESC) row_ WHERE rownum <= ?)";
private static final String SELECT_PAGING_WITH_OFFSET_SQL = "SELECT * FROM (SELECT row_.*, rownum rownum_ FROM (SELECT"
+ " order0_.order_id as order_id, order0_.status as status, order0_.user_id as user_id"
+ " FROM t_order order0_ JOIN t_order_item i ON order0_.user_id = i.user_id AND order0_.order_id = i.order_id"
+ " WHERE order0_.user_id IN (%s, %s) AND order0_.order_id BETWEEN %s AND %s ORDER BY i.item_id DESC) row_) WHERE rownum > ?";
private static final String SELECT_GROUP_BY_USER_ID_SQL = "SELECT user_id AS usrid FROM t_order GROUP BY user_id";
private static final String SELECT_USER_ID_BY_STATUS_SQL = "SELECT user_id AS usrid FROM t_order WHERE status = 'init'";
private static final String SELECT_USER_ID_BY_IN_STATUS_SQL = "SELECT user_id AS usrid FROM t_order WHERE status IN (? ,? ,? ,? ,?)";
private static final String SELECT_PAGING_WITH_OFFSET_SQL = "SELECT i.* 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 ORDER BY i.item_id DESC OFFSET %s";
private static final String SELECT_USER_ID_BY_STATUS_ORDER_BY_USER_ID_SQL = "SELECT user_id AS usrid FROM t_order WHERE status = 'init' ORDER BY user_id";
private static final String SELECT_USER_ID_WHERE_ORDER_ID_IN_SQL = "SELECT user_id AS usrid FROM t_order WHERE order_id IN (%s, %s)";
@Override
public String getSelectPagingWithOffsetAndRowCountSql() {
......@@ -47,4 +61,28 @@ public final class OracleSQLTestSQL extends AbstractDatabaseTestSQL {
return SELECT_PAGING_WITH_OFFSET_SQL;
}
@Override
public String getSelectGroupByUserIdSql() {
return SELECT_GROUP_BY_USER_ID_SQL;
}
@Override
public String getSelectUserIdByStatusSql() {
return SELECT_USER_ID_BY_STATUS_SQL;
}
@Override
public String getSelectUserIdByInStatusSql() {
return SELECT_USER_ID_BY_IN_STATUS_SQL;
}
@Override
public String getSelectUserIdByStatusOrderByUserIdSql() {
return SELECT_USER_ID_BY_STATUS_ORDER_BY_USER_ID_SQL;
}
@Override
public String getSelectUserIdWhereOrderIdInSql() {
return SELECT_USER_ID_WHERE_ORDER_ID_IN_SQL;
}
}
......@@ -21,16 +21,22 @@ import com.dangdang.ddframe.rdb.integrate.sql.AbstractDatabaseTestSQL;
public final class SQLServerSQLTestSQL extends AbstractDatabaseTestSQL {
private static final String SELECT_PAGING_WITH_OFFSET_AND_ROW_COUNT_SQL = "SELECT * FROM (SELECT row_.*, rownum rownum_ FROM (SELECT"
+ " order0_.order_id as order_id, order0_.status as status, order0_.user_id as user_id"
+ " FROM t_order order0_ JOIN t_order_item i ON order0_.user_id = i.user_id AND order0_.order_id = i.order_id"
+ " WHERE order0_.user_id IN (%s, %s) AND order0_.order_id BETWEEN %s AND %s ORDER BY i.item_id DESC) row_ WHERE rownum <= ?) WHERE rownum > ?";
private static final String SELECT_PAGING_WITH_ROW_COUNT_SQL = "SELECT i.* 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 ORDER BY i.item_id DESC LIMIT %s";
private static final String SELECT_PAGING_WITH_OFFSET_SQL = "SELECT i.* 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 ORDER BY i.item_id DESC OFFSET %s";
private static final String SELECT_PAGING_WITH_OFFSET_AND_ROW_COUNT_SQL = "SELECT * FROM"
+ " (SELECT TOP (%s) row_number() OVER (ORDER BY i.item_id DESC) AS rownum, o.order_id as order_id, o.status as status, o.user_id as user_id"
+ " 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) AS row_"
+ " WHERE row_.rownum > %s";
private static final String SELECT_PAGING_WITH_ROW_COUNT_SQL = "SELECT * FROM"
+ " (SELECT TOP (%s) row_number() OVER (ORDER BY i.item_id DESC) AS rownum, o.order_id as order_id, o.status as status, o.user_id as user_id"
+ " 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) AS row_";
private static final String SELECT_PAGING_WITH_OFFSET_SQL = "SELECT * FROM"
+ " (SELECT TOP (%s) row_number() OVER (ORDER BY i.item_id DESC) AS rownum, o.order_id as order_id, o.status as status, o.user_id as user_id"
+ " 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) AS row_"
+ " WHERE row_.rownum > %s";
private static final String SELECT_GROUP_BY_USER_ID_SQL = "SELECT user_id AS uid FROM t_order GROUP BY user_id";
......@@ -53,5 +59,4 @@ public final class SQLServerSQLTestSQL extends AbstractDatabaseTestSQL {
public String getSelectGroupByUserIdSql() {
return SELECT_GROUP_BY_USER_ID_SQL;
}
}
......@@ -26,9 +26,7 @@ import org.junit.Test;
import java.sql.SQLException;
import static com.dangdang.ddframe.rdb.integrate.util.SqlPlaceholderUtil.replacePreparedStatement;
import static com.dangdang.ddframe.rdb.sharding.constant.DatabaseType.Oracle;
import static com.dangdang.ddframe.rdb.sharding.constant.DatabaseType.PostgreSQL;
import static com.dangdang.ddframe.rdb.sharding.constant.DatabaseType.SQLServer;
import static com.dangdang.ddframe.rdb.sharding.constant.DatabaseType.*;
public final class ShardingTablesOnlyForPreparedStatementWithSelectTest extends AbstractShardingTablesOnlyDBUnitTest {
......@@ -119,8 +117,10 @@ public final class ShardingTablesOnlyForPreparedStatementWithSelectTest extends
@Test
public void assertSelectLikeWithBindingTable() throws SQLException, DatabaseUnitException {
assertDataSet(TABLE_ONLY_PREFIX + "/expect/select/SelectLikeWithBindingTable.xml", getShardingDataSource().getConnection(),
"t_order_item", replacePreparedStatement(getDatabaseTestSQL().getSelectLikeWithBindingTableSql()), 10, 11, 1000, 1109, "init");
if (MySQL == currentDbType()) {
assertDataSet(TABLE_ONLY_PREFIX + "/expect/select/SelectLikeWithBindingTable.xml", getShardingDataSource().getConnection(),
"t_order_item", replacePreparedStatement(getDatabaseTestSQL().getSelectLikeWithBindingTableSql()), 10, 11, 1000, 1109, "init");
}
}
@Test
......
......@@ -25,8 +25,15 @@ import org.junit.Test;
import java.sql.SQLException;
import static com.dangdang.ddframe.rdb.integrate.util.SqlPlaceholderUtil.replacePreparedStatement;
import static com.dangdang.ddframe.rdb.sharding.constant.DatabaseType.Oracle;
import static com.dangdang.ddframe.rdb.sharding.constant.DatabaseType.PostgreSQL;
import static com.dangdang.ddframe.rdb.sharding.constant.DatabaseType.SQLServer;
public final class ShardingTablesOnlyForStatementWithSelectTest extends AbstractShardingTablesOnlyDBUnitTest {
private static final String TABLE_ONLY_PREFIX = "integrate/dataset/tbl";
private ShardingDataSource shardingDataSource;
@Before
......@@ -63,11 +70,33 @@ public final class ShardingTablesOnlyForStatementWithSelectTest extends Abstract
@Test
public void assertSelectLimitWithBindingTable() throws SQLException, DatabaseUnitException {
String expectedDataSetFile = "integrate/dataset/tbl/expect/select/SelectLimitWithBindingTable.xml";
assertDataSet(expectedDataSetFile, shardingDataSource.getConnection(),
"t_order_item", String.format(getDatabaseTestSQL().getSelectPagingWithOffsetAndRowCountSql(), 10, 19, 1000, 1909, 2, 2));
assertDataSet("integrate/dataset/Empty.xml", shardingDataSource.getConnection(),
"t_order_item", String.format(getDatabaseTestSQL().getSelectPagingWithOffsetAndRowCountSql(), 10, 19, 1000, 1909, 10000, 2));
// String expectedDataSetFile = "integrate/dataset/tbl/expect/select/SelectLimitWithBindingTable.xml";
// assertDataSet(expectedDataSetFile, shardingDataSource.getConnection(),
// "t_order_item", String.format(getDatabaseTestSQL().getSelectPagingWithOffsetAndRowCountSql(), 10, 19, 1000, 1909, 2, 2));
// assertDataSet("integrate/dataset/Empty.xml", shardingDataSource.getConnection(),
// "t_order_item", String.format(getDatabaseTestSQL().getSelectPagingWithOffsetAndRowCountSql(), 10, 19, 1000, 1909, 10000, 2));
//
if (SQLServer == currentDbType()) {
String expectedDataSetFile = TABLE_ONLY_PREFIX + "/expect/select/sqlserver/SelectLimitWithBindingTable.xml";
assertDataSet(expectedDataSetFile, getShardingDataSource().getConnection(),
"t_order_item", replacePreparedStatement(getDatabaseTestSQL().getSelectPagingWithOffsetAndRowCountSql()), 2, 10, 19, 1000, 1909, 2);
assertDataSet("integrate/dataset/Empty.xml", getShardingDataSource().getConnection(),
"t_order_item", replacePreparedStatement(getDatabaseTestSQL().getSelectPagingWithOffsetAndRowCountSql()), 2, 10, 19, 1000, 1909, 20);
return;
}
if (PostgreSQL == currentDbType()) {
String expectedDataSetFile = TABLE_ONLY_PREFIX + "/expect/select/SelectLimitWithBindingTable.xml";
assertDataSet(expectedDataSetFile, getShardingDataSource().getConnection(),
"t_order_item", replacePreparedStatement(getDatabaseTestSQL().getSelectPagingWithOffsetAndRowCountSql()), 10, 19, 1000, 1909, 1.5, 2.4);
} else if (Oracle == currentDbType()) {
String expectedDataSetFile = TABLE_ONLY_PREFIX + "/expect/select/oracle/SelectLimitWithBindingTable.xml";
assertDataSet(expectedDataSetFile, getShardingDataSource().getConnection(),
"t_order_item", replacePreparedStatement(getDatabaseTestSQL().getSelectPagingWithOffsetAndRowCountSql()), 10, 19, 1000, 1909, 2, 2);
} else {
String expectedDataSetFile = TABLE_ONLY_PREFIX + "/expect/select/SelectLimitWithBindingTable.xml";
assertDataSet(expectedDataSetFile, getShardingDataSource().getConnection(),
"t_order_item", replacePreparedStatement(getDatabaseTestSQL().getSelectPagingWithOffsetAndRowCountSql()), 10, 19, 1000, 1909, 2, 2);
}
}
@Test
......
......@@ -30,6 +30,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import static com.dangdang.ddframe.rdb.sharding.constant.DatabaseType.Oracle;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
......@@ -143,6 +144,10 @@ public final class ResultSetAdapterTest extends AbstractShardingDatabaseOnlyDBUn
@Test
public void assertFindColumn() throws SQLException {
assertThat(actual.findColumn("uid"), is(1));
if (currentDbType() == Oracle) {
assertThat(actual.findColumn("usrid"), is(1));
} else {
assertThat(actual.findColumn("uid"), is(1));
}
}
}
<dataset>
<t_order_item order_by_derived_0="100801" order_id="1008" rownum="1" user_id="10" status="init" />
<t_order_item order_by_derived_0="100800" order_id="1008" rownum="2" user_id="10" status="init" />
<t_order_item order_id="1008" rownum="1" user_id="10" status="init" />
<t_order_item order_id="1008" rownum="2" user_id="10" status="init" />
</dataset>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册