assertSingleTargetWithoutParameter("insert into `order` (order_id, name) value (1,'test')","ds_1","insert into order_1 (order_id, name) value (1,'test')");
assertSingleTargetWithParameters("insert into `order` (order_id, name) value (?,?)",Arrays.<Object>asList(2,"test"),"ds_0","insert into order_0 (order_id, name) value (?,?)");
assertSingleTargetWithParameters(
Lists.newArrayList(newShardingValuePair("order",2)),"insert into `order` value (?,?)",Arrays.<Object>asList(2,"test"),"ds_0","insert into order_0 value (?,?)");
}
@Test
publicvoidassertUpdate(){
assertSingleTargetWithoutParameter("update `order` set name = 'test' where order_id = 1","ds_1","update order_1 set name = 'test' where order_id = 1");
assertSingleTargetWithoutParameter(Lists.newArrayList(newShardingValuePair("order",1)),"update `order` set name = 'test'","ds_1","update order_1 set name = 'test'");
assertSingleTargetWithParameters("update `order` set name = ? where order_id = ?",Arrays.<Object>asList("test",2),"ds_0","update order_0 set name = ? where order_id = ?");
assertSingleTargetWithParameters(
Lists.newArrayList(newShardingValuePair("order",2)),"update `order` set name = ?",Collections.<Object>singletonList("test"),"ds_0","update order_0 set name = ?");
}
@Test
publicvoidassertDelete(){
assertSingleTargetWithoutParameter("delete from `order` where order_id = 1","ds_1","delete from order_1 where order_id = 1");
assertSingleTargetWithoutParameter(Lists.newArrayList(newShardingValuePair("order",1)),"delete from `order`","ds_1","delete from order_1");
assertSingleTargetWithoutParameter(Lists.newArrayList(newShardingValuePair("order",2)),"delete from `order`","ds_0","delete from order_0");
assertSingleTargetWithParameters("delete from `order` where order_id = ?",Collections.<Object>singletonList(2),"ds_0","delete from order_0 where order_id = ?");
assertSingleTargetWithoutParameter("select * from order o inner join order_item i on o.order_id = i.order_id where o.order_id = 1","ds_1",
"select * from order_1 o inner join order_item_1 i on o.order_id = i.order_id where o.order_id = 1");
assertSingleTargetWithoutParameter("select * from order o join order_item i on o.order_id = i.order_id where o.order_id = 1","ds_1",
"select * from order_1 o join order_item_1 i on o.order_id = i.order_id where o.order_id = 1");
assertSingleTargetWithoutParameter("select * from order o join order_item i using (order_id) where o.order_id = 1","ds_1",
"select * from order_1 o join order_item_1 i using (order_id) where o.order_id = 1");
assertSingleTargetWithoutParameter("select * from order o, order_item i where o.order_id = i.order_id and o.order_id = 1","ds_1",
"select * from order_1 o, order_item_1 i where o.order_id = i.order_id and o.order_id = 1");
assertSingleTargetWithParameters("select * from order o, order_item i where o.order_id = i.order_id and o.order_id = ?",Collections.<Object>singletonList(1),"ds_1",
"select * from order_1 o, order_item_1 i where o.order_id = i.order_id and o.order_id = ?");
}
@Test
publicvoidassertSelectWithBindingJoinDynamic(){
assertSingleTargetWithoutParameter(Lists.newArrayList(newShardingValuePair("order",1)),"select * from order o inner join order_item i on o.order_id = i.order_id","ds_1",
"select * from order_1 o inner join order_item_1 i on o.order_id = i.order_id");
assertSingleTargetWithoutParameter(Lists.newArrayList(newShardingValuePair("order",1)),"select * from order o join order_item i on o.order_id = i.order_id","ds_1",
"select * from order_1 o join order_item_1 i on o.order_id = i.order_id");
assertSingleTargetWithoutParameter(Lists.newArrayList(newShardingValuePair("order",1)),"select * from order o join order_item i using (order_id)","ds_1",
"select * from order_1 o join order_item_1 i using (order_id)");
assertSingleTargetWithoutParameter(Lists.newArrayList(newShardingValuePair("order",1)),"select * from order o, order_item i where o.order_id = i.order_id","ds_1",
"select * from order_1 o, order_item_1 i where o.order_id = i.order_id");
}
@Test
publicvoidassertSelectWithRouteAllPartitions(){
assertMultipleTargetsWithoutParameter("select * from order o inner join order_item i on o.order_id = i.order_id",4,Arrays.asList("ds_0","ds_1"),
Arrays.asList("select * from order_0 o inner join order_item_0 i on o.order_id = i.order_id","select * from order_1 o inner join order_item_1 i on o.order_id = i.order_id"));
"select * from order o join order_item i join order_attr a using(order_id)","ds_1",
"select * from order_1 o join order_item_1 i join order_attr_b a using(order_id)");
}
@Test
publicvoidassertConditionFromRelationship(){
assertSingleTargetWithoutParameter("select * from order o join order_attr a using(order_id) where o.order_id = 1","ds_1",
"select * from order_1 o join order_attr_b a using(order_id) where o.order_id = 1");
assertSingleTargetWithoutParameter(
Lists.newArrayList(newShardingValuePair("order",1),newShardingValuePair("order_attr",1)),"select * from order o join order_attr a using(order_id)","ds_1",
"select * from order_1 o join order_attr_b a using(order_id)");
assertSingleTargetWithoutParameter("select sum(qty) from order where order_id = 1 group by tenant_id","ds_1",
"select sum(qty) , tenant_id AS GROUP_BY_DERIVED_0 from order_1 where order_id = 1 group by tenant_id ORDER BY GROUP_BY_DERIVED_0 ASC ");
// assertMultipleTargetsWithoutParameters("select sum(qty) from order group by tenant_id", 4, Arrays.asList("ds_0", "ds_1"),
// Arrays.asList("select sum(qty) , tenant_id as sharding_gen_1 from order_0 group by tenant_id", "select sum(qty) , tenant_id as sharding_gen_1 from order_1 group by tenant_id"));
}
@Test
publicvoidassertSingleSelect(){
assertSingleTargetWithoutParameter("select * from order where order_id = 1","ds_1","select * from order_1 where order_id = 1");
assertSingleTargetWithoutParameter(Collections.singletonList(newShardingValuePair("order",1)),"select * from order","ds_1","select * from order_1");
assertSingleTargetWithoutParameter(Collections.singletonList(newShardingValuePair("order",2)),"select * from order","ds_0","select * from order_0");
assertSingleTargetWithParameters("select * from order where order_id = ?",Collections.<Object>singletonList(2),"ds_0","select * from order_0 where order_id = ?");
}
@Test
publicvoidassertSelectWithAlias(){
assertSingleTargetWithoutParameter("select * from order a where a.order_id = 2","ds_0","select * from order_0 a where a.order_id = 2");
assertSingleTargetWithoutParameter("select * from order A where a.order_id = 2","ds_0","select * from order_0 A where a.order_id = 2");
assertSingleTargetWithoutParameter("select * from order a where A.order_id = 2","ds_0","select * from order_0 a where A.order_id = 2");
assertSingleTargetWithoutParameter(Collections.singletonList(newShardingValuePair("order",2)),"select * from order a","ds_0","select * from order_0 a");
assertSingleTargetWithoutParameter(Collections.singletonList(newShardingValuePair("order",2)),"select * from order A","ds_0","select * from order_0 A");
assertSingleTargetWithoutParameter(Collections.singletonList(newShardingValuePair("order",2)),"select * from order a","ds_0","select * from order_0 a");
}
@Test
publicvoidassertSelectWithTableNameAsAlias(){
assertSingleTargetWithoutParameter("select * from order where order.order_id = 10","ds_0","select * from order_0 where order_0.order_id = 10");
}
@Test
publicvoidassertSelectWithIn(){
assertMultipleTargetsWithParameters("select * from order where order_id in (?,?,?)",Arrays.<Object>asList(1,2,100),4,
Arrays.asList("ds_0","ds_1"),Arrays.asList("select * from order_0 where order_id in (?,?,?)","select * from order_1 where order_id in (?,?,?)"));
assertMultipleTargetsWithoutParameter(Collections.singletonList(newShardingValuePair("order",ShardingOperator.IN,1,2,100)),"select * from order",4,
Arrays.asList("ds_0","ds_1"),Arrays.asList("select * from order_0","select * from order_1"));
}
@Test
@Ignore
// TODO or
publicvoidassertSelectWithInAndIntersection(){
assertMultipleTargetsWithParameters("select * from order where order_id in (?,?) or order_id in (?,?)",Arrays.<Object>asList(1,2,100,2),4,
Arrays.asList("ds_0","ds_1"),
Arrays.asList("select * from order_1 where order_id in (?,?) or order_id in (?,?)","select * from order_1 where order_id in (?, ?) or order_id in (?, ?)"));
}
@Test
publicvoidassertSelectWithBetween(){
assertMultipleTargetsWithParameters("select * from order where order_id between ? and ?",Arrays.<Object>asList(1,100),4,
Arrays.asList("ds_0","ds_1"),Arrays.asList("select * from order_0 where order_id between ? and ?","select * from order_1 where order_id between ? and ?"));
assertMultipleTargetsWithoutParameter(Collections.singletonList(newShardingValuePair("order",ShardingOperator.BETWEEN,1,100)),"select * from order",4,
Arrays.asList("ds_0","ds_1"),Arrays.asList("select * from order_0","select * from order_1"));
assertMultipleTargetsWithParameters("select * from order where order_id between ? and ? or order_id between ? and ? ",Arrays.<Object>asList(1,50,29,100),4,
Arrays.asList("ds_0","ds_1"),
Arrays.asList("select * from order_0 where order_id between ? and ? or order_id between ? and ? ",
"select * from order_1 where order_id between ? and ? or order_id between ? and ? "));
}
@Test
publicvoidassertSingleSelectLimit(){
assertSingleTargetWithoutParameter("select * from order where order_id = 1 limit 5","ds_1","select * from order_1 where order_id = 1 limit 5");
assertSingleTargetWithoutParameter("select * from order where order_id = 1 limit 2,5","ds_1","select * from order_1 where order_id = 1 limit 2,5");
assertSingleTargetWithoutParameter("select * from order where order_id = 1 limit 5 offset 2","ds_1","select * from order_1 where order_id = 1 limit 5 offset 2");
assertSingleTargetWithParameters("select * from order where order_id = ? limit ?,?",parameters,"ds_0","select * from order_0 where order_id = ? limit ?,?");
assertSingleTargetWithParameters("select * from order where order_id = ? limit ? offset ?",parameters,"ds_0","select * from order_0 where order_id = ? limit ? offset ?");
assertSingleTargetWithParameters("select * from order where order_id = ? limit ?",parameters,"ds_0","select * from order_0 where order_id = ? limit ?");
assertSingleTargetWithParameters("select * from order where order_id = ? limit ?,10",parameters,"ds_0","select * from order_0 where order_id = ? limit ?,10");
assertSingleTargetWithParameters("select * from order where order_id = ? limit 10,?",parameters,"ds_0","select * from order_0 where order_id = ? limit 10,?");
assertMultipleTargetsWithParameters("select * from order where order_id in (?,?,?) limit 5",Arrays.<Object>asList(1,2,100),4,
Arrays.asList("ds_0","ds_1"),Arrays.asList("select * from order_0 where order_id in (?,?,?) limit 5","select * from order_1 where order_id in (?,?,?) limit 5"));
assertMultipleTargetsWithParameters("select * from order where order_id in (?,?,?) limit 2,5",Arrays.<Object>asList(1,2,100),4,
Arrays.asList("ds_0","ds_1"),Arrays.asList("select * from order_0 where order_id in (?,?,?) limit 0,7","select * from order_1 where order_id in (?,?,?) limit 0,7"));
assertMultipleTargetsWithParameters("select * from order where order_id in (?,?,?) limit 5 offset 2",Arrays.<Object>asList(1,2,100),4,
Arrays.asList("ds_0","ds_1"),Arrays.asList("select * from order_0 where order_id in (?,?,?) limit 7 offset 0","select * from order_1 where order_id in (?,?,?) limit 7 offset 0"));
assertMultipleTargetsWithParameters("select * from order where order_id in (?,?,?) limit ?",parameters,4,
Arrays.asList("ds_0","ds_1"),Arrays.asList("select * from order_0 where order_id in (?,?,?) limit ?","select * from order_1 where order_id in (?,?,?) limit ?"));
assertMultipleTargetsWithParameters("select * from order where order_id in (?,?,?) limit ?,?",parameters,4,
Arrays.asList("ds_0","ds_1"),Arrays.asList("select * from order_0 where order_id in (?,?,?) limit ?,?","select * from order_1 where order_id in (?,?,?) limit ?,?"));
assertMultipleTargetsWithParameters("select * from order where order_id in (?,?,?) limit ? offset ?",parameters,4,
Arrays.asList("ds_0","ds_1"),Arrays.asList("select * from order_0 where order_id in (?,?,?) limit ? offset ?","select * from order_1 where order_id in (?,?,?) limit ? offset ?"));
assertMultipleTargetsWithParameters("select * from order where order_id in (?,?,?) limit 2,?",parameters,4,
Arrays.asList("ds_0","ds_1"),Arrays.asList("select * from order_0 where order_id in (?,?,?) limit 0,?","select * from order_1 where order_id in (?,?,?) limit 0,?"));
assertMultipleTargetsWithParameters("select * from order where order_id in (?,?,?) limit ?,5",parameters,4,
Arrays.asList("ds_0","ds_1"),Arrays.asList("select * from order_0 where order_id in (?,?,?) limit ?,7","select * from order_1 where order_id in (?,?,?) limit ?,7"));
assertMultipleTargetsWithParameters("select * from order where order_id = ? or order_id = ? or order_id = ? limit 5",Arrays.<Object>asList(1,2,100),2,
Arrays.asList("ds_0","ds_1"),
Arrays.asList("select * from order_0 where order_id = ? or order_id = ? or order_id = ? limit 5","select * from order_1 where order_id = ? or order_id = ? or order_id = ? limit 5"));
assertMultipleTargetsWithParameters("select * from order where order_id = ? or order_id = ? or order_id = ? limit 2,5",Arrays.<Object>asList(1,2,100),2,
Arrays.asList("ds_0","ds_1"),Arrays.asList(
"select * from order_0 where order_id = ? or order_id = ? or order_id = ? limit 0, 7","select * from order_1 where order_id = ? or order_id = ? or order_id = ? limit 0, 7"));
assertMultipleTargetsWithParameters("select * from order where order_id = ? or order_id = ? or order_id = ? limit 5 offset 2",Arrays.<Object>asList(1,2,100),2,
Arrays.asList("ds_0","ds_1"),Arrays.asList(
"select * from order_0 where order_id = ? or order_id = ? or order_id = ? limit 0, 7","select * from order_1 where order_id = ? or order_id = ? or order_id = ? limit 0, 7"));
assertMultipleTargetsWithParameters("select * from order where order_id = ? or order_id = ? or order_id = ? limit ?",parameters,2,Arrays.asList("ds_0","ds_1"),
Arrays.asList("select * from order_0 where order_id = ? or order_id = ? or order_id = ? limit ?","select * from order_1 where order_id = ? or order_id = ? or order_id = ? limit ?"));
assertMultipleTargetsWithParameters("select * from order where order_id = ? or order_id = ? or order_id = ? limit ?,?",parameters,2,Arrays.asList("ds_0","ds_1"),Arrays.asList(
"select * from order_0 where order_id = ? or order_id = ? or order_id = ? limit ?, ?","select * from order_1 where order_id = ? or order_id = ? or order_id = ? limit ?, ?"));
assertMultipleTargetsWithParameters("select * from order where order_id = ? or order_id = ? or order_id = ? limit ? offset ?",parameters,2,Arrays.asList("ds_0","ds_1"),Arrays.asList(
"select * from order_0 where order_id = ? or order_id = ? or order_id = ? limit ?, ?","select * from order_1 where order_id = ? or order_id = ? or order_id = ? limit ?, ?"));
assertMultipleTargetsWithParameters("select * from order where order_id = ? or order_id = ? or order_id = ? limit 2,?",parameters,2,Arrays.asList("ds_0","ds_1"),Arrays.asList(
"select * from order_0 where order_id = ? or order_id = ? or order_id = ? limit 0, ?","select * from order_1 where order_id = ? or order_id = ? or order_id = ? limit 0, ?"));
assertMultipleTargetsWithParameters("select * from order where order_id = ? or order_id = ? or order_id = ? limit ?,5",parameters,2,Arrays.asList("ds_0","ds_1"),Arrays.asList(
"select * from order_0 where order_id = ? or order_id = ? or order_id = ? limit ?, 7","select * from order_1 where order_id = ? or order_id = ? or order_id = ? limit ?, 7"));