JBoss.orgCommunity Documentation
Teiid provides an extensive set of built-in scalar functions. See also SQL Support and Datatypes . In addition, Teiid provides the capability for user defined functions or UDFs. See the Developers Guide for adding UDFs. Once added UDFs may be called just like any other function.
Numeric functions return numeric values (integer, long, float, double, biginteger, bigdecimal). They generally take numeric values as inputs, though some take strings.
Function |
Definition |
Datatype Constraint |
---|---|---|
+ - * / |
Standard numeric operators |
x in {integer, long, float, double, biginteger, bigdecimal}, return type is same as x [a] |
ABS(x) |
Absolute value of x |
See standard numeric operators above |
ACOS(x) |
Arc cosine of x |
x in {double, bigdecimal}, return type is double |
ASIN(x) |
Arc sine of x |
x in {double, bigdecimal}, return type is double |
ATAN(x) |
Arc tangent of x |
x in {double, bigdecimal}, return type is double |
ATAN2(x,y) |
Arc tangent of x and y |
x, y in {double, bigdecimal}, return type is double |
CEILING(x) |
Ceiling of x |
x in {double, float}, return type is double |
COS(x) |
Cosine of x |
x in {double, bigdecimal}, return type is double |
COT(x) |
Cotangent of x |
x in {double, bigdecimal}, return type is double |
DEGREES(x) |
Convert x degrees to radians |
x in {double, bigdecimal}, return type is double |
EXP(x) |
e^x |
x in {double, float}, return type is double |
FLOOR(x) |
Floor of x |
x in {double, float}, return type is double |
FORMATBIGDECIMAL(x, y) |
Formats x using format y |
x is bigdecimal, y is string, returns string |
FORMATBIGINTEGER(x, y) |
Formats x using format y |
x is biginteger, y is string, returns string |
FORMATDOUBLE(x, y) |
Formats x using format y |
x is double, y is string, returns string |
FORMATFLOAT(x, y) |
Formats x using format y |
x is float, y is string, returns string |
FORMATINTEGER(x, y) |
Formats x using format y |
x is integer, y is string, returns string |
FORMATLONG(x, y) |
Formats x using format y |
x is long, y is string, returns string |
LOG(x) |
Natural log of x (base e) |
x in {double, float}, return type is double |
LOG10(x) |
Log of x (base 10) |
x in {double, float}, return type is double |
MOD(x, y) |
Modulus (remainder of x / y) |
x in {integer, long, float, double, biginteger, bigdecimal}, return type is same as x |
PARSEBIGDECIMAL(x, y) |
Parses x using format y |
x, y are strings, returns bigdecimal |
PARSEBIGINTEGER(x, y) |
Parses x using format y |
x, y are strings, returns biginteger |
PARSEDOUBLE(x, y) |
Parses x using format y |
x, y are strings, returns double |
PARSEFLOAT(x, y) |
Parses x using format y |
x, y are strings, returns float |
PARSEINTEGER(x, y) |
Parses x using format y |
x, y are strings, returns integer |
PARSELONG(x, y) |
Parses x using format y |
x, y are strings, returns long |
PI() |
Value of Pi |
return is double |
POWER(x,y) |
x to the y power |
x in {double, bigdecimal, biginteger}, return is the same type as x |
RADIANS(x) |
Convert x radians to degrees |
x in {double, bigdecimal}, return type is double |
RAND() |
Returns a random number, using generator established so far in the query or initializing with system clock if necessary. |
Returns double. |
RAND(x) |
Returns a random number, using new generator seeded with x. |
x is integer, returns double. |
ROUND(x,y) |
Round x to y places; negative values of y indicate places to the left of the decimal point |
x in {integer, float, double, bigdecimal} y is integer, return is same type as x |
SIGN(x) |
1 if x > 0, 0 if x = 0, -1 if x < 0 |
x in {integer, long, float, double, biginteger, bigdecimal}, return type is integer |
SIN(x) |
Sine value of x |
x in {double, bigdecimal}, return type is double |
SQRT(x) |
Square root of x |
x in {long, double, bigdecimal}, return type is double |
TAN(x) |
Tangent of x |
x in {double, bigdecimal}, return type is double |
BITAND(x, y) |
Bitwise AND of x and y |
x, y in {integer}, return type is integer |
BITOR(x, y) |
Bitwise OR of x and y |
x, y in {integer}, return type is integer |
BITXOR(x, y) |
Bitwise XOR of x and y |
x, y in {integer}, return type is integer |
BITNOT(x) |
Bitwise NOT of x |
x in {integer}, return type is integer |
[a] The precision and scale of non-bigdecimal arithmetic function functions results matches that of Java. The results of bigdecimal operations match Java, except for division, which uses a preferred scale of max(16, dividend.scale + divisor.precision + 1), which then has trailing zeros removed by setting the scale to max(dividend.scale, normalized scale) |
Teiid offers a set of functions you can use to parse numbers from strings. For each string, you need to provide the formatting of the string. These functions use the convention established by the java.text.DecimalFormat class to define the formats you can use with these functions. You can learn more about how this class defines numeric string formats by visiting the Sun Java Web site at the following URL for Sun Java.
For example, you could use these function calls, with the formatting string that adheres to the java.text.DecimalFormat convention, to parse strings and return the datatype you need:
Input String |
Function Call to Format String |
Output Value |
Output Datatype |
---|---|---|---|
'$25.30' |
parseDouble(cost, '$#,##0.00;($#,##0.00)') |
25.3 |
double |
'25%' |
parseFloat(percent, '#,##0%') |
25 |
float |
'2,534.1' |
parseFloat(total, '#,##0.###;-#,##0.###') |
2534.1 |
float |
'1.234E3' |
parseLong(amt, '0.###E0') |
1234 |
long |
'1,234,567' |
parseInteger(total, '#,##0;-#,##0') |
1234567 |
integer |
Teiid offers a set of functions you can use to convert numeric datatypes into strings. For each string, you need to provide the formatting. These functions use the convention established within the java.text.DecimalFormat class to define the formats you can use with these functions. You can learn more about how this class defines numeric string formats by visiting the Sun Java Web site at the following URL for Sun Java .
For example, you could use these function calls, with the formatting string that adheres to the java.text.DecimalFormat convention, to format the numeric datatypes into strings:
Input Value |
Input Datatype |
Function Call to Format String |
Output String |
---|---|---|---|
25.3 |
double |
formatDouble(cost, '$#,##0.00;($#,##0.00)') |
'$25.30' |
25 |
float |
formatFloat(percent, '#,##0%') |
'25%' |
2534.1 |
float |
formatFloat(total, '#,##0.###;-#,##0.###') |
'2,534.1' |
1234 |
long |
formatLong(amt, '0.###E0') |
'1.234E3' |
1234567 |
integer |
formatInteger(total, '#,##0;-#,##0') |
'1,234,567' |
String functions generally take strings as inputs and return strings as outputs.
Unless specified, all of the arguments and return types in the following table are strings and all indexes are 1-based. The 0 index is considered to be before the start of the string.
Function |
Definition |
Datatype Constraint |
---|---|---|
x || y |
Concatenation operator |
x,y in {string}, return type is string |
ASCII(x) |
Provide ASCII value of the left most character in x. The empty string will as input will return null. [a] |
return type is integer |
CHR(x) CHAR(x) |
Provide the character for ASCII value x [a] |
x in {integer} |
CONCAT(x, y) |
Concatenates x and y with ANSI semantics. If x and/or y is null, returns null. |
x, y in {string} |
CONCAT2(x, y) |
Concatenates x and y with non-ANSI null semantics. If x and y is null, returns null. If only x or y is null, returns the other value. |
x, y in {string} |
INITCAP(x) |
Make first letter of each word in string x capital and all others lowercase |
x in {string} |
INSERT(str1, start, length, str2) |
Insert string2 into string1 |
str1 in {string}, start in {integer}, length in {integer}, str2 in {string} |
LCASE(x) |
Lowercase of x |
x in {string} |
LEFT(x, y) |
Get left y characters of x |
x in {string}, y in {integer}, return string |
LENGTH(x) |
Length of x |
return type is integer |
LOCATE(x, y) |
Find position of x in y starting at beginning of y |
x in {string}, y in {string}, return integer |
LOCATE(x, y, z) |
Find position of x in y starting at z |
x in {string}, y in {string}, z in {integer}, return integer |
LPAD(x, y) |
Pad input string x with spaces on the left to the length of y |
x in {string}, y in {integer}, return string |
LPAD(x, y, z) |
Pad input string x on the left to the length of y using character z |
x in {string}, y in {string}, z in {character}, return string |
LTRIM(x) |
Left trim x of blank chars |
x in {string}, return string |
QUERYSTRING(path [, expr [AS name] ...]) |
Returns a properly encoded query string appended to the given path. Null valued expressions are omitted, and a null path is treated as ''. Names are optional for column reference expressions. e.g. QUERYSTRING('path', 'value' as "&x", ' & ' as y, null as z) returns 'path?%26x=value&y=%20%26%20' |
path, expr in {string}. name is an identifier |
REPEAT(str1,instances) |
Repeat string1 a specified number of times |
str1 in {string}, instances in {integer} return string |
REPLACE(x, y, z) |
Replace all y in x with z |
x,y,z in {string}, return string |
RIGHT(x, y) |
Get right y characters of x |
x in {string}, y in {integer}, return string |
RPAD(input string x, pad length y) |
Pad input string x with spaces on the right to the length of y |
x in {string}, y in {integer}, return string |
RPAD(x, y, z) |
Pad input string x on the right to the length of y using character z |
x in {string}, y in {string}, z in {character}, return string |
RTRIM(x) |
Right trim x of blank chars |
x is string, return string |
SUBSTRING(x, y) |
Get substring from x, from position y to the end of x |
y in {integer} |
SUBSTRING(x, y, z) |
Get substring from x from position y with length z |
y, z in {integer} |
TO_CHARS(x, encoding) |
Return a clob from the blob with the given encoding. BASE64, HEX, and the builtin Java Charset names are valid values for the encoding.[b] |
x is a blob, encoding is a string, and returns a clob |
Return a blob from the clob with the given encoding. BASE64, HEX, and the builtin Java Charset names are valid values for the encoding.[b] |
x in a clob, encoding is a string, and returns a blob | |
TRANSLATE(x, y, z) |
Translate string x by replacing each character in y with the character in z at the same position |
x in {string} |
UCASE(x) |
Uppercase of x |
x in {string} |
UNESCAPE(x) |
Unescaped version of x. Possible escape sequences are \b - backspace, \t - tab, \n - line feed, \f - form feed, \r - carriage return. \uXXXX, where X is a hex value, can be used to specify any unicode character. \XXX, where X is an octal digit, can be used to specify an octal byte value. If any other character appears after an escape character, that character will appear in the output and the escape character will be ignored. |
x in {string} |
[a] Non-ASCII range characters or integers used in these functions may produce different results or exceptions depending on where the function is evalutated (Teiid vs. source). Teiid's uses Java default int to char and char to int conversions, which operates over UTF16 values. [b] See the Charset JavaDoc for more on supported Charset names. For charsets, unmappable chars will be replaced with the charset default character. binary formats, such as BASE64, will error in their conversion to bytes is a unrecognizable character is encountered. |
Date and time functions return or operate on dates, times, or timestamps.
Parse and format Date/Time functions use the convention established within the java.text.SimpleDateFormat class to define the formats you can use with these functions. You can learn more about how this class defines formats by visiting the Sun Java Web site at the following URL for Sun Java.
Function |
Definition |
Datatype Constraint |
---|---|---|
CURDATE() |
Return current date |
returns date |
CURTIME() |
Return current time |
returns time |
NOW() |
Return current timestamp (date and time) |
returns timestamp |
DAYNAME(x) |
Return name of day |
x in {date, timestamp}, returns string |
DAYOFMONTH(x) |
Return day of month |
x in {date, timestamp}, returns integer |
DAYOFWEEK(x) |
Return day of week (Sunday=1) |
x in {date, timestamp}, returns integer |
DAYOFYEAR(x) |
Return Julian day number |
x in {date, timestamp}, returns integer |
FORMATDATE(x, y) |
Format date x using format y |
x is date, y is string, returns string |
FORMATTIME(x, y) |
Format time x using format y |
x is time, y is string, returns string |
FORMATTIMESTAMP(x, y) |
Format timestamp x using format y |
x is timestamp, y is string, returns string |
FROM_UNIXTIME (unix_timestamp) |
Return the Unix timestamp (in seconds) as a Timestamp value |
Unix timestamp (in seconds) |
HOUR(x) |
Return hour (in military 24-hour format) |
x in {time, timestamp}, returns integer |
MINUTE(x) |
Return minute |
x in {time, timestamp}, returns integer |
MODIFYTIMEZONE (timestamp, startTimeZone, endTimeZone) |
Returns a timestamp based upon the incoming timestamp adjusted for the differential between the start and end time zones. i.e. if the server is in GMT-6, then modifytimezone({ts '2006-01-10 04:00:00.0'},'GMT-7', 'GMT-8') will return the timestamp {ts '2006-01-10 05:00:00.0'} as read in GMT-6. The value has been adjusted 1 hour ahead to compensate for the difference between GMT-7 and GMT-8. |
startTimeZone and endTimeZone are strings, returns a timestamp |
MODIFYTIMEZONE (timestamp, endTimeZone) |
Return a timestamp in the same manner as modifytimezone(timestamp, startTimeZone, endTimeZone), but will assume that the startTimeZone is the same as the server process. |
Timestamp is a timestamp; endTimeZone is a string, returns a timestamp |
MONTH(x) |
Return month |
x in {date, timestamp}, returns integer |
MONTHNAME(x) |
Return name of month |
x in {date, timestamp}, returns string |
PARSEDATE(x, y) |
Parse date from x using format y |
x, y in {string}, returns date |
PARSETIME(x, y) |
Parse time from x using format y |
x, y in {string}, returns time |
PARSETIMESTAMP(x,y) |
Parse timestamp from x using format y |
x, y in {string}, returns timestamp |
QUARTER(x) |
Return quarter |
x in {date, timestamp}, returns integer |
SECOND(x) |
Return seconds |
x in {time, timestamp}, returns integer |
TIMESTAMPCREATE(date, time) |
Create a timestamp from a date and time |
date in {date}, time in {time}, returns timestamp |
TIMESTAMPADD(interval, count, timestamp) |
Add a specified interval (hour, day of week, month) to the timestamp, where intervals can have the following definition:
|
The interval constant may be specified either as a string literal or a constant value. Interval in {string}, count in {integer}, timestamp in {date, time, timestamp} |
TIMESTAMPDIFF(interval, startTime, endTime) |
Calculate the approximate number of whole intervals in (endTime - startTime) using a specific interval type (as defined by the constants in TIMESTAMPADD). If (endTime > startTime), a positive number will be returned. If (endTime < startTime), a negative number will be returned. Calculations are approximate and may be less accurate over longer time spans. |
Interval in {string}; startTime, endTime in {timestamp}, returns a long. |
WEEK(x) |
Return week in year |
x in {date, timestamp}, returns integer |
YEAR(x) |
Return four-digit year |
x in {date, timestamp}, returns integer |
Teiid does not implicitly convert strings that contain dates presented in different formats, such as ‘19970101’ and ‘31/1/1996’ to date-related datatypes. You can, however, use the parseDate, parseTime, and parseTimestamp functions, described in the next section, to explicitly convert strings with a different format to the appropriate datatype. These functions use the convention established within the java.text.SimpleDateFormat class to define the formats you can use with these functions. You can learn more about how this class defines date and time string formats by visiting the Sun Java Web site .
For example, you could use these function calls, with the formatting string that adheres to the java.text.SimpleDateFormat convention, to parse strings and return the datatype you need:
String |
Function Call To Parse String |
---|---|
'1997010' |
parseDate(myDateString, 'yyyyMMdd') |
'31/1/1996' |
parseDate(myDateString, 'dd''/''MM''/''yyyy') |
'22:08:56 CST' |
parseTime (myTime, 'HH:mm:ss z') |
'03.24.2003 at 06:14:32' |
parseTimestamp(myTimestamp, 'MM.dd.yyyy ''at'' hh:mm:ss') |
Time zones can be specified in several formats. Common abbreviations such as EST for "Eastern Standard Time" are allowed but discouraged, as they can be ambiguous. Unambiguous time zones are defined in the form continent or ocean/largest city. For example, America/New_York, America/Buenos_Aires, or Europe/London. Additionally, you can specify a custom time zone by GMT offset: GMT[+/-]HH:MM.
For example: GMT-05:00
Within your queries, you can convert between datatypes using the CONVERT or CAST keyword. See also Data Type Conversions .
Function |
Definition |
---|---|
CONVERT(x, type) |
Convert x to type, where type is a Teiid Base Type |
CAST(x AS type) |
Convert x to type, where type is a Teiid Base Type |
These functions are identical other than syntax; CAST is the standard SQL syntax, CONVERT is the standard JDBC/ODBC syntax.
Choice functions provide a way to select from two values based on some characteristic of one of the values.
Function |
Definition |
Datatype Constraint |
COALESCE(x,y+) |
Returns the first non-null parameter |
x and all y's can be any compatible types |
IFNULL(x,y) |
If x is null, return y; else return x |
x, y, and the return type must be the same type but can be any type |
NVL(x,y) |
If x is null, return y; else return x |
x, y, and the return type must be the same type but can be any type |
NULLIF(param1, param2) |
Equivalent to case when (param1 = param2) then null else param1 |
param1 and param2 must be compatable comparable types |
IFNULL and NVL are aliases of each other. They are the same function.
Decode functions allow you to have the Teiid Server examine the contents of a column in a result set and alter, or decode, the value so that your application can better use the results.
Function |
Definition |
Datatype Constraint |
---|---|---|
DECODESTRING(x, y) |
Decode column x using string of value pairs y and return the decoded column as a string |
all string |
DECODESTRING(x, y, z) |
Decode column x using string of value pairs y with delimiter z and return the decoded column as a string |
all string |
DECODEINTEGER(x, y) |
Decode column x using string of value pairs y and return the decoded column as an integer |
all string parameters, return integer |
DECODEINTEGER(x,y,z) |
Decode column x using string of value pairs y with delimiter z and return the decoded column as an integer |
all string parameters, return integer |
Within each function call, you include the following arguments:
x is the input value for the decode operation. This will generally be a column name.
y is the literal string that contains a delimited set of input values and output values.
z is an optional parameter on these methods that allows you to specify what delimiter the string specified in y uses.
For example, your application might query a table called PARTS that contains a column called IS_IN_STOCK which contains a Boolean value that you need to change into an integer for your application to process. In this case, you can use the DECODEINTEGER function to change the Boolean values to integers:
SELECT DECODEINTEGER(IS_IN_STOCK, 'false, 0, true, 1') FROM PartsSupplier.PARTS;
When the Teiid System encounters the value false in the result set, it replaces the value with 0.
If, instead of using integers, your application requires string values, you can use the DECODESTRING function to return the string values you need:
SELECT DECODESTRING(IS_IN_STOCK, 'false, no, true, yes, null') FROM PartsSupplier.PARTS;
In addition to two input/output value pairs, this sample query provides a value to use if the column does not contain any of the preceding input values. If the row in the IS_IN_STOCK column does not contain true or false, the Teiid Server inserts a null into the result set.
When you use these DECODE functions, you can provide as many input/output value pairs if you want within the string. By default, the Teiid System expects a comma delimiter, but you can add a third parameter to the function call to specify a different delimiter:
SELECT DECODESTRING(IS_IN_STOCK, 'false:no:true:yes:null',’:’) FROM PartsSupplier.PARTS;
You can use keyword null in the DECODE string as either an input value or an output value to represent a null value. However, if you need to use the literal string null as an input or output value (which means the word null appears in the column and not a null value) you can put the word in quotes: "null".
SELECT DECODESTRING( IS_IN_STOCK, 'null,no,"null",no,nil,no,false,no,true,yes' ) FROM PartsSupplier.PARTS;
If the DECODE function does not find a matching output value in the column and you have not specified a default value, the DECODE function will return the original value the Teiid Server found in that column.
The Lookup function allows you to cache a key value pair table and access it through a scalar function. This caching accelerates response time to queries that use the lookup tables, known in business terminology as lookup tables or code tables.
LOOKUP(codeTable, returnColumn, keyColumn, keyValue)
In the lookup table codeTable, find the row where keyColumn has the value keyValue and return the associated returnColumn. codeTable must be a fully-qualified string literal containing metadata identifiers, keyValue datatype must match datatype of the keyColumn, return datatype matches that of returnColumn. returnColumn and keyColumn parameters should use their shortened names.
For example, a StatePostalCodes table used to translate postal codes to complete state names might represent an example of this type of lookup table. One column, PostalCode, represents a key column. Other tables refer to this two-letter code. A second column, StateDisplayName, would represent the complete name of the state. Hence, a query to this lookup table would typically provide the PostalCode and expect the StateDisplayName in response.
When you call this function for any combination of codeTable, returnColumn, and keyColumn for the first time, the Teiid System caches the result. The Teiid System uses this cache for all queries, in all sessions, that later access this lookup table.
The Teiid System unloads these cached lookup tables when you stop and restart the Teiid System. Thus, you should not use this function for data that is subject to updates. Instead, you can use it against static data that does not change over time.
The keyColumn is expected to contain unique values. If the column contains duplicate values, an exception will be thrown.
System functions provide access to information in the Teiid system from within a query.
Function |
Definition |
Datatype Constraint |
---|---|---|
|
Retrieve the string form of the command payload or null if no command payload was specified. The command payload is set by a method on the Teiid JDBC API extensions on a per-query basis. |
Returns a string |
|
Cast the command payload object to a java.util.Properties object and look up the specified key in the object |
key in {string}, return is string |
|
Retrieve a system environment property. The only key specific to the current session is ‘sessionid’.
However the preferred mechanism for getting the session id is with the session_id() function.
To prevent untrusted access to system properties, the use of this function must be specifically enabled in the |
key in {string}, return is string |
|
Retrieve the string form of the current session id. |
return is string |
|
Retrieve the name of the user executing the query |
return is string |
|
Retrieve the catalog name of the database. Currently VDB's name is also the catalog name. |
return is string |
XML functions provide functionality for working with XML data.
Returns an xml document from JSON.
JSONTOXML(rootElementName, json)
rootElementName is a string, json is in {clob, blob}. Return value is xml.
The appropriate UTF encoding (8, 16LE. 16BE, 32LE, 32BE) will be detected for JSON blobs. If another encoding is used, see the to_chars function.
The result is always a well-formed XML document.
The mapping to XML uses the following rules:
The current element name is initially the rootElementName, and becomes the object value name as the JSON structure is traversed.
All element names must be valid xml 1.1 names. Invalid names are fully escaped according to the SQLXML specification.
Each object or primitive value will be enclosed in an element with the current name.
Unless an array value is the root, it will not be enclosed in an additional element.
Null values will be represented by an empty element with the attribute xsi:nil="true"
Example 5.1. Sample JSON to XML for jsonToXml('person', x)
JSON:
{ "firstName" : "John" , "children" : [ "Randy", "Judy" ] }
XML:
<?xml version="1.0" ?><person><firstName>John</firstName><children>Randy</children><children>Judy<children></person>
Example 5.2. Sample JSON to XML for jsonToXml('person', x) with a root array.
JSON:
[{ "firstName" : "George" }, { "firstName" : "Jerry" }]
XML (Notice there is an extra "person" wrapping element to keep the XML well-formed):
<?xml version="1.0" ?><person><person><firstName>George</firstName></person><person><firstName>Jerry</firstName></person></person>
Returns an xml comment.
XMLCOMMENT(comment)
Comment is a string. Return value is xml.
Returns an XML with the concatination of the given xml types.
XMLCONCAT(content [, content]*)
Content is xml. Return value is xml.
If a value is null, it will be ignored. If all values are null, null is returned.
Returns an XML element with the given name and content.
XMLELEMENT([NAME] name [, <NSP>] [, <ATTR>][, content]*)
ATTR:=XMLATTRIBUTES(exp [AS name] [, exp [AS name]]*)
NSP:=XMLNAMESPACES((uri AS prefix | DEFAULT uri | NO DEFAULT))+
If the content value is of a type other than xml, it will be escaped when added to the parent element. Null content values are ignored. Whitespace in XML or the string values of the content is preserved, but no whitespace is added between content values.
XMLNAMESPACES is used provide namespace information. NO DEFAULT is equivalent to defining the default namespace to the null uri - xmlns="". Only one DEFAULT or NO DEFAULT namespace item may be specified. The namespace prefixes xmlns and xml are reserved.
If a attribute name is not supplied, the expression must be a column reference, in which case the attribute name will be the column name. Null attribute values are ignored.
Name, prefix are identifiers. uri is a string literal. content can be any type. Return value is xml. The return value is valid for use in places where a document is expected.
Example: with an xml_value of <doc/>,
xmlelement('elem', 1, '<2/>', xml_value)
Returns: <elem>1<2/><doc/><elem/>
Returns an concatination of XML elements for each content item.
XMLFOREST(content [AS name] [, <NSP>] [, content [AS name]]*)
See XMLELEMENT for the definition of NSP - XMLNAMESPACES.
Name is an identifier. Content can be any type. Return value is xml.
If a name is not supplied for a content item, the expression must be a column reference, in which case the element name will be a partially escaped version of the column name.
Returns an XML type representation of the string value expression.
XMLPARSE((DOCUMENT|CONTENT) expr [WELLFORMED])
expr in {string, clob, blob}. Return value is xml.
If DOCIMENT is specfied then the expression must have a single root element and may or may not contain an XML declaration.
If WELLFORMED is specified then validation is skipped; this is especially useful for CLOB and BLOB known to already be valid.
Returns an xml processing instruction.
XMLPI([NAME] name [, content])
Name is an identifier. Content is a string. Return value is xml.
Returns the XML result from evaluating the given xquery.
XMLQUERY([<NSP>] xquery [<PASSING>] [(NULL|EMPTY) ON EMPTY]]
PASSING:=PASSING exp [AS name] [, exp [AS name]]*
See XMLELEMENT for the definition of NSP - XMLNAMESPACES.
Namespaces may also be directly declared in the xquery prolog.
The optional PASSING clause is used to provide the context item, which does not have a name, and named global variable values. If the xquery uses a context item and none is provided, then an exception will be raised. Only one context item may be specified and should be an XML type. All non-context non-XML passing values will be converted to an appropriate XML type.
The ON EMPTY clause is used to specify the result when the evaluted sequence is empty. EMPTY ON EMPTY, the default, returns an empty XML result. NULL ON EMPTY returns a null result.
xquery in string. Return value is xml.
XMLQUERY is part of the SQL/XML 2006 specification.
See also XMLTABLE
A technique known as document projection is used to reduce the memory footprint of the context item document. Only the parts of the document needed by the XQuery path expressions will be loaded into memory. Since document projection analysis uses all relevant path expressions, even 1 expression that could potentially use many nodes, e.g. //x rather than /a/b/x will cause a larger memory footprint.
Returns a character type representation of the xml expression.
XMLSERIALIZE([(DOCUMENT|CONTENT)] xml [AS datatype])
Return value mathces datatype.
Only a character type (string, varchar, clob) may be specified as the datatype. CONTENT is the default. If DOCUMENT is specified and the xml is not a valid document or fragment, then an exception is raised.
Applies an XSL stylesheet to the given document.
XSLTRANSFORM(doc, xsl)
Doc, xsl in {string, clob, xml}. Return value is a clob.
If either argument is null, the result is null.
Applies the XPATH expression to the document and returns a string value for the first matching result.
XPATHVALUE(doc, xpath)
Doc and xpath in {string, clob, xml}. Return value is a string.
Matching a non-text node will still produce a string result, which includes all descendent text nodes.
Example 5.3. Sample xpathValue Ignoring Namespaces
XML value:
<?xml version="1.0" ?><ns1:return xmlns:ns1="http://com.test.ws/exampleWebService">Hello<x> World</x></return>
Function:
xpathValue(value, '/*[local-name()="return"])
Results in 'Hello World'
See also Section 5.9.8, “XMLQUERY”
Security functions provide the ability to interact with the security system.
Other functions.
Retuns the object value at a given array index.
array_get(array, index)
array is the object type, index must be an integer, and the return type is object.
1-based indexing is used. The actual array value should be a java.sql.Array or java array type. An exception will be thrown if the array value is the wrong type of the index is out of bounds.
Returns the length for a given array
array_length(array)
array is the object type, and the return type is integer.
The actual array value should be a java.sql.Array or java array type. An exception will be thrown if the array value is the wrong type.
Teiid categorizes functions by varying degrees of determinism. When a function is evaluated and to what extent the result can be cached are based upon its determinism level.
Deterministic - the function will always return the same result for the given inputs. Deterministic functions are evaluated by the engine as soon as all input values are known, which may occur as soon as the rewrite phase. Some functions, such as the lookup function, are not truly deterministic, but is treated as such for performance. All functions not categorized below are considered deterministic.
User Deterministic - the function will return the same result for the given inputs for the same user. This includes the hasRole and user functions. User deterministic functions are evaluated by the engine as soon as all input values are known, which may occur as soon as the rewrite phase. If a user deterministic function is evaluated during the creation of a prepared processing plan, then the resulting plan will be cached only for the user.
Session Deterministic - the function will return the same result for the given inputs under the same user session. This category includes the env function. Session deterministic functions are evaluated by the engine as soon as all input values are known, which may occur as soon as the rewrite phase. If a session deterministic function is evaluated during the creation of a prepared processing plan, then the resulting plan will be cached only for the user's session.
Command Deterministic - the result of function evaluation is only deterministic within the scope of the user command. This category include the curdate, curtime, now, and commandpayload functions. Command deterministic functions are delayed in evaluation until processing to ensure that even prepared plans utilizing these functions will be executed with relevant values. Command deterministic function evaulation will occur prior to pushdown - however multiple occurances of the same command deterministic time function are not guarenteed to evaluate to the same value.
Nondeterministic - the result of function evaluation is fully nondeterministic. This category includes the rand function and UDFs marked as nondeterministic. Nondeterministic functions are delayed in evaluation until processing with a preference for pushdown. If the function is not pushed down, then it may be evaluated for every row in it's execution context (for example if the function is used in the select clause).