@Target({METHOD,CONSTRUCTOR,TYPE,PACKAGE})
@Retention(RUNTIME)
@Documented
@Inherited
public @interface Allow
Allow a set of
SQLDialect
to be supported by any jOOQ statement in
the scope of this annotation.
This annotation can be used at the use-site of jOOQ API at any given scope
ElementType.PACKAGE
, ElementType.TYPE
,
ElementType.METHOD
in order to specify that the given scope allows
ANY of the supplied SQLDialect
to be supported by all usage of jOOQ
API within the scope. For example:
// Allow only MYSQL or ORACLE dialect support to be used within the class scope
@Allow(MYSQL, ORACLE)
public class MySQLAndOracleDAO {
// Allow rule from class applies to this method
public void mysqlAndOracleMethod() {
DSL.using(configuration)
.insertInto(TABLE, TABLE.COLUMN)
.values(1)
// This type checks as it works on both MySQL and Oracle
.onDuplicateKeyUpdate()
.set(TABLE.COLUMN, 2)
.execute();
}
// Refine class Allow rule with additional requirement
@Require(ORACLE)
public void oracleOnlyMethod() {
DSL.using(configuration)
.mergeInto(TABLE)
.using(selectOne())
.on(TABLE.COLUMN.eq(1))
.whenMatchedThenUpdate()
.set(TABLE.COLUMN, 2)
.whenNotMatchedThenInsert(TABLE.COLUMN)
.values(1)
.execute();
}
}
Type checking for these annotations can be supplied by
org.jooq.checker.SQLDialectChecker
from the jOOQ-checker module.
Rules:
- In the absence of any
Allow
annotation, no jOOQ API usage is allowed. - The combination of all
Allow
annotations and of the inner-mostRequire
annotation is applied for any given scope. - Nested packages are not creating nested scopes.
- If a versioned
SQLDialect
is allowed (rather than aSQLDialect.family()
), then the allowed version, all of itsSQLDialect.predecessor()
, and itsSQLDialect.family()
are allowed.
Apart from the above main purpose, the Allow
annotation also serves
as a semantic namespace for other annotations, such as Allow.PlainSQL
- Author:
- Lukas Eder
- See Also:
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic @interface
This annotation allowsAllow.PlainSQL
API usage within the scope of where it is placed. -
Optional Element Summary
Modifier and TypeOptional ElementDescriptionA list of jOOQSQLDialect
which are required on any jOOQ API method that is annotated withSupport
.
-
Element Details
-
value
SQLDialect[] valueA list of jOOQSQLDialect
which are required on any jOOQ API method that is annotated withSupport
.- Default:
- {ACCESS, ASE, AURORA_MYSQL, AURORA_POSTGRES, BIGQUERY, COCKROACHDB, DB2, EXASOL, HANA, INFORMIX, INGRES, MEMSQL, ORACLE, REDSHIFT, SNOWFLAKE, SQLDATAWAREHOUSE, SQLSERVER, SYBASE, TERADATA, VERTICA, CUBRID, DEFAULT, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB}
-