diff --git a/querydsl-collections/src/main/java/com/mysema/query/collections/ColDeleteClause.java b/querydsl-collections/src/main/java/com/mysema/query/collections/ColDeleteClause.java index cf84c0cc4..62126e96d 100644 --- a/querydsl-collections/src/main/java/com/mysema/query/collections/ColDeleteClause.java +++ b/querydsl-collections/src/main/java/com/mysema/query/collections/ColDeleteClause.java @@ -47,14 +47,23 @@ public class ColDeleteClause implements DeleteClause>{ } @Override - public ColDeleteClause where(EBoolean... o) { - query.where(o); + public

ColDeleteClause set(Path

path, P value) { + if (value != null){ + query.where(path.asExpr().eq(value)); + }else{ + query.where(path.isNull()); + } return this; } + @Override + public ColDeleteClause where(EBoolean... o) { + query.where(o); + return this; + } + @Override public String toString(){ return "delete " + query.toString(); } - } diff --git a/querydsl-core/src/main/java/com/mysema/query/dml/StoreClause.java b/querydsl-core/src/main/java/com/mysema/query/dml/DMLClause.java similarity index 70% rename from querydsl-core/src/main/java/com/mysema/query/dml/StoreClause.java rename to querydsl-core/src/main/java/com/mysema/query/dml/DMLClause.java index ff0234c40..622762463 100644 --- a/querydsl-core/src/main/java/com/mysema/query/dml/StoreClause.java +++ b/querydsl-core/src/main/java/com/mysema/query/dml/DMLClause.java @@ -10,17 +10,17 @@ import javax.annotation.Nullable; import com.mysema.query.types.Path; /** - * Parent interface for InsertClause and UpdateClause + * Parent interface for DeleteClause, InsertClause and UpdateCluase * * @author tiwe * * @param */ -public interface StoreClause> { +public interface DMLClause> { /** - * Execute the clause and return the amount of inserted/updated rows/items + * Execute the clause and return the amount of deleted/inserted/updated rows/items * * @return */ diff --git a/querydsl-core/src/main/java/com/mysema/query/dml/DeleteClause.java b/querydsl-core/src/main/java/com/mysema/query/dml/DeleteClause.java index 20e70c248..e2f9cf920 100644 --- a/querydsl-core/src/main/java/com/mysema/query/dml/DeleteClause.java +++ b/querydsl-core/src/main/java/com/mysema/query/dml/DeleteClause.java @@ -14,7 +14,7 @@ import com.mysema.query.types.expr.EBoolean; * * @param */ -public interface DeleteClause> { +public interface DeleteClause> extends DMLClause{ /** * Defines the filter constraints @@ -24,10 +24,4 @@ public interface DeleteClause> { */ C where(EBoolean... o); - /** - * Execute the delete clause and return the amount of deleted rows/items - * - * @return - */ - long execute(); } diff --git a/querydsl-core/src/main/java/com/mysema/query/dml/InsertClause.java b/querydsl-core/src/main/java/com/mysema/query/dml/InsertClause.java index 4cabc6456..2b1778360 100644 --- a/querydsl-core/src/main/java/com/mysema/query/dml/InsertClause.java +++ b/querydsl-core/src/main/java/com/mysema/query/dml/InsertClause.java @@ -15,7 +15,7 @@ import com.mysema.query.types.SubQuery; * * @param */ -public interface InsertClause> extends StoreClause{ +public interface InsertClause> extends DMLClause{ /** * Define the columns to be populated diff --git a/querydsl-core/src/main/java/com/mysema/query/dml/UpdateClause.java b/querydsl-core/src/main/java/com/mysema/query/dml/UpdateClause.java index 92af95be7..a7797baf6 100644 --- a/querydsl-core/src/main/java/com/mysema/query/dml/UpdateClause.java +++ b/querydsl-core/src/main/java/com/mysema/query/dml/UpdateClause.java @@ -17,7 +17,7 @@ import com.mysema.query.types.expr.EBoolean; * * @param */ -public interface UpdateClause> extends StoreClause{ +public interface UpdateClause> extends DMLClause{ /** * Set the paths to be updated diff --git a/querydsl-core/src/main/java/com/mysema/query/types/Custom.java b/querydsl-core/src/main/java/com/mysema/query/types/Custom.java index a4ba1f3b9..6cb04a0ef 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/Custom.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/Custom.java @@ -7,6 +7,8 @@ package com.mysema.query.types; import java.util.List; +import com.mysema.query.types.expr.ESimple; + /** * Custom provides base types for custom expressions with integrated * serialization templates @@ -48,6 +50,6 @@ public interface Custom { * * @return */ - Expr asExpr(); + ESimple asExpr(); } diff --git a/querydsl-core/src/main/java/com/mysema/query/types/Expr.java b/querydsl-core/src/main/java/com/mysema/query/types/Expr.java index f1226bbee..e3507ec20 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/Expr.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/Expr.java @@ -43,15 +43,6 @@ public abstract class Expr implements Serializable{ public abstract void accept(Visitor v); - /** - * Used for safe casts from Path, SubQuery, Operation and Custom to Expr - * - * @return - */ - public final Expr asExpr(){ - return this; - } - public abstract Expr as(Path alias); /** diff --git a/querydsl-core/src/main/java/com/mysema/query/types/Operation.java b/querydsl-core/src/main/java/com/mysema/query/types/Operation.java index 18a6911e7..3010035da 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/Operation.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/Operation.java @@ -7,6 +7,8 @@ package com.mysema.query.types; import java.util.List; +import com.mysema.query.types.expr.ESimple; + /** * Operation represents an operation with operator and arguments * @@ -20,7 +22,7 @@ public interface Operation { * * @return */ - Expr asExpr(); + ESimple asExpr(); /** * Get the argument with the given index diff --git a/querydsl-core/src/main/java/com/mysema/query/types/Path.java b/querydsl-core/src/main/java/com/mysema/query/types/Path.java index 62ce568b6..8a5a5a4ab 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/Path.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/Path.java @@ -8,6 +8,7 @@ package com.mysema.query.types; import java.lang.reflect.AnnotatedElement; import com.mysema.query.types.expr.EBoolean; +import com.mysema.query.types.expr.ESimple; /** * Path represents a path expression @@ -21,7 +22,7 @@ public interface Path { * * @return */ - Expr asExpr(); + ESimple asExpr(); /** * Get the metadata for this path diff --git a/querydsl-core/src/main/java/com/mysema/query/types/SubQuery.java b/querydsl-core/src/main/java/com/mysema/query/types/SubQuery.java index 5e928c55c..51ac32e5d 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/SubQuery.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/SubQuery.java @@ -7,6 +7,8 @@ package com.mysema.query.types; import com.mysema.query.QueryMetadata; import com.mysema.query.types.expr.EBoolean; +import com.mysema.query.types.expr.ESimple; +import com.mysema.query.types.query.Detachable; /** * @@ -46,6 +48,6 @@ public interface SubQuery{ * * @return */ - Expr asExpr(); + ESimple asExpr(); } diff --git a/querydsl-core/src/main/java/com/mysema/query/types/custom/CustomMixin.java b/querydsl-core/src/main/java/com/mysema/query/types/custom/CustomMixin.java index 150b40452..bf3cd5019 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/custom/CustomMixin.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/custom/CustomMixin.java @@ -11,6 +11,7 @@ import java.util.List; import com.mysema.query.types.Custom; import com.mysema.query.types.Expr; import com.mysema.query.types.Template; +import com.mysema.query.types.expr.ESimple; /** * Mixin implementation of the Custom interface @@ -23,7 +24,7 @@ public final class CustomMixin implements Custom, Serializable { private static final long serialVersionUID = 6951623726800809083L; - private final Expr self; + private final ESimple self; private final List> args; @@ -75,7 +76,7 @@ public final class CustomMixin implements Custom, Serializable { } @Override - public Expr asExpr() { + public ESimple asExpr() { return self; } } diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/ESimple.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/ESimple.java index 751778080..6c8bb093f 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/ESimple.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/ESimple.java @@ -36,6 +36,15 @@ public abstract class ESimple extends Expr { public ESimple(Class type) { super(type); } + + /** + * Used for safe casts from Path, SubQuery, Operation and Custom to Expr + * + * @return + */ + public final ESimple asExpr(){ + return this; + } @Override public ENumber count(){ diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/OperationMixin.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/OperationMixin.java index 2d4702b4a..074954656 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/OperationMixin.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/OperationMixin.java @@ -26,7 +26,7 @@ public final class OperationMixin implements Operation, Serializable { private final Operator operator; - private final Expr self; + private final ESimple self; public OperationMixin(Operation self, Operator operator, List> args){ this.self = self.asExpr(); @@ -35,7 +35,7 @@ public final class OperationMixin implements Operation, Serializable { } @Override - public Expr asExpr() { + public ESimple asExpr() { return self; } diff --git a/querydsl-core/src/main/java/com/mysema/query/types/path/PathMixin.java b/querydsl-core/src/main/java/com/mysema/query/types/path/PathMixin.java index e86dc8a5b..8fd6c51ed 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/path/PathMixin.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/path/PathMixin.java @@ -16,6 +16,7 @@ import com.mysema.query.types.Path; import com.mysema.query.types.PathMetadata; import com.mysema.query.types.PathType; import com.mysema.query.types.expr.EBoolean; +import com.mysema.query.types.expr.ESimple; import com.mysema.query.types.expr.OBoolean; import com.mysema.util.ReflectionUtils; @@ -38,7 +39,7 @@ public final class PathMixin implements Path, Serializable { private final Path root; - private final Expr self; + private final ESimple self; @Nullable private AnnotatedElement annotatedElement; @@ -50,7 +51,7 @@ public final class PathMixin implements Path, Serializable { } @Override - public Expr asExpr() { + public ESimple asExpr() { return self; } diff --git a/querydsl-core/src/main/java/com/mysema/query/types/query/ListSubQuery.java b/querydsl-core/src/main/java/com/mysema/query/types/query/ListSubQuery.java index c8e2c06b9..cc9f28e84 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/query/ListSubQuery.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/query/ListSubQuery.java @@ -75,7 +75,7 @@ public final class ListSubQuery extends ECollectionBase,A> implements @SuppressWarnings("unchecked") public Expr as(Expr alias) { - return OSimple.create(alias.getType(),(Operator)Ops.ALIAS, this, alias.asExpr()); + return OSimple.create(alias.getType(),(Operator)Ops.ALIAS, this, alias); } } diff --git a/querydsl-core/src/main/java/com/mysema/query/types/query/SubQueryMixin.java b/querydsl-core/src/main/java/com/mysema/query/types/query/SubQueryMixin.java index 349732de7..03491df27 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/query/SubQueryMixin.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/query/SubQueryMixin.java @@ -12,6 +12,7 @@ import com.mysema.query.types.Expr; import com.mysema.query.types.Ops; import com.mysema.query.types.SubQuery; import com.mysema.query.types.expr.EBoolean; +import com.mysema.query.types.expr.ESimple; import com.mysema.query.types.expr.OBoolean; /** @@ -27,7 +28,7 @@ public class SubQueryMixin implements SubQuery{ private final QueryMetadata metadata; - private final Expr self; + private final ESimple self; public SubQueryMixin(SubQuery self, QueryMetadata metadata){ this.self = self.asExpr(); @@ -69,7 +70,7 @@ public class SubQueryMixin implements SubQuery{ } @Override - public Expr asExpr() { + public ESimple asExpr() { return self; } diff --git a/querydsl-hql/src/main/java/com/mysema/query/hql/hibernate/HibernateDeleteClause.java b/querydsl-hql/src/main/java/com/mysema/query/hql/hibernate/HibernateDeleteClause.java index 6d2cef045..ee5f8735f 100644 --- a/querydsl-hql/src/main/java/com/mysema/query/hql/hibernate/HibernateDeleteClause.java +++ b/querydsl-hql/src/main/java/com/mysema/query/hql/hibernate/HibernateDeleteClause.java @@ -18,7 +18,9 @@ import com.mysema.query.dml.DeleteClause; import com.mysema.query.hql.HQLSerializer; import com.mysema.query.hql.HQLTemplates; import com.mysema.query.hql.JPQLTemplates; +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,6 +62,16 @@ public class HibernateDeleteClause implements DeleteClause HibernateDeleteClause set(Path path, T value) { + if (value != null){ + md.addWhere(path.asExpr().eq(value)); + }else{ + md.addWhere(path.isNull()); + } + return this; + } + @Override public HibernateDeleteClause where(EBoolean... o) { md.addWhere(o); diff --git a/querydsl-hql/src/main/java/com/mysema/query/hql/jpa/JPADeleteClause.java b/querydsl-hql/src/main/java/com/mysema/query/hql/jpa/JPADeleteClause.java index 477469017..095e17ee0 100644 --- a/querydsl-hql/src/main/java/com/mysema/query/hql/jpa/JPADeleteClause.java +++ b/querydsl-hql/src/main/java/com/mysema/query/hql/jpa/JPADeleteClause.java @@ -17,7 +17,9 @@ import com.mysema.query.dml.DeleteClause; import com.mysema.query.hql.HQLSerializer; import com.mysema.query.hql.HQLTemplates; import com.mysema.query.hql.JPQLTemplates; +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; /** @@ -54,6 +56,16 @@ public class JPADeleteClause implements DeleteClause{ JPAUtil.setConstants(query, constants, metadata.getParams()); return query.executeUpdate(); } + + @Override + public JPADeleteClause set(Path path, T value) { + if (value != null){ + metadata.addWhere(path.asExpr().eq(value)); + }else{ + metadata.addWhere(path.isNull()); + } + return this; + } @Override public JPADeleteClause where(EBoolean... o) { diff --git a/querydsl-jdoql/src/main/java/com/mysema/query/jdoql/dml/JDOQLDeleteClause.java b/querydsl-jdoql/src/main/java/com/mysema/query/jdoql/dml/JDOQLDeleteClause.java index fced55da9..6080b24a9 100644 --- a/querydsl-jdoql/src/main/java/com/mysema/query/jdoql/dml/JDOQLDeleteClause.java +++ b/querydsl-jdoql/src/main/java/com/mysema/query/jdoql/dml/JDOQLDeleteClause.java @@ -18,7 +18,9 @@ import com.mysema.query.QueryMetadata; import com.mysema.query.dml.DeleteClause; import com.mysema.query.jdoql.JDOQLSerializer; import com.mysema.query.jdoql.JDOQLTemplates; +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; /** @@ -85,6 +87,16 @@ public class JDOQLDeleteClause implements DeleteClause{ } } } + + @Override + public JDOQLDeleteClause set(Path path, T value) { + if (value != null){ + metadata.addWhere(path.asExpr().eq(value)); + }else{ + metadata.addWhere(path.isNull()); + } + return this; + } @Override public JDOQLDeleteClause where(EBoolean... o) { diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java index 0c9560a2d..b77385e6d 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java @@ -19,7 +19,9 @@ import com.mysema.query.dml.DeleteClause; import com.mysema.query.sql.SQLSerializer; import com.mysema.query.sql.SQLTemplates; import com.mysema.query.types.Param; +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; import com.mysema.util.JDBCUtil; @@ -80,6 +82,16 @@ public class SQLDeleteClause implements DeleteClause { } } } + + @Override + public SQLDeleteClause set(Path path, T value) { + if (value != null){ + where.and(path.asExpr().eq(value)); + }else{ + where.and(path.isNull()); + } + return this; + } @Override public SQLDeleteClause where(EBoolean... o) { diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java index 4a83baa0a..996f2988a 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java @@ -18,7 +18,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.mysema.query.QueryException; -import com.mysema.query.dml.StoreClause; +import com.mysema.query.dml.DMLClause; import com.mysema.query.sql.SQLQuery; import com.mysema.query.sql.SQLQueryImpl; import com.mysema.query.sql.SQLSerializer; @@ -39,7 +39,7 @@ import com.mysema.util.JDBCUtil; * */ @edu.umd.cs.findbugs.annotations.SuppressWarnings("SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING") -public class SQLMergeClause implements StoreClause{ +public class SQLMergeClause implements DMLClause{ private static final Logger logger = LoggerFactory.getLogger(SQLMergeClause.class); @@ -105,7 +105,7 @@ public class SQLMergeClause implements StoreClause{ } @SuppressWarnings("unchecked") - private void populate(StoreClause clause) { + private void populate(DMLClause clause) { for (int i = 0; i < columns.size(); i++){ clause.set((Path)columns.get(i), (Expr)values.get(i)); }