package io.ebean;
Represents a Conjunction or a Disjunction.
Basically with a Conjunction you join together many expressions with AND, and
with a Disjunction you join together many expressions with OR.
Note: where() always takes you to the top level WHERE expression list.
Query q =
DB.find(Person.class)
.where()
.or()
.like("name", "Rob%")
.eq("status", Status.NEW)
// where() returns us to the top level expression list
.where().gt("id", 10);
// read as...
// where ( ((name like Rob%) or (status = NEW)) AND (id > 10) )
Note: endJunction() takes you to the parent expression list
Query q =
DB.find(Person.class)
.where()
.or()
.like("name", "Rob%")
.eq("status", Status.NEW)
.endJunction()
// endJunction().. takes us to the 'parent' expression list
// which in this case is the top level (same as where())
.gt("id", 10);
// read as...
// where ( ((name like Rob%) or (status = NEW)) AND (id > 10) )
Example of a nested disjunction.
Query<Customer> q =
DB.find(Customer.class)
.where()
.or()
.and()
.startsWith("name", "r")
.eq("anniversary", onAfter)
.endAnd()
.and()
.eq("status", Customer.Status.ACTIVE)
.gt("id", 0)
.endAnd()
.order().asc("name");
q.findList();
String s = q.getGeneratedSql();
// this produces an expression like:
( name like ? and c.anniversary = ? ) or (c.status = ? and c.id > ? )
/**
* Represents a Conjunction or a Disjunction.
* <p>
* Basically with a Conjunction you join together many expressions with AND, and
* with a Disjunction you join together many expressions with OR.
* </p>
* <p>
* Note: where() always takes you to the top level WHERE expression list.
* </p>
* <pre>{@code
* Query q =
* DB.find(Person.class)
* .where()
* .or()
* .like("name", "Rob%")
* .eq("status", Status.NEW)
*
* // where() returns us to the top level expression list
* .where().gt("id", 10);
*
* // read as...
* // where ( ((name like Rob%) or (status = NEW)) AND (id > 10) )
*
* }</pre>
* <p>
* Note: endJunction() takes you to the parent expression list
* </p>
* <pre>{@code
*
* Query q =
* DB.find(Person.class)
* .where()
* .or()
* .like("name", "Rob%")
* .eq("status", Status.NEW)
* .endJunction()
*
* // endJunction().. takes us to the 'parent' expression list
* // which in this case is the top level (same as where())
*
* .gt("id", 10);
*
* // read as...
* // where ( ((name like Rob%) or (status = NEW)) AND (id > 10) )
* }</pre>
* <p>
* Example of a nested disjunction.
* </p>
* <pre>{@code
* Query<Customer> q =
* DB.find(Customer.class)
* .where()
* .or()
* .and()
* .startsWith("name", "r")
* .eq("anniversary", onAfter)
* .endAnd()
* .and()
* .eq("status", Customer.Status.ACTIVE)
* .gt("id", 0)
* .endAnd()
* .order().asc("name");
*
* q.findList();
* String s = q.getGeneratedSql();
*
* // this produces an expression like:
* ( name like ? and c.anniversary = ? ) or (c.status = ? and c.id > ? )
*
* }</pre>
*/
public interface Junction<T> extends Expression, ExpressionList<T> {
The type of Junction used in full text expressions.
/**
* The type of Junction used in full text expressions.
*/
enum Type {
AND group.
/**
* AND group.
*/
AND(" and ", "", false),
OR group.
/**
* OR group.
*/
OR(" or ", "", false),
NOT group.
/**
* NOT group.
*/
NOT(" and ", "not ", false),
FILTER group (for internal use only).
/**
* FILTER group (for internal use only).
*/
FILTER("filter", "", true),
Text search AND group.
/**
* Text search AND group.
*/
MUST("must", "", true),
Text search NOT group.
/**
* Text search NOT group.
*/
MUST_NOT("must_not", "", true),
Text search OR group.
/**
* Text search OR group.
*/
SHOULD("should", "", true);
private String prefix;
private String literal;
private boolean text;
Type(String literal, String prefix, boolean text) {
this.literal = literal;
this.prefix = prefix;
this.text = text;
}
Return the literal value for this type.
/**
* Return the literal value for this type.
*/
public String literal() {
return literal;
}
Return the prefix value for this type.
/**
* Return the prefix value for this type.
*/
public String prefix() {
return prefix;
}
Return true if this is a text type.
/**
* Return true if this is a text type.
*/
public boolean isText() {
return text;
}
}
}