@date 2019/4/30 10:48 @desc sql解析器测试类
| 13 | * @desc sql解析器测试类 |
| 14 | */ |
| 15 | public class SqlParserTest { |
| 16 | private static final Logger logger = LogManager.getLogger(SqlParserTest.class); |
| 17 | |
| 18 | /** |
| 19 | * @desc 获取所有表名 |
| 20 | */ |
| 21 | @Test |
| 22 | public void testGetTableNames(){ |
| 23 | SqlParser sqlParser = new SqlParser("DELETE FROM A"); |
| 24 | List<String> tableNames = sqlParser.getTableNames(); |
| 25 | logger.debug(tableNames.toString()); |
| 26 | Assert.assertEquals(tableNames.size(), 1); |
| 27 | Assert.assertTrue(tableNames.contains("A")); |
| 28 | |
| 29 | sqlParser = new SqlParser("insert into A (select * from B)"); |
| 30 | tableNames = sqlParser.getTableNames(); |
| 31 | logger.debug(tableNames.toString()); |
| 32 | Assert.assertEquals(tableNames.size(), 2); |
| 33 | Assert.assertTrue(tableNames.contains("A")); |
| 34 | Assert.assertTrue(tableNames.contains("B")); |
| 35 | |
| 36 | sqlParser = new SqlParser("UPDATE job SET status = 1, finish = 1, last_update_time = 1 WHERE status = 0 ORDER BY create_time DESC LIMIT 1"); |
| 37 | tableNames = sqlParser.getTableNames(); |
| 38 | logger.debug(tableNames.toString()); |
| 39 | Assert.assertEquals(tableNames.size(), 1); |
| 40 | Assert.assertTrue(tableNames.contains("job")); |
| 41 | |
| 42 | sqlParser = new SqlParser("select * from (select id, name from B) A"); |
| 43 | tableNames = sqlParser.getTableNames(); |
| 44 | logger.debug(tableNames.toString()); |
| 45 | Assert.assertEquals(tableNames.size(), 1); |
| 46 | Assert.assertFalse(tableNames.contains("A")); |
| 47 | Assert.assertTrue(tableNames.contains("B")); |
| 48 | |
| 49 | sqlParser = new SqlParser("SELECT A.name AS name, A.age AS age, A.sex AS sex, B.name AS subject, B.value AS score FROM Student A LEFT JOIN Score B ON A.id = B.student WHERE B.name = 'math' AND B.value > 90 OR (B.name = 'chinese' AND B.value > 85) AND A.class_id IN (SELECT * FROM Class WHERE grade IN (2, 3))"); |
| 50 | tableNames = sqlParser.getTableNames(); |
| 51 | logger.debug(tableNames.toString()); |
| 52 | Assert.assertEquals(tableNames.size(), 3); |
| 53 | Assert.assertTrue(tableNames.contains("Student")); |
| 54 | Assert.assertTrue(tableNames.contains("Score")); |
| 55 | Assert.assertTrue(tableNames.contains("Class")); |
| 56 | } |
| 57 | |
| 58 | /** |
| 59 | * @desc 获取列名 |
| 60 | */ |
| 61 | @Test |
| 62 | public void testGetColumnNames(){ |
| 63 | SqlParser sqlParser = new SqlParser("insert into A (select * from B)"); |
| 64 | List<String> columnNames = sqlParser.getColumnNames(); |
| 65 | logger.debug(columnNames.toString()); |
| 66 | Assert.assertEquals(columnNames.size(), 0); |
| 67 | |
| 68 | sqlParser = new SqlParser("insert into A(a, b) (select * from B)"); |
| 69 | columnNames = sqlParser.getColumnNames(); |
| 70 | logger.debug(columnNames.toString()); |
| 71 | Assert.assertEquals(columnNames.size(), 2); |
| 72 | Assert.assertTrue(columnNames.contains("a")); |
nothing calls this directly
no outgoing calls
no test coverage detected