mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
f197991f41
A lot of small fixes and new test cases. client/mysqlbinlog.cc: Cast removed client/mysqltest.cc: Added missing DBUG_RETURN include/my_pthread.h: set_timespec_time_nsec() now only takes one argument mysql-test/t/date_formats.test: Remove --disable_ps_protocl as now also ps supports microseconds mysys/my_uuid.c: Changed to use my_interval_timer() instead of my_getsystime() mysys/waiting_threads.c: Changed to use my_hrtime() sql/field.h: Added bool special_const_compare() for fields that may convert values before compare (like year) sql/field_conv.cc: Added test to get optimal copying of identical temporal values. sql/item.cc: Return that item_int is equal if it's positive, even if unsigned flag is different. Fixed Item_cache_str::save_in_field() to have identical null check as other similar functions Added proper NULL check to Item_cache_int::save_in_field() sql/item_cmpfunc.cc: Don't call convert_constant_item() if there is nothing that is worth converting. Simplified test when years should be converted sql/item_sum.cc: Mark cache values in Item_sum_hybrid as not constants to ensure they are not replaced by other cache values in compare_datetime() sql/item_timefunc.cc: Changed sec_to_time() to take a my_decimal argument to ensure we don't loose any sub seconds. Added Item_temporal_func::get_time() (This simplifies some things) sql/mysql_priv.h: Added Lazy_string_decimal() sql/mysqld.cc: Added my_decimal constants max_seconds_for_time_type, time_second_part_factor sql/table.cc: Changed expr_arena to be of type CONVENTIONAL_EXECUTION to ensure that we don't loose any items that are created by fix_fields() sql/tztime.cc: TIME_to_gmt_sec() now sets *in_dst_time_gap in case of errors This is needed to be able to detect if timestamp is 0 storage/maria/lockman.c: Changed from my_getsystime() to set_timespec_time_nsec() storage/maria/ma_loghandler.c: Changed from my_getsystime() to my_hrtime() storage/maria/ma_recovery.c: Changed from my_getsystime() to mmicrosecond_interval_timer() storage/maria/unittest/trnman-t.c: Changed from my_getsystime() to mmicrosecond_interval_timer() storage/xtradb/handler/ha_innodb.cc: Added support for new time,datetime and timestamp unittest/mysys/thr_template.c: my_getsystime() -> my_interval_timer() unittest/mysys/waiting_threads-t.c: my_getsystime() -> my_interval_timer()
1230 lines
32 KiB
Text
1230 lines
32 KiB
Text
DROP PROCEDURE IF EXISTS sp_vars_check_dflt;
|
|
DROP PROCEDURE IF EXISTS sp_vars_check_assignment;
|
|
DROP FUNCTION IF EXISTS sp_vars_check_ret1;
|
|
DROP FUNCTION IF EXISTS sp_vars_check_ret2;
|
|
DROP FUNCTION IF EXISTS sp_vars_check_ret3;
|
|
DROP FUNCTION IF EXISTS sp_vars_check_ret4;
|
|
DROP FUNCTION IF EXISTS sp_vars_div_zero;
|
|
SET @@sql_mode = 'ansi';
|
|
CREATE PROCEDURE sp_vars_check_dflt()
|
|
BEGIN
|
|
DECLARE v1 TINYINT DEFAULT 1e200;
|
|
DECLARE v1u TINYINT UNSIGNED DEFAULT 1e200;
|
|
DECLARE v2 TINYINT DEFAULT -1e200;
|
|
DECLARE v2u TINYINT UNSIGNED DEFAULT -1e200;
|
|
DECLARE v3 TINYINT DEFAULT 300;
|
|
DECLARE v3u TINYINT UNSIGNED DEFAULT 300;
|
|
DECLARE v4 TINYINT DEFAULT -300;
|
|
DECLARE v4u TINYINT UNSIGNED DEFAULT -300;
|
|
DECLARE v5 TINYINT DEFAULT 10 * 10 * 10;
|
|
DECLARE v5u TINYINT UNSIGNED DEFAULT 10 * 10 * 10;
|
|
DECLARE v6 TINYINT DEFAULT -10 * 10 * 10;
|
|
DECLARE v6u TINYINT UNSIGNED DEFAULT -10 * 10 * 10;
|
|
DECLARE v7 TINYINT DEFAULT '10';
|
|
DECLARE v8 TINYINT DEFAULT '10 ';
|
|
DECLARE v9 TINYINT DEFAULT ' 10 ';
|
|
DECLARE v10 TINYINT DEFAULT 'String 10 ';
|
|
DECLARE v11 TINYINT DEFAULT 'String10';
|
|
DECLARE v12 TINYINT DEFAULT '10 String';
|
|
DECLARE v13 TINYINT DEFAULT '10String';
|
|
DECLARE v14 TINYINT DEFAULT concat('10', ' ');
|
|
DECLARE v15 TINYINT DEFAULT concat(' ', '10');
|
|
DECLARE v16 TINYINT DEFAULT concat('Hello, ', 'world');
|
|
DECLARE v17 DECIMAL(64, 2) DEFAULT 12;
|
|
DECLARE v18 DECIMAL(64, 2) DEFAULT 12.123;
|
|
DECLARE v19 DECIMAL(64, 2) DEFAULT 11 + 1;
|
|
DECLARE v20 DECIMAL(64, 2) DEFAULT 12 + 0.123;
|
|
SELECT v1, v1u, v2, v2u, v3, v3u, v4, v4u;
|
|
SELECT v5, v5u, v6, v6u;
|
|
SELECT v7, v8, v9, v10, v11, v12, v13, v14, v15, v16;
|
|
SELECT v17, v18, v19, v20;
|
|
END|
|
|
CREATE PROCEDURE sp_vars_check_assignment()
|
|
BEGIN
|
|
DECLARE i1, i2, i3, i4 TINYINT;
|
|
DECLARE u1, u2, u3, u4 TINYINT UNSIGNED;
|
|
DECLARE d1, d2, d3 DECIMAL(64, 2);
|
|
SET i1 = 1e200;
|
|
SET i2 = -1e200;
|
|
SET i3 = 300;
|
|
SET i4 = -300;
|
|
SELECT i1, i2, i3, i4;
|
|
SET i1 = 10 * 10 * 10;
|
|
SET i2 = -10 * 10 * 10;
|
|
SET i3 = sign(10 * 10) * 10 * 20;
|
|
SET i4 = sign(-10 * 10) * -10 * 20;
|
|
SELECT i1, i2, i3, i4;
|
|
SET u1 = 1e200;
|
|
SET u2 = -1e200;
|
|
SET u3 = 300;
|
|
SET u4 = -300;
|
|
SELECT u1, u2, u3, u4;
|
|
SET u1 = 10 * 10 * 10;
|
|
SET u2 = -10 * 10 * 10;
|
|
SET u3 = sign(10 * 10) * 10 * 20;
|
|
SET u4 = sign(-10 * 10) * -10 * 20;
|
|
SELECT u1, u2, u3, u4;
|
|
SET d1 = 1234;
|
|
SET d2 = 1234.12;
|
|
SET d3 = 1234.1234;
|
|
SELECT d1, d2, d3;
|
|
SET d1 = 12 * 100 + 34;
|
|
SET d2 = 12 * 100 + 34 + 0.12;
|
|
SET d3 = 12 * 100 + 34 + 0.1234;
|
|
SELECT d1, d2, d3;
|
|
END|
|
|
CREATE FUNCTION sp_vars_check_ret1() RETURNS TINYINT
|
|
BEGIN
|
|
RETURN 1e200;
|
|
END|
|
|
CREATE FUNCTION sp_vars_check_ret2() RETURNS TINYINT
|
|
BEGIN
|
|
RETURN 10 * 10 * 10;
|
|
END|
|
|
CREATE FUNCTION sp_vars_check_ret3() RETURNS TINYINT
|
|
BEGIN
|
|
RETURN 'Hello, world';
|
|
END|
|
|
CREATE FUNCTION sp_vars_check_ret4() RETURNS DECIMAL(64, 2)
|
|
BEGIN
|
|
RETURN 12 * 10 + 34 + 0.1234;
|
|
END|
|
|
CREATE FUNCTION sp_vars_div_zero() RETURNS INTEGER
|
|
BEGIN
|
|
DECLARE div_zero INTEGER;
|
|
SELECT 1/0 INTO div_zero;
|
|
RETURN div_zero;
|
|
END|
|
|
|
|
---------------------------------------------------------------
|
|
Calling the routines, created in ANSI mode.
|
|
---------------------------------------------------------------
|
|
|
|
CALL sp_vars_check_dflt();
|
|
v1 v1u v2 v2u v3 v3u v4 v4u
|
|
127 255 -128 0 127 255 -128 0
|
|
v5 v5u v6 v6u
|
|
127 255 -128 0
|
|
v7 v8 v9 v10 v11 v12 v13 v14 v15 v16
|
|
10 10 10 0 0 10 10 10 10 0
|
|
v17 v18 v19 v20
|
|
12.00 12.12 12.00 12.12
|
|
Warnings:
|
|
Warning 1264 Out of range value for column 'v1' at row 1
|
|
Warning 1264 Out of range value for column 'v1u' at row 1
|
|
Warning 1264 Out of range value for column 'v2' at row 1
|
|
Warning 1264 Out of range value for column 'v2u' at row 1
|
|
Warning 1264 Out of range value for column 'v3' at row 1
|
|
Warning 1264 Out of range value for column 'v3u' at row 1
|
|
Warning 1264 Out of range value for column 'v4' at row 1
|
|
Warning 1264 Out of range value for column 'v4u' at row 1
|
|
Warning 1264 Out of range value for column 'v5' at row 1
|
|
Warning 1264 Out of range value for column 'v5u' at row 1
|
|
Warning 1264 Out of range value for column 'v6' at row 1
|
|
Warning 1264 Out of range value for column 'v6u' at row 1
|
|
Warning 1366 Incorrect integer value: 'String 10 ' for column 'v10' at row 1
|
|
Warning 1366 Incorrect integer value: 'String10' for column 'v11' at row 1
|
|
Warning 1265 Data truncated for column 'v12' at row 1
|
|
Warning 1265 Data truncated for column 'v13' at row 1
|
|
Warning 1366 Incorrect integer value: 'Hello, world' for column 'v16' at row 1
|
|
Note 1265 Data truncated for column 'v18' at row 1
|
|
Note 1265 Data truncated for column 'v20' at row 1
|
|
CALL sp_vars_check_assignment();
|
|
i1 i2 i3 i4
|
|
127 -128 127 -128
|
|
i1 i2 i3 i4
|
|
127 -128 127 127
|
|
u1 u2 u3 u4
|
|
255 0 255 0
|
|
u1 u2 u3 u4
|
|
255 0 200 200
|
|
d1 d2 d3
|
|
1234.00 1234.12 1234.12
|
|
d1 d2 d3
|
|
1234.00 1234.12 1234.12
|
|
Warnings:
|
|
Warning 1264 Out of range value for column 'i1' at row 1
|
|
Warning 1264 Out of range value for column 'i2' at row 1
|
|
Warning 1264 Out of range value for column 'i3' at row 1
|
|
Warning 1264 Out of range value for column 'i4' at row 1
|
|
Warning 1264 Out of range value for column 'i1' at row 1
|
|
Warning 1264 Out of range value for column 'i2' at row 1
|
|
Warning 1264 Out of range value for column 'i3' at row 1
|
|
Warning 1264 Out of range value for column 'i4' at row 1
|
|
Warning 1264 Out of range value for column 'u1' at row 1
|
|
Warning 1264 Out of range value for column 'u2' at row 1
|
|
Warning 1264 Out of range value for column 'u3' at row 1
|
|
Warning 1264 Out of range value for column 'u4' at row 1
|
|
Warning 1264 Out of range value for column 'u1' at row 1
|
|
Warning 1264 Out of range value for column 'u2' at row 1
|
|
Note 1265 Data truncated for column 'd3' at row 1
|
|
Note 1265 Data truncated for column 'd3' at row 1
|
|
SELECT sp_vars_check_ret1();
|
|
sp_vars_check_ret1()
|
|
127
|
|
Warnings:
|
|
Warning 1264 Out of range value for column 'sp_vars_check_ret1()' at row 1
|
|
SELECT sp_vars_check_ret2();
|
|
sp_vars_check_ret2()
|
|
127
|
|
Warnings:
|
|
Warning 1264 Out of range value for column 'sp_vars_check_ret2()' at row 1
|
|
SELECT sp_vars_check_ret3();
|
|
sp_vars_check_ret3()
|
|
0
|
|
Warnings:
|
|
Warning 1366 Incorrect integer value: 'Hello, world' for column 'sp_vars_check_ret3()' at row 1
|
|
SELECT sp_vars_check_ret4();
|
|
sp_vars_check_ret4()
|
|
154.12
|
|
Warnings:
|
|
Note 1265 Data truncated for column 'sp_vars_check_ret4()' at row 1
|
|
SELECT sp_vars_div_zero();
|
|
sp_vars_div_zero()
|
|
NULL
|
|
SET @@sql_mode = 'traditional';
|
|
|
|
---------------------------------------------------------------
|
|
Calling in TRADITIONAL mode the routines, created in ANSI mode.
|
|
---------------------------------------------------------------
|
|
|
|
CALL sp_vars_check_dflt();
|
|
v1 v1u v2 v2u v3 v3u v4 v4u
|
|
127 255 -128 0 127 255 -128 0
|
|
v5 v5u v6 v6u
|
|
127 255 -128 0
|
|
v7 v8 v9 v10 v11 v12 v13 v14 v15 v16
|
|
10 10 10 0 0 10 10 10 10 0
|
|
v17 v18 v19 v20
|
|
12.00 12.12 12.00 12.12
|
|
Warnings:
|
|
Warning 1264 Out of range value for column 'v1' at row 1
|
|
Warning 1264 Out of range value for column 'v1u' at row 1
|
|
Warning 1264 Out of range value for column 'v2' at row 1
|
|
Warning 1264 Out of range value for column 'v2u' at row 1
|
|
Warning 1264 Out of range value for column 'v3' at row 1
|
|
Warning 1264 Out of range value for column 'v3u' at row 1
|
|
Warning 1264 Out of range value for column 'v4' at row 1
|
|
Warning 1264 Out of range value for column 'v4u' at row 1
|
|
Warning 1264 Out of range value for column 'v5' at row 1
|
|
Warning 1264 Out of range value for column 'v5u' at row 1
|
|
Warning 1264 Out of range value for column 'v6' at row 1
|
|
Warning 1264 Out of range value for column 'v6u' at row 1
|
|
Warning 1366 Incorrect integer value: 'String 10 ' for column 'v10' at row 1
|
|
Warning 1366 Incorrect integer value: 'String10' for column 'v11' at row 1
|
|
Warning 1265 Data truncated for column 'v12' at row 1
|
|
Warning 1265 Data truncated for column 'v13' at row 1
|
|
Warning 1366 Incorrect integer value: 'Hello, world' for column 'v16' at row 1
|
|
Note 1265 Data truncated for column 'v18' at row 1
|
|
Note 1265 Data truncated for column 'v20' at row 1
|
|
CALL sp_vars_check_assignment();
|
|
i1 i2 i3 i4
|
|
127 -128 127 -128
|
|
i1 i2 i3 i4
|
|
127 -128 127 127
|
|
u1 u2 u3 u4
|
|
255 0 255 0
|
|
u1 u2 u3 u4
|
|
255 0 200 200
|
|
d1 d2 d3
|
|
1234.00 1234.12 1234.12
|
|
d1 d2 d3
|
|
1234.00 1234.12 1234.12
|
|
Warnings:
|
|
Warning 1264 Out of range value for column 'i1' at row 1
|
|
Warning 1264 Out of range value for column 'i2' at row 1
|
|
Warning 1264 Out of range value for column 'i3' at row 1
|
|
Warning 1264 Out of range value for column 'i4' at row 1
|
|
Warning 1264 Out of range value for column 'i1' at row 1
|
|
Warning 1264 Out of range value for column 'i2' at row 1
|
|
Warning 1264 Out of range value for column 'i3' at row 1
|
|
Warning 1264 Out of range value for column 'i4' at row 1
|
|
Warning 1264 Out of range value for column 'u1' at row 1
|
|
Warning 1264 Out of range value for column 'u2' at row 1
|
|
Warning 1264 Out of range value for column 'u3' at row 1
|
|
Warning 1264 Out of range value for column 'u4' at row 1
|
|
Warning 1264 Out of range value for column 'u1' at row 1
|
|
Warning 1264 Out of range value for column 'u2' at row 1
|
|
Note 1265 Data truncated for column 'd3' at row 1
|
|
Note 1265 Data truncated for column 'd3' at row 1
|
|
SELECT sp_vars_check_ret1();
|
|
sp_vars_check_ret1()
|
|
127
|
|
Warnings:
|
|
Warning 1264 Out of range value for column 'sp_vars_check_ret1()' at row 1
|
|
SELECT sp_vars_check_ret2();
|
|
sp_vars_check_ret2()
|
|
127
|
|
Warnings:
|
|
Warning 1264 Out of range value for column 'sp_vars_check_ret2()' at row 1
|
|
SELECT sp_vars_check_ret3();
|
|
sp_vars_check_ret3()
|
|
0
|
|
Warnings:
|
|
Warning 1366 Incorrect integer value: 'Hello, world' for column 'sp_vars_check_ret3()' at row 1
|
|
SELECT sp_vars_check_ret4();
|
|
sp_vars_check_ret4()
|
|
154.12
|
|
Warnings:
|
|
Note 1265 Data truncated for column 'sp_vars_check_ret4()' at row 1
|
|
SELECT sp_vars_div_zero();
|
|
sp_vars_div_zero()
|
|
NULL
|
|
DROP PROCEDURE sp_vars_check_dflt;
|
|
DROP PROCEDURE sp_vars_check_assignment;
|
|
DROP FUNCTION sp_vars_check_ret1;
|
|
DROP FUNCTION sp_vars_check_ret2;
|
|
DROP FUNCTION sp_vars_check_ret3;
|
|
DROP FUNCTION sp_vars_check_ret4;
|
|
DROP FUNCTION sp_vars_div_zero;
|
|
CREATE PROCEDURE sp_vars_check_dflt()
|
|
BEGIN
|
|
DECLARE v1 TINYINT DEFAULT 1e200;
|
|
DECLARE v1u TINYINT UNSIGNED DEFAULT 1e200;
|
|
DECLARE v2 TINYINT DEFAULT -1e200;
|
|
DECLARE v2u TINYINT UNSIGNED DEFAULT -1e200;
|
|
DECLARE v3 TINYINT DEFAULT 300;
|
|
DECLARE v3u TINYINT UNSIGNED DEFAULT 300;
|
|
DECLARE v4 TINYINT DEFAULT -300;
|
|
DECLARE v4u TINYINT UNSIGNED DEFAULT -300;
|
|
DECLARE v5 TINYINT DEFAULT 10 * 10 * 10;
|
|
DECLARE v5u TINYINT UNSIGNED DEFAULT 10 * 10 * 10;
|
|
DECLARE v6 TINYINT DEFAULT -10 * 10 * 10;
|
|
DECLARE v6u TINYINT UNSIGNED DEFAULT -10 * 10 * 10;
|
|
DECLARE v7 TINYINT DEFAULT '10';
|
|
DECLARE v8 TINYINT DEFAULT '10 ';
|
|
DECLARE v9 TINYINT DEFAULT ' 10 ';
|
|
DECLARE v10 TINYINT DEFAULT 'String 10 ';
|
|
DECLARE v11 TINYINT DEFAULT 'String10';
|
|
DECLARE v12 TINYINT DEFAULT '10 String';
|
|
DECLARE v13 TINYINT DEFAULT '10String';
|
|
DECLARE v14 TINYINT DEFAULT concat('10', ' ');
|
|
DECLARE v15 TINYINT DEFAULT concat(' ', '10');
|
|
DECLARE v16 TINYINT DEFAULT concat('Hello, ', 'world');
|
|
DECLARE v17 DECIMAL(64, 2) DEFAULT 12;
|
|
DECLARE v18 DECIMAL(64, 2) DEFAULT 12.123;
|
|
DECLARE v19 DECIMAL(64, 2) DEFAULT 11 + 1;
|
|
DECLARE v20 DECIMAL(64, 2) DEFAULT 12 + 0.123;
|
|
SELECT v1, v1u, v2, v2u, v3, v3u, v4, v4u;
|
|
SELECT v5, v5u, v6, v6u;
|
|
SELECT v7, v8, v9, v10, v11, v12, v13, v14, v15, v16;
|
|
SELECT v17, v18, v19, v20;
|
|
END|
|
|
CREATE PROCEDURE sp_vars_check_assignment()
|
|
BEGIN
|
|
DECLARE i1, i2, i3, i4 TINYINT;
|
|
DECLARE u1, u2, u3, u4 TINYINT UNSIGNED;
|
|
DECLARE d1, d2, d3 DECIMAL(64, 2);
|
|
SET i1 = 1e200;
|
|
SET i2 = -1e200;
|
|
SET i3 = 300;
|
|
SET i4 = -300;
|
|
SELECT i1, i2, i3, i4;
|
|
SET i1 = 10 * 10 * 10;
|
|
SET i2 = -10 * 10 * 10;
|
|
SET i3 = sign(10 * 10) * 10 * 20;
|
|
SET i4 = sign(-10 * 10) * -10 * 20;
|
|
SELECT i1, i2, i3, i4;
|
|
SET u1 = 1e200;
|
|
SET u2 = -1e200;
|
|
SET u3 = 300;
|
|
SET u4 = -300;
|
|
SELECT u1, u2, u3, u4;
|
|
SET u1 = 10 * 10 * 10;
|
|
SET u2 = -10 * 10 * 10;
|
|
SET u3 = sign(10 * 10) * 10 * 20;
|
|
SET u4 = sign(-10 * 10) * -10 * 20;
|
|
SELECT u1, u2, u3, u4;
|
|
SET d1 = 1234;
|
|
SET d2 = 1234.12;
|
|
SET d3 = 1234.1234;
|
|
SELECT d1, d2, d3;
|
|
SET d1 = 12 * 100 + 34;
|
|
SET d2 = 12 * 100 + 34 + 0.12;
|
|
SET d3 = 12 * 100 + 34 + 0.1234;
|
|
SELECT d1, d2, d3;
|
|
END|
|
|
CREATE FUNCTION sp_vars_check_ret1() RETURNS TINYINT
|
|
BEGIN
|
|
RETURN 1e200;
|
|
END|
|
|
CREATE FUNCTION sp_vars_check_ret2() RETURNS TINYINT
|
|
BEGIN
|
|
RETURN 10 * 10 * 10;
|
|
END|
|
|
CREATE FUNCTION sp_vars_check_ret3() RETURNS TINYINT
|
|
BEGIN
|
|
RETURN 'Hello, world';
|
|
END|
|
|
CREATE FUNCTION sp_vars_check_ret4() RETURNS DECIMAL(64, 2)
|
|
BEGIN
|
|
RETURN 12 * 10 + 34 + 0.1234;
|
|
END|
|
|
CREATE FUNCTION sp_vars_div_zero() RETURNS INTEGER
|
|
BEGIN
|
|
DECLARE div_zero INTEGER;
|
|
SELECT 1/0 INTO div_zero;
|
|
RETURN div_zero;
|
|
END|
|
|
|
|
---------------------------------------------------------------
|
|
Calling the routines, created in TRADITIONAL mode.
|
|
---------------------------------------------------------------
|
|
|
|
CALL sp_vars_check_dflt();
|
|
ERROR 22003: Out of range value for column 'v1' at row 1
|
|
CALL sp_vars_check_assignment();
|
|
ERROR 22003: Out of range value for column 'i1' at row 1
|
|
SELECT sp_vars_check_ret1();
|
|
ERROR 22003: Out of range value for column 'sp_vars_check_ret1()' at row 1
|
|
SELECT sp_vars_check_ret2();
|
|
ERROR 22003: Out of range value for column 'sp_vars_check_ret2()' at row 1
|
|
SELECT sp_vars_check_ret3();
|
|
ERROR 22007: Incorrect integer value: 'Hello, world' for column 'sp_vars_check_ret3()' at row 1
|
|
SELECT sp_vars_check_ret4();
|
|
sp_vars_check_ret4()
|
|
154.12
|
|
Warnings:
|
|
Note 1265 Data truncated for column 'sp_vars_check_ret4()' at row 1
|
|
SELECT sp_vars_div_zero();
|
|
ERROR 22012: Division by 0
|
|
SET @@sql_mode = 'ansi';
|
|
DROP PROCEDURE sp_vars_check_dflt;
|
|
DROP PROCEDURE sp_vars_check_assignment;
|
|
DROP FUNCTION sp_vars_check_ret1;
|
|
DROP FUNCTION sp_vars_check_ret2;
|
|
DROP FUNCTION sp_vars_check_ret3;
|
|
DROP FUNCTION sp_vars_check_ret4;
|
|
DROP FUNCTION sp_vars_div_zero;
|
|
|
|
---------------------------------------------------------------
|
|
BIT data type tests
|
|
---------------------------------------------------------------
|
|
|
|
DROP PROCEDURE IF EXISTS p1;
|
|
CREATE PROCEDURE p1()
|
|
BEGIN
|
|
DECLARE v1 BIT;
|
|
DECLARE v2 BIT(1);
|
|
DECLARE v3 BIT(3) DEFAULT b'101';
|
|
DECLARE v4 BIT(64) DEFAULT 0x5555555555555555;
|
|
DECLARE v5 BIT(3);
|
|
DECLARE v6 BIT(64);
|
|
DECLARE v7 BIT(8) DEFAULT 128;
|
|
DECLARE v8 BIT(8) DEFAULT '128';
|
|
DECLARE v9 BIT(8) DEFAULT ' 128';
|
|
DECLARE v10 BIT(8) DEFAULT 'x 128';
|
|
SET v1 = v4;
|
|
SET v2 = 0;
|
|
SET v5 = v4; # check overflow
|
|
SET v6 = v3; # check padding
|
|
SELECT HEX(v1);
|
|
SELECT HEX(v2);
|
|
SELECT HEX(v3);
|
|
SELECT HEX(v4);
|
|
SELECT HEX(v5);
|
|
SELECT HEX(v6);
|
|
SELECT HEX(v7);
|
|
SELECT HEX(v8);
|
|
SELECT HEX(v9);
|
|
SELECT HEX(v10);
|
|
END|
|
|
CALL p1();
|
|
HEX(v1)
|
|
1
|
|
HEX(v2)
|
|
0
|
|
HEX(v3)
|
|
5
|
|
HEX(v4)
|
|
5555555555555555
|
|
HEX(v5)
|
|
7
|
|
HEX(v6)
|
|
5
|
|
HEX(v7)
|
|
80
|
|
HEX(v8)
|
|
FF
|
|
HEX(v9)
|
|
FF
|
|
HEX(v10)
|
|
FF
|
|
Warnings:
|
|
Warning 1264 Out of range value for column 'v8' at row 1
|
|
Warning 1264 Out of range value for column 'v9' at row 1
|
|
Warning 1264 Out of range value for column 'v10' at row 1
|
|
Warning 1264 Out of range value for column 'v1' at row 1
|
|
Warning 1264 Out of range value for column 'v5' at row 1
|
|
DROP PROCEDURE p1;
|
|
|
|
---------------------------------------------------------------
|
|
CASE expression tests.
|
|
---------------------------------------------------------------
|
|
|
|
DROP PROCEDURE IF EXISTS p1;
|
|
Warnings:
|
|
Note 1305 PROCEDURE p1 does not exist
|
|
DROP PROCEDURE IF EXISTS p2;
|
|
Warnings:
|
|
Note 1305 PROCEDURE p2 does not exist
|
|
DROP TABLE IF EXISTS t1;
|
|
Warnings:
|
|
Note 1051 Unknown table 't1'
|
|
CREATE TABLE t1(log_msg VARCHAR(1024));
|
|
CREATE PROCEDURE p1(arg VARCHAR(255))
|
|
BEGIN
|
|
INSERT INTO t1 VALUES('p1: step1');
|
|
CASE arg * 10
|
|
WHEN 10 * 10 THEN
|
|
INSERT INTO t1 VALUES('p1: case1: on 10');
|
|
WHEN 10 * 10 + 10 * 10 THEN
|
|
BEGIN
|
|
CASE arg / 10
|
|
WHEN 1 THEN
|
|
INSERT INTO t1 VALUES('p1: case1: case2: on 1');
|
|
WHEN 2 THEN
|
|
BEGIN
|
|
DECLARE i TINYINT DEFAULT 10;
|
|
WHILE i > 0 DO
|
|
INSERT INTO t1 VALUES(CONCAT('p1: case1: case2: loop: i: ', i));
|
|
CASE MOD(i, 2)
|
|
WHEN 0 THEN
|
|
INSERT INTO t1 VALUES('p1: case1: case2: loop: i is even');
|
|
WHEN 1 THEN
|
|
INSERT INTO t1 VALUES('p1: case1: case2: loop: i is odd');
|
|
ELSE
|
|
INSERT INTO t1 VALUES('p1: case1: case2: loop: ERROR');
|
|
END CASE;
|
|
SET i = i - 1;
|
|
END WHILE;
|
|
END;
|
|
ELSE
|
|
INSERT INTO t1 VALUES('p1: case1: case2: ERROR');
|
|
END CASE;
|
|
CASE arg
|
|
WHEN 10 THEN
|
|
INSERT INTO t1 VALUES('p1: case1: case3: on 10');
|
|
WHEN 20 THEN
|
|
INSERT INTO t1 VALUES('p1: case1: case3: on 20');
|
|
ELSE
|
|
INSERT INTO t1 VALUES('p1: case1: case3: ERROR');
|
|
END CASE;
|
|
END;
|
|
ELSE
|
|
INSERT INTO t1 VALUES('p1: case1: ERROR');
|
|
END CASE;
|
|
CASE arg * 10
|
|
WHEN 10 * 10 THEN
|
|
INSERT INTO t1 VALUES('p1: case4: on 10');
|
|
WHEN 10 * 10 + 10 * 10 THEN
|
|
BEGIN
|
|
CASE arg / 10
|
|
WHEN 1 THEN
|
|
INSERT INTO t1 VALUES('p1: case4: case5: on 1');
|
|
WHEN 2 THEN
|
|
BEGIN
|
|
DECLARE i TINYINT DEFAULT 10;
|
|
WHILE i > 0 DO
|
|
INSERT INTO t1 VALUES(CONCAT('p1: case4: case5: loop: i: ', i));
|
|
CASE MOD(i, 2)
|
|
WHEN 0 THEN
|
|
INSERT INTO t1 VALUES('p1: case4: case5: loop: i is even');
|
|
WHEN 1 THEN
|
|
INSERT INTO t1 VALUES('p1: case4: case5: loop: i is odd');
|
|
ELSE
|
|
INSERT INTO t1 VALUES('p1: case4: case5: loop: ERROR');
|
|
END CASE;
|
|
SET i = i - 1;
|
|
END WHILE;
|
|
END;
|
|
ELSE
|
|
INSERT INTO t1 VALUES('p1: case4: case5: ERROR');
|
|
END CASE;
|
|
CASE arg
|
|
WHEN 10 THEN
|
|
INSERT INTO t1 VALUES('p1: case4: case6: on 10');
|
|
WHEN 20 THEN
|
|
INSERT INTO t1 VALUES('p1: case4: case6: on 20');
|
|
ELSE
|
|
INSERT INTO t1 VALUES('p1: case4: case6: ERROR');
|
|
END CASE;
|
|
END;
|
|
ELSE
|
|
INSERT INTO t1 VALUES('p1: case4: ERROR');
|
|
END CASE;
|
|
END|
|
|
CREATE PROCEDURE p2()
|
|
BEGIN
|
|
DECLARE i TINYINT DEFAULT 3;
|
|
WHILE i > 0 DO
|
|
IF MOD(i, 2) = 0 THEN
|
|
SET @_test_session_var = 10;
|
|
ELSE
|
|
SET @_test_session_var = 'test';
|
|
END IF;
|
|
CASE @_test_session_var
|
|
WHEN 10 THEN
|
|
INSERT INTO t1 VALUES('p2: case: numerical type');
|
|
WHEN 'test' THEN
|
|
INSERT INTO t1 VALUES('p2: case: string type');
|
|
ELSE
|
|
INSERT INTO t1 VALUES('p2: case: ERROR');
|
|
END CASE;
|
|
SET i = i - 1;
|
|
END WHILE;
|
|
END|
|
|
CALL p1(10);
|
|
CALL p1(20);
|
|
CALL p2();
|
|
SELECT * FROM t1;
|
|
log_msg
|
|
p1: step1
|
|
p1: case1: on 10
|
|
p1: case4: on 10
|
|
p1: step1
|
|
p1: case1: case2: loop: i: 10
|
|
p1: case1: case2: loop: i is even
|
|
p1: case1: case2: loop: i: 9
|
|
p1: case1: case2: loop: i is odd
|
|
p1: case1: case2: loop: i: 8
|
|
p1: case1: case2: loop: i is even
|
|
p1: case1: case2: loop: i: 7
|
|
p1: case1: case2: loop: i is odd
|
|
p1: case1: case2: loop: i: 6
|
|
p1: case1: case2: loop: i is even
|
|
p1: case1: case2: loop: i: 5
|
|
p1: case1: case2: loop: i is odd
|
|
p1: case1: case2: loop: i: 4
|
|
p1: case1: case2: loop: i is even
|
|
p1: case1: case2: loop: i: 3
|
|
p1: case1: case2: loop: i is odd
|
|
p1: case1: case2: loop: i: 2
|
|
p1: case1: case2: loop: i is even
|
|
p1: case1: case2: loop: i: 1
|
|
p1: case1: case2: loop: i is odd
|
|
p1: case1: case3: on 20
|
|
p1: case4: case5: loop: i: 10
|
|
p1: case4: case5: loop: i is even
|
|
p1: case4: case5: loop: i: 9
|
|
p1: case4: case5: loop: i is odd
|
|
p1: case4: case5: loop: i: 8
|
|
p1: case4: case5: loop: i is even
|
|
p1: case4: case5: loop: i: 7
|
|
p1: case4: case5: loop: i is odd
|
|
p1: case4: case5: loop: i: 6
|
|
p1: case4: case5: loop: i is even
|
|
p1: case4: case5: loop: i: 5
|
|
p1: case4: case5: loop: i is odd
|
|
p1: case4: case5: loop: i: 4
|
|
p1: case4: case5: loop: i is even
|
|
p1: case4: case5: loop: i: 3
|
|
p1: case4: case5: loop: i is odd
|
|
p1: case4: case5: loop: i: 2
|
|
p1: case4: case5: loop: i is even
|
|
p1: case4: case5: loop: i: 1
|
|
p1: case4: case5: loop: i is odd
|
|
p1: case4: case6: on 20
|
|
p2: case: string type
|
|
p2: case: numerical type
|
|
p2: case: string type
|
|
DROP PROCEDURE p1;
|
|
DROP PROCEDURE p2;
|
|
DROP TABLE t1;
|
|
|
|
---------------------------------------------------------------
|
|
BUG#14161
|
|
---------------------------------------------------------------
|
|
|
|
DROP TABLE IF EXISTS t1;
|
|
DROP PROCEDURE IF EXISTS p1;
|
|
CREATE TABLE t1(col BIGINT UNSIGNED);
|
|
INSERT INTO t1 VALUE(18446744073709551614);
|
|
CREATE PROCEDURE p1(IN arg BIGINT UNSIGNED)
|
|
BEGIN
|
|
SELECT arg;
|
|
SELECT * FROM t1;
|
|
SELECT * FROM t1 WHERE col = arg;
|
|
END|
|
|
CALL p1(18446744073709551614);
|
|
arg
|
|
18446744073709551614
|
|
col
|
|
18446744073709551614
|
|
col
|
|
18446744073709551614
|
|
DROP TABLE t1;
|
|
DROP PROCEDURE p1;
|
|
|
|
---------------------------------------------------------------
|
|
BUG#13705
|
|
---------------------------------------------------------------
|
|
|
|
DROP PROCEDURE IF EXISTS p1;
|
|
CREATE PROCEDURE p1(x VARCHAR(10), y CHAR(3)) READS SQL DATA
|
|
BEGIN
|
|
SELECT x, y;
|
|
END|
|
|
CALL p1('alpha', 'abc');
|
|
x y
|
|
alpha abc
|
|
CALL p1('alpha', 'abcdef');
|
|
x y
|
|
alpha abc
|
|
Warnings:
|
|
Warning 1265 Data truncated for column 'y' at row 1
|
|
DROP PROCEDURE p1;
|
|
|
|
---------------------------------------------------------------
|
|
BUG#13675
|
|
---------------------------------------------------------------
|
|
|
|
DROP PROCEDURE IF EXISTS p1;
|
|
DROP TABLE IF EXISTS t1;
|
|
CREATE PROCEDURE p1(x DATETIME)
|
|
BEGIN
|
|
CREATE TABLE t1 SELECT x;
|
|
SHOW CREATE TABLE t1;
|
|
DROP TABLE t1;
|
|
END|
|
|
CALL p1(NOW());
|
|
Table Create Table
|
|
t1 CREATE TABLE "t1" (
|
|
"x" datetime DEFAULT NULL
|
|
)
|
|
CALL p1('test');
|
|
Table Create Table
|
|
t1 CREATE TABLE "t1" (
|
|
"x" datetime DEFAULT NULL
|
|
)
|
|
Warnings:
|
|
Warning 1265 Data truncated for column 'x' at row 1
|
|
DROP PROCEDURE p1;
|
|
|
|
---------------------------------------------------------------
|
|
BUG#12976
|
|
---------------------------------------------------------------
|
|
|
|
DROP TABLE IF EXISTS t1;
|
|
DROP PROCEDURE IF EXISTS p1;
|
|
DROP PROCEDURE IF EXISTS p2;
|
|
CREATE TABLE t1(b BIT(1));
|
|
INSERT INTO t1(b) VALUES(b'0'), (b'1');
|
|
CREATE PROCEDURE p1()
|
|
BEGIN
|
|
SELECT HEX(b),
|
|
b = 0,
|
|
b = FALSE,
|
|
b IS FALSE,
|
|
b = 1,
|
|
b = TRUE,
|
|
b IS TRUE
|
|
FROM t1;
|
|
END|
|
|
CREATE PROCEDURE p2()
|
|
BEGIN
|
|
DECLARE vb BIT(1);
|
|
SELECT b INTO vb FROM t1 WHERE b = 0;
|
|
SELECT HEX(vb),
|
|
vb = 0,
|
|
vb = FALSE,
|
|
vb IS FALSE,
|
|
vb = 1,
|
|
vb = TRUE,
|
|
vb IS TRUE;
|
|
SELECT b INTO vb FROM t1 WHERE b = 1;
|
|
SELECT HEX(vb),
|
|
vb = 0,
|
|
vb = FALSE,
|
|
vb IS FALSE,
|
|
vb = 1,
|
|
vb = TRUE,
|
|
vb IS TRUE;
|
|
END|
|
|
call p1();
|
|
HEX(b) b = 0 b = FALSE b IS FALSE b = 1 b = TRUE b IS TRUE
|
|
|
|
0 1 1 1 0 0 0
|
|
1 0 0 0 1 1 1
|
|
call p2();
|
|
HEX(vb) vb = 0 vb = FALSE vb IS FALSE vb = 1 vb = TRUE vb IS TRUE
|
|
0 1 1 1 0 0 0
|
|
HEX(vb) vb = 0 vb = FALSE vb IS FALSE vb = 1 vb = TRUE vb IS TRUE
|
|
1 0 0 0 1 1 1
|
|
DROP TABLE t1;
|
|
DROP PROCEDURE p1;
|
|
DROP PROCEDURE p2;
|
|
DROP TABLE IF EXISTS table_12976_a;
|
|
DROP TABLE IF EXISTS table_12976_b;
|
|
DROP PROCEDURE IF EXISTS proc_12976_a;
|
|
DROP PROCEDURE IF EXISTS proc_12976_b;
|
|
CREATE TABLE table_12976_a (val bit(1));
|
|
CREATE TABLE table_12976_b(
|
|
appname varchar(15),
|
|
emailperm bit not null default 1,
|
|
phoneperm bit not null default 0);
|
|
insert into table_12976_b values ('A', b'1', b'1'), ('B', b'0', b'0');
|
|
CREATE PROCEDURE proc_12976_a()
|
|
BEGIN
|
|
declare localvar bit(1);
|
|
SELECT val INTO localvar FROM table_12976_a;
|
|
SELECT coalesce(localvar, 1)+1, coalesce(val, 1)+1 FROM table_12976_a;
|
|
END||
|
|
CREATE PROCEDURE proc_12976_b(
|
|
name varchar(15),
|
|
out ep bit,
|
|
out msg varchar(10))
|
|
BEGIN
|
|
SELECT emailperm into ep FROM table_12976_b where (appname = name);
|
|
IF ep is true THEN
|
|
SET msg = 'True';
|
|
ELSE
|
|
SET msg = 'False';
|
|
END IF;
|
|
END||
|
|
INSERT table_12976_a VALUES (0);
|
|
call proc_12976_a();
|
|
coalesce(localvar, 1)+1 coalesce(val, 1)+1
|
|
1 1
|
|
UPDATE table_12976_a set val=1;
|
|
call proc_12976_a();
|
|
coalesce(localvar, 1)+1 coalesce(val, 1)+1
|
|
2 2
|
|
call proc_12976_b('A', @ep, @msg);
|
|
select @ep, @msg;
|
|
@ep @msg
|
|
1 True
|
|
call proc_12976_b('B', @ep, @msg);
|
|
select @ep, @msg;
|
|
@ep @msg
|
|
0 False
|
|
DROP TABLE table_12976_a;
|
|
DROP TABLE table_12976_b;
|
|
DROP PROCEDURE proc_12976_a;
|
|
DROP PROCEDURE proc_12976_b;
|
|
|
|
---------------------------------------------------------------
|
|
BUG#9572
|
|
---------------------------------------------------------------
|
|
|
|
DROP PROCEDURE IF EXISTS p1;
|
|
DROP PROCEDURE IF EXISTS p2;
|
|
DROP PROCEDURE IF EXISTS p3;
|
|
DROP PROCEDURE IF EXISTS p4;
|
|
DROP PROCEDURE IF EXISTS p5;
|
|
DROP PROCEDURE IF EXISTS p6;
|
|
SET @@sql_mode = 'traditional';
|
|
CREATE PROCEDURE p1()
|
|
BEGIN
|
|
DECLARE v TINYINT DEFAULT 1e200;
|
|
SELECT v;
|
|
END|
|
|
CREATE PROCEDURE p2()
|
|
BEGIN
|
|
DECLARE v DECIMAL(5) DEFAULT 1e200;
|
|
SELECT v;
|
|
END|
|
|
CREATE PROCEDURE p3()
|
|
BEGIN
|
|
DECLARE v CHAR(5) DEFAULT 'abcdef';
|
|
SELECT v LIKE 'abc___';
|
|
END|
|
|
CREATE PROCEDURE p4(arg VARCHAR(2))
|
|
BEGIN
|
|
DECLARE var VARCHAR(1);
|
|
SET var := arg;
|
|
SELECT arg, var;
|
|
END|
|
|
CREATE PROCEDURE p5(arg CHAR(2))
|
|
BEGIN
|
|
DECLARE var CHAR(1);
|
|
SET var := arg;
|
|
SELECT arg, var;
|
|
END|
|
|
CREATE PROCEDURE p6(arg DECIMAL(2))
|
|
BEGIN
|
|
DECLARE var DECIMAL(1);
|
|
SET var := arg;
|
|
SELECT arg, var;
|
|
END|
|
|
CALL p1();
|
|
ERROR 22003: Out of range value for column 'v' at row 1
|
|
CALL p2();
|
|
ERROR 22003: Out of range value for column 'v' at row 1
|
|
CALL p3();
|
|
ERROR 22001: Data too long for column 'v' at row 1
|
|
CALL p4('aaa');
|
|
ERROR 22001: Data too long for column 'arg' at row 1
|
|
CALL p5('aa');
|
|
ERROR 22001: Data too long for column 'var' at row 1
|
|
CALL p6(10);
|
|
ERROR 22003: Out of range value for column 'var' at row 1
|
|
SET @@sql_mode = 'ansi';
|
|
DROP PROCEDURE p1;
|
|
DROP PROCEDURE p2;
|
|
DROP PROCEDURE p3;
|
|
DROP PROCEDURE p4;
|
|
DROP PROCEDURE p5;
|
|
DROP PROCEDURE p6;
|
|
|
|
---------------------------------------------------------------
|
|
BUG#9078
|
|
---------------------------------------------------------------
|
|
|
|
DROP PROCEDURE IF EXISTS p1;
|
|
CREATE PROCEDURE p1 (arg DECIMAL(64,2))
|
|
BEGIN
|
|
DECLARE var DECIMAL(64,2);
|
|
SET var = arg;
|
|
SELECT var;
|
|
END|
|
|
CALL p1(1929);
|
|
var
|
|
1929.00
|
|
CALL p1(1929.00);
|
|
var
|
|
1929.00
|
|
CALL p1(1929.003);
|
|
var
|
|
1929.00
|
|
Warnings:
|
|
Note 1265 Data truncated for column 'arg' at row 1
|
|
DROP PROCEDURE p1;
|
|
|
|
---------------------------------------------------------------
|
|
BUG#8768
|
|
---------------------------------------------------------------
|
|
|
|
DROP FUNCTION IF EXISTS f1;
|
|
CREATE FUNCTION f1(arg TINYINT UNSIGNED) RETURNS TINYINT
|
|
BEGIN
|
|
RETURN arg;
|
|
END|
|
|
SELECT f1(-2500);
|
|
f1(-2500)
|
|
0
|
|
Warnings:
|
|
Warning 1264 Out of range value for column 'arg' at row 1
|
|
SET @@sql_mode = 'traditional';
|
|
SELECT f1(-2500);
|
|
ERROR 22003: Out of range value for column 'arg' at row 1
|
|
DROP FUNCTION f1;
|
|
CREATE FUNCTION f1(arg TINYINT UNSIGNED) RETURNS TINYINT
|
|
BEGIN
|
|
RETURN arg;
|
|
END|
|
|
SELECT f1(-2500);
|
|
ERROR 22003: Out of range value for column 'arg' at row 1
|
|
SET @@sql_mode = 'ansi';
|
|
DROP FUNCTION f1;
|
|
|
|
---------------------------------------------------------------
|
|
BUG#8769
|
|
---------------------------------------------------------------
|
|
|
|
DROP FUNCTION IF EXISTS f1;
|
|
CREATE FUNCTION f1(arg MEDIUMINT) RETURNS MEDIUMINT
|
|
BEGIN
|
|
RETURN arg;
|
|
END|
|
|
SELECT f1(8388699);
|
|
f1(8388699)
|
|
8388607
|
|
Warnings:
|
|
Warning 1264 Out of range value for column 'arg' at row 1
|
|
SET @@sql_mode = 'traditional';
|
|
SELECT f1(8388699);
|
|
ERROR 22003: Out of range value for column 'arg' at row 1
|
|
DROP FUNCTION f1;
|
|
CREATE FUNCTION f1(arg MEDIUMINT) RETURNS MEDIUMINT
|
|
BEGIN
|
|
RETURN arg;
|
|
END|
|
|
SELECT f1(8388699);
|
|
ERROR 22003: Out of range value for column 'arg' at row 1
|
|
SET @@sql_mode = 'ansi';
|
|
DROP FUNCTION f1;
|
|
|
|
---------------------------------------------------------------
|
|
BUG#8702
|
|
---------------------------------------------------------------
|
|
|
|
DROP PROCEDURE IF EXISTS p1;
|
|
DROP TABLE IF EXISTS t1;
|
|
CREATE TABLE t1(col VARCHAR(255));
|
|
INSERT INTO t1(col) VALUES('Hello, world!');
|
|
CREATE PROCEDURE p1()
|
|
BEGIN
|
|
DECLARE sp_var INTEGER;
|
|
SELECT col INTO sp_var FROM t1 LIMIT 1;
|
|
SET @user_var = sp_var;
|
|
SELECT sp_var;
|
|
SELECT @user_var;
|
|
END|
|
|
CALL p1();
|
|
sp_var
|
|
0
|
|
@user_var
|
|
0
|
|
Warnings:
|
|
Warning 1366 Incorrect integer value: 'Hello, world!' for column 'sp_var' at row 1
|
|
DROP PROCEDURE p1;
|
|
DROP TABLE t1;
|
|
|
|
---------------------------------------------------------------
|
|
BUG#12903
|
|
---------------------------------------------------------------
|
|
|
|
DROP FUNCTION IF EXISTS f1;
|
|
DROP TABLE IF EXISTS t1;
|
|
CREATE TABLE t1(txt VARCHAR(255));
|
|
CREATE FUNCTION f1(arg VARCHAR(255)) RETURNS VARCHAR(255)
|
|
BEGIN
|
|
DECLARE v1 VARCHAR(255);
|
|
DECLARE v2 VARCHAR(255);
|
|
SET v1 = CONCAT(LOWER(arg), UPPER(arg));
|
|
SET v2 = CONCAT(LOWER(v1), UPPER(v1));
|
|
INSERT INTO t1 VALUES(v1), (v2);
|
|
RETURN CONCAT(LOWER(arg), UPPER(arg));
|
|
END|
|
|
SELECT f1('_aBcDe_');
|
|
f1('_aBcDe_')
|
|
_abcde__ABCDE_
|
|
SELECT * FROM t1;
|
|
txt
|
|
_abcde__ABCDE_
|
|
_abcde__abcde__ABCDE__ABCDE_
|
|
DROP FUNCTION f1;
|
|
DROP TABLE t1;
|
|
|
|
---------------------------------------------------------------
|
|
BUG#13808
|
|
---------------------------------------------------------------
|
|
|
|
DROP PROCEDURE IF EXISTS p1;
|
|
DROP PROCEDURE IF EXISTS p2;
|
|
DROP FUNCTION IF EXISTS f1;
|
|
CREATE PROCEDURE p1(arg ENUM('a', 'b'))
|
|
BEGIN
|
|
SELECT arg;
|
|
END|
|
|
CREATE PROCEDURE p2(arg ENUM('a', 'b'))
|
|
BEGIN
|
|
DECLARE var ENUM('c', 'd') DEFAULT arg;
|
|
SELECT arg, var;
|
|
END|
|
|
CREATE FUNCTION f1(arg ENUM('a', 'b')) RETURNS ENUM('c', 'd')
|
|
BEGIN
|
|
RETURN arg;
|
|
END|
|
|
CALL p1('c');
|
|
arg
|
|
|
|
Warnings:
|
|
Warning 1265 Data truncated for column 'arg' at row 1
|
|
CALL p2('a');
|
|
arg var
|
|
a
|
|
Warnings:
|
|
Warning 1265 Data truncated for column 'var' at row 1
|
|
SELECT f1('a');
|
|
f1('a')
|
|
|
|
Warnings:
|
|
Warning 1265 Data truncated for column 'f1('a')' at row 1
|
|
DROP PROCEDURE p1;
|
|
DROP PROCEDURE p2;
|
|
DROP FUNCTION f1;
|
|
|
|
---------------------------------------------------------------
|
|
BUG#13909
|
|
---------------------------------------------------------------
|
|
|
|
DROP PROCEDURE IF EXISTS p1;
|
|
DROP PROCEDURE IF EXISTS p2;
|
|
CREATE PROCEDURE p1(arg VARCHAR(255))
|
|
BEGIN
|
|
SELECT CHARSET(arg);
|
|
END|
|
|
CREATE PROCEDURE p2(arg VARCHAR(255) CHARACTER SET UTF8)
|
|
BEGIN
|
|
SELECT CHARSET(arg);
|
|
END|
|
|
CALL p1('t');
|
|
CHARSET(arg)
|
|
latin1
|
|
CALL p1(_UTF8 't');
|
|
CHARSET(arg)
|
|
latin1
|
|
CALL p2('t');
|
|
CHARSET(arg)
|
|
utf8
|
|
CALL p2(_LATIN1 't');
|
|
CHARSET(arg)
|
|
utf8
|
|
DROP PROCEDURE p1;
|
|
DROP PROCEDURE p2;
|
|
|
|
---------------------------------------------------------------
|
|
BUG#14188
|
|
---------------------------------------------------------------
|
|
|
|
DROP PROCEDURE IF EXISTS p1;
|
|
CREATE PROCEDURE p1(arg1 BINARY(2), arg2 VARBINARY(2))
|
|
BEGIN
|
|
DECLARE var1 BINARY(2) DEFAULT 0x41;
|
|
DECLARE var2 VARBINARY(2) DEFAULT 0x42;
|
|
SELECT HEX(arg1), HEX(arg2);
|
|
SELECT HEX(var1), HEX(var2);
|
|
END|
|
|
CALL p1(0x41, 0x42);
|
|
HEX(arg1) HEX(arg2)
|
|
4100 42
|
|
HEX(var1) HEX(var2)
|
|
4100 42
|
|
DROP PROCEDURE p1;
|
|
|
|
---------------------------------------------------------------
|
|
BUG#15148
|
|
---------------------------------------------------------------
|
|
|
|
DROP PROCEDURE IF EXISTS p1;
|
|
DROP TABLE IF EXISTS t1;
|
|
CREATE TABLE t1(col1 TINYINT, col2 TINYINT);
|
|
INSERT INTO t1 VALUES(1, 2), (11, 12);
|
|
CREATE PROCEDURE p1(arg TINYINT)
|
|
BEGIN
|
|
SELECT arg;
|
|
END|
|
|
CALL p1((1, 2));
|
|
ERROR 21000: Operand should contain 1 column(s)
|
|
CALL p1((SELECT * FROM t1 LIMIT 1));
|
|
ERROR 21000: Operand should contain 1 column(s)
|
|
CALL p1((SELECT col1, col2 FROM t1 LIMIT 1));
|
|
ERROR 21000: Operand should contain 1 column(s)
|
|
DROP PROCEDURE p1;
|
|
DROP TABLE t1;
|
|
|
|
---------------------------------------------------------------
|
|
BUG#13613
|
|
---------------------------------------------------------------
|
|
|
|
DROP PROCEDURE IF EXISTS p1;
|
|
DROP FUNCTION IF EXISTS f1;
|
|
CREATE PROCEDURE p1(x VARCHAR(50))
|
|
BEGIN
|
|
SET x = SUBSTRING(x, 1, 3);
|
|
SELECT x;
|
|
END|
|
|
CREATE FUNCTION f1(x VARCHAR(50)) RETURNS VARCHAR(50)
|
|
BEGIN
|
|
RETURN SUBSTRING(x, 1, 3);
|
|
END|
|
|
CALL p1('abcdef');
|
|
x
|
|
abc
|
|
SELECT f1('ABCDEF');
|
|
f1('ABCDEF')
|
|
ABC
|
|
DROP PROCEDURE p1;
|
|
DROP FUNCTION f1;
|
|
|
|
---------------------------------------------------------------
|
|
BUG#13665
|
|
---------------------------------------------------------------
|
|
|
|
DROP FUNCTION IF EXISTS f1;
|
|
CREATE FUNCTION f1() RETURNS VARCHAR(20000)
|
|
BEGIN
|
|
DECLARE var VARCHAR(2000);
|
|
SET var = '';
|
|
SET var = CONCAT(var, 'abc');
|
|
SET var = CONCAT(var, '');
|
|
RETURN var;
|
|
END|
|
|
SELECT f1();
|
|
f1()
|
|
abc
|
|
DROP FUNCTION f1;
|
|
DROP PROCEDURE IF EXISTS p1;
|
|
CREATE PROCEDURE p1()
|
|
BEGIN
|
|
DECLARE v_char VARCHAR(255);
|
|
DECLARE v_text TEXT DEFAULT '';
|
|
SET v_char = 'abc';
|
|
SET v_text = v_char;
|
|
SET v_char = 'def';
|
|
SET v_text = concat(v_text, '|', v_char);
|
|
SELECT v_text;
|
|
END|
|
|
CALL p1();
|
|
v_text
|
|
abc|def
|
|
DROP PROCEDURE p1;
|
|
DROP PROCEDURE IF EXISTS bug27415_text_test|
|
|
DROP PROCEDURE IF EXISTS bug27415_text_test2|
|
|
CREATE PROCEDURE bug27415_text_test(entity_id_str_in text)
|
|
BEGIN
|
|
DECLARE str_remainder text;
|
|
SET str_remainder = entity_id_str_in;
|
|
select 'before substr', str_remainder;
|
|
SET str_remainder = SUBSTRING(str_remainder, 3);
|
|
select 'after substr', str_remainder;
|
|
END|
|
|
CREATE PROCEDURE bug27415_text_test2(entity_id_str_in text)
|
|
BEGIN
|
|
DECLARE str_remainder text;
|
|
DECLARE str_remainder2 text;
|
|
SET str_remainder2 = entity_id_str_in;
|
|
select 'before substr', str_remainder2;
|
|
SET str_remainder = SUBSTRING(str_remainder2, 3);
|
|
select 'after substr', str_remainder;
|
|
END|
|
|
CALL bug27415_text_test('a,b,c')|
|
|
before substr str_remainder
|
|
before substr a,b,c
|
|
after substr str_remainder
|
|
after substr b,c
|
|
CALL bug27415_text_test('a,b,c')|
|
|
before substr str_remainder
|
|
before substr a,b,c
|
|
after substr str_remainder
|
|
after substr b,c
|
|
CALL bug27415_text_test2('a,b,c')|
|
|
before substr str_remainder2
|
|
before substr a,b,c
|
|
after substr str_remainder
|
|
after substr b,c
|
|
CALL bug27415_text_test('a,b,c')|
|
|
before substr str_remainder
|
|
before substr a,b,c
|
|
after substr str_remainder
|
|
after substr b,c
|
|
DROP PROCEDURE bug27415_text_test|
|
|
DROP PROCEDURE bug27415_text_test2|
|
|
drop function if exists f1;
|
|
drop table if exists t1;
|
|
create function f1() returns int
|
|
begin
|
|
if @a=1 then set @b='abc';
|
|
else set @b=1;
|
|
end if;
|
|
set @a=1;
|
|
return 0;
|
|
end|
|
|
create table t1 (a int)|
|
|
insert into t1 (a) values (1), (2)|
|
|
set @b=1|
|
|
set @a=0|
|
|
select f1(), @b from t1|
|
|
f1() @b
|
|
0 1
|
|
0 0
|
|
set @b:='test'|
|
|
set @a=0|
|
|
select f1(), @b from t1|
|
|
f1() @b
|
|
0 1
|
|
0 abc
|
|
drop function f1;
|
|
drop table t1;
|