diff --git a/src/main/java/com/samskivert/depot/clause/OrderBy.java b/src/main/java/com/samskivert/depot/clause/OrderBy.java index c7f6931..8bc1ccb 100644 --- a/src/main/java/com/samskivert/depot/clause/OrderBy.java +++ b/src/main/java/com/samskivert/depot/clause/OrderBy.java @@ -11,6 +11,7 @@ import com.samskivert.util.ArrayUtil; import com.samskivert.depot.expression.SQLExpression; import com.samskivert.depot.impl.FragmentVisitor; import com.samskivert.depot.impl.expression.LiteralExp; +import com.samskivert.depot.impl.expression.RandomExp; /** * Represents an ORDER BY clause. @@ -48,7 +49,7 @@ public class OrderBy implements QueryClause */ public static OrderBy random () { - return ascending(new LiteralExp("rand()")); + return ascending(RandomExp.INSTANCE); } /** diff --git a/src/main/java/com/samskivert/depot/impl/BuildVisitor.java b/src/main/java/com/samskivert/depot/impl/BuildVisitor.java index f133d2a..fb18309 100644 --- a/src/main/java/com/samskivert/depot/impl/BuildVisitor.java +++ b/src/main/java/com/samskivert/depot/impl/BuildVisitor.java @@ -48,6 +48,7 @@ import com.samskivert.depot.impl.clause.UpdateClause; import com.samskivert.depot.impl.expression.AggregateFun; import com.samskivert.depot.impl.expression.IntervalExp; import com.samskivert.depot.impl.expression.LiteralExp; +import com.samskivert.depot.impl.expression.RandomExp; import com.samskivert.depot.impl.expression.ValueExp; import com.samskivert.depot.impl.expression.AggregateFun.Average; import com.samskivert.depot.impl.expression.AggregateFun.Count; @@ -323,6 +324,12 @@ public abstract class BuildVisitor implements FragmentVisitor return null; } + public Void visit (RandomExp randomExp) + { + _builder.append("rand()"); + return null; + } + public Void visit (ValueExp valueExp) { bindValue(valueExp.getValue()); diff --git a/src/main/java/com/samskivert/depot/impl/ExpressionEvaluator.java b/src/main/java/com/samskivert/depot/impl/ExpressionEvaluator.java index 50a0d78..42c11e8 100644 --- a/src/main/java/com/samskivert/depot/impl/ExpressionEvaluator.java +++ b/src/main/java/com/samskivert/depot/impl/ExpressionEvaluator.java @@ -33,6 +33,7 @@ import com.samskivert.depot.impl.clause.DropIndexClause; import com.samskivert.depot.impl.clause.UpdateClause; import com.samskivert.depot.impl.expression.IntervalExp; import com.samskivert.depot.impl.expression.LiteralExp; +import com.samskivert.depot.impl.expression.RandomExp; import com.samskivert.depot.impl.expression.ValueExp; import com.samskivert.depot.impl.expression.AggregateFun.Average; import com.samskivert.depot.impl.expression.AggregateFun.Count; @@ -199,6 +200,11 @@ public class ExpressionEvaluator return new NoValue("Cannot evaluate LiteralExp: " + literalExp); } + public Object visit (RandomExp randomExp) + { + return new NoValue("Cannot evaluate RandomExp"); + } + public Object visit (ValueExp valueExp) { return valueExp.getValue(); diff --git a/src/main/java/com/samskivert/depot/impl/FragmentVisitor.java b/src/main/java/com/samskivert/depot/impl/FragmentVisitor.java index b5c0681..2b07652 100644 --- a/src/main/java/com/samskivert/depot/impl/FragmentVisitor.java +++ b/src/main/java/com/samskivert/depot/impl/FragmentVisitor.java @@ -28,6 +28,7 @@ import com.samskivert.depot.impl.clause.DropIndexClause; import com.samskivert.depot.impl.clause.UpdateClause; import com.samskivert.depot.impl.expression.IntervalExp; import com.samskivert.depot.impl.expression.LiteralExp; +import com.samskivert.depot.impl.expression.RandomExp; import com.samskivert.depot.impl.expression.ValueExp; import com.samskivert.depot.impl.expression.AggregateFun.Average; import com.samskivert.depot.impl.expression.AggregateFun.Count; @@ -89,6 +90,7 @@ public interface FragmentVisitor public T visit (Join join); public T visit (Limit limit); public T visit (LiteralExp literal); + public T visit (RandomExp random); public T visit (ValueExp value); public T visit (IntervalExp interval); public T visit (WhereClause where); diff --git a/src/main/java/com/samskivert/depot/impl/PostgreSQLBuilder.java b/src/main/java/com/samskivert/depot/impl/PostgreSQLBuilder.java index 669cd57..5c11132 100644 --- a/src/main/java/com/samskivert/depot/impl/PostgreSQLBuilder.java +++ b/src/main/java/com/samskivert/depot/impl/PostgreSQLBuilder.java @@ -29,6 +29,7 @@ import com.samskivert.depot.impl.expression.DateFun.DatePart.Part; import com.samskivert.depot.impl.expression.DateFun.DatePart; import com.samskivert.depot.impl.expression.DateFun.DateTruncate; import com.samskivert.depot.impl.expression.IntervalExp; +import com.samskivert.depot.impl.expression.RandomExp; public class PostgreSQLBuilder extends SQLBuilder @@ -39,6 +40,11 @@ public class PostgreSQLBuilder public class PGBuildVisitor extends BuildVisitor { + @Override public Void visit (RandomExp randomExp) { + _builder.append("random()"); + return null; + } + @Override public Void visit (IntervalExp interval) { _builder.append("interval '").append(interval.amount); _builder.append(" ").append(interval.unit).append("'");