| 
 | Cumulus4j API (1.1.0) | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.cumulus4j.store.query.eval.AbstractExpressionEvaluator<DyadicExpression>
org.cumulus4j.store.query.eval.NotExpressionEvaluator
public class NotExpressionEvaluator
Evaluator handling "!" (negation).
 It is quite expensive to evaluate a negation (JDOQL "!") by first querying the normal (non-negated)
 result and then negating it by querying ALL candidates and finally filtering the normal result
 out. Therefore, we instead push the negation down the expression-evaluator-tree into the leafs.
 Thus NotExpressionEvaluator simply calls ResultDescriptor.negate() and passes the negated
 ResultDescriptor down the evaluator-tree. All nodes in the tree therefore have to take this
 negation-flag into account.
 
Example 1: Instead of querying the expensive expression "!( a > 5 && b <= 12 )", the cheaper equivalent "a <= 5 || b > 12" is used.
Example 2: Instead of "!( !( a > 5 && b <= 12 ) || c > 3 )" the equivalent "( a <= 5 || b > 12 ) && c <= 3" is executed.
See De Morgan's laws in wikipedia for details.
| Constructor Summary | |
|---|---|
| NotExpressionEvaluator(QueryEvaluator queryEvaluator,
                                             AbstractExpressionEvaluator<?> parent,
                                             DyadicExpression expression) | |
| Method Summary | |
|---|---|
| protected  Set<Long> | _queryResultDataEntryIDs(ResultDescriptor resultDescriptor)Execute a query for the given resultDescriptor. | 
| Methods inherited from class org.cumulus4j.store.query.eval.AbstractExpressionEvaluator | 
|---|
| _getResultSymbols, _queryResultObjects, getExpression, getFieldType, getLeft, getParent, getQueryEvaluator, getResultSymbols, getRight, queryResultDataEntryIDs, queryResultObjects, setLeft, setRight | 
| Methods inherited from class java.lang.Object | 
|---|
| clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | 
| Constructor Detail | 
|---|
public NotExpressionEvaluator(QueryEvaluator queryEvaluator,
                              AbstractExpressionEvaluator<?> parent,
                              DyadicExpression expression)
| Method Detail | 
|---|
protected Set<Long> _queryResultDataEntryIDs(ResultDescriptor resultDescriptor)
AbstractExpressionEvaluatorresultDescriptor. This method should contain
 the concrete logic for AbstractExpressionEvaluator.queryResultDataEntryIDs(ResultDescriptor) and must be implemented
 by subclasses.
_queryResultDataEntryIDs in class AbstractExpressionEvaluator<DyadicExpression>resultDescriptor - the descriptor specifying what candidates (usually "this" or a variable) the
 caller is interested in as well as modifiers (e.g. negation)
 affecting the query.
dataEntryIDs that match the query
 criteria for the specified resultSymbol or null, if the symbol is not
 supported (this should be consistent with the implementation of AbstractExpressionEvaluator._getResultSymbols()).AbstractExpressionEvaluator.queryResultDataEntryIDs(ResultDescriptor)| 
 | Cumulus4j API (1.1.0) | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||