org.eigenbase.sql
Class SqlJdbcFunctionCall

java.lang.Object
  extended by org.eigenbase.sql.SqlOperator
      extended by org.eigenbase.sql.SqlFunction
          extended by org.eigenbase.sql.SqlJdbcFunctionCall

public class SqlJdbcFunctionCall
extends SqlFunction

A SqlJdbcFunctionCall is a node of a parse tree which represents a JDBC function call. A JDBC call is of the form {fn NAME(arg0, arg1, ...)}.

See Sun's documentation for writers of JDBC drivers.*

Function Name Function Returns

NUMERIC FUNCTIONS

ABS(number) Absolute value of number
ACOS(float) Arccosine, in radians, of float
ASIN(float) Arcsine, in radians, of float
ATAN(float) Arctangent, in radians, of float
ATAN2(float1, float2) Arctangent, in radians, of float2 / float1
CEILING(number) Smallest integer >= number
COS(float) Cosine of float radians
COT(float) Cotangent of float radians
DEGREES(number) Degrees in number radians
EXP(float) Exponential function of float
FLOOR(number) Largest integer <= number
LOG(float) Base e logarithm of float
LOG10(float) Base 10 logarithm of float
MOD(integer1, integer2) Rh3ainder for integer1 / integer2
PI() The constant pi
POWER(number, power) number raised to (integer) power
RADIANS(number) Radians in number degrees
RAND(integer) Random floating point for seed integer
ROUND(number, places) number rounded to places places
SIGN(number) -1 to indicate number is < 0; 0 to indicate number is = 0; 1 to indicate number is > 0
SIN(float) Sine of float radians
SQRT(float) Square root of float
TAN(float) Tangent of float radians
TRUNCATE(number, places) number truncated to places places

STRING FUNCTIONS

ASCII(string) Integer representing the ASCII code value of the leftmost character in string
CHAR(code) Character with ASCII code value code, where code is between 0 and 255
CONCAT(string1, string2) Character string formed by appending string2 to string1; if a string is null, the result is DBMS-dependent
DIFFERENCE(string1, string2) Integer indicating the difference between the values returned by the function SOUNDEX for string1 and string2
INSERT(string1, start, length, string2) A character string formed by deleting length characters from string1 beginning at start, and inserting string2 into string1 at start
LCASE(string) Converts all uppercase characters in string to lowercase
LEFT(string, count) The count leftmost characters from string
LENGTH(string) Number of characters in string, excluding trailing blanks
LOCATE(string1, string2[, start]) Position in string2 of the first occurrence of string1, searching from the beginning of string2; if start is specified, the search begins from position start. 0 is returned if string2 does not contain string1. Position 1 is the first character in string2.
LTRIM(string) Characters of string with leading blank spaces rh3oved
REPEAT(string, count) A character string formed by repeating string count times
REPLACE(string1, string2, string3) Replaces all occurrences of string2 in string1 with string3
RIGHT(string, count) The count rightmost characters in string
RTRIM(string) The characters of string with no trailing blanks
SOUNDEX(string) A character string, which is data source-dependent, representing the sound of the words in string; this could be a four-digit SOUNDEX code, a phonetic representation of each word, etc.
SPACE(count) A character string consisting of count spaces
SUBSTRING(string, start, length) A character string formed by extracting length characters from string beginning at start
UCASE(string) Converts all lowercase characters in string to uppercase

TIME and DATE FUNCTIONS

CURDATE() The current date as a date value
CURTIME() The current local time as a time value
DAYNAME(date) A character string representing the day component of date; the name for the day is specific to the data source
DAYOFMONTH(date) An integer from 1 to 31 representing the day of the month in date
DAYOFWEEK(date) An integer from 1 to 7 representing the day of the week in date; 1 represents Sunday
DAYOFYEAR(date) An integer from 1 to 366 representing the day of the year in date
HOUR(time) An integer from 0 to 23 representing the hour component of time
MINUTE(time) An integer from 0 to 59 representing the minute component of time
MONTH(date) An integer from 1 to 12 representing the month component of date
MONTHNAME(date) A character string representing the month component of date; the name for the month is specific to the data source
NOW() A timestamp value representing the current date and time
QUARTER(date) An integer from 1 to 4 representing the quarter in date; 1 represents January 1 through March 31
SECOND(time) An integer from 0 to 59 representing the second component of time
TIMESTAMPADD(interval,count, timestamp) A timestamp calculated by adding count number of interval(s) to timestamp; interval may be one of the following: SQL_TSI_FRAC_SECOND, SQL_TSI_SECOND, SQL_TSI_MINUTE, SQL_TSI_HOUR, SQL_TSI_DAY, SQL_TSI_WEEK, SQL_TSI_MONTH, SQL_TSI_QUARTER, or SQL_TSI_YEAR
TIMESTAMPDIFF(interval,timestamp1, timestamp2) An integer representing the number of interval(s) by which timestamp2 is greater than timestamp1; interval may be one of the following: SQL_TSI_FRAC_SECOND, SQL_TSI_SECOND, SQL_TSI_MINUTE, SQL_TSI_HOUR, SQL_TSI_DAY, SQL_TSI_WEEK, SQL_TSI_MONTH, SQL_TSI_QUARTER, or SQL_TSI_YEAR
WEEK(date) An integer from 1 to 53 representing the week of the year in date
YEAR(date) An integer representing the year component of date

SYSTEM FUNCTIONS

DATABASE() Name of the database
IFNULL(expression, value) value if expression is null; expression if expression is not null
USER() User name in the DBMS

CONVERSION FUNCTIONS

CONVERT(value, SQLtype) value converted to SQLtype where SQLtype may be one of the following SQL types: BIGINT, BINARY, BIT, CHAR, DATE, DECIMAL, DOUBLE, FLOAT, INTEGER, LONGVARBINARY, LONGVARCHAR, REAL, SMALLINT, TIME, TIMESTAMP, TINYINT, VARBINARY, or VARCHAR

Since:
June 28, 2004
Version:
$Id: //open/dev/farrago/src/org/eigenbase/sql/SqlJdbcFunctionCall.java#26 $
Author:
Wael Chatila

Nested Class Summary
private static class SqlJdbcFunctionCall.JdbcToInternalLookupTable
          Lookup table between JDBC functions and internal representation
private static class SqlJdbcFunctionCall.MakeCall
          Represent a Strategy Object to create a SqlCall by providing the feature of reording, adding/dropping operands.
 
Field Summary
private static String[] allNumericFunctions
          List of all numeric function names defined by JDBC.
private static String[] allStringFunctions
          List of all string function names defined by JDBC.
private static String[] allSystemFunctions
          List of all system function names defined by JDBC.
private static String[] allTimeDateFunctions
          List of all time/date function names defined by JDBC.
private  String jdbcName
           
private  SqlCall lookupCall
           
private  SqlJdbcFunctionCall.MakeCall lookupMakeCallObj
           
private static String numericFunctions
           
private static String stringFunctions
           
private static String systemFunctions
           
private  SqlNode[] thisOperands
           
private static String timeDateFunctions
           
 
Fields inherited from class org.eigenbase.sql.SqlOperator
MaxPrec, NL
 
Constructor Summary
SqlJdbcFunctionCall(String name)
           
 
Method Summary
private static String constructFuncList(String[] functionNames)
           
 SqlCall createCall(SqlLiteral functionQualifier, SqlParserPos pos, SqlNode... operands)
          Creates a call to this operand with an array of operands.
 RelDataType deriveType(SqlValidator validator, SqlValidatorScope scope, SqlCall call)
          Derives the type of a call to this operator.
 String getAllowedSignatures()
          Returns a string describing the expected operand types of a call, e.g.
private  String getArgCountMismatchMsg()
           
 SqlCall getLookupCall()
           
static String getNumericFunctions()
           
static String getStringFunctions()
           
static String getSystemFunctions()
           
static String getTimeDateFunctions()
           
 RelDataType inferReturnType(SqlOperatorBinding opBinding)
          Infers the return type of an invocation of this operator; only called after the number and types of operands have already been validated.
 void unparse(SqlWriter writer, SqlNode[] operands, int leftPrec, int rightPrec)
          Writes a SQL representation of a call to this operator to a writer, including parentheses if the operators on either side are of greater precedence.
 
Methods inherited from class org.eigenbase.sql.SqlFunction
getFunctionType, getNameAsId, getParamTypes, getSqlIdentifier, getSyntax, isQuantifierAllowed, validateCall, validateQuantifier
 
Methods inherited from class org.eigenbase.sql.SqlOperator
acceptCall, acceptCall, adjustType, argumentMustBeScalar, checkOperandCount, checkOperandTypes, createCall, createCall, createCall, equals, getAllowedSignatures, getKind, getLeftPrec, getMonotonicity, getName, getOperandCountRange, getOperandTypeChecker, getOperandTypeInference, getReturnTypeInference, getRightPrec, getSignatureTemplate, hashCode, inferReturnType, isAggregator, isDeterministic, isDynamicFunction, isName, leftPrec, preValidateCall, requiresDecimalExpansion, rewriteCall, rightPrec, toString, unparseListClause, unparseListClause, validateOperands
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

numericFunctions

private static final String numericFunctions

stringFunctions

private static final String stringFunctions

timeDateFunctions

private static final String timeDateFunctions

systemFunctions

private static final String systemFunctions

allNumericFunctions

private static final String[] allNumericFunctions
List of all numeric function names defined by JDBC.


allStringFunctions

private static final String[] allStringFunctions
List of all string function names defined by JDBC.


allTimeDateFunctions

private static final String[] allTimeDateFunctions
List of all time/date function names defined by JDBC.


allSystemFunctions

private static final String[] allSystemFunctions
List of all system function names defined by JDBC.


jdbcName

private final String jdbcName

lookupMakeCallObj

private final SqlJdbcFunctionCall.MakeCall lookupMakeCallObj

lookupCall

private SqlCall lookupCall

thisOperands

private SqlNode[] thisOperands
Constructor Detail

SqlJdbcFunctionCall

public SqlJdbcFunctionCall(String name)
Method Detail

constructFuncList

private static String constructFuncList(String[] functionNames)

createCall

public SqlCall createCall(SqlLiteral functionQualifier,
                          SqlParserPos pos,
                          SqlNode... operands)
Description copied from class: SqlOperator
Creates a call to this operand with an array of operands.

The position of the resulting call is the union of the pos and the positions of all of the operands.

Overrides:
createCall in class SqlOperator
Parameters:
functionQualifier - function qualifier (e.g. "DISTINCT"), may be
pos - parser position of the identifier of the call
operands - array of operands

getLookupCall

public SqlCall getLookupCall()

getAllowedSignatures

public String getAllowedSignatures()
Description copied from class: SqlOperator
Returns a string describing the expected operand types of a call, e.g. "SUBSTR(VARCHAR, INTEGER, INTEGER)".

Overrides:
getAllowedSignatures in class SqlOperator

deriveType

public RelDataType deriveType(SqlValidator validator,
                              SqlValidatorScope scope,
                              SqlCall call)
Description copied from class: SqlOperator
Derives the type of a call to this operator.

This method is an intrinsic part of the validation process so, unlike SqlOperator.inferReturnType(org.eigenbase.sql.SqlOperatorBinding), specific operators would not typically override this method.

Overrides:
deriveType in class SqlFunction
Parameters:
validator - Validator
scope - Scope of validation
call - Call to this operator
Returns:
Type of call

inferReturnType

public RelDataType inferReturnType(SqlOperatorBinding opBinding)
Description copied from class: SqlOperator
Infers the return type of an invocation of this operator; only called after the number and types of operands have already been validated. Subclasses must either override this method or supply an instance of SqlReturnTypeInference to the constructor.

Overrides:
inferReturnType in class SqlOperator
Parameters:
opBinding - description of invocation (not necessarily a SqlCall)
Returns:
inferred return type

getArgCountMismatchMsg

private String getArgCountMismatchMsg()

unparse

public void unparse(SqlWriter writer,
                    SqlNode[] operands,
                    int leftPrec,
                    int rightPrec)
Description copied from class: SqlOperator
Writes a SQL representation of a call to this operator to a writer, including parentheses if the operators on either side are of greater precedence.

The default implementation of this method delegates to SqlSyntax.unparse(org.eigenbase.sql.SqlWriter, org.eigenbase.sql.SqlOperator, org.eigenbase.sql.SqlNode[], int, int).

Overrides:
unparse in class SqlFunction

getNumericFunctions

public static String getNumericFunctions()
See Also:
DatabaseMetaData.getNumericFunctions()

getStringFunctions

public static String getStringFunctions()
See Also:
DatabaseMetaData.getStringFunctions()

getTimeDateFunctions

public static String getTimeDateFunctions()
See Also:
DatabaseMetaData.getTimeDateFunctions()

getSystemFunctions

public static String getSystemFunctions()
See Also:
DatabaseMetaData.getSystemFunctions()