mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
5bd58f3e00
This patch reverts a change introduced by Bug 6951, which incorrectly set thd->abort_on_warning for stored procedures. As per internal discussions about the SQL_MODE=TRADITIONAL, the correct behavior is to *not* abort on warnings even inside an INSERT/UPDATE trigger. Tests for Stored Procedures, Stored Functions, Triggers involving SQL_MODE have been included or revised, to reflect the intended behavior. (reposting approved patch, to work around source control issues, no review needed) mysql-test/include/sp-vars.inc: Tests for SQL_MODE='TRADITIONAL' mysql-test/r/sp-vars.result: Tests for SQL_MODE='TRADITIONAL' mysql-test/r/sp.result: Tests for SQL_MODE='TRADITIONAL' mysql-test/r/trigger.result: Tests for SQL_MODE='TRADITIONAL' mysql-test/t/sp-vars.test: Tests for SQL_MODE='TRADITIONAL' mysql-test/t/sp.test: Tests for SQL_MODE='TRADITIONAL' mysql-test/t/trigger.test: Tests for SQL_MODE='TRADITIONAL' sql/sp_head.cc: For SQL_MODE='TRADITIONAL', thd->abort_on_warning should be set only when assigning a *column*
131 lines
3.3 KiB
PHP
131 lines
3.3 KiB
PHP
delimiter |;
|
|
|
|
---------------------------------------------------------------------------
|
|
|
|
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|
|
|
|
|
---------------------------------------------------------------------------
|
|
|
|
delimiter ;|
|