blob: adcf75e48f7b72da0dbfcc03d786d7600b27c2ae [file] [log] [blame]
>>sh rm -f LOG001-SECONDARY;
>>obey TEST001(compile_libs);
>>--------------------------------------------------------------------------
>>log;
>>
>>obey TEST001(java_compile);
>>--------------------------------------------------------------------------
>>-- To compile Java code we invoke a script from regress/tools that uses
>>-- environment variables to determine the source and target directories
>>--------------------------------------------------------------------------
>>log;
------------------------------------------------------------------------------
-- Compiling Java source files: TEST001_Sessionize.java
-- Executing: $javac -d $REGRRUNDIR $REGRTSTDIR/TEST001_Sessionize.java
-- $javac returned 0
------------------------------------------------------------------------------
------------------------------------------------------------------------------
-- Compiling Java source files: TEST001_Fibonacci.java
-- Executing: $javac -d $REGRRUNDIR $REGRTSTDIR/TEST001_Fibonacci.java
-- $javac returned 0
------------------------------------------------------------------------------
------------------------------------------------------------------------------
-- Archiving Java class files:
-- TEST001_Sessionize.class
-- TEST001_Sessionize$InternalColumns.class
-- TEST001_Fibonacci.class
-- Archive will be written to: TEST001.jar
-- Executing: $jar cMf TEST001.jar TEST001_Sessionize.class TEST001_Sessionize$InternalColumns.class TEST001_Fibonacci.class
-- $jar returned 0
------------------------------------------------------------------------------
>>
>>obey TEST001(create_tables);
>>--------------------------------------------------------------------------
>>create table clicks (userid char(32), ts TIME(6), ipAddr char(15)) ;
--- SQL operation complete.
>>insert into clicks values
+> ('super-user',cast(time'09:59:59.50 pm' as TIME(6)),'12.345.567.345'),
+> ('super-user',cast(time'11:59:59.50 pm' as TIME(6)),'12.345.567.345'),
+> ('super-services',cast(time'11:59:59.50 pm' as TIME(6)),'12.345.567.345'),
+> ('super-services',cast(time'11:59:59.55 pm' as TIME(6)),'12.345.567.345');
--- 4 row(s) inserted.
>>
>>-- for now use VARCHARs for LOBs
>>--cqd TRAF_BLOB_AS_VARCHAR 'OFF';
>>
>>create table t001_Datatypes (
+>c_char char(15),
+>c_char_upshift char(15) upshift,
+>c_char_not_casespecific char(15) not casespecific,
+>c_char_varying char varying(15),
+>c_char_varying_upshift char varying(15) upshift,
+>c_char_varying_not_casespecific char varying(15) not casespecific,
+>c_varchar varchar(15),
+>c_varchar_upshift varchar(15) upshift,
+>c_varchar_not_casespecific varchar(15) not casespecific,
+>c_nchar nchar(15),
+>c_nchar_upshift nchar(15) upshift,
+>c_nchar_not_casespecific nchar(15) not casespecific,
+>c_nchar_varying nchar varying(15),
+>c_nchar_varying_upshift nchar varying(15) upshift,
+>c_nchar_varying_not_casespecific nchar varying(15) not casespecific,
+>c_numeric numeric(9,2),
+>c_numeric_unsigned numeric(9,2) unsigned,
+>c_decimal decimal(9,2),
+>c_decimal_unsigned decimal(9,2) unsigned,
+>c_integer integer,
+>c_integer_unsigned integer unsigned,
+>c_largeint largeint,
+>c_smallint smallint,
+>c_smallint_unsigned smallint unsigned,
+>c_tinyint tinyint,
+>c_tinyint_unsigned tinyint unsigned,
+>c_float float(10),
+>c_real real,
+>c_double_precision double precision,
+>c_date date,
+>c_time time,
+>c_time6 time(6),
+>c_timestamp0 timestamp(0),
+>c_timestamp timestamp,
+>c_timestamp6 timestamp(6),
+>c_interval interval year to month,
+>c_intervals86 interval second(8,6),
+>c_intervald6s interval day(6) to second(6),
+>c_blob blob (100),
+>c_clob clob (100),
+>c_boolean boolean
+>);
--- SQL operation complete.
>>
>>insert into t001_Datatypes values (
+>'CHAR_1',
+>'char_1',
+>'char_1',
+>'CHARVAR_1',
+>'charvar_1',
+>'charvar_1',
+>'VARCHAR_1',
+>'varchar_1',
+>'varchar_1',
+>'NCHAR_1',
+>'nchar_1',
+>'nchar_1',
+>'NCHARVAR_1',
+>'ncharvar_1',
+>'ncharvar_1',
+>-1,
+>1,
+>-1.11,
+>1.11,
+>-1,
+>1,
+>-1,
+>-1,
+>1,
+>-1,
+>1,
+>-1.11,
+>-1.11,
+>-1.11,
+>date '2001-01-01',
+>time '01:01:01',
+>time '01:01:01.111111',
+>timestamp '2001-01-01 01:01:01',
+>timestamp '2001-01-01 01:01:01.111111',
+>timestamp '2001-01-01 01:01:01.111111',
+>interval '01-01' year to month,
+>interval '88888888.666666' second(8,6),
+>interval '666666 23:59:59.999999' day(6) to second(6),
+>-- use these when real LOBs are enabled in this test
+>--stringtolob('BLOB_1'),
+>--stringtolob('CLOB_1')
+>-- for now, use simple chars, see cqd TRAF_BLOB_AS_VARCHAR above
+>'BLOB_1',
+>'CLOB_1',
+>true
+>);
--- 1 row(s) inserted.
>>
>>obey TEST001(register_functions);
>>--------------------------------------------------------------------------
>>
>>create library TEST001 file $$QUOTE$$ $$REGRRUNDIR$$/$$DLL$$ $$QUOTE$$;
--- SQL operation complete.
>>
>>-- Sessionize uses a compiler interface to
>>-- create result columns that match those of any input table given
>>-- and it validates the column name for session id at compile time
>>create table_mapping function sessionize_dynamic(user_colname char(10),
+> ts_colname char(20),
+> timeintval int)
+>external name 'SESSIONIZE_DYNAMIC'
+>library TEST001;
--- SQL operation complete.
>>
>>-- This shows that we can share the same binaries for multiple
>>-- TMUDFs, note that it uses the same external name SESSIONIZE_DYNAMIC
>>create table_mapping function sessionize_dynamic_shared(user_colname char(10),
+> ts_colname char(10),
+> timeintval int)
+>external name 'SESSIONIZE_DYNAMIC'
+>language cpp
+>library TEST001;
--- SQL operation complete.
>>
>>-- create the equivalent Java library and TMUDF
>>create library TEST001_Java file $$QUOTE$$ $$REGRRUNDIR$$/TEST001.jar $$QUOTE$$;
--- SQL operation complete.
>>
>>create table_mapping function sessionize_java(user_colname char(10),
+> ts_colname char(20),
+> timeintval int)
+>external name 'TEST001_Sessionize'
+>language java
+>library TEST001_Java;
--- SQL operation complete.
>>
>>-- negative test case, the entry point SESSIONIZE_ERR does not exist
>>create table_mapping function sessionize_err(dummy char(10))
+>returns (session_id largeint)
+>external name 'SESSIONIZE_NON_EXISTENT'
+>language cpp
+>library TEST001;
*** ERROR[11246] An error occurred locating function or class 'SESSIONIZE_NON_EXISTENT' in library 'TEST001.dll'.
*** ERROR[11248] A call to dlsym returned errors 0 and 0. Details:
/mnt2/ansharma/ansharma_bool/incubator-trafodion/core/sqf/rundir/udr/TEST001.dll: undefined symbol: SESSIONIZE_NON_EXISTENT.
--- SQL operation failed with errors.
>>-- For now this will succeed, since we don't load the library during
>>-- DDL time. We will get an error at runtime, though.
>>
>>-- Testing a TMUDF with no table-valued inputs
>>create table_mapping function "Fibonacci"(start_row int, num_rows int)
+>returns (ordinal int, fibonacci_number largeint)
+>external name 'Fibonacci'
+>language cpp
+>library TEST001;
--- SQL operation complete.
>>
>>-- same in Java
>>create table_mapping function fibonacci_java(start_row int, num_rows int)
+>returns (ordinal int, fibonacci_number largeint)
+>external name 'TEST001_Fibonacci'
+>language java
+>library TEST001_Java;
--- SQL operation complete.
>>
>>obey TEST001(tests);
>>--------------------------------------------------------------------------
>>--cqd attempt_esp_parallelism 'off' ;
>>
>>get table_mapping functions for library TEST001 ;
Table_mapping Functions for Library SCH.TEST001
===============================================
SCH.Fibonacci
SCH.SESSIONIZE_DYNAMIC
SCH.SESSIONIZE_DYNAMIC_SHARED
=======================
3 row(s) returned
--- SQL operation complete.
>>
>>showddl table_mapping function sessionize_dynamic;
CREATE TABLE_MAPPING FUNCTION TRAFODION.SCH.SESSIONIZE_DYNAMIC
(
IN USER_COLNAME CHAR(10) CHARACTER SET ISO88591
, IN TS_COLNAME CHAR(20) CHARACTER SET ISO88591
, IN TIMEINTVAL INTEGER SIGNED
)
EXTERNAL NAME 'SESSIONIZE_DYNAMIC'
LIBRARY TRAFODION.SCH.TEST001
LANGUAGE CPP
NO SQL
SAFE EXECUTION MODE
;
--- SQL operation complete.
>>
>>get table_mapping functions for library TEST001_Java ;
Table_mapping Functions for Library SCH.TEST001_JAVA
====================================================
SCH.FIBONACCI_JAVA
SCH.SESSIONIZE_JAVA
=======================
2 row(s) returned
--- SQL operation complete.
>>
>>showddl table_mapping function sessionize_java;
CREATE TABLE_MAPPING FUNCTION TRAFODION.SCH.SESSIONIZE_JAVA
(
IN USER_COLNAME CHAR(10) CHARACTER SET ISO88591
, IN TS_COLNAME CHAR(20) CHARACTER SET ISO88591
, IN TIMEINTVAL INTEGER
)
EXTERNAL NAME 'TEST001_Sessionize'
LIBRARY TRAFODION.SCH.TEST001_JAVA
LANGUAGE JAVA
NO SQL
SAFE EXECUTION MODE
;
--- SQL operation complete.
>>
>>SELECT cast(CONVERTTIMESTAMP(ts) as TIME(6)), userid, session_id, ipAddr
+>FROM UDF(sessionize_dynamic(TABLE(SELECT userid,
+> JULIANTIMESTAMP(ts) as TS,
+> ipAddr
+> FROM clicks
+> PARTITION BY 1 ORDER BY 2),
+> 'USERID',
+> 'TS',
+> 60000000))
+>ORDER BY 2, 1, 3;
(EXPR) USERID SESSION_ID IPADDR
--------------- -------------------------------- -------------------- ---------------
23:59:59.500000 super-services 1 12.345.567.345
23:59:59.550000 super-services 1 12.345.567.345
21:59:59.500000 super-user 1 12.345.567.345
23:59:59.500000 super-user 2 12.345.567.345
--- 4 row(s) selected.
>>
>>SELECT cast(CONVERTTIMESTAMP(ts) as TIME(6)), userid, session_id, ipAddr
+>FROM UDF(sessionize_dynamic(TABLE(SELECT userid,
+> JULIANTIMESTAMP(ts) as TS,
+> ipAddr
+> FROM clicks
+> WHERE userid='super-user'
+> PARTITION BY 1 ORDER BY 2),
+> 'USERID',
+> 'TS',
+> 60000000))
+>ORDER BY 2, 1, 3;
(EXPR) USERID SESSION_ID IPADDR
--------------- -------------------------------- -------------------- ---------------
21:59:59.500000 super-user 1 12.345.567.345
23:59:59.500000 super-user 2 12.345.567.345
--- 2 row(s) selected.
>>SELECT cast(CONVERTTIMESTAMP(ts) as TIME(6)), userid, session_id, ipAddr
+>FROM UDF(sessionize_dynamic(TABLE(SELECT userid,
+> JULIANTIMESTAMP(ts) as TS,
+> ipAddr
+> FROM clicks
+> WHERE userid='super-user'
+> PARTITION BY 1 ORDER BY 2),
+> 'USERID',
+> 'TS',
+> 60000000))
+>ORDER BY 2, 1, 3;
(EXPR) USERID SESSION_ID IPADDR
--------------- -------------------------------- -------------------- ---------------
21:59:59.500000 super-user 1 12.345.567.345
23:59:59.500000 super-user 2 12.345.567.345
--- 2 row(s) selected.
>>
>>-- call sessionize_dynamic_shared, sharing the same DLL
>>SELECT *
+>FROM UDF(sessionize_dynamic_shared(TABLE(SELECT userid,
+> JULIANTIMESTAMP(ts) as TS,
+> ipAddr
+> FROM clicks
+> PARTITION BY ipaddr ORDER BY ts),
+> 'IPADDR',
+> cast('TS' as char(2)),
+> 60000000)) XO
+>ORDER BY ipaddr, session_id, sequence_no;
SESSION_ID SEQUENCE_NO USERID TS IPADDR
-------------------- -------------------- -------------------------------- -------------------- ---------------
1 1 super-user 212365360799500000 12.345.567.345
2 1 super-user 212365367999500000 12.345.567.345
2 2 super-services 212365367999500000 12.345.567.345
2 3 super-services 212365367999550000 12.345.567.345
--- 4 row(s) selected.
>>
>>-- uniqueness constraint avoids a groupby
>>explain options 'f'
+>SELECT distinct ipaddr, session_id, sequence_no
+>FROM UDF(sessionize_dynamic(TABLE(SELECT userid,
+> JULIANTIMESTAMP(ts) as TS,
+> ipAddr
+> FROM clicks
+> PARTITION BY ipaddr ORDER BY ts),
+> 'IPADDR',
+> cast('TS' as char(2)),
+> 60000000)) XO
+>where session_id < 10;
LC RC OP OPERATOR OPT DESCRIPTION CARD
---- ---- ---- -------------------- -------- -------------------- ---------
5 . 6 root 1.79E+001
4 . 5 esp_exchange 1:4(hash2) 5.00E+001
3 . 4 tmudf XO 5.00E+001
2 . 3 sort 1.00E+002
1 . 2 esp_exchange 4(hash2):1 1.00E+002
. . 1 trafodion_scan CLICKS 1.00E+002
--- SQL operation complete.
>>
>>control query shape tmudf(sort(scan));
--- SQL operation complete.
>>-- predicate on IPADDR is evaluated in child,
>>-- predicate on SESSION_ID is evaluated in the UDF
>>prepare s from
+>SELECT *
+>FROM UDF(sessionize_dynamic(TABLE(SELECT userid,
+> JULIANTIMESTAMP(ts) as TS,
+> ipAddr
+> FROM clicks
+> PARTITION BY ipaddr ORDER BY ts),
+> 'IPADDR',
+> cast('TS' as char(2)),
+> 60000000)) XO
+>where SESSION_ID < 2 and
+> IPADDR = '12.345.567.345';
--- SQL command prepared.
>>control query shape anything;
--- SQL operation complete.
>>select count(*) from table(explain(null,'S'))
+>where operator = 'TMUDF'
+> and description like '% preds_evaluated_by_udf: (SESSION_ID < 2) %';
(EXPR)
--------------------
1
--- 1 row(s) selected.
>>execute s;
SESSION_ID SEQUENCE_NO USERID TS IPADDR
-------------------- -------------------- -------------------------------- -------------------- ---------------
1 1 super-user 212334861599500000 12.345.567.345
--- 1 row(s) selected.
>>
>>-- now test Java UDFs in a similar way
>>SELECT cast(CONVERTTIMESTAMP(ts) as TIME(6)), userid, session_id, ipAddr
+>FROM UDF(sessionize_java(TABLE(SELECT userid,
+> JULIANTIMESTAMP(ts) as TS,
+> ipAddr
+> FROM clicks
+> PARTITION BY 1 ORDER BY 2),
+> 'USERID',
+> 'TS',
+> 60000000))
+>ORDER BY 2, 1, 3;
(EXPR) USERID SESSION_ID IPADDR
--------------- -------------------------------- -------------------- ---------------
23:59:59.500000 super-services 1 12.345.567.345
23:59:59.550000 super-services 1 12.345.567.345
21:59:59.500000 super-user 1 12.345.567.345
23:59:59.500000 super-user 2 12.345.567.345
--- 4 row(s) selected.
>>
>>-- uniqueness constraint avoids a groupby
>>prepare s from
+>SELECT distinct ipaddr, session_id, sequence_no
+>FROM UDF(sessionize_java(TABLE(SELECT userid,
+> JULIANTIMESTAMP(ts) as TS,
+> ipAddr
+> FROM clicks
+> PARTITION BY ipaddr ORDER BY ts),
+> 'IPADDR',
+> cast('TS' as char(2)),
+> 60000000)) XO
+>where session_id < 10
+>ORDER BY 2, 1, 3;
--- SQL command prepared.
>>explain options 'f' s;
LC RC OP OPERATOR OPT DESCRIPTION CARD
---- ---- ---- -------------------- -------- -------------------- ---------
6 . 7 root 1.79E+001
5 . 6 esp_exchange 1:4(hash2) (m) 5.00E+001
4 . 5 sort 5.00E+001
3 . 4 tmudf XO 5.00E+001
2 . 3 sort 1.00E+002
1 . 2 esp_exchange 4(hash2):1 1.00E+002
. . 1 trafodion_scan CLICKS 1.00E+002
--- SQL operation complete.
>>execute s;
IPADDR SESSION_ID SEQUENCE_NO
--------------- -------------------- --------------------
12.345.567.345 1 1
12.345.567.345 2 1
12.345.567.345 2 2
12.345.567.345 2 3
--- 4 row(s) selected.
>>
>>-- predicate on IPADDR is evaluated in child,
>>-- predicate on SESSION_ID is evaluated in the UDF
>>prepare s from
+>SELECT *
+>FROM UDF(sessionize_java(TABLE(SELECT userid,
+> JULIANTIMESTAMP(ts) as TS,
+> ipAddr
+> FROM clicks
+> PARTITION BY ipaddr ORDER BY ts),
+> 'IPADDR',
+> cast('TS' as char(2)),
+> 60000000)) XO
+>where SESSION_ID < 2 and
+> IPADDR = '12.345.567.345';
--- SQL command prepared.
>>select count(*) from table(explain(null,'S'))
+>where operator = 'TMUDF'
+> and description like '% preds_evaluated_by_udf: (SESSION_ID < 2) %';
(EXPR)
--------------------
1
--- 1 row(s) selected.
>>execute s;
SESSION_ID SEQUENCE_NO USERID TS IPADDR
-------------------- -------------------- -------------------------------- -------------------- ---------------
1 1 super-user 212373741599500000 12.345.567.345
--- 1 row(s) selected.
>>
>>-- eliminate all columns
>>prepare s from
+>SELECT COUNT(*)
+>FROM UDF(sessionize_java(TABLE(SELECT userid,
+> JULIANTIMESTAMP(ts) as TS,
+> ipAddr
+> FROM clicks
+> PARTITION BY ipaddr ORDER BY ts),
+> 'IPADDR',
+> cast('TS' as char(2)),
+> 60000000)) XO;
--- SQL command prepared.
>>execute s;
(EXPR)
--------------------
4
--- 1 row(s) selected.
>>
>>-- will fail until tinyint support is added for spj/procedures
>>cqd traf_tinyint_spj_support 'ON';
--- SQL operation complete.
>>select *
+>from UDF("Fibonacci"(1,10)) XO
+>order by 1;
ORDINAL FIBONACCI_NUMBER
----------- --------------------
1 1
2 1
3 2
4 3
5 5
6 8
7 13
8 21
9 34
10 55
--- 10 row(s) selected.
>>cqd traf_tinyint_spj_support reset;
--- SQL operation complete.
>>
>>select *
+>from UDF("Fibonacci"(1,10)) XO
+>order by 1;
ORDINAL FIBONACCI_NUMBER
----------- --------------------
1 1
2 1
3 2
4 3
5 5
6 8
7 13
8 21
9 34
10 55
--- 10 row(s) selected.
>>
>>select sum(fibonacci_number)
+>from UDF("Fibonacci"(50,10)) XO;
(EXPR)
--------------------
2484365770887
--- 1 row(s) selected.
>>
>>select *
+>from UDF(fibonacci_java(1,10)) XO
+>order by 1;
ORDINAL FIBONACCI_NUMBER
----------- --------------------
1 1
2 1
3 2
4 3
5 5
6 8
7 13
8 21
9 34
10 55
--- 10 row(s) selected.
>>
>>select sum(fibonacci_number)
+>from UDF(fibonacci_java(50,10)) XO;
(EXPR)
--------------------
2484365770887
--- 1 row(s) selected.
>>
>>control query shape join(tmudf, tmudf);
--- SQL operation complete.
>>select *
+>from UDF("Fibonacci"(1,10)) natural join UDF(fibonacci_java(1,10));
ORDINAL FIBONACCI_NUMBER
----------- --------------------
1 1
2 1
3 2
4 3
5 5
6 8
7 13
8 21
9 34
10 55
--- 10 row(s) selected.
>>control query shape off;
--- SQL operation complete.
>>
>>select *
+>from UDF("Fibonacci"(1,10)) cpp1 natural join
+> UDF(fibonacci_java(1,10)) java1 natural join
+> UDF(fibonacci_java(1,10)) java2;
ORDINAL FIBONACCI_NUMBER
----------- --------------------
1 1
2 1
3 2
4 3
5 5
6 8
7 13
8 21
9 34
10 55
--- 10 row(s) selected.
>>
>>prepare s from
+>select * from udf(sessionize_dynamic(table(select * from t001_Datatypes),
+> 'C_VARCHAR', 'C_DECIMAL_UNSIGNED', 60));
--- SQL command prepared.
>>execute s;
SESSION_ID SEQUENCE_NO C_CHAR C_CHAR_UPSHIFT C_CHAR_NOT_CASESPECIFIC C_CHAR_VARYING C_CHAR_VARYING_UPSHIFT C_CHAR_VARYING_NOT_CASESPECIFIC C_VARCHAR C_VARCHAR_UPSHIFT C_VARCHAR_NOT_CASESPECIFIC C_NCHAR C_NCHAR_UPSHIFT C_NCHAR_NOT_CASESPECIFIC C_NCHAR_VARYING C_NCHAR_VARYING_UPSHIFT C_NCHAR_VARYING_NOT_CASESPECIFIC C_NUMERIC C_NUMERIC_UNSIGNED C_DECIMAL C_DECIMAL_UNSIGNED C_INTEGER C_INTEGER_UNSIGNED C_LARGEINT C_SMALLINT C_SMALLINT_UNSIGNED C_TINYINT C_TINYINT_UNSIGNED C_FLOAT C_REAL C_DOUBLE_PRECISION C_DATE C_TIME C_TIME6 C_TIMESTAMP0 C_TIMESTAMP C_TIMESTAMP6 C_INTERVAL C_INTERVALS86 C_INTERVALD6S C_BLOB C_CLOB C_BOOLEAN
-------------------- -------------------- --------------- --------------- ----------------------- --------------- ---------------------- ------------------------------- --------------- ----------------- -------------------------- ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ -------------------------------- ------------ ------------------ ----------- ------------------ ----------- ------------------ -------------------- ---------- ------------------- --------- ------------------ ------------------------- --------------- ------------------------- ---------- -------- --------------- ------------------- -------------------------- -------------------------- ---------- ---------------- ----------------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ---------
1 1 CHAR_1 CHAR_1 char_1 CHARVAR_1 CHARVAR_1 charvar_1 VARCHAR_1 VARCHAR_1 varchar_1 NCHAR_1 NCHAR_1 nchar_1 NCHARVAR_1 NCHARVAR_1 ncharvar_1 -1.00 1.00 -1.11 1.11 -1 1 -1 -1 1 -1 1 -1.11000000000000016E+000 -1.1100000E+000 -1.11000000000000016E+000 2001-01-01 01:01:01 01:01:01.111111 2001-01-01 01:01:01 2001-01-01 01:01:01.111111 2001-01-01 01:01:01.111111 1-01 88888888.666666 666666 23:59:59.999999 BLOB_1 CLOB_1 TRUE
--- 1 row(s) selected.
>>execute s;
SESSION_ID SEQUENCE_NO C_CHAR C_CHAR_UPSHIFT C_CHAR_NOT_CASESPECIFIC C_CHAR_VARYING C_CHAR_VARYING_UPSHIFT C_CHAR_VARYING_NOT_CASESPECIFIC C_VARCHAR C_VARCHAR_UPSHIFT C_VARCHAR_NOT_CASESPECIFIC C_NCHAR C_NCHAR_UPSHIFT C_NCHAR_NOT_CASESPECIFIC C_NCHAR_VARYING C_NCHAR_VARYING_UPSHIFT C_NCHAR_VARYING_NOT_CASESPECIFIC C_NUMERIC C_NUMERIC_UNSIGNED C_DECIMAL C_DECIMAL_UNSIGNED C_INTEGER C_INTEGER_UNSIGNED C_LARGEINT C_SMALLINT C_SMALLINT_UNSIGNED C_TINYINT C_TINYINT_UNSIGNED C_FLOAT C_REAL C_DOUBLE_PRECISION C_DATE C_TIME C_TIME6 C_TIMESTAMP0 C_TIMESTAMP C_TIMESTAMP6 C_INTERVAL C_INTERVALS86 C_INTERVALD6S C_BLOB C_CLOB C_BOOLEAN
-------------------- -------------------- --------------- --------------- ----------------------- --------------- ---------------------- ------------------------------- --------------- ----------------- -------------------------- ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ -------------------------------- ------------ ------------------ ----------- ------------------ ----------- ------------------ -------------------- ---------- ------------------- --------- ------------------ ------------------------- --------------- ------------------------- ---------- -------- --------------- ------------------- -------------------------- -------------------------- ---------- ---------------- ----------------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ---------
1 1 CHAR_1 CHAR_1 char_1 CHARVAR_1 CHARVAR_1 charvar_1 VARCHAR_1 VARCHAR_1 varchar_1 NCHAR_1 NCHAR_1 nchar_1 NCHARVAR_1 NCHARVAR_1 ncharvar_1 -1.00 1.00 -1.11 1.11 -1 1 -1 -1 1 -1 1 -1.11000000000000016E+000 -1.1100000E+000 -1.11000000000000016E+000 2001-01-01 01:01:01 01:01:01.111111 2001-01-01 01:01:01 2001-01-01 01:01:01.111111 2001-01-01 01:01:01.111111 1-01 88888888.666666 666666 23:59:59.999999 BLOB_1 CLOB_1 TRUE
--- 1 row(s) selected.
>>
>>prepare s from
+>select * from udf(sessionize_java(table(select *, cast(? as int)
+> from t001_Datatypes),
+> 'C_VARCHAR', 'C_DECIMAL_UNSIGNED', 60));
--- SQL command prepared.
>>execute s using 123;
SESSION_ID SEQUENCE_NO C_CHAR C_CHAR_UPSHIFT C_CHAR_NOT_CASESPECIFIC C_CHAR_VARYING C_CHAR_VARYING_UPSHIFT C_CHAR_VARYING_NOT_CASESPECIFIC C_VARCHAR C_VARCHAR_UPSHIFT C_VARCHAR_NOT_CASESPECIFIC C_NCHAR C_NCHAR_UPSHIFT C_NCHAR_NOT_CASESPECIFIC C_NCHAR_VARYING C_NCHAR_VARYING_UPSHIFT C_NCHAR_VARYING_NOT_CASESPECIFIC C_NUMERIC C_NUMERIC_UNSIGNED C_DECIMAL C_DECIMAL_UNSIGNED C_INTEGER C_INTEGER_UNSIGNED C_LARGEINT C_SMALLINT C_SMALLINT_UNSIGNED C_TINYINT C_TINYINT_UNSIGNED C_FLOAT C_REAL C_DOUBLE_PRECISION C_DATE C_TIME C_TIME6 C_TIMESTAMP0 C_TIMESTAMP C_TIMESTAMP6 C_INTERVAL C_INTERVALS86 C_INTERVALD6S C_BLOB C_CLOB C_BOOLEAN (EXPR)
-------------------- -------------------- --------------- --------------- ----------------------- --------------- ---------------------- ------------------------------- --------------- ----------------- -------------------------- ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ -------------------------------- ------------ ------------------ ----------- ------------------ ----------- ------------------ -------------------- ---------- ------------------- --------- ------------------ ------------------------- --------------- ------------------------- ---------- -------- --------------- ------------------- -------------------------- -------------------------- ---------- ---------------- ----------------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- --------- -----------
1 1 CHAR_1 CHAR_1 char_1 CHARVAR_1 CHARVAR_1 charvar_1 VARCHAR_1 VARCHAR_1 varchar_1 NCHAR_1 NCHAR_1 nchar_1 NCHARVAR_1 NCHARVAR_1 ncharvar_1 -1.00 1.00 -1.11 1.11 -1 1 -1 -1 1 -1 1 -1.11000000000000016E+000 -1.1100000E+000 -1.11000000000000016E+000 2001-01-01 01:01:01 01:01:01.111111 2001-01-01 01:01:01 2001-01-01 01:01:01.111111 2001-01-01 01:01:01.111111 1-01 88888888.666666 666666 23:59:59.999999 BLOB_1 CLOB_1 TRUE 123
--- 1 row(s) selected.
>>execute s using 456;
SESSION_ID SEQUENCE_NO C_CHAR C_CHAR_UPSHIFT C_CHAR_NOT_CASESPECIFIC C_CHAR_VARYING C_CHAR_VARYING_UPSHIFT C_CHAR_VARYING_NOT_CASESPECIFIC C_VARCHAR C_VARCHAR_UPSHIFT C_VARCHAR_NOT_CASESPECIFIC C_NCHAR C_NCHAR_UPSHIFT C_NCHAR_NOT_CASESPECIFIC C_NCHAR_VARYING C_NCHAR_VARYING_UPSHIFT C_NCHAR_VARYING_NOT_CASESPECIFIC C_NUMERIC C_NUMERIC_UNSIGNED C_DECIMAL C_DECIMAL_UNSIGNED C_INTEGER C_INTEGER_UNSIGNED C_LARGEINT C_SMALLINT C_SMALLINT_UNSIGNED C_TINYINT C_TINYINT_UNSIGNED C_FLOAT C_REAL C_DOUBLE_PRECISION C_DATE C_TIME C_TIME6 C_TIMESTAMP0 C_TIMESTAMP C_TIMESTAMP6 C_INTERVAL C_INTERVALS86 C_INTERVALD6S C_BLOB C_CLOB C_BOOLEAN (EXPR)
-------------------- -------------------- --------------- --------------- ----------------------- --------------- ---------------------- ------------------------------- --------------- ----------------- -------------------------- ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ -------------------------------- ------------ ------------------ ----------- ------------------ ----------- ------------------ -------------------- ---------- ------------------- --------- ------------------ ------------------------- --------------- ------------------------- ---------- -------- --------------- ------------------- -------------------------- -------------------------- ---------- ---------------- ----------------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- --------- -----------
1 1 CHAR_1 CHAR_1 char_1 CHARVAR_1 CHARVAR_1 charvar_1 VARCHAR_1 VARCHAR_1 varchar_1 NCHAR_1 NCHAR_1 nchar_1 NCHARVAR_1 NCHARVAR_1 ncharvar_1 -1.00 1.00 -1.11 1.11 -1 1 -1 -1 1 -1 1 -1.11000000000000016E+000 -1.1100000E+000 -1.11000000000000016E+000 2001-01-01 01:01:01 01:01:01.111111 2001-01-01 01:01:01 2001-01-01 01:01:01.111111 2001-01-01 01:01:01.111111 1-01 88888888.666666 666666 23:59:59.999999 BLOB_1 CLOB_1 TRUE 456
--- 1 row(s) selected.
>>
>>prepare s from
+>select *
+>from udf(sessionize_dynamic(table(select * from t001_Datatypes),
+> 'C_VARCHAR', 'C_DECIMAL_UNSIGNED', 60)) cpp
+> natural join
+> udf(sessionize_java(table(select * from t001_Datatypes),
+> 'C_VARCHAR', 'C_DECIMAL_UNSIGNED', 60)) java;
--- SQL command prepared.
>>execute s;
SESSION_ID SEQUENCE_NO C_CHAR C_CHAR_UPSHIFT C_CHAR_NOT_CASESPECIFIC C_CHAR_VARYING C_CHAR_VARYING_UPSHIFT C_CHAR_VARYING_NOT_CASESPECIFIC C_VARCHAR C_VARCHAR_UPSHIFT C_VARCHAR_NOT_CASESPECIFIC C_NCHAR C_NCHAR_UPSHIFT C_NCHAR_NOT_CASESPECIFIC C_NCHAR_VARYING C_NCHAR_VARYING_UPSHIFT C_NCHAR_VARYING_NOT_CASESPECIFIC C_NUMERIC C_NUMERIC_UNSIGNED C_DECIMAL C_DECIMAL_UNSIGNED C_INTEGER C_INTEGER_UNSIGNED C_LARGEINT C_SMALLINT C_SMALLINT_UNSIGNED C_TINYINT C_TINYINT_UNSIGNED C_FLOAT C_REAL C_DOUBLE_PRECISION C_DATE C_TIME C_TIME6 C_TIMESTAMP0 C_TIMESTAMP C_TIMESTAMP6 C_INTERVAL C_INTERVALS86 C_INTERVALD6S C_BLOB C_CLOB C_BOOLEAN
-------------------- -------------------- --------------- --------------- ----------------------- --------------- ---------------------- ------------------------------- --------------- ----------------- -------------------------- ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ -------------------------------- ------------ ------------------ ----------- ------------------ ----------- ------------------ -------------------- ---------- ------------------- --------- ------------------ ------------------------- --------------- ------------------------- ---------- -------- --------------- ------------------- -------------------------- -------------------------- ---------- ---------------- ----------------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ---------
1 1 CHAR_1 CHAR_1 char_1 CHARVAR_1 CHARVAR_1 charvar_1 VARCHAR_1 VARCHAR_1 varchar_1 NCHAR_1 NCHAR_1 nchar_1 NCHARVAR_1 NCHARVAR_1 ncharvar_1 -1.00 1.00 -1.11 1.11 -1 1 -1 -1 1 -1 1 -1.11000000000000016E+000 -1.1100000E+000 -1.11000000000000016E+000 2001-01-01 01:01:01 01:01:01.111111 2001-01-01 01:01:01 2001-01-01 01:01:01.111111 2001-01-01 01:01:01.111111 1-01 88888888.666666 666666 23:59:59.999999 BLOB_1 CLOB_1 TRUE
--- 1 row(s) selected.
>>execute s;
SESSION_ID SEQUENCE_NO C_CHAR C_CHAR_UPSHIFT C_CHAR_NOT_CASESPECIFIC C_CHAR_VARYING C_CHAR_VARYING_UPSHIFT C_CHAR_VARYING_NOT_CASESPECIFIC C_VARCHAR C_VARCHAR_UPSHIFT C_VARCHAR_NOT_CASESPECIFIC C_NCHAR C_NCHAR_UPSHIFT C_NCHAR_NOT_CASESPECIFIC C_NCHAR_VARYING C_NCHAR_VARYING_UPSHIFT C_NCHAR_VARYING_NOT_CASESPECIFIC C_NUMERIC C_NUMERIC_UNSIGNED C_DECIMAL C_DECIMAL_UNSIGNED C_INTEGER C_INTEGER_UNSIGNED C_LARGEINT C_SMALLINT C_SMALLINT_UNSIGNED C_TINYINT C_TINYINT_UNSIGNED C_FLOAT C_REAL C_DOUBLE_PRECISION C_DATE C_TIME C_TIME6 C_TIMESTAMP0 C_TIMESTAMP C_TIMESTAMP6 C_INTERVAL C_INTERVALS86 C_INTERVALD6S C_BLOB C_CLOB C_BOOLEAN
-------------------- -------------------- --------------- --------------- ----------------------- --------------- ---------------------- ------------------------------- --------------- ----------------- -------------------------- ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ -------------------------------- ------------ ------------------ ----------- ------------------ ----------- ------------------ -------------------- ---------- ------------------- --------- ------------------ ------------------------- --------------- ------------------------- ---------- -------- --------------- ------------------- -------------------------- -------------------------- ---------- ---------------- ----------------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ---------
1 1 CHAR_1 CHAR_1 char_1 CHARVAR_1 CHARVAR_1 charvar_1 VARCHAR_1 VARCHAR_1 varchar_1 NCHAR_1 NCHAR_1 nchar_1 NCHARVAR_1 NCHARVAR_1 ncharvar_1 -1.00 1.00 -1.11 1.11 -1 1 -1 -1 1 -1 1 -1.11000000000000016E+000 -1.1100000E+000 -1.11000000000000016E+000 2001-01-01 01:01:01 01:01:01.111111 2001-01-01 01:01:01 2001-01-01 01:01:01.111111 2001-01-01 01:01:01.111111 1-01 88888888.666666 666666 23:59:59.999999 BLOB_1 CLOB_1 TRUE
--- 1 row(s) selected.
>>
>>-- negative tests
>>select * from udf(sessionize_err('abc')) XOX(a);
*** ERROR[1389] Object SESSIONIZE_ERR does not exist in Trafodion.
*** ERROR[4450] Function SESSIONIZE_ERR is not a built-in function or registered user-defined function.
*** ERROR[8822] The statement was not prepared.
>>-- expect error 11246
>>
>>-- these should be caught by the compiler interface
>>select * from udf(sessionize_dynamic(table (select * from clicks), 'TS')) XOX;
*** ERROR[11252] Second scalar parameter must be a string constant (SQLSTATE 38003)
*** ERROR[8822] The statement was not prepared.
>>-- too few input parameters
>>select * from udf(sessionize_dynamic(table (select * from clicks), 1,2,3)) XOX;
*** ERROR[11252] Column 1 not found (SQLSTATE 38900)
*** ERROR[8822] The statement was not prepared.
>>-- not a string parameter
>>select * from udf(sessionize_dynamic(TABLE(SELECT userid, JULIANTIMESTAMP(ts) as TS
+> FROM clicks
+> PARTITION BY userid ORDER BY ts),
+>TABLE(SELECT userid, JULIANTIMESTAMP(ts) as TS
+> FROM clicks
+> PARTITION BY userid ORDER BY ts),
+>cast('TS' as char(2)),
+> 'USERID',
+> 60000000)) XOX;
*** ERROR[15001] A syntax error occurred at or before:
select * from udf(sessionize_dynamic(TABLE(SELECT userid, JULIANTIMESTAMP(ts) a
s TS FROM clicks PARTITION
BY userid ORDER BY ts), TABLE(SELECT userid, JULIANTIMESTAMP(ts) as TS
FROM clicks PARTITION BY userid ORD
ER BY ts), cast('TS' as char(2)), 'USERID',
60000000)) XOX;
^ (409 characters from start of SQL statement)
*** ERROR[8822] The statement was not prepared.
>>-- too many table-valued arguments (syntax error for now)
>>SELECT cast(CONVERTTIMESTAMP(ts) as TIME(6)), userid, session_id
+>FROM UDF(sessionize_dynamic(TABLE(SELECT userid, JULIANTIMESTAMP(ts) as TS
+> FROM clicks
+> PARTITION BY userid ORDER BY ts),
+> 'NONEXISTENTCOL',
+> 'USERID',
+> 60000000)) XOX;
*** ERROR[11252] Column NONEXISTENTCOL not found (SQLSTATE 38900)
*** ERROR[8822] The statement was not prepared.
>>-- non-existent column specified in input parameter
>>SELECT cast(CONVERTTIMESTAMP(ts) as TIME(6)), userid, session_id
+>FROM UDF(sessionize_dynamic(TABLE(SELECT userid, JULIANTIMESTAMP(ts) as TS
+> FROM clicks
+> PARTITION BY 3 ORDER BY ts),
+> 'SESSION_ID',
+> 'TS',
+> 60000000)) XOX;
*** ERROR[11154] Ordinal number 3 used in PARTITION BY clause of a UDF must be an integer ranging from 1 to the number of columns (2 in this case).
*** ERROR[8822] The statement was not prepared.
>>-- PARTITION BY 3 has an invalid column number
>>
>> CREATE LIBRARY TRAFODION.SCH.ALTERTEST FILE $$QUOTE$$ $$REGRRUNDIR$$/TEST001.dll $$QUOTE$$;
--- SQL operation complete.
>> ALTER LIBRARY TRAFODION.SCH.ALTERTEST FILE $$QUOTE$$ $$REGRRUNDIR$$/TEST001.jar $$QUOTE$$;
--- SQL operation complete.
>>
>>log;