📄 ejbql.sql
字号:
-- This test EJBQL Absolute function. Resolve 3535-- Begin of ABS/ABSVAL test. For all valid types, un-escaped function.-- Integer has a range of -2147483648 to 2147483647-- Basiccreate table myint( a int );create table myinteger( a integer );select abs(a) from myint;select abs(a) from myinteger;insert into myint values (null), (+0), (-0), (+1), (-1), (1000), (-1000), (null), (2147483647), (-2147483647);insert into myinteger values (NULL), (+0), (-0), (+1), (-1), (1000), (-1000), (NULL), (2147483647), (-2147483647);select a from myint;select a from myinteger;select abs(a) from myint;select abs(a) from myinteger;select -abs(a) from myint;select -abs(a) from myinteger;select abs(abs(-abs(-abs(a)))) from myint;select abs(abs(-abs(-abs(a)))) from myinteger;SELECT ABSVAL(ABSVAL(-ABSVAL(-ABSVAL(A)))) FROM MYINT;SELECT ABSVAL(ABSVAL(-ABSVAL(-ABSVAL(A)))) FROM MYINTEGER;insert into myint values (-2147483648);insert into myinteger values (-2147483648);select a from myint where a=-2147483648;select a from myinteger where a=-2147483648;-- Errorselect -a from myint where a=-2147483648;select -a from myinteger where a=-2147483648;select abs(-a) from myint where a=-2147483648;select abs(-a) from myinteger where a=-2147483648;select abs(a) from myint where a=-2147483648;select abs(a) from myinteger where a=-2147483648;select abs(-abs(a)) from myint where a=-2147483648;select abs(-abs(a)) from myinteger where a=-2147483648;drop table myint;drop table myinteger;-- End of Integer test-- Smallint has a range of -32768 to 32767-- Basiccreate table mysmallint( a smallint );select abs(a) from mysmallint;insert into mysmallint values (null), (+0), (-0), (+1), (-1), (1000), (-1000), (null), (32767), (-32767);select a from mysmallint;select abs(a) from mysmallint;select -abs(a) from mysmallint;select abs(abs(-abs(-abs(a)))) from mysmallint;SELECT ABSVAL(ABSVAL(-ABSVAL(-ABSVAL(A)))) FROM MYSMALLINT;insert into mysmallint values (-32768);select a from mysmallint where a=-32768;-- Errorselect -a from mysmallint where a=-32768;select abs(-a) from mysmallint where a=-32768;select abs(a) from mysmallint where a=-32768;select abs(-abs(a)) from mysmallint where a=-32768;drop table mysmallint;-- End of Smallint test-- Bigint has a range of -9223372036854775808 to 9223372036854775807-- Basiccreate table mybigint( a bigint );select abs(a) from mybigint;insert into mybigint values (null), (+0), (-0), (+1), (-1), (1000), (-1000), (null), (9223372036854775807), (-9223372036854775807);select a from mybigint;select abs(a) from mybigint;select -abs(a) from mybigint;select abs(abs(-abs(-abs(a)))) from mybigint;SELECT ABSVAL(ABSVAL(-ABSVAL(-ABSVAL(A)))) FROM MYBIGINT;insert into mybigint values (-9223372036854775808);select a from mybigint where a=-9223372036854775808;-- Errorselect -a from mybigint where a=-9223372036854775808;select abs(-a) from mybigint where a=-9223372036854775808;select abs(a) from mybigint where a=-9223372036854775808;select abs(-abs(a)) from mybigint where a=-9223372036854775808;drop table mybigint;-- End of Bigint test-- REAL has a range of +/-1.175E-37 to +/-3.402E+38 -- Basiccreate table myreal( a real );select abs(a) from myreal;insert into myreal values (null), (+0), (-0), (+1), (-1), (null), (100000000), (-100000000),(3.402E+38), (-3.402E+38),(1.175E-37), (-1.175E-37);select a from myreal;select -a from myreal;select abs(a) from myreal;select abs(-a) from myreal;select -abs(a) from myreal;select abs(abs(-abs(-abs(a)))) from myreal;SELECT ABSVAL(ABSVAL(-ABSVAL(-ABSVAL(A)))) FROM MYREAL;select distinct abs(a) from myreal;---- There is nothing wrong with returning 1.0. The float overflows and this is just the way it behaves.-- this used to work on CS, not any more when adopted to DB2 style floats-- since contant numbers are (parsed as) doublesselect abs(-abs(a)) + 1 from myreal where a=1.175E-37;-- when casted to a real, it is foundselect abs(-abs(a)) + 1 from myreal where a=cast(1.175E-37 as real);-- Errorinsert into myreal values ( 3.402E+38 *2);insert into myreal values (-3.402E+38 *2);drop table myreal;-- End of Real test-- Double Precision has a range of +/-2.225E-307 to +/-1.79769E+308 -- Basiccreate table mydoubleprecision( a double precision );select abs(a) from mydoubleprecision;insert into mydoubleprecision values (null), (+0), (-0), (+1), (-1), (100000000), (-100000000), (null),(1.79769E+308), (-1.79769E+308),(2.225E-307), (-2.225E-307);select a from mydoubleprecision;select -a from mydoubleprecision;select abs(a) from mydoubleprecision;select abs(-a) from mydoubleprecision;select -abs(a) from mydoubleprecision;select abs(abs(-abs(-abs(a)))) from mydoubleprecision;SELECT ABSVAL(ABSVAL(-ABSVAL(-ABSVAL(A)))) FROM MYDOUBLEPRECISION;select distinct abs(a) from mydoubleprecision;-- There is nothing wrong with returning 1.0. The double overflows and this is just the way it behaves.select abs(-abs(a)) + 1 from mydoubleprecision where a=2.225E-307;-- Errorinsert into mydoubleprecision values ( 1.79769E+308 *2);insert into mydoubleprecision values (-1.79769E+308 *2);drop table mydoubleprecision;-- End of Double Precision test-- Float has a the range or a REAL or DOUBLE depending on-- the precision you specify. Below a is a double, b is a floatcreate table myfloat( a float, b float(23) );select abs(a), abs(b) from myfloat;select columnname, columndatatypefrom sys.syscolumns c, sys.systables t where c.referenceid = t.tableid and t.tablename='MYFLOAT';insert into myfloat values (null, null), (+0, +0), (-0, -0), (+1, +1), (-1, -1),(100000000, 100000000), (-100000000, -100000000), (null, null),(1.79769E+308, 3.402E+38),(-1.79769E+308, -3.402E+38),(2.225E-307, 1.175E-37),(-2.225E-307, -1.175E-37);select a, b from myfloat;select -a, -b from myfloat;select abs(a), abs(b) from myfloat;select abs(-a), abs(-b) from myfloat;select -abs(a), -abs(b) from myfloat;select abs(abs(-abs(-abs(a)))), abs(abs(-abs(-abs(b)))) from myfloat;SELECT ABSVAL(ABSVAL(-ABSVAL(-ABSVAL(A)))), ABSVAL(ABSVAL(-ABSVAL(-ABSVAL(B)))) FROM MYFLOAT;select distinct abs(a) from myfloat;-- -- There is nothing wrong with returning 1.0. The float overflows and this is just the way it behaves.-- this used to work in CS, but no more, = on floating point values isn't really usefulselect abs(-abs(a)) + 1, abs(-abs(b)) + 1 from myfloat where a=2.225E-307 AND b=1.175E-37;select abs(-abs(a)) + 1, abs(-abs(b)) + 1 from myfloat where b=3.402E+38;-- 'real =' works on DB2 and DB2 Cloudscapeselect abs(-abs(a)) + 1, abs(-abs(b)) + 1 from myfloat where b=cast(3.402E+38 as real);select abs(-abs(a)) + 1, abs(-abs(b)) + 1 from myfloat where a=2.225E-307 AND b=cast(1.175E-37 as real);select abs(-abs(a)) + 1, abs(-abs(b)) + 1 from myfloat where a=2.225E-307;-- Errorinsert into myfloat values ( 1.79769E+308 *2, 3.402E+38 *2);insert into myfloat values (-1.79769E+308 *2, -3.402E+38 *2);insert into myfloat values ( 2.225E-307, 3.402E+38 *2);insert into myfloat values (-2.225E-307, -3.402E+38 *2);drop table myfloat;-- End of Float test-- Decimal is java.math.BigDecimal-- Basiccreate table myDecimal( a decimal(31, 0), b decimal(31,31));select abs(a) from myDecimal;insert into myDecimal values (null,0), (+0,0), (-0,0), (+1,0), (-1,0), (100000000,.10000000), (-100000000,-.10000000), (null,null), (1.0e30, 1.0e-30), (-1.0e30, -1.0e-30);select a from myDecimal;select -a from myDecimal;select b from myDecimal;select -b from myDecimal;select abs(a) from myDecimal;select abs(-a) from myDecimal;select -abs(a) from myDecimal;select abs(abs(-abs(-abs(a)))) from myDecimal;SELECT ABSVAL(ABSVAL(-ABSVAL(-ABSVAL(A)))) FROM MYDECIMAL;select distinct abs(a) from myDecimal;select abs(b) from myDecimal;select abs(-b) from myDecimal;select -abs(b) from myDecimal;select abs(abs(-abs(-abs(b)))) from myDecimal;SELECT ABSVAL(ABSVAL(-ABSVAL(-ABSVAL(B)))) FROM MYDECIMAL;select distinct abs(b) from myDecimal;-- There is nothing wrong with returning 1.0. The decimal overflows and this is just the way it behaves. Needs to make this compatible with jdk1.1.8(which had a bug).select abs(-abs(a)) + 1 from myDecimal;drop table myDecimal;-- End of Decimal test-- Numeric java.math.BigDecimal-- Basiccreate table myNumeric( a decimal(31,0), b decimal(31,31 ));select abs(a) from myNumeric;insert into myNumeric values (null), (+0), (-0), (+1), (-1),(100000000), (-100000000), (null),(1.0e31, ,1.0e-31),(-1.0e31, -1.0e-31 ), select a from myNumeric;select -a from myNumeric;select b from myNumeric;select -b from myNumeric;select abs(a), abs(b)from myNumeric;select abs(-a), abs(-b) from myNumeric;select -abs(a), -abs(b) from myNumeric;select abs(abs(-abs(-abs(a)))) from myNumeric;SELECT ABSVAL(ABSVAL(-ABSVAL(-ABSVAL(A)))) FROM MYNUMERIC; select distinct abs(a) from myNumeric;-- There is nothing wrong with returning 1.0. The numeric overflows and this is just the way it behaves. Needs to make this compatible with jdk1.1.8(which had a bug).select abs(-abs(a)) + 1 from myNumeric;drop table myNumeric;-- End of Numeric test-- Test some different statements, just in casecreate table foo( a int );insert into foo values ( abs( 1) );insert into foo values ( abs(-2) );insert into foo values (-abs(-3) );insert into foo values (-abs( 4) );insert into foo values ( -5 );insert into foo values ( -6 );insert into foo values ( -7 );autocommit off;prepare p1 as 'select a from foo';prepare p2 as 'select abs(a) from foo';prepare p3 as 'insert into foo select a*(-1) from foo';execute p1;execute p2;execute p3;execute p1;insert into foo values( abs( 8 ) );insert into foo values( abs(-9 ) );insert into foo values(-abs(-10) );insert into foo values( abs( 11) );insert into foo values( -12 );execute p1;execute p2;execute p3;execute p1;rollback;commit;autocommit on;insert into foo values( abs( 13) );insert into foo values( abs(-14) );insert into foo values(-abs(-15) );insert into foo values(-abs( 16) );insert into foo values( -17 );execute p1;execute p2;execute p3;execute p1;select * from foo;drop table foo;-- End of ABS/ABSVAL test. For all valid types. Un-escaped function.-- abs is not a reserved wordcreate table abs( a int );drop table abs;-- This test EJBQL Absolute function. Resolve 3535-- Begin of ABS test. For escape function.-- Integer-- Basic-- beetle 5805 - support INT[EGER] built-in functionvalues{fn abs(INT(' 0') )};values{fn abs(INT('-0') )};values{fn abs(INT(' 1') )};values{fn abs(INT('-1') )};values{fn abs(INT(' 1000000') )};values{fn abs(INT('-1000000') )};values{fn abs(INT(' 2147483647') )};values{fn abs(INT('-2147483648') + 1 )};-- Errorvalues{fn abs(INT('-2147483648') )};values{fn abs(INT(' 2147483647') + 1 )};-- Smallint-- Basic-- beetle 5807 - support SMALLINT built-in functionvalues{fn abs( SMALLINT(' 0') )};values{fn abs( SMALLINT('-0') )};values{fn abs( SMALLINT(' 1') )};values{fn abs( SMALLINT('-1') )};values{fn abs( SMALLINT(' 10000') )};values{fn abs( SMALLINT('-10000') )};values{fn abs( SMALLINT(' 32767') )};values{fn abs( SMALLINT('-32768') + 1 )};values{fn abs(-SMALLINT('-32768') )};-- Errorvalues{fn abs(-SMALLINT(' 32768') )};values{fn abs( SMALLINT('-32768') )};-- Bigint-- Basic-- beetle 5809 - support BIGINT built-in functionvalues{fn abs( BIGINT(' 0') )};values{fn abs( BIGINT('-0') )};values{fn abs( BIGINT(' 1') )};values{fn abs( BIGINT('-1') )};values{fn abs( BIGINT(' 100000000000') )};values{fn abs( BIGINT('-100000000000') )};values{fn abs( BIGINT(' 9223372036854775807') )};values{fn abs( BIGINT('-9223372036854775808') + 1 )};-- Errorvalues{fn abs(-BIGINT('-9223372036854775808') )};values{fn abs( BIGINT('-9223372036854775808') )};-- Real-- Basic-- beetle 5806 - support REAL built-in functionvalues{fn abs( REAL( 0) )};values{fn abs( REAL(-0) )};values{fn abs( REAL( 1) )};values{fn abs( REAL(-1) )};values{fn abs( REAL( 1000000.001) )};values{fn abs( REAL(-1000000.001) )};values{fn abs( REAL( 3.402E+38) )};values{fn abs( REAL(-3.402E+38) + 1 )};-- Errorvalues{fn abs( REAL( 3.402E+38 * 2) )};values{fn abs(-REAL( NaN) )};values{fn abs( REAL( 1.40129846432481707e-45) )};values{fn abs( REAL( 3.40282346638528860e+38) )};-- Double Precision/Double-- Basic-- beetle 5803 - support DOUBLE_[PRECISION] built-in functionvalues{fn abs( DOUBLE( 0) )};values{fn abs( DOUBLE(-0) )};values{fn abs( DOUBLE( 1) )};values{fn abs( DOUBLE(-1) )};values{fn abs( DOUBLE( 1000000.001) )};values{fn abs( DOUBLE(-1000000.001) )};values{fn abs( DOUBLE(-1.79769E+308) )};values{fn abs( DOUBLE( 1.79769E+308) + 1 )};values{fn abs( DOUBLE( 2.225E-307 + 1) )};-- Errorvalues{fn abs( DOUBLE( 1.79769E+308 * 2) )};values{fn abs(-DOUBLE( NaN) )};values{fn abs( DOUBLE( 4.9E-324) )};values{fn abs( DOUBLE( 1.7976931348623157E308) )};-- Decimal/Numeric-- Basic-- beetle 5802 - support DEC[IMAL] built-in functionvalues{ fn abs(DEC( 0) )};values{ fn abs(DEC(-0) )};values{ fn abs(DEC( 1) )};values{ fn abs(DEC(-1) )};values{ fn abs(DEC( 1000000000000) )};values{ fn abs(DEC(-1000000000000) )};-- More generic testvalues{ fn abs( 0-1-.1 ) };values{ fn abs( -0-1.000000001 ) };VALUES{ FN ABS( 100-200-300 ) };-- Errorvalues{ fn abs('null') };-- End of ABS test. For escaped function.-- This test EJBQL Absolute function. Resolve 3535-- Begin of ABSVAL test. For all valid types, un-escaped function.-- Integer has a range of -2147483648 to 2147483647-- Basiccreate table myint( a int );select abs(a) from myint;insert into myint values (null);select abs(a) from myint;autocommit off;-- Prepare Statements, should pass and return 1prepare p1 as 'select abs(?) from myint';prepare p1 as 'select 1 from myint where ? <= 4';execute p1 using 'values absval( 4 )';execute p1 using 'values absval( -4 )';execute p1 using 'values absval( 4.4 )';execute p1 using 'values absval( -4.4 )';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -