summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/query_cache.result19
-rw-r--r--mysql-test/r/sp.result8
-rw-r--r--mysql-test/r/warnings.result12
-rw-r--r--mysql-test/r/xa.result1
-rw-r--r--mysql-test/t/query_cache.test15
-rw-r--r--mysql-test/t/sp.test10
-rw-r--r--mysql-test/t/warnings-master.opt2
-rw-r--r--mysql-test/t/warnings.test12
-rw-r--r--mysql-test/t/xa.test2
-rw-r--r--sql/mysqld.cc4
-rw-r--r--sql/sql_lex.h29
11 files changed, 98 insertions, 16 deletions
diff --git a/mysql-test/r/query_cache.result b/mysql-test/r/query_cache.result
index eb9b1d16011..ee734845a9e 100644
--- a/mysql-test/r/query_cache.result
+++ b/mysql-test/r/query_cache.result
@@ -2168,6 +2168,25 @@ show status like "Qcache_hits";
Variable_name Value
Qcache_hits 1
drop table t1;
+#
+# MDEV-15328: MariaDB 10.2.13 Crashes upon CALL PROCEDURE PARAM
+# LAST_INSERT_ID ()
+# (part 2, part 1 is in sp.test)
+#
+create table t1 (a int);
+insert into t1 values (1);
+CREATE FUNCTION foo (i INT UNSIGNED ) RETURNS int deterministic RETURN 1;
+show status like "Qcache_queries_in_cache";
+Variable_name Value
+Qcache_queries_in_cache 0
+SELECT foo( LAST_INSERT_ID() ) from t1;
+foo( LAST_INSERT_ID() )
+1
+show status like "Qcache_queries_in_cache";
+Variable_name Value
+Qcache_queries_in_cache 0
+DROP FUNCTION foo;
+drop table t1;
restore defaults
SET GLOBAL query_cache_type= default;
SET GLOBAL query_cache_size= default;
diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result
index ca6a3b495aa..29974ecbad3 100644
--- a/mysql-test/r/sp.result
+++ b/mysql-test/r/sp.result
@@ -8337,6 +8337,14 @@ drop procedure p1;
drop procedure p2;
drop procedure p3;
#
+# MDEV-15328: MariaDB 10.2.13 Crashes upon CALL PROCEDURE PARAM
+# LAST_INSERT_ID ()
+# (part 1, part 2 is in query_cache.test)
+#
+CREATE PROCEDURE foo ( IN i INT UNSIGNED ) BEGIN END;
+CALL foo( LAST_INSERT_ID() );
+DROP PROCEDURE foo;
+#
# Start of 10.3 tests
#
#
diff --git a/mysql-test/r/warnings.result b/mysql-test/r/warnings.result
index 410ea9b28e7..7c7e049ff2d 100644
--- a/mysql-test/r/warnings.result
+++ b/mysql-test/r/warnings.result
@@ -358,3 +358,15 @@ Error 1062 Duplicate entry '11' for key 'a'
DROP TABLE t1;
DROP FUNCTION f1;
+connect con1,localhost,root,,;
+SELECT TIME('10:10:10.11111111111');
+TIME('10:10:10.11111111111')
+10:10:10.111111
+Warnings:
+Note 1292 Truncated incorrect time value: '10:10:10.11111111111'
+disconnect con1;
+connect con2,localhost,root,,;
+SHOW WARNINGS;
+Level Code Message
+disconnect con2;
+connection default;
diff --git a/mysql-test/r/xa.result b/mysql-test/r/xa.result
index 646f2822239..46bfa6e962a 100644
--- a/mysql-test/r/xa.result
+++ b/mysql-test/r/xa.result
@@ -335,7 +335,6 @@ INSERT INTO t1 SELECT * FROM t2;
connection default;
REPLACE INTO t2 SELECT * FROM t2;
connection con1;
-ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
disconnect con1;
connect con2,localhost,root,,test;
INSERT INTO t3 VALUES (1);
diff --git a/mysql-test/t/query_cache.test b/mysql-test/t/query_cache.test
index c354032bc36..1b1e24bc6f4 100644
--- a/mysql-test/t/query_cache.test
+++ b/mysql-test/t/query_cache.test
@@ -1767,6 +1767,21 @@ show status like "Qcache_inserts";
show status like "Qcache_hits";
drop table t1;
+--echo #
+--echo # MDEV-15328: MariaDB 10.2.13 Crashes upon CALL PROCEDURE PARAM
+--echo # LAST_INSERT_ID ()
+--echo # (part 2, part 1 is in sp.test)
+--echo #
+
+create table t1 (a int);
+insert into t1 values (1);
+CREATE FUNCTION foo (i INT UNSIGNED ) RETURNS int deterministic RETURN 1;
+show status like "Qcache_queries_in_cache";
+SELECT foo( LAST_INSERT_ID() ) from t1;
+show status like "Qcache_queries_in_cache";
+DROP FUNCTION foo;
+drop table t1;
+
--echo restore defaults
SET GLOBAL query_cache_type= default;
SET GLOBAL query_cache_size= default;
diff --git a/mysql-test/t/sp.test b/mysql-test/t/sp.test
index 4e87ba0c220..9f6ad266f20 100644
--- a/mysql-test/t/sp.test
+++ b/mysql-test/t/sp.test
@@ -9842,6 +9842,16 @@ drop procedure p2;
drop procedure p3;
--echo #
+--echo # MDEV-15328: MariaDB 10.2.13 Crashes upon CALL PROCEDURE PARAM
+--echo # LAST_INSERT_ID ()
+--echo # (part 1, part 2 is in query_cache.test)
+--echo #
+
+CREATE PROCEDURE foo ( IN i INT UNSIGNED ) BEGIN END;
+CALL foo( LAST_INSERT_ID() );
+DROP PROCEDURE foo;
+
+--echo #
--echo # Start of 10.3 tests
--echo #
diff --git a/mysql-test/t/warnings-master.opt b/mysql-test/t/warnings-master.opt
index 21356507809..1aa6001465b 100644
--- a/mysql-test/t/warnings-master.opt
+++ b/mysql-test/t/warnings-master.opt
@@ -1 +1 @@
---loose-skip-innodb
+--loose-skip-innodb --thread-handling=one-thread-per-connection
diff --git a/mysql-test/t/warnings.test b/mysql-test/t/warnings.test
index 573f3c538c7..9360d32f93d 100644
--- a/mysql-test/t/warnings.test
+++ b/mysql-test/t/warnings.test
@@ -286,3 +286,15 @@ SHOW WARNINGS;
DROP TABLE t1;
DROP FUNCTION f1;
+
+# MDEV-14581 Warning info not cleared when caching THD
+connect (con1,localhost,root,,);
+SELECT TIME('10:10:10.11111111111');
+disconnect con1;
+
+connect (con2,localhost,root,,);
+SHOW WARNINGS;
+disconnect con2;
+
+connection default;
+
diff --git a/mysql-test/t/xa.test b/mysql-test/t/xa.test
index 9a8aa8673ea..b5ef5a118b1 100644
--- a/mysql-test/t/xa.test
+++ b/mysql-test/t/xa.test
@@ -462,7 +462,7 @@ INSERT INTO t1 SELECT * FROM t2;
REPLACE INTO t2 SELECT * FROM t2;
--connection con1
---error ER_LOCK_DEADLOCK
+--error 0, ER_LOCK_DEADLOCK, ER_LOCK_WAIT_TIMEOUT
--reap
--disconnect con1
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index ee7f2e2c84d..36ee8215b0f 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -2959,6 +2959,10 @@ static bool cache_thread(THD *thd)
_db_pop_();
#endif
+ /* Clear warnings. */
+ if (!thd->get_stmt_da()->is_warning_info_empty())
+ thd->get_stmt_da()->clear_warning_info(thd->query_id);
+
set_timespec(abstime, THREAD_CACHE_TIMEOUT);
while (!abort_loop && ! wake_thread && ! kill_cached_threads)
{
diff --git a/sql/sql_lex.h b/sql/sql_lex.h
index 53fa3286c86..3fa105aad57 100644
--- a/sql/sql_lex.h
+++ b/sql/sql_lex.h
@@ -3042,21 +3042,24 @@ public:
{
safe_to_cache_query= 0;
- /*
- There are no sense to mark select_lex and union fields of LEX,
- but we should merk all subselects as uncacheable from current till
- most upper
- */
- SELECT_LEX *sl;
- SELECT_LEX_UNIT *un;
- for (sl= current_select, un= sl->master_unit();
- un != &unit;
- sl= sl->outer_select(), un= sl->master_unit())
+ if (current_select) // initialisation SP variables has no SELECT
{
- sl->uncacheable|= cause;
- un->uncacheable|= cause;
+ /*
+ There are no sense to mark select_lex and union fields of LEX,
+ but we should merk all subselects as uncacheable from current till
+ most upper
+ */
+ SELECT_LEX *sl;
+ SELECT_LEX_UNIT *un;
+ for (sl= current_select, un= sl->master_unit();
+ un != &unit;
+ sl= sl->outer_select(), un= sl->master_unit())
+ {
+ sl->uncacheable|= cause;
+ un->uncacheable|= cause;
+ }
+ select_lex.uncacheable|= cause;
}
- select_lex.uncacheable|= cause;
}
void set_trg_event_type_for_tables();