Cumulus4j API
Class NotExpressionEvaluator

  extended by<DyadicExpression>
      extended by

public class NotExpressionEvaluator
extends AbstractExpressionEvaluator<DyadicExpression>

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.

Marco หงุ่ยตระกูล-Schulze - marco at nightlabs dot de

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
_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)
Description copied from class: AbstractExpressionEvaluator
Execute a query for the given resultDescriptor. This method should contain the concrete logic for AbstractExpressionEvaluator.queryResultDataEntryIDs(ResultDescriptor) and must be implemented by subclasses.

Specified by:
_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.
those 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()).
See Also:

Cumulus4j API

Copyright © 2013 NightLabs Consulting GmbH. All Rights Reserved.