mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 20:36:16 +01:00 
			
		
		
		
	value.type_handler()->result_type()' failed in virtual bool Item_param::get_date(THD*, MYSQL_TIME*, date_mode_t) Adding mtr tests forgotten in the previous commit.
		
			
				
	
	
		
			291 lines
		
	
	
	
		
			9 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			291 lines
		
	
	
	
		
			9 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
###############################################
 | 
						|
#                                             #
 | 
						|
#   Prepared Statements                       #
 | 
						|
#   re-testing bug DB entries                 #
 | 
						|
#                                             #
 | 
						|
# The bugs are reported as "closed".          #
 | 
						|
# Command sequences taken from bug report.    #
 | 
						|
# No other test contains the bug# as comment. #
 | 
						|
#                                             #
 | 
						|
# Tests drop/create tables 't1', 't2', ...    #
 | 
						|
#                                             #
 | 
						|
###############################################
 | 
						|
 | 
						|
--disable_warnings
 | 
						|
drop table if exists t1, t2;
 | 
						|
--enable_warnings
 | 
						|
 | 
						|
# bug#1180: optimized away part of WHERE clause cause incorect prepared satatement results
 | 
						|
 | 
						|
CREATE TABLE t1(session_id  char(9) NOT NULL);
 | 
						|
INSERT INTO t1 VALUES ("abc");
 | 
						|
SELECT * FROM t1;
 | 
						|
 | 
						|
prepare st_1180 from 'SELECT * FROM t1 WHERE ?="1111" and session_id = "abc"';
 | 
						|
 | 
						|
# Must not find a row
 | 
						|
set @arg1= 'abc';
 | 
						|
execute st_1180 using @arg1;
 | 
						|
 | 
						|
# Now, it should find one row
 | 
						|
set @arg1= '1111';
 | 
						|
execute st_1180 using @arg1;
 | 
						|
 | 
						|
# Back to non-matching
 | 
						|
set @arg1= 'abc';
 | 
						|
execute st_1180 using @arg1;
 | 
						|
 | 
						|
drop table t1;
 | 
						|
 | 
						|
# end of bug#1180
 | 
						|
 | 
						|
 | 
						|
# bug#1644: Insertion of more than 3 NULL columns with parameter binding fails
 | 
						|
 | 
						|
# Using prepared statements, insertion of more than three columns with NULL
 | 
						|
# values fails to insert additional NULLS.  After the third column NULLS will
 | 
						|
# be inserted into the database as zeros.
 | 
						|
# First insert four columns of a value (i.e. 22) to verify binding is working
 | 
						|
# correctly.  Then Bind to each columns bind parameter an is_null value of 1.
 | 
						|
# Then insert four more columns of integers, just for sanity.
 | 
						|
# A subsequent select on the server will result in this:
 | 
						|
# mysql> select * from foo_dfr;
 | 
						|
# +------+------+------+------+
 | 
						|
# | col1 | col2 | col3 | col4 |
 | 
						|
# +------+------+------+------+
 | 
						|
# |   22 |   22 |   22 |   22 |
 | 
						|
# | NULL | NULL | NULL |    0 |
 | 
						|
# |   88 |   88 |   88 |   88 |
 | 
						|
# +------+------+------+------+
 | 
						|
 | 
						|
# Test is extended to more columns - code stores bit vector in bytes.
 | 
						|
 | 
						|
create table t1 (
 | 
						|
  c_01 char(6), c_02 integer, c_03 real, c_04 int(3), c_05 varchar(20),
 | 
						|
  c_06 date,    c_07 char(1), c_08 real, c_09 int(11), c_10 time,
 | 
						|
  c_11 char(6), c_12 integer, c_13 real, c_14 int(3), c_15 varchar(20),
 | 
						|
  c_16 date,    c_17 char(1), c_18 real, c_19 int(11), c_20 text);
 | 
						|
# Do not use "timestamp" type, because it has a non-NULL default as of 4.1.2
 | 
						|
 | 
						|
prepare st_1644 from 'insert into t1 values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
 | 
						|
 | 
						|
set @arg01= 'row_1'; set @arg02= 1; set @arg03= 1.1; set @arg04= 111; set @arg05= 'row_one';
 | 
						|
set @arg06= '2004-10-12'; set @arg07= '1'; set @arg08= 1.1; set @arg09= '100100100'; set @arg10= '12:34:56';
 | 
						|
set @arg11= 'row_1'; set @arg12= 1; set @arg13= 1.1; set @arg14= 111; set @arg15= 'row_one';
 | 
						|
set @arg16= '2004-10-12'; set @arg17= '1'; set @arg18= 1.1; set @arg19= '100100100'; set @arg20= '12:34:56';
 | 
						|
execute st_1644 using @arg01, @arg02, @arg03, @arg04, @arg05, @arg06, @arg07, @arg08, @arg09, @arg10,
 | 
						|
                      @arg11, @arg12, @arg13, @arg14, @arg15, @arg16, @arg17, @arg18, @arg19, @arg20;
 | 
						|
 | 
						|
set @arg01= NULL; set @arg02= NULL; set @arg03= NULL; set @arg04= NULL; set @arg05= NULL;
 | 
						|
set @arg06= NULL; set @arg07= NULL; set @arg08= NULL; set @arg09= NULL; set @arg10= NULL;
 | 
						|
set @arg11= NULL; set @arg12= NULL; set @arg13= NULL; set @arg14= NULL; set @arg15= NULL;
 | 
						|
set @arg16= NULL; set @arg17= NULL; set @arg18= NULL; set @arg19= NULL; set @arg20= NULL;
 | 
						|
execute st_1644 using @arg01, @arg02, @arg03, @arg04, @arg05, @arg06, @arg07, @arg08, @arg09, @arg10,
 | 
						|
                      @arg11, @arg12, @arg13, @arg14, @arg15, @arg16, @arg17, @arg18, @arg19, @arg20;
 | 
						|
 | 
						|
set @arg01= 'row_3'; set @arg02= 3; set @arg03= 3.3; set @arg04= 333; set @arg05= 'row_three';
 | 
						|
set @arg06= '2004-10-12'; set @arg07= '3'; set @arg08= 3.3; set @arg09= '300300300'; set @arg10= '12:34:56';
 | 
						|
set @arg11= 'row_3'; set @arg12= 3; set @arg13= 3.3; set @arg14= 333; set @arg15= 'row_three';
 | 
						|
set @arg16= '2004-10-12'; set @arg17= '3'; set @arg18= 3.3; set @arg19= '300300300'; set @arg20= '12:34:56';
 | 
						|
execute st_1644 using @arg01, @arg02, @arg03, @arg04, @arg05, @arg06, @arg07, @arg08, @arg09, @arg10,
 | 
						|
                      @arg11, @arg12, @arg13, @arg14, @arg15, @arg16, @arg17, @arg18, @arg19, @arg20;
 | 
						|
 | 
						|
select * from t1;
 | 
						|
 | 
						|
drop table t1;
 | 
						|
 | 
						|
# end of bug#1644
 | 
						|
 | 
						|
 | 
						|
# bug#1676: Prepared statement two-table join returns no rows when one is expected
 | 
						|
 | 
						|
create table t1(
 | 
						|
   cola varchar(50) not null,
 | 
						|
   colb varchar(8) not null,
 | 
						|
   colc varchar(12) not null,
 | 
						|
   cold varchar(2) not null,
 | 
						|
   primary key (cola, colb, cold));
 | 
						|
 | 
						|
create table t2(
 | 
						|
   cola varchar(50) not null,
 | 
						|
   colb varchar(8) not null,
 | 
						|
   colc varchar(2) not null,
 | 
						|
   cold float,
 | 
						|
   primary key (cold));
 | 
						|
 | 
						|
insert into t1 values ('aaaa', 'yyyy', 'yyyy-dd-mm', 'R');
 | 
						|
 | 
						|
insert into t2 values ('aaaa', 'yyyy', 'R', 203), ('bbbb', 'zzzz', 'C', 201);
 | 
						|
 | 
						|
prepare st_1676 from 'select a.cola, a.colb, a.cold from t1 a, t2 b where a.cola = ? and a.colb = ? and a.cold = ? and b.cola = a.cola and b.colb = a.colb and b.colc = a.cold';
 | 
						|
 | 
						|
set @arg0= "aaaa";
 | 
						|
set @arg1= "yyyy";
 | 
						|
set @arg2= "R";
 | 
						|
 | 
						|
execute st_1676 using @arg0, @arg1, @arg2;
 | 
						|
 | 
						|
drop table t1, t2;
 | 
						|
 | 
						|
# end of bug#1676
 | 
						|
 | 
						|
# End of 4.1 tests
 | 
						|
 | 
						|
# bug#18492: mysqld reports ER_ILLEGAL_REFERENCE in --ps-protocol
 | 
						|
 | 
						|
create table t1 (a int primary key);
 | 
						|
insert into t1 values (1);
 | 
						|
 | 
						|
explain select * from t1 where 3 in (select (1+1) union select 1);
 | 
						|
 | 
						|
select * from t1 where 3 in (select (1+1) union select 1);
 | 
						|
 | 
						|
prepare st_18492 from 'select * from t1 where 3 in (select (1+1) union select 1)';
 | 
						|
execute st_18492;
 | 
						|
 | 
						|
drop table t1;
 | 
						|
 | 
						|
#
 | 
						|
# Bug#19356: Assertion failure with undefined @uservar in prepared statement execution
 | 
						|
# 
 | 
						|
create table t1 (a int, b varchar(4));
 | 
						|
create table t2 (a int, b varchar(4), primary key(a));
 | 
						|
 | 
						|
prepare stmt1 from 'insert into t1 (a, b) values (?, ?)';
 | 
						|
prepare stmt2 from 'insert into t2 (a, b) values (?, ?)';
 | 
						|
 | 
						|
set @intarg= 11;
 | 
						|
set @varchararg= '2222';
 | 
						|
execute stmt1 using @intarg, @varchararg;
 | 
						|
execute stmt2 using @intarg, @varchararg;
 | 
						|
set @intarg= 12;
 | 
						|
execute stmt1 using @intarg, @UNDEFINED;
 | 
						|
execute stmt2 using @intarg, @UNDEFINED;
 | 
						|
set @intarg= 13;
 | 
						|
execute stmt1 using @UNDEFINED, @varchararg;
 | 
						|
--error 1048
 | 
						|
execute stmt2 using @UNDEFINED, @varchararg;
 | 
						|
set @intarg= 14;
 | 
						|
set @nullarg= Null;
 | 
						|
execute stmt1 using @UNDEFINED, @nullarg;
 | 
						|
--error 1048
 | 
						|
execute stmt2 using @nullarg, @varchararg;
 | 
						|
 | 
						|
select * from t1;
 | 
						|
select * from t2;
 | 
						|
 | 
						|
drop table t1;
 | 
						|
drop table t2;
 | 
						|
 | 
						|
#
 | 
						|
# Bug #32124: crash if prepared statements refer to variables in the where
 | 
						|
# clause
 | 
						|
#
 | 
						|
 | 
						|
CREATE TABLE t1 (a INT);
 | 
						|
PREPARE stmt FROM 'select 1 from `t1` where `a` = any (select (@@tmpdir))';
 | 
						|
EXECUTE stmt;
 | 
						|
DEALLOCATE PREPARE stmt;
 | 
						|
DROP TABLE t1;
 | 
						|
 | 
						|
CREATE TABLE t2 (a INT PRIMARY KEY);
 | 
						|
INSERT INTO t2 VALUES (400000), (400001);
 | 
						|
 | 
						|
SET @@sort_buffer_size=400000;
 | 
						|
 | 
						|
DELIMITER |;
 | 
						|
 | 
						|
CREATE FUNCTION p1(i INT) RETURNS INT
 | 
						|
BEGIN
 | 
						|
  SET @@sort_buffer_size= i;
 | 
						|
  RETURN i + 1;
 | 
						|
END|
 | 
						|
 | 
						|
DELIMITER ;|
 | 
						|
 | 
						|
--disable_ps2_protocol
 | 
						|
SELECT * FROM t2 WHERE a = @@sort_buffer_size AND p1(@@sort_buffer_size + 1) > a - 1;
 | 
						|
--enable_ps2_protocol
 | 
						|
 | 
						|
DROP TABLE t2;
 | 
						|
DROP FUNCTION p1;
 | 
						|
 | 
						|
 | 
						|
SELECT CONCAT(@@sort_buffer_size);
 | 
						|
SELECT LEFT("12345", @@ft_boolean_syntax);
 | 
						|
 | 
						|
SET @@sort_buffer_size=DEFAULT;
 | 
						|
 | 
						|
--echo End of 5.0 tests.
 | 
						|
 | 
						|
 | 
						|
--echo # Start of 10.5 tests
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # MDEV-25593 Assertion `0' failed in Type_handler_temporal_result::Item_get_date on double EXECUTE
 | 
						|
--echo #
 | 
						|
 | 
						|
SET time_zone='+00:00';
 | 
						|
SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:20:30');
 | 
						|
PREPARE stmt FROM 'SELECT ? AS c1';
 | 
						|
EXECUTE stmt USING current_timestamp;
 | 
						|
EXECUTE stmt USING @unknown;
 | 
						|
DEALLOCATE PREPARE stmt;
 | 
						|
 | 
						|
PREPARE stmt FROM 'SELECT ? AS c1 FROM DUAL';
 | 
						|
EXECUTE stmt USING current_time;
 | 
						|
EXECUTE stmt USING DEFAULT;
 | 
						|
DEALLOCATE PREPARE stmt;
 | 
						|
 | 
						|
PREPARE stmt FROM 'SELECT ? AS c1 FROM DUAL';
 | 
						|
EXECUTE stmt USING current_time;
 | 
						|
EXECUTE stmt USING IGNORE;
 | 
						|
DEALLOCATE PREPARE stmt;
 | 
						|
 | 
						|
PREPARE stmt FROM "SELECT DATE('') between''AND ? AS c1";
 | 
						|
EXECUTE stmt USING current_time;
 | 
						|
EXECUTE stmt USING @unknown;
 | 
						|
DEALLOCATE PREPARE stmt;
 | 
						|
 | 
						|
PREPARE stmt FROM 'SELECT CONCAT(UNIX_TIMESTAMP(?)) AS c1';
 | 
						|
EXECUTE stmt USING CURRENT_TIMESTAMP;
 | 
						|
EXECUTE stmt USING @unknown;
 | 
						|
DEALLOCATE PREPARE stmt;
 | 
						|
SET timestamp=DEFAULT;
 | 
						|
SET time_zone=DEFAULT;
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # MDEV-35596 Assertion `type_handler()->result_type() == value.type_handler()->result_type()' failed in virtual bool Item_param::get_date(THD*, MYSQL_TIME*, date_mode_t)
 | 
						|
--echo #
 | 
						|
 | 
						|
CREATE TABLE t (c TIMESTAMP);
 | 
						|
PREPARE s FROM 'DELETE FROM t WHERE c=?';
 | 
						|
EXECUTE s USING 1;
 | 
						|
INSERT INTO t (c) VALUES (now());
 | 
						|
EXECUTE s USING NULL;
 | 
						|
DROP TABLE t;
 | 
						|
 | 
						|
CREATE TABLE t (c TIMESTAMP);
 | 
						|
INSERT INTO t (c) VALUES ('2001-01-01 10:20:30');
 | 
						|
PREPARE s FROM 'DELETE FROM t WHERE c=?';
 | 
						|
EXECUTE s USING 1;
 | 
						|
EXECUTE s USING NULL;
 | 
						|
DROP TABLE t;
 | 
						|
 | 
						|
CREATE TABLE t (c TIMESTAMP);
 | 
						|
INSERT INTO t (c) VALUES ('2001-01-01 10:20:30');
 | 
						|
PREPARE s FROM 'DELETE FROM t WHERE c=?';
 | 
						|
EXECUTE s USING 1;
 | 
						|
--error ER_INVALID_DEFAULT_PARAM
 | 
						|
EXECUTE s USING DEFAULT;
 | 
						|
DROP TABLE t;
 | 
						|
 | 
						|
CREATE TABLE t (c TIMESTAMP);
 | 
						|
INSERT INTO t (c) VALUES ('2001-01-01 10:20:30');
 | 
						|
PREPARE s FROM 'DELETE FROM t WHERE c=?';
 | 
						|
EXECUTE s USING 1;
 | 
						|
--error ER_INVALID_DEFAULT_PARAM
 | 
						|
EXECUTE s USING IGNORE;
 | 
						|
DROP TABLE t;
 | 
						|
 | 
						|
--echo # End of 10.5 tests
 |