public class RexLiteral extends RexNode
There are several methods for creating literals in RexBuilder:
RexBuilder.makeLiteral(boolean) and so forth.
How is the value stored? In that respect, the class is somewhat of a black
box. There is a getValue() method which returns the value as an
object, but the type of that value is implementation detail, and it is best
that your code does not depend upon that knowledge. It is better to use
task-oriented methods such as getValue2() and
toJavaString(java.lang.Comparable, org.apache.calcite.sql.type.SqlTypeName).
The allowable types and combinations are:
| TypeName | Meaning | Value type |
|---|---|---|
SqlTypeName.NULL |
The null value. It has its own special type. | null |
SqlTypeName.BOOLEAN |
Boolean, namely TRUE, FALSE or
UNKNOWN. |
Boolean, or null represents the UNKNOWN value |
SqlTypeName.DECIMAL |
Exact number, for example 0, -.5,
12345. |
BigDecimal |
SqlTypeName.DOUBLE |
Approximate number, for example 6.023E-23. |
BigDecimal |
SqlTypeName.DATE |
Date, for example DATE '1969-04'29' |
Calendar;
also Calendar (UTC time zone)
and Integer (days since POSIX epoch) |
SqlTypeName.TIME |
Time, for example TIME '18:37:42.567' |
Calendar;
also Calendar (UTC time zone)
and Integer (milliseconds since midnight) |
SqlTypeName.TIMESTAMP |
Timestamp, for example TIMESTAMP '1969-04-29
18:37:42.567' |
TimestampString;
also Calendar (UTC time zone)
and Long (milliseconds since POSIX epoch) |
SqlTypeName.INTERVAL_DAY,
SqlTypeName.INTERVAL_DAY_HOUR,
SqlTypeName.INTERVAL_DAY_MINUTE,
SqlTypeName.INTERVAL_DAY_SECOND,
SqlTypeName.INTERVAL_HOUR,
SqlTypeName.INTERVAL_HOUR_MINUTE,
SqlTypeName.INTERVAL_HOUR_SECOND,
SqlTypeName.INTERVAL_MINUTE,
SqlTypeName.INTERVAL_MINUTE_SECOND,
SqlTypeName.INTERVAL_SECOND |
Interval, for example INTERVAL '4:3:2' HOUR TO SECOND |
BigDecimal;
also Long (milliseconds) |
SqlTypeName.INTERVAL_YEAR,
SqlTypeName.INTERVAL_YEAR_MONTH,
SqlTypeName.INTERVAL_MONTH |
Interval, for example INTERVAL '2-3' YEAR TO MONTH |
BigDecimal;
also Integer (months) |
SqlTypeName.CHAR |
Character constant, for example 'Hello, world!',
'', _N'Bonjour', _ISO-8859-1'It''s superman!'
COLLATE SHIFT_JIS$ja_JP$2. These are always CHAR, never VARCHAR. |
NlsString;
also String |
SqlTypeName.BINARY |
Binary constant, for example X'7F34'. (The number of hexits
must be even; see above.) These constants are always BINARY, never
VARBINARY. |
ByteBuffer;
also byte[] |
SqlTypeName.SYMBOL |
A symbol is a special type used to make parsing easier; it is not part of
the SQL standard, and is not exposed to end-users. It is used to hold a flag,
such as the LEADING flag in a call to the function
TRIM([LEADING|TRAILING|BOTH] chars FROM string). |
An enum class |
| Modifier and Type | Field and Description |
|---|---|
private static com.google.common.collect.ImmutableList<org.apache.calcite.avatica.util.TimeUnit> |
TIME_UNITS |
private RelDataType |
type
The real type of this literal, as reported by
getType(). |
private SqlTypeName |
typeName
An indication of the broad type of this literal -- even if its type isn't
a SQL type.
|
private Comparable |
value
The value of this literal.
|
| Constructor and Description |
|---|
RexLiteral(Comparable value,
RelDataType type,
SqlTypeName typeName)
Creates a
RexLiteral. |
| Modifier and Type | Method and Description |
|---|---|
<R,P> R |
accept(RexBiVisitor<R,P> visitor,
P arg)
Accepts a visitor with a payload, dispatching to the right overloaded
RexBiVisitor.visitInputRef(RexInputRef, Object) visitXxx} method. |
<R> R |
accept(RexVisitor<R> visitor)
Accepts a visitor, dispatching to the right overloaded
visitXxx method. |
static boolean |
booleanValue(RexNode node) |
boolean |
equals(Object obj) |
private static boolean |
equals(Object o1,
Object o2) |
private static Comparable |
findValue(RexNode node) |
static RexLiteral |
fromJdbcString(RelDataType type,
SqlTypeName typeName,
String literal)
Converts a Jdbc string into a RexLiteral.
|
private static String |
getCalendarFormat(SqlTypeName typeName) |
SqlKind |
getKind()
Returns the kind of node this is.
|
private static List<org.apache.calcite.avatica.util.TimeUnit> |
getTimeUnits(SqlTypeName typeName)
Returns a list of the time units covered by an interval type such
as HOUR TO SECOND.
|
RelDataType |
getType() |
SqlTypeName |
getTypeName() |
Comparable |
getValue()
Returns the value of this literal.
|
Object |
getValue2()
Returns the value of this literal, in the form that the calculator
program builder wants it.
|
Object |
getValue3()
Returns the value of this literal, in the form that the rex-to-lix
translator wants it.
|
<T> T |
getValueAs(Class<T> clazz)
Returns the value of this literal as an instance of the specified class.
|
int |
hashCode() |
private String |
intervalString(BigDecimal v) |
static int |
intValue(RexNode node) |
boolean |
isAlwaysFalse()
Returns whether this expression always returns false.
|
boolean |
isAlwaysTrue()
Returns whether this expression always returns true.
|
boolean |
isNull()
Returns whether this literal's value is null.
|
static boolean |
isNullLiteral(RexNode node) |
private static void |
pad(StringBuilder b,
String s,
int width) |
private static void |
printAsJava(Comparable value,
PrintWriter pw,
SqlTypeName typeName,
boolean java)
Prints a value as a Java string.
|
void |
printAsJava(PrintWriter pw)
Prints the value this literal as a Java string constant.
|
static String |
stringValue(RexNode node) |
private static String |
toJavaString(Comparable value,
SqlTypeName typeName) |
static boolean |
validConstant(Object o,
Litmus litmus)
Returns whether a value is valid as a constant value, using the same
criteria as
valueMatchesType(java.lang.Comparable, org.apache.calcite.sql.type.SqlTypeName, boolean). |
static Comparable |
value(RexNode node) |
static boolean |
valueMatchesType(Comparable value,
SqlTypeName typeName,
boolean strict) |
private static int |
width(org.apache.calcite.avatica.util.TimeUnit timeUnit) |
private final Comparable value
valueMatchesType(java.lang.Comparable, org.apache.calcite.sql.type.SqlTypeName, boolean). For example, you can't store an
Integer value here just because you feel like it -- all numbers are
represented by a BigDecimal. But since this field is private, it
doesn't really matter how the values are stored.private final RelDataType type
getType().private final SqlTypeName typeName
SqlTypeName.DECIMAL. See valueMatchesType(java.lang.Comparable, org.apache.calcite.sql.type.SqlTypeName, boolean) for the
definitive story.private static final com.google.common.collect.ImmutableList<org.apache.calcite.avatica.util.TimeUnit> TIME_UNITS
RexLiteral(Comparable value, RelDataType type, SqlTypeName typeName)
RexLiteral.public static boolean valueMatchesType(Comparable value, SqlTypeName typeName, boolean strict)
private static String toJavaString(Comparable value, SqlTypeName typeName)
public static boolean validConstant(Object o, Litmus litmus)
valueMatchesType(java.lang.Comparable, org.apache.calcite.sql.type.SqlTypeName, boolean).private static List<org.apache.calcite.avatica.util.TimeUnit> getTimeUnits(SqlTypeName typeName)
private String intervalString(BigDecimal v)
private static void pad(StringBuilder b, String s, int width)
private static int width(org.apache.calcite.avatica.util.TimeUnit timeUnit)
public void printAsJava(PrintWriter pw)
private static void printAsJava(Comparable value, PrintWriter pw, SqlTypeName typeName, boolean java)
valueMatchesType(java.lang.Comparable, org.apache.calcite.sql.type.SqlTypeName, boolean).
Typical return values:
value - Valuepw - Writer to write totypeName - Type familypublic static RexLiteral fromJdbcString(RelDataType type, SqlTypeName typeName, String literal)
If a null literal is provided, then a null pointer will be returned.
type - data type of literal to be readtypeName - type family of literalliteral - the (non-SQL encoded) string representation, as returned
by the Jdbc call to return a column as a stringprivate static String getCalendarFormat(SqlTypeName typeName)
public SqlTypeName getTypeName()
public RelDataType getType()
public SqlKind getKind()
RexNodepublic boolean isNull()
public Comparable getValue()
For backwards compatibility, returns DATE. TIME and TIMESTAMP as a
Calendar value in UTC time zone.
public Object getValue2()
public Object getValue3()
public <T> T getValueAs(Class<T> clazz)
The following SQL types allow more than one form:
NlsString or String
TimeString,
Integer (milliseconds since midnight),
Calendar (in UTC)
DateString,
Integer (days since 1970-01-01),
Calendar
TimestampString,
Long (milliseconds since 1970-01-01 00:00:00),
Calendar
BigDecimal or Long
Called with clazz = Comparable, returns the value in
its native form.
T - Return typeclazz - Desired return typepublic static boolean booleanValue(RexNode node)
public boolean isAlwaysTrue()
RexNodeTRUE.)isAlwaysTrue in class RexNodepublic boolean isAlwaysFalse()
RexNodeFALSE.)isAlwaysFalse in class RexNodepublic static Comparable value(RexNode node)
public static int intValue(RexNode node)
private static Comparable findValue(RexNode node)
public static boolean isNullLiteral(RexNode node)
public <R> R accept(RexVisitor<R> visitor)
RexNodevisitXxx method.
Also see RexUtil.apply(RexVisitor, java.util.List, RexNode),
which applies a visitor to several expressions simultaneously.
public <R,P> R accept(RexBiVisitor<R,P> visitor, P arg)
RexNodeRexBiVisitor.visitInputRef(RexInputRef, Object) visitXxx} method.Copyright © 2012–2018 The Apache Software Foundation. All rights reserved.