From 51139b00a605506e70c88a1929ded1dee366b8df Mon Sep 17 00:00:00 2001 From: wenshao Date: Sat, 20 May 2017 22:24:21 +0800 Subject: [PATCH] add testcase. --- .../oracle/create/OracleCreateViewTest0.java | 74 +++++++ .../oracle/create/OracleCreateViewTest1.java | 184 ++++++++++++++++++ 2 files changed, 258 insertions(+) create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest0.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest1.java diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest0.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest0.java new file mode 100644 index 0000000000..ed77eefbf0 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest0.java @@ -0,0 +1,74 @@ +/* + * Copyright 1999-2017 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.oracle.create; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; +import com.alibaba.druid.util.JdbcConstants; +import org.junit.Assert; + +import java.util.List; + +public class OracleCreateViewTest0 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE OR REPLACE FORCE VIEW \"SC0\".\"V_001\" (\"ID\", \"GROUP_ID\", \"IND_BY_ALL\", \"IND_BY_GROUP\", \"OWNER_MEMBER_ID\", \"OWNER_MEMBER_SEQ\", \"GMT_MODIFIED\") AS \n" + + " select id, GROUP_ID ,IND_BY_ALL, IND_BY_GROUP, OWNER_MEMBER_ID, OWNER_MEMBER_SEQ,gmt_modified "; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + Assert.assertEquals("CREATE OR REPLACE VIEW \"SC0\".\"V_001\"\n" + + "(\n" + + "\t\"ID\", \n" + + "\t\"GROUP_ID\", \n" + + "\t\"IND_BY_ALL\", \n" + + "\t\"IND_BY_GROUP\", \n" + + "\t\"OWNER_MEMBER_ID\", \n" + + "\t\"OWNER_MEMBER_SEQ\", \n" + + "\t\"GMT_MODIFIED\"\n" + + ")\n" + + "AS\n" + + "SELECT id, GROUP_ID, IND_BY_ALL, IND_BY_GROUP, OWNER_MEMBER_ID\n" + + "\t, OWNER_MEMBER_SEQ, gmt_modified\n" + + "FROM DUAL",// + SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + stmt.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("relationships : " + visitor.getRelationships()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(0, visitor.getTables().size()); + +// Assert.assertEquals(0, visitor.getColumns().size()); + +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("customers_part", "customer_id"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest1.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest1.java new file mode 100644 index 0000000000..d5ac35c2b8 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest1.java @@ -0,0 +1,184 @@ +/* + * Copyright 1999-2017 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.oracle.create; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; +import com.alibaba.druid.util.JdbcConstants; +import org.junit.Assert; + +import java.util.List; + +public class OracleCreateViewTest1 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " \n" + + " CREATE OR REPLACE FORCE VIEW \"XBO\".\"VW_SCY\" (\"ID\", \"GMT_CREATE\", \"GMT_MODIFIED\", \"COMPANY_NAME\", \"BIZ_TYPE\", \"BIZ_TYPE_2\", \"SERVICE_TYPE\", \"SERVICE_LEVEL\", \"BUSINESS_ROLE\", \"STATUS\", \"RECOMMENDED\", \"COUNTRY\", \"PROVINCE\", \"CITY\", \"ADDRESS\", \"ZIP\", \"LOGO_FILE\", \"EMAIL\", \"BRIEF_PROFILE\", \"DOMAIN_ID\", \"IS_PASS_AV\", \"KEYWORDS\", \"PROVIDE_PRODUCTS\", \"PURCHASE_PRODUCTS\", \"BRAND_NAME\", \"PROMOTION_VALUE\", \"OWNER_MEMBER_ID\", \"OWNER_SEQ\", \"EMPLOYEES_COUNT\", \"ANNUAL_REVENUE\", \"HOMEPAGE_URL\", \"REG_ADDRESS\", \"TRADE_REGION\", \"TRADE_REGION_USER\", \"REG_CAPITAL\", \"OWNERSHIP_TYPE\", \"ESTABLISHED_YEAR\", \"PRINCIPAL\", \"ANNUAL_PURCHASE\", \"CERTIFICATION\", \"CERTIFICATION_2\", \"CONTACT_MANUFACTURING\", \"YEARS_OEM\", \"CREATE_TYPE\", \"VIDEO_PATH\", \"ABOUTUS_IMAGE_PATH\", \"ABOUTUS_IMAGE_TITLE\", \"CHINESE_NAME\", \"C_RID\", \"V_RID\") AS \n" + + " select /*+ use_hash(v c) ordered */\n" + + " c.id,\n" + + " c.gmt_create,\n" + + " c.gmt_modified,\n" + + " c.company_name,\n" + + " c.biz_type,\n" + + " c.biz_type_2,\n" + + " v.service_type,\n" + + " v.service_level,\n" + + " v.business_role,\n" + + " c.status,\n" + + " c.recommended,\n" + + " c.country,\n" + + " c.province,\n" + + " c.city,\n" + + " c.address,\n" + + " c.zip,\n" + + " c.logo_file,\n" + + " c.email,\n" + + " c.brief_profile,\n" + + " c.domain_id,\n" + + " c.is_pass_av,\n" + + " c.keywords,\n" + + " c.provide_products,\n" + + " c.purchase_products,\n" + + " c.brand_name,\n" + + " c.promotion_value,\n" + + " c.owner_member_id,\n" + + " c.owner_seq,\n" + + " c.employees_count,\n" + + " c.annual_revenue,\n" + + " c.homepage_url,\n" + + " c.reg_address,\n" + + " c.trade_region,\n" + + " c.trade_region_user,\n" + + " c.reg_capital,\n" + + " c.ownership_type,\n" + + " c.established_year,\n" + + " c.principal,\n" + + " c.annual_purchase,\n" + + " c.certification,\n" + + " c.certification_2,\n" + + " c.contact_manufacturing,\n" + + " c.years_oem,\n" + + " v.stage create_type,\n" + + " c.video_path,\n" + + " c.aboutus_image_path,\n" + + " c.aboutus_image_title,\n" + + " c.chinese_name,\n" + + " c.rowid c_rid,\n" + + " v.rowid v_rid\n" + + " from tb_001 v, tb_002 c\n" + + " where (v.service_type in ('gs', 'cgs', 'hkgs', 'twgs') or\n" + + " (v.service_type = 'cnfm' and v.stage = 'new_order'))\n" + + " and v.id = c.id "; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + Assert.assertEquals("CREATE OR REPLACE VIEW \"XBO\".\"VW_SCY\"\n" + + "(\n" + + "\t\"ID\", \n" + + "\t\"GMT_CREATE\", \n" + + "\t\"GMT_MODIFIED\", \n" + + "\t\"COMPANY_NAME\", \n" + + "\t\"BIZ_TYPE\", \n" + + "\t\"BIZ_TYPE_2\", \n" + + "\t\"SERVICE_TYPE\", \n" + + "\t\"SERVICE_LEVEL\", \n" + + "\t\"BUSINESS_ROLE\", \n" + + "\t\"STATUS\", \n" + + "\t\"RECOMMENDED\", \n" + + "\t\"COUNTRY\", \n" + + "\t\"PROVINCE\", \n" + + "\t\"CITY\", \n" + + "\t\"ADDRESS\", \n" + + "\t\"ZIP\", \n" + + "\t\"LOGO_FILE\", \n" + + "\t\"EMAIL\", \n" + + "\t\"BRIEF_PROFILE\", \n" + + "\t\"DOMAIN_ID\", \n" + + "\t\"IS_PASS_AV\", \n" + + "\t\"KEYWORDS\", \n" + + "\t\"PROVIDE_PRODUCTS\", \n" + + "\t\"PURCHASE_PRODUCTS\", \n" + + "\t\"BRAND_NAME\", \n" + + "\t\"PROMOTION_VALUE\", \n" + + "\t\"OWNER_MEMBER_ID\", \n" + + "\t\"OWNER_SEQ\", \n" + + "\t\"EMPLOYEES_COUNT\", \n" + + "\t\"ANNUAL_REVENUE\", \n" + + "\t\"HOMEPAGE_URL\", \n" + + "\t\"REG_ADDRESS\", \n" + + "\t\"TRADE_REGION\", \n" + + "\t\"TRADE_REGION_USER\", \n" + + "\t\"REG_CAPITAL\", \n" + + "\t\"OWNERSHIP_TYPE\", \n" + + "\t\"ESTABLISHED_YEAR\", \n" + + "\t\"PRINCIPAL\", \n" + + "\t\"ANNUAL_PURCHASE\", \n" + + "\t\"CERTIFICATION\", \n" + + "\t\"CERTIFICATION_2\", \n" + + "\t\"CONTACT_MANUFACTURING\", \n" + + "\t\"YEARS_OEM\", \n" + + "\t\"CREATE_TYPE\", \n" + + "\t\"VIDEO_PATH\", \n" + + "\t\"ABOUTUS_IMAGE_PATH\", \n" + + "\t\"ABOUTUS_IMAGE_TITLE\", \n" + + "\t\"CHINESE_NAME\", \n" + + "\t\"C_RID\", \n" + + "\t\"V_RID\"\n" + + ")\n" + + "AS\n" + + "SELECT /*+ use_hash(v c) ordered */ c.id, c.gmt_create, c.gmt_modified, c.company_name, c.biz_type\n" + + "\t, c.biz_type_2, v.service_type, v.service_level, v.business_role, c.status\n" + + "\t, c.recommended, c.country, c.province, c.city, c.address\n" + + "\t, c.zip, c.logo_file, c.email, c.brief_profile, c.domain_id\n" + + "\t, c.is_pass_av, c.keywords, c.provide_products, c.purchase_products, c.brand_name\n" + + "\t, c.promotion_value, c.owner_member_id, c.owner_seq, c.employees_count, c.annual_revenue\n" + + "\t, c.homepage_url, c.reg_address, c.trade_region, c.trade_region_user, c.reg_capital\n" + + "\t, c.ownership_type, c.established_year, c.principal, c.annual_purchase, c.certification\n" + + "\t, c.certification_2, c.contact_manufacturing, c.years_oem, v.stage AS create_type, c.video_path\n" + + "\t, c.aboutus_image_path, c.aboutus_image_title, c.chinese_name, c.rowid AS c_rid, v.rowid AS v_rid\n" + + "FROM tb_001 v, tb_002 c\n" + + "WHERE (v.service_type IN ('gs', 'cgs', 'hkgs', 'twgs')\n" + + "\t\tOR v.service_type = 'cnfm'\n" + + "\t\tAND v.stage = 'new_order')\n" + + "\tAND v.id = c.id",// + SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + stmt.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("relationships : " + visitor.getRelationships()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(2, visitor.getTables().size()); + + Assert.assertEquals(51, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("tb_001", "service_type"))); + } +}