YongGoose commented on code in PR #7219: URL: https://github.com/apache/incubator-seata/pull/7219#discussion_r1994565804
########## sqlparser/seata-sqlparser-druid/src/test/java/org/apache/seata/sqlparser/druid/DruidSQLRecognizerFactoryTest.java: ########## @@ -48,75 +48,159 @@ public void testSqlRecognizerCreation() { Assertions.assertEquals(recognizers.size(), 1); Assertions.assertEquals(SQLType.DELETE, recognizers.get(0).getSQLType()); + recognizers = recognizerFactory.create("delete from t1", JdbcConstants.DM); + Assertions.assertNotNull(recognizers); + Assertions.assertEquals(recognizers.size(), 1); + Assertions.assertEquals(SQLType.DELETE, recognizers.get(0).getSQLType()); + + recognizers = recognizerFactory.create("delete from t1", JdbcConstants.KINGBASE); + Assertions.assertNotNull(recognizers); + Assertions.assertEquals(recognizers.size(), 1); + Assertions.assertEquals(SQLType.DELETE, recognizers.get(0).getSQLType()); + + recognizers = recognizerFactory.create("delete from t1", JdbcConstants.OSCAR); + Assertions.assertNotNull(recognizers); + Assertions.assertEquals(recognizers.size(), 1); + Assertions.assertEquals(SQLType.DELETE, recognizers.get(0).getSQLType()); + //test sql syntax String sql = "update d.t set d.t.a = ?, d.t.b = ?, d.t.c = ?"; Assertions.assertNotNull(recognizerFactory.create(sql, JdbcConstants.MYSQL)); Assertions.assertNotNull(recognizerFactory.create(sql, JdbcConstants.MARIADB)); Assertions.assertNotNull(recognizerFactory.create(sql, JdbcConstants.POLARDBX)); Assertions.assertNotNull(recognizerFactory.create(sql, JdbcConstants.ORACLE)); Assertions.assertNotNull(recognizerFactory.create(sql, JdbcConstants.POSTGRESQL)); + Assertions.assertNotNull(recognizerFactory.create(sql, JdbcConstants.DM)); + Assertions.assertNotNull(recognizerFactory.create(sql, JdbcConstants.KINGBASE)); + Assertions.assertNotNull(recognizerFactory.create(sql, JdbcConstants.OSCAR)); - String sql1 = "update a set a.id = (select id from b where a.pid = b.pid)"; - Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql1, JdbcConstants.ORACLE)); - String sql2 = "update (select a.id,a.name from a inner join b on a.id = b.id) t set t.name = 'xxx'"; - Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql2, JdbcConstants.ORACLE)); - String sql3 = "update a set id = b.pid from b where a.id = b.id"; - Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql3, JdbcConstants.POSTGRESQL)); - String sql4 = "update t set id = 1 where id in (select id from b)"; - Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql4, JdbcConstants.MYSQL)); - Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql4, JdbcConstants.MARIADB)); - Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql4, JdbcConstants.POLARDBX)); - Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql4, JdbcConstants.ORACLE)); - Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql4, JdbcConstants.POSTGRESQL)); String sql5 = "insert into a values (1, 2)"; Assertions.assertNotNull(recognizerFactory.create(sql5, JdbcConstants.MYSQL)); Assertions.assertNotNull(recognizerFactory.create(sql5, JdbcConstants.MARIADB)); Assertions.assertNotNull(recognizerFactory.create(sql5, JdbcConstants.POLARDBX)); Assertions.assertNotNull(recognizerFactory.create(sql5, JdbcConstants.ORACLE)); Assertions.assertNotNull(recognizerFactory.create(sql5, JdbcConstants.POSTGRESQL)); + Assertions.assertNotNull(recognizerFactory.create(sql5, JdbcConstants.DM)); + Assertions.assertNotNull(recognizerFactory.create(sql5, JdbcConstants.KINGBASE)); + Assertions.assertNotNull(recognizerFactory.create(sql5, JdbcConstants.OSCAR)); String sql6 = "insert into a (id, name) values (1, 2), (3, 4)"; Assertions.assertNotNull(recognizerFactory.create(sql6, JdbcConstants.MYSQL)); Assertions.assertNotNull(recognizerFactory.create(sql6, JdbcConstants.MARIADB)); Assertions.assertNotNull(recognizerFactory.create(sql6, JdbcConstants.POLARDBX)); Assertions.assertNotNull(recognizerFactory.create(sql6, JdbcConstants.ORACLE)); Assertions.assertNotNull(recognizerFactory.create(sql6, JdbcConstants.POSTGRESQL)); + Assertions.assertNotNull(recognizerFactory.create(sql6, JdbcConstants.DM)); + Assertions.assertNotNull(recognizerFactory.create(sql6, JdbcConstants.KINGBASE)); + Assertions.assertNotNull(recognizerFactory.create(sql6, JdbcConstants.OSCAR)); + - String sql7 = "insert into a select * from b"; - Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql7, JdbcConstants.MYSQL)); - Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql7, JdbcConstants.MARIADB)); - Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql7, JdbcConstants.POLARDBX)); - Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql7, JdbcConstants.ORACLE)); - Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql7, JdbcConstants.POSTGRESQL)); String sql8 = "delete from t where id = ?"; Assertions.assertNotNull(recognizerFactory.create(sql8, JdbcConstants.MYSQL)); Assertions.assertNotNull(recognizerFactory.create(sql8, JdbcConstants.MARIADB)); Assertions.assertNotNull(recognizerFactory.create(sql8, JdbcConstants.POLARDBX)); Assertions.assertNotNull(recognizerFactory.create(sql8, JdbcConstants.ORACLE)); Assertions.assertNotNull(recognizerFactory.create(sql8, JdbcConstants.POSTGRESQL)); + Assertions.assertNotNull(recognizerFactory.create(sql8, JdbcConstants.DM)); + Assertions.assertNotNull(recognizerFactory.create(sql8, JdbcConstants.KINGBASE)); + Assertions.assertNotNull(recognizerFactory.create(sql8, JdbcConstants.OSCAR)); + - String sql9 = "delete from t where id in (select id from b)"; - Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql9, JdbcConstants.MYSQL)); - Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql9, JdbcConstants.MARIADB)); - Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql9, JdbcConstants.POLARDBX)); - Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql9, JdbcConstants.ORACLE)); - Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql9, JdbcConstants.POSTGRESQL)); String sql10 = "select * from t for update"; Assertions.assertNotNull(recognizerFactory.create(sql10, JdbcConstants.MYSQL)); Assertions.assertNotNull(recognizerFactory.create(sql10, JdbcConstants.MARIADB)); Assertions.assertNotNull(recognizerFactory.create(sql10, JdbcConstants.POLARDBX)); Assertions.assertNotNull(recognizerFactory.create(sql10, JdbcConstants.ORACLE)); Assertions.assertNotNull(recognizerFactory.create(sql10, JdbcConstants.POSTGRESQL)); + Assertions.assertNotNull(recognizerFactory.create(sql10, JdbcConstants.KINGBASE)); + Assertions.assertNotNull(recognizerFactory.create(sql10, JdbcConstants.DM)); + Assertions.assertNotNull(recognizerFactory.create(sql10, JdbcConstants.OSCAR)); + + - String sql11 = "select * from (select * from t) for update"; - Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql11, JdbcConstants.MYSQL)); - Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql11, JdbcConstants.MARIADB)); - Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql11, JdbcConstants.POLARDBX)); - Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql11, JdbcConstants.ORACLE)); - Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql11, JdbcConstants.POSTGRESQL)); + + } + + @Test + public void testIsSqlSyntaxSupports() { + SQLRecognizerFactory recognizerFactory = EnhancedServiceLoader.load(SQLRecognizerFactory.class, SqlParserType.SQL_PARSER_TYPE_DRUID); + + String sql1 = "delete from t where id in (select id from b)"; + Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql1, JdbcConstants.MYSQL)); + Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql1, JdbcConstants.MARIADB)); + Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql1, JdbcConstants.POLARDBX)); + Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql1, JdbcConstants.DM)); + + Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql1, JdbcConstants.SQLSERVER)); + Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql1, JdbcConstants.KINGBASE)); + Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql1, JdbcConstants.OSCAR)); + Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql1, JdbcConstants.POSTGRESQL)); + Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql1, JdbcConstants.ORACLE)); + + String sql2 = "select * from (select * from t) for update"; + Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql2, JdbcConstants.MYSQL)); + Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql2, JdbcConstants.MARIADB)); + Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql2, JdbcConstants.POLARDBX)); + Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql2, JdbcConstants.DM)); + + Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql2, JdbcConstants.KINGBASE)); + Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql2, JdbcConstants.OSCAR)); + Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql2, JdbcConstants.POSTGRESQL)); + Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql2, JdbcConstants.ORACLE)); + + String sql3 = "replace into t (id,dr) values (1,'2'), (2,'3')"; + Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql3, JdbcConstants.MYSQL)); + Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql3, JdbcConstants.MARIADB)); + Assertions.assertThrows(NotSupportYetException.class, () -> recognizerFactory.create(sql3, JdbcConstants.POLARDBX)); + + // When dbtype are DM and SQLSERVER, druid cannot parse +// try { +// recognizerFactory.create(sql3, JdbcConstants.DM); +// } catch (Exception e) { +// //e.printStackTrace(); +// } Review Comment: Is there a reason why you didn’t remove the single-line comments? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: notifications-unsubscr...@seata.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@seata.apache.org For additional commands, e-mail: notifications-h...@seata.apache.org