package com.taobao.tddl.qatest.matrix.basecrud;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.junit.Assert;
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;
@RunWith(EclipseParameterized.class)
public class UpdateTest extends BaseMatrixTestCase {
@Parameters(name = "{index}:table={0}")
public static List<String[]> prepareData() {
return Arrays.asList(ExecuteTableName.normaltblTable(dbType));
}
public UpdateTest(String tableName){
BaseTestCase.normaltblTableName = tableName;
}
@Before
public void prepare() throws Exception {
normaltblPrepare(0, 20);
}
@Test
public void updateAll() throws Exception {
if (normaltblTableName.startsWith("ob")) {
// ob不支持批量更新
return;
}
String sql = "UPDATE " + normaltblTableName
+ " SET id=?,gmt_create=?,gmt_timestamp=?,gmt_datetime=?,name=?,floatCol=?";
List<Object> param = new ArrayList<Object>();
param.add(9999);
param.add(gmtDay);
param.add(gmt);
param.add(gmt);
param.add("new_name");
param.add(0.999F);
executeCountAssert(sql, param);
sql = "SELECT * FROM " + normaltblTableName;
String[] columnParam = { "ID", "GMT_CREATE", "NAME", "FLOATCOL", "GMT_TIMESTAMP", "GMT_DATETIME" };
selectOrderAssert(sql, columnParam, Collections.EMPTY_LIST);
}
@Test
public void updateOne() throws Exception {
long pk = 5;
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(gmtDay);
param.add(gmt);
param.add(gmt);
param.add("new_name" + rand.nextInt());
param.add(fl);
param.add(pk);
executeCountAssert(sql, param);
sql = "SELECT * FROM " + normaltblTableName + " WHERE pk=" + pk;
String[] columnParam = { "ID", "GMT_CREATE", "GMT_TIMESTAMP", "GMT_DATETIME", "NAME", "FLOATCOL" };
selectOrderAssert(sql, columnParam, Collections.EMPTY_LIST);
}
@Test
public void updateSome() throws Exception {
if (normaltblTableName.startsWith("ob")) {
// ob不支持批量更新
return;
}
String sql = "UPDATE "
+ normaltblTableName
+ " SET id=?,gmt_create=?,gmt_timestamp=?,gmt_datetime=?,name=?,floatCol=? WHERE pk BETWEEN 3 AND 7";
List<Object> param = new ArrayList<Object>();
param.add(rand.nextInt());
param.add(gmtDay);
param.add(gmt);
param.add(gmt);
param.add("new_name" + rand.nextInt());
param.add(fl);
executeCountAssert(sql, param);
sql = "SELECT * FROM " + normaltblTableName + " WHERE pk BETWEEN 3 AND 7";
String[] columnParam = { "ID", "GMT_CREATE", "GMT_TIMESTAMP", "GMT_DATETIME", "NAME", "FLOATCOL" };
selectContentSameAssert(sql, columnParam, Collections.EMPTY_LIST);
}
@Test
public void updateSome1() throws Exception {
if (normaltblTableName.startsWith("ob")) {
// ob不支持批量更新
return;
}
String sql = "UPDATE " + normaltblTableName
+ " SET id=?,gmt_create=?,gmt_timestamp=?,gmt_datetime=?,name=?,floatCol=? WHERE pk > 7";
List<Object> param = new ArrayList<Object>();
param.add(rand.nextInt());
param.add(gmtDay);
param.add(gmt);
param.add(gmt);
param.add("new_name" + rand.nextInt());
param.add(fl);
executeCountAssert(sql, param);
sql = "SELECT * FROM " + normaltblTableName + " WHERE pk > 7";
String[] columnParam = { "ID", "GMT_CREATE", "GMT_TIMESTAMP", "GMT_DATETIME", "NAME", "FLOATCOL" };
selectContentSameAssert(sql, columnParam, Collections.EMPTY_LIST);
}
@Test
public void updateSome2() throws Exception {
if (normaltblTableName.startsWith("ob")) {
// ob不支持批量更新
return;
}
String sql = "UPDATE " + normaltblTableName
+ " SET id=?,gmt_create=?,gmt_timestamp=?,gmt_datetime=?,name=?,floatCol=? WHERE pk < 7";
List<Object> param = new ArrayList<Object>();
param.add(rand.nextInt());
param.add(gmtDay);
param.add(gmt);
param.add(gmt);
param.add("new_name" + rand.nextInt());
param.add(fl);
executeCountAssert(sql, param);
sql = "SELECT * FROM " + normaltblTableName + " WHERE pk < 7";
String[] columnParam = { "ID", "GMT_CREATE", "GMT_TIMESTAMP", "GMT_DATETIME", "NAME", "FLOATCOL" };
selectContentSameAssert(sql, columnParam, Collections.EMPTY_LIST);
}
@Test
public void updateSome3() throws Exception {
if (normaltblTableName.startsWith("ob")) {
// ob不支持批量更新
return;
}
String sql = "UPDATE " + normaltblTableName + " SET id=?,gmt_create=?,name=?,floatCol=? WHERE pk >= 7";
List<Object> param = new ArrayList<Object>();
param.add(rand.nextInt());
param.add(gmtDay);
param.add("new_name" + rand.nextInt());
param.add(fl);
executeCountAssert(sql, param);
sql = "SELECT * FROM " + normaltblTableName + " WHERE pk >= 7";
String[] columnParam = { "ID", "GMT_CREATE", "NAME", "FLOATCOL" };
selectContentSameAssert(sql, columnParam, Collections.EMPTY_LIST);
}
@Test
public void updateSome4() throws Exception {
if (normaltblTableName.startsWith("ob")) {
// ob不支持批量更新
return;
}
String sql = "UPDATE " + normaltblTableName + " SET id=?,gmt_create=?,name=?,floatCol=? WHERE pk <= 7";
List<Object> param = new ArrayList<Object>();
param.add(rand.nextInt());
param.add(gmtDay);
param.add("new_name" + rand.nextInt());
param.add(fl);
executeCountAssert(sql, param);
sql = "SELECT * FROM " + normaltblTableName + " WHERE pk <= 7";
String[] columnParam = { "ID", "GMT_CREATE", "NAME", "FLOATCOL" };
selectContentSameAssert(sql, columnParam, Collections.EMPTY_LIST);
}
@Test
public void nowTest() throws Exception {
if (normaltblTableName.startsWith("ob")) {
// ob不支持批量更新
return;
}
String sql = "update " + normaltblTableName
+ " set gmt_create= now(),gmt_timestamp= now(),gmt_datetime=now() where pk=1";
int mysqlRow = mysqlUpdateData(sql, null);
int row = andorUpdateData(sql, null);
Assert.assertEquals(mysqlRow, row);
sql = "select * from " + normaltblTableName + " where pk = 1";
rs = mysqlQueryData(sql, null);
rc = andorQueryData(sql, null);
String[] columnParam = { "gmt_create", "gmt_timestamp", "gmt_datetime" };
assertOrder(rs, rc, columnParam);
}
/**
* 更新的条件中带&&和||条件
*
* @throws Exception
*/
@Test
public void whereWithComplexTest() throws Exception {
if (normaltblTableName.startsWith("ob")) {
// ob不支持批量更新
return;
}
String sql = "update " + normaltblTableName
+ " set floatCol= ? where name= ? and ((?-id>100)||(?<id && ?-id >200))";
List<Object> param = new ArrayList<Object>();
param.add(1.2);
param.add(name);
param.add(400);
param.add(200);
param.add(800);
executeCountAssert(sql, param);
}
/**
* 更新的值,自增:v=v+?
*/
@Test
public void setWithIncrementTest() throws Exception {
if (normaltblTableName.startsWith("ob")) {
// ob不支持批量更新
return;
}
String sql = "update " + normaltblTableName + " set floatCol= floatCol+ ? where id =? and name =?";
List<Object> param = new ArrayList<Object>();
param.add(2);
param.add(200);
param.add(name);
executeCountAssert(sql, param);
sql = "select floatCol from " + normaltblTableName + " where id =? and name=?";
param.clear();
param.add(200);
param.add(name);
String[] columnParam = { "floatCol" };
selectOrderAssert(sql, columnParam, param);
}
@Test
public void updateNotExistDateTest() throws Exception {
if (normaltblTableName.startsWith("ob")) {
// ob不支持批量更新
return;
}
long pk = -11l;
String sql = "UPDATE " + normaltblTableName + " SET id=? WHERE pk=?";
List<Object> param = new ArrayList<Object>();
param.add(rand.nextInt());
param.add(pk);
executeCountAssert(sql, param);
}
@Test
public void updateNotExistFiledTest() throws Exception {
if (normaltblTableName.startsWith("ob")) {
// ob不支持批量更新
return;
}
String sql = "UPDATE " + normaltblTableName + " SET nothisfield = ?";
try {
andorUpdateData(sql, null);
Assert.fail();
} catch (Exception e) {
Assert.assertTrue(e.getMessage().contains(" NOTHISFIELD is not existed"));
}
}
@Test
public void updateNotExistTableTest() throws Exception {
if (normaltblTableName.startsWith("ob")) {
// ob不支持批量更新
return;
}
String sql = "UPDATE nor SET pk = ?";
List<Object> param = new ArrayList<Object>();
param.add(RANDOM_ID);
try {
andorUpdateData(sql, param);
Assert.fail();
} catch (Exception e) {
Assert.assertTrue(e.getMessage() != null);
}
}
@Test
public void updateNotMatchTypeTest() throws Exception {
if (normaltblTableName.startsWith("ob")) {
// ob不支持批量更新
return;
}
String sql = "UPDATE " + normaltblTableName + " SET id=? WHERE pk=?";
List<Object> param = new ArrayList<Object>();
param.add("NIHAO");
param.add(1l);
try {
andorUpdateData(sql, param);
Assert.fail();
} catch (Exception ex) {
Assert.assertTrue(ex.getMessage() != null);
}
}
}