r2147 - in trunk/topia-persistence/src: main/java/org/nuiton/topia/framework test/java/org/nuiton/topia/framework
Author: bleny Date: 2010-11-22 15:25:48 +0100 (Mon, 22 Nov 2010) New Revision: 2147 Url: http://nuiton.org/repositories/revision/topia/2147 Log: in TopiaQuery parameters of the subquery was lost in certain cases ; bug fix + regression-test Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaQuery.java trunk/topia-persistence/src/test/java/org/nuiton/topia/framework/TopiaQueryTest.java Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaQuery.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaQuery.java 2010-11-22 14:10:25 UTC (rev 2146) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaQuery.java 2010-11-22 14:25:48 UTC (rev 2147) @@ -34,7 +34,6 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; -import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.util.StringUtil; @@ -984,8 +983,11 @@ // Check existence of paramName int index = params.indexOf(paramName); - // If already defined - if (index != -1) { + if (index == -1) { // if not defined, param is only used + // in sub-query, so add it in the whole query + addParam(paramName, paramValue); + } else { // If already defined + Object existingValue = params.get(index + 1); // Only change paramName in not equals case Modified: trunk/topia-persistence/src/test/java/org/nuiton/topia/framework/TopiaQueryTest.java =================================================================== --- trunk/topia-persistence/src/test/java/org/nuiton/topia/framework/TopiaQueryTest.java 2010-11-22 14:10:25 UTC (rev 2146) +++ trunk/topia-persistence/src/test/java/org/nuiton/topia/framework/TopiaQueryTest.java 2010-11-22 14:25:48 UTC (rev 2147) @@ -124,6 +124,22 @@ // Still 2 params Assert.assertEquals(2, query.getParams().size()); + // non-regression test, when parameters of main query is not empty + // and sub-query use different parameters from the one used in the + // main query, parameters needed by the subquery are lost in the + // resulting query + + // Test 4 : add a subquery with its own parameters + query = new TopiaQuery(QueriedEntity.class, "Q1"). + addEquals(QueriedEntity.TOPIA_ID, "ID1"); + + subquery = new TopiaQuery(QueriedEntity.class, "Q2"). + addEquals(QueriedEntity.PROPERTY_TEST_ADD, "value"); + + query.addSubQuery(QueriedEntity.PROPERTY_TEST_ADD + " IN (?)", subquery); + + log.debug(query); + Assert.assertEquals(4, query.getParams().size()); } /**
participants (1)
-
bleny@users.nuiton.org