From 97462cb21a0bba4ba71dfe0c66e669dc1e9c6467 Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Tue, 24 Nov 2015 00:01:28 +1300 Subject: [PATCH] #461 - ENH: Add @Draftable support - delete --- .../server/core/PersistRequestBean.java | 2 +- .../server/persist/dml/DeleteMeta.java | 27 ++++++++++++++----- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/avaje/ebeaninternal/server/core/PersistRequestBean.java b/src/main/java/com/avaje/ebeaninternal/server/core/PersistRequestBean.java index 0c431d1a0..1c8b7e3cd 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/core/PersistRequestBean.java +++ b/src/main/java/com/avaje/ebeaninternal/server/core/PersistRequestBean.java @@ -607,7 +607,7 @@ public final class PersistRequestBean extends PersistRequest implements BeanP transaction.logSummary("Updated [" + name + "] [" + idValue + "]" + draft); break; case DELETE: - transaction.logSummary("Deleted [" + name + "] [" + idValue + "]"); + transaction.logSummary("Deleted [" + name + "] [" + idValue + "]" + draft); break; default: break; diff --git a/src/main/java/com/avaje/ebeaninternal/server/persist/dml/DeleteMeta.java b/src/main/java/com/avaje/ebeaninternal/server/persist/dml/DeleteMeta.java index a1c9d6c56..eafa432a1 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/persist/dml/DeleteMeta.java +++ b/src/main/java/com/avaje/ebeaninternal/server/persist/dml/DeleteMeta.java @@ -16,8 +16,9 @@ import com.avaje.ebeaninternal.server.persist.dmlbind.BindableId; public final class DeleteMeta { private final String sqlVersion; - private final String sqlNone; + private final String sqlDraftVersion; + private final String sqlDraftNone; private final BindableId id; @@ -32,8 +33,19 @@ public final class DeleteMeta { this.tableName = desc.getBaseTable(); this.id = id; this.version = version; - this.sqlNone = genSql(ConcurrencyMode.NONE); - this.sqlVersion = genSql(ConcurrencyMode.VERSION); + + String tableName = desc.getBaseTable(); + this.sqlNone = genSql(ConcurrencyMode.NONE, tableName); + this.sqlVersion = genSql(ConcurrencyMode.VERSION, tableName); + if (desc.isDraftable()) { + String draftTableName = desc.getDraftTable(); + this.sqlDraftNone = genSql(ConcurrencyMode.NONE, draftTableName); + this.sqlDraftVersion = genSql(ConcurrencyMode.VERSION, draftTableName); + + } else { + this.sqlDraftNone = sqlNone; + this.sqlDraftVersion = sqlVersion; + } } public boolean isEmptyStringAsNull() { @@ -75,25 +87,26 @@ public final class DeleteMeta { throw new IllegalStateException("Can not deleteById on " + request.getFullName() + " as no @Id property"); } + boolean publish = request.isPublish(); switch (request.determineConcurrencyMode()) { case NONE: - return sqlNone; + return publish ? sqlNone : sqlDraftNone; case VERSION: - return sqlVersion; + return publish ? sqlVersion : sqlDraftVersion; default: throw new RuntimeException("Invalid mode " + request.determineConcurrencyMode()); } } - private String genSql(ConcurrencyMode conMode) { + private String genSql(ConcurrencyMode conMode, String table) { // delete ... where bcol=? and bc1=? and bc2 is null and ... GenerateDmlRequest request = new GenerateDmlRequest(); - request.append("delete from ").append(tableName); + request.append("delete from ").append(table); request.append(" where "); request.setWhereIdMode();