maria-developers team mailing list archive
-
maria-developers team
-
Mailing list archive
-
Message #09026
Re: MDEV-8109 unexpected CAST result
Hi, Alexander!
First - I'm afraind this is the kind of a behavior change that we cannot
do in a GA version. Let's push it (when ready) into bb-10.2-bar.
On Sep 24, Alexander Barkov wrote:
> Hi Serg,
>
> Please review my patch for MDEV-8109.
>
> Thanks!
> diff --git a/mysql-test/suite/vcol/t/vcol_misc.test b/mysql-test/suite/vcol/t/vcol_misc.test
> index c5b534f..e5951ec 100644
> --- a/mysql-test/suite/vcol/t/vcol_misc.test
> +++ b/mysql-test/suite/vcol/t/vcol_misc.test
> @@ -310,6 +310,23 @@ SELECT COLUMN_GET(@aaa, 'price' AS DECIMAL) aaa;
> SELECT COLUMN_GET(@aaa, 'price' AS INT) aaa;
> SELECT COLUMN_GET(@aaa, 'price' AS DOUBLE) aaa;
>
> +--echo #
> +--echo # MDEV-8109 unexpected CAST result
> +--echo #
why in vcol.vcol_misc? there are no virtual columns in this test.
> +SET sql_mode=STRICT_ALL_TABLES;
> +
> +CREATE FUNCTION test(par_aaa DECIMAL(10,2))
> + RETURNS DECIMAL(10,2) DETERMINISTIC
> + RETURN 0;
> +SET @aaa= COLUMN_CREATE('price', '');
> +SELECT COLUMN_GET(@aaa, 'price' AS DECIMAL) AS aaa;
didn't we agree preserve old behavior here? strict applies to
COLUMN_GET? Or do you want a different solution for COLUMN_GET?
> +SELECT COLUMN_GET(@aaa, 'price' AS DECIMAL) + 1 AS aaa;
> +SELECT test(COLUMN_GET(@aaa, 'price' AS DECIMAL)) AS bbb;
> +SELECT test(CAST('' AS DECIMAL(10,2))) AS bbb;
> +SELECT test(''+0) AS bbb;
> +DROP FUNCTION test;
> +
> +SET sql_mode=DEFAULT;
>
> --echo #
> --echo # End of 10.1 tests
> diff --git a/mysql-test/t/strict.test b/mysql-test/t/strict.test
> index 93b3149..4414703 100644
> --- a/mysql-test/t/strict.test
> +++ b/mysql-test/t/strict.test
> @@ -992,11 +992,8 @@ insert into t1 (col1) values (cast(1000 as char(3)));
> insert into t1 (col1) values (cast(1000E+0 as char(3)));
> --error 1292
> insert into t1 (col1) values (cast(1000.0 as char(3)));
why is this still an error?
> ---error 1292
> insert into t1 (col2) values (cast('abc' as signed integer));
> ---error 1292
> insert into t1 (col2) values (10E+0 + 'a');
> ---error 1292
> insert into t1 (col2) values (cast('10a' as unsigned integer));
> insert into t1 (col2) values (cast('10' as unsigned integer));
> insert into t1 (col2) values (cast('10' as signed integer));
> @@ -1370,3 +1367,21 @@ SELECT STR_TO_DATE('2001','%Y'),CONCAT(STR_TO_DATE('2001','%Y')), STR_TO_DATE('2
> --echo #
> --echo # End of 5.6 tests
> --echo #
> +
> +--echo #
> +--echo # Start of 10.1 tests
> +--echo #
> +
> +--echo #
> +--echo # MDEV-8300 CAST('' AS DECIMAL) is too strict on INSERT in strict mode
> +--echo #
> +SET sql_mode='STRICT_ALL_TABLES';
> +CREATE TABLE t1 (a DECIMAL,b INT, c DOUBLE);
also add SELECT tests for all these INSERTs.
SELECT CAST('' AS DECIMAL),CAST('' AS SIGNED),CAST('' AS DOUBLE);
> +INSERT INTO t1 VALUES(CAST('' AS DECIMAL),CAST('' AS SIGNED),CAST('' AS DOUBLE));
> +INSERT INTO t1 VALUES(''+0,''+0,''+0);
> +DROP TABLE t1;
> +SET sql_mode=DEFAULT;
> +
> +--echo #
> +--echo # End of 10.1 tests
> +--echo #
> diff --git a/sql/sql_class.cc b/sql/sql_class.cc
> index 0a0d3ca..beaf080 100644
> --- a/sql/sql_class.cc
> +++ b/sql/sql_class.cc
> @@ -1235,10 +1235,6 @@ Sql_condition* THD::raise_condition(uint sql_errno,
> Sql_condition *cond= NULL;
> DBUG_ENTER("THD::raise_condition");
>
> - if (!(variables.option_bits & OPTION_SQL_NOTES) &&
> - (level == Sql_condition::WARN_LEVEL_NOTE))
> - DBUG_RETURN(NULL);
> -
That makes me a bit uneasy. I would keep THD::raise_condition logic as
is, and introduced THD::raise_condition_verbatim (or
THD::raise_condition_no_escalation). That is all existing calls of
THD::raise_condition would've worked as before.
But now I'm not sure that you've replaced every existing invocation of
THD::raise_condition with THD::raise_condition_with_escalation.
And that we won't merge anything from MySQL that uses
THD::raise_condition.
At least you could've change the prototype of THD::raise_condition,
like, swap the arguments. Then old (and merged) code wouldn't compile.
> da->opt_clear_warning_info(query_id);
>
> /*
Regards,
Sergei
References