package com.taobao.tddl.optimizer.costbased;
import org.junit.Assert;
import org.junit.Test;
import com.taobao.tddl.optimizer.BaseOptimizerTest;
import com.taobao.tddl.optimizer.core.ast.ASTNode;
import com.taobao.tddl.optimizer.core.ast.dml.DeleteNode;
import com.taobao.tddl.optimizer.core.ast.dml.InsertNode;
import com.taobao.tddl.optimizer.core.ast.dml.PutNode;
import com.taobao.tddl.optimizer.core.ast.dml.UpdateNode;
import com.taobao.tddl.optimizer.core.ast.query.TableNode;
import com.taobao.tddl.optimizer.core.plan.IDataNodeExecutor;
import com.taobao.tddl.optimizer.core.plan.IPut;
import com.taobao.tddl.optimizer.core.plan.dml.IInsert;
import com.taobao.tddl.optimizer.core.plan.query.IMerge;
import com.taobao.tddl.optimizer.exceptions.QueryException;
/**
* @author Dreamond
*/
public class DMLNodeChooserTest extends BaseOptimizerTest {
@Test
public void testUpdate() throws QueryException {
TableNode table = new TableNode("TABLE1");
String values[] = { "NAME" };
UpdateNode update = ((TableNode) table.query("ID>=5 AND ID<=100")).update("NAME", values);
IDataNodeExecutor plan = optimizer.optimizeAndAssignment(update, null, null);
Assert.assertTrue(plan instanceof IMerge);
Assert.assertEquals(8, ((IMerge) plan).getSubNode().size());
String sql = "UPDATE TABLE1 SET NAME = NAME WHERE ID>=5 AND ID<=100";
plan = optimizer.optimizeAndAssignment(sql, null, null, false);
Assert.assertTrue(plan instanceof IMerge);
Assert.assertEquals(8, ((IMerge) plan).getSubNode().size());
}
public void testUpdate_范围更新生成merge() throws QueryException {
TableNode table = new TableNode("TABLE1");
String values[] = { "NAME" };
UpdateNode update = ((TableNode) table.query("ID>=5")).update("NAME", values);
IDataNodeExecutor plan = optimizer.optimizeAndAssignment(update, null, null);
Assert.assertTrue(plan instanceof IMerge);
Assert.assertEquals(8, ((IMerge) plan).getSubNode().size());
String sql = "UPDATE TABLE1 SET NAME = NAME WHERE ID>=5";
plan = optimizer.optimizeAndAssignment(sql, null, null, false);
Assert.assertTrue(plan instanceof IMerge);
Assert.assertEquals(8, ((IMerge) plan).getSubNode().size());
}
@Test
public void testPut() throws QueryException {
TableNode table = new TableNode("TABLE1");
Comparable values[] = { 2 };
PutNode update = ((TableNode) table).put("ID", values);
IDataNodeExecutor plan = optimizer.optimizeAndAssignment(update, null, null);
Assert.assertTrue(plan instanceof IPut);
String sql = "INSERT INTO TABLE1(ID) VALUES(2)";
plan = optimizer.optimizeAndAssignment(sql, null, null, false);
Assert.assertTrue(plan instanceof IPut);
}
@Test
public void testPut_全字段() throws QueryException {
TableNode table = new TableNode("TABLE1");
Comparable values[] = { 2, "sysu", "sun" };
PutNode put = table.put("ID SCHOOL NAME", values);
IDataNodeExecutor plan = optimizer.optimizeAndAssignment(put, null, null);
Assert.assertTrue(plan instanceof IPut);
String sql = "REPLACE INTO TABLE1(ID,SCHOOL,NAME) VALUES(2,'sysu','sun')";
plan = optimizer.optimizeAndAssignment(sql, null, null, false);
Assert.assertTrue(plan instanceof IPut);
}
@Test
public void testDelete() throws QueryException {
TableNode table = new TableNode("TABLE1");
table.query("ID>=5 AND ID<=100");
ASTNode delete = ((TableNode) table).delete();// .delete();
IDataNodeExecutor plan = optimizer.optimizeAndAssignment(delete, null, null);
Assert.assertTrue(plan instanceof IMerge);
Assert.assertEquals(8, ((IMerge) plan).getSubNode().size());
String sql = "DELETE FROM TABLE1 WHERE ID>=5 AND ID<=100";
plan = optimizer.optimizeAndAssignment(sql, null, null, false);
Assert.assertTrue(plan instanceof IMerge);
Assert.assertEquals(8, ((IMerge) plan).getSubNode().size());
}
@Test
public void testDelete_范围删除会生成merge() throws QueryException {
TableNode table = new TableNode("TABLE1");
DeleteNode delete = ((TableNode) table.query("ID>=5")).delete();
IDataNodeExecutor plan = optimizer.optimizeAndAssignment(delete, null, null);
Assert.assertTrue(plan instanceof IMerge);
Assert.assertEquals(8, ((IMerge) plan).getSubNode().size());
String sql = "DELETE FROM TABLE1 WHERE ID>=5";
plan = optimizer.optimizeAndAssignment(sql, null, null, false);
Assert.assertTrue(plan instanceof IMerge);
Assert.assertEquals(8, ((IMerge) plan).getSubNode().size());
}
@Test
public void testInsert() throws QueryException {
TableNode table = new TableNode("TABLE1");
Comparable values[] = { 2 };
InsertNode insert = table.insert("ID", values);
IDataNodeExecutor plan = optimizer.optimizeAndAssignment(insert, null, null);
Assert.assertTrue(plan instanceof IInsert);
String sql = "INSERT INTO TABLE1(ID) VALUES(2)";
plan = optimizer.optimizeAndAssignment(sql, null, null, false);
Assert.assertTrue(plan instanceof IInsert);
}
@Test
public void testInsert_全字段() throws QueryException {
TableNode table = new TableNode("TABLE1");
Comparable values[] = { 2, "sysu", "sun" };
InsertNode insert = table.insert("ID SCHOOL NAME", values);
IDataNodeExecutor plan = optimizer.optimizeAndAssignment(insert, null, null);
Assert.assertTrue(plan instanceof IInsert);
String sql = "INSERT INTO TABLE1 VALUES(2,'sysu','sun')";
plan = optimizer.optimizeAndAssignment(sql, null, null, false);
Assert.assertTrue(plan instanceof IInsert);
}
}