提交 691ff093 编写于 作者: H haocao

Add Postgresql test cases for parsing statement tests 6th.

上级 8466b865
......@@ -17,6 +17,7 @@
package com.dangdang.ddframe.rdb.integrate.db.pstatement;
import com.dangdang.ddframe.rdb.integrate.SqlPlaceholderUtil;
import com.dangdang.ddframe.rdb.integrate.db.AbstractShardingDatabaseOnlyDBUnitTest;
import org.dbunit.DatabaseUnitException;
import org.hamcrest.core.Is;
......@@ -28,8 +29,8 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.*;
public class ShardingDatabaseOnlyForPreparedStatementWithAggregateTest extends AbstractShardingDatabaseOnlyDBUnitTest {
......@@ -43,12 +44,12 @@ public class ShardingDatabaseOnlyForPreparedStatementWithAggregateTest extends A
try (Connection conn = getShardingDataSource().getConnection();
PreparedStatement ps = conn.prepareStatement(sql.getSelectCountSql());
ResultSet rs = ps.executeQuery()) {
assertTrue(rs.next());
assertThat(rs.next(), is(true));
if (isAliasSupport()) {
assertThat(rs.getInt("COUNT(*)"), is(40));
}
assertThat(rs.getInt(1), is(40));
assertFalse(rs.next());
assertThat(rs.next(), is(false));
}
}
......@@ -62,12 +63,12 @@ public class ShardingDatabaseOnlyForPreparedStatementWithAggregateTest extends A
try (Connection conn = getShardingDataSource().getConnection();
PreparedStatement ps = conn.prepareStatement(sql.getSelectSumSql());
ResultSet rs = ps.executeQuery()) {
assertTrue(rs.next());
assertThat(rs.next(), is(true));
if (isAliasSupport()) {
assertThat(rs.getLong("SUM(`user_id`)"), is(780L));
}
assertThat(rs.getLong(1), is(780L));
assertFalse(rs.next());
assertThat(rs.next(), is(false));
}
}
......@@ -81,12 +82,12 @@ public class ShardingDatabaseOnlyForPreparedStatementWithAggregateTest extends A
try (Connection conn = getShardingDataSource().getConnection();
PreparedStatement ps = conn.prepareStatement(sql.getSelectMaxSql());
ResultSet rs = ps.executeQuery()) {
assertTrue(rs.next());
assertThat(rs.next(), is(true));
if (isAliasSupport()) {
assertThat(rs.getDouble("MAX(`user_id`)"), is(29D));
}
assertThat(rs.getDouble(1), is(29D));
assertFalse(rs.next());
assertThat(rs.next(), is(false));
}
}
......@@ -100,12 +101,12 @@ public class ShardingDatabaseOnlyForPreparedStatementWithAggregateTest extends A
try (Connection conn = getShardingDataSource().getConnection();
PreparedStatement ps = conn.prepareStatement(sql.getSelectMinSql());
ResultSet rs = ps.executeQuery()) {
assertTrue(rs.next());
assertThat(rs.next(), is(true));
if (isAliasSupport()) {
assertThat(rs.getFloat("MIN(`user_id`)"), is(10F));
}
assertThat(rs.getFloat(1), is(10F));
assertFalse(rs.next());
assertThat(rs.next(), is(false));
}
}
......@@ -121,18 +122,18 @@ public class ShardingDatabaseOnlyForPreparedStatementWithAggregateTest extends A
try (Connection conn = getShardingDataSource().getConnection();
PreparedStatement ps = conn.prepareStatement(sql.getSelectAvgSql());
ResultSet rs = ps.executeQuery()) {
assertTrue(rs.next());
assertThat(rs.next(), is(true));
if (isAliasSupport()) {
assertThat(rs.getObject("AVG(`user_id`)"), Is.<Object>is(new BigDecimal("19.5000")));
}
assertThat(rs.getBigDecimal(1), Is.<Object>is(new BigDecimal("19.5000")));
assertFalse(rs.next());
assertThat(rs.next(), is(false));
}
}
@Test
public void assertSelectCountWithBindingTable() throws SQLException, DatabaseUnitException {
String selectSql = String.format(sql.getSelectCountWithBindingTableSql(), "?", "?", "?", "?");
String selectSql = SqlPlaceholderUtil.replacePreparedStatement(sql.getSelectCountWithBindingTableSql());
assertDataSet("integrate/dataset/db/expect/select_aggregate/SelectCountWithBindingTable_0.xml",
getShardingDataSource().getConnection(), "t_order_item", selectSql, 10, 19, 1000, 1909);
assertDataSet("integrate/dataset/db/expect/select_aggregate/SelectCountWithBindingTable_1.xml",
......
......@@ -66,12 +66,12 @@ public class ShardingDatabaseOnlyForPreparedStatementWithSelectTest extends Abst
@Test
public void assertSelectOrderByWithAlias() throws SQLException, DatabaseUnitException {
if (isAliasSupport()) {
assertDataSet("integrate/dataset/db/expect/select/SelectOrderByWithAlias.xml", getShardingDataSource().getConnection(),
"t_order", replacePreparedStatement(sql.getSelectOrderByWithAliasSql()), 10, 12, 1001, 1200);
assertDataSet("integrate/dataset/Empty.xml", getShardingDataSource().getConnection(),
"t_order", replacePreparedStatement(sql.getSelectOrderByWithAliasSql()), 10, 12, 1309, 1408);
}
String expectedDataSetFile = PostgreSQL.name().equalsIgnoreCase(currentDbType()) ? "integrate/dataset/db/expect/select/postgresql/SelectOrderByWithAlias.xml"
: "integrate/dataset/db/expect/select/SelectOrderByWithAlias.xml";
assertDataSet(expectedDataSetFile, getShardingDataSource().getConnection(),
"t_order", replacePreparedStatement(sql.getSelectOrderByWithAliasSql()), 10, 12, 1001, 1200);
assertDataSet("integrate/dataset/Empty.xml", getShardingDataSource().getConnection(),
"t_order", replacePreparedStatement(sql.getSelectOrderByWithAliasSql()), 10, 12, 1309, 1408);
}
@Test
......@@ -91,7 +91,8 @@ public class ShardingDatabaseOnlyForPreparedStatementWithSelectTest extends Abst
@Test
public void assertSelectGroupByWithoutGroupedColumn() throws SQLException, DatabaseUnitException {
String expectedDataSetFile = PostgreSQL.name().equalsIgnoreCase(currentDbType()) ? "integrate/dataset/db/expect/select/postgresql/SelectGroupByWithoutGroupedColumn.xml" : "integrate/dataset/db/expect/select/SelectGroupByWithoutGroupedColumn.xml";
String expectedDataSetFile = PostgreSQL.name().equalsIgnoreCase(currentDbType()) ? "integrate/dataset/db/expect/select/postgresql/SelectGroupByWithoutGroupedColumn.xml"
: "integrate/dataset/db/expect/select/SelectGroupByWithoutGroupedColumn.xml";
assertDataSet(expectedDataSetFile, getShardingDataSource().getConnection(),
"t_order_item", replacePreparedStatement(sql.getSelectGroupWithoutGroupedColumnSql()), 10, 19, 1000, 1909);
assertDataSet("integrate/dataset/Empty.xml", getShardingDataSource().getConnection(), "t_order_item", replacePreparedStatement(sql.getSelectGroupWithoutGroupedColumnSql()), 1, 9, 1000, 1909);
......@@ -99,7 +100,8 @@ public class ShardingDatabaseOnlyForPreparedStatementWithSelectTest extends Abst
@Test
public void assertSelectNoShardingTable() throws SQLException, DatabaseUnitException {
String expectedDataSetFile = PostgreSQL.name().equalsIgnoreCase(currentDbType()) ? "integrate/dataset/db/expect/select/postgresql/SelectNoShardingTable.xml" : "integrate/dataset/db/expect/select/SelectNoShardingTable.xml";
String expectedDataSetFile = PostgreSQL.name().equalsIgnoreCase(currentDbType()) ? "integrate/dataset/db/expect/select/postgresql/SelectNoShardingTable.xml"
: "integrate/dataset/db/expect/select/SelectNoShardingTable.xml";
assertDataSet(expectedDataSetFile, getShardingDataSource().getConnection(),
"t_order_item", sql.getSelectWithNoShardingTableSql());
}
......
......@@ -17,6 +17,7 @@
package com.dangdang.ddframe.rdb.integrate.db.statement;
import com.dangdang.ddframe.rdb.integrate.SqlPlaceholderUtil;
import com.dangdang.ddframe.rdb.integrate.db.AbstractShardingDatabaseOnlyDBUnitTest;
import com.dangdang.ddframe.rdb.sharding.constant.SQLType;
import org.dbunit.DatabaseUnitException;
......@@ -104,7 +105,8 @@ public class ShardingDatabaseOnlyForStatementWithDMLTest extends AbstractShardin
private void assertDataSet(final String expectedDataSetPattern, final String status) throws SQLException, DatabaseUnitException {
for (int i = 0; i < 10; i++) {
assertDataSet(String.format("integrate/dataset/db/expect/%s/db_%s.xml", expectedDataSetPattern, i),
getShardingDataSource().getConnection().getConnection(String.format("dataSource_db_%s", i), SQLType.SELECT), "t_order", sql.getAssertSelectWithStatusSql(), status);
getShardingDataSource().getConnection().getConnection(String.format("dataSource_db_%s", i), SQLType.SELECT),
"t_order", SqlPlaceholderUtil.replacePreparedStatement(sql.getAssertSelectWithStatusSql()), status);
}
}
}
......@@ -23,77 +23,84 @@ import org.junit.Test;
import java.sql.SQLException;
import static com.dangdang.ddframe.rdb.sharding.constant.DatabaseType.PostgreSQL;
public final class ShardingDatabaseOnlyForStatementWithSelectTest extends AbstractShardingDatabaseOnlyDBUnitTest {
@Test
public void assertSelectEqualsWithSingleTable() throws SQLException, DatabaseUnitException {
assertDataSet("integrate/dataset/db/expect/select/SelectEqualsWithSingleTable_0.xml", getShardingDataSource().getConnection(),
"t_order", sql.getSelectEqualsWithSingleTableSql(), 10, 1000);
"t_order", String.format(sql.getSelectEqualsWithSingleTableSql(), 10, 1000));
assertDataSet("integrate/dataset/db/expect/select/SelectEqualsWithSingleTable_1.xml", getShardingDataSource().getConnection(),
"t_order", sql.getSelectEqualsWithSingleTableSql(), 12, 1201);
"t_order", String.format(sql.getSelectEqualsWithSingleTableSql(), 12, 1201));
assertDataSet("integrate/dataset/Empty.xml", getShardingDataSource().getConnection(),
"t_order", sql.getSelectEqualsWithSingleTableSql(), 12, 1000);
"t_order", String.format(sql.getSelectEqualsWithSingleTableSql(), 12, 1000));
}
@Test
public void assertSelectBetweenWithSingleTable() throws SQLException, DatabaseUnitException {
assertDataSet("integrate/dataset/db/expect/select/SelectBetweenWithSingleTable.xml", getShardingDataSource().getConnection(),
"t_order", sql.getSelectBetweenWithSingleTableSql(), 10, 12, 1001, 1200);
"t_order", String.format(sql.getSelectBetweenWithSingleTableSql(), 10, 12, 1001, 1200));
assertDataSet("integrate/dataset/Empty.xml", getShardingDataSource().getConnection(),
"t_order", sql.getSelectBetweenWithSingleTableSql(), 10, 12, 1309, 1408);
"t_order", String.format(sql.getSelectBetweenWithSingleTableSql(), 10, 12, 1309, 1408));
}
@Test
public void assertSelectInWithSingleTable() throws SQLException, DatabaseUnitException {
assertDataSet("integrate/dataset/db/expect/select/SelectInWithSingleTable_0.xml", getShardingDataSource().getConnection(),
"t_order", sql.getSelectInWithSingleTableSql(), 10, 12, 15, 1000, 1201);
"t_order", String.format(sql.getSelectInWithSingleTableSql(), 10, 12, 15, 1000, 1201));
assertDataSet("integrate/dataset/db/expect/select/SelectInWithSingleTable_1.xml", getShardingDataSource().getConnection(),
"t_order", sql.getSelectInWithSingleTableSql(), 10, 12, 15, 1000, 1101);
"t_order", String.format(sql.getSelectInWithSingleTableSql(), 10, 12, 15, 1000, 1101));
assertDataSet("integrate/dataset/Empty.xml", getShardingDataSource().getConnection(),
"t_order", sql.getSelectInWithSingleTableSql(), 10, 12, 15, 1309, 1408);
"t_order", String.format(sql.getSelectInWithSingleTableSql(), 10, 12, 15, 1309, 1408));
}
@Test
public void assertSelectLimitWithBindingTable() throws SQLException, DatabaseUnitException {
assertDataSet("integrate/dataset/db/expect/select/SelectLimitWithBindingTable.xml", getShardingDataSource().getConnection(),
"t_order_item", sql.getSelectLimitWithBindingTableSql(), 10, 19, 1000, 1909, 2, 2);
"t_order_item", String.format(sql.getSelectLimitWithBindingTableSql(), 10, 19, 1000, 1909, 2, 2));
assertDataSet("integrate/dataset/Empty.xml", getShardingDataSource().getConnection(),
"t_order_item", sql.getSelectLimitWithBindingTableSql(), 10, 19, 1000, 1909, 10000, 2);
"t_order_item", String.format(sql.getSelectLimitWithBindingTableSql(), 10, 19, 1000, 1909, 10000, 2));
}
@Test
public void assertSelectOrderByWithAlias() throws SQLException, DatabaseUnitException {
assertDataSet("integrate/dataset/db/expect/select/SelectOrderByWithAlias.xml", getShardingDataSource().getConnection(),
"t_order", sql.getSelectOrderByWithAliasSql(), 10, 12, 1001, 1200);
String expectedDataSetFile = PostgreSQL.name().equalsIgnoreCase(currentDbType()) ? "integrate/dataset/db/expect/select/postgresql/SelectOrderByWithAlias.xml"
: "integrate/dataset/db/expect/select/SelectOrderByWithAlias.xml";
assertDataSet(expectedDataSetFile, getShardingDataSource().getConnection(),
"t_order", String.format(sql.getSelectOrderByWithAliasSql(), 10, 12, 1001, 1200));
assertDataSet("integrate/dataset/Empty.xml", getShardingDataSource().getConnection(),
"t_order", sql.getSelectOrderByWithAliasSql(), 10, 12, 1309, 1408);
"t_order", String.format(sql.getSelectOrderByWithAliasSql(), 10, 12, 1309, 1408));
}
@Test
public void assertSelectLimitWithBindingTableWithoutOffset() throws SQLException, DatabaseUnitException {
assertDataSet("integrate/dataset/db/expect/select/SelectLimitWithBindingTableWithoutOffset.xml",
getShardingDataSource().getConnection(), "t_order_item", sql.getSelectLimitWithBindingTableWithoutOffsetSql(), 10, 19, 1000, 1909, 2);
getShardingDataSource().getConnection(), "t_order_item", String.format(sql.getSelectLimitWithBindingTableWithoutOffsetSql(), 10, 19, 1000, 1909, 2));
assertDataSet("integrate/dataset/Empty.xml", getShardingDataSource().getConnection(), "t_order_item",
sql.getSelectLimitWithBindingTableWithoutOffsetSql(), 10, 19, 1000, 1909, 0);
String.format(sql.getSelectLimitWithBindingTableWithoutOffsetSql(), 10, 19, 1000, 1909, 0));
}
@Test
public void assertSelectGroupByWithBindingTable() throws SQLException, DatabaseUnitException {
assertDataSet("integrate/dataset/db/expect/select/SelectGroupByWithBindingTable.xml", getShardingDataSource().getConnection(),
"t_order_item", sql.getSelectGroupWithBindingTableSql(), 10, 19, 1000, 1909);
assertDataSet("integrate/dataset/Empty.xml", getShardingDataSource().getConnection(), "t_order_item", sql.getSelectGroupWithBindingTableSql(), 1, 9, 1000, 1909);
"t_order_item", String.format(sql.getSelectGroupWithBindingTableSql(), 10, 19, 1000, 1909));
assertDataSet("integrate/dataset/Empty.xml", getShardingDataSource().getConnection(), "t_order_item", String.format(sql.getSelectGroupWithBindingTableSql(), 1, 9, 1000, 1909));
}
@Test
public void assertSelectGroupByWithoutGroupedColumn() throws SQLException, DatabaseUnitException {
assertDataSet("integrate/dataset/db/expect/select/SelectGroupByWithBindingTable.xml", getShardingDataSource().getConnection(),
"t_order_item", sql.getSelectGroupWithoutGroupedColumnSql(), 10, 19, 1000, 1909);
assertDataSet("integrate/dataset/Empty.xml", getShardingDataSource().getConnection(), "t_order_item", sql.getSelectGroupWithoutGroupedColumnSql(), 1, 9, 1000, 1909);
String expectedDataSetFile = PostgreSQL.name().equalsIgnoreCase(currentDbType()) ? "integrate/dataset/db/expect/select/postgresql/SelectGroupByWithoutGroupedColumn.xml"
: "integrate/dataset/db/expect/select/SelectGroupByWithoutGroupedColumn.xml";
assertDataSet(expectedDataSetFile, getShardingDataSource().getConnection(),
"t_order_item", String.format(sql.getSelectGroupWithoutGroupedColumnSql(), 10, 19, 1000, 1909));
assertDataSet("integrate/dataset/Empty.xml", getShardingDataSource().getConnection(), "t_order_item", String.format(sql.getSelectGroupWithoutGroupedColumnSql(), 1, 9, 1000, 1909));
}
@Test
public void assertSelectNoShardingTable() throws SQLException, DatabaseUnitException {
assertDataSet("integrate/dataset/db/expect/select/SelectNoShardingTable.xml", getShardingDataSource().getConnection(),
"t_order_item", sql.getSelectWithNoShardingTableSql());
String expectedDataSetFile = PostgreSQL.name().equalsIgnoreCase(currentDbType()) ? "integrate/dataset/db/expect/select/postgresql/SelectNoShardingTable.xml"
: "integrate/dataset/db/expect/select/SelectNoShardingTable.xml";
assertDataSet(expectedDataSetFile, getShardingDataSource().getConnection(), "t_order_item", sql.getSelectWithNoShardingTableSql());
}
}
......@@ -82,7 +82,7 @@ public abstract class AbstractDatabaseTestSQL implements DatabaseTestSQL {
private static final String SELECT_IN_WITH_SINGLE_TABLE_SQL = "SELECT * FROM t_order WHERE user_id IN (%s, %s, %s) AND order_id IN (%s, %s) ORDER BY user_id, order_id";
private static final String SELECT_ORDER_BY_WITH_ALIAS_SQL = "SELECT order_id as order_id_alias,user_id,status FROM t_order"
private static final String SELECT_ORDER_BY_WITH_ALIAS_SQL = "SELECT order_id as order_id_alias,user_id, status FROM t_order"
+ " WHERE user_id BETWEEN %s AND %s AND order_id BETWEEN %s AND %s ORDER BY user_id, order_id";
private static final String SELECT_LIMIT_WITH_BINDING_TABLE_WITHOUT_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"
......
......@@ -78,26 +78,26 @@ public final class MySQLTestSQL implements DatabaseTestSQL {
private static final String SELECT_SUM_WITH_ORDER_BY_DESC_AND_GROUP_BY_SQL = "SELECT SUM(order_id) AS `orders_sum`, `user_id` FROM `t_order` GROUP BY `user_id` ORDER BY orders_sum DESC";
private static final String SELECT_EQUALS_WITH_SINGLE_TABLE_SQL = "SELECT * FROM `t_order` WHERE `user_id` = ? AND `order_id` = ?";
private static final String SELECT_EQUALS_WITH_SINGLE_TABLE_SQL = "SELECT * FROM `t_order` WHERE `user_id` = %s AND `order_id` = %s";
private static final String SELECT_BETWEEN_WITH_SINGLE_TABLE_SQL = "SELECT * FROM `t_order` WHERE `user_id` BETWEEN ? AND ? AND `order_id` BETWEEN ? AND ? ORDER BY user_id, order_id";
private static final String SELECT_BETWEEN_WITH_SINGLE_TABLE_SQL = "SELECT * FROM `t_order` WHERE `user_id` BETWEEN %s AND %s AND `order_id` BETWEEN %s AND %s ORDER BY user_id, order_id";
private static final String SELECT_IN_WITH_SINGLE_TABLE_SQL = "SELECT * FROM `t_order` WHERE `user_id` IN (?, ?, ?) AND `order_id` IN (?, ?) ORDER BY user_id, order_id";
private static final String SELECT_IN_WITH_SINGLE_TABLE_SQL = "SELECT * FROM `t_order` WHERE `user_id` IN (%s, %s, %s) AND `order_id` IN (%s, %s) ORDER BY user_id, order_id";
private static final String SELECT_LIMIT_WITH_BINDING_TABLE_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 (?, ?) AND o.`order_id` BETWEEN ? AND ? ORDER BY i.item_id DESC LIMIT ?, ?";
+ " WHERE o.`user_id` IN (%s, %s) AND o.`order_id` BETWEEN %s AND %s ORDER BY i.item_id DESC LIMIT %s, %s";
private static final String SELECT_ORDER_BY_WITH_ALIAS_SQL = "SELECT order_id as `order_id_alias`,user_id,status FROM `t_order` "
+ "WHERE `user_id` BETWEEN ? AND ? AND `order_id` BETWEEN ? AND ? ORDER BY user_id, order_id";
+ "WHERE `user_id` BETWEEN %s AND %s AND `order_id` BETWEEN %s AND %s ORDER BY user_id, order_id";
private static final String SELECT_LIMIT_WITH_BINDING_TABLE_WITHOUT_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 (?, ?) AND o.`order_id` BETWEEN ? AND ? ORDER BY i.item_id DESC LIMIT ?";
+ " 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_GROUP_WITH_BINDING_TABLE_SQL = "SELECT count(*) as items_count, o.`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 (?, ?) AND o.`order_id` BETWEEN ? AND ? GROUP BY o.`user_id`";
+ "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 GROUP BY o.`user_id`";
private static final String SELECT_GROUP_WITHOUT_GROUPED_COLUMN_SQL = "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 (?, ?) AND o.`order_id` BETWEEN ? AND ? GROUP BY o.`user_id`";
+ " WHERE o.`user_id` IN (%s, %s) AND o.`order_id` BETWEEN %s AND %s GROUP BY o.`user_id`";
private static final String SELECT_WITH_NO_SHARDING_TABLE_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 ORDER BY i.item_id";
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册