From 1fe2c451f83368587e51d2ec2ff5431a2c0bd726 Mon Sep 17 00:00:00 2001 From: Par Winzell Date: Mon, 22 Feb 2010 18:58:57 +0000 Subject: [PATCH] Both In() and IsNull() will work on general expressions, not just columns. --- .../samskivert/depot/expression/ColumnExp.java | 13 ------------- .../samskivert/depot/expression/FluentExp.java | 14 ++++++++++++++ .../com/samskivert/depot/impl/BuildVisitor.java | 4 ++-- .../depot/impl/ExpressionEvaluator.java | 4 ++-- .../depot/impl/PostgreSQL4Builder.java | 2 +- .../com/samskivert/depot/impl/operator/In.java | 17 ++++++++--------- .../samskivert/depot/impl/operator/IsNull.java | 13 ++++++------- 7 files changed, 33 insertions(+), 34 deletions(-) diff --git a/src/java/com/samskivert/depot/expression/ColumnExp.java b/src/java/com/samskivert/depot/expression/ColumnExp.java index c3ce189..0346477 100644 --- a/src/java/com/samskivert/depot/expression/ColumnExp.java +++ b/src/java/com/samskivert/depot/expression/ColumnExp.java @@ -26,7 +26,6 @@ import com.samskivert.depot.PersistentRecord; import com.samskivert.depot.clause.Join; import com.samskivert.depot.impl.FragmentVisitor; import com.samskivert.depot.impl.operator.In; -import com.samskivert.depot.impl.operator.IsNull; import com.samskivert.depot.impl.operator.Like; /** @@ -55,18 +54,6 @@ public class ColumnExp extends FluentExp return new ColumnExp(oClass, name); } - /** Returns an {@link IsNull} with this column as its target. */ - public IsNull isNull () - { - return new IsNull(this); - } - - /** Returns an {@link In} with this column and the supplied values. */ - public In in (Comparable... values) - { - return new In(this, values); - } - /** Returns an {@link In} with this column and the supplied values. */ public In in (Collection> values) { diff --git a/src/java/com/samskivert/depot/expression/FluentExp.java b/src/java/com/samskivert/depot/expression/FluentExp.java index 60ce9e8..f9b084b 100644 --- a/src/java/com/samskivert/depot/expression/FluentExp.java +++ b/src/java/com/samskivert/depot/expression/FluentExp.java @@ -28,6 +28,8 @@ import com.samskivert.depot.impl.operator.Div; import com.samskivert.depot.impl.operator.Equals; import com.samskivert.depot.impl.operator.GreaterThan; import com.samskivert.depot.impl.operator.GreaterThanEquals; +import com.samskivert.depot.impl.operator.In; +import com.samskivert.depot.impl.operator.IsNull; import com.samskivert.depot.impl.operator.LessThan; import com.samskivert.depot.impl.operator.LessThanEquals; import com.samskivert.depot.impl.operator.Mul; @@ -64,6 +66,18 @@ public abstract class FluentExp return new NotEquals(this, expr); } + /** Returns an {@link IsNull} with this expression as its target. */ + public IsNull isNull () + { + return new IsNull(this); + } + + /** Returns an {@link In} with this expression and the supplied values. */ + public In in (Comparable... values) + { + return new In(this, values); + } + /** Returns a {@link GreaterThan} with this expression and the supplied target. */ public FluentExp greaterThan (Comparable value) { diff --git a/src/java/com/samskivert/depot/impl/BuildVisitor.java b/src/java/com/samskivert/depot/impl/BuildVisitor.java index 38a0368..95f6a72 100644 --- a/src/java/com/samskivert/depot/impl/BuildVisitor.java +++ b/src/java/com/samskivert/depot/impl/BuildVisitor.java @@ -197,7 +197,7 @@ public abstract class BuildVisitor implements FragmentVisitor public Void visit (IsNull isNull) { - isNull.getColumn().accept(this); + isNull.getExpression().accept(this); _builder.append(" is null"); return null; } @@ -209,7 +209,7 @@ public abstract class BuildVisitor implements FragmentVisitor new ValueExp(false).accept(this); return null; } - in.getColumn().accept(this); + in.getExpression().accept(this); _builder.append(" in ("); Comparable[] values = in.getValues(); for (int ii = 0; ii < values.length; ii ++) { diff --git a/src/java/com/samskivert/depot/impl/ExpressionEvaluator.java b/src/java/com/samskivert/depot/impl/ExpressionEvaluator.java index c527d92..ca5b154 100644 --- a/src/java/com/samskivert/depot/impl/ExpressionEvaluator.java +++ b/src/java/com/samskivert/depot/impl/ExpressionEvaluator.java @@ -137,13 +137,13 @@ public class ExpressionEvaluator public Object visit (IsNull isNull) { - Object operand = isNull.getColumn().accept(this); + Object operand = isNull.getExpression().accept(this); return (operand instanceof NoValue) ? operand : operand != null; } public Object visit (In in) { - Object operand = in.getColumn().accept(this); + Object operand = in.getExpression().accept(this); return (operand instanceof NoValue) ? operand : -1 != ArrayUtil.indexOf(in.getValues(), operand); } diff --git a/src/java/com/samskivert/depot/impl/PostgreSQL4Builder.java b/src/java/com/samskivert/depot/impl/PostgreSQL4Builder.java index 214284c..57ad6f7 100644 --- a/src/java/com/samskivert/depot/impl/PostgreSQL4Builder.java +++ b/src/java/com/samskivert/depot/impl/PostgreSQL4Builder.java @@ -45,7 +45,7 @@ public class PostgreSQL4Builder extends PostgreSQLBuilder new ValueExp(false).accept(this); return null; } - in.getColumn().accept(this); + in.getExpression().accept(this); _builder.append(" = any (?)"); _bindables.add(new Bindable() { public void doBind (Connection conn, PreparedStatement stmt, int argIdx) diff --git a/src/java/com/samskivert/depot/impl/operator/In.java b/src/java/com/samskivert/depot/impl/operator/In.java index 3929041..474ea82 100644 --- a/src/java/com/samskivert/depot/impl/operator/In.java +++ b/src/java/com/samskivert/depot/impl/operator/In.java @@ -23,7 +23,6 @@ package com.samskivert.depot.impl.operator; import java.util.Collection; import com.samskivert.depot.PersistentRecord; -import com.samskivert.depot.expression.ColumnExp; import com.samskivert.depot.expression.SQLExpression; import com.samskivert.depot.impl.FragmentVisitor; @@ -36,20 +35,20 @@ public class In /** The maximum number of keys allowed in an IN() clause. */ public static final int MAX_KEYS = Short.MAX_VALUE; - public In (ColumnExp column, Comparable... values) + public In (SQLExpression expression, Comparable... values) { - _column = column; + _expression = expression; _values = values; } - public In (ColumnExp pColumn, Collection> values) + public In (SQLExpression pColumn, Collection> values) { this(pColumn, values.toArray(new Comparable[values.size()])); } - public ColumnExp getColumn () + public SQLExpression getExpression () { - return _column; + return _expression; } public Comparable[] getValues () @@ -66,14 +65,14 @@ public class In // from SQLFragment public void addClasses (Collection> classSet) { - _column.addClasses(classSet); + _expression.addClasses(classSet); } @Override // from Object public String toString () { StringBuilder builder = new StringBuilder(); - builder.append(_column).append(" in ("); + builder.append(_expression).append(" in ("); for (int ii = 0; ii < _values.length; ii++) { if (ii > 0) { builder.append(", "); @@ -84,6 +83,6 @@ public class In return builder.append(")").toString(); } - protected ColumnExp _column; + protected SQLExpression _expression; protected Comparable[] _values; } diff --git a/src/java/com/samskivert/depot/impl/operator/IsNull.java b/src/java/com/samskivert/depot/impl/operator/IsNull.java index 9bf9834..9f7f42a 100644 --- a/src/java/com/samskivert/depot/impl/operator/IsNull.java +++ b/src/java/com/samskivert/depot/impl/operator/IsNull.java @@ -23,7 +23,6 @@ package com.samskivert.depot.impl.operator; import java.util.Collection; import com.samskivert.depot.PersistentRecord; -import com.samskivert.depot.expression.ColumnExp; import com.samskivert.depot.expression.SQLExpression; import com.samskivert.depot.impl.FragmentVisitor; @@ -33,14 +32,14 @@ import com.samskivert.depot.impl.FragmentVisitor; public class IsNull implements SQLExpression { - public IsNull (ColumnExp column) + public IsNull (SQLExpression expression) { - _column = column; + _expression = expression; } - public ColumnExp getColumn() + public SQLExpression getExpression () { - return _column; + return _expression; } // from SQLFragment @@ -57,8 +56,8 @@ public class IsNull @Override // from Object public String toString () { - return "IsNull(" + _column + ")"; + return "IsNull(" + _expression + ")"; } - protected ColumnExp _column; + protected SQLExpression _expression; }