blob: 4592532b46f734e99d88bc3d8ded2d84be75ecd5 [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.
--
-- tests for cast expressions
-- refer to casting.java for a complete analysis on casting
--==================================
--
-- simple test cases
--
--==================================
-- shrink/grow bit and char
-- no exceptions should be raised.
-- expect a warning when shrinking non-space
-- shrink
values (cast ('hell' as char(2)));
1
--
he
WARNING 01004: Data truncation
ij> values (cast ('hell' as varchar(2)));
1
--
he
WARNING 01004: Data truncation
ij> -- shrink, whitespace only
values (cast ('he ' as char(2)));
1
--
he
ij> -- expand, check lengths
values (cast ('hell' as char(20)));
1
--------------------
hell
ij> values (cast ('hell' as varchar(20)));
1
--------------------
hell
ij> values length(cast ('hell' as char(20)));
1
-----------
20
ij> values length(cast ('hell' as varchar(20)));
1
-----------
4
ij> ----------------
--char->bit data
----------------
-- shrink
values (cast (X'1111' as char(1) for bit data));
1
--
11
WARNING 01004: Data truncation
ij> -- shrink, zero only
values (cast (X'1100' as char(1) for bit data));
1
--
11
WARNING 01004: Data truncation
ij> -- expand
values (cast (X'1111' as char(2) for bit data));
1
----
1111
ij> -- w/o format
-- DB2 UDB PASS
-- DB2 CS FAIL
values (cast ('1234' as char(2) for bit data));
ERROR 42846: Cannot convert types 'CHAR' to 'CHAR () FOR BIT DATA'.
ij> -- extra tests for shrinking parts of bits
values cast (X'11111111' as char(1) for bit data);
1
--
11
WARNING 01004: Data truncation
ij> values cast (X'01111111' as char(1) for bit data);
1
--
01
WARNING 01004: Data truncation
ij> values cast (X'11111111' as char(1) for bit data);
1
--
11
WARNING 01004: Data truncation
ij> values cast (X'01111111' as char(1) for bit data);
1
--
01
WARNING 01004: Data truncation
ij> values cast (X'00111111' as char(1) for bit data);
1
--
00
WARNING 01004: Data truncation
ij> values cast (X'11111111' as char(1) for bit data);
1
--
11
WARNING 01004: Data truncation
ij> values cast (X'01111111' as char(1) for bit data);
1
--
01
WARNING 01004: Data truncation
ij> values cast (X'00111111' as char(1) for bit data);
1
--
00
WARNING 01004: Data truncation
ij> values cast (X'00011111' as char(1) for bit data);
1
--
00
WARNING 01004: Data truncation
ij> values cast (X'11111111' as char(1) for bit data);
1
--
11
WARNING 01004: Data truncation
ij> values cast (X'01111111' as char(1) for bit data);
1
--
01
WARNING 01004: Data truncation
ij> values cast (X'00111111' as char(1) for bit data);
1
--
00
WARNING 01004: Data truncation
ij> values cast (X'00011111' as char(1) for bit data);
1
--
00
WARNING 01004: Data truncation
ij> values cast (X'00001111' as char(1) for bit data);
1
--
00
WARNING 01004: Data truncation
ij> values cast (X'11111111' as char(1) for bit data);
1
--
11
WARNING 01004: Data truncation
ij> values cast (X'01111111' as char(1) for bit data);
1
--
01
WARNING 01004: Data truncation
ij> values cast (X'00111111' as char(1) for bit data);
1
--
00
WARNING 01004: Data truncation
ij> values cast (X'00011111' as char(1) for bit data);
1
--
00
WARNING 01004: Data truncation
ij> values cast (X'00001111' as char(1) for bit data);
1
--
00
WARNING 01004: Data truncation
ij> values cast (X'00000111' as char(1) for bit data);
1
--
00
WARNING 01004: Data truncation
ij> values cast (X'11111111' as char(1) for bit data);
1
--
11
WARNING 01004: Data truncation
ij> values cast (X'01111111' as char(1) for bit data);
1
--
01
WARNING 01004: Data truncation
ij> values cast (X'00111111' as char(1) for bit data);
1
--
00
WARNING 01004: Data truncation
ij> values cast (X'00011111' as char(1) for bit data);
1
--
00
WARNING 01004: Data truncation
ij> values cast (X'00001111' as char(1) for bit data);
1
--
00
WARNING 01004: Data truncation
ij> values cast (X'00000111' as char(1) for bit data);
1
--
00
WARNING 01004: Data truncation
ij> values cast (X'00000011' as char(1) for bit data);
1
--
00
WARNING 01004: Data truncation
ij> values cast (X'11111111' as char(1) for bit data);
1
--
11
WARNING 01004: Data truncation
ij> values cast (X'01111111' as char(1) for bit data);
1
--
01
WARNING 01004: Data truncation
ij> values cast (X'00111111' as char(1) for bit data);
1
--
00
WARNING 01004: Data truncation
ij> values cast (X'00011111' as char(1) for bit data);
1
--
00
WARNING 01004: Data truncation
ij> values cast (X'00001111' as char(1) for bit data);
1
--
00
WARNING 01004: Data truncation
ij> values cast (X'00000111' as char(1) for bit data);
1
--
00
WARNING 01004: Data truncation
ij> values cast (X'00000011' as char(1) for bit data);
1
--
00
WARNING 01004: Data truncation
ij> values cast (X'00000001' as char(1) for bit data);
1
--
00
WARNING 01004: Data truncation
ij> values cast (X'0011111111111111' as char(1) for bit data);
1
--
00
WARNING 01004: Data truncation
ij> values cast (X'1111111100111111' as char(2) for bit data);
1
----
1111
WARNING 01004: Data truncation
ij> ---------
--numbers
---------
values (cast (1.1 as int));
1
-----------
1
ij> values (cast (1.1 as smallint));
1
------
1
ij> values (cast (1.1 as bigint));
1
--------------------
1
ij> values (cast (1.1 as double precision));
1
------------------------
1.1
ij> values (cast (1.1 as numeric(2,1)));
1
----
1.1
ij> values (cast (1.1 as decimal(2,1)));
1
----
1.1
ij> values (cast (1.1 as numeric(2,0)));
1
---
1
ij> values (cast (1.1 as decimal(2,0)));
1
---
1
ij> values (cast (1.1 as float));
1
------------------------
1.1
ij> values (cast (1.1 as real));
1
---------------
1.1
ij> values (cast (1.9 as int));
1
-----------
1
ij> values (cast (1.9 as smallint));
1
------
1
ij> values (cast (1.9 as bigint));
1
--------------------
1
ij> values (cast (1.9 as double precision));
1
------------------------
1.9
ij> values (cast (1.9 as numeric(2,1)));
1
----
1.9
ij> values (cast (1.9 as decimal(2,1)));
1
----
1.9
ij> values (cast (1.9 as numeric(2,0)));
1
---
1
ij> values (cast (1.9 as decimal(2,0)));
1
---
1
ij> values (cast (1.9 as float));
1
------------------------
1.9
ij> values (cast (1.9 as real));
1
---------------
1.9
ij> -- bug 4352,4358 loss of precision on casts
-- 9223372036854775807 is Long::MAX_VALUE
values (
9223372036854775807,
cast (9223372036854775807 as DECIMAL(24,1)),
cast (
cast (9223372036854775807 as DECIMAL(24,1)) as BIGINT)
);
1 |2 |3
--------------------------------------------------------------------
9223372036854775807 |9223372036854775807.0 |9223372036854775807
ij> values (
cast ('9223372036854775807' as DECIMAL(24,1)),
cast (cast ('9223372036854775807' as DECIMAL(24,1)) as BIGINT)
);
1 |2
-----------------------------------------------
9223372036854775807.0 |9223372036854775807
ij> values (
cast ('9223372036854775806' as DECIMAL(24,1)),
cast (cast ('9223372036854775806' as DECIMAL(24,1)) as BIGINT)
);
1 |2
-----------------------------------------------
9223372036854775806.0 |9223372036854775806
ij> -- only this should fail
values (
cast ('9223372036854775808' as DECIMAL(24,1)),
cast (cast ('9223372036854775808' as DECIMAL(24,1)) as BIGINT)
);
1 |2
-----------------------------------------------
ERROR 22003: The resulting value is outside the range for the data type BIGINT.
ij> values (
cast ('9223372036854775807.9' as DECIMAL(24,1)),
cast (cast ('9223372036854775807.9' as DECIMAL(24,1)) as BIGINT)
);
1 |2
-----------------------------------------------
9223372036854775807.9 |9223372036854775807
ij> -- -9223372036854775808 is Long::MIN_VALUE
values (
cast ('-9223372036854775808' as DECIMAL(24,1)),
cast (cast ('-9223372036854775808' as DECIMAL(24,1)) as BIGINT)
);
1 |2
-----------------------------------------------
-9223372036854775808.0 |-9223372036854775808
ij> values (
cast ('-9223372036854775807' as DECIMAL(24,1)),
cast (cast ('-9223372036854775807' as DECIMAL(24,1)) as BIGINT)
);
1 |2
-----------------------------------------------
-9223372036854775807.0 |-9223372036854775807
ij> -- only this should fail
values (
cast ('-9223372036854775809' as DECIMAL(24,1)),
cast (cast ('-9223372036854775809' as DECIMAL(24,1)) as BIGINT)
);
1 |2
-----------------------------------------------
ERROR 22003: The resulting value is outside the range for the data type BIGINT.
ij> values (
cast ('-9223372036854775808.9' as DECIMAL(24,1)),
cast (cast ('-9223372036854775808.9' as DECIMAL(24,1)) as BIGINT)
);
1 |2
-----------------------------------------------
-9223372036854775808.9 |-9223372036854775808
ij> values (
cast ('32767' as DECIMAL(24,1)),
cast (cast ('32767' as DECIMAL(24,1)) as SMALLINT)
);
1 |2
---------------------------------
32767.0 |32767
ij> values (
cast ('32766' as DECIMAL(24,1)),
cast (cast ('32766' as DECIMAL(24,1)) as SMALLINT)
);
1 |2
---------------------------------
32766.0 |32766
ij> values (
cast ('32768' as DECIMAL(24,1)),
cast (cast ('32768' as DECIMAL(24,1)) as SMALLINT)
);
1 |2
---------------------------------
ERROR 22003: The resulting value is outside the range for the data type SMALLINT.
ij> -- only this should fail
values (
cast ('32767.9' as DECIMAL(24,1)),
cast (cast ('32767.9' as DECIMAL(24,1)) as SMALLINT)
);
1 |2
---------------------------------
32767.9 |32767
ij> values (
cast ('-32768' as DECIMAL(24,1)),
cast (cast ('-32768' as DECIMAL(24,1)) as SMALLINT)
);
1 |2
---------------------------------
-32768.0 |-32768
ij> values (
cast ('-32767' as DECIMAL(24,1)),
cast (cast ('-32767' as DECIMAL(24,1)) as SMALLINT)
);
1 |2
---------------------------------
-32767.0 |-32767
ij> -- only this should fail
values (
cast ('-32769' as DECIMAL(24,1)),
cast (cast ('-32769' as DECIMAL(24,1)) as SMALLINT)
);
1 |2
---------------------------------
ERROR 22003: The resulting value is outside the range for the data type SMALLINT.
ij> values (
cast ('-32768.9' as DECIMAL(24,1)),
cast (cast ('-32768.9' as DECIMAL(24,1)) as SMALLINT)
);
1 |2
---------------------------------
-32768.9 |-32768
ij> values (
cast ('2147483647' as DECIMAL(24,1)),
cast (cast ('2147483647' as DECIMAL(24,1)) as INTEGER)
);
1 |2
--------------------------------------
2147483647.0 |2147483647
ij> values (
cast ('2147483646' as DECIMAL(24,1)),
cast (cast ('2147483646' as DECIMAL(24,1)) as INTEGER)
);
1 |2
--------------------------------------
2147483646.0 |2147483646
ij> -- only this should fail
values (
cast ('2147483648' as DECIMAL(24,1)),
cast (cast ('2147483648' as DECIMAL(24,1)) as INTEGER)
);
1 |2
--------------------------------------
ERROR 22003: The resulting value is outside the range for the data type INTEGER.
ij> values (
cast ('2147483647.9' as DECIMAL(24,1)),
cast (cast ('2147483647.9' as DECIMAL(24,1)) as INTEGER)
);
1 |2
--------------------------------------
2147483647.9 |2147483647
ij> values (
cast ('-2147483647' as DECIMAL(24,1)),
cast (cast ('-2147483647' as DECIMAL(24,1)) as INTEGER)
);
1 |2
--------------------------------------
-2147483647.0 |-2147483647
ij> values (
cast ('-2147483646' as DECIMAL(24,1)),
cast (cast ('-2147483646' as DECIMAL(24,1)) as INTEGER)
);
1 |2
--------------------------------------
-2147483646.0 |-2147483646
ij> -- only this should fail
values (
cast ('-2147483649' as DECIMAL(24,1)),
cast (cast ('-2147483649' as DECIMAL(24,1)) as INTEGER)
);
1 |2
--------------------------------------
ERROR 22003: The resulting value is outside the range for the data type INTEGER.
ij> values (
cast ('-2147483648.9' as DECIMAL(24,1)),
cast (cast ('-2147483648.9' as DECIMAL(24,1)) as INTEGER)
);
1 |2
--------------------------------------
-2147483648.9 |-2147483648
ij> --numbers to char
values (cast (1.1 as char(10)));
1
----------
1.1
ij> values (cast (1.1 as varchar(10)));
ERROR 42846: Cannot convert types 'DECIMAL' to 'VARCHAR'.
ij> values (cast (1e1 as varchar(10)));
ERROR 42846: Cannot convert types 'DOUBLE' to 'VARCHAR'.
ij> values (cast (1e1 as char(10)));
ERROR 42846: Cannot convert types 'DOUBLE' to 'CHAR'.
ij> values (cast (1 as char(10)));
1
----------
1
ij> values (cast (1 as varchar(10)));
ERROR 42846: Cannot convert types 'INTEGER' to 'VARCHAR'.
ij> values (cast (1e200 as char(10)));
ERROR 42846: Cannot convert types 'DOUBLE' to 'CHAR'.
ij> values (cast (1e200 as varchar(10)));
ERROR 42846: Cannot convert types 'DOUBLE' to 'VARCHAR'.
ij> values (cast (1 as long varchar));
ERROR 42846: Cannot convert types 'INTEGER' to 'LONG VARCHAR'.
ij> values (cast (1.1 as long varchar));
ERROR 42846: Cannot convert types 'DECIMAL' to 'LONG VARCHAR'.
ij> values (cast (1e1 as long varchar));
ERROR 42846: Cannot convert types 'DOUBLE' to 'LONG VARCHAR'.
ij> --char to numbers
values (cast ('123' as smallint));
1
------
123
ij> values (cast ('123' as int));
1
-----------
123
ij> values (cast ('123' as bigint));
1
--------------------
123
ij> values (cast ('123' as double precision));
ERROR 42846: Cannot convert types 'CHAR' to 'DOUBLE'.
ij> values (cast ('123' as float));
ERROR 42846: Cannot convert types 'CHAR' to 'DOUBLE'.
ij> values (cast ('123' as real));
ERROR 42846: Cannot convert types 'CHAR' to 'REAL'.
ij> values (cast ('123' as numeric(3,0)));
1
----
123
ij> values (cast ('123' as decimal(3,0)));
1
----
123
ij> -- char (with decimal) to numbers (truncates where needed Track #3756)
-- bug 5568
values (cast ('123.45' as smallint));
1
------
123
ij> values (cast ('123.45' as int));
1
-----------
123
ij> values (cast ('123.45' as bigint));
1
--------------------
123
ij> values (cast ('123.45' as double precision));
ERROR 42846: Cannot convert types 'CHAR' to 'DOUBLE'.
ij> values (cast ('123.45' as float));
ERROR 42846: Cannot convert types 'CHAR' to 'DOUBLE'.
ij> values (cast ('123.45' as real));
ERROR 42846: Cannot convert types 'CHAR' to 'REAL'.
ij> values (cast ('123.45' as numeric(5,1)));
1
-------
123.4
ij> values (cast ('123.45' as decimal(5,1)));
1
-------
123.4
ij> values (cast ('123.99' as smallint));
1
------
123
ij> values (cast ('123.99' as int));
1
-----------
123
ij> values (cast ('123.99' as bigint));
1
--------------------
123
ij> values (cast ('123.99' as double precision));
ERROR 42846: Cannot convert types 'CHAR' to 'DOUBLE'.
ij> values (cast ('123.99' as float));
ERROR 42846: Cannot convert types 'CHAR' to 'DOUBLE'.
ij> values (cast ('123.99' as real));
ERROR 42846: Cannot convert types 'CHAR' to 'REAL'.
ij> values (cast ('123.99' as numeric(5,1)));
1
-------
123.9
ij> values (cast ('123.99' as decimal(5,1)));
1
-------
123.9
ij> --bad
values (cast (1 as char(2) for bit data));
ERROR 42846: Cannot convert types 'INTEGER' to 'CHAR () FOR BIT DATA'.
ij> values (cast (1 as date));
ERROR 42846: Cannot convert types 'INTEGER' to 'DATE'.
ij> values (cast (1 as time));
ERROR 42846: Cannot convert types 'INTEGER' to 'TIME'.
ij> values (cast (1 as timestamp));
ERROR 42846: Cannot convert types 'INTEGER' to 'TIMESTAMP'.
ij> -------------------
--char -> date/time
-------------------
values (cast ('TIME''11:11:11''' as time));
ERROR 22007: The syntax of the string representation of a date/time value is incorrect.
ij> values (cast ('11:11:11' as time));
1
--------
11:11:11
ij> values (cast ('DATE''1999-09-09''' as date));
ERROR 22007: The syntax of the string representation of a date/time value is incorrect.
ij> values (cast ('1999-09-09' as date));
1
----------
1999-09-09
ij> values (cast ('TIMESTAMP''1999-09-09 11:11:11''' as timestamp));
ERROR 22007: The syntax of the string representation of a date/time value is incorrect.
ij> values (cast ('1999-09-09 11:11:11' as timestamp));
1
-----------------------------
1999-09-09 11:11:11.0
ij> ------------------
--date/time ->other
------------------
values (cast (TIME('11:11:11') as char(20)));
1
--------------------
11:11:11
ij> values (cast (DATE('1999-09-09') as char(20)));
1
--------------------
1999-09-09
ij> values (cast (TIMESTAMP('1999-09-09 11:11:11' )as char(40)));
1
----------------------------------------
1999-09-09 11:11:11.0
ij> values (cast (TIME('11:11:11') as varchar(20)));
1
--------------------
11:11:11
ij> values (cast (DATE('1999-09-09') as varchar(20)));
1
--------------------
1999-09-09
ij> values (cast (TIMESTAMP('1999-09-09 11:11:11' )as varchar(40)));
1
----------------------------------------
1999-09-09 11:11:11.0
ij> values (cast (TIME('11:11:11') as long varchar));
ERROR 42846: Cannot convert types 'TIME' to 'LONG VARCHAR'.
ij> values (cast (DATE('1999-09-09') as long varchar));
ERROR 42846: Cannot convert types 'DATE' to 'LONG VARCHAR'.
ij> values (cast (TIMESTAMP('1999-09-09 11:11:11' )as long varchar));
ERROR 42846: Cannot convert types 'TIMESTAMP' to 'LONG VARCHAR'.
ij> -- truncation errors
values (cast (TIME('11:11:11') as char(2)));
ERROR 22001: A truncation error was encountered trying to shrink CHAR '11:11:11' to length 2.
ij> values (cast (DATE('1999-09-09') as char(2)));
ERROR 22001: A truncation error was encountered trying to shrink CHAR '1999-09-09' to length 2.
ij> values (cast (TIMESTAMP('1999-09-09 11:11:11' )as char(2)));
ERROR 22001: A truncation error was encountered trying to shrink CHAR '1999-09-09 11:11:11.0' to length 2.
ij> -- to date/time
values (cast (TIME('11:11:11') as time));
1
--------
11:11:11
ij> values (cast (TIME('11:11:11') as date));
ERROR 42846: Cannot convert types 'TIME' to 'DATE'.
ij> -- this piece of convoluted logic is to ensure that we
-- get the current date for a conversion of time to timestamp
values substr(cast (cast (TIME('11:11:11') as timestamp) as char(50)), 1, 10) = cast (current_date as char(10));
1
-----
true
ij> -- now make sure we got the time right
values substr(cast (cast (TIME('11:11:11') as timestamp) as char(30)), 12);
1
------------------------------
11:11:11.0
ij> values (cast (DATE('1999-09-09') as date));
1
----------
1999-09-09
ij> values (cast (DATE('1999-09-09') as time));
ERROR 42846: Cannot convert types 'DATE' to 'TIME'.
ij> values (cast (DATE('1999-09-09') as timestamp));
1
-----------------------------
1999-09-09 00:00:00.0
ij> values (cast (TIMESTAMP('1999-09-09 11:11:11' )as date));
1
----------
1999-09-09
ij> values (cast (TIMESTAMP('1999-09-09 11:11:11' )as time));
1
--------
11:11:11
ij> values (cast (TIMESTAMP('1999-09-09 11:11:11' )as timestamp));
1
-----------------------------
1999-09-09 11:11:11.0
ij> --bad
values (cast (TIMESTAMP('1999-09-09 11:11:11' )as int));
ERROR 42846: Cannot convert types 'TIMESTAMP' to 'INTEGER'.
ij> values (cast (DATE('1999-09-09') as int));
ERROR 42846: Cannot convert types 'DATE' to 'INTEGER'.
ij> values (cast (TIME('11:11:11') as int));
ERROR 42846: Cannot convert types 'TIME' to 'INTEGER'.
ij> values (cast (TIMESTAMP('1999-09-09 11:11:11' )as smallint));
ERROR 42846: Cannot convert types 'TIMESTAMP' to 'SMALLINT'.
ij> values (cast (DATE('1999-09-09') as smallint));
ERROR 42846: Cannot convert types 'DATE' to 'SMALLINT'.
ij> values (cast (TIME('11:11:11') as smallint));
ERROR 42846: Cannot convert types 'TIME' to 'SMALLINT'.
ij> values (cast (TIMESTAMP('1999-09-09 11:11:11' )as bigint));
ERROR 42846: Cannot convert types 'TIMESTAMP' to 'BIGINT'.
ij> values (cast (DATE('1999-09-09') as bigint));
ERROR 42846: Cannot convert types 'DATE' to 'BIGINT'.
ij> values (cast (TIME('11:11:11') as bigint));
ERROR 42846: Cannot convert types 'TIME' to 'BIGINT'.
ij> values (cast (TIMESTAMP('1999-09-09 11:11:11' )as numeric));
ERROR 42846: Cannot convert types 'TIMESTAMP' to 'NUMERIC'.
ij> values (cast (DATE('1999-09-09') as numeric));
ERROR 42846: Cannot convert types 'DATE' to 'NUMERIC'.
ij> values (cast (TIME('11:11:11') as numeric));
ERROR 42846: Cannot convert types 'TIME' to 'NUMERIC'.
ij> values (cast (TIMESTAMP('1999-09-09 11:11:11' )as decimal));
ERROR 42846: Cannot convert types 'TIMESTAMP' to 'DECIMAL'.
ij> values (cast (DATE('1999-09-09') as decimal));
ERROR 42846: Cannot convert types 'DATE' to 'DECIMAL'.
ij> values (cast (TIME('11:11:11') as decimal));
ERROR 42846: Cannot convert types 'TIME' to 'DECIMAL'.
ij> values (cast (TIMESTAMP('1999-09-09 11:11:11' ) as char(13) for bit data));
ERROR 42846: Cannot convert types 'TIMESTAMP' to 'CHAR () FOR BIT DATA'.
ij> values (cast (DATE('1999-09-09') as char(13) for bit data));
ERROR 42846: Cannot convert types 'DATE' to 'CHAR () FOR BIT DATA'.
ij> values (cast (TIME('11:11:11') as char(13) for bit data));
ERROR 42846: Cannot convert types 'TIME' to 'CHAR () FOR BIT DATA'.
ij> ------------
--bit ->char
------------
values (cast (X'00680065006c006c006f' as char(10)));
ERROR 42846: Cannot convert types 'CHAR () FOR BIT DATA' to 'CHAR'.
ij> --small bit
values (cast (X'11' as char(10)));
ERROR 42846: Cannot convert types 'CHAR () FOR BIT DATA' to 'CHAR'.
ij> values (cast (X'11' as varchar(10)));
ERROR 42846: Cannot convert types 'CHAR () FOR BIT DATA' to 'VARCHAR'.
ij> values (cast (X'11' as long varchar));
ERROR 42846: Cannot convert types 'CHAR () FOR BIT DATA' to 'LONG VARCHAR'.
ij> --values (cast (X'00' as char(10)));
--odd length won't work anymore
values (cast (X'123' as char(20)));
ERROR 42606: An invalid hexadecimal constant starting with 'X'123'' has been detected.
ij> --truncate, (should be warning in future)
values (cast ('1234' as char(1) for bit data));
ERROR 42846: Cannot convert types 'CHAR' to 'CHAR () FOR BIT DATA'.
ij> --truncate, ok
values (cast ('1200' as char(1) for bit data));
ERROR 42846: Cannot convert types 'CHAR' to 'CHAR () FOR BIT DATA'.
ij> ------------------------------------------------
-- Casting
-----------------------------------------------
create table tab1 (
i integer,
s integer,
b integer,
l bigint,
c char(10),
v varchar(10),
d double precision,
r real,
dt date,
t time,
ts timestamp,
dc decimal);
0 rows inserted/updated/deleted
ij> insert into tab1 values(1,
cast(1 as smallint),
cast(1 as int),
cast(1 as bigint),
'char',
'varchar',
cast(1.1 as double precision),
cast(1.1 as real),
DATE('1990-10-10'),
TIME('11:11:11'),
TIMESTAMP('1990-11-11 11:11:11'),
1.1);
1 row inserted/updated/deleted
ij> insert into tab1 values (null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null);
1 row inserted/updated/deleted
ij> -- tab1 type -> its tab1 type
select cast(i as integer) from tab1;
1
-----------
1
NULL
ij> select cast(s as smallint) from tab1;
1
------
1
NULL
ij> select cast(l as bigint) from tab1;
1
--------------------
1
NULL
ij> select cast(c as char(10)) from tab1;
1
----------
char
NULL
ij> select cast(v as char varying(10)) from tab1;
1
----------
varchar
NULL
ij> select cast(d as double precision) from tab1;
1
------------------------
1.1
NULL
ij> select cast(r as float) from tab1;
1
------------------------
1.100000023841858
NULL
ij> select cast(dt as date) from tab1;
1
----------
1990-10-10
NULL
ij> select cast(t as time) from tab1;
1
--------
11:11:11
NULL
ij> select cast(ts as timestamp) from tab1;
1
-----------------------------
1990-11-11 11:11:11.0
NULL
ij> select cast(dc as dec) from tab1;
1
------
1
NULL
ij> -- try a few others where we try all conversions
select cast(i as integer) from tab1;
1
-----------
1
NULL
ij> select cast(i as smallint) from tab1;
1
------
1
NULL
ij> select cast(i as bigint) from tab1;
1
--------------------
1
NULL
ij> select cast(i as char(10)) from tab1;
1
----------
1
NULL
ij> select cast(i as char varying(10)) from tab1;
ERROR 42846: Cannot convert types 'INTEGER' to 'VARCHAR'.
ij> select cast(i as double precision) from tab1;
1
------------------------
1.0
NULL
ij> select cast(i as float) from tab1;
1
------------------------
1.0
NULL
ij> select cast(i as date) from tab1;
ERROR 42846: Cannot convert types 'INTEGER' to 'DATE'.
ij> select cast(i as time) from tab1;
ERROR 42846: Cannot convert types 'INTEGER' to 'TIME'.
ij> select cast(i as timestamp) from tab1;
ERROR 42846: Cannot convert types 'INTEGER' to 'TIMESTAMP'.
ij> select cast(i as dec) from tab1;
1
------
1
NULL
ij> -- try a few others
select cast(c as integer) from tab1;
1
-----------
ERROR 22018: Invalid character string format for type INTEGER.
ij> select cast(c as smallint) from tab1;
1
------
ERROR 22018: Invalid character string format for type SMALLINT.
ij> select cast(c as bigint) from tab1;
1
--------------------
ERROR 22018: Invalid character string format for type BIGINT.
ij> select cast(c as char(10)) from tab1;
1
----------
char
NULL
ij> select cast(c as char varying(10)) from tab1;
1
----------
char
NULL
ij> select cast(c as double precision) from tab1;
ERROR 42846: Cannot convert types 'CHAR' to 'DOUBLE'.
ij> select cast(c as float) from tab1;
ERROR 42846: Cannot convert types 'CHAR' to 'DOUBLE'.
ij> select cast(c as date) from tab1;
1
----------
ERROR 22007: The syntax of the string representation of a date/time value is incorrect.
ij> select cast(c as time) from tab1;
1
--------
ERROR 22007: The syntax of the string representation of a date/time value is incorrect.
ij> select cast(c as timestamp) from tab1;
1
-----------------------------
ERROR 22007: The syntax of the string representation of a date/time value is incorrect.
ij> select cast(c as dec) from tab1;
1
------
ERROR 22018: Invalid character string format for type DECIMAL.
ij> select cast(t as integer) from tab1;
ERROR 42846: Cannot convert types 'TIME' to 'INTEGER'.
ij> select cast(t as smallint) from tab1;
ERROR 42846: Cannot convert types 'TIME' to 'SMALLINT'.
ij> select cast(t as bigint) from tab1;
ERROR 42846: Cannot convert types 'TIME' to 'BIGINT'.
ij> select cast(t as char(10)) from tab1;
1
----------
11:11:11
NULL
ij> select cast(t as char varying(10)) from tab1;
1
----------
11:11:11
NULL
ij> select cast(t as double precision) from tab1;
ERROR 42846: Cannot convert types 'TIME' to 'DOUBLE'.
ij> select cast(t as float) from tab1;
ERROR 42846: Cannot convert types 'TIME' to 'DOUBLE'.
ij> select cast(t as date) from tab1;
ERROR 42846: Cannot convert types 'TIME' to 'DATE'.
ij> select cast(t as time) from tab1;
1
--------
11:11:11
NULL
ij> select cast(t as dec) from tab1;
ERROR 42846: Cannot convert types 'TIME' to 'DECIMAL'.
ij> drop table tab1;
0 rows inserted/updated/deleted
ij> ---------------------------------------------------------------
-- Other Tests
---------------------------------------------------------------
autocommit off;
ij> -- create tables
create table t1 (bt char(1) for bit data, btv varchar(1) for bit data,
c char(30), d double precision, i int, r real,
s smallint, dc decimal(18), num numeric(18),
dt date, t time, ts timestamp, v varchar(30),
lvc long varchar);
0 rows inserted/updated/deleted
ij> create table strings(c30 char(30));
0 rows inserted/updated/deleted
ij> -- we need a 1 row table with date/time columns because of problems
-- with single quotes in using 'values DATE('')'
create table temporal_values (dt date, t time, ts timestamp);
0 rows inserted/updated/deleted
ij> insert into temporal_values values(DATE('9876-5-4'), TIME('1:02:34'),
TIMESTAMP('9876-5-4 1:02:34'));
1 row inserted/updated/deleted
ij> -- negative
-- pass wrong type for parameter
prepare a1 as 'values cast(? as smallint)';
ij> execute a1 using 'values 1';
1
------
1
ij> -- uninitialized parameter
values cast(? as int);
ERROR 07000: At least one parameter to the current statement is uninitialized.
ij> -- positive
-- test casting null to all builtin types
insert into t1 (bt) values cast(null as char(1) for bit data);
1 row inserted/updated/deleted
ij> insert into t1 (btv) values cast(null as varchar(1) for bit data);
1 row inserted/updated/deleted
ij> insert into t1 (c) values cast(null as char(30));
1 row inserted/updated/deleted
ij> insert into t1 (d) values cast(null as double precision);
1 row inserted/updated/deleted
ij> insert into t1 (i) values cast(null as int);
1 row inserted/updated/deleted
ij> insert into t1 (r) values cast(null as real);
1 row inserted/updated/deleted
ij> insert into t1 (s) values cast(null as smallint);
1 row inserted/updated/deleted
ij> insert into t1 (dc) values cast(null as decimal);
1 row inserted/updated/deleted
ij> insert into t1 (num) values cast(null as numeric);
1 row inserted/updated/deleted
ij> insert into t1 (dt) values cast(null as date);
1 row inserted/updated/deleted
ij> insert into t1 (t) values cast(null as time);
1 row inserted/updated/deleted
ij> insert into t1 (ts) values cast(null as timestamp);
1 row inserted/updated/deleted
ij> insert into t1 (v) values cast(null as varchar(30));
1 row inserted/updated/deleted
ij> insert into t1 (lvc) values cast(null as long varchar);
1 row inserted/updated/deleted
ij> -- expect 10 rows of nulls
select * from t1;
BT |BTV |C |D |I |R |S |DC |NUM |DT |T |TS |V |LVC
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NULL|NULL|NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL
NULL|NULL|NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL
NULL|NULL|NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL
NULL|NULL|NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL
NULL|NULL|NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL
NULL|NULL|NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL
NULL|NULL|NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL
NULL|NULL|NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL
NULL|NULL|NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL
NULL|NULL|NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL
NULL|NULL|NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL
NULL|NULL|NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL
NULL|NULL|NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL
NULL|NULL|NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL
ij> -- make sure casting works correctly on nulls
select cast (bt as char(1) for bit data) from t1;
1
----
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
ij> select cast (btv as varchar(1) for bit data) from t1;
1
----
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
ij> select cast (c as char(30)) from t1;
1
------------------------------
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
ij> select cast (d as double precision) from t1;
1
------------------------
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
ij> select cast (r as real) from t1;
1
---------------
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
ij> select cast (s as smallint) from t1;
1
------
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
ij> select cast (num as numeric) from t1;
1
------
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
ij> select cast (dc as decimal) from t1;
1
------
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
ij> select cast (dt as date) from t1;
1
----------
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
ij> select cast (t as time) from t1;
1
--------
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
ij> select cast (ts as timestamp) from t1;
1
-----------------------------
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
ij> select cast (v as varchar(30)) from t1;
1
------------------------------
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
ij> select cast (lvc as long varchar) from t1;
1
--------------------------------------------------------------------------------------------------------------------------------
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
ij> -- clean up t1
delete from t1;
14 rows inserted/updated/deleted
ij> -- test casting ? to all builtin types
prepare q1 as 'insert into t1 (bt) values cast(? as char(1) for bit data)';
ij> prepare q2 as 'insert into t1 (btv) values cast(? as varchar(1) for bit data)';
ij> prepare q4 as 'insert into t1 (c) values cast(? as char(30))';
ij> prepare q5 as 'insert into t1 (d) values cast(? as double precision)';
ij> prepare q6 as 'insert into t1 (i) values cast(? as int)';
ij> prepare q7 as 'insert into t1 (r) values cast(? as real)';
ij> prepare q8 as 'insert into t1 (s) values cast(? as smallint)';
ij> prepare q10 as 'insert into t1 (num) values cast(? as numeric(18))';
ij> prepare q11 as 'insert into t1 (dc) values cast(? as decimal(18))';
ij> prepare q12 as 'insert into t1 (dt) values cast(? as date)';
ij> prepare q13 as 'insert into t1 (t) values cast(? as time)';
ij> prepare q14 as 'insert into t1 (ts) values cast(? as timestamp)';
ij> prepare q15 as 'insert into t1 (v) values cast(? as varchar(30))';
ij> prepare q16 as 'insert into t1 (lvc) values cast(? as long varchar)';
ij> execute q1 using 'values X''aa''';
1 row inserted/updated/deleted
ij> execute q2 using 'values X''aa''';
1 row inserted/updated/deleted
ij> execute q4 using 'values char(123456)';
1 row inserted/updated/deleted
ij> execute q5 using 'values 123456.78e0';
1 row inserted/updated/deleted
ij> execute q6 using 'values 4321';
1 row inserted/updated/deleted
ij> -- bug 5421 - support db2 udb compatible built-in functions
execute q7 using 'values REAL(4321.01234)';
ERROR 42X80: VALUES clause must contain at least one element. Empty elements are not allowed.
ij> execute q8 using 'values SMALLINT(12321)';
1 row inserted/updated/deleted
ij> execute q10 using 'values 123456.78';
1 row inserted/updated/deleted
ij> execute q11 using 'values 123456.78';
1 row inserted/updated/deleted
ij> execute q12 using 'select dt from temporal_values';
1 row inserted/updated/deleted
ij> execute q13 using 'select t from temporal_values';
1 row inserted/updated/deleted
ij> execute q14 using 'select ts from temporal_values';
1 row inserted/updated/deleted
ij> execute q15 using 'values char(654321)';
1 row inserted/updated/deleted
ij> execute q16 using 'values char(987654)';
1 row inserted/updated/deleted
ij> select * from t1;
BT |BTV |C |D |I |R |S |DC |NUM |DT |T |TS |V |LVC
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
aa |NULL|NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL
NULL|aa |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL
NULL|NULL|123456 |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL
NULL|NULL|NULL |123456.78 |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL
NULL|NULL|NULL |NULL |4321 |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL
NULL|NULL|NULL |NULL |NULL |NULL |12321 |NULL |NULL |NULL |NULL |NULL |NULL |NULL
NULL|NULL|NULL |NULL |NULL |NULL |NULL |NULL |123456 |NULL |NULL |NULL |NULL |NULL
NULL|NULL|NULL |NULL |NULL |NULL |NULL |123456 |NULL |NULL |NULL |NULL |NULL |NULL
NULL|NULL|NULL |NULL |NULL |NULL |NULL |NULL |NULL |9876-05-04|NULL |NULL |NULL |NULL
NULL|NULL|NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |01:02:34|NULL |NULL |NULL
NULL|NULL|NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |9876-05-04 01:02:34.0 |NULL |NULL
NULL|NULL|NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |654321 |NULL
NULL|NULL|NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |987654
ij> -- clean up t1
delete from t1;
13 rows inserted/updated/deleted
ij> -- more ? tests
-- Truncation exception expected in non-parameter cases
-- RESOLVE, no truncation expected in parameter cases
-- where parameter value is not a string. This is
-- currently an "extension".
create table x(c1 char(1));
0 rows inserted/updated/deleted
ij> prepare param1 as 'insert into x values cast(? as char(1))';
ij> insert into x values cast('12' as char(1));
1 row inserted/updated/deleted
WARNING 01004: Data truncation
ij> execute param1 using 'values ''34''';
1 row inserted/updated/deleted
WARNING 01004: Data truncation
ij> select * from x;
C1
----
1
3
ij> delete from x;
2 rows inserted/updated/deleted
ij> insert into x values cast(12 as char(1));
ERROR 22001: A truncation error was encountered trying to shrink CHAR '12' to length 1.
ij> execute param1 using 'values 34';
1 row inserted/updated/deleted
WARNING 01004: Data truncation
ij> select * from x;
C1
----
3
ij> delete from x;
1 row inserted/updated/deleted
ij> insert into x values cast(time('12:12:12') as char(1));
ERROR 22001: A truncation error was encountered trying to shrink CHAR '12:12:12' to length 1.
ij> execute param1 using 'values time(''21:12:12'')';
1 row inserted/updated/deleted
WARNING 01004: Data truncation
ij> select * from x;
C1
----
2
ij> delete from x;
1 row inserted/updated/deleted
ij> drop table x;
0 rows inserted/updated/deleted
ij> -- method resolution tests
-- clean up the prepared statements
remove a1;
ij> remove q1;
ij> remove q2;
ij> remove q4;
ij> remove q5;
ij> remove q6;
ij> remove q7;
ij> remove q8;
ij> remove q10;
ij> remove q11;
ij> remove q12;
ij> remove q13;
ij> remove q14;
ij> remove q15;
ij> -- reset autocomiit
commit;
ij> autocommit on;
ij> -- bind time casting tests
-- negative
values cast('asdf' as smallint);
ERROR 22018: Invalid character string format for type SMALLINT.
ij> values cast('asdf' as int);
ERROR 22018: Invalid character string format for type INTEGER.
ij> values cast('asdf' as bigint);
ERROR 22018: Invalid character string format for type BIGINT.
ij> values cast('asdf' as real);
ERROR 42846: Cannot convert types 'CHAR' to 'REAL'.
ij> values cast('asdf' as double precision);
ERROR 42846: Cannot convert types 'CHAR' to 'DOUBLE'.
ij> values cast('asdf' as decimal(5,4));
1
-------
ERROR 22018: Invalid character string format for type DECIMAL.
ij> values cast('asdf' as date);
ERROR 22007: The syntax of the string representation of a date/time value is incorrect.
ij> values cast('asdf' as time);
ERROR 22007: The syntax of the string representation of a date/time value is incorrect.
ij> values cast('asdf' as timestamp);
ERROR 22007: The syntax of the string representation of a date/time value is incorrect.
ij> values cast('2999999999' as int);
ERROR 22003: The resulting value is outside the range for the data type INTEGER.
ij> values cast(2999999999 as int);
ERROR 22003: The resulting value is outside the range for the data type INTEGER.
ij> values cast('99999' as smallint);
ERROR 22003: The resulting value is outside the range for the data type SHORT.
ij> values cast(99999 as smallint);
ERROR 22003: The resulting value is outside the range for the data type SMALLINT.
ij> values cast(cast(99 as int) as char);
ERROR 22001: A truncation error was encountered trying to shrink CHAR '99' to length 1.
ij> values cast(cast(-9 as int) as char);
ERROR 22001: A truncation error was encountered trying to shrink CHAR '-9' to length 1.
ij> values cast(cast(99 as smallint) as char);
ERROR 22001: A truncation error was encountered trying to shrink CHAR '99' to length 1.
ij> values cast(cast(99 as bigint) as char);
ERROR 22001: A truncation error was encountered trying to shrink CHAR '99' to length 1.
ij> values cast(cast(9.9 as real) as char);
ERROR 42846: Cannot convert types 'REAL' to 'CHAR'.
ij> values cast(cast(9.9 as double precision) as char);
ERROR 42846: Cannot convert types 'DOUBLE' to 'CHAR'.
ij> -- positive
values cast(1 as int);
1
-----------
1
ij> values cast(1 as smallint);
1
------
1
ij> values cast(1 as bigint);
1
--------------------
1
ij> values cast(1 as char);
1
-
1
ij> values cast('true' as char(4));
1
----
true
ij> -- drop the tables
drop table t1;
0 rows inserted/updated/deleted
ij> drop table temporal_values;
0 rows inserted/updated/deleted
ij> drop table strings;
0 rows inserted/updated/deleted
ij> -- ISO time/timestamp formats
values (cast ('08.08.08' as TIME));
1
--------
08:08:08
ij> values (cast ('2001-01-01-08.08.08.123456' as TIMESTAMP));
1
-----------------------------
2001-01-01 08:08:08.123456
ij> -- char, varchar
values (char('abcde', 5));
1
-----
abcde
ij> values (char('abcde', 6));
1
------
abcde
ij> values (char('abcde', 4));
1
----
abcd
WARNING 01004: Data truncation
ij> values (varchar('', 20));
1
--------------------
ij> create table t1 (c5 date, c6 time, c7 timestamp, c8 char(5), c9 varchar(5));
0 rows inserted/updated/deleted
ij> insert into t1 values ('2003-09-10', '16:44:02', '2003-09-08 12:20:30.123456', 'abc', 'abcde');
1 row inserted/updated/deleted
ij> insert into t1 values ('2005-09-10', '18.44.02', '2004-09-08-12.20.30.123456', 'cba', 'c');
1 row inserted/updated/deleted
ij> select char(c5), char(c6), char(c7), char(c8), char(c9) from t1;
1 |2 |3 |4 |5
-------------------------------------------------------------
2003-09-10|16:44:02|2003-09-08 12:20:30.123456 |abc |abcde
2005-09-10|18:44:02|2004-09-08 12:20:30.123456 |cba |c
ij> select varchar(c5), varchar(c6), varchar(c7), varchar(c8), varchar(c9) from t1;
1 |2 |3 |4 |5
-------------------------------------------------------------
2003-09-10|16:44:02|2003-09-08 12:20:30.123456 |abc |abcde
2005-09-10|18:44:02|2004-09-08 12:20:30.123456 |cba |c
ij> select char(c8, 10), varchar(c9, 9) from t1;
1 |2
--------------------
abc |abcde
cba |c
ij> select { fn concat(c8, char(c8)) } from t1;
1
----------
abc abc
cba cba
ij> select { fn concat(c8, varchar(c9)) } from t1;
1
----------
abc abcde
cba c
ij> select { fn concat(varchar(c9, 20), char(c8, 8)) } from t1;
1
----------------------------
abcdeabc
ccba
ij> select { fn concat(char(c9, 20), varchar(c8, 8)) } from t1;
1
----------------------------
abcde abc
c cba
ij> -- clean up
drop table t1;
0 rows inserted/updated/deleted
ij> -- bug 5421 - support db2 udb compatible built-in functions
values CHAR(INT(67890));
1
-----------
67890
ij> values CHAR(INTEGER(12345));
1
-----------
12345
ij> values CHAR(DEC(67.21,4,2));
ERROR 42X01: Syntax error: Encountered "DEC" at line 1, column 13.
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 CHAR(DECIMAL(67.10,4,2));
ERROR 42X01: Syntax error: Encountered "DECIMAL" at line 1, column 13.
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 CHAR(DOUBLE(5.55));
1
-----------------------------------------------------
5.55
ij> values CHAR(DOUBLE_PRECISION(5.555));
ERROR 42Y03: 'DOUBLE_PRECISION' is not recognized as a function or procedure.
ij> values CHAR(BIGINT(1));
1
--------------------
1
ij> values CHAR(BIGINT(-1));
1
--------------------
-1
ij> values LENGTH(CAST('hello' AS CHAR(25)));
1
-----------
25
ij> values LENGTH(CAST('hello' AS VARCHAR(25)));
1
-----------
5
ij> values LENGTH(CAST('hello' AS LONG VARCHAR));
1
-----------
5
ij> values CAST (X'03' as CHAR(5) for bit data);
1
----------
0320202020
ij> values CAST (X'04' as VARCHAR(5) for bit data);
1
----------
04
ij> values CAST (X'05' as LONG VARCHAR for bit data);
1
--------------------------------------------------------------------------------------------------------------------------------
05
ij> -- clean up
drop table t1;
ERROR 42Y55: 'DROP TABLE' cannot be performed on 'T1' because it does not exist.
ij> -- test some casting from a java type to standard SQL types.
-- should all fail at runtime
select cast (aliasinfo as BOOLEAN) from sys.sysaliases;
1
-----
ERROR XCL12: An attempt was made to put a data value of type 'org.apache.derby.catalog.types.RoutineAliasInfo' into a data value of type 'BOOLEAN'.
ij> select cast (aliasinfo as SMALLINT) from sys.sysaliases;
1
------
ERROR XCL12: An attempt was made to put a data value of type 'org.apache.derby.catalog.types.RoutineAliasInfo' into a data value of type 'SMALLINT'.
ij> select cast (aliasinfo as INTEGER) from sys.sysaliases;
1
-----------
ERROR XCL12: An attempt was made to put a data value of type 'org.apache.derby.catalog.types.RoutineAliasInfo' into a data value of type 'INTEGER'.
ij> select cast (aliasinfo as BIGINT) from sys.sysaliases;
1
--------------------
ERROR XCL12: An attempt was made to put a data value of type 'org.apache.derby.catalog.types.RoutineAliasInfo' into a data value of type 'BIGINT'.
ij> select cast (aliasinfo as REAL) from sys.sysaliases;
1
---------------
ERROR XCL12: An attempt was made to put a data value of type 'org.apache.derby.catalog.types.RoutineAliasInfo' into a data value of type 'REAL'.
ij> select cast (aliasinfo as DOUBLE) from sys.sysaliases;
1
------------------------
ERROR XCL12: An attempt was made to put a data value of type 'org.apache.derby.catalog.types.RoutineAliasInfo' into a data value of type 'DOUBLE'.
ij> select cast (aliasinfo as DECIMAL(5,4)) from sys.sysaliases;
1
-------
ERROR XCL12: An attempt was made to put a data value of type 'org.apache.derby.catalog.types.RoutineAliasInfo' into a data value of type 'DECIMAL'.
ij> select cast (aliasinfo as CHAR(30) FOR BIT DATA) from sys.sysaliases;
1
------------------------------------------------------------
ERROR XCL12: An attempt was made to put a data value of type 'org.apache.derby.catalog.types.RoutineAliasInfo' into a data value of type 'CHAR () FOR BIT DATA'.
ij> select cast (aliasinfo as VARCHAR(30) FOR BIT DATA) from sys.sysaliases;
1
------------------------------------------------------------
ERROR XCL12: An attempt was made to put a data value of type 'org.apache.derby.catalog.types.RoutineAliasInfo' into a data value of type 'VARCHAR () FOR BIT DATA'.
ij> select cast (aliasinfo as LONG VARCHAR FOR BIT DATA) from sys.sysaliases;
1
--------------------------------------------------------------------------------------------------------------------------------
ERROR XCL12: An attempt was made to put a data value of type 'org.apache.derby.catalog.types.RoutineAliasInfo' into a data value of type 'LONG VARCHAR FOR BIT DATA'.
ij> select cast (aliasinfo as BLOB) from sys.sysaliases;
1
--------------------------------------------------------------------------------------------------------------------------------
ERROR XCL12: An attempt was made to put a data value of type 'org.apache.derby.catalog.types.RoutineAliasInfo' into a data value of type 'BLOB'.
ij> select cast (aliasinfo as CLOB) from sys.sysaliases where CAST(alias AS VARCHAR(128)) = 'INSTALL_JAR';
1
--------------------------------------------------------------------------------------------------------------------------------
ERROR XCL12: An attempt was made to put a data value of type 'org.apache.derby.catalog.types.RoutineAliasInfo' into a data value of type 'CLOB'.
ij> -- Java casts to character types excluding CLOB are supported using Object.toString
select cast (aliasinfo as CHAR(240)) from sys.sysaliases where CAST(alias AS VARCHAR(128)) = 'INSTALL_JAR';
1
--------------------------------------------------------------------------------------------------------------------------------
INSTALL_JAR(IN "URL" VARCHAR(256),IN "JAR" VARCHAR(128),IN "DEPLOY" INTEGER) LANGUAGE JAVA PARAMETER STYLE JAVA MODIFIES SQL DA&
ij> select cast (aliasinfo as VARCHAR(240)) from sys.sysaliases where CAST(alias AS VARCHAR(128)) = 'INSTALL_JAR';
1
--------------------------------------------------------------------------------------------------------------------------------
INSTALL_JAR(IN "URL" VARCHAR(256),IN "JAR" VARCHAR(128),IN "DEPLOY" INTEGER) LANGUAGE JAVA PARAMETER STYLE JAVA MODIFIES SQL DA&
ij> select cast (aliasinfo as LONG VARCHAR) from sys.sysaliases where CAST(alias AS VARCHAR(128)) = 'INSTALL_JAR';
1
--------------------------------------------------------------------------------------------------------------------------------
INSTALL_JAR(IN "URL" VARCHAR(256),IN "JAR" VARCHAR(128),IN "DEPLOY" INTEGER) LANGUAGE JAVA PARAMETER STYLE JAVA MODIFIES SQL DA&
ij>