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;
/**
* 在缓存情况下,执行计划是否正确
* <p/>
* Author By: zhuoxue.yll Created Date: 2012-9-17 上午11:14:23
*/
@RunWith(EclipseParameterized.class)
public class SelectCacheTest extends BaseMatrixTestCase {
String[] columnParam = { "PK", "NAME", "ID", "gmt_create", "GMT_TIMESTAMP", "GMT_DATETIME", "floatCol" };
@Parameters(name = "{index}:table1={0}")
public static List<String[]> prepareData() {
return Arrays.asList(ExecuteTableName.normaltblTable(dbType));
}
public SelectCacheTest(String tableName){
BaseTestCase.normaltblTableName = tableName;
}
@Before
public void prepareDate() throws Exception {
normaltblPrepare(0, 20);
}
/**
* 给id多组不同的值验证
*/
@Test
public void selectWhereTest() throws Exception {
if (!normaltblTableName.startsWith("ob")) {
for (int i = 0; i < 4; i++) {
String sql = "select * from " + normaltblTableName + " where id=?";
List<Object> param = new ArrayList<Object>();
param.add(i);
selectContentSameAssert(sql, columnParam, param);
sql = "select * from " + normaltblTableName + " where id=? and name =?";
param.clear();
param.add(i);
param.add(name);
selectContentSameAssert(sql, columnParam, param);
sql = "/* ANDOR ALLOW_TEMPORARY_TABLE=True */ select * from " + normaltblTableName
+ " where id=? or pk =?";
param.clear();
param.add(i);
param.add(Long.parseLong(i + 1 + ""));
selectContentSameAssert(sql, columnParam, param);
}
}
}
@Test
public void selectAliasTest() throws Exception {
if (!normaltblTableName.startsWith("ob")) {
for (long i = 0; i < 4; i++) {
String sql = "select * from " + normaltblTableName + " nor where nor.pk=?";
List<Object> param = new ArrayList<Object>();
param.add(i);
selectContentSameAssert(sql, columnParam, param);
}
}
}
@Test
public void selectOrderTest() throws Exception {
for (long i = 0; i < 4; i++) {
String sql = "select * from " + normaltblTableName + " where pk= ? order by name";
List<Object> param = new ArrayList<Object>();
param.add(i);
selectOrderAssertNotKeyCloumn(sql, columnParam, param, "name");
sql = "select * from " + normaltblTableName + " where pk= ? order by name desc";
selectOrderAssertNotKeyCloumn(sql, columnParam, param, "name");
}
}
@Test
public void selectLimitTest() throws Exception {
String[] stringName = { name, newName, name1 };
for (int i = 0; i < stringName.length; i++) {
String sql = "select * from " + normaltblTableName + " where name= ? order by id limit 2";
List<Object> param = new ArrayList<Object>();
param.add(stringName[i]);
selectOrderAssertNotKeyCloumn(sql, columnParam, param, "id");
sql = "select * from " + normaltblTableName + " where name= ? order by id desc limit 2";
selectOrderAssertNotKeyCloumn(sql, columnParam, param, "id");
}
}
@Test
public void selectLGroupTest() throws Exception {
String[] stringName = { name, newName, name1 };
String[] columnParam = { "gmt_timestamp", "count(pk)" };
for (int i = 0; i < stringName.length; i++) {
String sql = "/* ANDOR ALLOW_TEMPORARY_TABLE=True */ select gmt_timestamp,count(pk) from "
+ normaltblTableName + " where name=? group by gmt_timestamp order by count(pk)";
List<Object> param = new ArrayList<Object>();
param.add(stringName[i]);
selectContentSameAssert(sql, columnParam, param);
}
}
@Test
public void selectOperatorTest() throws Exception {
for (int i = 0; i < 4; i++) {
String sql = "select * from " + normaltblTableName + " where id>?";
List<Object> param = new ArrayList<Object>();
param.add(i);
selectContentSameAssert(sql, columnParam, param);
sql = "select * from " + normaltblTableName + " where id >=? and id<?";
param.clear();
param.add(i);
param.add(i + 10);
selectContentSameAssert(sql, columnParam, param);
}
}
@Test
public void selectBetweenTest() throws Exception {
for (int i = 0; i < 4; i++) {
String sql = "select * from " + normaltblTableName + " where id between ? and ?";
List<Object> param = new ArrayList<Object>();
param.add(i - 3);
param.add(i + 4);
selectContentSameAssert(sql, columnParam, param);
sql = "/* ANDOR ALLOW_TEMPORARY_TABLE=True */ select * from " + normaltblTableName
+ " where id between ? and ? order by name";
param.clear();
param.add(i - 3);
param.add(i + 4);
selectContentSameAssert(sql, columnParam, param);
}
}
@Test
public void selectLikeTest() throws Exception {
String[] stringName = { name, newName, name1 };
for (int i = 0; i < stringName.length; i++) {
String sql = "select * from " + normaltblTableName + " where name like ?";
List<Object> param = new ArrayList<Object>();
param.add(stringName[i]);
selectContentSameAssert(sql, columnParam, param);
sql = "select * from " + normaltblTableName + " where name like ? and id>" + 3;
selectContentSameAssert(sql, columnParam, param);
}
}
@Test
public void insertTest() throws Exception {
andorUpdateData("delete from " + normaltblTableName, null);
mysqlUpdateData("delete from " + normaltblTableName, null);
for (long i = 0; i < 4; i++) {
String sql = "insert into " + normaltblTableName
+ " (pk,floatCol,gmt_create,gmt_timestamp,gmt_datetime)values(?,?,?,?,?)";
List<Object> param = new ArrayList<Object>();
param.add(i);
param.add(fl);
param.add(gmtDay);
param.add(gmt);
param.add(gmt);
execute(sql, param);
sql = "select * from " + normaltblTableName + " where pk= ?";
param.clear();
param.add(i);
String[] columnParam = { "PK", "GMT_CREATE", "GMT_TIMESTAMP", "GMT_DATETIME", "FLOATCOL" };
selectOrderAssert(sql, columnParam, param);
}
}
@Test
public void replaceTest() throws Exception {
andorUpdateData("delete from " + normaltblTableName, null);
mysqlUpdateData("delete from " + normaltblTableName, null);
for (long i = 0; i < 4; i++) {
String sql = "replace into " + normaltblTableName
+ " (pk,floatCol,gmt_create,gmt_timestamp,gmt_datetime)values(?,?,?,?,?)";
List<Object> param = new ArrayList<Object>();
param.add(i);
param.add(fl);
param.add(gmtDay);
param.add(gmt);
param.add(gmt);
execute(sql, param);
sql = "select * from " + normaltblTableName + " where pk= ?";
param.clear();
param.add(i);
String[] columnParam = { "PK", "GMT_CREATE", "FLOATCOL", "GMT_DATETIME", "FLOATCOL" };
selectOrderAssert(sql, columnParam, param);
}
}
@Test
public void updateTest() throws Exception {
if (!normaltblTableName.startsWith("ob")) {
for (long i = 0; i < 4; i++) {
String sql = "UPDATE " + normaltblTableName
+ " SET id=?,gmt_create=?,gmt_timestamp=?,gmt_datetime=?,name=?,floatCol=? WHERE pk=?";
List<Object> param = new ArrayList<Object>();
param.add(rand.nextInt());
param.add(gmt);
param.add(gmt);
param.add(gmt);
param.add("new_name" + rand.nextInt());
param.add(fl);
param.add(i);
executeCountAssert(sql, param);
sql = "SELECT * FROM " + normaltblTableName + " WHERE pk=?";
param.clear();
param.add(i);
String[] columnParam = { "ID", "GMT_CREATE", "GMT_DATETIME", "FLOATCOL", "NAME", "FLOATCOL" };
selectOrderAssert(sql, columnParam, param);
}
}
}
/**
* 更新自增测试
*/
@Test
public void updateIncrementTest() throws Exception {
if (!normaltblTableName.startsWith("ob")) {
for (long i = 0; i < 4; i++) {
String sql = "UPDATE " + normaltblTableName
+ " SET id=id+?,gmt_create=?,gmt_timestamp=?,gmt_datetime=?,name=?,floatCol=? WHERE pk=?";
List<Object> param = new ArrayList<Object>();
param.add(rand.nextInt());
param.add(gmt);
param.add(gmt);
param.add(gmt);
param.add("new_name" + rand.nextInt());
param.add(fl);
param.add(i);
executeCountAssert(sql, param);
sql = "SELECT * FROM " + normaltblTableName + " WHERE pk=?";
param.clear();
param.add(i);
String[] columnParam = { "ID", "GMT_CREATE", "GMT_DATETIME", "FLOATCOL", "NAME", "FLOATCOL" };
selectOrderAssert(sql, columnParam, param);
}
}
}
@Test
public void deleteTest() throws Exception {
for (long i = 0; i < 4; i++) {
String sql = "DELETE FROM " + normaltblTableName + " WHERE pk = ?";
List<Object> param = new ArrayList<Object>();
param.add(i);
executeCountAssert(sql, Arrays.asList(new Object[] { i }));
}
}
}