diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java index 16cf6d034..09bf696d0 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java @@ -745,7 +745,7 @@ public class SQLSerializer extends SerializerBase { append(")"); int size = ((Collection) constant).size() - 1; - Path lastPath = constantPaths.get(constantPaths.size() - 1); + Path lastPath = constantPaths.isEmpty() ? null : constantPaths.get(constantPaths.size() - 1); for (int i = 0; i < size; i++) { constantPaths.add(lastPath); } @@ -832,10 +832,13 @@ public class SQLSerializer extends SerializerBase { && args.get(0) instanceof Path && args.get(1) instanceof Constant && operator != Ops.NUMCAST) { - for (Element element : templates.getTemplate(operator).getElements()) { - if (element instanceof Template.ByIndex && ((Template.ByIndex)element).getIndex() == 1) { - constantPaths.add((Path)args.get(0)); - break; + Object constant = ((Constant)args.get(1)).getConstant(); + if (!Collection.class.isInstance(constant) || !((Collection)constant).isEmpty()) { + for (Element element : templates.getTemplate(operator).getElements()) { + if (element instanceof Template.ByIndex && ((Template.ByIndex)element).getIndex() == 1) { + constantPaths.add((Path)args.get(0)); + break; + } } } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index 50abada21..eb9d52148 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -594,6 +594,12 @@ public class SelectBase extends AbstractBaseTest { query().from(employee).where(employee.id.in(Arrays.asList(1,2))).list(employee); } + @Test + @IncludeIn(H2) + public void In_Empty() { + query().from(employee).where(employee.id.in(ImmutableList.of())).list(employee); + } + @Test public void Inner_Join() throws SQLException { query().from(employee).innerJoin(employee2)