/*
 * Licensed 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.
 *
 * Other licenses:
 * -----------------------------------------------------------------------------
 * Commercial licenses for this work are available. These replace the above
 * ASL 2.0 and offer limited warranties, support, maintenance, and commercial
 * database integrations.
 *
 * For more information, please visit: http://www.jooq.org/licenses
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */
package org.jooq;

import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import org.jooq.exception.SQLDialectNotSupportedException;

A formal declaration of whether any API element is supported by a given SQLDialect

The annotation is mainly used in three modes:

  • The annotation is absent on a method. This means that the applied SQLDialect is irrelevant for that method. This is mostly the case for jOOQ's general API (creating factories, rendering SQL, binding variables, etc.) as well as utility methods.
  • The annotation is present but "empty" on a method, i.e. it specifies no SQLDialect. This means that all of jOOQ's dialects are supported by this API method. This is typically the case with jOOQ's SQL construction API for very common clauses, such as the creation of SELECT, UPDATE, INSERT, DELETE.
  • The annotation is present and specifies one or more dialects. A method annotated in such a way should be used only along with any of the dialects specified by the annotation. This is typically the case with jOOQ's SQL construction API for less common clauses, such as the creation of MERGE, etc.

    There listed dialects can be either a:

    • A dialect family, in case of which all versions of the family support the feature. E.g. when SQLDialect.POSTGRES is referenced, then SQLDialect.POSTGRES_9_3, SQLDialect.POSTGRES_9_4, etc. support the feature as well
    • A dialect version, in case of which all versions larger or equal than the referenced version support the feature. E.g. when SQLDialect.POSTGRES_9_4 is referenced, then SQLDialect.POSTGRES_9_5 would support the feature as well, but not SQLDialect.POSTGRES_9_3

Future versions of jOOQ may use these annotations for throwing SQLDialectNotSupportedException where appropriate, or preprocessing jOOQ source code in order to mark unsupported API as Deprecated

Author:Lukas Eder
/** * A formal declaration of whether any API element is supported by a given * {@link SQLDialect} * <p> * The annotation is mainly used in three modes: * <ul> * <li>The annotation is absent on a method. This means that the applied * <code>SQLDialect</code> is irrelevant for that method. This is mostly the * case for jOOQ's general API (creating factories, rendering SQL, binding * variables, etc.) as well as utility methods.</li> * <li>The annotation is present but "empty" on a method, i.e. it specifies no * <code>SQLDialect</code>. This means that all of jOOQ's dialects are supported * by this API method. This is typically the case with jOOQ's SQL construction * API for very common clauses, such as the creation of <code>SELECT</code>, * <code>UPDATE</code>, <code>INSERT</code>, <code>DELETE</code>.</li> * <li>The annotation is present and specifies one or more dialects. A method * annotated in such a way should be used only along with any of the dialects * specified by the annotation. This is typically the case with jOOQ's SQL * construction API for less common clauses, such as the creation of * <code>MERGE</code>, etc. * <p> * There listed dialects can be either a: * <ul> * <li>A dialect family, in case of which all versions of the family support the * feature. E.g. when {@link SQLDialect#POSTGRES} is referenced, then * {@link SQLDialect#POSTGRES_9_3}, {@link SQLDialect#POSTGRES_9_4}, etc. * support the feature as well</li> * <li>A dialect version, in case of which all versions larger or equal than the * referenced version support the feature. E.g. when * {@link SQLDialect#POSTGRES_9_4} is referenced, then * {@link SQLDialect#POSTGRES_9_5} would support the feature as well, but not * {@link SQLDialect#POSTGRES_9_3}</li> * </ul> * </li> * </ul> * <p> * Future versions of jOOQ may use these annotations for throwing * {@link SQLDialectNotSupportedException} where appropriate, or preprocessing * jOOQ source code in order to mark unsupported API as {@link Deprecated} * * @author Lukas Eder */
@Target({ ElementType.METHOD, ElementType.FIELD }) @Retention(RUNTIME) @Documented @Inherited public @interface Support {
A SQLDialect array containing all dialects that are supported by the API method annotated with this annotation.
/** * A {@link SQLDialect} array containing all dialects that are supported by * the API method annotated with this annotation. */
SQLDialect[] value() default {}; }