From 64179ea280b593dbf98ad29036717f558d6650ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 29 Mar 2010 19:59:51 +0000 Subject: [PATCH] improved ColUpdateClause improved ColDeleteClause --- .../query/collections/ColUpdateClause.java | 27 +++++++++++----- .../collections/ColDeleteClauseTest.java | 31 +++++++++++++++++++ .../collections/ColUpdateClauseTest.java | 28 +++++++++++++++++ 3 files changed, 78 insertions(+), 8 deletions(-) create mode 100644 querydsl-collections/src/test/java/com/mysema/query/collections/ColDeleteClauseTest.java create mode 100644 querydsl-collections/src/test/java/com/mysema/query/collections/ColUpdateClauseTest.java diff --git a/querydsl-collections/src/main/java/com/mysema/query/collections/ColUpdateClause.java b/querydsl-collections/src/main/java/com/mysema/query/collections/ColUpdateClause.java index 5ca62107a..ad812e779 100644 --- a/querydsl-collections/src/main/java/com/mysema/query/collections/ColUpdateClause.java +++ b/querydsl-collections/src/main/java/com/mysema/query/collections/ColUpdateClause.java @@ -5,6 +5,11 @@ */ package com.mysema.query.collections; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.collections15.BeanMap; + import com.mysema.query.dml.UpdateClause; import com.mysema.query.types.Path; import com.mysema.query.types.expr.EBoolean; @@ -20,6 +25,8 @@ public class ColUpdateClause implements UpdateClause>{ private final Path expr; + private final Map,Object> paths = new HashMap,Object>(); + public ColUpdateClause(Path expr, Iterable col){ this(EvaluatorFactory.DEFAULT, expr, col); } @@ -31,18 +38,22 @@ public class ColUpdateClause implements UpdateClause>{ @Override public long execute() { - throw new UnsupportedOperationException("Not yet implemented"); -// int rv = 0; -// for (T match : query.list(expr.asExpr())){ -// // TODO : update -// rv++; -// } -// return rv; + int rv = 0; + for (T match : query.list(expr.asExpr())){ + BeanMap beanMap = new BeanMap(match); + for (Map.Entry,Object> entry : paths.entrySet()){ + // TODO : support deep updates as well + String propertyName = entry.getKey().getMetadata().getExpression().toString(); + beanMap.put(propertyName, entry.getValue()); + } + rv++; + } + return rv; } @Override public ColUpdateClause set(Path path, U value) { - // TODO Auto-generated method stub + paths.put(path, value); return this; } diff --git a/querydsl-collections/src/test/java/com/mysema/query/collections/ColDeleteClauseTest.java b/querydsl-collections/src/test/java/com/mysema/query/collections/ColDeleteClauseTest.java new file mode 100644 index 000000000..af4199102 --- /dev/null +++ b/querydsl-collections/src/test/java/com/mysema/query/collections/ColDeleteClauseTest.java @@ -0,0 +1,31 @@ +package com.mysema.query.collections; + +import static org.junit.Assert.assertEquals; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.junit.Test; + +import com.mysema.query.animal.Cat; +import com.mysema.query.animal.QCat; + +public class ColDeleteClauseTest { + + @Test + public void testExecute() { + QCat cat = QCat.cat; + List cats = new ArrayList(Arrays.asList(new Cat("Ann"), new Cat("Bob"), new Cat("John"), new Cat("Carl"))); + + ColDeleteClause deleteClause = new ColDeleteClause(cat, cats); + deleteClause.where(cat.name.eq("Bob")); + assertEquals(1, deleteClause.execute()); + + assertEquals(3, cats.size()); + assertEquals("Ann", cats.get(0).getName()); + assertEquals("John", cats.get(1).getName()); + assertEquals("Carl", cats.get(2).getName()); + } + +} diff --git a/querydsl-collections/src/test/java/com/mysema/query/collections/ColUpdateClauseTest.java b/querydsl-collections/src/test/java/com/mysema/query/collections/ColUpdateClauseTest.java new file mode 100644 index 000000000..46f89d2f2 --- /dev/null +++ b/querydsl-collections/src/test/java/com/mysema/query/collections/ColUpdateClauseTest.java @@ -0,0 +1,28 @@ +package com.mysema.query.collections; + +import static org.junit.Assert.*; + +import java.util.Arrays; +import java.util.List; + +import org.junit.Test; + +import com.mysema.query.animal.Cat; +import com.mysema.query.animal.QCat; + +public class ColUpdateClauseTest { + + @Test + public void testExecute() { + QCat cat = QCat.cat; + List cats = Arrays.asList(new Cat("Ann"), new Cat("Bob"), new Cat("John"), new Cat("Carl")); + + ColUpdateClause updateClause = new ColUpdateClause(cat, cats); + updateClause.where(cat.name.eq("Bob")); + updateClause.set(cat.name, "Bobby"); + assertEquals(1, updateClause.execute()); + + assertEquals("Bobby", cats.get(1).getName()); + } + +}