blob: e58e8ad1b851c9b1bc8b1eadd1bde73300a5bb42 [file] [log] [blame]
/*=========================================================================
* Copyright Copyright (c) 2000-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* more patents listed at http://www.pivotal.io/patents.
* $Id: QueryObserverAdapter.java,v 1.2 2005/02/01 17:19:20 vaibhav Exp $
*=========================================================================
*/
package com.gemstone.gemfire.cache.query.internal;
import java.util.*;
import com.gemstone.gemfire.cache.query.*;
/**
* This class provides 'do-nothing' implementations of all of the methods of
* interface QueryObserver. See the documentation for class QueryObserverHolder
* for details.
*
* @version $Revision: 1.2 $
* @author derekf
*/
public class QueryObserverAdapter implements QueryObserver {
/**
* Called when a query begins, after any mutex locks have been acquired, but
* before any other processing has taken place.
*/
public void startQuery(Query query) {
}
/**
* Called immediately before the query expression is evaluated. (After it was
* compiled)
*
* @param expression The query Expression
* @param context The execution context that will be used to evaluate the
* expression.
*/
public void beforeQueryEvaluation(CompiledValue expression,
ExecutionContext context) {
}
/**
* Called once right before iteration of a 'select' statement begins.
*
* @param collection The collection being iterated over
* @param whereClause The 'where' clause of the select statement
*/
public void startIteration(Collection collection, CompiledValue whereClause) {
}
/**
* Called once before the evaluation of an expression for a single iteration
* of a 'select' statment. The RuntimeIterator that was passed to
* startIteration should already be referencing the current iteration value.
*
* @param executer the object performing the iteration.
* @param currentObject The current object in the iteration.
*/
public void beforeIterationEvaluation(CompiledValue executer,
Object currentObject) {
}
/**
* Called once after the evaluation of an expression for a single iteration of
* a 'select' statment.
*
* @param result The result of evaluating the where clause. Should be either a
* Boolean, NULL, or UNDEFINED. If evaluating the where clause threw
* an exception, should be NULL.
*/
public void afterIterationEvaluation(Object result) {
}
/**
* Called once right before iteration of a 'select' statement ends.
*
* @param results The set of results returned so far by the iteration.
*/
public void endIteration(SelectResults results) {
}
/**
* Called once right before the query subsystem has requested that the
* indexing subsystem attempt an index lookup.
*
* @param index The index being used for the lookup
* @param oper The operation being attemped on the index. AbstractIndex
*/
public void beforeIndexLookup(Index index, int oper, Object key) {
}
/**
* Called once right after the query subsystem has requested that the indexing
* subsystem attempt an index lookup.
*
* @param results The results of the index lookup, or null if an exception was
* thrown.
*/
public void afterIndexLookup(Collection results) {
}
/**
* Called immediately after the query expression is evaluated.
*
* @param result The results of the evaluation, or null if an exception was
* thrown.
*/
public void afterQueryEvaluation(Object result) {
}
/**
* Called when a query ends, after all processing has taken place but before
* any mutex locks have been released.
*/
public void endQuery() {
}
/**
* Asif : Called just before IndexManager executes the function
* rerunIndexCreationQuery. After this function gets invoked, IndexManager
* will iterate over all the indexes of the region making the data maps null &
* re running the index creation query on the region. The method of Index
* Manager gets executed from the clear function of the Region
*/
public void beforeRerunningIndexCreationQuery() {
}
/**
* Asif : Invoked just before the cartesian of the SelectResults obtained from
* GroupJunctions, is done so as to expand the final resultset to the level of
* iterators in the query. This function will get invoked from
* AllGroupJunction during the evaluation of AND condition
*
* @param grpResults An array of intermediate SelectResults obtained by
* evaluation of GroupJunctions
*
*/
public void beforeCartesianOfGroupJunctionsInAnAllGroupJunctionOfType_AND(
Collection[] grpResults) {
};
/**
* Asif : Invoked just after the cartesian of the SelectResults obtained from
* GroupJunctions, is done so as to expand the final resultset to the level of
* iterators in the query. This function will get invoked from
* AllGroupJunction during the evaluation of AND condition
*
*
*/
public void afterCartesianOfGroupJunctionsInAnAllGroupJunctionOfType_AND() {
};
/**
* Asif :Invoked just before the cartesian of the SelectResults obtained from
* GroupJunctions, is done so as to expand the final resultset to the level of
* Iterators for the CompositeGroupJunction. This function will get invoked
* from CompositeGroupJunction during the evaluation of AND condition and only
* if there exists more than one GroupJunction objects in the
* CompositeGroupJunction
*
* @param grpResults An array of intermediate SelectResults obtained by
* evaluation of GroupJunctions
*
*/
public void beforeCartesianOfGroupJunctionsInCompositeGroupJunctionOfType_AND(
Collection[] grpResults) {
};
/**
* Asif :Invoked just before the cartesian of the SelectResults obtained from
* GroupJunctions, is done so as to expand the final resultset to the level of
* Iterators for the CompositeGroupJunction. This function will get invoked
* from CompositeGroupJunction during the evaluation of AND condition and only
* if there exists more than one GroupJunction objects in the
* CompositeGroupJunction
*/
public void afterCartesianOfGroupJunctionsInCompositeGroupJunctionOfType_AND() {
}
/**
* Asif : Invoked just before doing expansion or cutdown of results obtained
* from index usage for a filter evaluatable , non composite condition i.e for
* a single base collection.
*
* @param index The index used by the filter evaluatable condition
* @param initialResult The raw resultset obtained for the condition
*
*/
public void beforeCutDownAndExpansionOfSingleIndexResult(Index index,
Collection initialResult) {
}
/**
* Asif :Invoked just after doing expansion or cutdown of results obtained
* from index usage for a filter evaluatable , non composite condition i.e for
* a single base collection.
*
* @param finalResult The final conditioned resultset obtained from use of
* index on the condition
*
*/
public void afterCutDownAndExpansionOfSingleIndexResult(Collection finalResult) {
}
/**
* Asif :Invoked before merging the results of the two indexes, identified for
* evaluation of a filter evalua table equi join condition across two regions (
* Composite Condition). During this merging the appropriate expansion &
* cutdown of the individual index results to the final query level or
* CompositeGroupJunction level also occurs. Also for AND conditions, the
* cartesian with the intermediate resultset will also occur.
*
* @param index1 Range Index identified for one of the operand, to be used in
* equi join condition
* @param index2 Range Index identified for the other operand , to be used in
* equi join condition
* @param initialResult A list in which each element contains a TWO
* dimensional Object array containing two rows. First row contains
* Index Resultset obtained from 1st index & second row contains
* results obtained from second index. Each element of the list
* basically represents an equi join satisfying value ( i.e something
* like 1 = 1, 2 = 2 , 3 = 3 ) etc. Since multiple objects of a
* region can have same value , so there exits rows of Object Array
* for each Index.
*
*/
public void beforeMergeJoinOfDoubleIndexResults(Index index1, Index index2,
Collection initialResult) {
}
/**
* Asif :Invoked after merging the results of the two indexes, identified for
* evaluation of a filter evalua table equi join condition across two regions (
* Composite Condition). During this merging the appropriate expansion &
* cutdown of the individual index results to the final query level or
* CompositeGroupJunction level also occurs. Also for AND conditions, the
* cartesian with the intermediate resultset will also occur.
*
* @param finalResult A SelectResults object created after expansion cutdown
* of two index results for a filter evaluatable CompositeCondition (
* which may have been cartesianed with the intermediate Results. The
* Results obtained may or may not be to the Top Level/
* CompositeGroupJunction level. The number & positions of iterators
* present will depend on whether it is invoked for an OR Junction or
* if Complete Expansion is true or not & the stage of evaluation it
* is in for an AND junction.
*
*/
public void afterMergeJoinOfDoubleIndexResults(Collection finalResult) {
}
/**
* Asif :Invoked before intermediate resultset is iter evaluated to be used
* with the usable index of the operand for filter evaluatable Composite
* CompiledComparison for an AND type CompositeGroupJunction containing more
* than one filter evaluatable composite condition. This invocation implies
* that the indpendent group of iterators of one of the operands of the
* condition is also present in the intermediate resultset which means that
* index for that operand canot be used. Thus the intermediate Resultset is
* iterated & for each tuple , the values set in the respective
* RuntimeIterators. The operand without usable index is evaluated & the Index
* on the other operand is used to get resultset for that value. Thus for each
* tuple we query the index on other operand .
*
* @param usedIndex : The Index which will be used to obtain the ResultSet
* @param unusedIndex : The Index which does not get used as the relevant
* iterators are present in the intermediate resultset
*
*
*/
public void beforeIterJoinOfSingleIndexResults(Index usedIndex,
Index unusedIndex) {
}
/**
* Asif :Invoked after the intermediate resultset is iter evaluated to be used
* with the usable index of the operand for filter evaluatable Composite
* CompiledComparison for an AND type CompositeGroupJunction containing more
* than one filter evaluatable composite condition. This invocation implies
* that the indpendent group of iterators of one of the operands of the
* condition is also present in the intermediate resultset which means that
* index for that operand canot be used. Thus the intermediate Resultset is
* iterated & for each tuple , the values set in the respective
* RuntimeIterators. The operand without usable index is evaluated & the Index
* on the other operand is used to get resultset for that value. Thus for each
* tuple we query the index on other operand .
*
* @param finalResult : A SelectResults object created after expansion /
* cutdown of mergred results where one operand uses Index Results &
* other operand though has an Index available but cannot be used.
* The value of that operand is calculated by iteration of
* intermediate resultset for each tuple. This function gets invoked
* only for an AND junction. The resultset may or may not be up to
* the level of top level query iterators or CompositeGroupJunction
* iterators level.
*
*/
public void afterIterJoinOfSingleIndexResults(Collection finalResult) {
}
/**
* @see com.gemstone.gemfire.cache.query.internal.QueryObserver#beforeIndexLookup(com.gemstone.gemfire.cache.query.Index,
* int, java.lang.Object, int, java.lang.Object, java.util.Set)
*/
public void beforeIndexLookup(Index index, int lowerBoundOperator,
Object lowerBoundKey, int upperBoundOperator, Object upperBoundKey,
Set NotEqualKeys) {
}
public void beforeApplyingProjectionOnFilterEvaluatedResults(Object preProjectionApplied)
{
}
public void invokedQueryUtilsIntersection(SelectResults sr1, SelectResults sr2)
{
}
public void invokedQueryUtilsUnion(SelectResults sr1, SelectResults sr2)
{
}
public void limitAppliedAtIndexLevel(Index index, int limit , Collection indexResult){
}
@Override
public void orderByColumnsEqual() {
}
}