diff --git a/querydsl-core/src/main/java/com/mysema/query/grammar/types/Expr.java b/querydsl-core/src/main/java/com/mysema/query/grammar/types/Expr.java index db7ab0bf4..ecec9abb6 100644 --- a/querydsl-core/src/main/java/com/mysema/query/grammar/types/Expr.java +++ b/querydsl-core/src/main/java/com/mysema/query/grammar/types/Expr.java @@ -78,22 +78,31 @@ public abstract class Expr{ } } public static abstract class EBoolean extends EComparable{ - private EBoolean not; + private EBoolean not; public EBoolean() {super(Boolean.class);} + public final EBoolean and(EBoolean right) {return Grammar.and(this, right);} public final EBoolean not(){ - return not == null ? not = Grammar.not(this) : not; + if (not == null) not = Grammar.not(this); + return not; } public final EBoolean or(EBoolean right) {return Grammar.or(this, right);} } public static abstract class EComparable> extends ESimple{ + private OrderSpecifier asc; + private OrderSpecifier desc; + private EString stringCast; public EComparable(Class type) {super(type);} + public final EBoolean after(D right) {return Grammar.after(this,right);} public final EBoolean after(Expr right) {return Grammar.after(this,right);} public final EBoolean aoe(D right) {return Grammar.aoe(this,right);} public final EBoolean aoe(Expr right) {return Grammar.aoe(this,right);} - public final OrderSpecifier asc() {return Grammar.asc(this);} + public final OrderSpecifier asc() { + if (asc == null) asc = Grammar.asc(this); + return asc; + } public final EBoolean before(D right) {return Grammar.before(this,right);} public final EBoolean before(Expr right) {return Grammar.before(this,right);} public final EBoolean between(D first, D second) {return Grammar.between(this,first,second);} @@ -103,15 +112,19 @@ public abstract class Expr{ public final EBoolean boe(Expr right) {return Grammar.boe(this,right);} // cast methods - public > ENumber castToNum(Class type){ - return Grammar.numericCast(this, type); - } - public final OrderSpecifier desc() {return Grammar.desc(this);} + public > ENumber castToNum(Class type){ + return Grammar.numericCast(this, type); + } + public final OrderSpecifier desc() { + if (desc == null) desc = Grammar.desc(this); + return desc ; + } public final EBoolean notBetween(D first, D second) {return Grammar.notBetween(this, first, second);} public final EBoolean notBetween(Expr first, Expr second) {return Grammar.notBetween(this,first,second);} public EString stringValue(){ - return Grammar.stringCast(this); + if (stringCast == null) stringCast = Grammar.stringCast(this); + return stringCast; } } @@ -169,6 +182,7 @@ public abstract class Expr{ super((Class) constant.getClass()); this.constant = constant; } + public D getConstant(){ return constant;} public int hashCode(){ return constant.hashCode(); @@ -216,6 +230,8 @@ public abstract class Expr{ public static abstract class EString extends EComparable{ private EString lower, trim, upper; + private EComparable length; + public EString() {super(String.class);} public final EString add(Expr str) {return Grammar.concat(this, str);} @@ -244,12 +260,15 @@ public abstract class Expr{ public final EComparable lastIndex(String str, int i) {return Grammar.lastIndex(this, str, i);} public final EComparable lastIndexOf(String str) {return Grammar.lastIndexOf(this, str);} - public final EComparable length() {return Grammar.length(this);} - - public final EBoolean like(String str) { return Grammar.like(this, str); } - - public final EString lower() { return lower == null ? lower = Grammar.lower(this) : lower; } - + public final EComparable length() { + if (length == null) length = Grammar.length(this); + return length; + } + public final EBoolean like(String str) { return Grammar.like(this, str); } + public final EString lower() { + if (lower == null) lower = Grammar.lower(this); + return lower; + } public final EBoolean startsWith(Expr str) {return Grammar.startsWith(this, str);} public final EBoolean startsWith(String str) {return Grammar.startsWith(this, str);} public final EBoolean startsWith(Expr str, boolean caseSensitive) {return Grammar.startsWith(this, str, caseSensitive);} @@ -258,7 +277,16 @@ public abstract class Expr{ public final EString substring(int beginIndex) { return Grammar.substring(this, beginIndex);} public final EString substring(int beginIndex, int endIndex) { return Grammar.substring(this, beginIndex, endIndex);} - public final EString trim() { return trim == null ? trim = Grammar.trim(this) : trim; } - public final EString upper() { return upper == null ? upper = Grammar.upper(this) : upper; } + public final EString trim() { + if (trim == null) trim = Grammar.trim(this); + return trim; + } + public final EString upper() { + if (upper == null) upper = Grammar.upper(this); + return upper; + } + public final EString stringValue(){ + return this; + } } }