|
@@ -5,8 +5,11 @@ import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerIntercept
|
|
|
import com.baomidou.mybatisplus.jsqlparser.enums.ExpressionAppendMode;
|
|
|
import net.sf.jsqlparser.expression.Expression;
|
|
|
import net.sf.jsqlparser.expression.LongValue;
|
|
|
-import org.junit.jupiter.api.BeforeEach;
|
|
|
-import org.junit.jupiter.api.Test;
|
|
|
+import org.junit.jupiter.params.ParameterizedTest;
|
|
|
+import org.junit.jupiter.params.provider.EnumSource;
|
|
|
+
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
|
|
|
@@ -16,325 +19,466 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|
|
*/
|
|
|
class TenantLineInnerInterceptorTest {
|
|
|
|
|
|
- private final TenantLineInnerInterceptor interceptor = new TenantLineInnerInterceptor(new TenantLineHandler() {
|
|
|
- private boolean ignoreFirst;// 需要执行 getTenantId 前必须先执行 ignoreTable
|
|
|
+ private static final Map<String, String> FIRS_RESULT_TMAP = new HashMap<>();
|
|
|
|
|
|
- @Override
|
|
|
- public Expression getTenantId() {
|
|
|
- assertThat(ignoreFirst).isEqualTo(true);
|
|
|
- ignoreFirst = false;
|
|
|
- return new LongValue(1);
|
|
|
- }
|
|
|
+ private static final Map<String, String> LAST_RESULT_TMAP = new HashMap<>();
|
|
|
|
|
|
- @Override
|
|
|
- public boolean ignoreTable(String tableName) {
|
|
|
- ignoreFirst = true;
|
|
|
- return tableName.startsWith("with_as");
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- private final TenantLineInnerInterceptor interceptor2 = new TenantLineInnerInterceptor(new TenantLineHandler() {
|
|
|
- private boolean ignoreFirst;// 需要执行 getTenantId 前必须先执行 ignoreTable
|
|
|
-
|
|
|
- @Override
|
|
|
- public Expression getTenantId() {
|
|
|
- assertThat(ignoreFirst).isEqualTo(true);
|
|
|
- ignoreFirst = false;
|
|
|
- return new LongValue(1);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public boolean ignoreTable(String tableName) {
|
|
|
- ignoreFirst = true;
|
|
|
- return tableName.startsWith("with_as");
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- @BeforeEach
|
|
|
- void init() {
|
|
|
- interceptor2.setExpressionAppendMode(ExpressionAppendMode.FIRST);
|
|
|
+ static {
|
|
|
+ firstResultMap();
|
|
|
+ lastResultMap();
|
|
|
}
|
|
|
|
|
|
- @Test
|
|
|
- void insert() {
|
|
|
- // plain
|
|
|
- assertSql("insert into entity (id) values (?)",
|
|
|
+ static void firstResultMap() {
|
|
|
+ FIRS_RESULT_TMAP.put("insert into entity (id) values (?)",
|
|
|
"INSERT INTO entity (id, tenant_id) VALUES (?, 1)");
|
|
|
- assertSql("insert into entity (id,name) values (?,?)",
|
|
|
+ FIRS_RESULT_TMAP.put("insert into entity (id,name) values (?,?)",
|
|
|
"INSERT INTO entity (id, name, tenant_id) VALUES (?, ?, 1)");
|
|
|
// batch
|
|
|
- assertSql("insert into entity (id) values (?),(?)",
|
|
|
+ FIRS_RESULT_TMAP.put("insert into entity (id) values (?),(?)",
|
|
|
"INSERT INTO entity (id, tenant_id) VALUES (?, 1), (?, 1)");
|
|
|
- assertSql("insert into entity (id,name) values (?,?),(?,?)",
|
|
|
+ FIRS_RESULT_TMAP.put("insert into entity (id,name) values (?,?),(?,?)",
|
|
|
"INSERT INTO entity (id, name, tenant_id) VALUES (?, ?, 1), (?, ?, 1)");
|
|
|
// 无 insert的列
|
|
|
- assertSql("insert into entity value (?,?)",
|
|
|
+ FIRS_RESULT_TMAP.put("insert into entity value (?,?)",
|
|
|
"INSERT INTO entity VALUES (?, ?)");
|
|
|
// 自己加了insert的列
|
|
|
- assertSql("insert into entity (id,name,tenant_id) value (?,?,?)",
|
|
|
+ FIRS_RESULT_TMAP.put("insert into entity (id,name,tenant_id) value (?,?,?)",
|
|
|
"INSERT INTO entity (id, name, tenant_id) VALUES (?, ?, ?)");
|
|
|
// insert into select
|
|
|
- assertSql("insert into entity (id,name) select id,name from entity2",
|
|
|
+ FIRS_RESULT_TMAP.put("insert into entity (id,name) select id,name from entity2",
|
|
|
"INSERT INTO entity (id, name, tenant_id) SELECT id, name, tenant_id FROM entity2 WHERE tenant_id = 1");
|
|
|
-
|
|
|
- assertSql("insert into entity (id,name) select * from entity2 e2",
|
|
|
+ FIRS_RESULT_TMAP.put("insert into entity (id,name) select * from entity2 e2",
|
|
|
"INSERT INTO entity (id, name, tenant_id) SELECT * FROM entity2 e2 WHERE e2.tenant_id = 1");
|
|
|
-
|
|
|
- assertSql("insert into entity (id,name) select id,name from (select id,name from entity3 e3) t",
|
|
|
+ FIRS_RESULT_TMAP.put("insert into entity (id,name) select id,name from (select id,name from entity3 e3) t",
|
|
|
"INSERT INTO entity (id, name, tenant_id) SELECT id, name, tenant_id FROM (SELECT id, name, tenant_id FROM entity3 e3 WHERE e3.tenant_id = 1) t");
|
|
|
-
|
|
|
- assertSql("insert into entity (id,name) select * from (select id,name from entity3 e3) t",
|
|
|
+ FIRS_RESULT_TMAP.put("insert into entity (id,name) select * from (select id,name from entity3 e3) t",
|
|
|
"INSERT INTO entity (id, name, tenant_id) SELECT * FROM (SELECT id, name, tenant_id FROM entity3 e3 WHERE e3.tenant_id = 1) t");
|
|
|
-
|
|
|
- assertSql("insert into entity (id,name) select t.* from (select id,name from entity3 e3) t",
|
|
|
+ FIRS_RESULT_TMAP.put("insert into entity (id,name) select t.* from (select id,name from entity3 e3) t",
|
|
|
"INSERT INTO entity (id, name, tenant_id) SELECT t.* FROM (SELECT id, name, tenant_id FROM entity3 e3 WHERE e3.tenant_id = 1) t");
|
|
|
- }
|
|
|
- @Test
|
|
|
- void crud2() {
|
|
|
- assertSql2("select * from entity where id = ?",
|
|
|
- "SELECT * FROM entity WHERE tenant_id = 1 AND id = ?");
|
|
|
|
|
|
- assertSql2("select * from entity where id = ? or name = ?",
|
|
|
- "SELECT * FROM entity WHERE tenant_id = 1 AND (id = ? OR name = ?)");
|
|
|
+ FIRS_RESULT_TMAP.put("delete from entity where id = ?", "DELETE FROM entity WHERE tenant_id = 1 AND id = ?");
|
|
|
|
|
|
- assertSql2("SELECT * FROM entity WHERE (id = ? OR name = ?)",
|
|
|
- "SELECT * FROM entity WHERE tenant_id = 1 AND (id = ? OR name = ?)");
|
|
|
+ FIRS_RESULT_TMAP.put("update entity set name = ? where id = ?",
|
|
|
+ "UPDATE entity SET name = ? WHERE tenant_id = 1 AND id = ?");
|
|
|
|
|
|
- /* not */
|
|
|
- assertSql2("SELECT * FROM entity WHERE not (id = ? OR name = ?)",
|
|
|
- "SELECT * FROM entity WHERE tenant_id = 1 AND NOT (id = ? OR name = ?)");
|
|
|
+ // set subSelect
|
|
|
+ FIRS_RESULT_TMAP.put("UPDATE entity e SET e.cq = (SELECT e1.total FROM entity e1 WHERE e1.id = ?) WHERE e.id = ?",
|
|
|
+ "UPDATE entity e SET e.cq = (SELECT e1.total FROM entity e1 WHERE e1.tenant_id = 1 AND e1.id = ?) WHERE e.tenant_id = 1 AND e.id = ?");
|
|
|
|
|
|
- assertSql2("SELECT * FROM entity u WHERE not (u.id = ? OR u.name = ?)",
|
|
|
- "SELECT * FROM entity u WHERE u.tenant_id = 1 AND NOT (u.id = ? OR u.name = ?)");
|
|
|
+ FIRS_RESULT_TMAP.put("UPDATE sys_user SET (name, age) = ('秋秋', 18), address = 'test'",
|
|
|
+ "UPDATE sys_user SET (name, age) = ('秋秋', 18), address = 'test' WHERE tenant_id = 1");
|
|
|
|
|
|
- //leftjoin
|
|
|
- assertSql2("SELECT * FROM entity e " +
|
|
|
- "left join entity1 e1 on e1.id = e.id " +
|
|
|
- "WHERE e.id = ? OR e.name = ?",
|
|
|
- "SELECT * FROM entity e " +
|
|
|
- "LEFT JOIN entity1 e1 ON e1.tenant_id = 1 AND e1.id = e.id " +
|
|
|
- "WHERE e.tenant_id = 1 AND (e.id = ? OR e.name = ?)");
|
|
|
+ FIRS_RESULT_TMAP.put("UPDATE entity t1 INNER JOIN entity t2 ON t1.a= t2.a SET t1.b = t2.b, t1.c = t2.c",
|
|
|
+ "UPDATE entity t1 INNER JOIN entity t2 ON t1.a = t2.a SET t1.b = t2.b, t1.c = t2.c WHERE t1.tenant_id = 1");
|
|
|
+
|
|
|
+ // 单表
|
|
|
+ FIRS_RESULT_TMAP.put("select * from entity where id = ?", "SELECT * FROM entity WHERE tenant_id = 1 AND id = ?");
|
|
|
|
|
|
+ FIRS_RESULT_TMAP.put("select * from entity where id = ? or name = ?", "SELECT * FROM entity WHERE tenant_id = 1 AND (id = ? OR name = ?)");
|
|
|
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity WHERE (id = ? OR name = ?)", "SELECT * FROM entity WHERE tenant_id = 1 AND (id = ? OR name = ?)");
|
|
|
|
|
|
- assertSql2("SELECT * FROM entity e WHERE e.id IN (select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
- "SELECT * FROM entity e WHERE e.tenant_id = 1 AND e.id IN (SELECT e1.id FROM entity1 e1 WHERE e1.tenant_id = 1 AND e1.id = ?)");
|
|
|
+ /* not */
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity WHERE not (id = ? OR name = ?)", "SELECT * FROM entity WHERE tenant_id = 1 AND NOT (id = ? OR name = ?)");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity u WHERE not (u.id = ? OR u.name = ?)", "SELECT * FROM entity u WHERE u.tenant_id = 1 AND NOT (u.id = ? OR u.name = ?)");
|
|
|
+
|
|
|
+ /* in */
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e WHERE e.id IN (select e1.id from entity1 e1 where e1.id = ?)", "SELECT * FROM entity e WHERE e.tenant_id = 1 AND e.id IN (SELECT e1.id FROM entity1 e1 WHERE e1.tenant_id = 1 AND e1.id = ?)");
|
|
|
// 在最前
|
|
|
- assertSql2("SELECT * FROM entity e WHERE e.id IN " +
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e WHERE e.id IN " +
|
|
|
"(select e1.id from entity1 e1 where e1.id = ?) and e.id = ?",
|
|
|
- "SELECT * FROM entity e WHERE e.tenant_id = 1 AND e.id IN " +
|
|
|
- "(SELECT e1.id FROM entity1 e1 WHERE e1.tenant_id = 1 AND e1.id = ?) AND e.id = ?");
|
|
|
+ "SELECT * FROM entity e WHERE e.tenant_id = 1 AND e.id IN (SELECT e1.id FROM entity1 e1 WHERE e1.tenant_id = 1 AND e1.id = ?) AND e.id = ?");
|
|
|
// 在最后
|
|
|
- assertSql2("SELECT * FROM entity e WHERE e.id = ? and e.id IN " +
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e WHERE e.id = ? and e.id IN " +
|
|
|
"(select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
- "SELECT * FROM entity e WHERE e.tenant_id = 1 AND e.id = ? AND e.id IN " +
|
|
|
- "(SELECT e1.id FROM entity1 e1 WHERE e1.tenant_id = 1 AND e1.id = ?)");
|
|
|
+ "SELECT * FROM entity e WHERE e.tenant_id = 1 AND e.id = ? AND e.id IN (SELECT e1.id FROM entity1 e1 WHERE e1.tenant_id = 1 AND e1.id = ?)");
|
|
|
// 在中间
|
|
|
- assertSql2("SELECT * FROM entity e WHERE e.id = ? and e.id IN " +
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e WHERE e.id = ? and e.id IN " +
|
|
|
"(select e1.id from entity1 e1 where e1.id = ?) and e.id = ?",
|
|
|
- "SELECT * FROM entity e WHERE e.tenant_id = 1 AND e.id = ? AND e.id IN " +
|
|
|
- "(SELECT e1.id FROM entity1 e1 WHERE e1.tenant_id = 1 AND e1.id = ?) AND e.id = ?");
|
|
|
+ "SELECT * FROM entity e WHERE e.tenant_id = 1 AND e.id = ? AND e.id IN (SELECT e1.id FROM entity1 e1 WHERE e1.tenant_id = 1 AND e1.id = ?) AND e.id = ?");
|
|
|
|
|
|
- /* EXISTS */
|
|
|
- assertSql2("SELECT * FROM entity e WHERE EXISTS (select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e WHERE e.id = (select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
+ "SELECT * FROM entity e WHERE e.tenant_id = 1 AND e.id = (SELECT e1.id FROM entity1 e1 WHERE e1.tenant_id = 1 AND e1.id = ?)");
|
|
|
+
|
|
|
+ /* inner not = */
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e WHERE not (e.id = (select e1.id from entity1 e1 where e1.id = ?))",
|
|
|
+ "SELECT * FROM entity e WHERE e.tenant_id = 1 AND NOT (e.id = (SELECT e1.id FROM entity1 e1 WHERE e1.tenant_id = 1 AND e1.id = ?))");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e WHERE not (e.id = (select e1.id from entity1 e1 where e1.id = ?) and e.id = ?)",
|
|
|
+ "SELECT * FROM entity e WHERE e.tenant_id = 1 AND NOT (e.id = (SELECT e1.id FROM entity1 e1 WHERE e1.tenant_id = 1 AND e1.id = ?) AND e.id = ?)");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e WHERE EXISTS (select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
"SELECT * FROM entity e WHERE e.tenant_id = 1 AND EXISTS (SELECT e1.id FROM entity1 e1 WHERE e1.tenant_id = 1 AND e1.id = ?)");
|
|
|
|
|
|
- assertSql2("SELECT EXISTS (SELECT 1 FROM entity1 e WHERE e.id = ? LIMIT 1)","SELECT EXISTS (SELECT 1 FROM entity1 e WHERE e.tenant_id = 1 AND e.id = ? LIMIT 1)");
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT EXISTS (SELECT 1 FROM entity1 e WHERE e.id = ? LIMIT 1)", "SELECT EXISTS (SELECT 1 FROM entity1 e WHERE e.tenant_id = 1 AND e.id = ? LIMIT 1)");
|
|
|
|
|
|
- }
|
|
|
+ /* NOT EXISTS */
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e WHERE NOT EXISTS (select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
+ "SELECT * FROM entity e WHERE e.tenant_id = 1 AND NOT EXISTS (SELECT e1.id FROM entity1 e1 WHERE e1.tenant_id = 1 AND e1.id = ?)");
|
|
|
+
|
|
|
+ /* >= */
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e WHERE e.id >= (select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
+ "SELECT * FROM entity e WHERE e.tenant_id = 1 AND e.id >= (SELECT e1.id FROM entity1 e1 WHERE e1.tenant_id = 1 AND e1.id = ?)");
|
|
|
+
|
|
|
+ /* <= */
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e WHERE e.id <= (select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
+ "SELECT * FROM entity e WHERE e.tenant_id = 1 AND e.id <= (SELECT e1.id FROM entity1 e1 WHERE e1.tenant_id = 1 AND e1.id = ?)");
|
|
|
+
|
|
|
+ /* <> */
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e WHERE e.id <> (select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
+ "SELECT * FROM entity e WHERE e.tenant_id = 1 AND e.id <> (SELECT e1.id FROM entity1 e1 WHERE e1.tenant_id = 1 AND e1.id = ?)");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM (select e.id from entity e WHERE e.id = (select e1.id from entity1 e1 where e1.id = ?))",
|
|
|
+ "SELECT * FROM (SELECT e.id FROM entity e WHERE e.tenant_id = 1 AND e.id = (SELECT e1.id FROM entity1 e1 WHERE e1.tenant_id = 1 AND e1.id = ?))");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("select t1.col1,(select t2.col2 from t2 t2 where t1.col1=t2.col1) from t1 t1",
|
|
|
+ "SELECT t1.col1, (SELECT t2.col2 FROM t2 t2 WHERE t2.tenant_id = 1 AND t1.col1 = t2.col1) FROM t1 t1 WHERE t1.tenant_id = 1");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT e1.*, IF((SELECT e2.id FROM entity2 e2 WHERE e2.id = 1) = 1, e2.type, e1.type) AS type " +
|
|
|
+ "FROM entity e1 WHERE e1.id = ?",
|
|
|
+ "SELECT e1.*, IF((SELECT e2.id FROM entity2 e2 WHERE e2.tenant_id = 1 AND e2.id = 1) = 1, e2.type, e1.type) AS type FROM entity e1 WHERE e1.tenant_id = 1 AND e1.id = ?");
|
|
|
+
|
|
|
+ // left join
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
+ "left join entity1 e1 on e1.id = e.id " +
|
|
|
+ "WHERE e.id = ? OR e.name = ?",
|
|
|
+ "SELECT * FROM entity e LEFT JOIN entity1 e1 ON e1.tenant_id = 1 AND e1.id = e.id WHERE e.tenant_id = 1 AND (e.id = ? OR e.name = ?)");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
+ "left join entity1 e1 on e1.id = e.id " +
|
|
|
+ "WHERE (e.id = ? OR e.name = ?)",
|
|
|
+ "SELECT * FROM entity e LEFT JOIN entity1 e1 ON e1.tenant_id = 1 AND e1.id = e.id WHERE e.tenant_id = 1 AND (e.id = ? OR e.name = ?)");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
+ "left join entity1 e1 on e1.id = e.id " +
|
|
|
+ "left join entity2 e2 on e1.id = e2.id",
|
|
|
+ "SELECT * FROM entity e LEFT JOIN entity1 e1 ON e1.tenant_id = 1 AND e1.id = e.id LEFT JOIN entity2 e2 ON e2.tenant_id = 1 AND e1.id = e2.id WHERE e.tenant_id = 1");
|
|
|
+
|
|
|
+ // right join
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
+ "right join entity1 e1 on e1.id = e.id",
|
|
|
+ "SELECT * FROM entity e RIGHT JOIN entity1 e1 ON e.tenant_id = 1 AND e1.id = e.id WHERE e1.tenant_id = 1");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM with_as_1 e " +
|
|
|
+ "right join entity1 e1 on e1.id = e.id",
|
|
|
+ "SELECT * FROM with_as_1 e RIGHT JOIN entity1 e1 ON e1.id = e.id WHERE e1.tenant_id = 1");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
+ "right join entity1 e1 on e1.id = e.id " +
|
|
|
+ "WHERE e.id = ? OR e.name = ?",
|
|
|
+ "SELECT * FROM entity e RIGHT JOIN entity1 e1 ON e.tenant_id = 1 AND e1.id = e.id WHERE e1.tenant_id = 1 AND (e.id = ? OR e.name = ?)");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
+ "right join entity1 e1 on e1.id = e.id " +
|
|
|
+ "right join entity2 e2 on e1.id = e2.id ",
|
|
|
+ "SELECT * FROM entity e RIGHT JOIN entity1 e1 ON e.tenant_id = 1 AND e1.id = e.id RIGHT JOIN entity2 e2 ON e1.tenant_id = 1 AND e1.id = e2.id WHERE e2.tenant_id = 1");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
+ "right join entity1 e1 on e1.id = e.id " +
|
|
|
+ "left join entity2 e2 on e1.id = e2.id",
|
|
|
+ "SELECT * FROM entity e RIGHT JOIN entity1 e1 ON e.tenant_id = 1 AND e1.id = e.id LEFT JOIN entity2 e2 ON e2.tenant_id = 1 AND e1.id = e2.id WHERE e1.tenant_id = 1");
|
|
|
|
|
|
- @Test
|
|
|
- void delete() {
|
|
|
- assertSql("delete from entity where id = ?",
|
|
|
- "DELETE FROM entity WHERE id = ? AND tenant_id = 1");
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
+ "left join entity1 e1 on e1.id = e.id " +
|
|
|
+ "right join entity2 e2 on e1.id = e2.id",
|
|
|
+ "SELECT * FROM entity e LEFT JOIN entity1 e1 ON e1.tenant_id = 1 AND e1.id = e.id RIGHT JOIN entity2 e2 ON e.tenant_id = 1 AND e1.id = e2.id WHERE e2.tenant_id = 1");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
+ "left join entity1 e1 on e1.id = e.id " +
|
|
|
+ "inner join entity2 e2 on e1.id = e2.id",
|
|
|
+ "SELECT * FROM entity e LEFT JOIN entity1 e1 ON e1.tenant_id = 1 AND e1.id = e.id INNER JOIN entity2 e2 ON e.tenant_id = 1 AND e2.tenant_id = 1 AND e1.id = e2.id");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("select * from (select * from entity e) e1 " +
|
|
|
+ "left join entity2 e2 on e1.id = e2.id",
|
|
|
+ "SELECT * FROM (SELECT * FROM entity e WHERE e.tenant_id = 1) e1 LEFT JOIN entity2 e2 ON e2.tenant_id = 1 AND e1.id = e2.id");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("select * from entity1 e1 " +
|
|
|
+ "left join (select * from entity2 e2) e22 " +
|
|
|
+ "on e1.id = e22.id",
|
|
|
+ "SELECT * FROM entity1 e1 " +
|
|
|
+ "LEFT JOIN (SELECT * FROM entity2 e2 WHERE e2.tenant_id = 1) e22 " +
|
|
|
+ "ON e1.id = e22.id " +
|
|
|
+ "WHERE e1.tenant_id = 1");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("select * FROM " +
|
|
|
+ "(entity1 e1 right JOIN entity2 e2 ON e1.id = e2.id)",
|
|
|
+ "SELECT * FROM (entity1 e1 RIGHT JOIN entity2 e2 ON e1.tenant_id = 1 AND e1.id = e2.id) WHERE e2.tenant_id = 1");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("select * FROM " +
|
|
|
+ "(entity1 e1 LEFT JOIN entity2 e2 ON e1.id = e2.id)",
|
|
|
+ "SELECT * FROM (entity1 e1 LEFT JOIN entity2 e2 ON e2.tenant_id = 1 AND e1.id = e2.id) WHERE e1.tenant_id = 1");
|
|
|
+
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("select * FROM " +
|
|
|
+ "(entity1 e1 LEFT JOIN entity2 e2 ON e1.id = e2.id) " +
|
|
|
+ "right join entity3 e3 on e1.id = e3.id",
|
|
|
+ "SELECT * FROM (entity1 e1 LEFT JOIN entity2 e2 ON e2.tenant_id = 1 AND e1.id = e2.id) RIGHT JOIN entity3 e3 ON e1.tenant_id = 1 AND e1.id = e3.id WHERE e3.tenant_id = 1");
|
|
|
+
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("select * FROM entity e " +
|
|
|
+ "LEFT JOIN (entity1 e1 right join entity2 e2 ON e1.id = e2.id) " +
|
|
|
+ "on e.id = e2.id",
|
|
|
+ "SELECT * FROM entity e LEFT JOIN (entity1 e1 RIGHT JOIN entity2 e2 ON e1.tenant_id = 1 AND e1.id = e2.id) ON e2.tenant_id = 1 AND e.id = e2.id WHERE e.tenant_id = 1");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("select * FROM entity e " +
|
|
|
+ "LEFT JOIN (entity1 e1 left join entity2 e2 ON e1.id = e2.id) " +
|
|
|
+ "on e.id = e2.id",
|
|
|
+ "SELECT * FROM entity e LEFT JOIN (entity1 e1 LEFT JOIN entity2 e2 ON e2.tenant_id = 1 AND e1.id = e2.id) ON e1.tenant_id = 1 AND e.id = e2.id WHERE e.tenant_id = 1");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("select * FROM entity e " +
|
|
|
+ "RIGHT JOIN (entity1 e1 left join entity2 e2 ON e1.id = e2.id) " +
|
|
|
+ "on e.id = e2.id",
|
|
|
+ "SELECT * FROM entity e RIGHT JOIN (entity1 e1 LEFT JOIN entity2 e2 ON e2.tenant_id = 1 AND e1.id = e2.id) ON e.tenant_id = 1 AND e.id = e2.id WHERE e1.tenant_id = 1");
|
|
|
+
|
|
|
+ // 多个 on 尾缀的
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
+ "LEFT JOIN entity1 e1 " +
|
|
|
+ "LEFT JOIN entity2 e2 ON e2.id = e1.id " +
|
|
|
+ "ON e1.id = e.id " +
|
|
|
+ "WHERE (e.id = ? OR e.NAME = ?)",
|
|
|
+ "SELECT * FROM entity e LEFT JOIN entity1 e1 LEFT JOIN entity2 e2 ON e2.tenant_id = 1 AND e2.id = e1.id ON e1.tenant_id = 1 AND e1.id = e.id WHERE e.tenant_id = 1 AND (e.id = ? OR e.NAME = ?)");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
+ "LEFT JOIN entity1 e1 " +
|
|
|
+ "LEFT JOIN with_as_A e2 ON e2.id = e1.id " +
|
|
|
+ "ON e1.id = e.id " +
|
|
|
+ "WHERE (e.id = ? OR e.NAME = ?)",
|
|
|
+ "SELECT * FROM entity e LEFT JOIN entity1 e1 LEFT JOIN with_as_A e2 ON e2.id = e1.id ON e1.tenant_id = 1 AND e1.id = e.id WHERE e.tenant_id = 1 AND (e.id = ? OR e.NAME = ?)");
|
|
|
+
|
|
|
+ // inner join
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
+ "inner join entity1 e1 on e1.id = e.id " +
|
|
|
+ "WHERE e.id = ? OR e.name = ?",
|
|
|
+ "SELECT * FROM entity e INNER JOIN entity1 e1 ON e.tenant_id = 1 AND e1.tenant_id = 1 AND e1.id = e.id WHERE e.id = ? OR e.name = ?");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
+ "inner join entity1 e1 on e1.id = e.id " +
|
|
|
+ "WHERE (e.id = ? OR e.name = ?)",
|
|
|
+ "SELECT * FROM entity e INNER JOIN entity1 e1 ON e.tenant_id = 1 AND e1.tenant_id = 1 AND e1.id = e.id WHERE (e.id = ? OR e.name = ?)");
|
|
|
+
|
|
|
+ // ignore table
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
+ "inner join with_as_1 w1 on w1.id = e.id " +
|
|
|
+ "WHERE (e.id = ? OR e.name = ?)",
|
|
|
+ "SELECT * FROM entity e INNER JOIN with_as_1 w1 ON e.tenant_id = 1 AND w1.id = e.id WHERE (e.id = ? OR e.name = ?)");
|
|
|
+
|
|
|
+ // 隐式内连接
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e,entity1 e1 " +
|
|
|
+ "WHERE e.id = e1.id",
|
|
|
+ "SELECT * FROM entity e, entity1 e1 WHERE e.tenant_id = 1 AND e1.tenant_id = 1 AND e.id = e1.id");
|
|
|
+
|
|
|
+ // 隐式内连接
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity a, with_as_entity1 b " +
|
|
|
+ "WHERE a.id = b.id",
|
|
|
+ "SELECT * FROM entity a, with_as_entity1 b WHERE a.tenant_id = 1 AND a.id = b.id");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM with_as_entity a, with_as_entity1 b " +
|
|
|
+ "WHERE a.id = b.id",
|
|
|
+ "SELECT * FROM with_as_entity a, with_as_entity1 b WHERE a.id = b.id");
|
|
|
+
|
|
|
+ // SubJoin with 隐式内连接
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM (entity e,entity1 e1) " +
|
|
|
+ "WHERE e.id = e1.id",
|
|
|
+ "SELECT * FROM (entity e, entity1 e1) WHERE e.tenant_id = 1 AND e1.tenant_id = 1 AND e.id = e1.id");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM ((entity e,entity1 e1),entity2 e2) " +
|
|
|
+ "WHERE e.id = e1.id and e.id = e2.id",
|
|
|
+ "SELECT * FROM ((entity e, entity1 e1), entity2 e2) WHERE e.tenant_id = 1 AND e1.tenant_id = 1 AND e2.tenant_id = 1 AND e.id = e1.id AND e.id = e2.id");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM (entity e,(entity1 e1,entity2 e2)) " +
|
|
|
+ "WHERE e.id = e1.id and e.id = e2.id",
|
|
|
+ "SELECT * FROM (entity e, (entity1 e1, entity2 e2)) WHERE e.tenant_id = 1 AND e1.tenant_id = 1 AND e2.tenant_id = 1 AND e.id = e1.id AND e.id = e2.id");
|
|
|
+
|
|
|
+ // 沙雕的括号写法
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM (((entity e,entity1 e1))) " +
|
|
|
+ "WHERE e.id = e1.id",
|
|
|
+ "SELECT * FROM (((entity e, entity1 e1))) WHERE e.tenant_id = 1 AND e1.tenant_id = 1 AND e.id = e1.id");
|
|
|
+
|
|
|
+ // join
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e join entity1 e1 on e1.id = e.id WHERE e.id = ? OR e.name = ?",
|
|
|
+ "SELECT * FROM entity e JOIN entity1 e1 ON e1.tenant_id = 1 AND e1.id = e.id WHERE e.tenant_id = 1 AND (e.id = ? OR e.name = ?)");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("SELECT * FROM entity e join entity1 e1 on e1.id = e.id WHERE (e.id = ? OR e.name = ?)",
|
|
|
+ "SELECT * FROM entity e JOIN entity1 e1 ON e1.tenant_id = 1 AND e1.id = e.id WHERE e.tenant_id = 1 AND (e.id = ? OR e.name = ?)");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("with with_as_A as (select * from entity) select * from with_as_A",
|
|
|
+ "WITH with_as_A AS (SELECT * FROM entity WHERE tenant_id = 1) SELECT * FROM with_as_A");
|
|
|
+
|
|
|
+ FIRS_RESULT_TMAP.put("INSERT INTO entity (name,age) VALUES ('秋秋',18),('秋秋','22') ON DUPLICATE KEY UPDATE age=18",
|
|
|
+ "INSERT INTO entity (name, age, tenant_id) VALUES ('秋秋', 18, 1), ('秋秋', '22', 1) ON DUPLICATE KEY UPDATE age = 18, tenant_id = 1");
|
|
|
}
|
|
|
|
|
|
- @Test
|
|
|
- void update() {
|
|
|
- assertSql("update entity set name = ? where id = ?",
|
|
|
+ static void lastResultMap() {
|
|
|
+ LAST_RESULT_TMAP.put("insert into entity (id) values (?)",
|
|
|
+ "INSERT INTO entity (id, tenant_id) VALUES (?, 1)");
|
|
|
+ LAST_RESULT_TMAP.put("insert into entity (id,name) values (?,?)",
|
|
|
+ "INSERT INTO entity (id, name, tenant_id) VALUES (?, ?, 1)");
|
|
|
+ // batch
|
|
|
+ LAST_RESULT_TMAP.put("insert into entity (id) values (?),(?)",
|
|
|
+ "INSERT INTO entity (id, tenant_id) VALUES (?, 1), (?, 1)");
|
|
|
+ LAST_RESULT_TMAP.put("insert into entity (id,name) values (?,?),(?,?)",
|
|
|
+ "INSERT INTO entity (id, name, tenant_id) VALUES (?, ?, 1), (?, ?, 1)");
|
|
|
+ // 无 insert的列
|
|
|
+ LAST_RESULT_TMAP.put("insert into entity value (?,?)",
|
|
|
+ "INSERT INTO entity VALUES (?, ?)");
|
|
|
+ // 自己加了insert的列
|
|
|
+ LAST_RESULT_TMAP.put("insert into entity (id,name,tenant_id) value (?,?,?)",
|
|
|
+ "INSERT INTO entity (id, name, tenant_id) VALUES (?, ?, ?)");
|
|
|
+ // insert into select
|
|
|
+ LAST_RESULT_TMAP.put("insert into entity (id,name) select id,name from entity2",
|
|
|
+ "INSERT INTO entity (id, name, tenant_id) SELECT id, name, tenant_id FROM entity2 WHERE tenant_id = 1");
|
|
|
+ LAST_RESULT_TMAP.put("insert into entity (id,name) select * from entity2 e2",
|
|
|
+ "INSERT INTO entity (id, name, tenant_id) SELECT * FROM entity2 e2 WHERE e2.tenant_id = 1");
|
|
|
+ LAST_RESULT_TMAP.put("insert into entity (id,name) select id,name from (select id,name from entity3 e3) t",
|
|
|
+ "INSERT INTO entity (id, name, tenant_id) SELECT id, name, tenant_id FROM (SELECT id, name, tenant_id FROM entity3 e3 WHERE e3.tenant_id = 1) t");
|
|
|
+ LAST_RESULT_TMAP.put("insert into entity (id,name) select * from (select id,name from entity3 e3) t",
|
|
|
+ "INSERT INTO entity (id, name, tenant_id) SELECT * FROM (SELECT id, name, tenant_id FROM entity3 e3 WHERE e3.tenant_id = 1) t");
|
|
|
+ LAST_RESULT_TMAP.put("insert into entity (id,name) select t.* from (select id,name from entity3 e3) t",
|
|
|
+ "INSERT INTO entity (id, name, tenant_id) SELECT t.* FROM (SELECT id, name, tenant_id FROM entity3 e3 WHERE e3.tenant_id = 1) t");
|
|
|
+
|
|
|
+ LAST_RESULT_TMAP.put("delete from entity where id = ?", "DELETE FROM entity WHERE id = ? AND tenant_id = 1");
|
|
|
+
|
|
|
+ LAST_RESULT_TMAP.put("update entity set name = ? where id = ?",
|
|
|
"UPDATE entity SET name = ? WHERE id = ? AND tenant_id = 1");
|
|
|
|
|
|
// set subSelect
|
|
|
- assertSql("UPDATE entity e SET e.cq = (SELECT e1.total FROM entity e1 WHERE e1.id = ?) WHERE e.id = ?",
|
|
|
+ LAST_RESULT_TMAP.put("UPDATE entity e SET e.cq = (SELECT e1.total FROM entity e1 WHERE e1.id = ?) WHERE e.id = ?",
|
|
|
"UPDATE entity e SET e.cq = (SELECT e1.total FROM entity e1 WHERE e1.id = ? AND e1.tenant_id = 1) " +
|
|
|
"WHERE e.id = ? AND e.tenant_id = 1");
|
|
|
|
|
|
- assertSql("UPDATE sys_user SET (name, age) = ('秋秋', 18), address = 'test'",
|
|
|
+ LAST_RESULT_TMAP.put("UPDATE sys_user SET (name, age) = ('秋秋', 18), address = 'test'",
|
|
|
"UPDATE sys_user SET (name, age) = ('秋秋', 18), address = 'test' WHERE tenant_id = 1");
|
|
|
|
|
|
- assertSql("UPDATE entity t1 INNER JOIN entity t2 ON t1.a= t2.a SET t1.b = t2.b, t1.c = t2.c",
|
|
|
+ LAST_RESULT_TMAP.put("UPDATE entity t1 INNER JOIN entity t2 ON t1.a= t2.a SET t1.b = t2.b, t1.c = t2.c",
|
|
|
"UPDATE entity t1 INNER JOIN entity t2 ON t1.a = t2.a SET t1.b = t2.b, t1.c = t2.c WHERE t1.tenant_id = 1");
|
|
|
- }
|
|
|
|
|
|
- @Test
|
|
|
- void selectSingle() {
|
|
|
// 单表
|
|
|
- assertSql("select * from entity where id = ?",
|
|
|
- "SELECT * FROM entity WHERE id = ? AND tenant_id = 1");
|
|
|
+ LAST_RESULT_TMAP.put("select * from entity where id = ?", "SELECT * FROM entity WHERE id = ? AND tenant_id = 1");
|
|
|
|
|
|
- assertSql("select * from entity where id = ? or name = ?",
|
|
|
- "SELECT * FROM entity WHERE (id = ? OR name = ?) AND tenant_id = 1");
|
|
|
+ LAST_RESULT_TMAP.put("select * from entity where id = ? or name = ?", "SELECT * FROM entity WHERE (id = ? OR name = ?) AND tenant_id = 1");
|
|
|
|
|
|
- assertSql("SELECT * FROM entity WHERE (id = ? OR name = ?)",
|
|
|
- "SELECT * FROM entity WHERE (id = ? OR name = ?) AND tenant_id = 1");
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity WHERE (id = ? OR name = ?)", "SELECT * FROM entity WHERE (id = ? OR name = ?) AND tenant_id = 1");
|
|
|
|
|
|
/* not */
|
|
|
- assertSql("SELECT * FROM entity WHERE not (id = ? OR name = ?)",
|
|
|
- "SELECT * FROM entity WHERE NOT (id = ? OR name = ?) AND tenant_id = 1");
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity WHERE not (id = ? OR name = ?)", "SELECT * FROM entity WHERE NOT (id = ? OR name = ?) AND tenant_id = 1");
|
|
|
|
|
|
- assertSql("SELECT * FROM entity u WHERE not (u.id = ? OR u.name = ?)",
|
|
|
- "SELECT * FROM entity u WHERE NOT (u.id = ? OR u.name = ?) AND u.tenant_id = 1");
|
|
|
- }
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity u WHERE not (u.id = ? OR u.name = ?)", "SELECT * FROM entity u WHERE NOT (u.id = ? OR u.name = ?) AND u.tenant_id = 1");
|
|
|
|
|
|
- @Test
|
|
|
- void selectSubSelectIn() {
|
|
|
/* in */
|
|
|
- assertSql("SELECT * FROM entity e WHERE e.id IN (select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e WHERE e.id IN (select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
"SELECT * FROM entity e WHERE e.id IN (SELECT e1.id FROM entity1 e1 WHERE e1.id = ? AND e1.tenant_id = 1) AND e.tenant_id = 1");
|
|
|
// 在最前
|
|
|
- assertSql("SELECT * FROM entity e WHERE e.id IN " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e WHERE e.id IN " +
|
|
|
"(select e1.id from entity1 e1 where e1.id = ?) and e.id = ?",
|
|
|
"SELECT * FROM entity e WHERE e.id IN " +
|
|
|
"(SELECT e1.id FROM entity1 e1 WHERE e1.id = ? AND e1.tenant_id = 1) AND e.id = ? AND e.tenant_id = 1");
|
|
|
// 在最后
|
|
|
- assertSql("SELECT * FROM entity e WHERE e.id = ? and e.id IN " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e WHERE e.id = ? and e.id IN " +
|
|
|
"(select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
"SELECT * FROM entity e WHERE e.id = ? AND e.id IN " +
|
|
|
"(SELECT e1.id FROM entity1 e1 WHERE e1.id = ? AND e1.tenant_id = 1) AND e.tenant_id = 1");
|
|
|
// 在中间
|
|
|
- assertSql("SELECT * FROM entity e WHERE e.id = ? and e.id IN " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e WHERE e.id = ? and e.id IN " +
|
|
|
"(select e1.id from entity1 e1 where e1.id = ?) and e.id = ?",
|
|
|
"SELECT * FROM entity e WHERE e.id = ? AND e.id IN " +
|
|
|
"(SELECT e1.id FROM entity1 e1 WHERE e1.id = ? AND e1.tenant_id = 1) AND e.id = ? AND e.tenant_id = 1");
|
|
|
- }
|
|
|
|
|
|
- @Test
|
|
|
- void selectSubSelectEq() {
|
|
|
- /* = */
|
|
|
- assertSql("SELECT * FROM entity e WHERE e.id = (select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e WHERE e.id = (select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
"SELECT * FROM entity e WHERE e.id = (SELECT e1.id FROM entity1 e1 WHERE e1.id = ? AND e1.tenant_id = 1) AND e.tenant_id = 1");
|
|
|
- }
|
|
|
|
|
|
- @Test
|
|
|
- void selectSubSelectInnerNotEq() {
|
|
|
/* inner not = */
|
|
|
- assertSql("SELECT * FROM entity e WHERE not (e.id = (select e1.id from entity1 e1 where e1.id = ?))",
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e WHERE not (e.id = (select e1.id from entity1 e1 where e1.id = ?))",
|
|
|
"SELECT * FROM entity e WHERE NOT (e.id = (SELECT e1.id FROM entity1 e1 WHERE e1.id = ? AND e1.tenant_id = 1)) AND e.tenant_id = 1");
|
|
|
|
|
|
- assertSql("SELECT * FROM entity e WHERE not (e.id = (select e1.id from entity1 e1 where e1.id = ?) and e.id = ?)",
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e WHERE not (e.id = (select e1.id from entity1 e1 where e1.id = ?) and e.id = ?)",
|
|
|
"SELECT * FROM entity e WHERE NOT (e.id = (SELECT e1.id FROM entity1 e1 WHERE e1.id = ? AND e1.tenant_id = 1) AND e.id = ?) AND e.tenant_id = 1");
|
|
|
- }
|
|
|
|
|
|
- @Test
|
|
|
- void selectSubSelectExists() {
|
|
|
- /* EXISTS */
|
|
|
- assertSql("SELECT * FROM entity e WHERE EXISTS (select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e WHERE EXISTS (select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
"SELECT * FROM entity e WHERE EXISTS (SELECT e1.id FROM entity1 e1 WHERE e1.id = ? AND e1.tenant_id = 1) AND e.tenant_id = 1");
|
|
|
|
|
|
- assertSql("SELECT EXISTS (SELECT 1 FROM entity1 e WHERE e.id = ? LIMIT 1)","SELECT EXISTS (SELECT 1 FROM entity1 e WHERE e.id = ? AND e.tenant_id = 1 LIMIT 1)");
|
|
|
+ LAST_RESULT_TMAP.put("SELECT EXISTS (SELECT 1 FROM entity1 e WHERE e.id = ? LIMIT 1)", "SELECT EXISTS (SELECT 1 FROM entity1 e WHERE e.id = ? AND e.tenant_id = 1 LIMIT 1)");
|
|
|
|
|
|
/* NOT EXISTS */
|
|
|
- assertSql("SELECT * FROM entity e WHERE NOT EXISTS (select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e WHERE NOT EXISTS (select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
"SELECT * FROM entity e WHERE NOT EXISTS (SELECT e1.id FROM entity1 e1 WHERE e1.id = ? AND e1.tenant_id = 1) AND e.tenant_id = 1");
|
|
|
- }
|
|
|
|
|
|
- @Test
|
|
|
- void selectWhereSubSelect() {
|
|
|
/* >= */
|
|
|
- assertSql("SELECT * FROM entity e WHERE e.id >= (select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e WHERE e.id >= (select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
"SELECT * FROM entity e WHERE e.id >= (SELECT e1.id FROM entity1 e1 WHERE e1.id = ? AND e1.tenant_id = 1) AND e.tenant_id = 1");
|
|
|
|
|
|
|
|
|
/* <= */
|
|
|
- assertSql("SELECT * FROM entity e WHERE e.id <= (select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e WHERE e.id <= (select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
"SELECT * FROM entity e WHERE e.id <= (SELECT e1.id FROM entity1 e1 WHERE e1.id = ? AND e1.tenant_id = 1) AND e.tenant_id = 1");
|
|
|
|
|
|
-
|
|
|
/* <> */
|
|
|
- assertSql("SELECT * FROM entity e WHERE e.id <> (select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e WHERE e.id <> (select e1.id from entity1 e1 where e1.id = ?)",
|
|
|
"SELECT * FROM entity e WHERE e.id <> (SELECT e1.id FROM entity1 e1 WHERE e1.id = ? AND e1.tenant_id = 1) AND e.tenant_id = 1");
|
|
|
- }
|
|
|
|
|
|
- @Test
|
|
|
- void selectFromSelect() {
|
|
|
- assertSql("SELECT * FROM (select e.id from entity e WHERE e.id = (select e1.id from entity1 e1 where e1.id = ?))",
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM (select e.id from entity e WHERE e.id = (select e1.id from entity1 e1 where e1.id = ?))",
|
|
|
"SELECT * FROM (SELECT e.id FROM entity e WHERE e.id = (SELECT e1.id FROM entity1 e1 WHERE e1.id = ? AND e1.tenant_id = 1) AND e.tenant_id = 1)");
|
|
|
- }
|
|
|
|
|
|
- @Test
|
|
|
- void selectBodySubSelect() {
|
|
|
- assertSql("select t1.col1,(select t2.col2 from t2 t2 where t1.col1=t2.col1) from t1 t1",
|
|
|
+ LAST_RESULT_TMAP.put("select t1.col1,(select t2.col2 from t2 t2 where t1.col1=t2.col1) from t1 t1",
|
|
|
"SELECT t1.col1, (SELECT t2.col2 FROM t2 t2 WHERE t1.col1 = t2.col1 AND t2.tenant_id = 1) FROM t1 t1 WHERE t1.tenant_id = 1");
|
|
|
- }
|
|
|
|
|
|
- @Test
|
|
|
- void selectBodyFuncSubSelect() {
|
|
|
- assertSql("SELECT e1.*, IF((SELECT e2.id FROM entity2 e2 WHERE e2.id = 1) = 1, e2.type, e1.type) AS type " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT e1.*, IF((SELECT e2.id FROM entity2 e2 WHERE e2.id = 1) = 1, e2.type, e1.type) AS type " +
|
|
|
"FROM entity e1 WHERE e1.id = ?",
|
|
|
"SELECT e1.*, IF((SELECT e2.id FROM entity2 e2 WHERE e2.id = 1 AND e2.tenant_id = 1) = 1, e2.type, e1.type) AS type " +
|
|
|
"FROM entity e1 WHERE e1.id = ? AND e1.tenant_id = 1");
|
|
|
- }
|
|
|
|
|
|
- @Test
|
|
|
- void selectLeftJoin() {
|
|
|
// left join
|
|
|
- assertSql("SELECT * FROM entity e " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
"left join entity1 e1 on e1.id = e.id " +
|
|
|
"WHERE e.id = ? OR e.name = ?",
|
|
|
"SELECT * FROM entity e " +
|
|
|
"LEFT JOIN entity1 e1 ON e1.id = e.id AND e1.tenant_id = 1 " +
|
|
|
"WHERE (e.id = ? OR e.name = ?) AND e.tenant_id = 1");
|
|
|
|
|
|
- assertSql("SELECT * FROM entity e " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
"left join entity1 e1 on e1.id = e.id " +
|
|
|
"WHERE (e.id = ? OR e.name = ?)",
|
|
|
"SELECT * FROM entity e " +
|
|
|
"LEFT JOIN entity1 e1 ON e1.id = e.id AND e1.tenant_id = 1 " +
|
|
|
"WHERE (e.id = ? OR e.name = ?) AND e.tenant_id = 1");
|
|
|
|
|
|
- assertSql("SELECT * FROM entity e " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
"left join entity1 e1 on e1.id = e.id " +
|
|
|
"left join entity2 e2 on e1.id = e2.id",
|
|
|
"SELECT * FROM entity e " +
|
|
|
"LEFT JOIN entity1 e1 ON e1.id = e.id AND e1.tenant_id = 1 " +
|
|
|
"LEFT JOIN entity2 e2 ON e1.id = e2.id AND e2.tenant_id = 1 " +
|
|
|
"WHERE e.tenant_id = 1");
|
|
|
- }
|
|
|
|
|
|
- @Test
|
|
|
- void selectRightJoin() {
|
|
|
// right join
|
|
|
- assertSql("SELECT * FROM entity e " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
"right join entity1 e1 on e1.id = e.id",
|
|
|
"SELECT * FROM entity e " +
|
|
|
"RIGHT JOIN entity1 e1 ON e1.id = e.id AND e.tenant_id = 1 " +
|
|
|
"WHERE e1.tenant_id = 1");
|
|
|
|
|
|
- assertSql("SELECT * FROM with_as_1 e " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM with_as_1 e " +
|
|
|
"right join entity1 e1 on e1.id = e.id",
|
|
|
"SELECT * FROM with_as_1 e " +
|
|
|
"RIGHT JOIN entity1 e1 ON e1.id = e.id " +
|
|
|
"WHERE e1.tenant_id = 1");
|
|
|
|
|
|
- assertSql("SELECT * FROM entity e " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
"right join entity1 e1 on e1.id = e.id " +
|
|
|
"WHERE e.id = ? OR e.name = ?",
|
|
|
"SELECT * FROM entity e " +
|
|
|
"RIGHT JOIN entity1 e1 ON e1.id = e.id AND e.tenant_id = 1 " +
|
|
|
"WHERE (e.id = ? OR e.name = ?) AND e1.tenant_id = 1");
|
|
|
|
|
|
- assertSql("SELECT * FROM entity e " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
"right join entity1 e1 on e1.id = e.id " +
|
|
|
"right join entity2 e2 on e1.id = e2.id ",
|
|
|
"SELECT * FROM entity e " +
|
|
|
"RIGHT JOIN entity1 e1 ON e1.id = e.id AND e.tenant_id = 1 " +
|
|
|
"RIGHT JOIN entity2 e2 ON e1.id = e2.id AND e1.tenant_id = 1 " +
|
|
|
"WHERE e2.tenant_id = 1");
|
|
|
- }
|
|
|
|
|
|
- @Test
|
|
|
- void selectMixJoin() {
|
|
|
- assertSql("SELECT * FROM entity e " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
"right join entity1 e1 on e1.id = e.id " +
|
|
|
"left join entity2 e2 on e1.id = e2.id",
|
|
|
"SELECT * FROM entity e " +
|
|
@@ -342,7 +486,7 @@ class TenantLineInnerInterceptorTest {
|
|
|
"LEFT JOIN entity2 e2 ON e1.id = e2.id AND e2.tenant_id = 1 " +
|
|
|
"WHERE e1.tenant_id = 1");
|
|
|
|
|
|
- assertSql("SELECT * FROM entity e " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
"left join entity1 e1 on e1.id = e.id " +
|
|
|
"right join entity2 e2 on e1.id = e2.id",
|
|
|
"SELECT * FROM entity e " +
|
|
@@ -350,47 +494,40 @@ class TenantLineInnerInterceptorTest {
|
|
|
"RIGHT JOIN entity2 e2 ON e1.id = e2.id AND e.tenant_id = 1 " +
|
|
|
"WHERE e2.tenant_id = 1");
|
|
|
|
|
|
- assertSql("SELECT * FROM entity e " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
"left join entity1 e1 on e1.id = e.id " +
|
|
|
"inner join entity2 e2 on e1.id = e2.id",
|
|
|
"SELECT * FROM entity e " +
|
|
|
"LEFT JOIN entity1 e1 ON e1.id = e.id AND e1.tenant_id = 1 " +
|
|
|
"INNER JOIN entity2 e2 ON e1.id = e2.id AND e.tenant_id = 1 AND e2.tenant_id = 1");
|
|
|
- }
|
|
|
-
|
|
|
|
|
|
- @Test
|
|
|
- void selectJoinSubSelect() {
|
|
|
- assertSql("select * from (select * from entity e) e1 " +
|
|
|
+ LAST_RESULT_TMAP.put("select * from (select * from entity e) e1 " +
|
|
|
"left join entity2 e2 on e1.id = e2.id",
|
|
|
"SELECT * FROM (SELECT * FROM entity e WHERE e.tenant_id = 1) e1 " +
|
|
|
"LEFT JOIN entity2 e2 ON e1.id = e2.id AND e2.tenant_id = 1");
|
|
|
|
|
|
- assertSql("select * from entity1 e1 " +
|
|
|
+ LAST_RESULT_TMAP.put("select * from entity1 e1 " +
|
|
|
"left join (select * from entity2 e2) e22 " +
|
|
|
"on e1.id = e22.id",
|
|
|
"SELECT * FROM entity1 e1 " +
|
|
|
"LEFT JOIN (SELECT * FROM entity2 e2 WHERE e2.tenant_id = 1) e22 " +
|
|
|
"ON e1.id = e22.id " +
|
|
|
"WHERE e1.tenant_id = 1");
|
|
|
- }
|
|
|
|
|
|
- @Test
|
|
|
- void selectSubJoin() {
|
|
|
- assertSql("select * FROM " +
|
|
|
+ LAST_RESULT_TMAP.put("select * FROM " +
|
|
|
"(entity1 e1 right JOIN entity2 e2 ON e1.id = e2.id)",
|
|
|
"SELECT * FROM " +
|
|
|
"(entity1 e1 RIGHT JOIN entity2 e2 ON e1.id = e2.id AND e1.tenant_id = 1) " +
|
|
|
"WHERE e2.tenant_id = 1");
|
|
|
|
|
|
- assertSql("select * FROM " +
|
|
|
+ LAST_RESULT_TMAP.put("select * FROM " +
|
|
|
"(entity1 e1 LEFT JOIN entity2 e2 ON e1.id = e2.id)",
|
|
|
"SELECT * FROM " +
|
|
|
"(entity1 e1 LEFT JOIN entity2 e2 ON e1.id = e2.id AND e2.tenant_id = 1) " +
|
|
|
"WHERE e1.tenant_id = 1");
|
|
|
|
|
|
|
|
|
- assertSql("select * FROM " +
|
|
|
+ LAST_RESULT_TMAP.put("select * FROM " +
|
|
|
"(entity1 e1 LEFT JOIN entity2 e2 ON e1.id = e2.id) " +
|
|
|
"right join entity3 e3 on e1.id = e3.id",
|
|
|
"SELECT * FROM " +
|
|
@@ -399,7 +536,7 @@ class TenantLineInnerInterceptorTest {
|
|
|
"WHERE e3.tenant_id = 1");
|
|
|
|
|
|
|
|
|
- assertSql("select * FROM entity e " +
|
|
|
+ LAST_RESULT_TMAP.put("select * FROM entity e " +
|
|
|
"LEFT JOIN (entity1 e1 right join entity2 e2 ON e1.id = e2.id) " +
|
|
|
"on e.id = e2.id",
|
|
|
"SELECT * FROM entity e " +
|
|
@@ -407,7 +544,7 @@ class TenantLineInnerInterceptorTest {
|
|
|
"ON e.id = e2.id AND e2.tenant_id = 1 " +
|
|
|
"WHERE e.tenant_id = 1");
|
|
|
|
|
|
- assertSql("select * FROM entity e " +
|
|
|
+ LAST_RESULT_TMAP.put("select * FROM entity e " +
|
|
|
"LEFT JOIN (entity1 e1 left join entity2 e2 ON e1.id = e2.id) " +
|
|
|
"on e.id = e2.id",
|
|
|
"SELECT * FROM entity e " +
|
|
@@ -415,19 +552,16 @@ class TenantLineInnerInterceptorTest {
|
|
|
"ON e.id = e2.id AND e1.tenant_id = 1 " +
|
|
|
"WHERE e.tenant_id = 1");
|
|
|
|
|
|
- assertSql("select * FROM entity e " +
|
|
|
+ LAST_RESULT_TMAP.put("select * FROM entity e " +
|
|
|
"RIGHT JOIN (entity1 e1 left join entity2 e2 ON e1.id = e2.id) " +
|
|
|
"on e.id = e2.id",
|
|
|
"SELECT * FROM entity e " +
|
|
|
"RIGHT JOIN (entity1 e1 LEFT JOIN entity2 e2 ON e1.id = e2.id AND e2.tenant_id = 1) " +
|
|
|
"ON e.id = e2.id AND e.tenant_id = 1 " +
|
|
|
"WHERE e1.tenant_id = 1");
|
|
|
- }
|
|
|
|
|
|
- @Test
|
|
|
- void selectLeftJoinMultipleTrailingOn() {
|
|
|
// 多个 on 尾缀的
|
|
|
- assertSql("SELECT * FROM entity e " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
"LEFT JOIN entity1 e1 " +
|
|
|
"LEFT JOIN entity2 e2 ON e2.id = e1.id " +
|
|
|
"ON e1.id = e.id " +
|
|
@@ -438,7 +572,7 @@ class TenantLineInnerInterceptorTest {
|
|
|
"ON e1.id = e.id AND e1.tenant_id = 1 " +
|
|
|
"WHERE (e.id = ? OR e.NAME = ?) AND e.tenant_id = 1");
|
|
|
|
|
|
- assertSql("SELECT * FROM entity e " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
"LEFT JOIN entity1 e1 " +
|
|
|
"LEFT JOIN with_as_A e2 ON e2.id = e1.id " +
|
|
|
"ON e1.id = e.id " +
|
|
@@ -448,19 +582,16 @@ class TenantLineInnerInterceptorTest {
|
|
|
"LEFT JOIN with_as_A e2 ON e2.id = e1.id " +
|
|
|
"ON e1.id = e.id AND e1.tenant_id = 1 " +
|
|
|
"WHERE (e.id = ? OR e.NAME = ?) AND e.tenant_id = 1");
|
|
|
- }
|
|
|
|
|
|
- @Test
|
|
|
- void selectInnerJoin() {
|
|
|
// inner join
|
|
|
- assertSql("SELECT * FROM entity e " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
"inner join entity1 e1 on e1.id = e.id " +
|
|
|
"WHERE e.id = ? OR e.name = ?",
|
|
|
"SELECT * FROM entity e " +
|
|
|
"INNER JOIN entity1 e1 ON e1.id = e.id AND e.tenant_id = 1 AND e1.tenant_id = 1 " +
|
|
|
"WHERE e.id = ? OR e.name = ?");
|
|
|
|
|
|
- assertSql("SELECT * FROM entity e " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
"inner join entity1 e1 on e1.id = e.id " +
|
|
|
"WHERE (e.id = ? OR e.name = ?)",
|
|
|
"SELECT * FROM entity e " +
|
|
@@ -468,7 +599,7 @@ class TenantLineInnerInterceptorTest {
|
|
|
"WHERE (e.id = ? OR e.name = ?)");
|
|
|
|
|
|
// ignore table
|
|
|
- assertSql("SELECT * FROM entity e " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e " +
|
|
|
"inner join with_as_1 w1 on w1.id = e.id " +
|
|
|
"WHERE (e.id = ? OR e.name = ?)",
|
|
|
"SELECT * FROM entity e " +
|
|
@@ -476,76 +607,399 @@ class TenantLineInnerInterceptorTest {
|
|
|
"WHERE (e.id = ? OR e.name = ?)");
|
|
|
|
|
|
// 隐式内连接
|
|
|
- assertSql("SELECT * FROM entity e,entity1 e1 " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e,entity1 e1 " +
|
|
|
"WHERE e.id = e1.id",
|
|
|
"SELECT * FROM entity e, entity1 e1 " +
|
|
|
"WHERE e.id = e1.id AND e.tenant_id = 1 AND e1.tenant_id = 1");
|
|
|
|
|
|
// 隐式内连接
|
|
|
- assertSql("SELECT * FROM entity a, with_as_entity1 b " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity a, with_as_entity1 b " +
|
|
|
"WHERE a.id = b.id",
|
|
|
"SELECT * FROM entity a, with_as_entity1 b " +
|
|
|
"WHERE a.id = b.id AND a.tenant_id = 1");
|
|
|
|
|
|
- assertSql("SELECT * FROM with_as_entity a, with_as_entity1 b " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM with_as_entity a, with_as_entity1 b " +
|
|
|
"WHERE a.id = b.id",
|
|
|
"SELECT * FROM with_as_entity a, with_as_entity1 b " +
|
|
|
"WHERE a.id = b.id");
|
|
|
|
|
|
// SubJoin with 隐式内连接
|
|
|
- assertSql("SELECT * FROM (entity e,entity1 e1) " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM (entity e,entity1 e1) " +
|
|
|
"WHERE e.id = e1.id",
|
|
|
"SELECT * FROM (entity e, entity1 e1) " +
|
|
|
"WHERE e.id = e1.id " +
|
|
|
"AND e.tenant_id = 1 AND e1.tenant_id = 1");
|
|
|
|
|
|
- assertSql("SELECT * FROM ((entity e,entity1 e1),entity2 e2) " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM ((entity e,entity1 e1),entity2 e2) " +
|
|
|
"WHERE e.id = e1.id and e.id = e2.id",
|
|
|
"SELECT * FROM ((entity e, entity1 e1), entity2 e2) " +
|
|
|
"WHERE e.id = e1.id AND e.id = e2.id " +
|
|
|
"AND e.tenant_id = 1 AND e1.tenant_id = 1 AND e2.tenant_id = 1");
|
|
|
|
|
|
- assertSql("SELECT * FROM (entity e,(entity1 e1,entity2 e2)) " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM (entity e,(entity1 e1,entity2 e2)) " +
|
|
|
"WHERE e.id = e1.id and e.id = e2.id",
|
|
|
"SELECT * FROM (entity e, (entity1 e1, entity2 e2)) " +
|
|
|
"WHERE e.id = e1.id AND e.id = e2.id " +
|
|
|
"AND e.tenant_id = 1 AND e1.tenant_id = 1 AND e2.tenant_id = 1");
|
|
|
|
|
|
// 沙雕的括号写法
|
|
|
- assertSql("SELECT * FROM (((entity e,entity1 e1))) " +
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM (((entity e,entity1 e1))) " +
|
|
|
"WHERE e.id = e1.id",
|
|
|
"SELECT * FROM (((entity e, entity1 e1))) " +
|
|
|
"WHERE e.id = e1.id " +
|
|
|
"AND e.tenant_id = 1 AND e1.tenant_id = 1");
|
|
|
- }
|
|
|
|
|
|
- @Test
|
|
|
- void selectSingleJoin() {
|
|
|
// join
|
|
|
- assertSql("SELECT * FROM entity e join entity1 e1 on e1.id = e.id WHERE e.id = ? OR e.name = ?",
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e join entity1 e1 on e1.id = e.id WHERE e.id = ? OR e.name = ?",
|
|
|
"SELECT * FROM entity e JOIN entity1 e1 ON e1.id = e.id AND e1.tenant_id = 1 WHERE (e.id = ? OR e.name = ?) AND e.tenant_id = 1");
|
|
|
|
|
|
- assertSql("SELECT * FROM entity e join entity1 e1 on e1.id = e.id WHERE (e.id = ? OR e.name = ?)",
|
|
|
+ LAST_RESULT_TMAP.put("SELECT * FROM entity e join entity1 e1 on e1.id = e.id WHERE (e.id = ? OR e.name = ?)",
|
|
|
"SELECT * FROM entity e JOIN entity1 e1 ON e1.id = e.id AND e1.tenant_id = 1 WHERE (e.id = ? OR e.name = ?) AND e.tenant_id = 1");
|
|
|
- }
|
|
|
|
|
|
- @Test
|
|
|
- void selectWithAs() {
|
|
|
- assertSql("with with_as_A as (select * from entity) select * from with_as_A",
|
|
|
+ LAST_RESULT_TMAP.put("with with_as_A as (select * from entity) select * from with_as_A",
|
|
|
"WITH with_as_A AS (SELECT * FROM entity WHERE tenant_id = 1) SELECT * FROM with_as_A");
|
|
|
- }
|
|
|
|
|
|
- @Test
|
|
|
- void testDuplicateKeyUpdate() {
|
|
|
- assertSql("INSERT INTO entity (name,age) VALUES ('秋秋',18),('秋秋','22') ON DUPLICATE KEY UPDATE age=18",
|
|
|
+ LAST_RESULT_TMAP.put("INSERT INTO entity (name,age) VALUES ('秋秋',18),('秋秋','22') ON DUPLICATE KEY UPDATE age=18",
|
|
|
"INSERT INTO entity (name, age, tenant_id) VALUES ('秋秋', 18, 1), ('秋秋', '22', 1) ON DUPLICATE KEY UPDATE age = 18, tenant_id = 1");
|
|
|
}
|
|
|
|
|
|
- void assertSql(String sql, String targetSql) {
|
|
|
- assertThat(interceptor.parserSingle(sql, null)).isEqualTo(targetSql);
|
|
|
+
|
|
|
+ private final TenantLineInnerInterceptor interceptor = new TenantLineInnerInterceptor(new TenantLineHandler() {
|
|
|
+ private boolean ignoreFirst;// 需要执行 getTenantId 前必须先执行 ignoreTable
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Expression getTenantId() {
|
|
|
+ assertThat(ignoreFirst).isEqualTo(true);
|
|
|
+ ignoreFirst = false;
|
|
|
+ return new LongValue(1);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean ignoreTable(String tableName) {
|
|
|
+ ignoreFirst = true;
|
|
|
+ return tableName.startsWith("with_as");
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(ExpressionAppendMode.class)
|
|
|
+ public void test(ExpressionAppendMode appendMode) {
|
|
|
+ Map<String, String> assertMap = ExpressionAppendMode.LAST == appendMode ? LAST_RESULT_TMAP : FIRS_RESULT_TMAP;
|
|
|
+ assertMap.forEach((k, v) -> assertSql(k, appendMode));
|
|
|
+ }
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(ExpressionAppendMode.class)
|
|
|
+ void insert(ExpressionAppendMode appendMode) {
|
|
|
+ // plain
|
|
|
+ assertSql("insert into entity (id) values (?)", appendMode);
|
|
|
+ assertSql("insert into entity (id,name) values (?,?)", appendMode);
|
|
|
+ // batch
|
|
|
+ assertSql("insert into entity (id) values (?),(?)", appendMode);
|
|
|
+ assertSql("insert into entity (id,name) values (?,?),(?,?)", appendMode);
|
|
|
+ // 无 insert的列
|
|
|
+ assertSql("insert into entity value (?,?)", appendMode);
|
|
|
+ // 自己加了insert的列
|
|
|
+ assertSql("insert into entity (id,name,tenant_id) value (?,?,?)", appendMode);
|
|
|
+ // insert into select
|
|
|
+ assertSql("insert into entity (id,name) select id,name from entity2", appendMode);
|
|
|
+ assertSql("insert into entity (id,name) select * from entity2 e2", appendMode);
|
|
|
+ assertSql("insert into entity (id,name) select id,name from (select id,name from entity3 e3) t", appendMode);
|
|
|
+ assertSql("insert into entity (id,name) select * from (select id,name from entity3 e3) t", appendMode);
|
|
|
+ assertSql("insert into entity (id,name) select t.* from (select id,name from entity3 e3) t", appendMode);
|
|
|
+ }
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(ExpressionAppendMode.class)
|
|
|
+ void delete(ExpressionAppendMode appendMode) {
|
|
|
+ assertSql("delete from entity where id = ?", appendMode);
|
|
|
+ }
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(ExpressionAppendMode.class)
|
|
|
+ void update(ExpressionAppendMode appendMode) {
|
|
|
+ assertSql("update entity set name = ? where id = ?", appendMode);
|
|
|
+ // set subSelect
|
|
|
+ assertSql("UPDATE entity e SET e.cq = (SELECT e1.total FROM entity e1 WHERE e1.id = ?) WHERE e.id = ?", appendMode);
|
|
|
+
|
|
|
+ assertSql("UPDATE sys_user SET (name, age) = ('秋秋', 18), address = 'test'", appendMode);
|
|
|
+
|
|
|
+ assertSql("UPDATE entity t1 INNER JOIN entity t2 ON t1.a= t2.a SET t1.b = t2.b, t1.c = t2.c", appendMode);
|
|
|
+ }
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(ExpressionAppendMode.class)
|
|
|
+ void selectSingle(ExpressionAppendMode appendMode) {
|
|
|
+ // 单表
|
|
|
+ assertSql("select * from entity where id = ?", appendMode);
|
|
|
+
|
|
|
+ assertSql("select * from entity where id = ? or name = ?", appendMode);
|
|
|
+
|
|
|
+ assertSql("SELECT * FROM entity WHERE (id = ? OR name = ?)", appendMode);
|
|
|
+
|
|
|
+ /* not */
|
|
|
+ assertSql("SELECT * FROM entity WHERE not (id = ? OR name = ?)", appendMode);
|
|
|
+
|
|
|
+ assertSql("SELECT * FROM entity u WHERE not (u.id = ? OR u.name = ?)", appendMode);
|
|
|
+ }
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(ExpressionAppendMode.class)
|
|
|
+ void selectSubSelectIn(ExpressionAppendMode appendMode) {
|
|
|
+ /* in */
|
|
|
+ assertSql("SELECT * FROM entity e WHERE e.id IN (select e1.id from entity1 e1 where e1.id = ?)", appendMode);
|
|
|
+ // 在最前
|
|
|
+ assertSql("SELECT * FROM entity e WHERE e.id IN " +
|
|
|
+ "(select e1.id from entity1 e1 where e1.id = ?) and e.id = ?", appendMode);
|
|
|
+ // 在最后
|
|
|
+ assertSql("SELECT * FROM entity e WHERE e.id = ? and e.id IN " +
|
|
|
+ "(select e1.id from entity1 e1 where e1.id = ?)", appendMode);
|
|
|
+ // 在中间
|
|
|
+ assertSql("SELECT * FROM entity e WHERE e.id = ? and e.id IN " +
|
|
|
+ "(select e1.id from entity1 e1 where e1.id = ?) and e.id = ?", appendMode);
|
|
|
+ }
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(ExpressionAppendMode.class)
|
|
|
+ void selectSubSelectEq(ExpressionAppendMode appendMode) {
|
|
|
+ /* = */
|
|
|
+ assertSql("SELECT * FROM entity e WHERE e.id = (select e1.id from entity1 e1 where e1.id = ?)", appendMode);
|
|
|
+ }
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(ExpressionAppendMode.class)
|
|
|
+ void selectSubSelectInnerNotEq(ExpressionAppendMode appendMode) {
|
|
|
+ /* inner not = */
|
|
|
+ assertSql("SELECT * FROM entity e WHERE not (e.id = (select e1.id from entity1 e1 where e1.id = ?))", appendMode);
|
|
|
+
|
|
|
+ assertSql("SELECT * FROM entity e WHERE not (e.id = (select e1.id from entity1 e1 where e1.id = ?) and e.id = ?)", appendMode);
|
|
|
+ }
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(ExpressionAppendMode.class)
|
|
|
+ void selectSubSelectExists(ExpressionAppendMode appendMode) {
|
|
|
+ /* EXISTS */
|
|
|
+ assertSql("SELECT * FROM entity e WHERE EXISTS (select e1.id from entity1 e1 where e1.id = ?)", appendMode);
|
|
|
+
|
|
|
+ assertSql("SELECT EXISTS (SELECT 1 FROM entity1 e WHERE e.id = ? LIMIT 1)", appendMode);
|
|
|
+
|
|
|
+ /* NOT EXISTS */
|
|
|
+ assertSql("SELECT * FROM entity e WHERE NOT EXISTS (select e1.id from entity1 e1 where e1.id = ?)", appendMode);
|
|
|
+ }
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(ExpressionAppendMode.class)
|
|
|
+ void selectWhereSubSelect(ExpressionAppendMode appendMode) {
|
|
|
+ /* >= */
|
|
|
+ assertSql("SELECT * FROM entity e WHERE e.id >= (select e1.id from entity1 e1 where e1.id = ?)", appendMode);
|
|
|
+ /* <= */
|
|
|
+ assertSql("SELECT * FROM entity e WHERE e.id <= (select e1.id from entity1 e1 where e1.id = ?)", appendMode);
|
|
|
+ /* <> */
|
|
|
+ assertSql("SELECT * FROM entity e WHERE e.id <> (select e1.id from entity1 e1 where e1.id = ?)", appendMode);
|
|
|
+ }
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(ExpressionAppendMode.class)
|
|
|
+ void selectFromSelect(ExpressionAppendMode appendMode) {
|
|
|
+ assertSql("SELECT * FROM (select e.id from entity e WHERE e.id = (select e1.id from entity1 e1 where e1.id = ?))", appendMode);
|
|
|
}
|
|
|
|
|
|
- void assertSql2(String sql, String targetSql) {
|
|
|
- assertThat(interceptor2.parserSingle(sql, null)).isEqualTo(targetSql);
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(ExpressionAppendMode.class)
|
|
|
+ void selectBodySubSelect(ExpressionAppendMode appendMode) {
|
|
|
+ assertSql("select t1.col1,(select t2.col2 from t2 t2 where t1.col1=t2.col1) from t1 t1", appendMode);
|
|
|
}
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(ExpressionAppendMode.class)
|
|
|
+ void selectBodyFuncSubSelect(ExpressionAppendMode appendMode) {
|
|
|
+ assertSql("SELECT e1.*, IF((SELECT e2.id FROM entity2 e2 WHERE e2.id = 1) = 1, e2.type, e1.type) AS type " +
|
|
|
+ "FROM entity e1 WHERE e1.id = ?", appendMode);
|
|
|
+ }
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(ExpressionAppendMode.class)
|
|
|
+ void selectLeftJoin(ExpressionAppendMode appendMode) {
|
|
|
+ // left join
|
|
|
+ assertSql("SELECT * FROM entity e " +
|
|
|
+ "left join entity1 e1 on e1.id = e.id " +
|
|
|
+ "WHERE e.id = ? OR e.name = ?", appendMode);
|
|
|
+
|
|
|
+ assertSql("SELECT * FROM entity e " +
|
|
|
+ "left join entity1 e1 on e1.id = e.id " +
|
|
|
+ "WHERE (e.id = ? OR e.name = ?)", appendMode);
|
|
|
+
|
|
|
+ assertSql("SELECT * FROM entity e " +
|
|
|
+ "left join entity1 e1 on e1.id = e.id " +
|
|
|
+ "left join entity2 e2 on e1.id = e2.id", appendMode);
|
|
|
+ }
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(ExpressionAppendMode.class)
|
|
|
+ void selectRightJoin(ExpressionAppendMode appendMode) {
|
|
|
+ // right join
|
|
|
+ assertSql("SELECT * FROM entity e " +
|
|
|
+ "right join entity1 e1 on e1.id = e.id",
|
|
|
+ appendMode);
|
|
|
+
|
|
|
+ assertSql("SELECT * FROM with_as_1 e " +
|
|
|
+ "right join entity1 e1 on e1.id = e.id",
|
|
|
+ appendMode);
|
|
|
+
|
|
|
+ assertSql("SELECT * FROM entity e " +
|
|
|
+ "right join entity1 e1 on e1.id = e.id " +
|
|
|
+ "WHERE e.id = ? OR e.name = ?",
|
|
|
+ appendMode);
|
|
|
+
|
|
|
+ assertSql("SELECT * FROM entity e " +
|
|
|
+ "right join entity1 e1 on e1.id = e.id " +
|
|
|
+ "right join entity2 e2 on e1.id = e2.id ",
|
|
|
+ appendMode);
|
|
|
+ }
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(ExpressionAppendMode.class)
|
|
|
+ void selectMixJoin(ExpressionAppendMode appendMode) {
|
|
|
+ assertSql("SELECT * FROM entity e " +
|
|
|
+ "right join entity1 e1 on e1.id = e.id " +
|
|
|
+ "left join entity2 e2 on e1.id = e2.id",
|
|
|
+ appendMode);
|
|
|
+
|
|
|
+ assertSql("SELECT * FROM entity e " +
|
|
|
+ "left join entity1 e1 on e1.id = e.id " +
|
|
|
+ "right join entity2 e2 on e1.id = e2.id",
|
|
|
+ appendMode);
|
|
|
+
|
|
|
+ assertSql("SELECT * FROM entity e " +
|
|
|
+ "left join entity1 e1 on e1.id = e.id " +
|
|
|
+ "inner join entity2 e2 on e1.id = e2.id",
|
|
|
+ appendMode);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(ExpressionAppendMode.class)
|
|
|
+ void selectJoinSubSelect(ExpressionAppendMode appendMode) {
|
|
|
+ assertSql("select * from (select * from entity e) e1 " +
|
|
|
+ "left join entity2 e2 on e1.id = e2.id", appendMode);
|
|
|
+
|
|
|
+ assertSql("select * from entity1 e1 " +
|
|
|
+ "left join (select * from entity2 e2) e22 " +
|
|
|
+ "on e1.id = e22.id", appendMode);
|
|
|
+ }
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(ExpressionAppendMode.class)
|
|
|
+ void selectSubJoin(ExpressionAppendMode appendMode) {
|
|
|
+ assertSql("select * FROM " +
|
|
|
+ "(entity1 e1 right JOIN entity2 e2 ON e1.id = e2.id)", appendMode);
|
|
|
+
|
|
|
+ assertSql("select * FROM " +
|
|
|
+ "(entity1 e1 LEFT JOIN entity2 e2 ON e1.id = e2.id)", appendMode);
|
|
|
+
|
|
|
+
|
|
|
+ assertSql("select * FROM " +
|
|
|
+ "(entity1 e1 LEFT JOIN entity2 e2 ON e1.id = e2.id) " +
|
|
|
+ "right join entity3 e3 on e1.id = e3.id", appendMode);
|
|
|
+
|
|
|
+
|
|
|
+ assertSql("select * FROM entity e " +
|
|
|
+ "LEFT JOIN (entity1 e1 right join entity2 e2 ON e1.id = e2.id) " +
|
|
|
+ "on e.id = e2.id", appendMode);
|
|
|
+
|
|
|
+ assertSql("select * FROM entity e " +
|
|
|
+ "LEFT JOIN (entity1 e1 left join entity2 e2 ON e1.id = e2.id) " +
|
|
|
+ "on e.id = e2.id", appendMode);
|
|
|
+
|
|
|
+ assertSql("select * FROM entity e " +
|
|
|
+ "RIGHT JOIN (entity1 e1 left join entity2 e2 ON e1.id = e2.id) " +
|
|
|
+ "on e.id = e2.id", appendMode);
|
|
|
+ }
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(ExpressionAppendMode.class)
|
|
|
+ void selectLeftJoinMultipleTrailingOn(ExpressionAppendMode appendMode) {
|
|
|
+ // 多个 on 尾缀的
|
|
|
+ assertSql("SELECT * FROM entity e " +
|
|
|
+ "LEFT JOIN entity1 e1 " +
|
|
|
+ "LEFT JOIN entity2 e2 ON e2.id = e1.id " +
|
|
|
+ "ON e1.id = e.id " +
|
|
|
+ "WHERE (e.id = ? OR e.NAME = ?)", appendMode);
|
|
|
+
|
|
|
+ assertSql("SELECT * FROM entity e " +
|
|
|
+ "LEFT JOIN entity1 e1 " +
|
|
|
+ "LEFT JOIN with_as_A e2 ON e2.id = e1.id " +
|
|
|
+ "ON e1.id = e.id " +
|
|
|
+ "WHERE (e.id = ? OR e.NAME = ?)", appendMode);
|
|
|
+ }
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(ExpressionAppendMode.class)
|
|
|
+ void selectInnerJoin(ExpressionAppendMode appendMode) {
|
|
|
+ // inner join
|
|
|
+ assertSql("SELECT * FROM entity e " +
|
|
|
+ "inner join entity1 e1 on e1.id = e.id " +
|
|
|
+ "WHERE e.id = ? OR e.name = ?", appendMode);
|
|
|
+
|
|
|
+ assertSql("SELECT * FROM entity e " +
|
|
|
+ "inner join entity1 e1 on e1.id = e.id " +
|
|
|
+ "WHERE (e.id = ? OR e.name = ?)", appendMode);
|
|
|
+
|
|
|
+ // ignore table
|
|
|
+ assertSql("SELECT * FROM entity e " +
|
|
|
+ "inner join with_as_1 w1 on w1.id = e.id " +
|
|
|
+ "WHERE (e.id = ? OR e.name = ?)", appendMode);
|
|
|
+
|
|
|
+ // 隐式内连接
|
|
|
+ assertSql("SELECT * FROM entity e,entity1 e1 " +
|
|
|
+ "WHERE e.id = e1.id", appendMode);
|
|
|
+
|
|
|
+ // 隐式内连接
|
|
|
+ assertSql("SELECT * FROM entity a, with_as_entity1 b " +
|
|
|
+ "WHERE a.id = b.id", appendMode);
|
|
|
+
|
|
|
+ assertSql("SELECT * FROM with_as_entity a, with_as_entity1 b " +
|
|
|
+ "WHERE a.id = b.id", appendMode);
|
|
|
+
|
|
|
+ // SubJoin with 隐式内连接
|
|
|
+ assertSql("SELECT * FROM (entity e,entity1 e1) " +
|
|
|
+ "WHERE e.id = e1.id", appendMode);
|
|
|
+
|
|
|
+ assertSql("SELECT * FROM ((entity e,entity1 e1),entity2 e2) " +
|
|
|
+ "WHERE e.id = e1.id and e.id = e2.id", appendMode);
|
|
|
+
|
|
|
+ assertSql("SELECT * FROM (entity e,(entity1 e1,entity2 e2)) " +
|
|
|
+ "WHERE e.id = e1.id and e.id = e2.id", appendMode);
|
|
|
+
|
|
|
+ // 沙雕的括号写法
|
|
|
+ assertSql("SELECT * FROM (((entity e,entity1 e1))) WHERE e.id = e1.id", appendMode);
|
|
|
+ }
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(ExpressionAppendMode.class)
|
|
|
+ void selectSingleJoin(ExpressionAppendMode appendMode) {
|
|
|
+ // join
|
|
|
+ assertSql("SELECT * FROM entity e join entity1 e1 on e1.id = e.id WHERE e.id = ? OR e.name = ?", appendMode);
|
|
|
+
|
|
|
+ assertSql("SELECT * FROM entity e join entity1 e1 on e1.id = e.id WHERE (e.id = ? OR e.name = ?)", appendMode);
|
|
|
+ }
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(ExpressionAppendMode.class)
|
|
|
+ void selectWithAs(ExpressionAppendMode appendMode) {
|
|
|
+ assertSql("with with_as_A as (select * from entity) select * from with_as_A", appendMode);
|
|
|
+ }
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @EnumSource(ExpressionAppendMode.class)
|
|
|
+ void testDuplicateKeyUpdate(ExpressionAppendMode appendMode) {
|
|
|
+ assertSql("INSERT INTO entity (name,age) VALUES ('秋秋',18),('秋秋','22') ON DUPLICATE KEY UPDATE age=18", appendMode);
|
|
|
+ }
|
|
|
+
|
|
|
+ void assertSql(String sql, ExpressionAppendMode appendMode) {
|
|
|
+ interceptor.setExpressionAppendMode(appendMode);
|
|
|
+ Map<String, String> assertMap = ExpressionAppendMode.LAST == interceptor.getExpressionAppendMode() ? LAST_RESULT_TMAP : FIRS_RESULT_TMAP;
|
|
|
+ assertThat(interceptor.parserSingle(sql, null)).isEqualTo(assertMap.get(sql));
|
|
|
+ }
|
|
|
+
|
|
|
}
|