package com.taobao.tddl.qatest.matrix.hint;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;
import com.taobao.tddl.qatest.BaseMatrixTestCase;
import com.taobao.tddl.qatest.BaseTestCase;
public class DirectHintTest extends BaseMatrixTestCase {
private JdbcTemplate jdbcTemplate;
private Date time = new Date();
public DirectHintTest(){
BaseTestCase.normaltblTableName = "mysql_normaltbl_oneGroup_oneAtom";
jdbcTemplate = new JdbcTemplate(us);
}
@Before
public void initData() throws Exception {
andorUpdateData("delete from mysql_normaltbl_oneGroup_oneAtom", null);
andorUpdateData("delete from mysql_normaltbl_onegroup_mutilatom", null);
}
@Test
public void test_指定库_不指定表() throws Exception {
String sql = "/*+TDDL({\"type\":\"direct\",\"dbid\":\"andor_mysql_group_oneAtom\"})*/";
sql += "insert into mysql_normaltbl_oneGroup_oneAtom values(?,?,?,?,?,?,?)";
List<Object> param = new ArrayList<Object>();
param.add(RANDOM_ID);
param.add(RANDOM_INT);
param.add(time);
param.add(time);
param.add(time);
param.add(name);
param.add(fl);
andorUpdateData(sql, param);
sql = "select gmt_timestamp from " + normaltblTableName + " where pk=" + RANDOM_ID;
Map re = jdbcTemplate.queryForMap(sql);
Assert.assertEquals(time.getTime() / 1000, ((Date) re.get("GMT_TIMESTAMP")).getTime() / 1000);
sql = "/*+TDDL({\"type\":\"direct\",\"dbid\":\"andor_mysql_group_oneAtom\"})*/";
sql += "delete from mysql_normaltbl_oneGroup_oneAtom where pk = " + RANDOM_ID;
andorUpdateData(sql, null);
}
@Test
public void test_指定库_指定表() throws Exception {
// 源表为mysql_normaltbl_oneGroup_oneAtom, 指定两个表
// mysql_normaltbl_onegroup_mutilatom_00 ,
// mysql_normaltbl_onegroup_mutilatom_01
String sql = "/*+TDDL({\"type\":\"direct\",\"dbid\":\"andor_mysql_group_oneAtom\",\"vtab\":\"mysql_normaltbl_oneGroup_oneAtom\",\"realtabs\":[\"mysql_normaltbl_onegroup_mutilatom_00\",\"mysql_normaltbl_onegroup_mutilatom_01\"]})*/ ";
sql += "insert into mysql_normaltbl_oneGroup_oneAtom values(?,?,?,?,?,?,?)";
List<Object> param = new ArrayList<Object>();
param.add(RANDOM_ID);
param.add(RANDOM_INT);
param.add(time);
param.add(time);
param.add(time);
param.add(name);
param.add(fl);
andorUpdateData(sql, param);
// 分别查询两个库
sql = "/*+TDDL({\"type\":\"direct\",\"dbid\":\"andor_mysql_group_oneAtom\",\"vtab\":\"mysql_normaltbl_oneGroup_oneAtom\",\"realtabs\":[\"mysql_normaltbl_onegroup_mutilatom_00\"]})*/";
sql += "select gmt_timestamp from mysql_normaltbl_oneGroup_oneAtom where pk=" + RANDOM_ID;
Map re = jdbcTemplate.queryForMap(sql);
Assert.assertEquals(time.getTime() / 1000, ((Date) re.get("GMT_TIMESTAMP")).getTime() / 1000);
sql = "/*+TDDL({\"type\":\"direct\",\"dbid\":\"andor_mysql_group_oneAtom\",\"vtab\":\"mysql_normaltbl_oneGroup_oneAtom\",\"realtabs\":[\"mysql_normaltbl_onegroup_mutilatom_01\"]})*/";
sql += "select gmt_timestamp from mysql_normaltbl_oneGroup_oneAtom where pk=" + RANDOM_ID;
re = jdbcTemplate.queryForMap(sql);
Assert.assertEquals(time.getTime() / 1000, ((Date) re.get("GMT_TIMESTAMP")).getTime() / 1000);
// 删除
sql = "/*+TDDL({\"type\":\"direct\",\"dbid\":\"andor_mysql_group_oneAtom\",\"vtab\":\"mysql_normaltbl_oneGroup_oneAtom\",\"realtabs\":[\"mysql_normaltbl_onegroup_mutilatom_00\",\"mysql_normaltbl_onegroup_mutilatom_01\"]})*/";
sql += "delete from mysql_normaltbl_oneGroup_oneAtom where pk = " + RANDOM_ID;
andorUpdateData(sql, null);
}
@Test
public void test_指定库_指定表_多表名替换() throws Exception {
String sql = "/*+TDDL({\"type\":\"direct\",\"dbid\":\"andor_mysql_group_oneAtom\",\"vtab\":\"mysql_normaltbl_oneGroup_oneAtom\",\"realtabs\":[\"mysql_normaltbl_onegroup_mutilatom_00\",\"mysql_normaltbl_onegroup_mutilatom_01\"]})*/";
sql += "insert into mysql_normaltbl_oneGroup_oneAtom values(?,?,?,?,?,?,?)";
List<Object> param = new ArrayList<Object>();
param.add(RANDOM_ID);
param.add(RANDOM_INT);
param.add(time);
param.add(time);
param.add(time);
param.add(name);
param.add(fl);
andorUpdateData(sql, param);
// 多表名替换时,用逗号分隔
sql = "/*+TDDL({\"type\":\"direct\",\"dbid\":\"andor_mysql_group_oneAtom\",\"vtab\":\"tablea,tableb\",\"realtabs\":[\"mysql_normaltbl_onegroup_mutilatom_00,mysql_normaltbl_onegroup_mutilatom_01\"]})*/";
sql += "select a.gmt_timestamp as atime,b.gmt_timestamp as btime from tablea a inner join tableb b on a.pk = b.pk where a.pk="
+ RANDOM_ID;
Map re = jdbcTemplate.queryForMap(sql);
Assert.assertEquals(time.getTime() / 1000, ((Date) re.get("ATIME")).getTime() / 1000);
Assert.assertEquals(time.getTime() / 1000, ((Date) re.get("BTIME")).getTime() / 1000);
// 删除
sql = "/*+TDDL({\"type\":\"direct\",\"dbid\":\"andor_mysql_group_oneAtom\",\"vtab\":\"mysql_normaltbl_oneGroup_oneAtom\",\"realtabs\":[\"mysql_normaltbl_onegroup_mutilatom_00\",\"mysql_normaltbl_onegroup_mutilatom_01\"]})*/";
sql += "delete from mysql_normaltbl_oneGroup_oneAtom where pk = " + RANDOM_ID;
andorUpdateData(sql, null);
}
@Test
public void test_指定库_指定表_绑定变量() throws Exception {
// 源表为mysql_normaltbl_oneGroup_oneAtom, 指定两个表
// mysql_normaltbl_onegroup_mutilatom_00 ,
// mysql_normaltbl_onegroup_mutilatom_01
String sql = "/*+TDDL({\"type\":\"direct\",\"dbid\":\"?\",\"vtab\":\"?\",\"realtabs\":[\"?\",\"?\"]})*/ ";
sql += "insert into mysql_normaltbl_oneGroup_oneAtom values(?,?,?,?,?,?,?)";
List<Object> param = new ArrayList<Object>();
param.add("andor_mysql_group_oneAtom");
param.add("mysql_normaltbl_oneGroup_oneAtom");
param.add("mysql_normaltbl_onegroup_mutilatom_00");
param.add("mysql_normaltbl_onegroup_mutilatom_01");
param.add(RANDOM_ID);
param.add(RANDOM_INT);
param.add(time);
param.add(time);
param.add(time);
param.add(name);
param.add(fl);
andorUpdateData(sql, param);
// 分别查询两个库
sql = "/*+TDDL({\"type\":\"direct\",\"dbid\":\"?\",\"vtab\":\"?\",\"realtabs\":[\"?\"]})*/ ";
sql += "select gmt_timestamp from mysql_normaltbl_oneGroup_oneAtom where pk=" + RANDOM_ID;
Object args0[] = { "andor_mysql_group_oneAtom", "mysql_normaltbl_oneGroup_oneAtom",
"mysql_normaltbl_onegroup_mutilatom_00" };
Map re = jdbcTemplate.queryForMap(sql, args0);
Assert.assertEquals(time.getTime() / 1000, ((Date) re.get("GMT_TIMESTAMP")).getTime() / 1000);
sql = "/*+TDDL({\"type\":\"direct\",\"dbid\":\"?\",\"vtab\":\"?\",\"realtabs\":[\"?\"]})*/ ";
sql += "select gmt_timestamp from mysql_normaltbl_oneGroup_oneAtom where pk=" + RANDOM_ID;
Object args1[] = { "andor_mysql_group_oneAtom", "mysql_normaltbl_oneGroup_oneAtom",
"mysql_normaltbl_onegroup_mutilatom_01" };
re = jdbcTemplate.queryForMap(sql, args1);
Assert.assertEquals(time.getTime() / 1000, ((Date) re.get("GMT_TIMESTAMP")).getTime() / 1000);
// 删除
sql = "/*+TDDL({\"type\":\"direct\",\"dbid\":\"?\",\"vtab\":\"?\",\"realtabs\":[\"?\",\"?\"]})*/ ";
sql += "delete from mysql_normaltbl_oneGroup_oneAtom where pk = " + RANDOM_ID;
param = new ArrayList<Object>();
param.add("andor_mysql_group_oneAtom");
param.add("mysql_normaltbl_oneGroup_oneAtom");
param.add("mysql_normaltbl_onegroup_mutilatom_00");
param.add("mysql_normaltbl_onegroup_mutilatom_01");
andorUpdateData(sql, param);
}
@Test
public void test_指定库_指定表_选择groupindex() throws Exception {
// 源表为mysql_normaltbl_oneGroup_oneAtom, 指定两个表
// mysql_normaltbl_onegroup_mutilatom_00 ,
// mysql_normaltbl_onegroup_mutilatom_01
String sql = "/*+TDDL({\"type\":\"direct\",\"dbid\":\"andor_mysql_group_oneAtom\",\"vtab\":\"mysql_normaltbl_oneGroup_oneAtom\",\"realtabs\":[\"mysql_normaltbl_onegroup_mutilatom_00\",\"mysql_normaltbl_onegroup_mutilatom_01\"]})*/ ";
sql += "/*+TDDL_GROUP({groupIndex:0})*/";
sql += "insert into mysql_normaltbl_oneGroup_oneAtom values(?,?,?,?,?,?,?)";
List<Object> param = new ArrayList<Object>();
param.add(RANDOM_ID);
param.add(RANDOM_INT);
param.add(time);
param.add(time);
param.add(time);
param.add(name);
param.add(fl);
andorUpdateData(sql, param);
// 分别查询两个库
sql = "/*+TDDL({\"type\":\"direct\",\"dbid\":\"andor_mysql_group_oneAtom\",\"vtab\":\"mysql_normaltbl_oneGroup_oneAtom\",\"realtabs\":[\"mysql_normaltbl_onegroup_mutilatom_00\"]})*/";
sql += "/*+TDDL_GROUP({groupIndex:0})*/";
sql += "select gmt_timestamp from mysql_normaltbl_oneGroup_oneAtom where pk=" + RANDOM_ID;
Map re = jdbcTemplate.queryForMap(sql);
Assert.assertEquals(time.getTime() / 1000, ((Date) re.get("GMT_TIMESTAMP")).getTime() / 1000);
sql = "/*+TDDL({\"type\":\"direct\",\"dbid\":\"andor_mysql_group_oneAtom\",\"vtab\":\"mysql_normaltbl_oneGroup_oneAtom\",\"realtabs\":[\"mysql_normaltbl_onegroup_mutilatom_01\"]})*/";
sql += "/*+TDDL_GROUP({groupIndex:0})*/";
sql += "select gmt_timestamp from mysql_normaltbl_oneGroup_oneAtom where pk=" + RANDOM_ID;
re = jdbcTemplate.queryForMap(sql);
Assert.assertEquals(time.getTime() / 1000, ((Date) re.get("GMT_TIMESTAMP")).getTime() / 1000);
// 删除
sql = "/*+TDDL({\"type\":\"direct\",\"dbid\":\"andor_mysql_group_oneAtom\",\"vtab\":\"mysql_normaltbl_oneGroup_oneAtom\",\"realtabs\":[\"mysql_normaltbl_onegroup_mutilatom_00\",\"mysql_normaltbl_onegroup_mutilatom_01\"]})*/";
sql += "/*+TDDL_GROUP({groupIndex:0})*/";
sql += "delete from mysql_normaltbl_oneGroup_oneAtom where pk = " + RANDOM_ID;
andorUpdateData(sql, null);
}
}