/** * Alipay.com Inc. * Copyright (c) 2004-2012 All Rights Reserved. */ package com.alipay.zdal.parser; import java.util.Arrays; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.Map.Entry; import org.junit.Assert; import org.junit.Test; import com.alipay.zdal.common.DBType; import com.alipay.zdal.common.sqljep.function.Comparative; import com.alipay.zdal.parser.result.DefaultSqlParserResult; import com.alipay.zdal.parser.result.SqlParserResult; /** * * @author xiaoqing.zhouxq * @version $Id: SQLParserOfOracleWithDeleteTest.java, v 0.1 2012-5-29 ����10:43:46 xiaoqing.zhouxq Exp $ */ public class SQLParserOfDB2WithDeleteTest { private static final String DELETE = "delete from users where c3 = ? and c4='xiaoqing.zhouxq'"; private static final Object[] DELETE_ARGS = new Object[] { 100 }; private static final String DELETE_NOBIND = "delete from users where c3 = 300 and c4='xiaoqing.zhouxq'"; private static final String PATITION_NAME = "c3"; /** * ���԰󶨲���ʱ���жϲ�ֹ����Ƿ���ȷ. */ @Test public void testParseWithPartination() { SQLParser sqlParser = new DefaultSQLParser(); SqlParserResult parserResult = sqlParser.parse(DELETE, DBType.DB2); Assert.assertEquals("users", parserResult.getTableName()); Assert.assertEquals(true, parserResult.getGroupByEles().isEmpty()); Assert.assertEquals(GroupFunctionType.NORMAL, parserResult.getGroupFuncType()); Assert.assertEquals(DefaultSqlParserResult.DEFAULT_SKIP_MAX, parserResult.getMax(Arrays .asList(DELETE_ARGS))); Assert.assertEquals(true, parserResult.getOrderByEles().isEmpty()); Assert.assertEquals(DefaultSqlParserResult.DEFAULT_SKIP_MAX, parserResult.getSkip(Arrays .asList(DELETE_ARGS))); Set<String> partinationSet = new HashSet<String>(); partinationSet.add(PATITION_NAME); Map<String, Comparative> patitions = parserResult.getComparativeMapChoicer().getColumnsMap( Arrays.asList(DELETE_ARGS), partinationSet); Assert.assertEquals(1, patitions.size()); for (Entry<String, Comparative> entry : patitions.entrySet()) { Assert.assertEquals(PATITION_NAME, entry.getKey()); Assert.assertEquals(Comparative.Equivalent, entry.getValue().getComparison()); Assert.assertEquals(100, entry.getValue().getValue()); } } /** * ���԰󶨲����ǣ��������ֶβ���sql����У���ֹ���ᱨ��. */ @Test public void testParserWithoutPartination() { SQLParser sqlParser = new DefaultSQLParser(); SqlParserResult parserResult = sqlParser.parse(DELETE, DBType.DB2); Assert.assertEquals("users", parserResult.getTableName()); Assert.assertEquals(true, parserResult.getGroupByEles().isEmpty()); Assert.assertEquals(GroupFunctionType.NORMAL, parserResult.getGroupFuncType()); Assert.assertEquals(DefaultSqlParserResult.DEFAULT_SKIP_MAX, parserResult.getMax(Arrays .asList(DELETE_ARGS))); Assert.assertEquals(true, parserResult.getOrderByEles().isEmpty()); Assert.assertEquals(DefaultSqlParserResult.DEFAULT_SKIP_MAX, parserResult.getSkip(Arrays .asList(DELETE_ARGS))); Set<String> partinationSet = new HashSet<String>(); partinationSet.add(PATITION_NAME); Map<String, Comparative> patitions = parserResult.getComparativeMapChoicer().getColumnsMap( Arrays.asList(DELETE_ARGS), partinationSet); Assert.assertEquals(1, patitions.size()); for (Entry<String, Comparative> entry : patitions.entrySet()) { Assert.assertEquals(PATITION_NAME, entry.getKey()); Assert.assertEquals(Comparative.Equivalent, entry.getValue().getComparison()); Assert.assertEquals(100, entry.getValue().getValue()); } } /** * ���԰󶨲���ʱ���ж϶���ֶεIJ�ֹ����Ƿ���ȷ. */ @Test public void testParserWithMultiPartinations() { SQLParser sqlParser = new DefaultSQLParser(); SqlParserResult parserResult = sqlParser.parse(DELETE, DBType.DB2); Assert.assertEquals("users", parserResult.getTableName()); Assert.assertEquals(true, parserResult.getGroupByEles().isEmpty()); Assert.assertEquals(GroupFunctionType.NORMAL, parserResult.getGroupFuncType()); Assert.assertEquals(DefaultSqlParserResult.DEFAULT_SKIP_MAX, parserResult.getMax(Arrays .asList(DELETE_ARGS))); Assert.assertEquals(true, parserResult.getOrderByEles().isEmpty()); Assert.assertEquals(DefaultSqlParserResult.DEFAULT_SKIP_MAX, parserResult.getSkip(Arrays .asList(DELETE_ARGS))); Set<String> partinationSet = new HashSet<String>(); partinationSet.add("c3"); partinationSet.add("c4"); Map<String, Comparative> patitions = parserResult.getComparativeMapChoicer().getColumnsMap( Arrays.asList(DELETE_ARGS), partinationSet); Assert.assertEquals(2, patitions.size()); Comparative idCompa = patitions.get("c3"); Assert.assertEquals(Comparative.Equivalent, idCompa.getComparison()); Assert.assertEquals(100, idCompa.getValue()); Comparative nameCompa = patitions.get("c4"); Assert.assertEquals(Comparative.Equivalent, nameCompa.getComparison()); Assert.assertEquals("xiaoqing.zhouxq", nameCompa.getValue()); } /** * ���Էǰ󶨲���ʱ���жϵ����ֶεIJ�ֹ����Ƿ���ȷ. */ @Test public void testParserWithNoBindPartination() { SQLParser sqlParser = new DefaultSQLParser(); SqlParserResult parserResult = sqlParser.parse(DELETE_NOBIND, DBType.DB2); Assert.assertEquals("users", parserResult.getTableName()); Assert.assertEquals(true, parserResult.getGroupByEles().isEmpty()); Assert.assertEquals(GroupFunctionType.NORMAL, parserResult.getGroupFuncType()); Assert.assertEquals(DefaultSqlParserResult.DEFAULT_SKIP_MAX, parserResult.getMax(null)); Assert.assertEquals(true, parserResult.getOrderByEles().isEmpty()); Assert.assertEquals(DefaultSqlParserResult.DEFAULT_SKIP_MAX, parserResult.getSkip(null)); Set<String> partinationSet = new HashSet<String>(); partinationSet.add(PATITION_NAME); Map<String, Comparative> partitions = parserResult.getComparativeMapChoicer() .getColumnsMap(null, partinationSet); Assert.assertEquals(1, partitions.size()); for (Entry<String, Comparative> entry : partitions.entrySet()) { Assert.assertEquals(PATITION_NAME, entry.getKey()); Assert.assertEquals(300, entry.getValue().getValue()); Assert.assertEquals(Comparative.Equivalent, entry.getValue().getComparison()); } } /** * ���Էǰ󶨲���ʱ���жϵ����ֶεIJ�ֹ����Ƿ���ȷ. */ @Test public void testParserWithNoBindPartination1() { SQLParser sqlParser = new DefaultSQLParser(); String sql = "delete from GP_CLIENTBILL_00_00 " + "where bill_no in ('2012010100013000000000000001','2012010100013000000000000002','2012010100013000000000000003','2012010100013000000000000004') " + "or event_no in ('2012010100013000000000000001','2012010100013000000000000002','2012010100013000000000000003') " + "or relative_no in ('2012010100013000000000000001') " + "or (service_type='TRADE' and service_target in ('2012010100013000000000000001','r2','r3','r4')) " + "or rate_id='3255691'"; SqlParserResult parserResult = sqlParser.parse(sql, DBType.DB2); // Assert.assertEquals("users", parserResult.getTableName()); // Assert.assertEquals(true, parserResult.getGroupByEles().isEmpty()); // Assert.assertEquals(GroupFunctionType.NORMAL, parserResult.getGroupFuncType()); // Assert.assertEquals(DefaultSqlParserResult.DEFAULT_SKIP_MAX, parserResult // .getMax(null)); // Assert.assertEquals(true, parserResult.getOrderByEles().isEmpty()); // Assert.assertEquals(DefaultSqlParserResult.DEFAULT_SKIP_MAX, parserResult // .getSkip(null)); Set<String> partinationSet = new HashSet<String>(); partinationSet.add("EVENT_NO"); // partinationSet.add("MAPPING_NO"); // partinationSet.add("no"); Map<String, Comparative> partitions = parserResult.getComparativeMapChoicer() .getColumnsMap(null, partinationSet); // Assert.assertEquals(1, partitions.size()); // for (Entry<String, Comparative> entry : partitions.entrySet()) { // Assert.assertEquals(PATITION_NAME, entry.getKey()); // Assert.assertEquals(300, entry.getValue().getValue()); // Assert.assertEquals(Comparative.Equivalent, entry.getValue().getComparison()); // } } }