package com.taobao.tddl.qatest.matrix.select; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized.Parameters; import com.taobao.tddl.qatest.BaseMatrixTestCase; import com.taobao.tddl.qatest.BaseTestCase; import com.taobao.tddl.qatest.ExecuteTableName; import com.taobao.tddl.qatest.util.EclipseParameterized; /** * 主要针对合并约束条件的测试 Author By: zhuoxue.yll Created Date: 2012-9-14 下午02:35:55 */ @RunWith(EclipseParameterized.class) public class SelectComplexConditionTest extends BaseMatrixTestCase { String[] columnParam = { "PK", "NAME", "ID" }; @Parameters(name = "{index}:table1={0}") public static List<String[]> prepareData() { return Arrays.asList(ExecuteTableName.normaltblTable(dbType)); } public SelectComplexConditionTest(String tableName){ BaseTestCase.normaltblTableName = tableName; } @Before public void prepareDate() throws Exception { normaltblPrepare(0, 50); } @Test public void conditionWithMutilCompareTest() throws Exception { long start1 = 7; long start2 = 4; long end1 = 49; long end2 = 18; float fl = 0.15f; String sql = "select * from " + normaltblTableName + " where pk>=? and pk>? and pk <=? and pk<?"; List<Object> param = new ArrayList<Object>(); param.add(start1); param.add(start2); param.add(end1); param.add(end2); String[] columnParam = { "PK", "NAME", "ID", "gmt_timestamp", "GMT_DATETIME", "FLOATCOL" }; selectContentSameAssert(sql, columnParam, param); sql = "select * from " + normaltblTableName + " where pk>=? and pk>? and name like ? or gmt_datetime >?"; param.clear(); param.add(start1); param.add(start2); param.add(name); param.add(gmtNext); selectContentSameAssert(sql, columnParam, param); sql = "/* ANDOR ALLOW_TEMPORARY_TABLE=True */ select * from " + normaltblTableName + " where pk>? or id<? and name like ? and gmt_datetime= ?"; param.clear(); param.add(start1); param.add(1500); param.add(name); param.add(gmt); selectContentSameAssert(sql, columnParam, param); sql = "select * from " + normaltblTableName + " where pk<=? and id>? or name like ? and gmt_timestamp =? or floatCol=?"; param.clear(); param.add(start1); param.add(516); param.add(name); param.add(gmt); param.add(fl); selectConutAssert(sql, param); selectContentSameAssert(sql, columnParam, param); } /** * 业务模拟测试,测试的sql带and、between and和in以及group by,sum函数 * * @throws Exception */ @Test public void sumBetweenAndInGroupTest() throws Exception { String sql = "/* ANDOR ALLOW_TEMPORARY_TABLE=True */ select id, sum(pk) as p, sum(floatCol) as flo from " + normaltblTableName + " as a where floatCol >=? and gmt_timestamp between ? and ? and(name = ? and id in(?,?,?,?,?,?)) group by id"; List<Object> param = new ArrayList<Object>(); param.add(1.1); param.add(gmtBefore); param.add(gmtNext); param.add(name); param.add(0); param.add(100); param.add(200); param.add(300); param.add(400); param.add(1000); String[] columnParam = { "id", "p", "flo" }; selectContentSameAssert(sql, columnParam, param); sql = "/* ANDOR ALLOW_TEMPORARY_TABLE=True */ select id, sum(pk) as p, sum(floatCol) as flo ,name,gmt_timestamp,gmt_datetime from " + normaltblTableName + " as a " + "where (( gmt_timestamp >= ? and gmt_timestamp<= ? and name = ? and id in(?,?,?,?,?,?)) and floatCol>=?) group by id"; List<Object> param1 = new ArrayList<Object>(); param1.add(gmtBefore); param1.add(gmtNext); param1.add(name); param1.add(0); param1.add(100); param1.add(200); param1.add(300); param1.add(400); param1.add(1000); param1.add(1.1); String[] columnParam1 = { "id", "p", "flo", "name", "gmt_timestamp", "gmt_datetime" }; selectContentSameAssert(sql, columnParam1, param1); } /** * 测试的sql带and、between and和in以及group by * * @throws Exception */ @Test public void betweenAndInGroupTest() throws Exception { String sql = "/* ANDOR ALLOW_TEMPORARY_TABLE=True */ select id as sid, gmt_timestamp from " + normaltblTableName + " as a where floatCol >=? and " + "gmt_timestamp between ? and ? and(name = ? and id in(?,?,?,?,?,?)) group by id,gmt_timestamp"; List<Object> param = new ArrayList<Object>(); param.add(1.1); param.add(gmtBefore); param.add(gmtNext); param.add(name); param.add(0); param.add(100); param.add(200); param.add(300); param.add(400); param.add(1000); String[] columnParam = { "sid", "gmt_timestamp" }; selectContentSameAssert(sql, columnParam, param); sql = "/* ANDOR ALLOW_TEMPORARY_TABLE=True */ select id as sid, name,gmt_timestamp,gmt_datetime from " + normaltblTableName + " as a " + "where (( gmt_timestamp >= ? and gmt_timestamp<= ? and name = ? and id in(?,?,?,?,?,?)) and floatCol>=?) group by id,gmt_timestamp"; List<Object> param1 = new ArrayList<Object>(); param1.add(gmtBefore); param1.add(gmtNext); param1.add(name); param1.add(0); param1.add(100); param1.add(200); param1.add(300); param1.add(400); param1.add(1000); param1.add(1.1); String[] columnParam1 = { "sid", "name", "gmt_timestamp", "gmt_datetime" }; selectContentSameAssert(sql, columnParam1, param1); } /** * 查询语句后面带and 、between、group by * * @throws Exception */ @Test public void betweenGroupAndTest() throws Exception { String sql = "/* ANDOR ALLOW_TEMPORARY_TABLE=True */ select name, gmt_timestamp from " + normaltblTableName + " as a where floatCol>=? and gmt_timestamp BETWEEN ? and ? " + "group by name, gmt_timestamp"; List<Object> param = new ArrayList<Object>(); param.add(1.1); param.add(gmtBefore); param.add(gmtNext); String[] columnParam = { "name", "gmt_timestamp" }; selectContentSameAssert(sql, columnParam, param); sql = "select name, gmt_timestamp from " + normaltblTableName + " as a where floatCol>=? and " + "gmt_timestamp >=? and gmt_timestamp<=? group by name, gmt_timestamp"; selectContentSameAssert(sql, columnParam, param); } @Test public void betweenOrderAnd() throws Exception { String sql = "/* ANDOR ALLOW_TEMPORARY_TABLE=True */ select gmt_timestamp, floatCol, id from " + normaltblTableName + " as a where " + "id = ? and gmt_timestamp between ? and ? and " + "(name = ? and gmt_timestamp = ?) order by gmt_timestamp"; List<Object> param = new ArrayList<Object>(); param.add(100); param.add(gmtBefore); param.add(gmtNext); param.add(name); param.add(gmt); String[] columnParam = { "gmt_timestamp", "floatCol", "id" }; selectOrderAssertNotKeyCloumn(sql, columnParam, param, "gmt_timestamp"); sql = "/* ANDOR ALLOW_TEMPORARY_TABLE=True */ select gmt_timestamp, floatCol, id,name from " + normaltblTableName + " as a where " + "((gmt_timestamp >= ? and gmt_timestamp<= ? and name= ? and id =? )" + " and floatCol>=? ) order by gmt_timestamp asc"; List<Object> param1 = new ArrayList<Object>(); param1.add(gmtBefore); param1.add(gmtNext); param1.add(name); param1.add(100); param1.add(1.1); String[] columnParam1 = { "gmt_timestamp", "floatCol", "id", "name" }; selectOrderAssertNotKeyCloumn(sql, columnParam1, param1, "gmt_timestamp"); } @Test public void groupByOrderBy() throws Exception { String sql = "/* ANDOR ALLOW_TEMPORARY_TABLE=True */ SELECT id,sum(pk) as sumPk,name from " + normaltblTableName + " where id between" + " ? and ? GROUP BY id,name ORDER BY id"; List<Object> param = new ArrayList<Object>(); param.add(0); param.add(2000); String[] columnParam = { "id", "sumPk", "name" }; selectContentSameAssert(sql, columnParam, param); sql = "/* ANDOR ALLOW_TEMPORARY_TABLE=True */ SELECT id,sum(pk) as sumPk,name from " + normaltblTableName + " where id between" + " ? and ? GROUP BY id,name ORDER BY id,name"; selectContentSameAssert(sql, columnParam, param); sql = "/* ANDOR ALLOW_TEMPORARY_TABLE=True */ SELECT id,sum(pk) as sumPk,name from " + normaltblTableName + " where id between" + " ? and ? GROUP BY id,name ORDER BY name,id"; selectContentSameAssert(sql, columnParam, param); } }