From 7c72de81eaa2a6adefdcc9924c8099b806a67939 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 18 Aug 2015 00:11:21 +0300 Subject: [PATCH] Improve precedence mappings --- .../collections/CollQueryTemplatesTest.java | 14 +++++++ .../querydsl/core/types/JavaTemplates.java | 42 +++++++++---------- .../com/querydsl/core/types/Templates.java | 1 + .../com/querydsl/jdo/JDOQLTemplatesTest.java | 12 ++++++ 4 files changed, 48 insertions(+), 21 deletions(-) diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/CollQueryTemplatesTest.java b/querydsl-collections/src/test/java/com/querydsl/collections/CollQueryTemplatesTest.java index 0ceef79b2..93f031805 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/CollQueryTemplatesTest.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/CollQueryTemplatesTest.java @@ -1,8 +1,13 @@ package com.querydsl.collections; +import static org.junit.Assert.assertEquals; + import org.junit.Test; +import com.querydsl.core.types.Expression; import com.querydsl.core.types.TemplatesTestUtils; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.StringPath; public class CollQueryTemplatesTest { @@ -11,4 +16,13 @@ public class CollQueryTemplatesTest { TemplatesTestUtils.testPrecedence(CollQueryTemplates.DEFAULT); } + @Test + public void Concat() { + StringPath a = Expressions.stringPath("a"); + StringPath b = Expressions.stringPath("b"); + Expression expr = a.append(b).toLowerCase(); + String str = new CollQuerySerializer(CollQueryTemplates.DEFAULT).handle(expr).toString(); + assertEquals("(a + b).toLowerCase()", str); + } + } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/JavaTemplates.java b/querydsl-core/src/main/java/com/querydsl/core/types/JavaTemplates.java index 257d0a632..bf1bbfa09 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/JavaTemplates.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/JavaTemplates.java @@ -30,20 +30,20 @@ public class JavaTemplates extends Templates { add(Ops.IS_NULL, "{0} == null"); add(Ops.IS_NOT_NULL, "{0} != null"); add(Ops.INSTANCE_OF, "{0} instanceof {1}"); - add(Ops.ORDINAL, "{0}.ordinal()"); + add(Ops.ORDINAL, "{0}.ordinal()", Precedence.DOT); // collection add(Ops.IN, "{1}.contains({0})"); add(Ops.NOT_IN, "!{1}.contains({0})"); - add(Ops.COL_IS_EMPTY, "{0}.isEmpty()"); - add(Ops.COL_SIZE, "{0}.size()"); + add(Ops.COL_IS_EMPTY, "{0}.isEmpty()", Precedence.DOT); + add(Ops.COL_SIZE, "{0}.size()", Precedence.DOT); // array - add(Ops.ARRAY_SIZE, "{0}.length"); + add(Ops.ARRAY_SIZE, "{0}.length", Precedence.DOT); // map - add(Ops.MAP_IS_EMPTY, "{0}.isEmpty()"); - add(Ops.MAP_SIZE, "{0}.size()"); + add(Ops.MAP_IS_EMPTY, "{0}.isEmpty()", Precedence.DOT); + add(Ops.MAP_SIZE, "{0}.size()", Precedence.DOT); add(Ops.CONTAINS_KEY, "{0}.containsKey({1})"); add(Ops.CONTAINS_VALUE, "{0}.containsValue({1})"); @@ -52,15 +52,15 @@ public class JavaTemplates extends Templates { // String add(Ops.CHAR_AT, "{0}.charAt({1})"); - add(Ops.LOWER, "{0}.toLowerCase()"); + add(Ops.LOWER, "{0}.toLowerCase()", Precedence.DOT); add(Ops.SUBSTR_1ARG, "{0}.substring({1})"); add(Ops.SUBSTR_2ARGS, "{0}.substring({1},{2})"); - add(Ops.TRIM, "{0}.trim()"); - add(Ops.UPPER, "{0}.toUpperCase()"); + add(Ops.TRIM, "{0}.trim()", Precedence.DOT); + add(Ops.UPPER, "{0}.toUpperCase()", Precedence.DOT); add(Ops.MATCHES, "{0}.matches({1})"); add(Ops.MATCHES_IC, "{0}.matches({1})"); - add(Ops.STRING_LENGTH, "{0}.length()"); - add(Ops.STRING_IS_EMPTY, "{0}.isEmpty()"); + add(Ops.STRING_LENGTH, "{0}.length()", Precedence.DOT); + add(Ops.STRING_IS_EMPTY, "{0}.isEmpty()", Precedence.DOT); add(Ops.STRING_CONTAINS, "{0}.contains({1})"); add(Ops.STRING_CONTAINS_IC, "{0l}.contains({1l})"); add(Ops.STARTS_WITH, "{0}.startsWith({1})"); @@ -74,16 +74,16 @@ public class JavaTemplates extends Templates { add(Ops.StringOps.LOCATE2, "({1}.indexOf({0},{2s}-1)+1)"); // Date and Time - add(Ops.DateTimeOps.DAY_OF_MONTH, "{0}.getDayOfMonth()"); - add(Ops.DateTimeOps.DAY_OF_WEEK, "{0}.getDayOfWeek()"); - add(Ops.DateTimeOps.DAY_OF_YEAR, "{0}.getDayOfYear()"); - add(Ops.DateTimeOps.HOUR, "{0}.getHour()"); - add(Ops.DateTimeOps.MINUTE, "{0}.getMinute()"); - add(Ops.DateTimeOps.MONTH, "{0}.getMonth()"); - add(Ops.DateTimeOps.MILLISECOND, "{0}.getMilliSecond()"); - add(Ops.DateTimeOps.SECOND, "{0}.getSecond()"); - add(Ops.DateTimeOps.WEEK, "{0}.getWeek()"); - add(Ops.DateTimeOps.YEAR, "{0}.getYear()"); + add(Ops.DateTimeOps.DAY_OF_MONTH, "{0}.getDayOfMonth()", Precedence.DOT); + add(Ops.DateTimeOps.DAY_OF_WEEK, "{0}.getDayOfWeek()", Precedence.DOT); + add(Ops.DateTimeOps.DAY_OF_YEAR, "{0}.getDayOfYear()", Precedence.DOT); + add(Ops.DateTimeOps.HOUR, "{0}.getHour()", Precedence.DOT); + add(Ops.DateTimeOps.MINUTE, "{0}.getMinute()", Precedence.DOT); + add(Ops.DateTimeOps.MONTH, "{0}.getMonth()", Precedence.DOT); + add(Ops.DateTimeOps.MILLISECOND, "{0}.getMilliSecond()", Precedence.DOT); + add(Ops.DateTimeOps.SECOND, "{0}.getSecond()", Precedence.DOT); + add(Ops.DateTimeOps.WEEK, "{0}.getWeek()", Precedence.DOT); + add(Ops.DateTimeOps.YEAR, "{0}.getYear()", Precedence.DOT); add(Ops.DateTimeOps.YEAR_MONTH, "{0}.getYear() * 100 + {0}.getMonth()"); diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/Templates.java b/querydsl-core/src/main/java/com/querydsl/core/types/Templates.java index 31dfec60f..2448ce838 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/Templates.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/Templates.java @@ -30,6 +30,7 @@ public class Templates { */ protected static class Precedence { public static final int HIGHEST = -1; + public static final int DOT = 5; public static final int NOT_HIGH = 10; public static final int NEGATE = 20; public static final int ARITH_HIGH = 30; diff --git a/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQLTemplatesTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQLTemplatesTest.java index 26c748191..6e29c36da 100644 --- a/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQLTemplatesTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQLTemplatesTest.java @@ -5,9 +5,12 @@ import static org.junit.Assert.assertTrue; import org.junit.Test; +import com.querydsl.core.types.Expression; import com.querydsl.core.types.Operator; import com.querydsl.core.types.Ops; import com.querydsl.core.types.TemplatesTestUtils; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.StringPath; public class JDOQLTemplatesTest { @@ -55,4 +58,13 @@ public class JDOQLTemplatesTest { TemplatesTestUtils.testPrecedence(JDOQLTemplates.DEFAULT); } + @Test + public void Concat() { + StringPath a = Expressions.stringPath("a"); + StringPath b = Expressions.stringPath("b"); + StringPath c = Expressions.stringPath("c"); + Expression expr = a.append(b).toLowerCase(); + String str = new JDOQLSerializer(JDOQLTemplates.DEFAULT, c).handle(expr).toString(); + assertEquals("(a + b).toLowerCase()", str); + } }