[#6249] Null batchSQL when running a batch with a single query

This commit is contained in:
lukaseder 2017-05-22 16:50:31 +02:00
parent 5d3c6ce9e9
commit 4b666e0e56
2 changed files with 28 additions and 29 deletions

View File

@ -84,15 +84,15 @@ final class BatchMultiple implements Batch {
for (int i = 0; i < queries.length; i++) {
listener.renderStart(ctx);
batchSQL[i] = DSL.using(configuration).renderInlined(queries[i]);
ctx.sql(batchSQL[i]);
listener.renderEnd(ctx);
}
for (String sql : batchSQL) {
ctx.sql(sql);
for (int i = 0; i < queries.length; i++) {
ctx.sql(batchSQL[i]);
listener.prepareStart(ctx);
ctx.statement().addBatch(sql);
ctx.statement().addBatch(batchSQL[i]);
listener.prepareEnd(ctx);
ctx.sql(null);
}
listener.executeStart(ctx);

View File

@ -45,6 +45,7 @@ import java.sql.SQLOutput;
import java.sql.SQLWarning;
import java.sql.SQLXML;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@ -86,6 +87,7 @@ class DefaultExecuteContext implements ExecuteContext {
private final Routine<?> routine;
private String sql;
private final boolean batch;
private final Query[] batchQueries;
private final String[] batchSQL;
private final int[] batchRows;
@ -351,7 +353,7 @@ class DefaultExecuteContext implements ExecuteContext {
}
DefaultExecuteContext(Configuration configuration, Query query) {
this(configuration, query, new Query[] { query }, null);
this(configuration, query, null, null);
}
DefaultExecuteContext(Configuration configuration, Routine<?> routine) {
@ -362,23 +364,27 @@ class DefaultExecuteContext implements ExecuteContext {
this.configuration = configuration;
this.data = new DataMap();
this.query = query;
this.batchQueries = (batchQueries == null ? new Query[0] : batchQueries);
this.routine = routine;
if (this.batchQueries.length > 0) {
this.batchSQL = new String[this.batchQueries.length];
this.batchRows = new int[this.batchQueries.length];
for (int i = 0; i < this.batchQueries.length; i++)
this.batchRows[i] = -1;
}
else if (routine != null) {
this.batchSQL = new String[1];
if (routine != null) {
this.batch = false;
this.batchQueries = new Query[0];
this.batchRows = new int[] { -1 };
this.batchSQL = new String[1];
}
else if (batchQueries != null) {
this.batch = true;
this.batchQueries = batchQueries;
this.batchRows = new int[batchQueries.length];
this.batchSQL = new String[batchQueries.length];
Arrays.fill(this.batchRows, -1);
}
else {
this.batchSQL = new String[0];
this.batch = false;
this.batchQueries = new Query[0];
this.batchRows = new int[0];
this.batchSQL = new String[0];
}
clean();
@ -413,13 +419,8 @@ class DefaultExecuteContext implements ExecuteContext {
return ExecuteType.ROUTINE;
}
// This can only be a BatchSingle execution
else if (batchQueries.length == 1 && query == null) {
return ExecuteType.BATCH;
}
// This can only be a BatchMultiple execution
else if (batchQueries.length > 1) {
// This can only be a BatchSingle or BatchMultiple execution
else if (batch) {
return ExecuteType.BATCH;
}
@ -499,10 +500,9 @@ class DefaultExecuteContext implements ExecuteContext {
public final void sql(String s) {
this.sql = s;
// If this isn't a batch query
if (batchSQL.length == 1) {
// If this isn't a BatchMultiple query
if (batchSQL.length == 1)
batchSQL[0] = s;
}
}
@Override
@ -608,10 +608,9 @@ class DefaultExecuteContext implements ExecuteContext {
public final void rows(int r) {
this.rows = r;
// If this isn't a batch query
if (batchRows.length == 1) {
// If this isn't a BatchMultiple query
if (batchRows.length == 1)
batchRows[0] = r;
}
}
@Override