diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java index a609a63da..d2fb02a05 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java @@ -891,7 +891,11 @@ public class SQLTemplates extends Templates { */ public void serializeInsert(QueryMetadata metadata, RelationalPath entity, List batches, SQLSerializer context) { - context.serializeForInsert(metadata, entity, batches); + context.serializeForInsert(metadata, entity, batches); + + if (!metadata.getFlags().isEmpty()) { + context.serialize(Position.END, metadata.getFlags()); + } } /** diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/dml/SQLInsertClause.java b/querydsl-sql/src/main/java/com/querydsl/sql/dml/SQLInsertClause.java index 44e198bf8..65daa44fb 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/dml/SQLInsertClause.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/dml/SQLInsertClause.java @@ -461,6 +461,10 @@ public class SQLInsertClause extends AbstractSQLClause 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 builder = ImmutableList.builder(); for (SQLInsertBatch batch : batches) { @@ -525,7 +529,11 @@ public class SQLInsertClause extends AbstractSQLClause 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(); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/dml/SQLInsertClauseTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/dml/SQLInsertClauseTest.java index 571d75829..cc28c14af 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/dml/SQLInsertClauseTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/dml/SQLInsertClauseTest.java @@ -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");