r2919 - in trunk: topia-it/src/test/java/org/nuiton/topia/it/legacy/persistence topia-persistence/src/main/java/org/nuiton/topia/persistence
Author: bleny Date: 2013-12-09 18:08:02 +0100 (Mon, 09 Dec 2013) New Revision: 2919 Url: http://nuiton.org/projects/topia/repository/revisions/2919 Log: fixes HqlAndParametersBuilder if a whereClause contains a or Modified: trunk/topia-it/src/test/java/org/nuiton/topia/it/legacy/persistence/HqlAndParametersBuilderTest.java trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/HqlAndParametersBuilder.java Modified: trunk/topia-it/src/test/java/org/nuiton/topia/it/legacy/persistence/HqlAndParametersBuilderTest.java =================================================================== --- trunk/topia-it/src/test/java/org/nuiton/topia/it/legacy/persistence/HqlAndParametersBuilderTest.java 2013-12-06 10:40:22 UTC (rev 2918) +++ trunk/topia-it/src/test/java/org/nuiton/topia/it/legacy/persistence/HqlAndParametersBuilderTest.java 2013-12-09 17:08:02 UTC (rev 2919) @@ -35,7 +35,7 @@ public class HqlAndParametersBuilderTest { - class MyHqlAndParametersBuilder extends HqlAndParametersBuilder { + protected class MyHqlAndParametersBuilder extends HqlAndParametersBuilder { public MyHqlAndParametersBuilder(Class entityClass) { super(entityClass); @@ -45,7 +45,9 @@ public String putHqlParameterWithAvailableName(String propertyName, Object value) { return super.putHqlParameterWithAvailableName(propertyName, value); } + } + protected MyHqlAndParametersBuilder hqlAndParametersBuilder = new MyHqlAndParametersBuilder(TopiaEntity.class); @@ -139,4 +141,21 @@ } + /** + * Check that the final joining on where clauses (with "and") isn't + * broken by a where clause containing a "or". + */ + @Test + public void testPreventOrKillsAnd() { + + hqlAndParametersBuilder.addEquals("myProp1", "myValue1"); + hqlAndParametersBuilder.addIn("myProp2", SOME_VALUES_WITH_NULL); + + String actualHql = hqlAndParametersBuilder.getHql(); + + Assert.assertFalse(actualHql.contains("topiaEntity_.myProp1 = :myProp1 and topiaEntity_.myProp2 is null or topiaEntity_.myProp2 in (:myProp2, :myProp21, :myProp22)")); + Assert.assertTrue(actualHql.contains("(topiaEntity_.myProp1 = :myProp1) and (topiaEntity_.myProp2 is null or topiaEntity_.myProp2 in (:myProp2, :myProp21, :myProp22))")); + + } + } Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/HqlAndParametersBuilder.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/HqlAndParametersBuilder.java 2013-12-06 10:40:22 UTC (rev 2918) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/HqlAndParametersBuilder.java 2013-12-09 17:08:02 UTC (rev 2919) @@ -215,7 +215,7 @@ StringBuilder hqlStringBuilder = new StringBuilder(); hqlStringBuilder.append("from ").append(entityClass.getCanonicalName()).append(" ").append(alias); if ( ! whereClauses.isEmpty()) { - hqlStringBuilder.append(" where ").append(StringUtils.join(whereClauses, " and ")); + hqlStringBuilder.append(" where (").append(StringUtils.join(whereClauses, ") and (")).append(")"); } if (CollectionUtils.isNotEmpty(orderByArguments)) { hqlStringBuilder.append(" order by ").append(alias).append(".").append(StringUtils.join(orderByArguments, ", " + alias + "."));
participants (1)
-
bleny@users.nuiton.org