diff --git a/jOOQ-test/src/org/jooq/test/_/testcases/RecordListenerTests.java b/jOOQ-test/src/org/jooq/test/_/testcases/RecordListenerTests.java index 9c9f4871de..aa0a03d755 100644 --- a/jOOQ-test/src/org/jooq/test/_/testcases/RecordListenerTests.java +++ b/jOOQ-test/src/org/jooq/test/_/testcases/RecordListenerTests.java @@ -116,7 +116,12 @@ extends BaseTestINSERT or * UPDATE statement. + *

+ * A store event will generate a nested {@link #insertStart(RecordContext)} + * or {@link #updateStart(RecordContext)} event. * * @see UpdatableRecord#store() */ @@ -75,6 +78,9 @@ public interface RecordListener extends EventListener { * after storing. Note that modifying the record's primary key value may * influence whether storing results in an INSERT or * UPDATE statement. + *

+ * A store event will generate a nested {@link #insertEnd(RecordContext)} + * or {@link #updateEnd(RecordContext)} event. * * @see UpdatableRecord#store() */ diff --git a/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java b/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java index f5ce949d7c..e75a3cd9c8 100644 --- a/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java @@ -37,6 +37,7 @@ package org.jooq.impl; import static java.lang.Boolean.TRUE; import static org.jooq.impl.RecordDelegate.delegate; +import static org.jooq.impl.RecordDelegate.RecordLifecycleType.DELETE; import static org.jooq.impl.RecordDelegate.RecordLifecycleType.INSERT; import static org.jooq.impl.RecordDelegate.RecordLifecycleType.REFRESH; import static org.jooq.impl.RecordDelegate.RecordLifecycleType.STORE; @@ -131,36 +132,12 @@ public class UpdatableRecordImpl> extends TableReco @Override public final int insert() { - final int[] result = new int[1]; - - delegate(configuration(), (Record) this, INSERT) - .operate(new RecordOperation() { - - @Override - public Record operate(Record record) throws RuntimeException { - result[0] = storeInsert(); - return record; - } - }); - - return result[0]; + return storeInsert(); } @Override public final int update() { - final int[] result = new int[1]; - - delegate(configuration(), (Record) this, UPDATE) - .operate(new RecordOperation() { - - @Override - public Record operate(Record record) throws RuntimeException { - result[0] = storeUpdate(getPrimaryKey().getFieldsArray()); - return record; - } - }); - - return result[0]; + return storeUpdate(getPrimaryKey().getFieldsArray()); } private final int store0() { @@ -194,6 +171,22 @@ public class UpdatableRecordImpl> extends TableReco } private final int storeInsert() { + final int[] result = new int[1]; + + delegate(configuration(), (Record) this, INSERT) + .operate(new RecordOperation() { + + @Override + public Record operate(Record record) throws RuntimeException { + result[0] = storeInsert0(); + return record; + } + }); + + return result[0]; + } + + private final int storeInsert0() { DSLContext create = create(); InsertQuery insert = create.insertQuery(getTable()); addChangedValues(insert); @@ -236,7 +229,24 @@ public class UpdatableRecordImpl> extends TableReco return result; } - private final int storeUpdate(TableField[] keys) { + private final int storeUpdate(final TableField[] keys) { + final int[] result = new int[1]; + + delegate(configuration(), (Record) this, UPDATE) + .operate(new RecordOperation() { + + @Override + public Record operate(Record record) throws RuntimeException { + result[0] = storeUpdate0(keys); + return record; + } + }); + + return result[0]; + + } + + private final int storeUpdate0(TableField[] keys) { UpdateQuery update = create().updateQuery(getTable()); addChangedValues(update); Utils.addConditions(update, this, keys); @@ -347,6 +357,22 @@ public class UpdatableRecordImpl> extends TableReco @Override public final int delete() { + final int[] result = new int[1]; + + delegate(configuration(), (Record) this, DELETE) + .operate(new RecordOperation() { + + @Override + public Record operate(Record record) throws RuntimeException { + result[0] = delete0(); + return record; + } + }); + + return result[0]; + } + + private final int delete0() { TableField[] keys = getPrimaryKey().getFieldsArray(); try {