/* * Copyright 2010 Dennis Butterstein, Ralf Joachim * * 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. * * $Id: SQLStatementDelete.java 8469 2009-12-28 16:47:54Z rjoachim $ */ package org.castor.cpa.persistence.sql.query.visitor; import java.util.Map; import org.castor.cpa.persistence.sql.query.Assignment; import org.castor.cpa.persistence.sql.query.Delete; import org.castor.cpa.persistence.sql.query.Select; import org.castor.cpa.persistence.sql.query.Update; import org.castor.cpa.persistence.sql.query.condition.AndCondition; import org.castor.cpa.persistence.sql.query.condition.Compare; import org.castor.cpa.persistence.sql.query.condition.CompareOperator; import org.castor.cpa.persistence.sql.query.condition.Condition; import org.castor.cpa.persistence.sql.query.condition.IsNullPredicate; import org.castor.cpa.persistence.sql.query.condition.OrCondition; import org.castor.cpa.persistence.sql.query.expression.Column; import org.castor.cpa.persistence.sql.query.expression.NextVal; import org.castor.cpa.persistence.sql.query.expression.Parameter; import org.junit.Test; import static org.junit.Assert.*; /** * Test if ParameterVisitor works as expected. * * @author <a href="mailto:madsheepscarer AT googlemail DOT com">Dennis Butterstein</a> * @version $Revision: 8469 $ $Date: 2006-04-25 15:08:23 -0600 (Tue, 25 Apr 2006) $ */ public final class TestParameterVisitor { //---------------------------SELECT-------------------------------------------------------- @Test public void testSelectNoCondition() throws Exception { Select select = new Select("TestTable"); ParameterVisitor parmVis = new ParameterVisitor(); parmVis.visit(select); Map<String, Integer> parameters = parmVis.getParameters(); assertTrue(parameters.isEmpty()); } @Test public void testSelectEmptyCondition() throws Exception { Select select = new Select("TestTable"); Condition condition = new AndCondition(); select.setCondition(condition); ParameterVisitor parmVis = new ParameterVisitor(); parmVis.visit(select); Map<String, Integer> parameters = parmVis.getParameters(); assertTrue(parameters.isEmpty()); } @Test public void testSelectConditionCompare() throws Exception { Select select = new Select("TestTable"); Condition condition = new AndCondition(); condition.and(new Column("id").equal(new Parameter("param1"))); condition.and(new Column("id").equal(new Column("param2"))); condition.and(new Column("id").equal(new NextVal("param2"))); select.setCondition(condition); ParameterVisitor parmVis = new ParameterVisitor(); parmVis.visit(select); Map<String, Integer> parameters = parmVis.getParameters(); assertFalse(parameters.isEmpty()); assertEquals(1, parameters.size()); assertEquals(new Integer(1), parameters.get("param1")); } @Test public void testSelectAndCondition() throws Exception { Select select = new Select("TestTable"); Condition condition = new AndCondition(); condition.and(new Column("id").equal(new Parameter("param1"))); condition.and(new Column("id2").equal(new Parameter("param2"))); condition.and(new IsNullPredicate(new Parameter("param3"), false)); condition.and(new IsNullPredicate(new Parameter("param4"), true)); condition.and(new IsNullPredicate(new Column("param5"), false)); condition.and(new IsNullPredicate(new Column("param6"), true)); condition.and(new IsNullPredicate(new NextVal("param7"), false)); condition.and(new IsNullPredicate(new NextVal("param8"), true)); select.setCondition(condition); ParameterVisitor parmVis = new ParameterVisitor(); parmVis.visit(select); Map<String, Integer> parameters = parmVis.getParameters(); assertFalse(parameters.isEmpty()); assertEquals(4, parameters.size()); assertEquals(new Integer(1), parameters.get("param1")); assertEquals(new Integer(2), parameters.get("param2")); assertEquals(new Integer(3), parameters.get("param3")); assertEquals(new Integer(4), parameters.get("param4")); } @Test public void testSelectOrCondition() throws Exception { Select select = new Select("TestTable"); Condition condition = new OrCondition(); condition.or(new Column("id").equal(new Parameter("param1"))); condition.or(new Column("id").equal(new Parameter("param2"))); select.setCondition(condition); ParameterVisitor parmVis = new ParameterVisitor(); parmVis.visit(select); Map<String, Integer> parameters = parmVis.getParameters(); assertFalse(parameters.isEmpty()); assertEquals(2, parameters.size()); assertEquals(new Integer(1), parameters.get("param1")); assertEquals(new Integer(2), parameters.get("param2")); } @Test public void testSelectNestedConditions() throws Exception { Select select = new Select("TestTable"); Condition condition = new AndCondition(); AndCondition andCond = new AndCondition(); andCond.and(new Column("id").equal(new Parameter("param1"))); andCond.and(new Column("id2").equal(new Parameter("param2"))); OrCondition orCond = new OrCondition(); orCond.or(new Column("id3").equal(new Parameter("param3"))); orCond.or(new Column("id4").equal(new Parameter("param4"))); condition.and(andCond); condition.and(orCond); select.setCondition(condition); ParameterVisitor parmVis = new ParameterVisitor(); parmVis.visit(select); Map<String, Integer> parameters = parmVis.getParameters(); assertFalse(parameters.isEmpty()); assertEquals(4, parameters.size()); assertEquals(new Integer(1), parameters.get("param1")); assertEquals(new Integer(2), parameters.get("param2")); assertEquals(new Integer(3), parameters.get("param3")); assertEquals(new Integer(4), parameters.get("param4")); } @Test public void testSelectIsNullPredicate() throws Exception { Select select = new Select("TestTable"); Condition condition = new AndCondition(); condition.and(new IsNullPredicate(new Parameter("param1"))); condition.and(new IsNullPredicate(new Column("column1"))); select.setCondition(condition); ParameterVisitor parmVis = new ParameterVisitor(); parmVis.visit(select); Map<String, Integer> parameters = parmVis.getParameters(); assertFalse(parameters.isEmpty()); assertEquals(1, parameters.size()); assertEquals(new Integer(1), parameters.get("param1")); } //---------------------------DELETE-------------------------------------------------------- @Test public void testDeleteNoCondition() throws Exception { Delete delete = new Delete("TestTable"); ParameterVisitor parmVis = new ParameterVisitor(); parmVis.visit(delete); Map<String, Integer> parameters = parmVis.getParameters(); assertTrue(parameters.isEmpty()); } @Test public void testDeleteEmptyCondition() throws Exception { Delete delete = new Delete("TestTable"); Condition condition = new AndCondition(); delete.setCondition(condition); ParameterVisitor parmVis = new ParameterVisitor(); parmVis.visit(delete); Map<String, Integer> parameters = parmVis.getParameters(); assertTrue(parameters.isEmpty()); } @Test public void testDeleteConditionCompare() throws Exception { Delete delete = new Delete("TestTable"); Condition condition = new AndCondition(); condition.and(new Column("id").equal(new Parameter("param1"))); condition.and(new Column("id").equal(new Column("param2"))); condition.and(new Column("id").equal(new NextVal("param2"))); delete.setCondition(condition); ParameterVisitor parmVis = new ParameterVisitor(); parmVis.visit(delete); Map<String, Integer> parameters = parmVis.getParameters(); assertFalse(parameters.isEmpty()); assertEquals(1, parameters.size()); assertEquals(new Integer(1), parameters.get("param1")); } @Test public void testDeleteAndCondition() throws Exception { Delete delete = new Delete("TestTable"); Condition condition = new AndCondition(); condition.and(new Column("id").equal(new Parameter("param1"))); condition.and(new Column("id2").equal(new Parameter("param2"))); condition.and(new Column("id3").equal(new Column("param2"))); condition.and(new Column("id4").equal(new NextVal("param2"))); condition.and(new IsNullPredicate(new Parameter("param3"), false)); condition.and(new IsNullPredicate(new Parameter("param4"), true)); condition.and(new IsNullPredicate(new Column("param5"), false)); condition.and(new IsNullPredicate(new Column("param6"), true)); condition.and(new IsNullPredicate(new NextVal("param7"), false)); condition.and(new IsNullPredicate(new NextVal("param8"), true)); delete.setCondition(condition); ParameterVisitor parmVis = new ParameterVisitor(); parmVis.visit(delete); Map<String, Integer> parameters = parmVis.getParameters(); assertFalse(parameters.isEmpty()); assertEquals(4, parameters.size()); assertEquals(new Integer(1), parameters.get("param1")); assertEquals(new Integer(2), parameters.get("param2")); assertEquals(new Integer(3), parameters.get("param3")); assertEquals(new Integer(4), parameters.get("param4")); } @Test public void testDeleteOrCondition() throws Exception { Delete delete = new Delete("TestTable"); Condition condition = new OrCondition(); condition.or(new Column("id").equal(new Parameter("param1"))); condition.or(new Column("id2").equal(new Parameter("param2"))); condition.or(new Column("id3").equal(new Column("param3"))); condition.or(new Column("id4").equal(new NextVal("param4"))); condition.or(new IsNullPredicate(new Parameter("param5"), false)); condition.or(new IsNullPredicate(new Parameter("param6"), true)); condition.or(new IsNullPredicate(new Column("param7"), false)); condition.or(new IsNullPredicate(new Column("param8"), true)); condition.or(new IsNullPredicate(new NextVal("param9"), false)); condition.or(new IsNullPredicate(new NextVal("param10"), true)); delete.setCondition(condition); ParameterVisitor parmVis = new ParameterVisitor(); parmVis.visit(delete); Map<String, Integer> parameters = parmVis.getParameters(); assertFalse(parameters.isEmpty()); assertEquals(4, parameters.size()); assertEquals(new Integer(1), parameters.get("param1")); assertEquals(new Integer(2), parameters.get("param2")); assertEquals(new Integer(3), parameters.get("param5")); assertEquals(new Integer(4), parameters.get("param6")); } @Test public void testDeleteNestedConditions() throws Exception { Delete delete = new Delete("TestTable"); Condition condition = new AndCondition(); AndCondition andCond = new AndCondition(); andCond.and(new Column("id").equal(new Parameter("param1"))); andCond.and(new Column("id2").equal(new Parameter("param2"))); andCond.and(new Column("id3").equal(new Column("column3"))); andCond.and(new Column("id4").equal(new NextVal("param4"))); OrCondition orCond = new OrCondition(); orCond.or(new Column("id5").equal(new Parameter("param5"))); orCond.or(new Column("id6").equal(new Parameter("param6"))); orCond.or(new Column("id7").equal(new Column("param7"))); orCond.or(new Column("id8").equal(new NextVal("param8"))); condition.and(andCond); condition.and(orCond); delete.setCondition(condition); ParameterVisitor parmVis = new ParameterVisitor(); parmVis.visit(delete); Map<String, Integer> parameters = parmVis.getParameters(); assertFalse(parameters.isEmpty()); assertEquals(4, parameters.size()); assertEquals(new Integer(1), parameters.get("param1")); assertEquals(new Integer(2), parameters.get("param2")); assertEquals(new Integer(3), parameters.get("param5")); assertEquals(new Integer(4), parameters.get("param6")); } @Test public void testDeleteIsNullPredicate() throws Exception { Delete delete = new Delete("TestTable"); Condition condition = new AndCondition(); condition.and(new IsNullPredicate(new Parameter("param1"))); condition.and(new IsNullPredicate(new Column("column1"))); delete.setCondition(condition); ParameterVisitor parmVis = new ParameterVisitor(); parmVis.visit(delete); Map<String, Integer> parameters = parmVis.getParameters(); assertFalse(parameters.isEmpty()); assertEquals(1, parameters.size()); assertEquals(new Integer(1), parameters.get("param1")); } //---------------------------UPDATE-------------------------------------------------------- @Test public void testUpdateNoAssignmentNoCondition() throws Exception { Update update = new Update("TestTable"); ParameterVisitor parmVis = new ParameterVisitor(); parmVis.visit(update); Map<String, Integer> parameters = parmVis.getParameters(); assertTrue(parameters.isEmpty()); } @Test public void testUpdateAssignmentWithoutCondition() throws Exception { Update update = new Update("TestTable"); update.addAssignment(new Column("id"), new Parameter("param1")); update.addAssignment(new Column("id2"), new Parameter("param2")); update.addAssignment(new Column("id3"), new Column("param3")); update.addAssignment(new Column("id4"), new NextVal("param4")); ParameterVisitor parmVis = new ParameterVisitor(); parmVis.visit(update); Map<String, Integer> parameters = parmVis.getParameters(); assertFalse(parameters.isEmpty()); assertEquals(2, parameters.size()); assertEquals(new Integer(1), parameters.get("param1")); assertEquals(new Integer(2), parameters.get("param2")); } @Test public void testUpdateConditionWithAssignment() throws Exception { Update update = new Update("TestTable"); update.addAssignment(new Column("id"), new Parameter("param1")); update.addAssignment(new Column("id2"), new Parameter("param2")); update.addAssignment(new Column("id3"), new Column("param3")); update.addAssignment(new Column("id4"), new NextVal("param4")); Condition condition = new AndCondition(); condition.and(new Column("id5").equal(new Parameter("param5"))); condition.and(new Column("id6").equal(new Parameter("param6"))); update.addAssignment(new Column("id7"), new Column("param7")); update.addAssignment(new Column("id8"), new NextVal("param8")); update.setCondition(condition); ParameterVisitor parmVis = new ParameterVisitor(); parmVis.visit(update); Map<String, Integer> parameters = parmVis.getParameters(); assertFalse(parameters.isEmpty()); assertEquals(4, parameters.size()); assertEquals(new Integer(1), parameters.get("param1")); assertEquals(new Integer(2), parameters.get("param2")); assertEquals(new Integer(3), parameters.get("param5")); assertEquals(new Integer(4), parameters.get("param6")); } //---------------------------METHODS-------------------------------------------------------- @Test public void testVisitAssignmentColumn() throws Exception { ParameterVisitor parmVis = new ParameterVisitor(); Assignment assignment = new Assignment(new Column("column1"), new Column("column2")); parmVis.visit(assignment); Map<String, Integer> parameters = parmVis.getParameters(); assertTrue(parameters.isEmpty()); } @Test public void testVisitAssignmentNextVal() throws Exception { ParameterVisitor parmVis = new ParameterVisitor(); Assignment assignment = new Assignment(new Column("column1"), new NextVal("column2")); parmVis.visit(assignment); Map<String, Integer> parameters = parmVis.getParameters(); assertTrue(parameters.isEmpty()); } @Test public void testVisitAssignmentParameter() throws Exception { ParameterVisitor parmVis = new ParameterVisitor(); Assignment assignment = new Assignment(new Column("column1"), new Parameter("param1")); parmVis.visit(assignment); Map<String, Integer> parameters = parmVis.getParameters(); assertFalse(parameters.isEmpty()); assertEquals(1, parameters.size()); assertEquals(new Integer(1), parameters.get("param1")); } @Test public void testVisitAndCondition() throws Exception { ParameterVisitor parmVis = new ParameterVisitor(); AndCondition condition = new AndCondition(); condition.and(new Column("id").equal(new Column("param1"))); condition.and(new Column("id2").equal(new NextVal("param2"))); condition.and(new Column("id3").equal(new Parameter("param3"))); condition.and(new IsNullPredicate(new Column("param4"))); condition.and(new IsNullPredicate(new NextVal("param5"))); condition.and(new IsNullPredicate(new Parameter("param6"))); condition.and(new IsNullPredicate(new Column("param7"), false)); condition.and(new IsNullPredicate(new NextVal("param8"), false)); condition.and(new IsNullPredicate(new Parameter("param9"), false)); parmVis.visit(condition); Map<String, Integer> parameters = parmVis.getParameters(); assertFalse(parameters.isEmpty()); assertEquals(3, parameters.size()); assertEquals(new Integer(1), parameters.get("param3")); assertEquals(new Integer(2), parameters.get("param6")); assertEquals(new Integer(3), parameters.get("param9")); } @Test public void testVisitCompareColumns() throws Exception { ParameterVisitor parmVis = new ParameterVisitor(); Compare comp = new Compare(new Column("id"), CompareOperator.EQ, new Column("id2")); parmVis.visit(comp); Map<String, Integer> parameters = parmVis.getParameters(); assertTrue(parameters.isEmpty()); } @Test public void testVisitCompareNextVal() throws Exception { ParameterVisitor parmVis = new ParameterVisitor(); Compare comp = new Compare(new NextVal("id"), CompareOperator.EQ, new NextVal("id2")); parmVis.visit(comp); Map<String, Integer> parameters = parmVis.getParameters(); assertTrue(parameters.isEmpty()); } @Test public void testVisitCompareParameter() throws Exception { ParameterVisitor parmVis = new ParameterVisitor(); Compare comp = new Compare(new Parameter("param1"), CompareOperator.EQ, new Parameter("param2")); parmVis.visit(comp); Map<String, Integer> parameters = parmVis.getParameters(); assertFalse(parameters.isEmpty()); assertEquals(2, parameters.size()); assertEquals(new Integer(1), parameters.get("param1")); assertEquals(new Integer(2), parameters.get("param2")); } @Test public void testVisitCompareColumnParameter() throws Exception { ParameterVisitor parmVis = new ParameterVisitor(); Compare comp = new Compare(new Column("id"), CompareOperator.EQ, new Parameter("param1")); parmVis.visit(comp); Map<String, Integer> parameters = parmVis.getParameters(); assertFalse(parameters.isEmpty()); assertEquals(1, parameters.size()); assertEquals(new Integer(1), parameters.get("param1")); } @Test public void testVisitCompareColumnNextVal() throws Exception { ParameterVisitor parmVis = new ParameterVisitor(); Compare comp = new Compare(new Column("id"), CompareOperator.EQ, new NextVal("id2")); parmVis.visit(comp); Map<String, Integer> parameters = parmVis.getParameters(); assertTrue(parameters.isEmpty()); } @Test public void testVisitCompareNextValParameter() throws Exception { ParameterVisitor parmVis = new ParameterVisitor(); Compare comp = new Compare(new NextVal("id"), CompareOperator.EQ, new Parameter("param1")); parmVis.visit(comp); Map<String, Integer> parameters = parmVis.getParameters(); assertFalse(parameters.isEmpty()); assertEquals(1, parameters.size()); assertEquals(new Integer(1), parameters.get("param1")); } @Test public void testVisitIsNullPredicateParameter() throws Exception { ParameterVisitor parmVis = new ParameterVisitor(); IsNullPredicate isNullPredicate = new IsNullPredicate(new Parameter("param1"), false); parmVis.visit(isNullPredicate); Map<String, Integer> parameters = parmVis.getParameters(); assertFalse(parameters.isEmpty()); assertEquals(1, parameters.size()); assertEquals(new Integer(1), parameters.get("param1")); isNullPredicate = new IsNullPredicate(new Parameter("param2")); parmVis.visit(isNullPredicate); assertEquals(2, parameters.size()); assertEquals(new Integer(1), parameters.get("param1")); assertEquals(new Integer(2), parameters.get("param2")); } @Test public void testVisitOrCondition() throws Exception { ParameterVisitor parmVis = new ParameterVisitor(); OrCondition condition = new OrCondition(); condition.or(new Column("id").equal(new Column("param1"))); condition.or(new Column("id2").equal(new NextVal("param2"))); condition.or(new Column("id3").equal(new Parameter("param3"))); condition.or(new IsNullPredicate(new Column("param4"))); condition.or(new IsNullPredicate(new NextVal("param5"))); condition.or(new IsNullPredicate(new Parameter("param6"))); condition.or(new IsNullPredicate(new Column("param7"), false)); condition.or(new IsNullPredicate(new NextVal("param8"), false)); condition.or(new IsNullPredicate(new Parameter("param9"), false)); parmVis.visit(condition); Map<String, Integer> parameters = parmVis.getParameters(); assertFalse(parameters.isEmpty()); assertEquals(3, parameters.size()); assertEquals(new Integer(1), parameters.get("param3")); assertEquals(new Integer(2), parameters.get("param6")); assertEquals(new Integer(3), parameters.get("param9")); } @Test public void testVisitParameter() throws Exception { ParameterVisitor parmVis = new ParameterVisitor(); Parameter parameter = new Parameter("param1"); parmVis.visit(parameter); Map<String, Integer> parameters = parmVis.getParameters(); assertFalse(parameters.isEmpty()); assertEquals(1, parameters.size()); assertEquals(new Integer(1), parameters.get("param1")); } //----------------------------------------------------------------------------------- }