Revamp OrderBy.random() for postgres compatibility.

This commit is contained in:
Ray J. Greenwell
2014-12-16 19:36:05 -08:00
parent a4356d6c56
commit c9930244dd
5 changed files with 23 additions and 1 deletions
@@ -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<Object>("rand()"));
return ascending(RandomExp.INSTANCE);
}
/**
@@ -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<Void>
return null;
}
public Void visit (RandomExp randomExp)
{
_builder.append("rand()");
return null;
}
public Void visit (ValueExp<?> valueExp)
{
bindValue(valueExp.getValue());
@@ -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();
@@ -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<T>
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);
@@ -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("'");