blob: 8eb49b95252b0269086bc7590d2a3c47a0b441b1 [file] [log] [blame]
ij> --
-- Licensed to the Apache Software Foundation (ASF) under one or more
-- contributor license agreements. See the NOTICE file distributed with
-- this work for additional information regarding copyright ownership.
-- The ASF licenses this file to You under the Apache License, Version 2.0
-- (the "License"); you may not use this file except in compliance with
-- the License. You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
-- 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
-- Basic
create table myint( a int );
0 rows inserted/updated/deleted
ij> create table myinteger( a integer );
0 rows inserted/updated/deleted
ij> select abs(a) from myint;
1
-----------
ij> select abs(a) from myinteger;
1
-----------
ij> insert into myint values (null), (+0), (-0), (+1), (-1), (1000), (-1000), (null), (2147483647), (-2147483647);
10 rows inserted/updated/deleted
ij> insert into myinteger values (NULL), (+0), (-0), (+1), (-1), (1000), (-1000), (NULL), (2147483647), (-2147483647);
10 rows inserted/updated/deleted
ij> select a from myint;
A
-----------
NULL
0
0
1
-1
1000
-1000
NULL
2147483647
-2147483647
ij> select a from myinteger;
A
-----------
NULL
0
0
1
-1
1000
-1000
NULL
2147483647
-2147483647
ij> select abs(a) from myint;
1
-----------
NULL
0
0
1
1
1000
1000
NULL
2147483647
2147483647
ij> select abs(a) from myinteger;
1
-----------
NULL
0
0
1
1
1000
1000
NULL
2147483647
2147483647
ij> select -abs(a) from myint;
1
-----------
NULL
0
0
-1
-1
-1000
-1000
NULL
-2147483647
-2147483647
ij> select -abs(a) from myinteger;
1
-----------
NULL
0
0
-1
-1
-1000
-1000
NULL
-2147483647
-2147483647
ij> select abs(abs(-abs(-abs(a)))) from myint;
1
-----------
NULL
0
0
1
1
1000
1000
NULL
2147483647
2147483647
ij> select abs(abs(-abs(-abs(a)))) from myinteger;
1
-----------
NULL
0
0
1
1
1000
1000
NULL
2147483647
2147483647
ij> SELECT ABSVAL(ABSVAL(-ABSVAL(-ABSVAL(A)))) FROM MYINT;
1
-----------
NULL
0
0
1
1
1000
1000
NULL
2147483647
2147483647
ij> SELECT ABSVAL(ABSVAL(-ABSVAL(-ABSVAL(A)))) FROM MYINTEGER;
1
-----------
NULL
0
0
1
1
1000
1000
NULL
2147483647
2147483647
ij> insert into myint values (-2147483648);
1 row inserted/updated/deleted
ij> insert into myinteger values (-2147483648);
1 row inserted/updated/deleted
ij> select a from myint where a=-2147483648;
A
-----------
-2147483648
ij> select a from myinteger where a=-2147483648;
A
-----------
-2147483648
ij> -- Error
select -a from myint where a=-2147483648;
1
-----------
ERROR 22003: The resulting value is outside the range for the data type INTEGER.
ij> select -a from myinteger where a=-2147483648;
1
-----------
ERROR 22003: The resulting value is outside the range for the data type INTEGER.
ij> select abs(-a) from myint where a=-2147483648;
1
-----------
ERROR 22003: The resulting value is outside the range for the data type INTEGER.
ij> select abs(-a) from myinteger where a=-2147483648;
1
-----------
ERROR 22003: The resulting value is outside the range for the data type INTEGER.
ij> select abs(a) from myint where a=-2147483648;
1
-----------
ERROR 22003: The resulting value is outside the range for the data type INTEGER.
ij> select abs(a) from myinteger where a=-2147483648;
1
-----------
ERROR 22003: The resulting value is outside the range for the data type INTEGER.
ij> select abs(-abs(a)) from myint where a=-2147483648;
1
-----------
ERROR 22003: The resulting value is outside the range for the data type INTEGER.
ij> select abs(-abs(a)) from myinteger where a=-2147483648;
1
-----------
ERROR 22003: The resulting value is outside the range for the data type INTEGER.
ij> drop table myint;
0 rows inserted/updated/deleted
ij> drop table myinteger;
0 rows inserted/updated/deleted
ij> -- End of Integer test
-- Smallint has a range of -32768 to 32767
-- Basic
create table mysmallint( a smallint );
0 rows inserted/updated/deleted
ij> select abs(a) from mysmallint;
1
------
ij> insert into mysmallint values (null), (+0), (-0), (+1), (-1), (1000), (-1000), (null), (32767), (-32767);
10 rows inserted/updated/deleted
ij> select a from mysmallint;
A
------
NULL
0
0
1
-1
1000
-1000
NULL
32767
-32767
ij> select abs(a) from mysmallint;
1
------
NULL
0
0
1
1
1000
1000
NULL
32767
32767
ij> select -abs(a) from mysmallint;
1
------
NULL
0
0
-1
-1
-1000
-1000
NULL
-32767
-32767
ij> select abs(abs(-abs(-abs(a)))) from mysmallint;
1
------
NULL
0
0
1
1
1000
1000
NULL
32767
32767
ij> SELECT ABSVAL(ABSVAL(-ABSVAL(-ABSVAL(A)))) FROM MYSMALLINT;
1
------
NULL
0
0
1
1
1000
1000
NULL
32767
32767
ij> insert into mysmallint values (-32768);
1 row inserted/updated/deleted
ij> select a from mysmallint where a=-32768;
A
------
-32768
ij> -- Error
select -a from mysmallint where a=-32768;
1
------
ERROR 22003: The resulting value is outside the range for the data type SMALLINT.
ij> select abs(-a) from mysmallint where a=-32768;
1
------
ERROR 22003: The resulting value is outside the range for the data type SMALLINT.
ij> select abs(a) from mysmallint where a=-32768;
1
------
ERROR 22003: The resulting value is outside the range for the data type SMALLINT.
ij> select abs(-abs(a)) from mysmallint where a=-32768;
1
------
ERROR 22003: The resulting value is outside the range for the data type SMALLINT.
ij> drop table mysmallint;
0 rows inserted/updated/deleted
ij> -- End of Smallint test
-- Bigint has a range of -9223372036854775808 to 9223372036854775807
-- Basic
create table mybigint( a bigint );
0 rows inserted/updated/deleted
ij> select abs(a) from mybigint;
1
--------------------
ij> insert into mybigint values (null), (+0), (-0), (+1), (-1), (1000), (-1000), (null), (9223372036854775807), (-9223372036854775807);
10 rows inserted/updated/deleted
ij> select a from mybigint;
A
--------------------
NULL
0
0
1
-1
1000
-1000
NULL
9223372036854775807
-9223372036854775807
ij> select abs(a) from mybigint;
1
--------------------
NULL
0
0
1
1
1000
1000
NULL
9223372036854775807
9223372036854775807
ij> select -abs(a) from mybigint;
1
--------------------
NULL
0
0
-1
-1
-1000
-1000
NULL
-9223372036854775807
-9223372036854775807
ij> select abs(abs(-abs(-abs(a)))) from mybigint;
1
--------------------
NULL
0
0
1
1
1000
1000
NULL
9223372036854775807
9223372036854775807
ij> SELECT ABSVAL(ABSVAL(-ABSVAL(-ABSVAL(A)))) FROM MYBIGINT;
1
--------------------
NULL
0
0
1
1
1000
1000
NULL
9223372036854775807
9223372036854775807
ij> insert into mybigint values (-9223372036854775808);
1 row inserted/updated/deleted
ij> select a from mybigint where a=-9223372036854775808;
A
--------------------
-9223372036854775808
ij> -- Error
select -a from mybigint where a=-9223372036854775808;
1
--------------------
ERROR 22003: The resulting value is outside the range for the data type BIGINT.
ij> select abs(-a) from mybigint where a=-9223372036854775808;
1
--------------------
ERROR 22003: The resulting value is outside the range for the data type BIGINT.
ij> select abs(a) from mybigint where a=-9223372036854775808;
1
--------------------
ERROR 22003: The resulting value is outside the range for the data type BIGINT.
ij> select abs(-abs(a)) from mybigint where a=-9223372036854775808;
1
--------------------
ERROR 22003: The resulting value is outside the range for the data type BIGINT.
ij> drop table mybigint;
0 rows inserted/updated/deleted
ij> -- End of Bigint test
-- REAL has a range of +/-1.175E-37 to +/-3.402E+38
-- Basic
create table myreal( a real );
0 rows inserted/updated/deleted
ij> select abs(a) from myreal;
1
---------------
ij> insert into myreal values (null), (+0), (-0), (+1), (-1), (null), (100000000), (-100000000),
(3.402E+38), (-3.402E+38),
(1.175E-37), (-1.175E-37);
12 rows inserted/updated/deleted
ij> select a from myreal;
A
---------------
NULL
0.0
0.0
1.0
-1.0
NULL
1.0E8
-1.0E8
3.402E38
-3.402E38
1.175E-37
-1.175E-37
ij> select -a from myreal;
1
---------------
NULL
0.0
0.0
-1.0
1.0
NULL
-1.0E8
1.0E8
-3.402E38
3.402E38
-1.175E-37
1.175E-37
ij> select abs(a) from myreal;
1
---------------
NULL
0.0
0.0
1.0
1.0
NULL
1.0E8
1.0E8
3.402E38
3.402E38
1.175E-37
1.175E-37
ij> select abs(-a) from myreal;
1
---------------
NULL
0.0
0.0
1.0
1.0
NULL
1.0E8
1.0E8
3.402E38
3.402E38
1.175E-37
1.175E-37
ij> select -abs(a) from myreal;
1
---------------
NULL
0.0
0.0
-1.0
-1.0
NULL
-1.0E8
-1.0E8
-3.402E38
-3.402E38
-1.175E-37
-1.175E-37
ij> select abs(abs(-abs(-abs(a)))) from myreal;
1
---------------
NULL
0.0
0.0
1.0
1.0
NULL
1.0E8
1.0E8
3.402E38
3.402E38
1.175E-37
1.175E-37
ij> SELECT ABSVAL(ABSVAL(-ABSVAL(-ABSVAL(A)))) FROM MYREAL;
1
---------------
NULL
0.0
0.0
1.0
1.0
NULL
1.0E8
1.0E8
3.402E38
3.402E38
1.175E-37
1.175E-37
ij> select distinct abs(a) from myreal;
1
---------------
0.0
1.175E-37
1.0
1.0E8
3.402E38
NULL
ij> ---- 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) doubles
select abs(-abs(a)) + 1 from myreal where a=1.175E-37;
1
---------------
ij> -- when casted to a real, it is found
select abs(-abs(a)) + 1 from myreal where a=cast(1.175E-37 as real);
1
---------------
1.0
ij> -- Error
insert into myreal values ( 3.402E+38 *2);
ERROR 22003: The resulting value is outside the range for the data type REAL.
ij> insert into myreal values (-3.402E+38 *2);
ERROR 22003: The resulting value is outside the range for the data type REAL.
ij> drop table myreal;
0 rows inserted/updated/deleted
ij> -- End of Real test
-- Double Precision has a range of +/-2.225E-307 to +/-1.79769E+308
-- Basic
create table mydoubleprecision( a double precision );
0 rows inserted/updated/deleted
ij> select abs(a) from mydoubleprecision;
1
------------------------
ij> insert into mydoubleprecision values (null), (+0), (-0), (+1), (-1), (100000000), (-100000000), (null),
(1.79769E+308), (-1.79769E+308),
(2.225E-307), (-2.225E-307);
12 rows inserted/updated/deleted
ij> select a from mydoubleprecision;
A
------------------------
NULL
0.0
0.0
1.0
-1.0
1.0E8
-1.0E8
NULL
1.79769E308
-1.79769E308
2.225E-307
-2.225E-307
ij> select -a from mydoubleprecision;
1
------------------------
NULL
0.0
0.0
-1.0
1.0
-1.0E8
1.0E8
NULL
-1.79769E308
1.79769E308
-2.225E-307
2.225E-307
ij> select abs(a) from mydoubleprecision;
1
------------------------
NULL
0.0
0.0
1.0
1.0
1.0E8
1.0E8
NULL
1.79769E308
1.79769E308
2.225E-307
2.225E-307
ij> select abs(-a) from mydoubleprecision;
1
------------------------
NULL
0.0
0.0
1.0
1.0
1.0E8
1.0E8
NULL
1.79769E308
1.79769E308
2.225E-307
2.225E-307
ij> select -abs(a) from mydoubleprecision;
1
------------------------
NULL
0.0
0.0
-1.0
-1.0
-1.0E8
-1.0E8
NULL
-1.79769E308
-1.79769E308
-2.225E-307
-2.225E-307
ij> select abs(abs(-abs(-abs(a)))) from mydoubleprecision;
1
------------------------
NULL
0.0
0.0
1.0
1.0
1.0E8
1.0E8
NULL
1.79769E308
1.79769E308
2.225E-307
2.225E-307
ij> SELECT ABSVAL(ABSVAL(-ABSVAL(-ABSVAL(A)))) FROM MYDOUBLEPRECISION;
1
------------------------
NULL
0.0
0.0
1.0
1.0
1.0E8
1.0E8
NULL
1.79769E308
1.79769E308
2.225E-307
2.225E-307
ij> select distinct abs(a) from mydoubleprecision;
1
------------------------
0.0
2.225E-307
1.0
1.0E8
1.79769E308
NULL
ij> -- 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;
1
------------------------
1.0
ij> -- Error
insert into mydoubleprecision values ( 1.79769E+308 *2);
ERROR 22003: The resulting value is outside the range for the data type DOUBLE.
ij> insert into mydoubleprecision values (-1.79769E+308 *2);
ERROR 22003: The resulting value is outside the range for the data type DOUBLE.
ij> drop table mydoubleprecision;
0 rows inserted/updated/deleted
ij> -- 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 float
create table myfloat( a float, b float(23) );
0 rows inserted/updated/deleted
ij> select abs(a), abs(b) from myfloat;
1 |2
----------------------------------------
ij> select columnname, columndatatype
from sys.syscolumns c, sys.systables t where c.referenceid = t.tableid and CAST(t.tablename AS VARCHAR(128)) ='MYFLOAT';
COLUMNNAME |COLUMNDATATYPE
------------------------------------------------------------------------------------------------------------------------------------------------
A |DOUBLE
B |REAL
ij> 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);
12 rows inserted/updated/deleted
ij> select a, b from myfloat;
A |B
----------------------------------------
NULL |NULL
0.0 |0.0
0.0 |0.0
1.0 |1.0
-1.0 |-1.0
1.0E8 |1.0E8
-1.0E8 |-1.0E8
NULL |NULL
1.79769E308 |3.402E38
-1.79769E308 |-3.402E38
2.225E-307 |1.175E-37
-2.225E-307 |-1.175E-37
ij> select -a, -b from myfloat;
1 |2
----------------------------------------
NULL |NULL
0.0 |0.0
0.0 |0.0
-1.0 |-1.0
1.0 |1.0
-1.0E8 |-1.0E8
1.0E8 |1.0E8
NULL |NULL
-1.79769E308 |-3.402E38
1.79769E308 |3.402E38
-2.225E-307 |-1.175E-37
2.225E-307 |1.175E-37
ij> select abs(a), abs(b) from myfloat;
1 |2
----------------------------------------
NULL |NULL
0.0 |0.0
0.0 |0.0
1.0 |1.0
1.0 |1.0
1.0E8 |1.0E8
1.0E8 |1.0E8
NULL |NULL
1.79769E308 |3.402E38
1.79769E308 |3.402E38
2.225E-307 |1.175E-37
2.225E-307 |1.175E-37
ij> select abs(-a), abs(-b) from myfloat;
1 |2
----------------------------------------
NULL |NULL
0.0 |0.0
0.0 |0.0
1.0 |1.0
1.0 |1.0
1.0E8 |1.0E8
1.0E8 |1.0E8
NULL |NULL
1.79769E308 |3.402E38
1.79769E308 |3.402E38
2.225E-307 |1.175E-37
2.225E-307 |1.175E-37
ij> select -abs(a), -abs(b) from myfloat;
1 |2
----------------------------------------
NULL |NULL
0.0 |0.0
0.0 |0.0
-1.0 |-1.0
-1.0 |-1.0
-1.0E8 |-1.0E8
-1.0E8 |-1.0E8
NULL |NULL
-1.79769E308 |-3.402E38
-1.79769E308 |-3.402E38
-2.225E-307 |-1.175E-37
-2.225E-307 |-1.175E-37
ij> select abs(abs(-abs(-abs(a)))), abs(abs(-abs(-abs(b)))) from myfloat;
1 |2
----------------------------------------
NULL |NULL
0.0 |0.0
0.0 |0.0
1.0 |1.0
1.0 |1.0
1.0E8 |1.0E8
1.0E8 |1.0E8
NULL |NULL
1.79769E308 |3.402E38
1.79769E308 |3.402E38
2.225E-307 |1.175E-37
2.225E-307 |1.175E-37
ij> SELECT ABSVAL(ABSVAL(-ABSVAL(-ABSVAL(A)))), ABSVAL(ABSVAL(-ABSVAL(-ABSVAL(B)))) FROM MYFLOAT;
1 |2
----------------------------------------
NULL |NULL
0.0 |0.0
0.0 |0.0
1.0 |1.0
1.0 |1.0
1.0E8 |1.0E8
1.0E8 |1.0E8
NULL |NULL
1.79769E308 |3.402E38
1.79769E308 |3.402E38
2.225E-307 |1.175E-37
2.225E-307 |1.175E-37
ij> select distinct abs(a) from myfloat;
1
------------------------
0.0
2.225E-307
1.0
1.0E8
1.79769E308
NULL
ij> -- -- 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 useful
select abs(-abs(a)) + 1, abs(-abs(b)) + 1 from myfloat where a=2.225E-307 AND b=1.175E-37;
1 |2
----------------------------------------
ij> select abs(-abs(a)) + 1, abs(-abs(b)) + 1 from myfloat where b=3.402E+38;
1 |2
----------------------------------------
ij> -- 'real =' works on DB2 and DB2 Cloudscape
select abs(-abs(a)) + 1, abs(-abs(b)) + 1 from myfloat where b=cast(3.402E+38 as real);
1 |2
----------------------------------------
1.79769E308 |3.402E38
ij> select abs(-abs(a)) + 1, abs(-abs(b)) + 1 from myfloat where a=2.225E-307 AND b=cast(1.175E-37 as real);
1 |2
----------------------------------------
1.0 |1.0
ij> select abs(-abs(a)) + 1, abs(-abs(b)) + 1 from myfloat where a=2.225E-307;
1 |2
----------------------------------------
1.0 |1.0
ij> -- Error
insert into myfloat values ( 1.79769E+308 *2, 3.402E+38 *2);
ERROR 22003: The resulting value is outside the range for the data type DOUBLE.
ij> insert into myfloat values (-1.79769E+308 *2, -3.402E+38 *2);
ERROR 22003: The resulting value is outside the range for the data type DOUBLE.
ij> insert into myfloat values ( 2.225E-307, 3.402E+38 *2);
ERROR 22003: The resulting value is outside the range for the data type REAL.
ij> insert into myfloat values (-2.225E-307, -3.402E+38 *2);
ERROR 22003: The resulting value is outside the range for the data type REAL.
ij> drop table myfloat;
0 rows inserted/updated/deleted
ij> -- End of Float test
-- Decimal is java.math.BigDecimal
-- Basic
create table myDecimal( a decimal(31, 0), b decimal(31,31));
0 rows inserted/updated/deleted
ij> select abs(a) from myDecimal;
1
--------------------------------
ij> 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);
10 rows inserted/updated/deleted
ij> select a from myDecimal;
A
--------------------------------
NULL
0
0
1
-1
100000000
-100000000
NULL
1000000000000000000000000000000
-1000000000000000000000000000000
ij> select -a from myDecimal;
1
--------------------------------
NULL
0
0
-1
1
-100000000
100000000
NULL
-1000000000000000000000000000000
1000000000000000000000000000000
ij> select b from myDecimal;
B
----------------------------------
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.1000000000000000000000000000000
-0.1000000000000000000000000000000
NULL
0.0000000000000000000000000000010
-0.0000000000000000000000000000010
ij> select -b from myDecimal;
1
----------------------------------
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.0000000000000000000000000000000
-0.1000000000000000000000000000000
0.1000000000000000000000000000000
NULL
-0.0000000000000000000000000000010
0.0000000000000000000000000000010
ij> select abs(a) from myDecimal;
1
--------------------------------
NULL
0
0
1
1
100000000
100000000
NULL
1000000000000000000000000000000
1000000000000000000000000000000
ij> select abs(-a) from myDecimal;
1
--------------------------------
NULL
0
0
1
1
100000000
100000000
NULL
1000000000000000000000000000000
1000000000000000000000000000000
ij> select -abs(a) from myDecimal;
1
--------------------------------
NULL
0
0
-1
-1
-100000000
-100000000
NULL
-1000000000000000000000000000000
-1000000000000000000000000000000
ij> select abs(abs(-abs(-abs(a)))) from myDecimal;
1
--------------------------------
NULL
0
0
1
1
100000000
100000000
NULL
1000000000000000000000000000000
1000000000000000000000000000000
ij> SELECT ABSVAL(ABSVAL(-ABSVAL(-ABSVAL(A)))) FROM MYDECIMAL;
1
--------------------------------
NULL
0
0
1
1
100000000
100000000
NULL
1000000000000000000000000000000
1000000000000000000000000000000
ij> select distinct abs(a) from myDecimal;
1
--------------------------------
0
1
100000000
1000000000000000000000000000000
NULL
ij> select abs(b) from myDecimal;
1
----------------------------------
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.1000000000000000000000000000000
0.1000000000000000000000000000000
NULL
0.0000000000000000000000000000010
0.0000000000000000000000000000010
ij> select abs(-b) from myDecimal;
1
----------------------------------
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.1000000000000000000000000000000
0.1000000000000000000000000000000
NULL
0.0000000000000000000000000000010
0.0000000000000000000000000000010
ij> select -abs(b) from myDecimal;
1
----------------------------------
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.0000000000000000000000000000000
-0.1000000000000000000000000000000
-0.1000000000000000000000000000000
NULL
-0.0000000000000000000000000000010
-0.0000000000000000000000000000010
ij> select abs(abs(-abs(-abs(b)))) from myDecimal;
1
----------------------------------
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.1000000000000000000000000000000
0.1000000000000000000000000000000
NULL
0.0000000000000000000000000000010
0.0000000000000000000000000000010
ij> SELECT ABSVAL(ABSVAL(-ABSVAL(-ABSVAL(B)))) FROM MYDECIMAL;
1
----------------------------------
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.0000000000000000000000000000000
0.1000000000000000000000000000000
0.1000000000000000000000000000000
NULL
0.0000000000000000000000000000010
0.0000000000000000000000000000010
ij> select distinct abs(b) from myDecimal;
1
----------------------------------
0.0000000000000000000000000000000
0.0000000000000000000000000000010
0.1000000000000000000000000000000
NULL
ij> -- 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;
1
--------------------------------
NULL
1
1
2
2
100000001
100000001
NULL
1000000000000000000000000000001
1000000000000000000000000000001
ij> drop table myDecimal;
0 rows inserted/updated/deleted
ij> -- End of Decimal test
-- Numeric java.math.BigDecimal
-- Basic
create table myNumeric( a decimal(31,0), b decimal(31,31 ));
0 rows inserted/updated/deleted
ij> select abs(a) from myNumeric;
1
--------------------------------
ij> 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;
ERROR 42X80: VALUES clause must contain at least one element. Empty elements are not allowed.
ij> select -a from myNumeric;
1
--------------------------------
ij> select b from myNumeric;
B
----------------------------------
ij> select -b from myNumeric;
1
----------------------------------
ij> select abs(a), abs(b)from myNumeric;
1 |2
-------------------------------------------------------------------
ij> select abs(-a), abs(-b) from myNumeric;
1 |2
-------------------------------------------------------------------
ij> select -abs(a), -abs(b) from myNumeric;
1 |2
-------------------------------------------------------------------
ij> select abs(abs(-abs(-abs(a)))) from myNumeric;
1
--------------------------------
ij> SELECT ABSVAL(ABSVAL(-ABSVAL(-ABSVAL(A)))) FROM MYNUMERIC;
1
--------------------------------
ij> select distinct abs(a) from myNumeric;
1
--------------------------------
ij> -- 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;
1
--------------------------------
ij> drop table myNumeric;
0 rows inserted/updated/deleted
ij> -- End of Numeric test
-- Test some different statements, just in case
create table foo( a int );
0 rows inserted/updated/deleted
ij> insert into foo values ( abs( 1) );
1 row inserted/updated/deleted
ij> insert into foo values ( abs(-2) );
1 row inserted/updated/deleted
ij> insert into foo values (-abs(-3) );
1 row inserted/updated/deleted
ij> insert into foo values (-abs( 4) );
1 row inserted/updated/deleted
ij> insert into foo values ( -5 );
1 row inserted/updated/deleted
ij> insert into foo values ( -6 );
1 row inserted/updated/deleted
ij> insert into foo values ( -7 );
1 row inserted/updated/deleted
ij> autocommit off;
ij> prepare p1 as 'select a from foo';
ij> prepare p2 as 'select abs(a) from foo';
ij> prepare p3 as 'insert into foo select a*(-1) from foo';
ij> execute p1;
A
-----------
1
2
-3
-4
-5
-6
-7
ij> execute p2;
1
-----------
1
2
3
4
5
6
7
ij> execute p3;
7 rows inserted/updated/deleted
ij> execute p1;
A
-----------
1
2
-3
-4
-5
-6
-7
-1
-2
3
4
5
6
7
ij> insert into foo values( abs( 8 ) );
1 row inserted/updated/deleted
ij> insert into foo values( abs(-9 ) );
1 row inserted/updated/deleted
ij> insert into foo values(-abs(-10) );
1 row inserted/updated/deleted
ij> insert into foo values( abs( 11) );
1 row inserted/updated/deleted
ij> insert into foo values( -12 );
1 row inserted/updated/deleted
ij> execute p1;
A
-----------
1
2
-3
-4
-5
-6
-7
-1
-2
3
4
5
6
7
8
9
-10
11
-12
ij> execute p2;
1
-----------
1
2
3
4
5
6
7
1
2
3
4
5
6
7
8
9
10
11
12
ij> execute p3;
19 rows inserted/updated/deleted
ij> execute p1;
A
-----------
1
2
-3
-4
-5
-6
-7
-1
-2
3
4
5
6
7
8
9
-10
11
-12
-1
-2
3
4
5
6
7
1
2
-3
-4
-5
-6
-7
-8
-9
10
-11
12
ij> rollback;
ij> commit;
ij> autocommit on;
ij> insert into foo values( abs( 13) );
1 row inserted/updated/deleted
ij> insert into foo values( abs(-14) );
1 row inserted/updated/deleted
ij> insert into foo values(-abs(-15) );
1 row inserted/updated/deleted
ij> insert into foo values(-abs( 16) );
1 row inserted/updated/deleted
ij> insert into foo values( -17 );
1 row inserted/updated/deleted
ij> execute p1;
A
-----------
1
2
-3
-4
-5
-6
-7
13
14
-15
-16
-17
ij> execute p2;
1
-----------
1
2
3
4
5
6
7
13
14
15
16
17
ij> execute p3;
12 rows inserted/updated/deleted
ij> execute p1;
A
-----------
1
2
-3
-4
-5
-6
-7
13
14
-15
-16
-17
-1
-2
3
4
5
6
7
-13
-14
15
16
17
ij> select * from foo;
A
-----------
1
2
-3
-4
-5
-6
-7
13
14
-15
-16
-17
-1
-2
3
4
5
6
7
-13
-14
15
16
17
ij> drop table foo;
0 rows inserted/updated/deleted
ij> -- End of ABS/ABSVAL test. For all valid types. Un-escaped function.
-- abs is not a reserved word
create table abs( a int );
0 rows inserted/updated/deleted
ij> drop table abs;
0 rows inserted/updated/deleted
ij> -- This test EJBQL Absolute function. Resolve 3535
-- Begin of ABS test. For escape function.
-- Integer
-- Basic
-- beetle 5805 - support INT[EGER] built-in function
values{fn abs(INT(' 0') )};
1
-----------
0
ij> values{fn abs(INT('-0') )};
1
-----------
0
ij> values{fn abs(INT(' 1') )};
1
-----------
1
ij> values{fn abs(INT('-1') )};
1
-----------
1
ij> values{fn abs(INT(' 1000000') )};
1
-----------
1000000
ij> values{fn abs(INT('-1000000') )};
1
-----------
1000000
ij> values{fn abs(INT(' 2147483647') )};
1
-----------
2147483647
ij> values{fn abs(INT('-2147483648') + 1 )};
1
-----------
2147483647
ij> -- Error
values{fn abs(INT('-2147483648') )};
1
-----------
ERROR 22003: The resulting value is outside the range for the data type INTEGER.
ij> values{fn abs(INT(' 2147483647') + 1 )};
1
-----------
ERROR 22003: The resulting value is outside the range for the data type INTEGER.
ij> -- Smallint
-- Basic
-- beetle 5807 - support SMALLINT built-in function
values{fn abs( SMALLINT(' 0') )};
1
------
0
ij> values{fn abs( SMALLINT('-0') )};
1
------
0
ij> values{fn abs( SMALLINT(' 1') )};
1
------
1
ij> values{fn abs( SMALLINT('-1') )};
1
------
1
ij> values{fn abs( SMALLINT(' 10000') )};
1
------
10000
ij> values{fn abs( SMALLINT('-10000') )};
1
------
10000
ij> values{fn abs( SMALLINT(' 32767') )};
1
------
32767
ij> values{fn abs( SMALLINT('-32768') + 1 )};
1
-----------
32767
ij> values{fn abs(-SMALLINT('-32768') )};
1
------
ERROR 22003: The resulting value is outside the range for the data type SMALLINT.
ij> -- Error
values{fn abs(-SMALLINT(' 32768') )};
ERROR 22003: The resulting value is outside the range for the data type SHORT.
ij> values{fn abs( SMALLINT('-32768') )};
1
------
ERROR 22003: The resulting value is outside the range for the data type SMALLINT.
ij> -- Bigint
-- Basic
-- beetle 5809 - support BIGINT built-in function
values{fn abs( BIGINT(' 0') )};
1
--------------------
0
ij> values{fn abs( BIGINT('-0') )};
1
--------------------
0
ij> values{fn abs( BIGINT(' 1') )};
1
--------------------
1
ij> values{fn abs( BIGINT('-1') )};
1
--------------------
1
ij> values{fn abs( BIGINT(' 100000000000') )};
1
--------------------
100000000000
ij> values{fn abs( BIGINT('-100000000000') )};
1
--------------------
100000000000
ij> values{fn abs( BIGINT(' 9223372036854775807') )};
1
--------------------
9223372036854775807
ij> values{fn abs( BIGINT('-9223372036854775808') + 1 )};
1
--------------------
9223372036854775807
ij> -- Error
values{fn abs(-BIGINT('-9223372036854775808') )};
1
--------------------
ERROR 22003: The resulting value is outside the range for the data type BIGINT.
ij> values{fn abs( BIGINT('-9223372036854775808') )};
1
--------------------
ERROR 22003: The resulting value is outside the range for the data type BIGINT.
ij> -- Real
-- Basic
-- beetle 5806 - support REAL built-in function
values{fn abs( REAL( 0) )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 4, column 16.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{fn abs( REAL(-0) )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 16.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{fn abs( REAL( 1) )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 16.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{fn abs( REAL(-1) )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 16.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{fn abs( REAL( 1000000.001) )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 16.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{fn abs( REAL(-1000000.001) )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 16.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{fn abs( REAL( 3.402E+38) )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 16.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{fn abs( REAL(-3.402E+38) + 1 )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 16.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> -- Error
values{fn abs( REAL( 3.402E+38 * 2) )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 2, column 16.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{fn abs(-REAL( NaN) )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 16.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{fn abs( REAL( 1.40129846432481707e-45) )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 16.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{fn abs( REAL( 3.40282346638528860e+38) )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 16.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> -- Double Precision/Double
-- Basic
-- beetle 5803 - support DOUBLE_[PRECISION] built-in function
values{fn abs( DOUBLE( 0) )};
1
------------------------
0.0
ij> values{fn abs( DOUBLE(-0) )};
1
------------------------
0.0
ij> values{fn abs( DOUBLE( 1) )};
1
------------------------
1.0
ij> values{fn abs( DOUBLE(-1) )};
1
------------------------
1.0
ij> values{fn abs( DOUBLE( 1000000.001) )};
1
------------------------
1000000.001
ij> values{fn abs( DOUBLE(-1000000.001) )};
1
------------------------
1000000.001
ij> values{fn abs( DOUBLE(-1.79769E+308) )};
1
------------------------
1.79769E308
ij> values{fn abs( DOUBLE( 1.79769E+308) + 1 )};
1
------------------------
1.79769E308
ij> values{fn abs( DOUBLE( 2.225E-307 + 1) )};
1
------------------------
1.0
ij> -- Error
values{fn abs( DOUBLE( 1.79769E+308 * 2) )};
1
------------------------
ERROR 22003: The resulting value is outside the range for the data type DOUBLE.
ij> values{fn abs(-DOUBLE( NaN) )};
ERROR 42X04: Column 'NAN' is either not in any table in the FROM list or appears within a join specification and is outside the scope of the join specification or appears in a HAVING clause and is not in the GROUP BY list. If this is a CREATE or ALTER TABLE statement then 'NAN' is not a column in the target table.
ij> values{fn abs( DOUBLE( 4.9E-324) )};
1
------------------------
4.9E-324
ij> values{fn abs( DOUBLE( 1.7976931348623157E308) )};
1
------------------------
1.7976931348623157E308
ij> -- Decimal/Numeric
-- Basic
-- beetle 5802 - support DEC[IMAL] built-in function
values{ fn abs(DEC( 0) )};
ERROR 42X01: Syntax error: Encountered "DEC" at line 4, column 16.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{ fn abs(DEC(-0) )};
ERROR 42X01: Syntax error: Encountered "DEC" at line 1, column 16.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{ fn abs(DEC( 1) )};
ERROR 42X01: Syntax error: Encountered "DEC" at line 1, column 16.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{ fn abs(DEC(-1) )};
ERROR 42X01: Syntax error: Encountered "DEC" at line 1, column 16.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{ fn abs(DEC( 1000000000000) )};
ERROR 42X01: Syntax error: Encountered "DEC" at line 1, column 16.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{ fn abs(DEC(-1000000000000) )};
ERROR 42X01: Syntax error: Encountered "DEC" at line 1, column 16.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> -- More generic test
values{ fn abs( 0-1-.1 ) };
1
---------------
1.1
ij> values{ fn abs( -0-1.000000001 ) };
1
-----------------------
1.000000001
ij> VALUES{ FN ABS( 100-200-300 ) };
1
-----------
400
ij> -- Error
values{ fn abs('null') };
ERROR 42X25: The 'ABS/ABSVAL' function is not allowed on the 'CHAR' type.
ij> -- 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
-- Basic
create table myint( a int );
0 rows inserted/updated/deleted
ij> select abs(a) from myint;
1
-----------
ij> insert into myint values (null);
1 row inserted/updated/deleted
ij> select abs(a) from myint;
1
-----------
NULL
ij> autocommit off;
ij> values absval( 4 );
1
-----------
4
ij> values absval( -4 );
1
-----------
4
ij> values absval( 4.4 );
1
----
4.4
ij> values absval( -4.4 );
1
----
4.4
ij> values {fn abs( 4 )};
1
-----------
4
ij> values {fn abs( -4 )};
1
-----------
4
ij> values {fn abs( 4.4 )};
1
----
4.4
ij> values {fn abs( -4.4 )};
1
----
4.4
ij> values {fn abs( -4.44444444444444444444444 )};
1
--------------------------
4.44444444444444444444444
ij> autocommit on;
ij> drop table myint;
0 rows inserted/updated/deleted
ij> -- Using Strings in escape function
create table myStr( a varchar(10) );
0 rows inserted/updated/deleted
ij> insert into myStr values ( '123' );
1 row inserted/updated/deleted
ij> insert into myStr values ( '-123' );
1 row inserted/updated/deleted
ij> insert into myStr values ( '-12 ' );
1 row inserted/updated/deleted
ij> insert into myStr values ( ' -2 ' );
1 row inserted/updated/deleted
ij> insert into myStr values ( '1a3' );
1 row inserted/updated/deleted
ij> select * from myStr;
A
----------
123
-123
-12
-2
1a3
ij> select abs(a) from myStr;
ERROR 42X25: The 'ABS/ABSVAL' function is not allowed on the 'VARCHAR' type.
ij> select {fn abs(a)} from myStr;
ERROR 42X25: The 'ABS/ABSVAL' function is not allowed on the 'VARCHAR' type.
ij> drop table myStr;
0 rows inserted/updated/deleted
ij> -- End of ABSVAL test
-- This test EJBQL function, CONCAT. Resolve 3535
-- Begin of CONCAT test
-- Basic
values{ fn concat( 'hello', ' world' ) };
1
-----------
hello world
ij> VALUES{ FN CONCAT( 'HELLO', ' WORLD' ) };
1
-----------
HELLO WORLD
ij> values{ fn concat( '' , '' )};
1
---------------
ij> values{ fn concat( CHAR(''), CHAR('') ) };
1
---------------
ij> values{ fn concat( 45, 67 )};
ERROR 42846: Cannot convert types 'INTEGER' to 'VARCHAR'.
ij> values{ fn concat( '45', 67 )};
ERROR 42846: Cannot convert types 'INTEGER' to 'VARCHAR'.
ij> values{ fn concat( 45, '67' )};
ERROR 42846: Cannot convert types 'INTEGER' to 'VARCHAR'.
ij> values{ fn concat( CHAR('C'), CHAR('#') ) };
1
--
C#
ij> values{ fn concat( 'ABCDEFGHIJKLMNOPQRSTUVWXYZ`1234567890-=\ [];,./ \'' |',
'abcdefghijklmnopqrstuvwxyz~!@#$%^&*()_+|<>?:"{} '''''' ' ) };
1
--------------------------------------------------------------------------------------------------------------------
ABCDEFGHIJKLMNOPQRSTUVWXYZ`1234567890-=\ [];,./ \' |abcdefghijklmnopqrstuvwxyz~!@#$%^&*()_+|<>?:"{} '''
ij> create table concat ( a int );
0 rows inserted/updated/deleted
ij> insert into concat values (1);
1 row inserted/updated/deleted
ij> select * from CONCAT;
A
-----------
1
ij> create table myconcat( a varchar(10) default null, b varchar(10) default null, c int);
0 rows inserted/updated/deleted
ij> insert into myconcat (c) values( 1 );
1 row inserted/updated/deleted
ij> insert into myconcat (c) values( 2 );
1 row inserted/updated/deleted
ij> insert into myconcat (a) values( 'hello' );
1 row inserted/updated/deleted
ij> insert into myconcat (b) values( 'world' );
1 row inserted/updated/deleted
ij> insert into myconcat (a,b) values( 'hello', 'world' );
1 row inserted/updated/deleted
ij> select * from myconcat;
A |B |C
---------------------------------
NULL |NULL |1
NULL |NULL |2
hello |NULL |NULL
NULL |world |NULL
hello |world |NULL
ij> select { fn concat( a, b ) } from myconcat;
1
--------------------
NULL
NULL
NULL
NULL
helloworld
ij> drop table concat;
0 rows inserted/updated/deleted
ij> drop table myconcat;
0 rows inserted/updated/deleted
ij> -- End of CONCAT test
-- This test the EJBQL function, LOCATE. Resolve 3535
-- LOCATE( string1, string2[, start] ) --- 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. Position1 is the first
-- character in string2.
-- Begin of LOCATE test
-- Basic
-- 2 args
values{ fn locate( 'hello', 'hello' ) };
1
-----------
1
ij> values{ fn locate( 'hello', 'hellohello' ) };
1
-----------
1
ij> values{ fn locate( 'hello', 'helloworld' ) };
1
-----------
1
ij> values{ fn locate( 'hello', 'h?hello' ) };
1
-----------
3
ij> values{ fn locate( 'hello', 'match me, hello now!' ) };
1
-----------
11
ij> values{ fn locate( '?', '?' ) };
1
-----------
1
ij> values{ fn locate( '\', '\\') };
1
-----------
1
ij> values{ fn locate( '/', '//') };
1
-----------
1
ij> values{ fn locate( '\\', '\') };
1
-----------
0
ij> values{ fn locate( '//', '/') };
1
-----------
0
ij> values{ fn locate( '', 'test' ) };
1
-----------
1
ij> values{ fn locate( '', '' ) };
1
-----------
1
ij> values{ fn locate( 'test', '' ) };
1
-----------
0
ij> -- 3 args
values{ fn locate( 'hello', 'hello',-1 ) };
1
-----------
ERROR 22014: The start position for LOCATE is invalid; it must be a positive integer. The index to start the search from is '-1'. The string to search for is 'hello'. The string to search from is 'hello'.
ij> values{ fn locate( 'hello', 'hello',-0 ) };
1
-----------
ERROR 22014: The start position for LOCATE is invalid; it must be a positive integer. The index to start the search from is '0'. The string to search for is 'hello'. The string to search from is 'hello'.
ij> values{ fn locate( 'hello', 'hello', 0 ) };
1
-----------
ERROR 22014: The start position for LOCATE is invalid; it must be a positive integer. The index to start the search from is '0'. The string to search for is 'hello'. The string to search from is 'hello'.
ij> values{ fn locate( 'hello', 'hello', 1 ) };
1
-----------
1
ij> values{ fn locate( 'hello', 'hello', 2 ) };
1
-----------
0
ij> values{ fn locate( 'hello', 'hello', 5 ) };
1
-----------
0
ij> values{ fn locate( 'hello', 'hello', 9 ) };
1
-----------
0
ij> values{ fn locate( 'hello', 'hellohello', 0 ) };
1
-----------
ERROR 22014: The start position for LOCATE is invalid; it must be a positive integer. The index to start the search from is '0'. The string to search for is 'hello'. The string to search from is 'hellohello'.
ij> values{ fn locate( 'hello', 'hellohello', 1 ) };
1
-----------
1
ij> values{ fn locate( 'hello', 'hellohello', 2 ) };
1
-----------
6
ij> values{ fn locate( 'hello', 'hellohello', 5 ) };
1
-----------
6
ij> values{ fn locate( 'hello', 'hellohello', 6 ) };
1
-----------
6
ij> values{ fn locate( 'hello', 'hellohello', 7 ) };
1
-----------
0
ij> values{ fn locate( 'hello', 'h?hello', 1 ) };
1
-----------
3
ij> values{ fn locate( 'hello', 'h?hello', 2 ) };
1
-----------
3
ij> values{ fn locate( 'hello', 'h?hello', 3 ) };
1
-----------
3
ij> values{ fn locate( 'hello', 'h?hello', 4 ) };
1
-----------
0
ij> values{ fn locate( 'hello', 'match me, hello now!', 7 ) };
1
-----------
11
ij> values{ fn locate( 'hello', 'match me, hello now!', 15 ) };
1
-----------
0
ij> values{ fn locate( '?', '?',-1 ) };
1
-----------
ERROR 22014: The start position for LOCATE is invalid; it must be a positive integer. The index to start the search from is '-1'. The string to search for is '?'. The string to search from is '?'.
ij> values{ fn locate( '?', '?',-0 ) };
1
-----------
ERROR 22014: The start position for LOCATE is invalid; it must be a positive integer. The index to start the search from is '0'. The string to search for is '?'. The string to search from is '?'.
ij> values{ fn locate( '?', '?', 0 ) };
1
-----------
ERROR 22014: The start position for LOCATE is invalid; it must be a positive integer. The index to start the search from is '0'. The string to search for is '?'. The string to search from is '?'.
ij> values{ fn locate( '?', '?', 1 ) };
1
-----------
1
ij> values{ fn locate( '?', '?', 2 ) };
1
-----------
0
ij> values{ fn locate( '\', '\\',0) };
1
-----------
ERROR 22014: The start position for LOCATE is invalid; it must be a positive integer. The index to start the search from is '0'. The string to search for is '\'. The string to search from is '\\'.
ij> values{ fn locate( '\', '\\',1) };
1
-----------
1
ij> values{ fn locate( '\', '\\',2) };
1
-----------
2
ij> values{ fn locate( '\', '\\',3) };
1
-----------
0
ij> values{ fn locate( '/', '//',0) };
1
-----------
ERROR 22014: The start position for LOCATE is invalid; it must be a positive integer. The index to start the search from is '0'. The string to search for is '/'. The string to search from is '//'.
ij> values{ fn locate( '/', '//',1) };
1
-----------
1
ij> values{ fn locate( '/', '//',2) };
1
-----------
2
ij> values{ fn locate( '/', '//',3) };
1
-----------
0
ij> values{ fn locate( '\\', '\',1) };
1
-----------
0
ij> values{ fn locate( '//', '/',1) };
1
-----------
0
ij> values{ fn locate( '', 'test',1) };
1
-----------
1
ij> values{ fn locate( '', 'test',2) };
1
-----------
2
ij> values{ fn locate( '', 'test',3) };
1
-----------
3
ij> values{ fn locate( '', 'test',4) };
1
-----------
4
ij> values{ fn locate( '', 'test',5) };
1
-----------
5
ij> values{ fn locate( '', '' ,1) };
1
-----------
1
ij> values{ fn locate( 'test', '',1) };
1
-----------
0
ij> values{ fn locate( 'test', '',2) };
1
-----------
0
ij> values{ fn locate( 'test', '',3) };
1
-----------
0
ij> values{ fn locate( 'test', '',4) };
1
-----------
0
ij> values{ fn locate( 'hello', 1 ) };
ERROR 42884: No authorized routine named 'LOCATE' of type 'FUNCTION' having compatible arguments was found.
ij> values{ fn locate( 1, 'hello' ) };
ERROR 42884: No authorized routine named 'LOCATE' of type 'FUNCTION' having compatible arguments was found.
ij> values{ fn locate( 'hello', 'hello', 'hello' ) };
ERROR 42884: No authorized routine named 'LOCATE' of type 'FUNCTION' having compatible arguments was found.
ij> values{ fn locate( 'hello', 'hello', 1.99999999999 ) };
ERROR 42884: No authorized routine named 'LOCATE' of type 'FUNCTION' having compatible arguments was found.
ij> values{ fn locate( 1, 'hel1lo' ) };
ERROR 42884: No authorized routine named 'LOCATE' of type 'FUNCTION' having compatible arguments was found.
ij> values{ fn locate( 1, 1 ) };
ERROR 42884: No authorized routine named 'LOCATE' of type 'FUNCTION' having compatible arguments was found.
ij> values{ fn locate( 1, 1, '1' ) };
ERROR 42884: No authorized routine named 'LOCATE' of type 'FUNCTION' having compatible arguments was found.
ij> values{ fn locate( '1', 1, 1 ) };
ERROR 42884: No authorized routine named 'LOCATE' of type 'FUNCTION' having compatible arguments was found.
ij> values{ fn locate( '1', '1', '1' ) };
ERROR 42884: No authorized routine named 'LOCATE' of type 'FUNCTION' having compatible arguments was found.
ij> -- End of EJBQL function test for LOCATE.
-- This test the EJBQL function, LOCATE. Resolve 3535
-- LOCATE( string1, string2[, start] ) --- 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. Position1 is the first
-- character in string2.
-- Begin of LOCATE test
-- Basic
create table locate( a varchar(20) );
0 rows inserted/updated/deleted
ij> -- create table myChar( a char(10), b char(20), c int default '1' );
create table myChar( a char(10), b char(20), c int );
0 rows inserted/updated/deleted
ij> insert into myChar (a, b) values( '1234567890', 'abcde1234567890fghij' );
1 row inserted/updated/deleted
ij> insert into myChar (a, b) values( 'abcdefghij', 'abcdefghij1234567890' );
1 row inserted/updated/deleted
ij> insert into myChar (a, b) values( 'abcdefghij', '1234567890abcdefghij' );
1 row inserted/updated/deleted
ij> insert into myChar (a, b) values( 'abcdefghij', '1234567890!@#$%^&*()' );
1 row inserted/updated/deleted
ij> insert into myChar values( '1234567890', 'abcde1234567890fghij', 2 );
1 row inserted/updated/deleted
ij> insert into myChar values( 'abcdefghij', 'abcdefghij1234567890', 1 );
1 row inserted/updated/deleted
ij> insert into myChar values( 'abcdefghij', '1234567890abcdefghij', 15 );
1 row inserted/updated/deleted
ij> insert into myChar (c) values( 0 );
1 row inserted/updated/deleted
ij> insert into myChar (c) values( 1 );
1 row inserted/updated/deleted
ij> insert into myChar (c) values( 2 );
1 row inserted/updated/deleted
ij> insert into myChar (a) values( 'hello' );
1 row inserted/updated/deleted
ij> insert into myChar (b) values( 'hello' );
1 row inserted/updated/deleted
ij> insert into myChar values( 'abcdefghij', '1234567890!@#$%^&*()', 21 );
1 row inserted/updated/deleted
ij> select a, b, c from myChar;
A |B |C
-------------------------------------------
1234567890|abcde1234567890fghij|NULL
abcdefghij|abcdefghij1234567890|NULL
abcdefghij|1234567890abcdefghij|NULL
abcdefghij|1234567890!@#$%^&*()|NULL
1234567890|abcde1234567890fghij|2
abcdefghij|abcdefghij1234567890|1
abcdefghij|1234567890abcdefghij|15
NULL |NULL |0
NULL |NULL |1
NULL |NULL |2
hello |NULL |NULL
NULL |hello |NULL
abcdefghij|1234567890!@#$%^&*()|21
ij> select locate(a, b) from myChar;
1
-----------
6
1
11
0
6
1
11
NULL
NULL
NULL
NULL
NULL
0
ij> select locate(a, b, c) from myChar;
1
-----------
6
1
11
0
6
1
0
NULL
NULL
NULL
NULL
NULL
0
ij> drop table myChar;
0 rows inserted/updated/deleted
ij> create table myLongVarChar( a long varchar, b long varchar, c int);
0 rows inserted/updated/deleted
ij> insert into myLongVarChar (a, b) values( '1234567890', 'abcde1234567890fghij' );
1 row inserted/updated/deleted
ij> insert into myLongVarChar (a, b) values( 'abcdefghij', 'abcdefghij1234567890' );
1 row inserted/updated/deleted
ij> insert into myLongVarChar (a, b) values( 'abcdefghij', '1234567890abcdefghij' );
1 row inserted/updated/deleted
ij> insert into myLongVarChar (a, b) values( 'abcdefghij', '1234567890!@#$%^&*()' );
1 row inserted/updated/deleted
ij> insert into myLongVarChar (a, b) values( 'abcde', 'abcde' );
1 row inserted/updated/deleted
ij> insert into myLongVarChar (a, b) values( 'abcde', 'abcd' );
1 row inserted/updated/deleted
ij> insert into myLongVarChar (a, b) values( '', 'abcde' );
1 row inserted/updated/deleted
ij> insert into myLongVarChar (a, b) values( 'abcde', null );
1 row inserted/updated/deleted
ij> insert into myLongVarChar (a, b) values( null, 'abcde' );
1 row inserted/updated/deleted
ij> insert into myLongVarChar values( '1234567890', 'abcde1234567890fghij', 2 );
1 row inserted/updated/deleted
ij> insert into myLongVarChar values( 'abcdefghij', 'abcdefghij1234567890', 1 );
1 row inserted/updated/deleted
ij> insert into myLongVarChar values( 'abcdefghij', '1234567890abcdefghij', 15 );
1 row inserted/updated/deleted
ij> insert into myLongVarChar values( 'abcde', 'abcde', 1 );
1 row inserted/updated/deleted
ij> insert into myLongVarChar values( 'abcde', 'abcd', 1 );
1 row inserted/updated/deleted
ij> insert into myLongVarChar values( '', 'abcde', 2 );
1 row inserted/updated/deleted
ij> insert into myLongVarChar values( 'abcde', null, 1 );
1 row inserted/updated/deleted
ij> insert into myLongVarChar values( null, 'abcde', 1 );
1 row inserted/updated/deleted
ij> insert into myLongVarChar (c) values( 0 );
1 row inserted/updated/deleted
ij> insert into myLongVarChar (c) values( 1 );
1 row inserted/updated/deleted
ij> insert into myLongVarChar (c) values( 2 );
1 row inserted/updated/deleted
ij> insert into myLongVarChar (a) values( 'hello' );
1 row inserted/updated/deleted
ij> insert into myLongVarChar (b) values( 'hello' );
1 row inserted/updated/deleted
ij> insert into myLongVarChar values( 'abcdefghij', '1234567890!@#$%^&*()', 21 );
1 row inserted/updated/deleted
ij> select a, b, c from myLongVarChar;
A |B |C
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1234567890 |abcde1234567890fghij |NULL
abcdefghij |abcdefghij1234567890 |NULL
abcdefghij |1234567890abcdefghij |NULL
abcdefghij |1234567890!@#$%^&*() |NULL
abcde |abcde |NULL
abcde |abcd |NULL
|abcde |NULL
abcde |NULL |NULL
NULL |abcde |NULL
1234567890 |abcde1234567890fghij |2
abcdefghij |abcdefghij1234567890 |1
abcdefghij |1234567890abcdefghij |15
abcde |abcde |1
abcde |abcd |1
|abcde |2
abcde |NULL |1
NULL |abcde |1
NULL |NULL |0
NULL |NULL |1
NULL |NULL |2
hello |NULL |NULL
NULL |hello |NULL
abcdefghij |1234567890!@#$%^&*() |21
ij> select locate(a, b) from myLongVarChar;
1
-----------
6
1
11
0
1
0
1
NULL
NULL
6
1
11
1
0
1
NULL
NULL
NULL
NULL
NULL
NULL
NULL
0
ij> select locate(a, b, c) from myLongVarChar;
1
-----------
6
1
11
0
1
0
1
NULL
NULL
6
1
0
1
0
2
NULL
NULL
NULL
NULL
NULL
NULL
NULL
0
ij> drop table myLongVarChar;
0 rows inserted/updated/deleted
ij> create table myVarChar( a varchar(10), b varchar(20), c int );
0 rows inserted/updated/deleted
ij> insert into myVarChar (a, b) values( '1234567890', 'abcde1234567890fghij' );
1 row inserted/updated/deleted
ij> insert into myVarChar (a, b) values( 'abcdefghij', 'abcdefghij1234567890' );
1 row inserted/updated/deleted
ij> insert into myVarChar (a, b) values( 'abcdefghij', '1234567890abcdefghij' );
1 row inserted/updated/deleted
ij> insert into myVarChar (a, b) values( 'abcdefghij', '1234567890!@#$%^&*()' );
1 row inserted/updated/deleted
ij> insert into myVarChar (a, b) values( 'abcde', 'abcde' );
1 row inserted/updated/deleted
ij> insert into myVarChar (a, b) values( 'abcde', 'abcd' );
1 row inserted/updated/deleted
ij> insert into myVarChar (a, b) values( '', 'abcde' );
1 row inserted/updated/deleted
ij> insert into myVarChar (a, b) values( 'abcde', null );
1 row inserted/updated/deleted
ij> insert into myVarChar (a, b) values( null, 'abcde' );
1 row inserted/updated/deleted
ij> insert into myVarChar values( '1234567890', 'abcde1234567890fghij', 2 );
1 row inserted/updated/deleted
ij> insert into myVarChar values( 'abcdefghij', 'abcdefghij1234567890', 1 );
1 row inserted/updated/deleted
ij> insert into myVarChar values( 'abcdefghij', '1234567890abcdefghij', 15 );
1 row inserted/updated/deleted
ij> insert into myVarChar values( 'abcde', 'abcde', 1 );
1 row inserted/updated/deleted
ij> insert into myVarChar values( 'abcde', 'abcd', 1 );
1 row inserted/updated/deleted
ij> insert into myVarChar values( '', 'abcde', 2 );
1 row inserted/updated/deleted
ij> insert into myVarChar values( 'abcde', null, 1 );
1 row inserted/updated/deleted
ij> insert into myVarChar values( null, 'abcde', 1 );
1 row inserted/updated/deleted
ij> insert into myVarChar (c) values( 0 );
1 row inserted/updated/deleted
ij> insert into myVarChar (c) values( 1 );
1 row inserted/updated/deleted
ij> insert into myVarChar (c) values( 2 );
1 row inserted/updated/deleted
ij> insert into myVarChar (a) values( 'hello' );
1 row inserted/updated/deleted
ij> insert into myVarChar (b) values( 'hello' );
1 row inserted/updated/deleted
ij> insert into myVarChar values( 'abcdefghij', '1234567890!@#$%^&*()', 21 );
1 row inserted/updated/deleted
ij> select a, b, c from myVarChar;
A |B |C
-------------------------------------------
1234567890|abcde1234567890fghij|NULL
abcdefghij|abcdefghij1234567890|NULL
abcdefghij|1234567890abcdefghij|NULL
abcdefghij|1234567890!@#$%^&*()|NULL
abcde |abcde |NULL
abcde |abcd |NULL
|abcde |NULL
abcde |NULL |NULL
NULL |abcde |NULL
1234567890|abcde1234567890fghij|2
abcdefghij|abcdefghij1234567890|1
abcdefghij|1234567890abcdefghij|15
abcde |abcde |1
abcde |abcd |1
|abcde |2
abcde |NULL |1
NULL |abcde |1
NULL |NULL |0
NULL |NULL |1
NULL |NULL |2
hello |NULL |NULL
NULL |hello |NULL
abcdefghij|1234567890!@#$%^&*()|21
ij> select locate(a, b) from myVarChar;
1
-----------
6
1
11
0
1
0
1
NULL
NULL
6
1
11
1
0
1
NULL
NULL
NULL
NULL
NULL
NULL
NULL
0
ij> select locate(a, b, c) from myVarChar;
1
-----------
6
1
11
0
1
0
1
NULL
NULL
6
1
0
1
0
2
NULL
NULL
NULL
NULL
NULL
NULL
NULL
0
ij> drop table myVarChar;
0 rows inserted/updated/deleted
ij> -- Negative cases. To match DB2 behaviour
create table t1 (dt date, tm time, ts timestamp);
0 rows inserted/updated/deleted
ij> insert into t1 values (current_date, current_time, current_timestamp);
1 row inserted/updated/deleted
ij> select locate (dt, ts) from t1;
ERROR 42884: No authorized routine named 'LOCATE' of type 'FUNCTION' having compatible arguments was found.
ij> select locate (tm, ts) from t1;
ERROR 42884: No authorized routine named 'LOCATE' of type 'FUNCTION' having compatible arguments was found.
ij> select locate (ts, ts) from t1;
ERROR 42884: No authorized routine named 'LOCATE' of type 'FUNCTION' having compatible arguments was found.
ij> drop table t1;
0 rows inserted/updated/deleted
ij> values locate('abc', 'dkabc', 1.4);
ERROR 42884: No authorized routine named 'LOCATE' of type 'FUNCTION' having compatible arguments was found.
ij> values locate('c', 'abcdedf', cast(1 as decimal(2,0)));
ERROR 42884: No authorized routine named 'LOCATE' of type 'FUNCTION' having compatible arguments was found.
ij> -- =========================================================================
-- These test cases for national character types will fail until
-- until a future work around is implemented
-- =========================================================================
create table mynChar( a nchar(10), b nchar(20), c int );
ERROR 0A000: Feature not implemented: NATIONAL CHAR.
ij> insert into mynChar values( '1234567890', 'abcde1234567890fghij' );
ERROR 42X05: Table/View 'MYNCHAR' does not exist.
ij> insert into mynChar values( 'abcdefghij', 'abcdefghij1234567890' );
ERROR 42X05: Table/View 'MYNCHAR' does not exist.
ij> insert into mynChar values( 'abcdefghij', '1234567890abcdefghij' );
ERROR 42X05: Table/View 'MYNCHAR' does not exist.
ij> insert into mynChar values( 'abcdefghij', '1234567890!@#$%^&*()' );
ERROR 42X05: Table/View 'MYNCHAR' does not exist.
ij> insert into mynChar values( '1234567890', 'abcde1234567890fghij', 2 );
ERROR 42X05: Table/View 'MYNCHAR' does not exist.
ij> insert into mynChar values( 'abcdefghij', 'abcdefghij1234567890', 1 );
ERROR 42X05: Table/View 'MYNCHAR' does not exist.
ij> insert into mynChar values( 'abcdefghij', '1234567890abcdefghij', 15 );
ERROR 42X05: Table/View 'MYNCHAR' does not exist.
ij> insert into mynChar (c) values( 0 );
ERROR 42X05: Table/View 'MYNCHAR' does not exist.
ij> insert into mynChar (c) values( 1 );
ERROR 42X05: Table/View 'MYNCHAR' does not exist.
ij> insert into mynChar (c) values( 2 );
ERROR 42X05: Table/View 'MYNCHAR' does not exist.
ij> insert into mynChar (a) values( 'hello' );
ERROR 42X05: Table/View 'MYNCHAR' does not exist.
ij> insert into mynChar (b) values( 'hello' );
ERROR 42X05: Table/View 'MYNCHAR' does not exist.
ij> insert into mynChar values( 'abcdefghij', '1234567890!@#$%^&*()', 21 );
ERROR 42X05: Table/View 'MYNCHAR' does not exist.
ij> select a, b, c from mynChar;
ERROR 42X05: Table/View 'MYNCHAR' does not exist.
ij> select locate(a, b) from mynChar;
ERROR 42X05: Table/View 'MYNCHAR' does not exist.
ij> select locate(a, b, c) from mynChar;
ERROR 42X05: Table/View 'MYNCHAR' does not exist.
ij> drop table mynChar;
ERROR 42Y55: 'DROP TABLE' cannot be performed on 'MYNCHAR' because it does not exist.
ij> create table myLongnVarChar( a long nvarchar, b long nvarchar, c int );
ERROR 0A000: Feature not implemented: LONG NVARCHAR.
ij> insert into myLongnVarChar values( '1234567890', 'abcde1234567890fghij' );
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> insert into myLongnVarChar values( 'abcdefghij', 'abcdefghij1234567890' );
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> insert into myLongnVarChar values( 'abcdefghij', '1234567890abcdefghij' );
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> insert into myLongnVarChar values( 'abcdefghij', '1234567890!@#$%^&*()' );
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> insert into myLongnVarChar values( 'abcde', 'abcde' );
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> insert into myLongnVarChar values( 'abcde', 'abcd' );
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> insert into myLongnVarChar values( '', 'abcde' );
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> insert into myLongnVarChar values( 'abcde', null );
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> insert into myLongnVarChar values( null, 'abcde' );
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> insert into myLongnVarChar values( '1234567890', 'abcde1234567890fghij', 2 );
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> insert into myLongnVarChar values( 'abcdefghij', 'abcdefghij1234567890', 1 );
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> insert into myLongnVarChar values( 'abcdefghij', '1234567890abcdefghij', 15 );
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> insert into myLongnVarChar values( 'abcde', 'abcde', 1 );
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> insert into myLongnVarChar values( 'abcde', 'abcd', 1 );
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> insert into myLongnVarChar values( '', 'abcde', 2 );
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> insert into myLongnVarChar values( 'abcde', null, 1 );
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> insert into myLongnVarChar values( null, 'abcde', 1 );
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> insert into myLongnVarChar (c) values( 0 );
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> insert into myLongnVarChar (c) values( 1 );
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> insert into myLongnVarChar (c) values( 2 );
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> insert into myLongnVarChar (a) values( 'hello' );
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> insert into myLongnVarChar (b) values( 'hello' );
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> insert into myLongnVarChar values( 'abcdefghij', '1234567890!@#$%^&*()', 21 );
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> select a, b, c from myLongnVarChar;
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> select locate(a, b) from myLongnVarChar;
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> select locate(a, b, c) from myLongnVarChar;
ERROR 42X05: Table/View 'MYLONGNVARCHAR' does not exist.
ij> drop table myLongnVarChar;
ERROR 42Y55: 'DROP TABLE' cannot be performed on 'MYLONGNVARCHAR' because it does not exist.
ij> create table mynVarChar( a nvarchar(10), b nvarchar(20), c int );
ERROR 0A000: Feature not implemented: NATIONAL CHAR VARYING.
ij> insert into mynVarChar values( '1234567890', 'abcde1234567890fghij' );
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> insert into mynVarChar values( 'abcdefghij', 'abcdefghij1234567890' );
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> insert into mynVarChar values( 'abcdefghij', '1234567890abcdefghij' );
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> insert into mynVarChar values( 'abcdefghij', '1234567890!@#$%^&*()' );
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> insert into mynVarChar values( 'abcde', 'abcde' );
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> insert into mynVarChar values( 'abcde', 'abcd' );
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> insert into mynVarChar values( '', 'abcde' );
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> insert into mynVarChar values( 'abcde', null );
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> insert into mynVarChar values( null, 'abcde' );
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> insert into mynVarChar values( '1234567890', 'abcde1234567890fghij', 2 );
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> insert into mynVarChar values( 'abcdefghij', 'abcdefghij1234567890', 1 );
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> insert into mynVarChar values( 'abcdefghij', '1234567890abcdefghij', 15 );
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> insert into mynVarChar values( 'abcde', 'abcde', 1 );
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> insert into mynVarChar values( 'abcde', 'abcd', 1 );
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> insert into mynVarChar values( '', 'abcde', 2 );
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> insert into mynVarChar values( 'abcde', null, 1 );
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> insert into mynVarChar values( null, 'abcde', 1 );
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> insert into mynVarChar (c) values( 0 );
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> insert into mynVarChar (c) values( 1 );
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> insert into mynVarChar (c) values( 2 );
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> insert into mynVarChar (a) values( 'hello' );
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> insert into mynVarChar (b) values( 'hello' );
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> insert into mynVarChar values( 'abcdefghij', '1234567890!@#$%^&*()', 21 );
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> select a, b, c from mynVarChar;
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> select locate(a, b) from mynVarChar;
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> select locate(a, b, c) from mynVarChar;
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> create table myMixed( a char(10), b long nvarchar, c int );
ERROR 0A000: Feature not implemented: LONG NVARCHAR.
ij> insert into myMixed values( '1234567890', 'abcde1234567890fghij' );
ERROR 42X05: Table/View 'MYMIXED' does not exist.
ij> insert into myMixed values( 'abcdefghij', 'abcdefghij1234567890' );
ERROR 42X05: Table/View 'MYMIXED' does not exist.
ij> insert into myMixed values( 'abcdefghij', '1234567890abcdefghij' );
ERROR 42X05: Table/View 'MYMIXED' does not exist.
ij> insert into myMixed values( 'abcdefghij', '1234567890!@#$%^&*()' );
ERROR 42X05: Table/View 'MYMIXED' does not exist.
ij> insert into myMixed values( '1234567890', 'abcde1234567890fghij', 2 );
ERROR 42X05: Table/View 'MYMIXED' does not exist.
ij> insert into myMixed values( 'abcdefghij', 'abcdefghij1234567890', 1 );
ERROR 42X05: Table/View 'MYMIXED' does not exist.
ij> insert into myMixed values( 'abcdefghij', '1234567890abcdefghij', 15 );
ERROR 42X05: Table/View 'MYMIXED' does not exist.
ij> insert into myMixed (c) values( 0 );
ERROR 42X05: Table/View 'MYMIXED' does not exist.
ij> insert into myMixed (c) values( 1 );
ERROR 42X05: Table/View 'MYMIXED' does not exist.
ij> insert into myMixed (c) values( 2 );
ERROR 42X05: Table/View 'MYMIXED' does not exist.
ij> insert into myMixed (a) values( 'hello' );
ERROR 42X05: Table/View 'MYMIXED' does not exist.
ij> insert into myMixed (b) values( 'hello' );
ERROR 42X05: Table/View 'MYMIXED' does not exist.
ij> insert into myMixed values( 'abcdefghij', '1234567890!@#$%^&*()', 21 );
ERROR 42X05: Table/View 'MYMIXED' does not exist.
ij> select a, b, c from myMixed;
ERROR 42X05: Table/View 'MYMIXED' does not exist.
ij> select locate(a, b) from myMixed;
ERROR 42X05: Table/View 'MYMIXED' does not exist.
ij> select locate(a, b, c) from myMixed;
ERROR 42X05: Table/View 'MYMIXED' does not exist.
ij> drop table myMixed;
ERROR 42Y55: 'DROP TABLE' cannot be performed on 'MYMIXED' because it does not exist.
ij> create table foo( a int );
0 rows inserted/updated/deleted
ij> insert into foo select locate(a, b) from mynVarChar;
ERROR 42X05: Table/View 'MYNVARCHAR' does not exist.
ij> insert into foo values( {fn locate('hello', 'hello')} );
1 row inserted/updated/deleted
ij> select * from foo;
A
-----------
1
ij> drop table foo;
0 rows inserted/updated/deleted
ij> drop table mynVarChar;
ERROR 42Y55: 'DROP TABLE' cannot be performed on 'MYNVARCHAR' because it does not exist.
ij> -- =========================================================================
-- Other types
create table myBigInt( a bigint, b bigint );
0 rows inserted/updated/deleted
ij> insert into myBigInt values( 1234, 1234 );
1 row inserted/updated/deleted
ij> insert into myBigInt values( 4321, 1234 );
1 row inserted/updated/deleted
ij> select locate(a, b) from myBigInt;
ERROR 42884: No authorized routine named 'LOCATE' of type 'FUNCTION' having compatible arguments was found.
ij> drop table myBigInt;
0 rows inserted/updated/deleted
ij> create table myBit( a char for bit data, b char for bit data );
0 rows inserted/updated/deleted
ij> insert into myBit values( X'40', X'40' );
1 row inserted/updated/deleted
ij> insert into myBit values( X'01', X'40' );
1 row inserted/updated/deleted
ij> select locate(a, b) from myBit;
ERROR 42884: No authorized routine named 'LOCATE' of type 'FUNCTION' having compatible arguments was found.
ij> drop table myBit;
0 rows inserted/updated/deleted
ij> -- bug 5794 - LOCATE built-in function is not db2 udb compatible
create table myDate( a date, b date );
0 rows inserted/updated/deleted
ij> insert into myDate values( date('1970-01-08'), date('1970-01-08') );
1 row inserted/updated/deleted
ij> insert into myDate values( date('1979-08-30'), date('1978-07-28') );
1 row inserted/updated/deleted
ij> select locate(a, b) from myDate;
ERROR 42884: No authorized routine named 'LOCATE' of type 'FUNCTION' having compatible arguments was found.
ij> drop table myDate;
0 rows inserted/updated/deleted
ij> create table myDecimal( a decimal, b decimal );
0 rows inserted/updated/deleted
ij> insert into myDecimal values( 2.2, 2.2 );
1 row inserted/updated/deleted
ij> insert into myDecimal values( 12.23, 3423 );
1 row inserted/updated/deleted
ij> select locate(a, b) from myDecimal;
ERROR 42884: No authorized routine named 'LOCATE' of type 'FUNCTION' having compatible arguments was found.
ij> drop table myDecimal;
0 rows inserted/updated/deleted
ij> create table myDouble( a double precision, b double precision );
0 rows inserted/updated/deleted
ij> insert into myDouble values( 2.2, 2.2 );
1 row inserted/updated/deleted
ij> insert into myDouble values( 12.23, 3423 );
1 row inserted/updated/deleted
ij> select locate(a, b) from myDouble;
ERROR 42884: No authorized routine named 'LOCATE' of type 'FUNCTION' having compatible arguments was found.
ij> drop table myDouble;
0 rows inserted/updated/deleted
ij> create table myInteger(a integer, b integer );
0 rows inserted/updated/deleted
ij> insert into myInteger values( 2, 2 );
1 row inserted/updated/deleted
ij> insert into myInteger values( 123, 3423 );
1 row inserted/updated/deleted
ij> select locate(a, b) from myInteger;
ERROR 42884: No authorized routine named 'LOCATE' of type 'FUNCTION' having compatible arguments was found.
ij> drop table myInteger;
0 rows inserted/updated/deleted
ij> create table mylongvarbinary( a long varchar for bit data, b long varchar for bit data );
0 rows inserted/updated/deleted
ij> select locate(a, b) from mylongvarbinary;
ERROR 42884: No authorized routine named 'LOCATE' of type 'FUNCTION' having compatible arguments was found.
ij> drop table mylongvarbinary;
0 rows inserted/updated/deleted
ij> -- bug 5794 - LOCATE built-in function is not db2 udb compatible
create table mytime( a time, b time );
0 rows inserted/updated/deleted
ij> insert into mytime values( time('10:00:00'), time('10:00:00') );
1 row inserted/updated/deleted
ij> insert into mytime values( time('10:00:00'), time('11:00:00') );
1 row inserted/updated/deleted
ij> select locate(a, b) from mytime;
ERROR 42884: No authorized routine named 'LOCATE' of type 'FUNCTION' having compatible arguments was found.
ij> drop table mytime;
0 rows inserted/updated/deleted
ij> -- bug 5794 - LOCATE built-in function is not db2 udb compatible
create table mytimestamp( a timestamp, b timestamp );
0 rows inserted/updated/deleted
ij> insert into mytimestamp values( timestamp('1997-01-01 03:03:03'), timestamp('1997-01-01 03:03:03' ));
1 row inserted/updated/deleted
ij> insert into mytimestamp values( timestamp('1997-01-01 03:03:03'), timestamp('1997-01-01 04:03:03' ));
1 row inserted/updated/deleted
ij> select locate(a, b) from mytimestamp;
ERROR 42884: No authorized routine named 'LOCATE' of type 'FUNCTION' having compatible arguments was found.
ij> drop table mytimestamp;
0 rows inserted/updated/deleted
ij> -- End of ejbql_locate2.sql test
-- This test the EJBQL function, LOCATE. Resolve 3535
-- LOCATE( string1, string2[, start] ) --- 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. Position1 is the first
-- character in string2.
-- Begin of LOCATE test
-- Basic
-- AUTHOR'S NOTE: This test highlights the difference between Oracle8i,
-- IBM DB2, and Cloudscape.
create table foo( a varchar(10), b varchar(20) );
0 rows inserted/updated/deleted
ij> insert into foo values( 'abc', 'abcd' );
1 row inserted/updated/deleted
ij> insert into foo (a,b) values ( 'ABC', NULL );
1 row inserted/updated/deleted
ij> insert into foo (a,b) values ( NULL, 'DEF' );
1 row inserted/updated/deleted
ij> insert into foo (a,b) values ( 'ABC', '') ;
1 row inserted/updated/deleted
ij> insert into foo (a,b) values ( '', 'DEF' );
1 row inserted/updated/deleted
ij> insert into foo (a,b) values ( '', '' );
1 row inserted/updated/deleted
ij> insert into foo (a,b) values ( NULL, NULL );
1 row inserted/updated/deleted
ij> insert into foo (a,b) values ( 'GHJK', 'GHJ' );
1 row inserted/updated/deleted
ij> insert into foo (a,b) values ( 'QWE', 'QWERT' );
1 row inserted/updated/deleted
ij> insert into foo (a,b) values ( 'TYUI', 'RTYUI' );
1 row inserted/updated/deleted
ij> insert into foo (a,b) values ( 'IOP', 'UIOP[' );
1 row inserted/updated/deleted
ij> insert into foo (a,b) values ( 'ZXCV', 'ZXCV' );
1 row inserted/updated/deleted
ij> select * from foo;
A |B
-------------------------------
abc |abcd
ABC |NULL
NULL |DEF
ABC |
|DEF
|
NULL |NULL
GHJK |GHJ
QWE |QWERT
TYUI |RTYUI
IOP |UIOP[
ZXCV |ZXCV
ij> select locate(a, b) from foo;
1
-----------
1
NULL
NULL
0
1
1
NULL
0
1
2
2
1
ij> select locate(a, b, 0) from foo;
1
-----------
ERROR 22014: The start position for LOCATE is invalid; it must be a positive integer. The index to start the search from is '0'. The string to search for is 'abc'. The string to search from is 'abcd'.
ij> select locate(a, b, -1) from foo;
1
-----------
ERROR 22014: The start position for LOCATE is invalid; it must be a positive integer. The index to start the search from is '-1'. The string to search for is 'abc'. The string to search from is 'abcd'.
ij> select locate(a, b, 1) from foo;
1
-----------
1
NULL
NULL
0
1
1
NULL
0
1
2
2
1
ij> select locate(a, b, 2) from foo;
1
-----------
0
NULL
NULL
0
2
2
NULL
0
0
2
2
0
ij> select locate(a, b, 200) from foo;
1
-----------
0
NULL
NULL
0
200
200
NULL
0
0
0
0
0
ij> drop table foo;
0 rows inserted/updated/deleted
ij> -- End of ejbql_locate3.sql test
-- This test the EJBQL function, LOCATE. Resolve 3535
-- LOCATE( string1, string2[, start] ) --- 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. Position1 is the first
-- character in string2.
-- Begin of LOCATE test
-- Basic
create table loc( c varchar(20) default null, a int default null, b int default null);
0 rows inserted/updated/deleted
ij> insert into loc (c) values ('This world is crazy' );
1 row inserted/updated/deleted
ij> insert into loc (c) values ('nada' );
1 row inserted/updated/deleted
ij> insert into loc (b) values ( 3 );
1 row inserted/updated/deleted
ij> select * from loc;
C |A |B
--------------------------------------------
This world is crazy |NULL |NULL
nada |NULL |NULL
NULL |NULL |3
ij> select c, locate( 'crazy', c ) from loc;
C |2
--------------------------------
This world is crazy |15
nada |0
NULL |NULL
ij> autocommit off;
ij> -- Prepare Statements
prepare p1 as 'select locate( ''crazy'', c ) from loc';
ij> execute p1;
1
-----------
15
0
NULL
ij> -- first arg ?
prepare p2 as 'select locate( ?, c ) from loc';
ij> execute p2 using 'values ( ''crazy'' )';
1
-----------
15
0
NULL
ij> execute p2 using 'values ( ''hahah'' )';
1
-----------
0
0
NULL
ij> -- second arg ?
prepare p3 as 'select locate( ''nada'', ? ) from loc';
ij> execute p3 using 'values ( ''nada'' )';
1
-----------
1
1
1
ij> execute p3 using 'values ( ''haha'' )';
1
-----------
0
0
0
ij> -- both first and second arguments ? ?
prepare p4 as 'select locate( ?, ? ) from loc';
ij> execute p4 using 'values ( ''dont'', ''match'' )';
1
-----------
0
0
0
ij> execute p4 using 'values ( ''match'', ''me match me'' )';
1
-----------
4
4
4
ij> -- thrid arg ?
prepare p5 as 'select locate( c, c, ? ) from loc';
ij> execute p5 using 'values ( 1 )';
1
-----------
1
1
NULL
ij> execute p5 using 'values ( 2 )';
1
-----------
0
0
NULL
ij> -- all args ? ? ?
prepare p6 as 'select locate( ?, ?, ? ) from loc';
ij> execute p6 using 'values ( ''hello'', ''no match'', 1 )';
1
-----------
0
0
0
ij> execute p6 using 'values ( ''match'', ''me match me'', 2 )';
1
-----------
4
4
4
ij> -- Prepare Statements
prepare p7 as 'select {fn locate( ''crazy'', c )} from loc';
ij> execute p7;
1
-----------
15
0
NULL
ij> -- first arg ?
prepare p7 as 'select {fn locate( ?, c )} from loc';
ij> execute p7 using 'values ( ''crazy'' )';
1
-----------
15
0
NULL
ij> execute p7 using 'values ( ''hahah'' )';
1
-----------
0
0
NULL
ij> -- second arg ?
prepare p8 as 'select {fn locate( ''nada'', ? )} from loc';
ij> execute p8 using 'values ( ''nada'' )';
1
-----------
1
1
1
ij> execute p8 using 'values ( ''haha'' )';
1
-----------
0
0
0
ij> -- both first and second arguments ? ?
prepare p9 as 'select {fn locate( ?, ? )} from loc';
ij> execute p9 using 'values ( ''dont'', ''match'' )';
1
-----------
0
0
0
ij> execute p9 using 'values ( ''match'', ''me match me'' )';
1
-----------
4
4
4
ij> -- thrid arg ?
prepare p10 as 'select {fn locate( c, c, ? )} from loc';
ij> execute p10 using 'values ( 1 )';
1
-----------
1
1
NULL
ij> execute p10 using 'values ( 2 )';
1
-----------
0
0
NULL
ij> -- all args ? ? ?
prepare p11 as 'select {fn locate( ?, ?, ? )} from loc';
ij> execute p11 using 'values ( ''hello'', ''no match'', 1 )';
1
-----------
0
0
0
ij> execute p11 using 'values ( ''match'', ''me match me'', 2 )';
1
-----------
4
4
4
ij> autocommit on;
ij> drop table loc;
0 rows inserted/updated/deleted
ij> -- End of LOCATE test
-- This test EJBQL Sqrt function. Resolve 3535
-- Begin of SQRT test. For all valid types, un-escaped function.
-- Real has a range of +/-1.4E-45 to +/-3.4028235E+38
-- Basic
create table myreal( a real );
0 rows inserted/updated/deleted
ij> select sqrt(a) from myreal;
1
------------------------
ij> insert into myreal values (null), (+0), (-0), (+1), (null), (100000000),
(3.402E+38), (1.175E-37);
8 rows inserted/updated/deleted
ij> select a from myreal;
A
---------------
NULL
0.0
0.0
1.0
NULL
1.0E8
3.402E38
1.175E-37
ij> select sqrt(a) from myreal;
1
------------------------
NULL
0.0
0.0
1.0
NULL
10000.0
1.844451138023282E19
3.427827260414494E-19
ij> select -sqrt(a) from myreal;
1
------------------------
NULL
0.0
0.0
-1.0
NULL
-10000.0
-1.844451138023282E19
-3.427827260414494E-19
ij> select sqrt(sqrt(-sqrt(-sqrt(a)))) from myreal;
1
------------------------
NULL
0.0
0.0
ERROR 22013: Attempt to take the square root of a negative number, '-1.0'.
ij> SELECT SQRT(SQRT(-SQRT(-SQRT(A)))) FROM MYREAL;
1
------------------------
NULL
0.0
0.0
ERROR 22013: Attempt to take the square root of a negative number, '-1.0'.
ij> select sqrt(sqrt(sqrt(sqrt(a)))) from myreal;
1
------------------------
NULL
0.0
0.0
1.0
NULL
3.1622776601683795
255.99612668910464
0.004919006155611499
ij> select distinct sqrt(a) from myreal;
1
------------------------
0.0
3.427827260414494E-19
1.0
10000.0
1.844451138023282E19
NULL
ij> drop table myreal;
0 rows inserted/updated/deleted
ij> -- End of Real test
-- Double Precision has a range of +/-4.9E-324 to +/-1.7976931348623157E+308
-- Basic
create table mydoubleprecision( a double precision );
0 rows inserted/updated/deleted
ij> select sqrt(a) from mydoubleprecision;
1
------------------------
ij> insert into mydoubleprecision values (null), (+0), (-0), (+1), (100000000), (null),
(1.79769E+308), (2.225E-307);
8 rows inserted/updated/deleted
ij> select a from mydoubleprecision;
A
------------------------
NULL
0.0
0.0
1.0
1.0E8
NULL
1.79769E308
2.225E-307
ij> select sqrt(a) from mydoubleprecision;
1
------------------------
NULL
0.0
0.0
1.0
10000.0
NULL
1.3407796239501852E154
4.716990566028302E-154
ij> select -sqrt(a) from mydoubleprecision;
1
------------------------
NULL
0.0
0.0
-1.0
-10000.0
NULL
-1.3407796239501852E154
-4.716990566028302E-154
ij> select sqrt(sqrt(-sqrt(-sqrt(a)))) from mydoubleprecision;
1
------------------------
NULL
0.0
0.0
ERROR 22013: Attempt to take the square root of a negative number, '-1.0'.
ij> SELECT SQRT(SQRT(-SQRT(-SQRT(A)))) FROM MYDOUBLEPRECISION;
1
------------------------
NULL
0.0
0.0
ERROR 22013: Attempt to take the square root of a negative number, '-1.0'.
ij> select sqrt(sqrt(sqrt(sqrt(a)))) from mydoubleprecision;
1
------------------------
NULL
0.0
0.0
1.0
3.1622776601683795
NULL
1.8446742063214512E19
6.826657681281494E-20
ij> select distinct sqrt(a) from mydoubleprecision;
1
------------------------
0.0
4.716990566028302E-154
1.0
10000.0
1.3407796239501852E154
NULL
ij> drop table mydoubleprecision;
0 rows inserted/updated/deleted
ij> -- End of Double Precision test
-- Float has a the range or a java.lang.Float or java.lang.Double depending on
-- the precision you specify. Below a is a double, b is a float
create table myfloat( a float, b float(23) );
0 rows inserted/updated/deleted
ij> select sqrt(a), sqrt(b) from myfloat;
1 |2
-------------------------------------------------
ij> select columnname, columndatatype
from sys.syscolumns c, sys.systables t where c.referenceid = t.tableid and CAST(t.tablename AS VARCHAR(128)) = 'MYFLOAT';
COLUMNNAME |COLUMNDATATYPE
------------------------------------------------------------------------------------------------------------------------------------------------
A |DOUBLE
B |REAL
ij> insert into myfloat values (null, null), (+0, +0), (-0, -0), (+1, +1), (100000000, 100000000), (null, null),
(1.79769E+308, 3.402E+38),
(2.225E-307, 1.175E-37);
8 rows inserted/updated/deleted
ij> select a, b from myfloat;
A |B
----------------------------------------
NULL |NULL
0.0 |0.0
0.0 |0.0
1.0 |1.0
1.0E8 |1.0E8
NULL |NULL
1.79769E308 |3.402E38
2.225E-307 |1.175E-37
ij> select sqrt(a), sqrt(b) from myfloat;
1 |2
-------------------------------------------------
NULL |NULL
0.0 |0.0
0.0 |0.0
1.0 |1.0
10000.0 |10000.0
NULL |NULL
1.3407796239501852E154 |1.844451138023282E19
4.716990566028302E-154 |3.427827260414494E-19
ij> select -sqrt(a), -sqrt(b) from myfloat;
1 |2
-------------------------------------------------
NULL |NULL
0.0 |0.0
0.0 |0.0
-1.0 |-1.0
-10000.0 |-10000.0
NULL |NULL
-1.3407796239501852E154 |-1.844451138023282E19
-4.716990566028302E-154 |-3.427827260414494E-19
ij> select sqrt(sqrt(-sqrt(-sqrt(a)))), sqrt(sqrt(-sqrt(-sqrt(b)))) from myfloat;
1 |2
-------------------------------------------------
NULL |NULL
0.0 |0.0
0.0 |0.0
ERROR 22013: Attempt to take the square root of a negative number, '-1.0'.
ij> SELECT SQRT(SQRT(-SQRT(-SQRT(A)))), SQRT(SQRT(-SQRT(-SQRT(B)))) FROM MYFLOAT;
1 |2
-------------------------------------------------
NULL |NULL
0.0 |0.0
0.0 |0.0
ERROR 22013: Attempt to take the square root of a negative number, '-1.0'.
ij> select sqrt(sqrt(sqrt(sqrt(a)))), sqrt(sqrt(sqrt(sqrt(b)))) from myfloat;
1 |2
-------------------------------------------------
NULL |NULL
0.0 |0.0
0.0 |0.0
1.0 |1.0
3.1622776601683795 |3.1622776601683795
NULL |NULL
1.8446742063214512E19 |255.99612668910464
6.826657681281494E-20 |0.004919006155611499
ij> select distinct sqrt(a) from myfloat;
1
------------------------
0.0
4.716990566028302E-154
1.0
10000.0
1.3407796239501852E154
NULL
ij> select distinct sqrt(b) from myfloat;
1
------------------------
0.0
3.427827260414494E-19
1.0
10000.0
1.844451138023282E19
NULL
ij> drop table myfloat;
0 rows inserted/updated/deleted
ij> -- End of Float test
-- Test some different statements, just in case
-- beetle 5804 - support FLOAT built-in function
create table foo( a float );
0 rows inserted/updated/deleted
ij> insert into foo values ( sqrt(FLOAT( 1)));
ERROR 42X01: Syntax error: Encountered "FLOAT" at line 1, column 31.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> insert into foo values ( sqrt(FLOAT( 2)));
ERROR 42X01: Syntax error: Encountered "FLOAT" at line 1, column 31.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> insert into foo values (-sqrt(FLOAT( 3)));
ERROR 42X01: Syntax error: Encountered "FLOAT" at line 1, column 31.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> insert into foo values (-sqrt(FLOAT( 4)));
ERROR 42X01: Syntax error: Encountered "FLOAT" at line 1, column 31.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> insert into foo values ( (FLOAT(-5)));
ERROR 42X01: Syntax error: Encountered "FLOAT" at line 1, column 31.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> -- this insert should fail
insert into foo values ( sqrt(FLOAT(-3)));
ERROR 42X01: Syntax error: Encountered "FLOAT" at line 2, column 31.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> autocommit off;
ij> prepare p1 as 'select a from foo';
ij> prepare p2 as 'insert into foo select a*(-1) from foo';
ij> execute p1;
A
------------------------
ij> execute p2;
0 rows inserted/updated/deleted
ij> execute p1;
A
------------------------
ij> insert into foo values ( sqrt(FLOAT( 6)));
ERROR 42X01: Syntax error: Encountered "FLOAT" at line 1, column 31.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> insert into foo values (-sqrt(FLOAT( 7)));
ERROR 42X01: Syntax error: Encountered "FLOAT" at line 1, column 31.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> insert into foo values (-sqrt(FLOAT( 8)));
ERROR 42X01: Syntax error: Encountered "FLOAT" at line 1, column 31.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> insert into foo values ( sqrt(FLOAT( 9)));
ERROR 42X01: Syntax error: Encountered "FLOAT" at line 1, column 31.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> insert into foo values ( (FLOAT(10)));
ERROR 42X01: Syntax error: Encountered "FLOAT" at line 1, column 31.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> -- few negative tests
-- insert should fail
insert into foo values ( sqrt(FLOAT(-7)));
ERROR 42X01: Syntax error: Encountered "FLOAT" at line 3, column 31.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> prepare p3 as 'select sqrt(a) from foo';
ij> -- executing p3 should fail
execute p3;
1
------------------------
ij> -- these should pass
execute p1;
A
------------------------
ij> execute p2;
0 rows inserted/updated/deleted
ij> execute p1;
A
------------------------
ij> rollback;
ij> commit;
ij> autocommit on;
ij> insert into foo values ( sqrt(FLOAT( 11)));
ERROR 42X01: Syntax error: Encountered "FLOAT" at line 1, column 31.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> insert into foo values (-sqrt(FLOAT( 12)));
ERROR 42X01: Syntax error: Encountered "FLOAT" at line 1, column 31.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> insert into foo values (-sqrt(FLOAT( 13)));
ERROR 42X01: Syntax error: Encountered "FLOAT" at line 1, column 31.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> insert into foo values (-sqrt(FLOAT( 14)));
ERROR 42X01: Syntax error: Encountered "FLOAT" at line 1, column 31.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> insert into foo values ( (FLOAT( 15)));
ERROR 42X01: Syntax error: Encountered "FLOAT" at line 1, column 31.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> -- these 2 inserts should fail
insert into foo values (-sqrt(FLOAT(-12)));
ERROR 42X01: Syntax error: Encountered "FLOAT" at line 2, column 31.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> insert into foo values ( sqrt(FLOAT(-13)));
ERROR 42X01: Syntax error: Encountered "FLOAT" at line 1, column 31.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> -- these should pass
autocommit off;
ij> execute p1;
A
------------------------
ij> execute p3;
1
------------------------
ij> execute p1;
A
------------------------
ij> -- executing p2 should fail
execute p2;
0 rows inserted/updated/deleted
ij> autocommit on;
ij> select * from foo;
A
------------------------
ij> drop table foo;
0 rows inserted/updated/deleted
ij> -- End of SQRT test. For all valid types. Un-escaped function.
-- This test EJBQL Sqrt function. Resolve 3535
-- Begin of SQRT test.
-- Integer, Smallint, Bigint, Decimal
create table myint( a int );
0 rows inserted/updated/deleted
ij> create table myinteger( a Integer );
0 rows inserted/updated/deleted
ij> select sqrt(a) from myint;
1
------------------------
ij> select sqrt(a) from myinteger;
1
------------------------
ij> drop table myint;
0 rows inserted/updated/deleted
ij> drop table myinteger;
0 rows inserted/updated/deleted
ij> create table mysmallint( a smallint );
0 rows inserted/updated/deleted
ij> select sqrt(a) from mysmallint;
1
------------------------
ij> drop table mysmallint;
0 rows inserted/updated/deleted
ij> create table mybigint( a bigint );
0 rows inserted/updated/deleted
ij> select sqrt(a) from mybigint;
1
------------------------
ij> drop table mybigint;
0 rows inserted/updated/deleted
ij> create table mydecimal( a decimal );
0 rows inserted/updated/deleted
ij> select sqrt(a) from mydecimal;
1
------------------------
ij> drop table mydecimal;
0 rows inserted/updated/deleted
ij> -- For escape function.
-- Integer
-- Basic
values{ fn sqrt(INT('0'))};
1
------------------------
0.0
ij> -- Smallint
-- Basic
-- beetle 5805 - support INT[EGER] built-in function
values{ fn sqrt(SMALLINT('0'))};
1
------------------------
0.0
ij> -- Bigint
-- Basic
-- beetle 5809 - support BIGINT built-in function
values{ fn sqrt(BIGINT('0'))};
1
------------------------
0.0
ij> -- Real
-- Basic
-- beetle 5806 - support REAL built-in function
values{fn sqrt( REAL( 0) )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 4, column 17.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{fn sqrt( REAL(-0) )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 17.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{fn sqrt( REAL( 1) )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 17.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{fn sqrt( REAL(-1) )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 17.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{fn sqrt( REAL( 1000000.001) )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 17.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{fn sqrt( REAL(-1000000.001) )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 17.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{fn sqrt( REAL( 3.402E+38) )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 17.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{fn sqrt( REAL(-3.402E+38) + 1 )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 17.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> -- Error
values{fn sqrt( REAL( 3.402E+38 * 2) )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 2, column 17.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{fn sqrt(-REAL( NaN) )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 17.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{fn sqrt( REAL( 1.40129846432481707e-45) )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 17.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{fn sqrt( REAL( 3.40282346638528860e+38) )};
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 17.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> -- Double Precision/Double
-- Basic
-- beetle 5803 - support DOUBLE_[PRECISION] built-in function
values{fn sqrt( DOUBLE( 0) )};
1
------------------------
0.0
ij> values{fn sqrt( DOUBLE(-0) )};
1
------------------------
0.0
ij> values{fn sqrt( DOUBLE( 1) )};
1
------------------------
1.0
ij> values{fn -sqrt( DOUBLE(1) )};
ERROR 42X01: Syntax error: Encountered "-" at line 1, column 11.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{fn sqrt( DOUBLE( 1000000.001) )};
1
------------------------
1000.0000005
ij> values{fn -sqrt( DOUBLE(1000000.001) )};
ERROR 42X01: Syntax error: Encountered "-" at line 1, column 11.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{fn -sqrt( DOUBLE(1.79769E+308) )};
ERROR 42X01: Syntax error: Encountered "-" at line 1, column 11.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> values{fn sqrt( DOUBLE( 1.79769E+308) + 1 )};
1
------------------------
1.3407796239501852E154
ij> values{fn sqrt( DOUBLE( 2.225E-307 + 1) )};
1
------------------------
1.0
ij> -- Error
values{fn sqrt( DOUBLE(-1) )};
1
------------------------
ERROR 22013: Attempt to take the square root of a negative number, '-1.0'.
ij> values{fn sqrt( DOUBLE(-1000000.001) )};
1
------------------------
ERROR 22013: Attempt to take the square root of a negative number, '-1000000.001'.
ij> values{fn sqrt( DOUBLE(-1.79769E+308) )};
1
------------------------
ERROR 22013: Attempt to take the square root of a negative number, '-1.79769E308'.
ij> values{fn sqrt( DOUBLE( 1.79769E+308 * 2) )};
1
------------------------
ERROR 22003: The resulting value is outside the range for the data type DOUBLE.
ij> values{fn sqrt(-DOUBLE( NaN) )};
ERROR 42X04: Column 'NAN' is either not in any table in the FROM list or appears within a join specification and is outside the scope of the join specification or appears in a HAVING clause and is not in the GROUP BY list. If this is a CREATE or ALTER TABLE statement then 'NAN' is not a column in the target table.
ij> values{fn sqrt( DOUBLE( 4.9E-324) )};
1
------------------------
2.2227587494850775E-162
ij> values{fn sqrt( DOUBLE( 1.7976931348623157E308) )};
1
------------------------
1.3407807929942596E154
ij> -- Decimal/Numeric
-- Basic
-- beetle 5802 - support DEC[IMAL] built-in function
values{ fn sqrt(DEC('0'))};
ERROR 42X01: Syntax error: Encountered "DEC" at line 4, column 17.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> -- More generic test
values{ fn sqrt( 0+1+.1 ) };
1
------------------------
1.0488088481701516
ij> values{ fn sqrt( +0+1.000000001 ) };
1
------------------------
1.0000000005
ij> VALUES{ FN sqrt( 100+200+300 ) };
1
------------------------
24.49489742783178
ij> values{ fn sqrt( 0-1-.1 ) };
1
------------------------
ERROR 22013: Attempt to take the square root of a negative number, '-1.1'.
ij> values{ fn sqrt( -0-1.000000001 ) };
1
------------------------
ERROR 22013: Attempt to take the square root of a negative number, '-1.000000001'.
ij> VALUES{ FN sqrt( 100-200-300 ) };
1
------------------------
ERROR 22013: Attempt to take the square root of a negative number, '-400.0'.
ij> -- Error
values{ fn sqrt('null') };
ERROR 42X25: The 'SQRT' function is not allowed on the 'CHAR' type.
ij> -- sqrt as a keyword
create table sqrt( a int );
0 rows inserted/updated/deleted
ij> -- End of SQRT test.
-- This test EJBQL Sqrt function. Resolve 3535
-- Begin of SQRT test. For all valid types, un-escaped function.
create table myreal( a real );
0 rows inserted/updated/deleted
ij> select sqrt(a) from myreal;
1
------------------------
ij> insert into myreal values ( 3.402E+38 );
1 row inserted/updated/deleted
ij> select a from myreal;
A
---------------
3.402E38
ij> -- Prepare Statements, should pass
-- beetle 5806 - support REAL built-in function
autocommit off;
ij> prepare p1 as 'select a from myreal where ? <> 1';
ij> execute p1 using 'values sqrt(REAL( 0 ))';
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 14.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> execute p1 using 'values -sqrt(REAL( 20))';
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 14.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> execute p1 using 'values sqrt(REAL( 20))';
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 14.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> -- this should fail
execute p1 using 'values sqrt(REAL(-20))';
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 14.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> -- Prepare Statements, should pass
-- beetle 5806 - support REAL built-in function
prepare p2 as 'select a from myreal where ? <> 1';
ij> execute p2 using 'values {fn sqrt (REAL( 0 ))}';
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 18.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> execute p2 using 'values {fn -sqrt(REAL( 20))}';
ERROR 42X01: Syntax error: Encountered "-" at line 1, column 12.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> execute p2 using 'values {fn sqrt (REAL( 20))}';
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 18.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> -- this should fail
execute p2 using 'values {fn sqrt(REAL(-20))}';
ERROR 42X01: Syntax error: Encountered "REAL" at line 1, column 18.
Issue the 'help' command for general information on IJ command syntax.
Any unrecognized commands are treated as potential SQL commands and executed directly.
Consult your DBMS server reference documentation for details of the SQL syntax supported by your server.
ij> autocommit on;
ij> -- mod function
create table modfn(s smallint, i int, b bigint, c char(10), d decimal(6,3), r real, dbl double);
0 rows inserted/updated/deleted
ij> insert into modfn values(0, 0, 0, '0', 0.0, 0.0, 0.0);
1 row inserted/updated/deleted
ij> insert into modfn values(5, 5, 5, '5', 5.0, 5.0, 5.0);
1 row inserted/updated/deleted
ij> insert into modfn values(null, null, null, null, null, null, null);
1 row inserted/updated/deleted
ij> select { fn mod(s, 3) } from modfn;
1
-----------
0
2
NULL
ij> select { fn mod(i, 3) } from modfn;
1
-----------
0
2
NULL
ij> select { fn mod(b, 3) } from modfn;
1
--------------------
0
2
NULL
ij> select { fn mod(c, 3) } from modfn;
1
-----------
0
2
NULL
ij> select { fn mod(d, 3) } from modfn;
ERROR 42Y95: The 'mod' operator with a left operand type of 'DECIMAL' and a right operand type of 'INTEGER' is not supported.
ij> select { fn mod(r, 3) } from modfn;
ERROR 42Y95: The 'mod' operator with a left operand type of 'REAL' and a right operand type of 'INTEGER' is not supported.
ij> select { fn mod(dbl, 3) } from modfn;
ERROR 42Y95: The 'mod' operator with a left operand type of 'DOUBLE' and a right operand type of 'INTEGER' is not supported.
ij> select { fn mod(67, t) } from modfn where s <> 0;
ERROR 42X04: Column 'T' is either not in any table in the FROM list or appears within a join specification and is outside the scope of the join specification or appears in a HAVING clause and is not in the GROUP BY list. If this is a CREATE or ALTER TABLE statement then 'T' is not a column in the target table.
ij> select { fn mod(67, s) } from modfn where s <> 0;
1
-----------
2
ij> select { fn mod(67, i) } from modfn where s <> 0;
1
-----------
2
ij> select { fn mod(67, b) } from modfn where s <> 0;
1
--------------------
2
ij> select { fn mod(67, c) } from modfn where s <> 0;
1
-----------
2
ij> select { fn mod(67, d) } from modfn where s <> 0;
ERROR 42Y95: The 'mod' operator with a left operand type of 'INTEGER' and a right operand type of 'DECIMAL' is not supported.
ij> select { fn mod(67, r) } from modfn where s <> 0;
ERROR 42Y95: The 'mod' operator with a left operand type of 'INTEGER' and a right operand type of 'REAL' is not supported.
ij> select { fn mod(67, dbl) } from modfn where s <> 0;
ERROR 42Y95: The 'mod' operator with a left operand type of 'INTEGER' and a right operand type of 'DOUBLE' is not supported.
ij> select { fn mod(s, s) } from modfn where s = 0;
1
------
ERROR 22012: Attempt to divide by zero.
ij> select { fn mod(i, i) } from modfn where s = 0;
1
-----------
ERROR 22012: Attempt to divide by zero.
ij> select { fn mod(i, b) } from modfn where s = 0;
1
--------------------
ERROR 22012: Attempt to divide by zero.
ij> select { fn mod(s, s) } from modfn where s is null;
1
------
NULL
ij> select { fn mod(i, i) } from modfn where s is null;
1
-----------
NULL
ij> select { fn mod(i, b) } from modfn where s is null;
1
--------------------
NULL
ij> select { fn mod(67, i) } from modfn where i <> 0;
1
-----------
2
ij> select { fn mod(67, b) } from modfn where b <> 0;
1
--------------------
2
ij> -- this query should fail because of incompatible arguments
select { fn mod('rrrr', b) } from modfn where b <> 0;
1
--------------------
ERROR 22018: Invalid character string format for type BIGINT.
ij> values { fn mod(23, 9)};
1
-----------
5
ij> values mod(23, 9);
1
-----------
5
ij> create table mod(mod int);
0 rows inserted/updated/deleted
ij> insert into mod values(1);
1 row inserted/updated/deleted
ij> select mod from mod;
MOD
-----------
1
ij> select mod(mod,mod) from mod;
1
-----------
0
ij> drop table mod;
0 rows inserted/updated/deleted
ij> drop table modfn;
0 rows inserted/updated/deleted
ij> -- Using Strings in escape function
create table myStr( a varchar(10) );
0 rows inserted/updated/deleted
ij> insert into myStr values ( '123' );
1 row inserted/updated/deleted
ij> insert into myStr values ( ' 123' );
1 row inserted/updated/deleted
ij> insert into myStr values ( ' 12 ' );
1 row inserted/updated/deleted
ij> insert into myStr values ( ' 2 ' );
1 row inserted/updated/deleted
ij> insert into myStr values ( '1a3' );
1 row inserted/updated/deleted
ij> select * from myStr;
A
----------
123
123
12
2
1a3
ij> select sqrt(a) from myStr;
ERROR 42X25: The 'SQRT' function is not allowed on the 'VARCHAR' type.
ij> select {fn sqrt(a)} from myStr;
ERROR 42X25: The 'SQRT' function is not allowed on the 'VARCHAR' type.
ij> select {fn sqrt( '-12' ) } from myStr;
ERROR 42X25: The 'SQRT' function is not allowed on the 'CHAR' type.
ij> select {fn sqrt( '-1a2' ) } from myStr;
ERROR 42X25: The 'SQRT' function is not allowed on the 'CHAR' type.
ij> drop table myreal;
0 rows inserted/updated/deleted
ij> drop table myStr;
0 rows inserted/updated/deleted
ij> -- End of SQRT test
-- CHAR AND VARCHAR
--
-- create some tables
create table t1 (c15a char(15), c15b char(15), vc15a varchar(15),
vc15b varchar(15), lvc long varchar);
0 rows inserted/updated/deleted
ij> create table t2 (c20 char(20), c30 char(30), c40 char(40),
vc20 varchar(20), vc30 varchar(30), vc40 varchar(40),
lvc long varchar);
0 rows inserted/updated/deleted
ij> -- populate the tables
insert into t1 (c15a) values(null);
1 row inserted/updated/deleted
ij> insert into t1 values('1', '2', '3', '4', '5');
1 row inserted/updated/deleted
ij> insert into t1 values('111111', '222222222222222',
'333333', '444444444444444',
'555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555');
1 row inserted/updated/deleted
ij> insert into t1 values('555555 ', '66 ',
'777777 ', '88 ',
'99999999999999999999999999999999999999999999999999999999999999999999999999999999999 ');
1 row inserted/updated/deleted
ij> -- negative tests
-- mixing char and bit (illegal)
values X'11' || 'asdf';
ERROR 42884: No authorized routine named '||' of type 'FUNCTION' having compatible arguments was found.
ij> values 'adsf' || X'11';
ERROR 42884: No authorized routine named '||' of type 'FUNCTION' having compatible arguments was found.
ij> -- ? parameter on both sides
values ? || ?;
ERROR 42X35: It is not allowed for both operands of '||' to be ? parameters.
ij> -- simple positive
values 'aaa' || 'bbb';
1
------
aaabbb
ij> values X'aaaa' || X'bbbb';
1
--------
aaaabbbb
ij> -- non-blank truncation error on char result
insert into t2 (c20) select c15a || c15b from t1 where c15a = '111111';
ERROR 22001: A truncation error was encountered trying to shrink CHAR '111111 222222222222222' to length 20.
ij> insert into t2 (vc20) select vc15a || vc15b from t1 where c15a= '111111';
ERROR 22001: A truncation error was encountered trying to shrink VARCHAR '333333444444444444444' to length 20.
ij> insert into t2 (c20) select lvc || lvc from t1 where c15a = '111111';
ERROR 22001: A truncation error was encountered trying to shrink CHAR '555555555555555555555555555555555555555555555555555555555555&' to length 20.
ij> maximumdisplaywidth 512;
ij> -- positive tests
-- blank truncation on varchar
insert into t2 (c20) select vc15a || vc15b from t1 where c15a = '555555 ';
1 row inserted/updated/deleted
ij> select c20 from t2;
C20
--------------------
777777 88
ij> delete from t2;
1 row inserted/updated/deleted
ij> -- no blank truncation on char
insert into t2 (c30) select c15a || c15b from t1 where c15a = '555555 ';
1 row inserted/updated/deleted
ij> select c30 from t2;
C30
------------------------------
555555 66
ij> delete from t2;
1 row inserted/updated/deleted
ij> -- long varchar
insert into t2 (c30) select lvc || lvc from t1 where c15a = '1';
1 row inserted/updated/deleted
ij> select c30 from t2;
C30
------------------------------
55
ij> delete from t2;
1 row inserted/updated/deleted
ij> -- vc || c -> vc
insert into t2 (c30) select vc15a || c15a from t1 where c15a = '555555 ';
1 row inserted/updated/deleted
ij> select c30 from t2;
C30
------------------------------
777777 555555
ij> delete from t2;
1 row inserted/updated/deleted
ij> -- c || vc -> vc
insert into t2 (c30) select c15a || vc15a || '9' from t1 where c15a = '555555 ';
1 row inserted/updated/deleted
ij> select c30 from t2;
C30
------------------------------
555555 777777 9
ij> delete from t2;
1 row inserted/updated/deleted
ij> -- vc || c -> lvc
insert into t2 (lvc) select c15a || vc15a from t1 where c15a = '555555 ';
1 row inserted/updated/deleted
ij> select lvc from t2;
LVC
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
555555 777777
ij> select length(lvc) from t2;
1
-----------
25
ij> delete from t2;
1 row inserted/updated/deleted
ij> -- lvc || lvc - > lvc
insert into t2 (lvc) select lvc || lvc from t1;
4 rows inserted/updated/deleted
ij> select lvc from t2;
LVC
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NULL
55
555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
99999999999999999999999999999999999999999999999999999999999999999999999999999999999 99999999999999999999999999999999999999999999999999999999999999999999999999999999999
ij> delete from t2;
4 rows inserted/updated/deleted
ij> -- Parameters can be used in DB2 UDB if one operand is either CHAR(n) or VARCHAR(n),
-- where n is less than 128, then other is VARCHAR(254 - n).
-- In all other cases the data type is VARCHAR(254).
autocommit off;
ij> -- ? || c
prepare pc as 'select ? || c15a from t1';
ij> execute pc using 'values (''left'')';
1
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NULL
left1
left111111
left555555
ij> -- c || ?
prepare cp as 'select c15a || ? from t1';
ij> execute cp using 'values (''right'')';
1
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NULL
1 right
111111 right
555555 right
ij> -- ? || v
prepare pv as 'select ? || vc15a from t1';
ij> execute pv using 'values (''left'')';
1
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NULL
left3
left333333
left777777
ij> -- v || ?
prepare vp as 'select vc15a || ? from t1';
ij> execute vp using 'values (''right'')';
1
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NULL
3right
333333right
777777 right
ij> -- Parameters cannot be used in DB2 UDB
-- if one operand is a long varchar [for bit data] data type.
-- An invalid parameter marker error is thrown in DB2 UDB (SQLSTATE 42610).
-- lvc || ?
prepare lvp as 'select lvc || ? from t1';
ij> execute lvp using 'values (''right'')';
1
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NULL
5right
555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555right
99999999999999999999999999999999999999999999999999999999999999999999999999999999999 right
ij> -- ? || lvc
prepare plv as 'select ? || lvc from t1';
ij> execute plv using 'values (''left'')';
1
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NULL
left5
left555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
left99999999999999999999999999999999999999999999999999999999999999999999999999999999999
ij> autocommit on;
ij> -- multiple concatenations
insert into t2 (c30, vc30) values ('111 ' || '222 ' || '333 ',
'444 ' || '555 ' || '666 ');
1 row inserted/updated/deleted
ij> select c30, vc30 from t2;
C30 |VC30
-------------------------------------------------------------
111 222 333 |444 555 666
ij> delete from t2;
1 row inserted/updated/deleted
ij> -- concatenation on a long varchar
create table t3 (c1 long varchar, c2 long varchar);
0 rows inserted/updated/deleted
ij> insert into t3 values ('c1 ', 'c2');
1 row inserted/updated/deleted
ij> insert into t2 (c30, vc30) select t3.c1 || t3.c2, t3.c2 || t3.c1 from t3;
1 row inserted/updated/deleted
ij> select c30, vc30 from t2;
C30 |VC30
-------------------------------------------------------------
c1 c2 |c2c1
ij> delete from t2;
1 row inserted/updated/deleted
ij> -- drop the tables
drop table t1;
0 rows inserted/updated/deleted
ij> drop table t2;
0 rows inserted/updated/deleted
ij> drop table t3;
0 rows inserted/updated/deleted
ij> ------------------------------------------------------------------------------------
-- CHAR (n) FOR BIT DATA AND VARCHAR (n) FOR BIT DATA
-- try some cases zero length cases
values X''|| X'80';
1
--
80
ij> values X'01'|| X'';
1
--
01
ij> -- create some tables
create table t1 (b16a char(2) for bit data, b16b char(2) for bit data, vb16a varchar(2) for bit data, vb16b varchar(2) for bit data, lbv long varchar for bit data);
0 rows inserted/updated/deleted
ij> create table t2 (b20 char(3) for bit data, b60 char(8) for bit data, b80 char(10) for bit data,
vb20 varchar(3) for bit data, vb60 varchar(8) for bit data, vb80 varchar(10) for bit data, lbv long varchar for bit data);
0 rows inserted/updated/deleted
ij> -- populate the tables
insert into t1 (b16a) values(null);
1 row inserted/updated/deleted
ij> insert into t1 values(X'11', X'22', X'33', X'44', X'55');
1 row inserted/updated/deleted
ij> insert into t1 values(X'1111', X'2222',
X'3333', X'4444',
X'5555');
1 row inserted/updated/deleted
ij> insert into t1 values(X'5555', X'66',
X'7777', X'88',
X'9999');
1 row inserted/updated/deleted
ij> -- negative tests
-- non-blank truncation error on bit result
insert into t2 (b20) select b16a || b16b from t1 where b16a = X'1111';
ERROR 22001: A truncation error was encountered trying to shrink CHAR () FOR BIT DATA '11112222' to length 3.
ij> insert into t2 (vb20) select vb16a || vb16b from t1 where b16a= X'1111';
ERROR 22001: A truncation error was encountered trying to shrink VARCHAR () FOR BIT DATA '33334444' to length 3.
ij> -- positive tests
-- truncation on bit varying
insert into t2 (b20) select vb16a || vb16b from t1 where b16a = X'5555';
1 row inserted/updated/deleted
ij> select b20 from t2;
B20
------
777788
ij> delete from t2;
1 row inserted/updated/deleted
ij> -- bc || b -> vb
insert into t2 (b80) select vb16a || b16a from t1 where b16a = X'5555';
1 row inserted/updated/deleted
ij> select b80 from t2;
B80
--------------------
77775555202020202020
ij> delete from t2;
1 row inserted/updated/deleted
ij> -- b || vb -> vb
insert into t2 (b80) select b16a || vb16a || X'99' from t1 where b16a = X'5555';
1 row inserted/updated/deleted
ij> select b80 from t2;
B80
--------------------
55557777992020202020
ij> delete from t2;
1 row inserted/updated/deleted
ij> -- b || lbv -> lbv
insert into t2 (lbv) select b16a || lbv from t1 where b16a = X'5555';
1 row inserted/updated/deleted
ij> select lbv from t2;
LBV
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
55559999
ij> delete from t2;
1 row inserted/updated/deleted
ij> -- lbv || b -> lbv
insert into t2 (lbv) select lbv || b16a from t1 where b16a = X'5555';
1 row inserted/updated/deleted
ij> select lbv from t2;
LBV
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
99995555
ij> delete from t2;
1 row inserted/updated/deleted
ij> -- vb || lbv -> lbv
insert into t2 (lbv) select vb16a || lbv from t1 where b16a = X'5555';
1 row inserted/updated/deleted
ij> select lbv from t2;
LBV
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
77779999
ij> delete from t2;
1 row inserted/updated/deleted
ij> -- lbv || vb -> lbv
insert into t2 (lbv) select lbv || vb16a from t1 where b16a = X'5555';
1 row inserted/updated/deleted
ij> select lbv from t2;
LBV
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
99997777
ij> delete from t2;
1 row inserted/updated/deleted
ij> -- Parameters can be used in DB2 UDB
-- if one operand is either CHAR(n) [for bit data] or VARCHAR(n) [for bit data],
-- where n is less than 128, then other is VARCHAR(254 - n).
-- In all other cases the data type is VARCHAR(254).
autocommit off;
ij> -- ? || b
prepare pb as 'select ? || b16a from t1';
ij> execute pb using 'values (X''ABCD'')';
1
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NULL
abcd1120
abcd1111
abcd5555
ij> -- b || ?
prepare bp as 'select b16a || ? from t1';
ij> execute bp using 'values (X''ABCD'')';
1
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NULL
1120abcd
1111abcd
5555abcd
ij> -- ? || vb
prepare pvb as 'select ? || vb16a from t1';
ij> execute pvb using 'values (X''ABCD'')';
1
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NULL
abcd33
abcd3333
abcd7777
ij> -- vb || ?
prepare vbp as 'select vb16a || ? from t1';
ij> execute vbp using 'values (X''ABCD'')';
1
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NULL
33abcd
3333abcd
7777abcd
ij> -- Parameters cannot be used in DB2 UDB
-- if one operand is a long varchar [for bit data] data type.
-- An invalid parameter marker error is thrown in DB2 UDB (SQLSTATE 42610).
-- ? || lbv
prepare plbv as 'select ? || lbv from t1';
ij> execute plbv using 'values (X''ABCD'')';
1
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NULL
abcd55
abcd5555
abcd9999
ij> -- lbv || ?
prepare lbvp as 'select lbv || ? from t1';
ij> execute lbvp using 'values (X''ABCD'')';
1
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NULL
55abcd
5555abcd
9999abcd
ij> autocommit on;
ij> -- multiple concatenations
insert into t2 (b80, vb80, lbv) values (X'e0' || X'A0' || X'20',
X'10' || X'11' || X'e0',
X'1234' || X'A0' || X'20');
1 row inserted/updated/deleted
ij> select b80, vb80, lbv from t2;
B80 |VB80 |LBV
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
e0a02020202020202020|1011e0 |1234a020
ij> delete from t2;
1 row inserted/updated/deleted
ij> -- concatenation on a byte
create table t3 (b1 char(1) for bit data, b2 char(1) for bit data);
0 rows inserted/updated/deleted
ij> insert into t3 values (X'11', X'22');
1 row inserted/updated/deleted
ij> insert into t2 (b80, vb80) select t3.b1 || t3.b2, t3.b2 || t3.b1 from t3;
1 row inserted/updated/deleted
ij> select b80, vb80 from t2;
B80 |VB80
-----------------------------------------
11222020202020202020|2211
ij> delete from t2;
1 row inserted/updated/deleted
ij> -- clean up the prepared statements
remove pc;
ij> remove cp;
ij> remove vp;
ij> remove pv;
ij> remove pb;
ij> remove bp;
ij> remove pvb;
ij> remove vbp;
ij> remove lvp;
ij> remove plv;
ij> remove plbv;
ij> remove lbvp;
ij> -- drop the tables
drop table t1;
0 rows inserted/updated/deleted
ij> drop table t2;
0 rows inserted/updated/deleted
ij> drop table t3;
0 rows inserted/updated/deleted
ij> -- reset maximumdisplaywidth
maximumdisplaywidth 128;
ij> --
--
-- the like tests are all run through the unit test
-- mechanism that is fired off with this test's
-- properties file. that test tests all the %, _ combinations
-- to exhaustion.
--
-- we show that the language level support works, here, which is:
-- the syntax
-- char and varchar columns
-- not can be applied and pushed around with it
-- parameters (would need to be .java to show completely...)
-- not other types of columns
--
create table t (c char(20), v varchar(20), lvc long varchar);
0 rows inserted/updated/deleted
ij> insert into t values('hello','world', 'nice day, huh?');
1 row inserted/updated/deleted
ij> insert into t values('goodbye','planet', 'see you later');
1 row inserted/updated/deleted
ij> insert into t values('aloha','orb', 'hang loose');
1 row inserted/updated/deleted
ij> -- subquery on left side
select * from t where (select max(c) from t) like '%';
C |V |LVC
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
hello |world |nice day, huh?
goodbye |planet |see you later
aloha |orb |hang loose
ij> select * from t where c like 'h%';
C |V |LVC
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
hello |world |nice day, huh?
ij> select * from t where v like '%or%';
C |V |LVC
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
hello |world |nice day, huh?
aloha |orb |hang loose
ij> select * from t where lvc like '%y%';
C |V |LVC
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
hello |world |nice day, huh?
goodbye |planet |see you later
ij> -- these four should all have the same results:
select * from t where not v like '%or%';
C |V |LVC
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
goodbye |planet |see you later
ij> select * from t where not (v like '%or%');
C |V |LVC
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
goodbye |planet |see you later
ij> select * from t where 1=0 or not v like '%or%';
C |V |LVC
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
goodbye |planet |see you later
ij> select * from t where not (1=0 or not v not like '%or%');
C |V |LVC
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
goodbye |planet |see you later
ij> -- these two should have the same results:
select * from t where c like '%lo%' or v like '%o%';
C |V |LVC
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
hello |world |nice day, huh?
aloha |orb |hang loose
ij> select * from t where v like '%o%' or c like '%lo%';
C |V |LVC
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
hello |world |nice day, huh?
aloha |orb |hang loose
ij> -- these three should have the same results:
select * from t where c like '%lo%' and 0=0;
C |V |LVC
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
hello |world |nice day, huh?
aloha |orb |hang loose
ij> select * from t where c like '%lo%' and 1=1;
C |V |LVC
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
hello |world |nice day, huh?
aloha |orb |hang loose
ij> select * from t where 1=1 and c like '%lo%';
C |V |LVC
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
hello |world |nice day, huh?
aloha |orb |hang loose
ij> -- we can at least show the parameters compile...
autocommit off;
ij> prepare s as 'select * from t where v like ?';
ij> execute s;
ERROR 07000: At least one parameter to the current statement is uninitialized.
ij> prepare s as 'select * from t where ? like ?';
ij> execute s;
ERROR 07000: At least one parameter to the current statement is uninitialized.
ij> prepare s as 'select * from t where c like ?';
ij> execute s;
ERROR 07000: At least one parameter to the current statement is uninitialized.
ij> prepare s as 'select * from t where lvc like ?';
ij> execute s;
ERROR 07000: At least one parameter to the current statement is uninitialized.
ij> prepare s as 'select * from t where lvc like ?';
ij> execute s;
ERROR 07000: At least one parameter to the current statement is uninitialized.
ij> autocommit on;
ij> create table n (i int, r real, d date, u char(10));
0 rows inserted/updated/deleted
ij> -- these should succeed
insert into n values (1, 1.1, date('1111-11-11'), '%');
1 row inserted/updated/deleted
ij> insert into n values (2, 2.2, date('2222-2-2'), 'haha');
1 row inserted/updated/deleted
ij> select * from n where u like 'haha______';
I |R |D |U
-------------------------------------------------
2 |2.2 |2222-02-02|haha
ij> -- now, with an index
create table m (i int, r real, d date, u varchar(10));
0 rows inserted/updated/deleted
ij> insert into m select * from n;
2 rows inserted/updated/deleted
ij> select * from m where u like 'haha';
I |R |D |U
-------------------------------------------------
ij> select * from m where u like 'haha______';
I |R |D |U
-------------------------------------------------
2 |2.2 |2222-02-02|haha
ij> create index i1 on m(u);
0 rows inserted/updated/deleted
ij> select * from m where u like 'haha';
I |R |D |U
-------------------------------------------------
ij> select * from m where u like 'haha______';
I |R |D |U
-------------------------------------------------
2 |2.2 |2222-02-02|haha
ij> -- tests for column like constant optimization
create table u (c char(10), vc varchar(10));
0 rows inserted/updated/deleted
ij> insert into u values ('hello', 'hello');
1 row inserted/updated/deleted
ij> select * from u where c like 'hello';
C |VC
---------------------
ij> select * from u where vc like 'hello';
C |VC
---------------------
hello |hello
ij> select * from u where c like 'hello ';
C |VC
---------------------
hello |hello
ij> select * from u where vc like 'hello ';
C |VC
---------------------
ij> -- cleanup
drop table t;
0 rows inserted/updated/deleted
ij> drop table n;
0 rows inserted/updated/deleted
ij> drop table m;
0 rows inserted/updated/deleted
ij> drop table u;
0 rows inserted/updated/deleted
ij> -- testing JDBC escaped length function
-- JDBC length is defined as the number of characters in a string without trailing blanks.
values {FN LENGTH('hello ') };
1
-----------
5
ij> values {FN LENGTH(rtrim('hello ')) };
1
-----------
5
ij> -- defect 5749. rtrim() over substr() used to raise ASSERT failure.
create table t1 (c1 char(10));
0 rows inserted/updated/deleted
ij> insert into t1 values ('testing');
1 row inserted/updated/deleted
ij> select rtrim(substr(' asdf', 1, 3)) from t1;
1
----
as
ij>