package com.taobao.tddl.qatest.matrix.select; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.junit.Assert; import org.junit.Before; import org.junit.Ignore; 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; /** * 带条件的选择查询 * <p/> * Author By: yaolingling.pt Created Date: 2012-3-15 下午04:30:18 */ @RunWith(EclipseParameterized.class) public class SelectWithOperatorTest extends BaseMatrixTestCase { String[] columnParam = { "PK", "NAME", "ID" }; @Parameters(name = "{index}:table={0}") public static List<String[]> prepareData() { return Arrays.asList(ExecuteTableName.normaltblTable(dbType)); } public SelectWithOperatorTest(String tableName){ BaseTestCase.normaltblTableName = tableName; } @Before public void prepareDate() throws Exception { normaltblPrepare(0, 20); } @Test public void greaterTest() throws Exception { String sql = "select * from " + normaltblTableName + " where pk>? order by pk"; List<Object> param = new ArrayList<Object>(); param.add(Long.parseLong(0 + "")); selectOrderAssert(sql, columnParam, param); sql = "select * from " + normaltblTableName + " where pk>=? order by pk"; param.clear(); param.add(Long.parseLong(0 + "")); selectOrderAssert(sql, columnParam, param); } @Test public void lessTest() throws Exception { String sql = "select * from " + normaltblTableName + " where pk < ?"; List<Object> param = new ArrayList<Object>(); param.add(Long.parseLong(MAX_DATA_SIZE + "")); selectContentSameAssert(sql, columnParam, param); sql = "select * from " + normaltblTableName + " where pk <= ?"; param.clear(); param.add(Long.parseLong(MAX_DATA_SIZE - 1 + "")); selectContentSameAssert(sql, columnParam, param); sql = "select * from " + normaltblTableName + " where ? <= pk"; param.clear(); param.add(Long.parseLong(10 + "")); selectContentSameAssert(sql, columnParam, param); } @Test public void lessAndGreatTest() throws Exception { int start = 5; int end = 15; String sql = "select * from " + normaltblTableName + " where pk >=? and pk< ?"; List<Object> param = new ArrayList<Object>(); param.add(Long.parseLong(start + "")); param.add(Long.parseLong(end + "")); selectContentSameAssert(sql, columnParam, param); sql = "select * from " + normaltblTableName + " where id >=? and id< ?"; param.clear(); param.add(start); param.add(end); selectContentSameAssert(sql, columnParam, param); } @Test public void lessAndGreatWithStringTest() throws Exception { int start = 5; String sql = "select * from " + normaltblTableName + " where pk >=? and name>?"; List<Object> param = new ArrayList<Object>(); param.add(Long.parseLong(start + "")); param.add(name); selectContentSameAssert(sql, columnParam, param); sql = "select * from " + normaltblTableName + " where name<?"; param.clear(); param.add(name); selectContentSameAssert(sql, columnParam, param); sql = "select * from " + normaltblTableName + " where name >?"; param.clear(); param.add(name); selectContentSameAssert(sql, columnParam, param); } @Test public void mutilCompareTest() 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" }; selectContentSameAssert(sql, columnParam, param); sql = "select * from " + normaltblTableName + " where pk>=? and pk>? and name like ? or gmt_timestamp >?"; param.clear(); param.add(start1); param.add(start2); param.add(name); param.add(gmtNext); selectContentSameAssert(sql, columnParam, param); sql = "select * from " + normaltblTableName + " where pk>=? and pk>? and name like ? or gmt_timestamp >?"; param.clear(); param.add(start1); param.add(start2); param.add(name); param.add(gmtNext); selectContentSameAssert(sql, columnParam, param); sql = "select * from " + normaltblTableName + " where pk>? or (id<? and name like ? and gmt_timestamp= ?)"; 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 = "select * from " + normaltblTableName + " where pk<=? and id>? or name like ? and gmt_datetime =? 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); } @Test public void lessAndGreatNoDataTest() throws Exception { long start = 5; long end = 15; String sql = "select * from " + normaltblTableName + " where pk<? and pk>?"; List<Object> param = new ArrayList<Object>(); param.add(start); param.add(end); { rs = mysqlQueryData(sql, param); rc = andorQueryData(sql, param); Assert.assertEquals(resultsSize(rs), resultsSize(rc)); } } /** * 列的比较 */ @Test public void cloumnCompareTest() throws Exception { String sql = "select * from " + normaltblTableName + " where pk > id"; selectContentSameAssert(sql, columnParam, null); } @Test public void notEqualsTest() throws Exception { String sql = "select * from " + normaltblTableName + " where pk <> ?"; List<Object> param = new ArrayList<Object>(); param.add(Long.parseLong(0 + "")); selectContentSameAssert(sql, columnParam, param); sql = "select * from " + normaltblTableName + " where pk != ?"; param.clear(); param.add(Long.parseLong(0 + "")); selectContentSameAssert(sql, columnParam, param); } @Test public void notEqualsWithInTest() throws Exception { String sql = "select * from " + normaltblTableName + " where pk in(?,?,?) and id !=? and id !=? and name =?"; List<Object> param = new ArrayList<Object>(); param.add(1l); param.add(2l); param.add(3l); param.add(100); param.add(700); param.add(name); selectContentSameAssert(sql, columnParam, param); } @Test @Ignore // 不支持这个符号 public void equalsTest() throws Exception { andorUpdateData("insert into " + normaltblTableName + " (pk,name) values(?,?)", Arrays.asList(new Object[] { RANDOM_ID, null })); String sql = "select * from " + normaltblTableName + " where name <=> ?"; List<Object> param = new ArrayList<Object>(); param.add(null); selectContentSameAssert(sql, columnParam, param); } /** * 操作符:位操作与 & */ @Test public void bitwiseAndTest() throws Exception { if (!normaltblTableName.startsWith("ob")) { String sql = "select count(*) from " + normaltblTableName + " where pk in (?,?,?) and name =? and id & ? = ?"; String[] columnParam = { "count(*)" }; List<Object> param = new ArrayList<Object>(); param.add(1); param.add(2); param.add(3); param.add(name); param.add(300); param.add(300); selectContentSameAssert(sql, columnParam, param); } } /** * 操作符:位操作与 & 和like操作 */ @Test public void bitwiseLikeTest() throws Exception { if (!normaltblTableName.startsWith("ob")) { String sql = "select count(*) from " + normaltblTableName + " where pk in (?,?,?) and name like ? and id & ? = ?"; String[] columnParam = { "count(*)" }; List<Object> param = new ArrayList<Object>(); param.add(1); param.add(2); param.add(3); param.add(name); param.add(300); param.add(300); selectContentSameAssert(sql, columnParam, param); } } /** * 操作符:位操作符 ^ */ @Test public void xorTest() throws Exception { if (!normaltblTableName.startsWith("ob")) { String sql = "select count(*) from " + normaltblTableName + " where pk ^ id > ?"; String[] columnParam = { "count(*)" }; List<Object> param = new ArrayList<Object>(); param.add(100); selectContentSameAssert(sql, columnParam, param); sql = "select count(*) from " + normaltblTableName + " where pk xor id > ?"; selectContentSameAssert(sql, columnParam, param); } } /** * 带有乘法操作 */ @Test public void multiplicationTest() throws Exception { String sql = "select * from " + normaltblTableName + " where id > pk * floatCol"; selectContentSameAssert(sql, columnParam, null); } /** * 操作符:%(模)运算 */ @Test public void dieTest() throws Exception { String sql = "select * from " + normaltblTableName + " where id % ? = ? and name =? "; List<Object> param = new ArrayList<Object>(); param.add(100); param.add(0); param.add(name); selectContentSameAssert(sql, columnParam, param); } /** * 除法操作:/ * * @throws Exception */ @Test public void divisionTest() throws Exception { String sql = "select sum(id)/sum(pk) as avg from " + normaltblTableName + " where name =? "; List<Object> param = new ArrayList<Object>(); param.add(name); String[] columnParam = { "avg" }; selectContentSameAssert(sql, columnParam, param); } /** * 复杂计算 */ @Test public void complicateCalcuationTest() throws Exception { String sql = "select id/(pk+1)*floatCol as c from " + normaltblTableName + " where name=?"; List<Object> param = new ArrayList<Object>(); param.add(name); String[] columParam = { "c" }; selectContentSameAssert(sql, columParam, param); } /** * 数学常量计算 */ @Test public void constantCalcuationTest() throws Exception { String sql = "select 20*2 a ,id from " + normaltblTableName + " where name=?"; List<Object> param = new ArrayList<Object>(); param.add(name); String[] columParam = { "a", "id" }; selectContentSameAssert(sql, columParam, param); } /** * 数学运算没有加别名 */ @Test public void calcuationTest() throws Exception { String sql = "select 20*2 a ,id from " + normaltblTableName + " where name=?"; List<Object> param = new ArrayList<Object>(); param.add(name); String[] columParam = { "a", "id" }; selectContentSameAssert(sql, columParam, param); } /** * where条件中有带算术运算的比较 */ @Test public void calcuationWhereTest() throws Exception { String sql = "select * from " + normaltblTableName + " where id>=?+?"; List<Object> param = new ArrayList<Object>(); param.add(100); param.add(200); selectContentSameAssert(sql, columnParam, param); sql = "select * from " + normaltblTableName + " where ?+?!=id"; selectContentSameAssert(sql, columnParam, param); } /** * &&操作 * * @throws Exception */ @Test public void and() throws Exception { String sql = "select * from " + normaltblTableName + " where name like ? && pk > ? "; List<Object> param = new ArrayList<Object>(); param.add(name); param.add(500); selectContentSameAssert(sql, columnParam, param); } }