Revamp OrderBy.random() for postgres compatibility.
This commit is contained in:
@@ -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("'");
|
||||
|
||||
Reference in New Issue
Block a user