blob: 2e5a8b43bb87d029ae9fc5ab8de5b168216b31a1 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional information regarding
* copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License. You may obtain a
* copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.geode.cache.query;
import java.util.Collection;
import java.util.List;
import org.apache.geode.cache.Cache;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.query.internal.Undefined;
/**
* Interface for the query service, which is used for instantiating queries, creating and destroying
* indexes, creating CQs and operating on CQs.
*
* Creating an index on an employee's age using QueryService in region "employeeRegion":
*
* <pre>
* <code>
* QueryService queryService = cache.getQueryService();
* queryService.createIndex ("SampleIndex", // indexName
* "e.age", // indexedExpression
* "/employeeRegion e"); //regionPath
* </code>
* </pre>
*
* The CQs work on the server regions, the client can use the CQ methods supported in this class to
* create/operate CQs on the server. The CQ obtains the Server connection from the corresponding
* local region on the client. The implementation of this interface is obtained from the Cache using
* {@link Cache#getQueryService}.
*
*
* @since GemFire 4.0
*/
public interface QueryService {
/** The undefined constant */
Object UNDEFINED = new Undefined();
/**
* Constructs a new <code>Query</code> object.
*
* @param queryString the String that is the query program
* @return The new <code>Query</code> object.
* @throws QueryInvalidException if the syntax of the queryString is invalid.
* @see Query
*/
Query newQuery(String queryString);
/**
* Create a hash index that can be used when executing equal and not equal queries. Hash index is
* not supported with asynchronous index maintenance. Hash index is also not supported with a from
* clause with multiple iterators. Queries on numeric types must match the indexed value. For
* Example: For a float field the query should be specified as floatField = 1.0f
*
* @param indexName the name of this index.
* @param indexedExpression refers to the field of the region values that are referenced by the
* regionPath.
* @param regionPath that resolves to region values or nested collections of region values which
* will correspond to the FROM clause in a query. Check following examples. The regionPath
* is restricted to only one expression
*
* Example: Query1: "Select * from /portfolio p where p.mktValue = 25.00" For index on
* mktValue field: indexExpression: "p.mktValue" regionPath: "/portfolio p"
*
* @return the newly created Index
* @throws QueryInvalidException if the argument query language strings have invalid syntax
* @throws IndexInvalidException if the arguments do not correctly specify an index
* @throws IndexNameConflictException if an index with this name already exists
* @throws IndexExistsException if an index with these parameters already exists with a different
* name
* @throws RegionNotFoundException if the region referred to in the fromClause doesn't exist
* @throws UnsupportedOperationException If Index is being created on a region which does not
* support indexes.
*
* @deprecated Due to the overhead caused by rehashing while expanding the backing array, hash
* index has been deprecated since Apache Geode 1.4.0. Use method
* {@link QueryService#createIndex(String, String, String)} instead.
*/
@Deprecated
Index createHashIndex(String indexName, String indexedExpression, String regionPath)
throws IndexInvalidException, IndexNameConflictException, IndexExistsException,
RegionNotFoundException, UnsupportedOperationException;
/**
* Defines a key index that can be used when executing queries. The key index expression indicates
* query engine to use region key as index for query evaluation. They are used to make use of the
* implicit hash index supported with GemFire regions.
*
* @param indexName the name of this index.
* @param indexedExpression refers to the keys of the region that is referenced by the regionPath.
* For example, an index with indexedExpression "ID" might be used for a query with a WHERE
* clause of "ID > 10", In this case the ID value is evaluated using region keys.
* @param regionPath that resolves to the region which will correspond to the FROM clause in a
* query. The regionPath must include exactly one region.
*
* Example: Query1: "Select * from /portfolio p where p.ID = 10" indexExpression: "p.ID"
* regionPath: "/portfolio p"
*
* @throws RegionNotFoundException if the region referred to in the fromClause doesn't exist
*/
void defineKeyIndex(String indexName, String indexedExpression, String regionPath)
throws RegionNotFoundException;
/**
* Defines a hash index that can be used when executing equal and not equal queries. Hash index is
* not supported with asynchronous index maintenance. Hash index is also not supported with a from
* clause with multiple iterators. Queries on numeric types must match the indexed value. For
* Example: For a float field the query should be specified as floatField = 1.0f To create all the
* defined indexes call {@link #createDefinedIndexes()}
*
* @param indexName the name of this index.
* @param indexedExpression refers to the field of the region values that are referenced by the
* regionPath.
* @param regionPath that resolves to region values or nested collections of region values which
* will correspond to the FROM clause in a query. Check following examples. The regionPath
* is restricted to only one expression
*
* Example: Query1: "Select * from /portfolio p where p.mktValue = 25.00" For index on
* mktValue field: indexExpression: "p.mktValue" regionPath: "/portfolio p"
*
* @throws RegionNotFoundException if the region referred to in the fromClause doesn't exist
*
* @deprecated Due to the overhead caused by rehashing while expanding the backing array, hash
* index has been deprecated since Apache Geode 1.4.0. Use method
* {@link QueryService#defineIndex(String, String, String)} instead.
*/
@Deprecated
void defineHashIndex(String indexName, String indexedExpression, String regionPath)
throws RegionNotFoundException;
/**
* Defines a hash index that can be used when executing equal and not equal queries. Hash index is
* not supported with asynchronous index maintenance. Hash index is also not supported with a from
* clause with multiple iterators. Queries on numeric types must match the indexed value. For
* Example: For a float field the query should be specified as floatField = 1.0f To create all the
* defined indexes call {@link #createDefinedIndexes()}
*
* @param indexName the name of this index.
* @param indexedExpression refers to the field of the region values that are referenced by the
* regionPath.
* @param regionPath that resolves to region values or nested collections of region values which
* will correspond to the FROM clause in a query. The regionPath must include exactly one
* region The regionPath is restricted to only one expression
* @param imports string containing imports (in the query language syntax, each import statement
* separated by a semicolon), provides packages and classes used in variable typing in the
* Indexed and FROM expressions. The use is the same as for the FROM clause in querying.
*
* Example: Query1: "Select * from /portfolio p where p.mktValue = 25.00" For index on
* mktValue field: indexExpression: "p.mktValue" regionPath: "/portfolio p"
*
* @throws RegionNotFoundException if the region referred to in the fromClause doesn't exist
*
* @deprecated Due to the overhead caused by rehashing while expanding the backing array, hash
* index has been deprecated since Apache Geode 1.4.0. Use method
* {@link QueryService#defineIndex(String, String, String, String)} instead.
*/
@Deprecated
void defineHashIndex(String indexName, String indexedExpression, String regionPath,
String imports) throws RegionNotFoundException;
/**
* Defines an index that can be used when executing queries. To create all the defined indexes
* call {@link #createDefinedIndexes()}
*
* @param indexName the name of this index.
* @param indexedExpression refers to the field of the region values that are referenced by the
* regionPath.
* @param regionPath that resolves to region values or nested collections of region values which
* will correspond to the FROM clause in a query. Check following examples. The regionPath
* must include exactly one region, but may include multiple expressions as required to
* drill down into nested region contents.
*
* Example: Query1: "Select * from /portfolio p where p.mktValue > 25.00" For index on
* mktValue field: indexExpression: "p.mktValue" regionPath: "/portfolio p"
*
* Query2: "Select * from /portfolio p, p.positions.values pos where pos.secId ='VMWARE'"
* For index on secId field: indexExpression: "pos.secId" regionPath: "/portfolio p,
* p.positions.values pos"
* @throws RegionNotFoundException if the region referred to in the fromClause doesn't exist
*
*/
void defineIndex(String indexName, String indexedExpression, String regionPath)
throws RegionNotFoundException;
/**
* Defines an index that can be used when executing queries. To create all the defined indexes
* call {@link #createDefinedIndexes()}
*
* @param indexName the name of this index.
* @param indexedExpression refers to the field of the region values that are referenced by the
* regionPath.
* @param regionPath that resolves to region values or nested collections of region values which
* will correspond to the FROM clause in a query. The regionPath must include exactly one
* region, but may include multiple expressions as required to drill down into nested
* region contents. Check following examples.
* @param imports string containing imports (in the query language syntax, each import statement
* separated by a semicolon), provides packages and classes used in variable typing in the
* Indexed and FROM expressions. The use is the same as for the FROM clause in querying.
*
* Example: Query1: "Select * from /portfolio p where p.mktValue > 25.00" For index on
* mktValue field: indexExpression: "p.mktValue" regionPath: "/portfolio p"
*
* Query2: "Select * from /portfolio p, p.positions.values pos where pos.secId ='VMWARE'"
* For index on secId field: indexExpression: "pos.secId" regionPath: "/portfolio p,
* p.positions.values pos TYPE Position" imports: "package.Position"
* @throws QueryInvalidException if the argument query language strings have invalid syntax
* @throws IndexInvalidException if the arguments do not correctly specify an index
* @throws RegionNotFoundException if the region referred to in the fromClause doesn't exist
* @throws UnsupportedOperationException If Index is being created on a region which overflows to
* disk
*/
void defineIndex(String indexName, String indexedExpression, String regionPath, String imports)
throws RegionNotFoundException;
/**
* Create a hash index that can be used when executing equal and not equal queries. Hash index is
* not supported with asynchronous index maintenance. Hash index is also not supported with a from
* clause with multiple iterators. Queries on numeric types must match the indexed value. For
* Example: For a float field the query should be specified as floatField = 1.0f
*
* @param indexName the name of this index.
* @param indexedExpression refers to the field of the region values that are referenced by the
* regionPath.
* @param regionPath that resolves to region values or nested collections of region values which
* will correspond to the FROM clause in a query. The regionPath must include exactly one
* region The regionPath is restricted to only one expression
* @param imports string containing imports (in the query language syntax, each import statement
* separated by a semicolon), provides packages and classes used in variable typing in the
* Indexed and FROM expressions. The use is the same as for the FROM clause in querying.
*
* Example: Query1: "Select * from /portfolio p where p.mktValue = 25.00" For index on
* mktValue field: indexExpression: "p.mktValue" regionPath: "/portfolio p"
*
* @return the newly created Index
* @throws QueryInvalidException if the argument query language strings have invalid syntax
* @throws IndexInvalidException if the arguments do not correctly specify an index
* @throws IndexNameConflictException if an index with this name already exists
* @throws IndexExistsException if an index with these parameters already exists with a different
* name
* @throws RegionNotFoundException if the region referred to in the fromClause doesn't exist
* @throws UnsupportedOperationException If Index is being created on a region which overflows to
* disk
*
* @deprecated Due to the overhead caused by rehashing while expanding the backing array, hash
* index has been deprecated since Apache Geode 1.4.0. Use method
* {@link QueryService#createIndex(String, String, String, String)} instead
*/
@Deprecated
Index createHashIndex(String indexName, String indexedExpression, String regionPath,
String imports) throws IndexInvalidException, IndexNameConflictException,
IndexExistsException, RegionNotFoundException, UnsupportedOperationException;
/**
*
* @deprecated As of 6.6.2, use {@link #createIndex(String, String, String)} and
* {@link #createKeyIndex(String, String, String)} instead.
*
* Create an index that can be used when executing queries.
*
* @param indexName the name of this index, used for statistics collection and to identify this
* index for later access
* @param indexType the type of index. The indexType must be either IndexType.FUNCTIONAL or
* IndexType.PRIMARY_KEY.
* @param indexedExpression refers to the elements of the collection (or collection of structs)
* that are referenced in the fromClause. This expression is used to optimize the
* comparison of the same path found in a query's WHERE clause when used to compare against
* a constant expression. For example, an index with indexedExpression "mktValue" might be
* used for a query with a WHERE clause of "mktValue > 25.00". The exact use and
* specification of the indexedExpression varies depending on the indexType. Query
* parameters and region paths are not allowed in the indexedExpression (e.g. $1).
* @param fromClause expression, that resolves to a collection or list of collections which will
* correspond to the FROM clause or part of a FROM clause in a SELECT statement. The FROM
* clause must include exactly one region, but may include multiple FROM expressions as
* required to drill down into nested region contents. The collections that the FROM
* expressions evaluate to must be dependent on one and only one entry in the referenced
* region (otherwise the index could not be maintained on single entry updates). References
* to query parameters are not allowed. For primary key indexes, the fromClause must be
* just one collection which must be a region path only.
* @return the newly created Index
* @throws QueryInvalidException if the argument query language strings have invalid syntax
* @throws IndexInvalidException if the arguments do not correctly specify an index
* @throws IndexNameConflictException if an index with this name already exists
* @throws IndexExistsException if an index with these parameters already exists with a different
* name
* @throws RegionNotFoundException if the region referred to in the fromClause doesn't exist
* @throws UnsupportedOperationException If Index is being created on a region which overflows to
* disk
*
*/
@Deprecated
Index createIndex(String indexName, IndexType indexType, String indexedExpression,
String fromClause) throws IndexInvalidException, IndexNameConflictException,
IndexExistsException, RegionNotFoundException, UnsupportedOperationException;
/**
* @deprecated As of 6.6.2, use {@link #createIndex(String, String, String, String)} and
* {@link #createKeyIndex(String, String, String)} instead.
*
* Create an index that can be used when executing queries.
*
* @param indexName the name of this index, used for statistics collection and to identify this
* index for later access
* @param indexType the type of index. The indexType must be either IndexType.FUNCTIONAL or
* IndexType.PRIMARY_KEY.
* @param indexedExpression refers to the elements of the collection (or collection of structs)
* that are referenced in the fromClause. This expression is used to optimize the
* comparison of the same path found in a query's WHERE clause when used to compare against
* a constant expression. For example, an index with indexedExpression "mktValue" might be
* used for a query with a WHERE clause of "mktValue > 25.00". The exact use and
* specification of the indexedExpression varies depending on the indexType. Query
* parameters and region paths are not allowed in the indexedExpression (e.g. $1).
* @param fromClause expression, that resolves to a collection or list of collections which will
* correspond to the FROM clause or part of a FROM clause in a SELECT statement. The FROM
* clause must include exactly one region, but may include multiple FROM expressions as
* required to drill down into nested region contents. The collections that the FROM
* expressions evaluate to must be dependent on one and only one entry in the referenced
* region (otherwise the index could not be maintained on single entry updates). References
* to query parameters are not allowed. For primary key indexes, the fromClause must be
* just one collection which must be a region path only.
* @param imports string containing imports (in the query language syntax, each import statement
* separated by a semicolon), provides packages and classes used in variable typing in the
* Indexed and FROM expressions. The use is the same as for the FROM clause in querying.
* @return the newly created Index
* @throws QueryInvalidException if the argument query language strings have invalid syntax
* @throws IndexInvalidException if the arguments do not correctly specify an index
* @throws IndexNameConflictException if an index with this name already exists
* @throws IndexExistsException if an index with these parameters already exists with a different
* name
* @throws RegionNotFoundException if the region referred to in the fromClause doesn't exist
* @throws UnsupportedOperationException If Index is being created on a region which overflows to
* disk
*/
@Deprecated
Index createIndex(String indexName, IndexType indexType, String indexedExpression,
String fromClause, String imports) throws IndexInvalidException, IndexNameConflictException,
IndexExistsException, RegionNotFoundException, UnsupportedOperationException;
/**
* Create an index that can be used when executing queries.
*
* @param indexName the name of this index.
* @param indexedExpression refers to the field of the region values that are referenced by the
* regionPath.
* @param regionPath that resolves to region values or nested collections of region values which
* will correspond to the FROM clause in a query. Check following examples. The regionPath
* must include exactly one region, but may include multiple expressions as required to
* drill down into nested region contents.
*
* Example: Query1: "Select * from /portfolio p where p.mktValue > 25.00" For index on
* mktValue field: indexExpression: "p.mktValue" regionPath: "/portfolio p"
*
* Query2: "Select * from /portfolio p, p.positions.values pos where pos.secId ='VMWARE'"
* For index on secId field: indexExpression: "pos.secId" regionPath: "/portfolio p,
* p.positions.values pos"
* @return the newly created Index
* @throws QueryInvalidException if the argument query language strings have invalid syntax
* @throws IndexInvalidException if the arguments do not correctly specify an index
* @throws IndexNameConflictException if an index with this name already exists
* @throws IndexExistsException if an index with these parameters already exists with a different
* name
* @throws RegionNotFoundException if the region referred to in the fromClause doesn't exist
* @throws UnsupportedOperationException If Index is being created on a region which does not
* support indexes.
*
*/
Index createIndex(String indexName, String indexedExpression, String regionPath)
throws IndexInvalidException, IndexNameConflictException, IndexExistsException,
RegionNotFoundException, UnsupportedOperationException;
/**
* Create an index that can be used when executing queries.
*
* @param indexName the name of this index.
* @param indexedExpression refers to the field of the region values that are referenced by the
* regionPath.
* @param regionPath that resolves to region values or nested collections of region values which
* will correspond to the FROM clause in a query. The regionPath must include exactly one
* region, but may include multiple expressions as required to drill down into nested
* region contents. Check following examples.
* @param imports string containing imports (in the query language syntax, each import statement
* separated by a semicolon), provides packages and classes used in variable typing in the
* Indexed and FROM expressions. The use is the same as for the FROM clause in querying.
*
* Example: Query1: "Select * from /portfolio p where p.mktValue > 25.00" For index on
* mktValue field: indexExpression: "p.mktValue" regionPath: "/portfolio p"
*
* Query2: "Select * from /portfolio p, p.positions.values pos where pos.secId ='VMWARE'"
* For index on secId field: indexExpression: "pos.secId" regionPath: "/portfolio p,
* p.positions.values pos TYPE Position" imports: "package.Position"
* @return the newly created Index
* @throws QueryInvalidException if the argument query language strings have invalid syntax
* @throws IndexInvalidException if the arguments do not correctly specify an index
* @throws IndexNameConflictException if an index with this name already exists
* @throws IndexExistsException if an index with these parameters already exists with a different
* name
* @throws RegionNotFoundException if the region referred to in the fromClause doesn't exist
* @throws UnsupportedOperationException If Index is being created on a region which overflows to
* disk
*/
Index createIndex(String indexName, String indexedExpression, String regionPath, String imports)
throws IndexInvalidException, IndexNameConflictException, IndexExistsException,
RegionNotFoundException, UnsupportedOperationException;
/**
* Create a key index that can be used when executing queries. The key index expression indicates
* query engine to use region key as index for query evaluation. They are used to make use of the
* implicit hash index supported with GemFire regions.
*
* @param indexName the name of this index.
* @param indexedExpression refers to the keys of the region that is referenced by the regionPath.
* For example, an index with indexedExpression "ID" might be used for a query with a WHERE
* clause of "ID > 10", In this case the ID value is evaluated using region keys.
* @param regionPath that resolves to the region which will correspond to the FROM clause in a
* query. The regionPath must include exactly one region.
*
* Example: Query1: "Select * from /portfolio p where p.ID = 10" indexExpression: "p.ID"
* regionPath: "/portfolio p"
*
* @return the newly created Index
* @throws QueryInvalidException if the argument query language strings have invalid syntax
* @throws IndexInvalidException if the arguments do not correctly specify an index
* @throws IndexNameConflictException if an index with this name already exists
* @throws IndexExistsException if an index with these parameters already exists with a different
* name
* @throws RegionNotFoundException if the region referred to in the fromClause doesn't exist
* @throws UnsupportedOperationException If Index is being created on a region which overflows to
* disk
*/
Index createKeyIndex(String indexName, String indexedExpression, String regionPath)
throws IndexInvalidException, IndexNameConflictException, IndexExistsException,
RegionNotFoundException, UnsupportedOperationException;
/**
* Creates all the indexes that were defined using {@link #defineIndex(String, String, String)}
*
* @throws MultiIndexCreationException which consists a map of failed indexNames and the
* Exceptions.
*/
List<Index> createDefinedIndexes() throws MultiIndexCreationException;
/**
* Clears all the indexes that were defined using {@link #defineIndex(String, String, String)}
*/
boolean clearDefinedIndexes();
/**
* Get the Index from the specified Region with the specified name.
*
* @param region the Region for the requested index
* @return the index of the region with this name, or null if there isn't one
*/
Index getIndex(Region<?, ?> region, String indexName);
/**
* Get a collection of all the indexes in the Cache.
*
* @return the collection of all indexes in this Cache, or an empty (unmodifiable) collection if
* no indexes are found.
*/
Collection<Index> getIndexes();
/**
* Get a collection of all the indexes on the specified Region
*
* @param region the region for the requested indexes
* @return the collection of indexes on the specified region, or an empty (unmodifiable)
* collection if no indexes are found.
*/
Collection<Index> getIndexes(Region<?, ?> region);
/**
*
* @deprecated As of 6.6.2, use {@link #getIndexes(Region)} only.
*
* Get a collection of all the indexes on the specified Region of the specified index
* type.
*
* @param region the region for the requested indexes
* @param indexType the type of indexes to get. Currently must be Indexable.FUNCTIONAL
* @return the collection of indexes for the specified region and type, or an empty (unmodifiable)
* collection if no indexes are found.
*/
@Deprecated
Collection<Index> getIndexes(Region<?, ?> region, IndexType indexType);
/**
* Remove the specified index.
*
* @param index the Index to remove
*/
void removeIndex(Index index);
/**
* Remove all the indexes from this cache.
*/
void removeIndexes();
/**
* Remove all the indexes on the specified Region
*
* @param region the Region to remove all indexes from
*/
void removeIndexes(Region<?, ?> region);
// CQ Service related APIs.
/**
* Constructs a new continuous query, represented by an instance of CqQuery. The CqQuery is not
* executed until the execute method is invoked on the CqQuery.
*
* @since GemFire 5.5
* @param queryString the OQL query
* @param cqAttr the CqAttributes
* @return the newly created CqQuery object
* @throws IllegalArgumentException if queryString or cqAttr is null.
* @throws IllegalStateException if this method is called from a cache server.
* @throws QueryInvalidException if there is a syntax error in the query.
* @throws CqException if failed to create CQ. E.g.: Query string should refer to only one region.
* Joins are not supported. The query must be a SELECT statement. DISTINCT queries are not
* supported. Projections are not supported. Only one iterator in the FROM clause is
* supported, and it must be a region path. Bind parameters in the query are not yet
* supported.
*/
CqQuery newCq(String queryString, CqAttributes cqAttr) throws QueryInvalidException, CqException;
/**
* Constructs a new continuous query, represented by an instance of CqQuery. The CqQuery is not
* executed until the execute method is invoked on the CqQuery.
*
* @since GemFire 5.5
* @param queryString the OQL query
* @param cqAttr the CqAttributes
* @param isDurable true if the CQ is durable
* @return the newly created CqQuery object
* @throws IllegalArgumentException if queryString or cqAttr is null.
* @throws IllegalStateException if this method is called from a cache server.
* @throws QueryInvalidException if there is a syntax error in the query.
* @throws CqException if failed to create CQ. E.g.: Query string should refer to only one region.
* Joins are not supported. The query must be a SELECT statement. DISTINCT queries are not
* supported. Projections are not supported. Only one iterator in the FROM clause is
* supported, and it must be a region path. Bind parameters in the query are not yet
* supported.
*/
CqQuery newCq(String queryString, CqAttributes cqAttr, boolean isDurable)
throws QueryInvalidException, CqException;
/**
* Constructs a new named continuous query, represented by an instance of CqQuery. The CqQuery is
* not executed until the execute method is invoked on the CqQuery. The name of the query will be
* used to identify this query in statistics archival.
*
* @since GemFire 5.5
* @param name the String name for this query
* @param queryString the OQL query
* @param cqAttr the CqAttributes
* @return the newly created CqQuery object
* @throws CqExistsException if a CQ by this name already exists on this client
* @throws IllegalArgumentException if queryString or cqAttr is null.
* @throws IllegalStateException if this method is called from a cache server.
* @throws QueryInvalidException if there is a syntax error in the query.
* @throws CqException if failed to create cq. E.g.: Query string should refer to only one region.
* Joins are not supported. The query must be a SELECT statement. DISTINCT queries are not
* supported. Projections are not supported. Only one iterator in the FROM clause is
* supported, and it must be a region path. Bind parameters in the query are not yet
* supported.
*
*/
CqQuery newCq(String name, String queryString, CqAttributes cqAttr)
throws QueryInvalidException, CqExistsException, CqException;
/**
* Constructs a new named continuous query, represented by an instance of CqQuery. The CqQuery is
* not executed until the execute method is invoked on the CqQuery. The name of the query will be
* used to identify this query in statistics archival.
*
* @since GemFire 5.5
* @param name the String name for this query
* @param queryString the OQL query
* @param cqAttr the CqAttributes
* @param isDurable true if the CQ is durable
* @return the newly created CqQuery object
* @throws CqExistsException if a CQ by this name already exists on this client
* @throws IllegalArgumentException if queryString or cqAttr is null.
* @throws IllegalStateException if this method is called from a cache server.
* @throws QueryInvalidException if there is a syntax error in the query.
* @throws CqException if failed to create cq. E.g.: Query string should refer to only one region.
* Joins are not supported. The query must be a SELECT statement. DISTINCT queries are not
* supported. Projections are not supported. Only one iterator in the FROM clause is
* supported, and it must be a region path. Bind parameters in the query are not yet
* supported.
*
*/
CqQuery newCq(String name, String queryString, CqAttributes cqAttr, boolean isDurable)
throws QueryInvalidException, CqExistsException, CqException;
/**
* Unregister all Continuous Queries. All artifacts and resources associated with the CQs are
* released. Any attempt to access closed CqQuery objects will result in the CqClosedException
* being thrown to the caller.
*
* @since GemFire 5.5
*/
void closeCqs();
/**
* Retrieve all registered Continuous Queries. This is a collection of CqQuery objects.
*
* @since GemFire 5.5
* @return CqQuery[] list of registered CQs, null if there are no CQs.
*/
CqQuery[] getCqs();
/**
* Retrieves all the registered Continuous Queries for a given region. This is a collection of
* CqQuery objects.
*
* @since GemFire 5.5
* @return CqQuery[] list of registered CQs on the specified region, null if there are no CQs.
* @exception CqException if the region does not exist.
*/
CqQuery[] getCqs(String regionName) throws CqException;
/**
* Retrieves the Continuous Query specified by the name.
*
* @since GemFire 5.5
* @param cqName - String, name of the CQ
* @return CqQuery object, null if no CqQuery object is found.
*/
CqQuery getCq(String cqName);
/**
* Starts execution of all the registered continuous queries for this client. This is
* complementary to stopCqs.
*
* @see QueryService#stopCqs()
*
* @since GemFire 5.5
* @throws CqException if failure to execute CQ.
*/
void executeCqs() throws CqException;
/**
* Stops execution of all the continuous queries for this client to become inactive. This is
* useful when client needs to control the incoming CQ messages during bulk region operations.
*
* @see QueryService#executeCqs()
*
* @since GemFire 5.5
* @throws CqException if failure to execute CQ.
*/
void stopCqs() throws CqException;
/**
* Starts execution of all the continuous queries registered on the specified region for this
* client. This is complementary method to stopCQs().
*
* @see QueryService#stopCqs()
*
* @since GemFire 5.5
* @throws CqException if failure to stop CQs.
*/
void executeCqs(String regionName) throws CqException;
/**
* Stops execution of all the continuous queries registered on the specified region for this
* client. This is useful when client needs to control the incoming CQ messages during bulk region
* operations.
*
* @see QueryService#executeCqs()
*
* @since GemFire 5.5
* @throws CqException if failure to execute CQs.
*/
void stopCqs(String regionName) throws CqException;
/**
* Retrieves all the durable CQs registered by the client calling this method.
*
* @since GemFire 7.0
* @return List of names of registered durable CQs, empty list if no durable cqs.
*/
List<String> getAllDurableCqsFromServer() throws CqException;
/**
* Returns CqServiceStatistics object, which provides helper methods to get CQ service related
* statistics for this client. Specifically the following aggregate information on the client's
* CQs is collected: Number of CQs created (cumulative) Number of CQs active currently Number of
* CQs stopped or suspended currently Number of CQs closed (cumulative) Number of CQs active on a
* specified region currently
*
* @see CqServiceStatistics
*
* @since GemFire 5.5
*
*/
CqServiceStatistics getCqStatistics();
}