Interface SqlConformance
-
- All Known Implementing Classes:
SqlAbstractConformance
,SqlConformanceEnum
,SqlDelegatingConformance
public interface SqlConformance
Enumeration of valid SQL compatibility modes.For most purposes, one of the built-in compatibility modes in enum
SqlConformanceEnum
will suffice.If you wish to implement this interface to build your own conformance, we strongly recommend that you extend
SqlAbstractConformance
, or use aSqlDelegatingConformance
, so that you won't be broken by future changes.
-
-
Field Summary
Fields Modifier and Type Field Description static SqlConformanceEnum
DEFAULT
Deprecated.static SqlConformanceEnum
ORACLE_10
Deprecated.static SqlConformanceEnum
PRAGMATIC_2003
Deprecated.static SqlConformanceEnum
PRAGMATIC_99
Deprecated.static SqlConformanceEnum
STRICT_2003
Deprecated.static SqlConformanceEnum
STRICT_92
Deprecated.static SqlConformanceEnum
STRICT_99
Deprecated.
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description boolean
allowExplicitRowValueConstructor()
Whether to allow SQL syntax "ROW(expr1, expr2, expr3)
".boolean
allowExtend()
Whether to allow mixing table columns with extended columns inINSERT
(orUPSERT
).boolean
allowExtendedTrim()
Whether TRIM should support more than one trim character.boolean
allowGeometry()
Whether to allow geo-spatial extensions, including the GEOMETRY type.boolean
allowNiladicParentheses()
Whether to allow parentheses to be specified in calls to niladic functions and procedures (that is, functions and procedures with no parameters).boolean
isApplyAllowed()
WhetherCROSS APPLY
andOUTER APPLY
operators are allowed in the parser.boolean
isBangEqualAllowed()
Whether the bang-equal token != is allowed as an alternative to <> in the parser.boolean
isFromRequired()
WhetherFROM
clause is required in aSELECT
statement.boolean
isGroupByAlias()
Whether to allow aliases from theSELECT
clause to be used as column names in theGROUP BY
clause.boolean
isGroupByOrdinal()
WhetherGROUP BY 2
is interpreted to mean 'group by the 2nd column in the select list'.boolean
isHavingAlias()
Whether to allow aliases from theSELECT
clause to be used as column names in theHAVING
clause.boolean
isInsertSubsetColumnsAllowed()
Whether to allowINSERT
(orUPSERT
) with no column list but fewer values than the target table.boolean
isLiberal()
Whether this dialect supports features from a wide variety of dialects.boolean
isLimitStartCountAllowed()
Whether to allow the SQL syntax "LIMIT start, count
".boolean
isMinusAllowed()
WhetherMINUS
is allowed as an alternative toEXCEPT
in the parser.boolean
isPercentRemainderAllowed()
Whether the "%" operator is allowed by the parser as an alternative to themod
function.boolean
isSortByAlias()
Whether 'ORDER BY x
' is interpreted to mean 'sort by the select list item whose alias is x' even if there is a column called x.boolean
isSortByAliasObscures()
Whether "empno" is invalid in "select empno as x from emp order by empno" because the alias "x" obscures it.boolean
isSortByOrdinal()
Whether 'ORDER BY 2
' is interpreted to mean 'sort by the 2nd column in the select list'.boolean
shouldConvertRaggedUnionTypesToVarying()
Whether the least restrictive type of a number of CHAR types of different lengths should be a VARCHAR type.
-
-
-
Field Detail
-
DEFAULT
@Deprecated static final SqlConformanceEnum DEFAULT
Deprecated.Short-cut forSqlConformanceEnum.DEFAULT
.
-
STRICT_92
@Deprecated static final SqlConformanceEnum STRICT_92
Deprecated.Short-cut forSqlConformanceEnum.STRICT_92
.
-
STRICT_99
@Deprecated static final SqlConformanceEnum STRICT_99
Deprecated.Short-cut forSqlConformanceEnum.STRICT_99
.
-
PRAGMATIC_99
@Deprecated static final SqlConformanceEnum PRAGMATIC_99
Deprecated.Short-cut forSqlConformanceEnum.PRAGMATIC_99
.
-
ORACLE_10
@Deprecated static final SqlConformanceEnum ORACLE_10
Deprecated.Short-cut forSqlConformanceEnum.ORACLE_10
.
-
STRICT_2003
@Deprecated static final SqlConformanceEnum STRICT_2003
Deprecated.Short-cut forSqlConformanceEnum.STRICT_2003
.
-
PRAGMATIC_2003
@Deprecated static final SqlConformanceEnum PRAGMATIC_2003
Deprecated.Short-cut forSqlConformanceEnum.PRAGMATIC_2003
.
-
-
Method Detail
-
isLiberal
boolean isLiberal()
Whether this dialect supports features from a wide variety of dialects. This is enabled for the Babel parser, disabled otherwise.
-
isGroupByAlias
boolean isGroupByAlias()
Whether to allow aliases from theSELECT
clause to be used as column names in theGROUP BY
clause.Among the built-in conformance levels, true in
SqlConformanceEnum.BABEL
,SqlConformanceEnum.LENIENT
,SqlConformanceEnum.MYSQL_5
; false otherwise.
-
isGroupByOrdinal
boolean isGroupByOrdinal()
WhetherGROUP BY 2
is interpreted to mean 'group by the 2nd column in the select list'.Among the built-in conformance levels, true in
SqlConformanceEnum.BABEL
,SqlConformanceEnum.LENIENT
,SqlConformanceEnum.MYSQL_5
; false otherwise.
-
isHavingAlias
boolean isHavingAlias()
Whether to allow aliases from theSELECT
clause to be used as column names in theHAVING
clause.Among the built-in conformance levels, true in
SqlConformanceEnum.BABEL
,SqlConformanceEnum.LENIENT
,SqlConformanceEnum.MYSQL_5
; false otherwise.
-
isSortByOrdinal
boolean isSortByOrdinal()
Whether 'ORDER BY 2
' is interpreted to mean 'sort by the 2nd column in the select list'.Among the built-in conformance levels, true in
SqlConformanceEnum.DEFAULT
,SqlConformanceEnum.BABEL
,SqlConformanceEnum.LENIENT
,SqlConformanceEnum.MYSQL_5
,SqlConformanceEnum.ORACLE_10
,SqlConformanceEnum.ORACLE_12
,SqlConformanceEnum.STRICT_92
,SqlConformanceEnum.PRAGMATIC_99
,SqlConformanceEnum.PRAGMATIC_2003
;SqlConformanceEnum.SQL_SERVER_2008
; false otherwise.
-
isSortByAlias
boolean isSortByAlias()
Whether 'ORDER BY x
' is interpreted to mean 'sort by the select list item whose alias is x' even if there is a column called x.Among the built-in conformance levels, true in
SqlConformanceEnum.DEFAULT
,SqlConformanceEnum.BABEL
,SqlConformanceEnum.LENIENT
,SqlConformanceEnum.MYSQL_5
,SqlConformanceEnum.ORACLE_10
,SqlConformanceEnum.ORACLE_12
,SqlConformanceEnum.STRICT_92
;SqlConformanceEnum.SQL_SERVER_2008
; false otherwise.
-
isSortByAliasObscures
boolean isSortByAliasObscures()
Whether "empno" is invalid in "select empno as x from emp order by empno" because the alias "x" obscures it.Among the built-in conformance levels, true in
SqlConformanceEnum.STRICT_92
; false otherwise.
-
isFromRequired
boolean isFromRequired()
WhetherFROM
clause is required in aSELECT
statement.Among the built-in conformance levels, true in
SqlConformanceEnum.ORACLE_10
,SqlConformanceEnum.ORACLE_12
,SqlConformanceEnum.STRICT_92
,SqlConformanceEnum.STRICT_99
,SqlConformanceEnum.STRICT_2003
; false otherwise.
-
isBangEqualAllowed
boolean isBangEqualAllowed()
Whether the bang-equal token != is allowed as an alternative to <> in the parser.Among the built-in conformance levels, true in
SqlConformanceEnum.BABEL
,SqlConformanceEnum.LENIENT
,SqlConformanceEnum.MYSQL_5
,SqlConformanceEnum.ORACLE_10
;SqlConformanceEnum.ORACLE_12
; false otherwise.
-
isPercentRemainderAllowed
boolean isPercentRemainderAllowed()
Whether the "%" operator is allowed by the parser as an alternative to themod
function.Among the built-in conformance levels, true in
SqlConformanceEnum.BABEL
,SqlConformanceEnum.LENIENT
,SqlConformanceEnum.MYSQL_5
; false otherwise.
-
isMinusAllowed
boolean isMinusAllowed()
WhetherMINUS
is allowed as an alternative toEXCEPT
in the parser.Among the built-in conformance levels, true in
SqlConformanceEnum.BABEL
,SqlConformanceEnum.LENIENT
,SqlConformanceEnum.ORACLE_10
;SqlConformanceEnum.ORACLE_12
; false otherwise.Note: MySQL does not support
MINUS
orEXCEPT
(as of version 5.5).
-
isApplyAllowed
boolean isApplyAllowed()
WhetherCROSS APPLY
andOUTER APPLY
operators are allowed in the parser.APPLY
invokes a table-valued function for each row returned by a table expression. It is syntactic sugar:SELECT * FROM emp CROSS APPLY TABLE(promote(empno)
is equivalent to
SELECT * FROM emp CROSS JOIN LATERAL TABLE(promote(empno)
SELECT * FROM emp OUTER APPLY TABLE(promote(empno)
is equivalent to
SELECT * FROM emp LEFT JOIN LATERAL TABLE(promote(empno)
ON true
Among the built-in conformance levels, true in
SqlConformanceEnum.BABEL
,SqlConformanceEnum.LENIENT
,SqlConformanceEnum.SQL_SERVER_2008
;SqlConformanceEnum.ORACLE_12
; false otherwise.
-
isInsertSubsetColumnsAllowed
boolean isInsertSubsetColumnsAllowed()
Whether to allowINSERT
(orUPSERT
) with no column list but fewer values than the target table.The N values provided are assumed to match the first N columns of the table, and for each of the remaining columns, the default value of the column is used. It is an error if any of these columns has no default value.
The default value of a column is specified by the
DEFAULT
clause in theCREATE TABLE
statement, or isNULL
if the column is not declaredNOT NULL
.Among the built-in conformance levels, true in
SqlConformanceEnum.BABEL
,SqlConformanceEnum.LENIENT
,SqlConformanceEnum.PRAGMATIC_99
,SqlConformanceEnum.PRAGMATIC_2003
; false otherwise.
-
allowNiladicParentheses
boolean allowNiladicParentheses()
Whether to allow parentheses to be specified in calls to niladic functions and procedures (that is, functions and procedures with no parameters).For example,
CURRENT_DATE
is a niladic system function. In standard SQL it must be invoked without parentheses:VALUES CURRENT_DATE
If
allowNiladicParentheses
, the following syntax is also valid:VALUES CURRENT_DATE()
Of the popular databases, MySQL, Apache Phoenix and VoltDB allow this behavior; Apache Hive, HSQLDB, IBM DB2, Microsoft SQL Server, Oracle, PostgreSQL do not.
Among the built-in conformance levels, true in
SqlConformanceEnum.BABEL
,SqlConformanceEnum.LENIENT
,SqlConformanceEnum.MYSQL_5
; false otherwise.
-
allowExplicitRowValueConstructor
boolean allowExplicitRowValueConstructor()
Whether to allow SQL syntax "ROW(expr1, expr2, expr3)
".The equivalent syntax in standard SQL is "
(expr1, expr2, expr3)
".Standard SQL does not allow this because the type is not well-defined. However, PostgreSQL allows this behavior.
Standard SQL allows row expressions in other contexts, for instance inside
VALUES
clause.Among the built-in conformance levels, true in
SqlConformanceEnum.DEFAULT
,SqlConformanceEnum.LENIENT
; false otherwise.
-
allowExtend
boolean allowExtend()
Whether to allow mixing table columns with extended columns inINSERT
(orUPSERT
).For example, suppose that the declaration of table
T
has columnsA
andB
, and you want to insert data of columnC INTEGER
not present in the table declaration as an extended column. You can specify the columns in anINSERT
statement as follows:INSERT INTO T (A, B, C INTEGER) VALUES (1, 2, 3)
Among the built-in conformance levels, true in
SqlConformanceEnum.BABEL
,SqlConformanceEnum.LENIENT
; false otherwise.
-
isLimitStartCountAllowed
boolean isLimitStartCountAllowed()
Whether to allow the SQL syntax "LIMIT start, count
".The equivalent syntax in standard SQL is "
OFFSET start ROW FETCH FIRST count ROWS ONLY
", and in PostgreSQL "LIMIT count OFFSET start
".MySQL and CUBRID allow this behavior.
Among the built-in conformance levels, true in
SqlConformanceEnum.BABEL
,SqlConformanceEnum.LENIENT
,SqlConformanceEnum.MYSQL_5
; false otherwise.
-
allowGeometry
boolean allowGeometry()
Whether to allow geo-spatial extensions, including the GEOMETRY type.Among the built-in conformance levels, true in
SqlConformanceEnum.BABEL
,SqlConformanceEnum.LENIENT
,SqlConformanceEnum.MYSQL_5
,SqlConformanceEnum.SQL_SERVER_2008
; false otherwise.
-
shouldConvertRaggedUnionTypesToVarying
boolean shouldConvertRaggedUnionTypesToVarying()
Whether the least restrictive type of a number of CHAR types of different lengths should be a VARCHAR type. And similarly BINARY to VARBINARY.For example, consider the query
SELECT 'abcde' UNION SELECT 'xyz'
The input columns have types
CHAR(5)
andCHAR(3)
, and we need a result type that is large enough for both:- Under strict SQL:2003 behavior, its column has type
CHAR(5)
, and the value in the second row will have trailing spaces. - With lenient behavior, its column has type
VARCHAR(5)
, and the values have no trailing spaces.
Among the built-in conformance levels, true in
SqlConformanceEnum.PRAGMATIC_99
,SqlConformanceEnum.PRAGMATIC_2003
,SqlConformanceEnum.MYSQL_5
;SqlConformanceEnum.ORACLE_10
;SqlConformanceEnum.ORACLE_12
;SqlConformanceEnum.SQL_SERVER_2008
; false otherwise. - Under strict SQL:2003 behavior, its column has type
-
allowExtendedTrim
boolean allowExtendedTrim()
Whether TRIM should support more than one trim character.For example, consider the query
SELECT TRIM('eh' FROM 'hehe__hehe')
Under strict behavior, if the length of trim character is not 1, TRIM throws an exception, and the query fails. However many implementations (in databases such as MySQL and SQL Server) trim all the characters, resulting in a return value of '__'.
Among the built-in conformance levels, true in
SqlConformanceEnum.BABEL
,SqlConformanceEnum.LENIENT
,SqlConformanceEnum.MYSQL_5
,SqlConformanceEnum.SQL_SERVER_2008
; false otherwise.
-
-