From 040878355ec180fd63222a105905393c2b885c77 Mon Sep 17 00:00:00 2001 From: chenjh3 Date: Tue, 10 Oct 2023 10:07:28 +0800 Subject: [PATCH] =?UTF-8?q?1.fix=EF=BC=9A=E9=87=8D=E7=BD=AEdynamicTablePro?= =?UTF-8?q?cessor=EF=BC=8C=E9=98=B2=E6=AD=A2=E5=BD=B1=E5=93=8D=E5=85=B6?= =?UTF-8?q?=E4=BB=96=E7=9A=84=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B=E3=80=82?= =?UTF-8?q?2.=E6=8A=8AAccontSqlTester=E4=B8=AD=E6=89=80=E6=9C=89=E7=9A=84?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B=E9=83=BD=E5=8A=A0=E4=B8=8A?= =?UTF-8?q?=E6=96=AD=E8=A8=80=E5=88=A4=E6=96=AD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../coretest/AccountSqlTester.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/AccountSqlTester.java b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/AccountSqlTester.java index 8821e335..94d4c77c 100644 --- a/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/AccountSqlTester.java +++ b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/AccountSqlTester.java @@ -74,6 +74,8 @@ public class AccountSqlTester { ,query.toSQL()); System.out.println(query.toSQL()); + // 重置dynamicTableProcessor,防止影响其他的测试用例 + TableManager.setDynamicTableProcessor(null); } @@ -93,6 +95,8 @@ public class AccountSqlTester { ,query.toSQL()); System.out.println(query.toSQL()); + // 重置dynamicTableProcessor,防止影响其他的测试用例 + TableManager.setDynamicTableProcessor(null); } @@ -495,6 +499,12 @@ public class AccountSqlTester { .leftJoin(ACCOUNT).as("a1").on(ACCOUNT.ID.eq(ACCOUNT.AGE).and(ACCOUNT.USER_NAME.like("a"))) .where(ACCOUNT.AGE.ge(10)); + Assert.assertEquals("SELECT `a0`.* " + + "FROM `tb_account` AS `a0` " + + "LEFT JOIN `tb_account` AS `a1` " + + "ON `a1`.`id` = `a0`.`age` AND `a1`.`user_name` LIKE '%a%' " + + "WHERE `a0`.`age` >= 10", queryWrapper.toSQL()); + System.out.println(queryWrapper.toSQL()); QueryWrapper queryWrapper1 = QueryWrapper.create() @@ -502,6 +512,8 @@ public class AccountSqlTester { .from(ACCOUNT) .where(ACCOUNT.AGE.ge(10)); + Assert.assertEquals("SELECT `id` FROM `tb_account` WHERE `age` >= 10", queryWrapper1.toSQL()); + System.out.println(queryWrapper1.toSQL()); } @@ -564,6 +576,13 @@ public class AccountSqlTester { ); String sql = dialect.forSelectByQuery(queryWrapper); + + Assert.assertEquals("SELECT *, CONVERT(NVARCHAR(30), GETDATE(), 126) AS `result` " + + "FROM `tb_account` " + + "WHERE `user_name` LIKE ? " + + "AND CONVERT(NVARCHAR(30), GETDATE(), 126) IN (SELECT `id` FROM `tb_account` WHERE `id` >= ?)" + ,sql); + System.out.println(sql); } @@ -580,6 +599,10 @@ public class AccountSqlTester { .from(ACCOUNT) .and(ACCOUNT.USER_NAME.like("michael")); + Assert.assertEquals("SELECT *, (CASE WHEN `id` = 100 THEN 100 WHEN `id` >= 200 THEN 200 ELSE 300 END) AS `result` " + + "FROM `tb_account` " + + "WHERE `user_name` LIKE '%michael%'", queryWrapper.toSQL()); + System.out.println(queryWrapper.toSQL()); } @@ -598,6 +621,10 @@ public class AccountSqlTester { .and(ACCOUNT.USER_NAME.like("michael")); String sql = dialect.forSelectByQuery(queryWrapper); + + Assert.assertEquals("SELECT *, (CASE `id` WHEN 100 THEN 100 WHEN 200 THEN 200 ELSE 300 END) AS `result` " + + "FROM `tb_account` WHERE `user_name` LIKE ?", sql); + System.out.println(sql); } @@ -617,6 +644,11 @@ public class AccountSqlTester { .and(ACCOUNT.USER_NAME.like("michael")); String sql = dialect.forSelectByQuery(queryWrapper); + + Assert.assertEquals("SELECT *, (CASE `id` WHEN 100 THEN 100 WHEN 200 THEN 200 ELSE CONVERT(varchar, GETDATE(), 126) END) AS `result` " + + "FROM `tb_account` " + + "WHERE `user_name` LIKE ?", sql); + System.out.println(sql); } @@ -633,10 +665,14 @@ public class AccountSqlTester { IDialect dialect1 = new CommonsDialectImpl(); String sql1 = dialect1.buildSelectSql(queryWrapper); + Assert.assertEquals("SELECT * FROM `tb_account` ORDER BY `id` DESC LIMIT 20, 10", sql1); System.out.println(sql1); IDialect dialect2 = new CommonsDialectImpl(KeywordWrap.DOUBLE_QUOTATION, LimitOffsetProcessor.ORACLE); String sql2 = dialect2.buildSelectSql(queryWrapper); + Assert.assertEquals("SELECT * FROM (SELECT TEMP_DATAS.*, ROWNUM RN " + + "FROM (SELECT * FROM \"tb_account\" ORDER BY \"id\" DESC) TEMP_DATAS WHERE ROWNUM <= 30) " + + "WHERE RN > 20", sql2); System.out.println(sql2); // IDialect dialect3 = new CommonsDialectImpl(KeywordWrap.DOUBLE_QUOTATION, LimitOffsetProcessor.DB2); @@ -645,19 +681,23 @@ public class AccountSqlTester { IDialect dialect4 = new CommonsDialectImpl(KeywordWrap.DOUBLE_QUOTATION, LimitOffsetProcessor.POSTGRESQL); String sql4 = dialect4.buildSelectSql(queryWrapper); + Assert.assertEquals("SELECT * FROM \"tb_account\" ORDER BY \"id\" DESC LIMIT 10 OFFSET 20", sql4); System.out.println(sql4); IDialect dialect5 = new CommonsDialectImpl(KeywordWrap.DOUBLE_QUOTATION, LimitOffsetProcessor.INFORMIX); String sql5 = dialect5.buildSelectSql(queryWrapper); + Assert.assertEquals("SELECT SKIP 20 FIRST 10 * FROM \"tb_account\" ORDER BY \"id\" DESC", sql5); System.out.println(sql5); IDialect dialect6 = new CommonsDialectImpl(KeywordWrap.DOUBLE_QUOTATION, LimitOffsetProcessor.SYBASE); String sql6 = dialect6.buildSelectSql(queryWrapper); + Assert.assertEquals("SELECT TOP 10 START AT 21 * FROM \"tb_account\" ORDER BY \"id\" DESC", sql6); System.out.println(sql6); IDialect dialect7 = new CommonsDialectImpl(KeywordWrap.DOUBLE_QUOTATION, LimitOffsetProcessor.FIREBIRD); String sql7 = dialect7.buildSelectSql(queryWrapper); + Assert.assertEquals("SELECT * FROM \"tb_account\" ORDER BY \"id\" DESC ROWS 20 TO 30", sql7); System.out.println(sql7); } @@ -688,6 +728,15 @@ public class AccountSqlTester { .orderBy(ACCOUNT.ID.desc()) .limit(10, 10); + Assert.assertEquals("SELECT DISTINCT `b1`.`id`, `a1`.*, `b1`.`id` AS `article_id`, MAX(`a1`.`sex`), COUNT(DISTINCT `b1`.`id`) " + + "FROM `tb_account` AS `a1` LEFT JOIN `tb_article` AS `b1` ON `b1`.`account_id` = `a1`.`id` " + + "WHERE `a1`.`id` >= (SELECT `id` FROM `tb_article` AS `cc` WHERE `id` = 111) " + + "AND `a1`.`user_name` LIKE '%michael%' " + + "AND `b1`.`id` IN (SELECT `tb_article`.`id` FROM `aaa`) " + + "AND NOT EXISTS (SELECT 1 FROM `aaa` WHERE `tb_article`.`id` >= 333) " + + "GROUP BY `a1`.`id` HAVING `b1`.`id` >= 0 " + + "ORDER BY `a1`.`id` DESC LIMIT 10, 10", queryWrapper.toSQL()); + System.out.println(queryWrapper.toSQL()); // String oracleSql = new OracleDialect().forSelectListByQuery(CPI.getQueryTable(queryWrapper).getName(), queryWrapper);