org.eigenbase.sql
Class SqlAbstractDateTimeLiteral

java.lang.Object
  extended by org.eigenbase.sql.SqlNode
      extended by org.eigenbase.sql.SqlLiteral
          extended by org.eigenbase.sql.SqlAbstractDateTimeLiteral
All Implemented Interfaces:
Cloneable
Direct Known Subclasses:
SqlDateLiteral, SqlTimeLiteral, SqlTimestampLiteral

abstract class SqlAbstractDateTimeLiteral
extends SqlLiteral

A SQL literal representing a DATE, TIME or TIMESTAMP value.

Examples:


Nested Class Summary
 
Nested classes/interfaces inherited from class org.eigenbase.sql.SqlLiteral
SqlLiteral.SqlSymbol
 
Field Summary
protected  String formatString
           
protected  boolean hasTimeZone
           
protected  int precision
           
 
Fields inherited from class org.eigenbase.sql.SqlLiteral
value
 
Fields inherited from class org.eigenbase.sql.SqlNode
emptyArray
 
Constructor Summary
protected SqlAbstractDateTimeLiteral(Calendar d, boolean tz, SqlTypeName typeName, int precision, String formatString, SqlParserPos pos)
          Constructs a datetime literal based on a Calendar.
 
Method Summary
 RelDataType createSqlType(RelDataTypeFactory typeFactory)
           
 Calendar getCal()
           
protected  ZonelessDate getDate()
          Converts this literal to a ZonelessDate object.
 int getPrec()
           
protected  ZonelessTime getTime()
          Converts this literal to a ZonelessTime object.
protected  ZonelessTimestamp getTimestamp()
          Converts this literal to a ZonelessTimestamp object.
 TimeZone getTimeZone()
          Returns timezone component of this literal.
abstract  String toFormattedString()
          Returns e.g.
abstract  String toString()
          Returns e.g.
 String toValue()
          For calc program builder - value may be different than SqlLiteral.unparse(org.eigenbase.sql.SqlWriter, int, int) Typical values: Hello, world! 12.34 {null} 1969-04-29
 void unparse(SqlWriter writer, int leftPrec, int rightPrec)
          Writes a SQL representation of this node to a writer.
 
Methods inherited from class org.eigenbase.sql.SqlLiteral
accept, bigDecimalValue, booleanValue, clone, createApproxNumeric, createBinaryString, createBinaryString, createBoolean, createCharString, createCharString, createDate, createExactNumeric, createInterval, createNegative, createNull, createSample, createSymbol, createTime, createTimestamp, createUnknown, equals, equalsDeep, getKind, getMonotonicity, getStringValue, getTypeName, getValue, hashCode, intValue, longValue, sampleValue, stringValue, symbolValue, unescapeUnicode, validate, valueMatchesType
 
Methods inherited from class org.eigenbase.sql.SqlNode
clone, cloneArray, equalDeep, findValidOptions, getParserPosition, isA, toSqlString, toSqlString, validateExpr
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

hasTimeZone

protected final boolean hasTimeZone

formatString

protected final String formatString

precision

protected final int precision
Constructor Detail

SqlAbstractDateTimeLiteral

protected SqlAbstractDateTimeLiteral(Calendar d,
                                     boolean tz,
                                     SqlTypeName typeName,
                                     int precision,
                                     String formatString,
                                     SqlParserPos pos)
Constructs a datetime literal based on a Calendar. If the literal is to represent a Timestamp, the Calendar is expected to follow java.sql semantics. If the Calendar is to represent a Time or Date, the Calendar is expected to follow ZonelessTime and ZonelessDate semantics.

Method Detail

getPrec

public int getPrec()

toValue

public String toValue()
Description copied from class: SqlLiteral
For calc program builder - value may be different than SqlLiteral.unparse(org.eigenbase.sql.SqlWriter, int, int) Typical values:

Overrides:
toValue in class SqlLiteral
Returns:
string representation of the value

getCal

public Calendar getCal()

getTimeZone

public TimeZone getTimeZone()
Returns timezone component of this literal. Technically, a sql date doesn't come with a tz, but time and ts inherit this, and the calendar object has one, so it seems harmless.

Returns:
timezone

toString

public abstract String toString()
Returns e.g. DATE '1969-07-21'.

Overrides:
toString in class SqlNode

toFormattedString

public abstract String toFormattedString()
Returns e.g. 1969-07-21.


createSqlType

public RelDataType createSqlType(RelDataTypeFactory typeFactory)
Overrides:
createSqlType in class SqlLiteral

unparse

public void unparse(SqlWriter writer,
                    int leftPrec,
                    int rightPrec)
Description copied from class: SqlNode
Writes a SQL representation of this node to a writer.

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.eigenbase.sql.SqlWriter, int, int).

Overrides:
unparse in class SqlLiteral
Parameters:
writer - Target writer
leftPrec - The precedence of the SqlNode immediately preceding this node in a depth-first scan of the parse tree
rightPrec - The precedence of the SqlNode immediately

getDate

protected ZonelessDate getDate()
Converts this literal to a ZonelessDate object.


getTime

protected ZonelessTime getTime()
Converts this literal to a ZonelessTime object.


getTimestamp

protected ZonelessTimestamp getTimestamp()
Converts this literal to a ZonelessTimestamp object.