From 5b81e35564d5545da8570ea8b82d62f899692d4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=93=81?= Date: Mon, 16 Nov 2020 01:14:09 +0800 Subject: [PATCH] fix testcase --- .../sql/mysql/visitor/MySqlResourceTest.java | 10 +- .../sql/sqlserver/SqlServerResourceTest.java | 99 +++++++++++++++++++ src/test/resources/bvt/parser/mysql-0.txt | 12 +-- src/test/resources/bvt/parser/sqlserver-0.txt | 20 ++++ 4 files changed, 133 insertions(+), 8 deletions(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SqlServerResourceTest.java create mode 100644 src/test/resources/bvt/parser/sqlserver-0.txt diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/visitor/MySqlResourceTest.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/visitor/MySqlResourceTest.java index 7b5c794368..a049d36d03 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/visitor/MySqlResourceTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/visitor/MySqlResourceTest.java @@ -47,7 +47,12 @@ public class MySqlResourceTest extends TestCase { // exec_test("bvt/parser/mysql-11.txt"); // exec_test("bvt/parser/mysql-12.txt"); // exec_test("bvt/parser/mysql-13.txt"); - exec_test("bvt/parser/mysql-14.txt"); + exec_test("bvt/parser/mysql-0.txt"); + } + + + public void test_14() throws Exception { + exec_test("bvt/parser/mysql-16.txt"); } public void test_16() throws Exception { @@ -65,6 +70,9 @@ public class MySqlResourceTest extends TestCase { String[] items = input.split("---------------------------"); String sql = items[0].trim(); String expect = items[1].trim(); + if (expect != null) { + expect = expect.replaceAll("\\r\\n", "\n"); + } MySqlStatementParser parser = new MySqlStatementParser(sql); List statementList = parser.parseStatementList(); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SqlServerResourceTest.java b/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SqlServerResourceTest.java new file mode 100644 index 0000000000..f267acb313 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SqlServerResourceTest.java @@ -0,0 +1,99 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.sqlserver; + +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; +import com.alibaba.druid.sql.dialect.sqlserver.parser.SQLServerStatementParser; +import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerSchemaStatVisitor; +import com.alibaba.druid.sql.parser.SQLStatementParser; +import com.alibaba.druid.sql.visitor.SchemaStatVisitor; +import com.alibaba.druid.util.JdbcUtils; +import com.alibaba.druid.util.Utils; +import junit.framework.TestCase; +import org.junit.Assert; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.util.List; + +public class SqlServerResourceTest extends TestCase { + + public void test_0() throws Exception { + exec_test("bvt/parser/sqlserver-0.txt"); + } + + public void exec_test(String resource) throws Exception { +// System.out.println(resource); + InputStream is = null; + + is = Thread.currentThread().getContextClassLoader().getResourceAsStream(resource); + Reader reader = new InputStreamReader(is, "UTF-8"); + String input = Utils.read(reader); + JdbcUtils.close(reader); + String[] items = input.split("---------------------------"); + String sql = items[0].trim(); + String expect = null; + + if (items.length > 1) { + expect = items[1].trim(); + expect = expect.replaceAll("\\r\\n", "\n"); + } + + SQLStatementParser parser = new SQLServerStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + + Assert.assertEquals(1, statementList.size()); + + SchemaStatVisitor visitor = new SQLServerSchemaStatVisitor(); + stmt.accept(visitor); + System.out.println(stmt.toString()); + + if (expect != null && !expect.isEmpty()) { + assertEquals(expect, stmt.toString()); + } + +// System.out.println(sql); +// System.out.println("Tables : " + visitor.getTables()); +// System.out.println("fields : " + visitor.getColumns()); +// +// System.out.println(); +// System.out.println("---------------------------"); +// System.out.println(SQLUtils.toOdpsString(stmt)); + } + + void mergValidate(String sql, String expect) { + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + + Assert.assertEquals(1, statementList.size()); + + StringBuilder out = new StringBuilder(); + MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true); + statemen.accept(visitor); + + System.out.println(out.toString()); + + Assert.assertEquals(expect, out.toString()); + } + + +} diff --git a/src/test/resources/bvt/parser/mysql-0.txt b/src/test/resources/bvt/parser/mysql-0.txt index c923088e42..31b5a63569 100644 --- a/src/test/resources/bvt/parser/mysql-0.txt +++ b/src/test/resources/bvt/parser/mysql-0.txt @@ -8,13 +8,11 @@ ORDER BY a.col ASC, a.position ASC --------------------------- SELECT DISTINCT a.id AS "id", a.col AS "col", a.position AS "position", a.panel_id AS "panelId" FROM view_position_info a - LEFT JOIN view_portal b - ON a.panel_id = b.panel_id - LEFT JOIN view_portal_panel c - ON a.panel_id = c.panel_id + LEFT JOIN view_portal b ON a.panel_id = b.panel_id + LEFT JOIN view_portal_panel c ON a.panel_id = c.panel_id WHERE b.user_id = ? - AND (b.is_grid = 'y' - AND c.param_name = 'is_hidden' - AND c.param_value = 'false' + AND ((b.is_grid = 'y' + AND c.param_name = 'is_hidden' + AND c.param_value = 'false') OR b.is_grid != 'y') ORDER BY a.col ASC, a.position ASC \ No newline at end of file diff --git a/src/test/resources/bvt/parser/sqlserver-0.txt b/src/test/resources/bvt/parser/sqlserver-0.txt new file mode 100644 index 0000000000..1c10cbe835 --- /dev/null +++ b/src/test/resources/bvt/parser/sqlserver-0.txt @@ -0,0 +1,20 @@ +SELECT TOP 5 * +FROM ( + SELECT ROW_NUMBER() OVER (ORDER BY RAND()) PAGE_ROW_NUMBER, * + FROM ( + SELECT tc.* FROM TC_CarIdentify AS tc WHERE 1 = 1 + ) AS PAGE_TABLE_ALIAS +) AS PAGE_TABLE_ALIAS +WHERE PAGE_ROW_NUMBER > 0 ORDER BY PAGE_ROW_NUMBER +--------------------------- +SELECT TOP 5 * +FROM ( + SELECT ROW_NUMBER() OVER (ORDER BY RAND()) AS PAGE_ROW_NUMBER, * + FROM ( + SELECT tc.* + FROM TC_CarIdentify tc + WHERE 1 = 1 + ) PAGE_TABLE_ALIAS +) PAGE_TABLE_ALIAS +WHERE PAGE_ROW_NUMBER > 0 +ORDER BY PAGE_ROW_NUMBER