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.expression.SQLExpression;
|
||||||
import com.samskivert.depot.impl.FragmentVisitor;
|
import com.samskivert.depot.impl.FragmentVisitor;
|
||||||
import com.samskivert.depot.impl.expression.LiteralExp;
|
import com.samskivert.depot.impl.expression.LiteralExp;
|
||||||
|
import com.samskivert.depot.impl.expression.RandomExp;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents an ORDER BY clause.
|
* Represents an ORDER BY clause.
|
||||||
@@ -48,7 +49,7 @@ public class OrderBy implements QueryClause
|
|||||||
*/
|
*/
|
||||||
public static OrderBy random ()
|
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.AggregateFun;
|
||||||
import com.samskivert.depot.impl.expression.IntervalExp;
|
import com.samskivert.depot.impl.expression.IntervalExp;
|
||||||
import com.samskivert.depot.impl.expression.LiteralExp;
|
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.ValueExp;
|
||||||
import com.samskivert.depot.impl.expression.AggregateFun.Average;
|
import com.samskivert.depot.impl.expression.AggregateFun.Average;
|
||||||
import com.samskivert.depot.impl.expression.AggregateFun.Count;
|
import com.samskivert.depot.impl.expression.AggregateFun.Count;
|
||||||
@@ -323,6 +324,12 @@ public abstract class BuildVisitor implements FragmentVisitor<Void>
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Void visit (RandomExp randomExp)
|
||||||
|
{
|
||||||
|
_builder.append("rand()");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public Void visit (ValueExp<?> valueExp)
|
public Void visit (ValueExp<?> valueExp)
|
||||||
{
|
{
|
||||||
bindValue(valueExp.getValue());
|
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.clause.UpdateClause;
|
||||||
import com.samskivert.depot.impl.expression.IntervalExp;
|
import com.samskivert.depot.impl.expression.IntervalExp;
|
||||||
import com.samskivert.depot.impl.expression.LiteralExp;
|
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.ValueExp;
|
||||||
import com.samskivert.depot.impl.expression.AggregateFun.Average;
|
import com.samskivert.depot.impl.expression.AggregateFun.Average;
|
||||||
import com.samskivert.depot.impl.expression.AggregateFun.Count;
|
import com.samskivert.depot.impl.expression.AggregateFun.Count;
|
||||||
@@ -199,6 +200,11 @@ public class ExpressionEvaluator
|
|||||||
return new NoValue("Cannot evaluate LiteralExp: " + literalExp);
|
return new NoValue("Cannot evaluate LiteralExp: " + literalExp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Object visit (RandomExp randomExp)
|
||||||
|
{
|
||||||
|
return new NoValue("Cannot evaluate RandomExp");
|
||||||
|
}
|
||||||
|
|
||||||
public Object visit (ValueExp<?> valueExp)
|
public Object visit (ValueExp<?> valueExp)
|
||||||
{
|
{
|
||||||
return valueExp.getValue();
|
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.clause.UpdateClause;
|
||||||
import com.samskivert.depot.impl.expression.IntervalExp;
|
import com.samskivert.depot.impl.expression.IntervalExp;
|
||||||
import com.samskivert.depot.impl.expression.LiteralExp;
|
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.ValueExp;
|
||||||
import com.samskivert.depot.impl.expression.AggregateFun.Average;
|
import com.samskivert.depot.impl.expression.AggregateFun.Average;
|
||||||
import com.samskivert.depot.impl.expression.AggregateFun.Count;
|
import com.samskivert.depot.impl.expression.AggregateFun.Count;
|
||||||
@@ -89,6 +90,7 @@ public interface FragmentVisitor<T>
|
|||||||
public T visit (Join join);
|
public T visit (Join join);
|
||||||
public T visit (Limit limit);
|
public T visit (Limit limit);
|
||||||
public T visit (LiteralExp<?> literal);
|
public T visit (LiteralExp<?> literal);
|
||||||
|
public T visit (RandomExp random);
|
||||||
public T visit (ValueExp<?> value);
|
public T visit (ValueExp<?> value);
|
||||||
public T visit (IntervalExp interval);
|
public T visit (IntervalExp interval);
|
||||||
public T visit (WhereClause where);
|
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.DatePart;
|
||||||
import com.samskivert.depot.impl.expression.DateFun.DateTruncate;
|
import com.samskivert.depot.impl.expression.DateFun.DateTruncate;
|
||||||
import com.samskivert.depot.impl.expression.IntervalExp;
|
import com.samskivert.depot.impl.expression.IntervalExp;
|
||||||
|
import com.samskivert.depot.impl.expression.RandomExp;
|
||||||
|
|
||||||
public class PostgreSQLBuilder
|
public class PostgreSQLBuilder
|
||||||
extends SQLBuilder
|
extends SQLBuilder
|
||||||
@@ -39,6 +40,11 @@ public class PostgreSQLBuilder
|
|||||||
|
|
||||||
public class PGBuildVisitor extends BuildVisitor
|
public class PGBuildVisitor extends BuildVisitor
|
||||||
{
|
{
|
||||||
|
@Override public Void visit (RandomExp randomExp) {
|
||||||
|
_builder.append("random()");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override public Void visit (IntervalExp interval) {
|
@Override public Void visit (IntervalExp interval) {
|
||||||
_builder.append("interval '").append(interval.amount);
|
_builder.append("interval '").append(interval.amount);
|
||||||
_builder.append(" ").append(interval.unit).append("'");
|
_builder.append(" ").append(interval.unit).append("'");
|
||||||
|
|||||||
Reference in New Issue
Block a user