From 79e00ea47e74b93685d3ed522ee244bcd73fa542 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 20 Jun 2010 08:17:12 +0000 Subject: [PATCH] #596094 : added null support in update clauses --- .../hql/hibernate/HibernateUpdateClause.java | 14 ++++++++++++-- .../mysema/query/hql/jpa/JPAUpdateClause.java | 14 ++++++++++++-- .../com/mysema/query/hql/IntegrationTest.java | 17 ++++++++++++++--- .../query/jdoql/dml/JDOQLUpdateClause.java | 14 ++++++++++++-- 4 files changed, 50 insertions(+), 9 deletions(-) diff --git a/querydsl-hql/src/main/java/com/mysema/query/hql/hibernate/HibernateUpdateClause.java b/querydsl-hql/src/main/java/com/mysema/query/hql/hibernate/HibernateUpdateClause.java index 239efab25..ab04d5885 100644 --- a/querydsl-hql/src/main/java/com/mysema/query/hql/hibernate/HibernateUpdateClause.java +++ b/querydsl-hql/src/main/java/com/mysema/query/hql/hibernate/HibernateUpdateClause.java @@ -22,6 +22,7 @@ import com.mysema.query.hql.JPQLTemplates; import com.mysema.query.types.Expr; import com.mysema.query.types.Path; import com.mysema.query.types.expr.EBoolean; +import com.mysema.query.types.path.NullExpr; import com.mysema.query.types.path.PEntity; /** @@ -66,7 +67,11 @@ public class HibernateUpdateClause implements @Override public HibernateUpdateClause set(Path path, T value) { - metadata.addProjection(path.asExpr().eq(value)); + if (value != null){ + metadata.addProjection(path.asExpr().eq(value)); + }else{ + metadata.addProjection(path.asExpr().eq(new NullExpr(path.getType()))); + } return this; } @@ -74,7 +79,12 @@ public class HibernateUpdateClause implements @Override public HibernateUpdateClause set(List> paths, List values) { for (int i = 0; i < paths.size(); i++){ - metadata.addProjection(((Expr)paths.get(i).asExpr()).eq(values.get(i))); + if (values.get(i) != null){ + metadata.addProjection(((Expr)paths.get(i).asExpr()).eq(values.get(i))); + }else{ + metadata.addProjection(((Expr)paths.get(i).asExpr()).eq(new NullExpr(paths.get(i).getType()))); + } + } return this; } diff --git a/querydsl-hql/src/main/java/com/mysema/query/hql/jpa/JPAUpdateClause.java b/querydsl-hql/src/main/java/com/mysema/query/hql/jpa/JPAUpdateClause.java index 580a7eb7c..dad6b544a 100644 --- a/querydsl-hql/src/main/java/com/mysema/query/hql/jpa/JPAUpdateClause.java +++ b/querydsl-hql/src/main/java/com/mysema/query/hql/jpa/JPAUpdateClause.java @@ -21,6 +21,7 @@ import com.mysema.query.hql.JPQLTemplates; import com.mysema.query.types.Expr; import com.mysema.query.types.Path; import com.mysema.query.types.expr.EBoolean; +import com.mysema.query.types.path.NullExpr; import com.mysema.query.types.path.PEntity; /** @@ -60,7 +61,12 @@ public class JPAUpdateClause implements UpdateClause{ @Override public JPAUpdateClause set(Path path, T value) { - metadata.addProjection(path.asExpr().eq(value)); + if (value != null){ + metadata.addProjection(path.asExpr().eq(value)); + }else{ + metadata.addProjection(path.asExpr().eq(new NullExpr(path.getType()))); + } + return this; } @@ -68,7 +74,11 @@ public class JPAUpdateClause implements UpdateClause{ @Override public JPAUpdateClause set(List> paths, List values) { for (int i = 0; i < paths.size(); i++){ - metadata.addProjection(((Expr)paths.get(i).asExpr()).eq(values.get(i))); + if (values.get(i) != null){ + metadata.addProjection(((Expr)paths.get(i).asExpr()).eq(values.get(i))); + }else{ + metadata.addProjection(((Expr)paths.get(i).asExpr()).eq(new NullExpr(paths.get(i).getType()))); + } } return this; } diff --git a/querydsl-hql/src/test/java/com/mysema/query/hql/IntegrationTest.java b/querydsl-hql/src/test/java/com/mysema/query/hql/IntegrationTest.java index 79a06f6de..c1bddcfd8 100644 --- a/querydsl-hql/src/test/java/com/mysema/query/hql/IntegrationTest.java +++ b/querydsl-hql/src/test/java/com/mysema/query/hql/IntegrationTest.java @@ -112,6 +112,19 @@ public class IntegrationTest extends ParsingTest { assertEquals(0l, query().from(cat).where(cat.name.eq("Bob")).count()); } + @Test + public void testUpdate_with_null(){ + session.save(new Cat("Bob",10)); + session.save(new Cat("Steve",11)); + + QCat cat = QCat.cat; + long amount = update(cat).where(cat.name.eq("Bob")) + .set(cat.name, null) + .set(cat.alive, false) + .execute(); + assertEquals(1, amount); + } + @Test public void testDelete(){ session.save(new Cat("Bob",10)); @@ -120,9 +133,7 @@ public class IntegrationTest extends ParsingTest { QCat cat = QCat.cat; long amount = delete(cat).where(cat.name.eq("Bob")) .execute(); - assertEquals(1, amount); - - assertEquals(0l, query().from(cat).where(cat.name.eq("Bob")).count()); + assertEquals(1, amount); } @Test diff --git a/querydsl-jdoql/src/main/java/com/mysema/query/jdoql/dml/JDOQLUpdateClause.java b/querydsl-jdoql/src/main/java/com/mysema/query/jdoql/dml/JDOQLUpdateClause.java index 92eff31b9..454818507 100644 --- a/querydsl-jdoql/src/main/java/com/mysema/query/jdoql/dml/JDOQLUpdateClause.java +++ b/querydsl-jdoql/src/main/java/com/mysema/query/jdoql/dml/JDOQLUpdateClause.java @@ -13,6 +13,7 @@ import com.mysema.query.dml.UpdateClause; import com.mysema.query.types.Expr; import com.mysema.query.types.Path; import com.mysema.query.types.expr.EBoolean; +import com.mysema.query.types.path.NullExpr; /** * UpdateClause implementation for JDO @@ -48,14 +49,23 @@ public class JDOQLUpdateClause implements UpdateClause{ @Override public JDOQLUpdateClause set(List> paths, List values) { for (int i = 0; i < paths.size(); i++){ - metadata.addProjection(((Expr)paths.get(i).asExpr()).eq(values.get(i))); + if (values.get(i) != null){ + metadata.addProjection(((Expr)paths.get(i).asExpr()).eq(values.get(i))); + }else{ + metadata.addProjection(((Expr)paths.get(i).asExpr()).eq(new NullExpr(paths.get(i).getType()))); + } } return this; } @Override public JDOQLUpdateClause set(Path path, T value) { - metadata.addProjection(path.asExpr().eq(value)); + if (value != null){ + metadata.addProjection(path.asExpr().eq(value)); + }else{ + metadata.addProjection(path.asExpr().eq(new NullExpr(path.getType()))); + } + return this; }