From b901f0e9546fded782ec53fc59256f6d030a3a7c Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 4 Jun 2014 11:02:43 +0200 Subject: [PATCH] [#3316] Add RecordContext.recordType() to allow for introspecting record types when implementing RecordListeners --- .../all/testcases/RecordListenerTests.java | 53 +++++++++++++++---- .../src/main/java/org/jooq/RecordContext.java | 9 ++++ .../org/jooq/impl/DefaultRecordContext.java | 7 +++ 3 files changed, 60 insertions(+), 9 deletions(-) diff --git a/jOOQ-test/src/test/java/org/jooq/test/all/testcases/RecordListenerTests.java b/jOOQ-test/src/test/java/org/jooq/test/all/testcases/RecordListenerTests.java index a2ae70d4e3..764bbd5e3e 100644 --- a/jOOQ-test/src/test/java/org/jooq/test/all/testcases/RecordListenerTests.java +++ b/jOOQ-test/src/test/java/org/jooq/test/all/testcases/RecordListenerTests.java @@ -53,6 +53,7 @@ import org.jooq.Record2; import org.jooq.Record3; import org.jooq.Record6; import org.jooq.RecordContext; +import org.jooq.Table; import org.jooq.TableRecord; import org.jooq.UpdatableRecord; import org.jooq.exception.DataAccessException; @@ -90,12 +91,12 @@ extends BaseTest events = new ArrayList(); + ReadListener(Table table) { + super(table); + } + @Override public void loadStart(RecordContext ctx) { events.add("loadStart"); + assertions(ctx); } @Override public void loadEnd(RecordContext ctx) { events.add("loadEnd"); + assertions(ctx); } @Override public void refreshStart(RecordContext ctx) { events.add("refreshStart"); + assertions(ctx); } @Override public void refreshEnd(RecordContext ctx) { events.add("refreshEnd"); + assertions(ctx); } } public void testRecordListenerStore() throws Exception { jOOQAbstractTest.reset = false; - WriteListener listener1 = new WriteListener(); + WriteListener listener1 = new WriteListener(TBook()); B book1 = newBook(5); book1.attach(create(listener1).configuration()); assertEquals(1, book1.store()); @@ -151,7 +160,7 @@ extends BaseTest events = new ArrayList(); List exceptions = new ArrayList(); + WriteListener(Table table) { + super(table); + } + @Override public void storeStart(RecordContext ctx) { events.add("storeStart"); + assertions(ctx); } @Override public void storeEnd(RecordContext ctx) { events.add("storeEnd"); + assertions(ctx); } @Override public void insertStart(RecordContext ctx) { events.add("insertStart"); + assertions(ctx); } @Override public void insertEnd(RecordContext ctx) { events.add("insertEnd"); + assertions(ctx); } @Override public void updateStart(RecordContext ctx) { events.add("updateStart"); + assertions(ctx); } @Override public void updateEnd(RecordContext ctx) { events.add("updateEnd"); + assertions(ctx); } @Override public void deleteStart(RecordContext ctx) { events.add("deleteStart"); + assertions(ctx); } @Override public void deleteEnd(RecordContext ctx) { events.add("deleteEnd"); + assertions(ctx); } @Override public void exception(RecordContext ctx) { exceptions.add(ctx.exception()); + assertions(ctx); + } + } + + private static class BaseListener extends DefaultRecordListener { + + private final Table table; + + BaseListener(Table table) { + this.table = table; + } + + void assertions(RecordContext ctx) { + assertEquals(table.recordType(), ctx.recordType()); } } } \ No newline at end of file diff --git a/jOOQ/src/main/java/org/jooq/RecordContext.java b/jOOQ/src/main/java/org/jooq/RecordContext.java index a0637c31a9..12d5539247 100644 --- a/jOOQ/src/main/java/org/jooq/RecordContext.java +++ b/jOOQ/src/main/java/org/jooq/RecordContext.java @@ -136,6 +136,15 @@ public interface RecordContext { */ Record record(); + /** + * The RecordType of the {@link #record()} that is being + * manipulated. + * + * @return The RecordType being manipulated. This is never + * null. + */ + RecordType recordType(); + /** * The Record(s) that are being manipulated in batch mode. *

diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultRecordContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultRecordContext.java index a928e6f9c3..ddb07de5f0 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultRecordContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultRecordContext.java @@ -47,6 +47,7 @@ import org.jooq.Configuration; import org.jooq.ExecuteType; import org.jooq.Record; import org.jooq.RecordContext; +import org.jooq.RecordType; /** * A default implementation for {@link RecordContext}. @@ -103,6 +104,12 @@ class DefaultRecordContext implements RecordContext { return records; } + @Override + public final RecordType recordType() { + Record record = record(); + return record != null ? new Fields(record.fields()) : null; + } + @Override public final Exception exception() { return exception;