Fix end position handling

This commit is contained in:
Timo Westkämper 2016-06-17 22:25:17 +03:00
parent 9c4a4415db
commit fbd75c840e
3 changed files with 30 additions and 2 deletions

View File

@ -891,7 +891,11 @@ public class SQLTemplates extends Templates {
*/
public void serializeInsert(QueryMetadata metadata, RelationalPath<?> entity,
List<SQLInsertBatch> batches, SQLSerializer context) {
context.serializeForInsert(metadata, entity, batches);
context.serializeForInsert(metadata, entity, batches);
if (!metadata.getFlags().isEmpty()) {
context.serialize(Position.END, metadata.getFlags());
}
}
/**

View File

@ -461,6 +461,10 @@ public class SQLInsertClause extends AbstractSQLClause<SQLInsertClause> implemen
SQLSerializer serializer = createSerializer();
serializer.serializeInsert(metadata, entity, columns, values, subQuery);
return ImmutableList.of(createBindings(metadata, serializer));
} else if (batchToBulk) {
SQLSerializer serializer = createSerializer();
serializer.serializeInsert(metadata, entity, batches);
return ImmutableList.of(createBindings(metadata, serializer));
} else {
ImmutableList.Builder<SQLBindings> builder = ImmutableList.builder();
for (SQLInsertBatch batch : batches) {
@ -525,7 +529,11 @@ public class SQLInsertClause extends AbstractSQLClause<SQLInsertClause> implemen
@Override
public String toString() {
SQLSerializer serializer = createSerializer();
serializer.serializeInsert(metadata, entity, columns, values, subQuery);
if (!batches.isEmpty() && batchToBulk) {
serializer.serializeInsert(metadata, entity, batches);
} else {
serializer.serializeInsert(metadata, entity, columns, values, subQuery);
}
return serializer.toString();
}

View File

@ -5,6 +5,7 @@ import static org.junit.Assert.assertEquals;
import org.junit.Test;
import com.google.common.collect.ImmutableList;
import com.querydsl.core.QueryFlag;
import com.querydsl.sql.KeyAccessorsTest.QEmployee;
import com.querydsl.sql.SQLBindings;
import com.querydsl.sql.SQLTemplates;
@ -30,6 +31,21 @@ public class SQLInsertClauseTest {
assertEquals(ImmutableList.of(1), sql.getBindings());
}
@Test
public void bulk() {
QEmployee emp1 = new QEmployee("emp1");
SQLInsertClause insert = new SQLInsertClause(null, SQLTemplates.DEFAULT, emp1);
insert.set(emp1.id, 1);
insert.addBatch();
insert.set(emp1.id, 2);
insert.addBatch();
insert.addFlag(QueryFlag.Position.END, " on duplicate key ignore");
insert.setBatchToBulk(true);
assertEquals("insert into EMPLOYEE (ID)\n" +
"values (?), (?) on duplicate key ignore", insert.getSQL().get(0).getSQL());
}
@Test
public void getSQLWithPreservedColumnOrder() {
com.querydsl.sql.domain.QEmployee emp1 = new com.querydsl.sql.domain.QEmployee("emp1");