diff --git a/querydsl-core/src/main/java/com/mysema/query/support/Expressions.java b/querydsl-core/src/main/java/com/mysema/query/support/Expressions.java index b08d558aa..9caca31e1 100644 --- a/querydsl-core/src/main/java/com/mysema/query/support/Expressions.java +++ b/querydsl-core/src/main/java/com/mysema/query/support/Expressions.java @@ -18,6 +18,7 @@ import javax.annotation.Nullable; import com.mysema.query.QueryMetadata; import com.mysema.query.types.ConstantImpl; import com.mysema.query.types.Expression; +import com.mysema.query.types.NullExpression; import com.mysema.query.types.Operator; import com.mysema.query.types.Ops; import com.mysema.query.types.Path; @@ -61,10 +62,24 @@ import com.mysema.query.types.template.StringTemplate; * */ public final class Expressions { + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public static SimpleExpression as(D source, Path alias) { + if (source == null) { + return as((Expression)NullExpression.DEFAULT, alias); + } else { + return as(new ConstantImpl(source), alias); + } + } @SuppressWarnings("unchecked") public static SimpleExpression as(Expression source, Path alias) { - return SimpleOperation.create((Class)alias.getType(), Ops.ALIAS, source, alias); + if (source == null) { + return as((Expression)NullExpression.DEFAULT, alias); + } else { + return SimpleOperation.create((Class)alias.getType(), Ops.ALIAS, source, alias); + } + } @Nullable diff --git a/querydsl-core/src/test/java/com/mysema/query/support/ExpressionsTest.java b/querydsl-core/src/test/java/com/mysema/query/support/ExpressionsTest.java index 09da67c29..a5cd16270 100644 --- a/querydsl-core/src/test/java/com/mysema/query/support/ExpressionsTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/support/ExpressionsTest.java @@ -32,6 +32,13 @@ public class ExpressionsTest { private static final BooleanExpression a = new BooleanPath("a"), b = new BooleanPath("b"); + @Test + public void As() { + assertEquals("null as str", Expressions.as(null, str).toString()); + assertEquals("str as str", Expressions.as("str", str).toString()); + assertEquals("s as str", Expressions.as(new StringPath("s"), str).toString()); + } + @Test public void AllOf() { assertEquals("a && b", Expressions.allOf(a, b).toString());