Package org.apache.cayenne.exp
Class Expression
java.lang.Object
org.apache.cayenne.exp.Expression
- All Implemented Interfaces:
Serializable
,XMLSerializable
- Direct Known Subclasses:
SimpleNode
Superclass of Cayenne expressions that defines basic API for expressions use.
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionstatic final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
Expression describes a path relative to a DbEntity.static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
Interpreted as a comma-separated list of literals.static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
Expression describes a path relative to an ObjEntity.static final int
static final Object
A value that a Transformer might return to indicate that a node has to be pruned from the expression during the transformation.static final int
static final int
static final int
protected int
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionandExp
(Expression exp) Chains this expression with another expression using "and".andExp
(Expression exp, Expression... expressions) Chains this expression with other expressions using "and".void
appendAsEJBQL
(Appendable out, String rootId) Stores a String representation of Expression as EJBQL using a provided Appendable.abstract void
appendAsEJBQL
(List<Object> parameterAccumulator, Appendable out, String rootId) Stores a String representation of Expression as EJBQL using a provided PrintWriter.abstract void
appendAsString
(Appendable out) Appends own content as a String to the provided Appendable.deepCopy()
Clones this expression.void
encodeAsXML
(XMLEncoder encoder, ConfigurationNodeVisitor delegate) Encodes itself, wrapping the string into XML CDATA section.boolean
abstract Object
Calculates expression value with object as a context for path expressions.expName()
Returns String label for this expression.<T> Collection
<?> filter
(Collection<T> source, Collection<T> target) Adds objects matching this expression from the source collection to the target collection.<T> List
<T> filterObjects
(Collection<T> objects) Returns a list of objects that match the expression.<T> T
Returns the first object in the list that matches the expression.protected abstract void
Restructures expression to make sure that there are no children of the same type as this expression.abstract Object
getOperand
(int index) Returns a value of operand atindex
.abstract int
Returns a count of operands of this expression.Returns a map of path aliases for this expression.int
getType()
Returns a type of expression.int
hashCode()
joinExp
(int type, Expression exp) Creates a new expression that joins this object with another expression, using specified join type.joinExp
(int type, Expression exp, Expression... expressions) Creates a new expression that joins this object with other expressions, using specified join type.boolean
Calculates expression boolean value with object as a context for path expressions.abstract Expression
notExp()
Returns a logical NOT of current expression.orExp
(Expression exp) Chains this expression with another expression using "or".orExp
(Expression exp, Expression... expressions) Chains this expression with other expressions using "or".Creates and returns a new Expression instance based on this expression, but with named parameters substituted with provided values.Creates and returns a new Expression instance based on this expression, but with named parameters substituted with provided values.If any subexpressions containing parameters not matching the "name" argument are found, the behavior depends on "pruneMissing" argument.paramsArray
(Object... parameters) Creates and returns a new Expression instance based on this expression, but with parameters substituted with provided values.protected abstract boolean
pruneNodeForPrunedChild
(Object prunedChild) Returns true if this node should be pruned from expression tree in the event a child is removed.abstract void
setOperand
(int index, Object value) Sets a value of operand atindex
.void
setType
(int type) abstract Expression
Creates a copy of this expression node, without copying children.Produces an EJBQL string that represents this expression.Produces an EJBQL string that represents this expression.toString()
Creates a transformed copy of this expression, applying transformation provided by Transformer to all its nodes.protected Object
transformExpression
(Function<Object, Object> transformer) A recursive method called from "transform" to do the actual transformation.protected void
traverse
(Expression parentExp, TraversalHandler visitor) Traverses itself and child expressions, notifying visitor via callback methods as it goes.void
traverse
(TraversalHandler visitor) Traverses itself and child expressions, notifying visitor via callback methods as it goes.
-
Field Details
-
PRUNED_NODE
A value that a Transformer might return to indicate that a node has to be pruned from the expression during the transformation.- Since:
- 1.2
-
AND
public static final int AND- See Also:
-
OR
public static final int OR- See Also:
-
NOT
public static final int NOT- See Also:
-
EQUAL_TO
public static final int EQUAL_TO- See Also:
-
NOT_EQUAL_TO
public static final int NOT_EQUAL_TO- See Also:
-
LESS_THAN
public static final int LESS_THAN- See Also:
-
GREATER_THAN
public static final int GREATER_THAN- See Also:
-
LESS_THAN_EQUAL_TO
public static final int LESS_THAN_EQUAL_TO- See Also:
-
GREATER_THAN_EQUAL_TO
public static final int GREATER_THAN_EQUAL_TO- See Also:
-
BETWEEN
public static final int BETWEEN- See Also:
-
IN
public static final int IN- See Also:
-
LIKE
public static final int LIKE- See Also:
-
LIKE_IGNORE_CASE
public static final int LIKE_IGNORE_CASE- See Also:
-
ADD
public static final int ADD- See Also:
-
SUBTRACT
public static final int SUBTRACT- See Also:
-
MULTIPLY
public static final int MULTIPLY- See Also:
-
DIVIDE
public static final int DIVIDE- See Also:
-
NEGATIVE
public static final int NEGATIVE- See Also:
-
TRUE
public static final int TRUE- See Also:
-
FALSE
public static final int FALSE- See Also:
-
OBJ_PATH
public static final int OBJ_PATHExpression describes a path relative to an ObjEntity. OBJ_PATH expression is resolved relative to some root ObjEntity. Path expression components are separated by "." (dot). Path can point to either one of these:- An attribute of root ObjEntity. For entity Gallery OBJ_PATH expression "galleryName" will point to ObjAttribute "galleryName"
- Another ObjEntity related to root ObjEntity via a chain of relationships. For entity Gallery OBJ_PATH expression "paintingArray.toArtist" will point to ObjEntity "Artist"
- ObjAttribute of another ObjEntity related to root ObjEntity via a chain of relationships. For entity Gallery OBJ_PATH expression "paintingArray.toArtist.artistName" will point to ObjAttribute "artistName"
- See Also:
-
DB_PATH
public static final int DB_PATHExpression describes a path relative to a DbEntity. DB_PATH expression is resolved relative to some root DbEntity. Path expression components are separated by "." (dot). Path can point to either one of these:- An attribute of root DbEntity. For entity GALLERY, DB_PATH expression "GALLERY_NAME" will point to a DbAttribute "GALLERY_NAME".
- Another DbEntity related to root DbEntity via a chain of relationships. For entity GALLERY DB_PATH expression "paintingArray.toArtist" will point to DbEntity "ARTIST".
- DbAttribute of another ObjEntity related to root DbEntity via a chain of relationships. For entity GALLERY DB_PATH expression "paintingArray.toArtist.ARTIST_NAME" will point to DbAttribute "ARTIST_NAME".
- See Also:
-
LIST
public static final int LISTInterpreted as a comma-separated list of literals.- See Also:
-
NOT_BETWEEN
public static final int NOT_BETWEEN- See Also:
-
NOT_IN
public static final int NOT_IN- See Also:
-
NOT_LIKE
public static final int NOT_LIKE- See Also:
-
NOT_LIKE_IGNORE_CASE
public static final int NOT_LIKE_IGNORE_CASE- See Also:
-
BITWISE_NOT
public static final int BITWISE_NOT- Since:
- 3.1
- See Also:
-
BITWISE_AND
public static final int BITWISE_AND- Since:
- 3.1
- See Also:
-
BITWISE_OR
public static final int BITWISE_OR- Since:
- 3.1
- See Also:
-
BITWISE_XOR
public static final int BITWISE_XOR- Since:
- 3.1
- See Also:
-
BITWISE_LEFT_SHIFT
public static final int BITWISE_LEFT_SHIFT- Since:
- 4.0
- See Also:
-
BITWISE_RIGHT_SHIFT
public static final int BITWISE_RIGHT_SHIFT- Since:
- 4.0
- See Also:
-
FUNCTION_CALL
public static final int FUNCTION_CALL- Since:
- 4.0
- See Also:
-
ASTERISK
public static final int ASTERISK- Since:
- 4.0
- See Also:
-
FULL_OBJECT
public static final int FULL_OBJECT- Since:
- 4.0
- See Also:
-
ENCLOSING_OBJECT
public static final int ENCLOSING_OBJECT- Since:
- 4.2
- See Also:
-
EXISTS
public static final int EXISTS- Since:
- 4.2
- See Also:
-
NOT_EXISTS
public static final int NOT_EXISTS- Since:
- 4.2
- See Also:
-
SUBQUERY
public static final int SUBQUERY- Since:
- 4.2
- See Also:
-
DBID_PATH
public static final int DBID_PATH- Since:
- 4.2
- See Also:
-
CUSTOM_OP
public static final int CUSTOM_OP- Since:
- 4.2
- See Also:
-
type
protected int type
-
-
Constructor Details
-
Expression
public Expression()
-
-
Method Details
-
getPathAliases
Returns a map of path aliases for this expression. It returns a non-empty map only if this is a path expression and the aliases are known at the expression creation time. Otherwise an empty map is returned.- Since:
- 3.0
-
expName
Returns String label for this expression. Used for debugging. -
equals
-
hashCode
public int hashCode() -
getType
public int getType()Returns a type of expression. Most common types are defined as public static fields of this interface. -
setType
public void setType(int type) -
paramsArray
Creates and returns a new Expression instance based on this expression, but with parameters substituted with provided values. This is a positional style of binding. If a given parameter name is used more than once, only the first occurrence is treated as "position", subsequent occurrences are bound with the same value as the first one. If expression parameters count is different from the array parameter count, an exception will be thrown.positional style would not allow subexpression pruning.
- Since:
- 4.0
-
params
Creates and returns a new Expression instance based on this expression, but with named parameters substituted with provided values. Any subexpressions containing parameters not matching the "name" argument will be pruned.Note that if you want matching against nulls to be preserved, you must place NULL values for the corresponding keys in the map.
- Since:
- 4.0
-
params
Creates and returns a new Expression instance based on this expression, but with named parameters substituted with provided values.If any subexpressions containing parameters not matching the "name" argument are found, the behavior depends on "pruneMissing" argument. If it is false an Exception will be thrown, otherwise subexpressions with missing parameters will be pruned from the resulting expression.Note that if you want matching against nulls to be preserved, you must place NULL values for the corresponding keys in the map.
- Since:
- 4.0
-
joinExp
Creates a new expression that joins this object with another expression, using specified join type. It is very useful for incrementally building chained expressions, like long AND or OR statements. -
joinExp
Creates a new expression that joins this object with other expressions, using specified join type. It is very useful for incrementally building chained expressions, like long AND or OR statements.- Since:
- 4.0
-
andExp
Chains this expression with another expression using "and". -
andExp
Chains this expression with other expressions using "and".- Since:
- 4.0
-
orExp
Chains this expression with another expression using "or". -
orExp
Chains this expression with other expressions using "or".- Since:
- 4.0
-
notExp
Returns a logical NOT of current expression.- Since:
- 1.0.6
-
getOperandCount
public abstract int getOperandCount()Returns a count of operands of this expression. In real life there are unary (count == 1), binary (count == 2) and ternary (count == 3) expressions. -
getOperand
Returns a value of operand atindex
. Operand indexing starts at 0. -
setOperand
Sets a value of operand atindex
. Operand indexing starts at 0. -
evaluate
Calculates expression value with object as a context for path expressions.- Since:
- 1.1
-
match
Calculates expression boolean value with object as a context for path expressions.- Since:
- 1.1
-
first
Returns the first object in the list that matches the expression.- Since:
- 3.1
-
filterObjects
Returns a list of objects that match the expression. -
filter
Adds objects matching this expression from the source collection to the target collection.- Since:
- 1.1
-
deepCopy
Clones this expression.- Since:
- 1.1
-
shallowCopy
Creates a copy of this expression node, without copying children.- Since:
- 1.1
-
pruneNodeForPrunedChild
Returns true if this node should be pruned from expression tree in the event a child is removed.- Since:
- 1.1
-
flattenTree
protected abstract void flattenTree()Restructures expression to make sure that there are no children of the same type as this expression.- Since:
- 1.1
-
traverse
Traverses itself and child expressions, notifying visitor via callback methods as it goes. This is an Expression-specific implementation of the "Visitor" design pattern.- Since:
- 1.1
-
traverse
Traverses itself and child expressions, notifying visitor via callback methods as it goes.- Since:
- 1.1
-
transform
Creates a transformed copy of this expression, applying transformation provided by Transformer to all its nodes. Null transformer will result in an identical deep copy of this expression.To force a node and its children to be pruned from the copy, Transformer should return Expression.PRUNED_NODE. Otherwise an expectation is that if a node is an Expression it must be transformed to null or another Expression. Any other object type would result in a ExpressionException.
- Since:
- 1.1
-
transformExpression
A recursive method called from "transform" to do the actual transformation.- Returns:
- null, Expression.PRUNED_NODE or transformed expression.
- Since:
- 1.2
-
encodeAsXML
Encodes itself, wrapping the string into XML CDATA section.- Specified by:
encodeAsXML
in interfaceXMLSerializable
- Since:
- 1.1
-
appendAsString
Appends own content as a String to the provided Appendable.- Throws:
IOException
- Since:
- 4.0
-
appendAsEJBQL
Stores a String representation of Expression as EJBQL using a provided Appendable. DB path expressions produce non-standard EJBQL path expressions.- Throws:
IOException
- Since:
- 4.0
-
appendAsEJBQL
public abstract void appendAsEJBQL(List<Object> parameterAccumulator, Appendable out, String rootId) throws IOException Stores a String representation of Expression as EJBQL using a provided PrintWriter. DB path expressions produce non-standard EJBQL path expressions. If the parameterAccumulator is supplied then as the EJBQL is output, it may load parameters into this list. In this case, the EJBQL output will contain reference to positional parameters. If no parameterAccumulator is supplied and a scalar type is encountered for which there is no EJBQL literal representation (such as dates) then this method will throw a runtime exception to indicate that it was not possible to generate a string-only representation of the Expression in EJBQL.- Throws:
IOException
- Since:
- 4.0
-
toString
-
toEJBQL
Produces an EJBQL string that represents this expression. If the parameterAccumulator is supplied then, where appropriate, parameters to the EJBQL may be written into the parameterAccumulator. If this method encounters a scalar type which is not able to be represented as an EJBQL literal then this method will throw a runtime exception to indicate that it was not possible to generate a string-only representation of the Expression as EJBQL.- Since:
- 3.1
-
toEJBQL
Produces an EJBQL string that represents this expression. If this method encounters a scalar type which is not able to be represented as an EJBQL literal then this method will throw a runtime exception.- Since:
- 3.0
-