public class SqlDataTypeSpec extends SqlNode
A SqlDataTypeSpec
is immutable; once created, you cannot
change any of the fields.
todo: This should really be a subtype of SqlCall
.
In its full glory, we will have to support complex type expressions like:
ROW(
NUMBER(5, 2) NOT NULL AS foo,
ROW(BOOLEAN AS b, MyUDT NOT NULL AS i) AS rec)
Currently it only supports simple datatypes like CHAR, VARCHAR and DOUBLE, with optional precision and scale.
Modifier and Type | Field and Description |
---|---|
private SqlIdentifier |
baseTypeName |
private java.lang.String |
charSetName |
private SqlIdentifier |
collectionsTypeName |
private java.lang.Boolean |
nullable
Whether data type is allows nulls.
|
private int |
precision |
private int |
scale |
private java.util.TimeZone |
timeZone |
private SqlIdentifier |
typeName |
EMPTY_ARRAY, pos
Constructor and Description |
---|
SqlDataTypeSpec(SqlIdentifier typeName,
int precision,
int scale,
java.lang.String charSetName,
java.util.TimeZone timeZone,
SqlParserPos pos)
Creates a type specification representing a regular, non-collection type.
|
SqlDataTypeSpec(SqlIdentifier collectionsTypeName,
SqlIdentifier typeName,
int precision,
int scale,
java.lang.String charSetName,
SqlParserPos pos)
Creates a type specification representing a collection type.
|
SqlDataTypeSpec(SqlIdentifier collectionsTypeName,
SqlIdentifier typeName,
int precision,
int scale,
java.lang.String charSetName,
java.util.TimeZone timeZone,
java.lang.Boolean nullable,
SqlParserPos pos)
Creates a type specification that has no base type.
|
SqlDataTypeSpec(SqlIdentifier collectionsTypeName,
SqlIdentifier typeName,
SqlIdentifier baseTypeName,
int precision,
int scale,
java.lang.String charSetName,
java.util.TimeZone timeZone,
java.lang.Boolean nullable,
SqlParserPos pos)
Creates a type specification.
|
Modifier and Type | Method and Description |
---|---|
<R> R |
accept(SqlVisitor<R> visitor)
Accepts a generic visitor.
|
SqlNode |
clone(SqlParserPos pos)
Clones a SqlNode with a different position.
|
RelDataType |
deriveType(RelDataTypeFactory typeFactory)
Does not throw an error if the type is not built-in.
|
RelDataType |
deriveType(RelDataTypeFactory typeFactory,
boolean nullable)
Converts this type specification to a
RelDataType . |
RelDataType |
deriveType(SqlValidator validator)
Throws an error if the type is not found.
|
boolean |
equalsDeep(SqlNode node,
Litmus litmus)
Returns whether this node is structurally equivalent to another node.
|
java.lang.String |
getCharSetName() |
SqlIdentifier |
getCollectionsTypeName() |
SqlDataTypeSpec |
getComponentTypeSpec()
Returns a new SqlDataTypeSpec corresponding to the component type if the
type spec is a collections type spec.
Collection types are ARRAY and MULTISET . |
SqlMonotonicity |
getMonotonicity(SqlValidatorScope scope)
Returns whether expression is always ascending, descending or constant.
|
java.lang.Boolean |
getNullable() |
int |
getPrecision() |
int |
getScale() |
java.util.TimeZone |
getTimeZone() |
SqlIdentifier |
getTypeName() |
void |
unparse(SqlWriter writer,
int leftPrec,
int rightPrec)
Writes a SQL representation of this node to a writer.
|
void |
validate(SqlValidator validator,
SqlValidatorScope scope)
Validates this node.
|
SqlDataTypeSpec |
withNullable(java.lang.Boolean nullable)
Returns a copy of this data type specification with a given
nullability.
|
clone, clone, cloneArray, equalDeep, equalDeep, equalsDeep, findValidOptions, getKind, getParserPosition, isA, toSqlString, toSqlString, toString, validateExpr
private final SqlIdentifier collectionsTypeName
private final SqlIdentifier typeName
private final SqlIdentifier baseTypeName
private final int scale
private final int precision
private final java.lang.String charSetName
private final java.util.TimeZone timeZone
private java.lang.Boolean nullable
Nullable is nullable! Null means "not specified". E.g.
CAST(x AS INTEGER)
preserves has the same nullability as x
.
public SqlDataTypeSpec(SqlIdentifier typeName, int precision, int scale, java.lang.String charSetName, java.util.TimeZone timeZone, SqlParserPos pos)
public SqlDataTypeSpec(SqlIdentifier collectionsTypeName, SqlIdentifier typeName, int precision, int scale, java.lang.String charSetName, SqlParserPos pos)
public SqlDataTypeSpec(SqlIdentifier collectionsTypeName, SqlIdentifier typeName, int precision, int scale, java.lang.String charSetName, java.util.TimeZone timeZone, java.lang.Boolean nullable, SqlParserPos pos)
public SqlDataTypeSpec(SqlIdentifier collectionsTypeName, SqlIdentifier typeName, SqlIdentifier baseTypeName, int precision, int scale, java.lang.String charSetName, java.util.TimeZone timeZone, java.lang.Boolean nullable, SqlParserPos pos)
public SqlNode clone(SqlParserPos pos)
SqlNode
public SqlMonotonicity getMonotonicity(SqlValidatorScope scope)
SqlNode
The default implementation returns
SqlMonotonicity.NOT_MONOTONIC
.
getMonotonicity
in class SqlNode
scope
- Scopepublic SqlIdentifier getCollectionsTypeName()
public SqlIdentifier getTypeName()
public int getScale()
public int getPrecision()
public java.lang.String getCharSetName()
public java.util.TimeZone getTimeZone()
public java.lang.Boolean getNullable()
public SqlDataTypeSpec withNullable(java.lang.Boolean nullable)
public SqlDataTypeSpec getComponentTypeSpec()
ARRAY
and MULTISET
.public void unparse(SqlWriter writer, int leftPrec, int rightPrec)
SqlNode
The leftPrec
and rightPrec
parameters give
us enough context to decide whether we need to enclose the expression in
parentheses. For example, we need parentheses around "2 + 3" if preceded
by "5 *". This is because the precedence of the "*" operator is greater
than the precedence of the "+" operator.
The algorithm handles left- and right-associative operators by giving them slightly different left- and right-precedence.
If SqlWriter.isAlwaysUseParentheses()
is true, we use
parentheses even when they are not required by the precedence rules.
For the details of this algorithm, see SqlCall.unparse(org.apache.calcite.sql.SqlWriter, int, int)
.
public void validate(SqlValidator validator, SqlValidatorScope scope)
SqlNode
The typical implementation of this method will make a callback to the
validator appropriate to the node type and context. The validator has
methods such as SqlValidator.validateLiteral(org.apache.calcite.sql.SqlLiteral)
for these purposes.
public <R> R accept(SqlVisitor<R> visitor)
SqlNode
Implementations of this method in subtypes simply call the appropriate
visit
method on the
visitor object
.
The type parameter R
must be consistent with the type
parameter of the visitor.
public boolean equalsDeep(SqlNode node, Litmus litmus)
SqlNode
equalsDeep
in class SqlNode
public RelDataType deriveType(SqlValidator validator)
public RelDataType deriveType(RelDataTypeFactory typeFactory)
public RelDataType deriveType(RelDataTypeFactory typeFactory, boolean nullable)
RelDataType
.
Does not throw an error if the type is not built-in.
nullable
- Whether the type is nullable if the type specification
does not explicitly stateCopyright © 2012–2019 The Apache Software Foundation. All rights reserved.