Loading mysql-test/r/func_in.result +9 −0 Original line number Diff line number Diff line Loading @@ -202,6 +202,14 @@ select count(*) from t1 where id not in (1,2); count(*) 1 drop table t1; DROP TABLE IF EXISTS t1; CREATE TABLE t1 SELECT 1 IN (2, NULL); SELECT should return NULL. SELECT * FROM t1; 1 IN (2, NULL) NULL DROP TABLE t1; End of 4.1 tests CREATE TABLE t1 (a int PRIMARY KEY); INSERT INTO t1 VALUES (44), (45), (46); SELECT * FROM t1 WHERE a IN (45); Loading Loading @@ -343,3 +351,4 @@ some_id 1 2 drop table t1; End of 5.0 tests mysql-test/r/func_str.result +13 −0 Original line number Diff line number Diff line Loading @@ -1903,4 +1903,17 @@ Warnings: Error 1292 Truncated incorrect DECIMAL value: '' Error 1292 Truncated incorrect DECIMAL value: '' Warning 1301 Result of lpad() was larger than max_allowed_packet (1048576) - truncated SET @orig_sql_mode = @@SQL_MODE; SET SQL_MODE=traditional; SELECT CHAR(0xff,0x8f USING utf8); CHAR(0xff,0x8f USING utf8) NULL Warnings: Error 1300 Invalid utf8 character string: 'FF8F' SELECT CHAR(0xff,0x8f USING utf8) IS NULL; CHAR(0xff,0x8f USING utf8) IS NULL 1 Warnings: Error 1300 Invalid utf8 character string: 'FF8F' SET SQL_MODE=@orig_sql_mode; End of 5.0 tests mysql-test/t/func_in.test +25 −1 Original line number Diff line number Diff line Loading @@ -109,7 +109,28 @@ select count(*) from t1 where id not in (1); select count(*) from t1 where id not in (1,2); drop table t1; # End of 4.1 tests # # BUG#17047: CHAR() and IN() can return NULL without signaling NULL # result # # The problem was in the IN() function that ignored maybe_null flags # of all arguments except the first (the one _before_ the IN # keyword, '1' in the test case below). # --disable_warnings DROP TABLE IF EXISTS t1; --enable_warnings CREATE TABLE t1 SELECT 1 IN (2, NULL); --echo SELECT should return NULL. SELECT * FROM t1; DROP TABLE t1; --echo End of 4.1 tests # # Bug #11885: WHERE condition with NOT IN (one element) Loading Loading @@ -232,3 +253,6 @@ select some_id from t1 where some_id not in(2,-1); select some_id from t1 where some_id not in(-4,-1,-4); select some_id from t1 where some_id not in(-4,-1,3423534,2342342); drop table t1; --echo End of 5.0 tests mysql-test/t/func_str.test +15 −0 Original line number Diff line number Diff line Loading @@ -780,6 +780,7 @@ SELECT * FROM t1 INNER JOIN t2 ON code=id DROP TABLE t1,t2; # # Bug #10963 # 4294967296 18446744073709551616 Loading Loading @@ -969,4 +970,18 @@ select lpad('hello', 18446744073709551616, '1'); select lpad('hello', -18446744073709551617, '1'); select lpad('hello', 18446744073709551617, '1'); # # BUG#17047: CHAR() and IN() can return NULL without signaling NULL # result # SET @orig_sql_mode = @@SQL_MODE; SET SQL_MODE=traditional; SELECT CHAR(0xff,0x8f USING utf8); SELECT CHAR(0xff,0x8f USING utf8) IS NULL; SET SQL_MODE=@orig_sql_mode; --echo End of 5.0 tests sql/item_cmpfunc.cc +0 −1 Original line number Diff line number Diff line Loading @@ -2465,7 +2465,6 @@ void Item_func_in::fix_length_and_dec() if (cmp_type == STRING_RESULT) in_item->cmp_charset= cmp_collation.collation; } maybe_null= args[0]->maybe_null; max_length= 1; } Loading Loading
mysql-test/r/func_in.result +9 −0 Original line number Diff line number Diff line Loading @@ -202,6 +202,14 @@ select count(*) from t1 where id not in (1,2); count(*) 1 drop table t1; DROP TABLE IF EXISTS t1; CREATE TABLE t1 SELECT 1 IN (2, NULL); SELECT should return NULL. SELECT * FROM t1; 1 IN (2, NULL) NULL DROP TABLE t1; End of 4.1 tests CREATE TABLE t1 (a int PRIMARY KEY); INSERT INTO t1 VALUES (44), (45), (46); SELECT * FROM t1 WHERE a IN (45); Loading Loading @@ -343,3 +351,4 @@ some_id 1 2 drop table t1; End of 5.0 tests
mysql-test/r/func_str.result +13 −0 Original line number Diff line number Diff line Loading @@ -1903,4 +1903,17 @@ Warnings: Error 1292 Truncated incorrect DECIMAL value: '' Error 1292 Truncated incorrect DECIMAL value: '' Warning 1301 Result of lpad() was larger than max_allowed_packet (1048576) - truncated SET @orig_sql_mode = @@SQL_MODE; SET SQL_MODE=traditional; SELECT CHAR(0xff,0x8f USING utf8); CHAR(0xff,0x8f USING utf8) NULL Warnings: Error 1300 Invalid utf8 character string: 'FF8F' SELECT CHAR(0xff,0x8f USING utf8) IS NULL; CHAR(0xff,0x8f USING utf8) IS NULL 1 Warnings: Error 1300 Invalid utf8 character string: 'FF8F' SET SQL_MODE=@orig_sql_mode; End of 5.0 tests
mysql-test/t/func_in.test +25 −1 Original line number Diff line number Diff line Loading @@ -109,7 +109,28 @@ select count(*) from t1 where id not in (1); select count(*) from t1 where id not in (1,2); drop table t1; # End of 4.1 tests # # BUG#17047: CHAR() and IN() can return NULL without signaling NULL # result # # The problem was in the IN() function that ignored maybe_null flags # of all arguments except the first (the one _before_ the IN # keyword, '1' in the test case below). # --disable_warnings DROP TABLE IF EXISTS t1; --enable_warnings CREATE TABLE t1 SELECT 1 IN (2, NULL); --echo SELECT should return NULL. SELECT * FROM t1; DROP TABLE t1; --echo End of 4.1 tests # # Bug #11885: WHERE condition with NOT IN (one element) Loading Loading @@ -232,3 +253,6 @@ select some_id from t1 where some_id not in(2,-1); select some_id from t1 where some_id not in(-4,-1,-4); select some_id from t1 where some_id not in(-4,-1,3423534,2342342); drop table t1; --echo End of 5.0 tests
mysql-test/t/func_str.test +15 −0 Original line number Diff line number Diff line Loading @@ -780,6 +780,7 @@ SELECT * FROM t1 INNER JOIN t2 ON code=id DROP TABLE t1,t2; # # Bug #10963 # 4294967296 18446744073709551616 Loading Loading @@ -969,4 +970,18 @@ select lpad('hello', 18446744073709551616, '1'); select lpad('hello', -18446744073709551617, '1'); select lpad('hello', 18446744073709551617, '1'); # # BUG#17047: CHAR() and IN() can return NULL without signaling NULL # result # SET @orig_sql_mode = @@SQL_MODE; SET SQL_MODE=traditional; SELECT CHAR(0xff,0x8f USING utf8); SELECT CHAR(0xff,0x8f USING utf8) IS NULL; SET SQL_MODE=@orig_sql_mode; --echo End of 5.0 tests
sql/item_cmpfunc.cc +0 −1 Original line number Diff line number Diff line Loading @@ -2465,7 +2465,6 @@ void Item_func_in::fix_length_and_dec() if (cmp_type == STRING_RESULT) in_item->cmp_charset= cmp_collation.collation; } maybe_null= args[0]->maybe_null; max_length= 1; } Loading