Move in() and like() into FluentExp (they can certainly operate on an expression), and add notLike() variants.
This commit is contained in:
@@ -123,7 +123,7 @@ public class Ops
|
||||
*/
|
||||
public static FluentExp like (SQLExpression source, Comparable<?> value)
|
||||
{
|
||||
return new Like(source, value);
|
||||
return new Like(source, value, true);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -131,9 +131,26 @@ public class Ops
|
||||
*/
|
||||
public static FluentExp like (SQLExpression source, SQLExpression expr)
|
||||
{
|
||||
return new Like(source, expr);
|
||||
return new Like(source, expr, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an expression that matches when the source is NOT like the supplied value.
|
||||
*/
|
||||
public static FluentExp notLike (SQLExpression source, Comparable<?> value)
|
||||
{
|
||||
return new Like(source, value, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an expression that matches when the source is NOT like the supplied expression.
|
||||
*/
|
||||
public static FluentExp notLike (SQLExpression source, SQLExpression expr)
|
||||
{
|
||||
return new Like(source, expr, false);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Creates an EXISTS expression with the supplied select clause.
|
||||
*/
|
||||
|
||||
@@ -25,8 +25,6 @@ import java.util.Collection;
|
||||
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.Like;
|
||||
|
||||
/**
|
||||
* An expression that unambiguously identifies a field of a class, for example
|
||||
@@ -54,30 +52,12 @@ public class ColumnExp extends FluentExp
|
||||
return new ColumnExp(oClass, name);
|
||||
}
|
||||
|
||||
/** Returns an {@link In} with this column and the supplied values. */
|
||||
public In in (Iterable<? extends Comparable<?>> values)
|
||||
{
|
||||
return new In(this, values);
|
||||
}
|
||||
|
||||
/** Returns a {@link Join} on this column and the supplied target. */
|
||||
public Join join (ColumnExp join)
|
||||
{
|
||||
return new Join(this, join);
|
||||
}
|
||||
|
||||
/** Returns a {@link Like} on this column and the supplied target. */
|
||||
public Like like (Comparable<?> value)
|
||||
{
|
||||
return new Like(this, value);
|
||||
}
|
||||
|
||||
/** Returns a {@link Like} on this column and the supplied target. */
|
||||
public Like like (SQLExpression expr)
|
||||
{
|
||||
return new Like(this, expr);
|
||||
}
|
||||
|
||||
// from SQLExpression
|
||||
public Object accept (FragmentVisitor<?> builder)
|
||||
{
|
||||
|
||||
@@ -32,6 +32,7 @@ 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.Like;
|
||||
import com.samskivert.depot.impl.operator.Mul;
|
||||
import com.samskivert.depot.impl.operator.NotEquals;
|
||||
import com.samskivert.depot.impl.operator.Sub;
|
||||
@@ -78,6 +79,12 @@ public abstract class FluentExp
|
||||
return new In(this, values);
|
||||
}
|
||||
|
||||
/** Returns an {@link In} with this column and the supplied values. */
|
||||
public In in (Iterable<? extends Comparable<?>> values)
|
||||
{
|
||||
return new In(this, values);
|
||||
}
|
||||
|
||||
/** Returns a {@link GreaterThan} with this expression and the supplied target. */
|
||||
public FluentExp greaterThan (Comparable<?> value)
|
||||
{
|
||||
@@ -209,4 +216,29 @@ public abstract class FluentExp
|
||||
{
|
||||
return new Div(this, expr);
|
||||
}
|
||||
|
||||
/** Returns a {@link Like} on this column and the supplied target. */
|
||||
public Like like (Comparable<?> value)
|
||||
{
|
||||
return new Like(this, value, true);
|
||||
}
|
||||
|
||||
/** Returns a {@link Like} on this column and the supplied target. */
|
||||
public Like like (SQLExpression expr)
|
||||
{
|
||||
return new Like(this, expr, true);
|
||||
}
|
||||
|
||||
/** Returns a negated {@link Like} on this column and the supplied target. */
|
||||
public Like notLike (Comparable<?> value)
|
||||
{
|
||||
return new Like(this, value, false);
|
||||
}
|
||||
|
||||
/** Returns a negated {@link Like} on this column and the supplied target. */
|
||||
public Like notLike (SQLExpression expr)
|
||||
{
|
||||
return new Like(this, expr, false);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -86,7 +86,8 @@ public class HSQLBuilder
|
||||
for (String field : fields) {
|
||||
for (String ftsWord : ftsWords) {
|
||||
// build comparisons between each word and column
|
||||
bits.add(new Like(new Lower(new ColumnExp(pClass, field)), "%"+ftsWord+"%"));
|
||||
bits.add(new Like(new Lower(
|
||||
new ColumnExp(pClass, field)), "%"+ftsWord+"%", true));
|
||||
}
|
||||
}
|
||||
// then just OR them all together and we have our query
|
||||
|
||||
@@ -23,24 +23,26 @@ package com.samskivert.depot.impl.operator;
|
||||
import com.samskivert.depot.expression.SQLExpression;
|
||||
|
||||
/**
|
||||
* The SQL 'like' operator.
|
||||
* The SQL 'like' (and 'not like') operator.
|
||||
*/
|
||||
public class Like extends BinaryOperator
|
||||
{
|
||||
public Like (SQLExpression column, Comparable<?> value)
|
||||
public Like (SQLExpression column, Comparable<?> value, boolean like)
|
||||
{
|
||||
super(column, value);
|
||||
_like = like;
|
||||
}
|
||||
|
||||
public Like (SQLExpression column, SQLExpression value)
|
||||
public Like (SQLExpression column, SQLExpression value, boolean like)
|
||||
{
|
||||
super(column, value);
|
||||
_like = like;
|
||||
}
|
||||
|
||||
@Override // from BinaryOperator
|
||||
public String operator()
|
||||
{
|
||||
return " like ";
|
||||
return _like ? " like " : " not like ";
|
||||
}
|
||||
|
||||
@Override // from BinaryOperator
|
||||
@@ -48,4 +50,6 @@ public class Like extends BinaryOperator
|
||||
{
|
||||
return new NoValue("Like operator not implemented");
|
||||
}
|
||||
|
||||
protected boolean _like;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user