diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/HSQLDBTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/HSQLDBTemplates.java index 7e6276438..313d4cb29 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/HSQLDBTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/HSQLDBTemplates.java @@ -47,6 +47,7 @@ public class HSQLDBTemplates extends SQLTemplates { setLimitRequired(true); setAutoIncrement(" identity"); setDefaultValues("\ndefault values"); + setFunctionJoinsWrapped(true); add(Ops.TRIM, "trim(both from {0})"); add(Ops.NEGATE, "{0} * -1", 7); 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 91c175ce4..2e9906b6f 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 @@ -826,7 +826,8 @@ public class SQLSerializer extends SerializerBase { @Override public Void visit(TemplateExpression expr, Void context) { - if (inJoin && templates.isFunctionJoinsWrapped()) { + if (inJoin && expr instanceof RelationalFunctionCall + && templates.isFunctionJoinsWrapped()) { append("table("); super.visit(expr, context); append(")"); diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/SerializationTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/SerializationTest.java index 699f897d0..0d3ee7385 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/SerializationTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/SerializationTest.java @@ -138,6 +138,19 @@ public class SerializationTest { "on not SURVEY.NAME like tokFunc.prop escape '\\'", q.toString()); } + @Test + public void FunctionCall3() { + RelationalFunctionCall func = RelationalFunctionCall.create(String.class, "TableValuedFunction", "parameter"); + PathBuilder funcAlias = new PathBuilder(String.class, "tokFunc"); + SQLQuery q = new SQLQuery(new HSQLDBTemplates()); + q.from(survey) + .join(func, funcAlias).on(survey.name.like(funcAlias.getString("prop")).not()); + + assertEquals("from SURVEY SURVEY\n" + + "join table(TableValuedFunction(?)) as tokFunc\n" + + "on not SURVEY.NAME like tokFunc.prop escape '\\'", q.toString()); + } + @Test public void Union() { SQLQuery q = new SQLQuery(SQLTemplates.DEFAULT);