[#1868] ExecuteListener.end() is not called when using
ResultQuery.fetchLazy() - Added integration test
This commit is contained in:
parent
a44adbfdd1
commit
f01d118ced
@ -52,7 +52,9 @@ import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Queue;
|
||||
|
||||
import org.jooq.Cursor;
|
||||
import org.jooq.ExecuteContext;
|
||||
import org.jooq.ExecuteListener;
|
||||
import org.jooq.ExecuteType;
|
||||
import org.jooq.Field;
|
||||
import org.jooq.Result;
|
||||
@ -881,4 +883,224 @@ extends BaseTest<A, AP, B, S, B2S, BS, L, X, DATE, BOOL, D, T, U, I, IPK, T658,
|
||||
checkStatement(ctx, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExecuteListenerFetchLazyTest() throws Exception {
|
||||
Factory create = create(new Settings().withExecuteListeners(FetchLazyListener.class.getName()));
|
||||
FetchLazyListener.reset();
|
||||
|
||||
create.selectFrom(TAuthor()).fetch();
|
||||
assertEquals(1, FetchLazyListener.countStart);
|
||||
assertEquals(1, FetchLazyListener.countRenderStart);
|
||||
assertEquals(1, FetchLazyListener.countRenderEnd);
|
||||
assertEquals(1, FetchLazyListener.countPrepareStart);
|
||||
assertEquals(1, FetchLazyListener.countPrepareEnd);
|
||||
assertEquals(1, FetchLazyListener.countBindStart);
|
||||
assertEquals(1, FetchLazyListener.countBindEnd);
|
||||
assertEquals(1, FetchLazyListener.countExecuteStart);
|
||||
assertEquals(1, FetchLazyListener.countExecuteEnd);
|
||||
assertEquals(1, FetchLazyListener.countFetchStart);
|
||||
assertEquals(1, FetchLazyListener.countResultStart);
|
||||
assertEquals(2, FetchLazyListener.countRecordStart);
|
||||
assertEquals(2, FetchLazyListener.countRecordEnd);
|
||||
assertEquals(1, FetchLazyListener.countResultEnd);
|
||||
assertEquals(1, FetchLazyListener.countFetchEnd);
|
||||
assertEquals(1, FetchLazyListener.countEnd);
|
||||
assertEquals(0, FetchLazyListener.countException);
|
||||
|
||||
// [#1868] fetchLazy should behave almost the same as fetch
|
||||
FetchLazyListener.reset();
|
||||
Cursor<A> cursor = create.selectFrom(TAuthor()).fetchLazy();
|
||||
assertEquals(1, FetchLazyListener.countStart);
|
||||
assertEquals(1, FetchLazyListener.countRenderStart);
|
||||
assertEquals(1, FetchLazyListener.countRenderEnd);
|
||||
assertEquals(1, FetchLazyListener.countPrepareStart);
|
||||
assertEquals(1, FetchLazyListener.countPrepareEnd);
|
||||
assertEquals(1, FetchLazyListener.countBindStart);
|
||||
assertEquals(1, FetchLazyListener.countBindEnd);
|
||||
assertEquals(1, FetchLazyListener.countExecuteStart);
|
||||
assertEquals(1, FetchLazyListener.countExecuteEnd);
|
||||
assertEquals(0, FetchLazyListener.countFetchStart);
|
||||
assertEquals(0, FetchLazyListener.countResultStart);
|
||||
assertEquals(0, FetchLazyListener.countRecordStart);
|
||||
assertEquals(0, FetchLazyListener.countRecordEnd);
|
||||
assertEquals(0, FetchLazyListener.countResultEnd);
|
||||
assertEquals(0, FetchLazyListener.countFetchEnd);
|
||||
assertEquals(0, FetchLazyListener.countEnd);
|
||||
assertEquals(0, FetchLazyListener.countException);
|
||||
|
||||
cursor.fetchOne();
|
||||
assertEquals(1, FetchLazyListener.countStart);
|
||||
assertEquals(1, FetchLazyListener.countRenderStart);
|
||||
assertEquals(1, FetchLazyListener.countRenderEnd);
|
||||
assertEquals(1, FetchLazyListener.countPrepareStart);
|
||||
assertEquals(1, FetchLazyListener.countPrepareEnd);
|
||||
assertEquals(1, FetchLazyListener.countBindStart);
|
||||
assertEquals(1, FetchLazyListener.countBindEnd);
|
||||
assertEquals(1, FetchLazyListener.countExecuteStart);
|
||||
assertEquals(1, FetchLazyListener.countExecuteEnd);
|
||||
assertEquals(1, FetchLazyListener.countFetchStart);
|
||||
assertEquals(1, FetchLazyListener.countResultStart);
|
||||
assertEquals(1, FetchLazyListener.countRecordStart);
|
||||
assertEquals(1, FetchLazyListener.countRecordEnd);
|
||||
assertEquals(1, FetchLazyListener.countResultEnd);
|
||||
assertEquals(0, FetchLazyListener.countFetchEnd);
|
||||
assertEquals(0, FetchLazyListener.countEnd);
|
||||
assertEquals(0, FetchLazyListener.countException);
|
||||
|
||||
cursor.fetchOne();
|
||||
assertEquals(1, FetchLazyListener.countStart);
|
||||
assertEquals(1, FetchLazyListener.countRenderStart);
|
||||
assertEquals(1, FetchLazyListener.countRenderEnd);
|
||||
assertEquals(1, FetchLazyListener.countPrepareStart);
|
||||
assertEquals(1, FetchLazyListener.countPrepareEnd);
|
||||
assertEquals(1, FetchLazyListener.countBindStart);
|
||||
assertEquals(1, FetchLazyListener.countBindEnd);
|
||||
assertEquals(1, FetchLazyListener.countExecuteStart);
|
||||
assertEquals(1, FetchLazyListener.countExecuteEnd);
|
||||
assertEquals(1, FetchLazyListener.countFetchStart);
|
||||
assertEquals(2, FetchLazyListener.countResultStart);
|
||||
assertEquals(2, FetchLazyListener.countRecordStart);
|
||||
assertEquals(2, FetchLazyListener.countRecordEnd);
|
||||
assertEquals(2, FetchLazyListener.countResultEnd);
|
||||
assertEquals(0, FetchLazyListener.countFetchEnd);
|
||||
assertEquals(0, FetchLazyListener.countEnd);
|
||||
assertEquals(0, FetchLazyListener.countException);
|
||||
|
||||
cursor.fetchOne();
|
||||
assertEquals(1, FetchLazyListener.countStart);
|
||||
assertEquals(1, FetchLazyListener.countRenderStart);
|
||||
assertEquals(1, FetchLazyListener.countRenderEnd);
|
||||
assertEquals(1, FetchLazyListener.countPrepareStart);
|
||||
assertEquals(1, FetchLazyListener.countPrepareEnd);
|
||||
assertEquals(1, FetchLazyListener.countBindStart);
|
||||
assertEquals(1, FetchLazyListener.countBindEnd);
|
||||
assertEquals(1, FetchLazyListener.countExecuteStart);
|
||||
assertEquals(1, FetchLazyListener.countExecuteEnd);
|
||||
assertEquals(1, FetchLazyListener.countFetchStart);
|
||||
assertEquals(2, FetchLazyListener.countResultStart);
|
||||
assertEquals(2, FetchLazyListener.countRecordStart);
|
||||
assertEquals(2, FetchLazyListener.countRecordEnd);
|
||||
assertEquals(2, FetchLazyListener.countResultEnd);
|
||||
assertEquals(0, FetchLazyListener.countFetchEnd);
|
||||
assertEquals(0, FetchLazyListener.countEnd);
|
||||
assertEquals(0, FetchLazyListener.countException);
|
||||
}
|
||||
|
||||
public static class FetchLazyListener implements ExecuteListener {
|
||||
|
||||
static int countStart;
|
||||
static int countRenderStart;
|
||||
static int countRenderEnd;
|
||||
static int countPrepareStart;
|
||||
static int countPrepareEnd;
|
||||
static int countBindStart;
|
||||
static int countBindEnd;
|
||||
static int countExecuteStart;
|
||||
static int countExecuteEnd;
|
||||
static int countFetchStart;
|
||||
static int countResultStart;
|
||||
static int countRecordStart;
|
||||
static int countRecordEnd;
|
||||
static int countResultEnd;
|
||||
static int countFetchEnd;
|
||||
static int countEnd;
|
||||
static int countException;
|
||||
|
||||
static void reset() {
|
||||
for (java.lang.reflect.Field f : FetchLazyListener.class.getDeclaredFields()) {
|
||||
f.setAccessible(true);
|
||||
|
||||
try {
|
||||
f.set(FetchLazyListener.class, 0);
|
||||
}
|
||||
catch (Exception ignore) {}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start(ExecuteContext ctx) {
|
||||
countStart++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderStart(ExecuteContext ctx) {
|
||||
countRenderStart++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderEnd(ExecuteContext ctx) {
|
||||
countRenderEnd++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void prepareStart(ExecuteContext ctx) {
|
||||
countPrepareStart++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void prepareEnd(ExecuteContext ctx) {
|
||||
countPrepareEnd++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bindStart(ExecuteContext ctx) {
|
||||
countBindStart++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bindEnd(ExecuteContext ctx) {
|
||||
countBindEnd++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void executeStart(ExecuteContext ctx) {
|
||||
countExecuteStart++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void executeEnd(ExecuteContext ctx) {
|
||||
countExecuteEnd++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fetchStart(ExecuteContext ctx) {
|
||||
countFetchStart++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resultStart(ExecuteContext ctx) {
|
||||
countResultStart++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void recordStart(ExecuteContext ctx) {
|
||||
countRecordStart++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void recordEnd(ExecuteContext ctx) {
|
||||
countRecordEnd++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resultEnd(ExecuteContext ctx) {
|
||||
countResultEnd++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fetchEnd(ExecuteContext ctx) {
|
||||
countFetchEnd++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exception(ExecuteContext ctx) {
|
||||
countException++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void end(ExecuteContext ctx) {
|
||||
countEnd++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1758,6 +1758,11 @@ public abstract class jOOQAbstractTest<
|
||||
new ExecuteListenerTests(this).testExecuteListenerOnBatchMultiple();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExecuteListenerFetchLazyTest() throws Exception {
|
||||
new ExecuteListenerTests(this).testExecuteListenerFetchLazyTest();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRenderNameStyle() throws Exception {
|
||||
new RenderAndBindTests(this).testRenderNameStyle();
|
||||
|
||||
@ -145,7 +145,13 @@ class CursorImpl<R extends Record> implements Cursor<R> {
|
||||
|
||||
@Override
|
||||
public final R fetchOne() {
|
||||
return iterator().next();
|
||||
Result<R> result = fetch(1);
|
||||
|
||||
if (result.size() == 1) {
|
||||
return result.get(0);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -160,7 +166,7 @@ class CursorImpl<R extends Record> implements Cursor<R> {
|
||||
ctx.result(result);
|
||||
listener.resultStart(ctx);
|
||||
|
||||
for (int i = 0; i < number && ((record = fetchOne()) != null); i++) {
|
||||
for (int i = 0; i < number && ((record = iterator().next()) != null); i++) {
|
||||
result.addRecord(record);
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user