From e83c592d068a3beeab2cb21220f896d381578002 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 11 Oct 2014 00:57:14 +0300 Subject: [PATCH] Improve path in collection handling --- .../java/com/mysema/query/sql/SQLSerializer.java | 13 ++++++++----- .../src/test/java/com/mysema/query/SelectBase.java | 6 ++++++ 2 files changed, 14 insertions(+), 5 deletions(-) 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)