blob: 1ea4bf39910103ee9a2dbc357f7048b6c0bdaf16 [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.ignite.springdata22.repository.config;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.apache.ignite.Ignite;
import org.apache.ignite.client.IgniteClient;
/**
* Annotation to provide a user defined query for a method.
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Query {
/**
* Query text string. If not provided, Ignite query generator for Spring Data framework will be used to generate one
* (only if textQuery = false (default))
*/
String value() default "";
/**
* Whether annotated repository method must use TextQuery search. Note that text queries are not supported if
* {@link IgniteClient} is used for accessing the Ignite cluster, use {@link Ignite} node instance instead.
*
* @see RepositoryConfig#igniteInstance()
*/
boolean textQuery() default false;
/**
* Force SqlFieldsQuery type, deactivating auto-detection based on SELECT statement. Useful for non SELECT
* statements or to not return hidden fields on SELECT * statements.
*/
boolean forceFieldsQuery() default false;
/**
* Sets flag defining if this query is collocated.
* <p>
* Collocation flag is used for optimization purposes of queries with GROUP BY statements. Whenever Ignite executes
* a distributed query, it sends sub-queries to individual cluster members. If you know in advance that the elements
* of your query selection are collocated together on the same node and you group by collocated key (primary or
* affinity key), then Ignite can make significant performance and network optimizations by grouping data on remote
* nodes.
*
* <p>
* Only applicable to SqlFieldsQuery
*/
boolean collocated() default false;
/**
* Query timeout in millis. Sets the query execution timeout. Query will be automatically cancelled if the execution
* timeout is exceeded. Zero value disables timeout
*
* <p>
* Only applicable to SqlFieldsQuery and SqlQuery
*/
int timeout() default 0;
/**
* Sets flag to enforce join order of tables in the query. If set to {@code true} query optimizer will not reorder
* tables in join. By default is {@code false}.
* <p>
* It is not recommended to enable this property until you are sure that your indexes and the query itself are
* correct and tuned as much as possible but query optimizer still produces wrong join order.
*
* <p>
* Only applicable to SqlFieldsQuery
*/
boolean enforceJoinOrder() default false;
/**
* Specify if distributed joins are enabled for this query.
* <p>
* Only applicable to SqlFieldsQuery and SqlQuery
*/
boolean distributedJoins() default false;
/**
* Sets lazy query execution flag.
* <p>
* By default Ignite attempts to fetch the whole query result set to memory and send it to the client. For small and
* medium result sets this provides optimal performance and minimize duration of internal database locks, thus
* increasing concurrency.
* <p>
* If result set is too big to fit in available memory this could lead to excessive GC pauses and even
* OutOfMemoryError. Use this flag as a hint for Ignite to fetch result set lazily, thus minimizing memory
* consumption at the cost of moderate performance hit.
* <p>
* Defaults to {@code false}, meaning that the whole result set is fetched to memory eagerly.
* <p>
* Only applicable to SqlFieldsQuery
*/
boolean lazy() default false;
/**
* Sets whether this query should be executed on local node only.
*/
boolean local() default false;
/**
* Sets partitions for a query. The query will be executed only on nodes which are primary for specified
* partitions.
* <p>
* Note what passed array'll be sorted in place for performance reasons, if it wasn't sorted yet.
* <p>
* Only applicable to SqlFieldsQuery and SqlQuery
*/
int[] parts() default {};
/**
* Specify whether the annotated method must provide a non null {@link DynamicQueryConfig} parameter with a non
* empty value (query string) or {@link DynamicQueryConfig#textQuery()} == true.
* <p>
* Please, note that {@link DynamicQueryConfig#textQuery()} annotation parameters will be ignored in favor of those
* defined in {@link DynamicQueryConfig} parameter if present (runtime ignite query tuning).
*/
boolean dynamicQuery() default false;
/**
* Sets limit to response records count for TextQuery. If 0 or less, considered to be no limit.
*/
int limit() default 0;
}