Loading mysql-test/r/ps.result +7 −0 Original line number Diff line number Diff line Loading @@ -1528,5 +1528,12 @@ a 1 2 DEALLOCATE PREPARE stmt; PREPARE stmt FROM 'SELECT a FROM t1 WHERE (SELECT b FROM t2 limit ?) IS NULL'; SET @arg=1; EXECUTE stmt USING @arg; a 1 2 DEALLOCATE PREPARE stmt; DROP TABLE t1,t2; End of 5.0 tests. mysql-test/t/ps.test +5 −0 Original line number Diff line number Diff line Loading @@ -1577,8 +1577,13 @@ SELECT a FROM t1 WHERE (SELECT b FROM t2) IS NULL; PREPARE stmt FROM 'SELECT a FROM t1 WHERE (SELECT b FROM t2) IS NULL'; EXECUTE stmt; DEALLOCATE PREPARE stmt; PREPARE stmt FROM 'SELECT a FROM t1 WHERE (SELECT b FROM t2 limit ?) IS NULL'; SET @arg=1; EXECUTE stmt USING @arg; DEALLOCATE PREPARE stmt; DROP TABLE t1,t2; --echo End of 5.0 tests. sql/item_cmpfunc.cc +3 −3 Original line number Diff line number Diff line Loading @@ -2989,7 +2989,7 @@ longlong Item_func_isnull::val_int() Handle optimization if the argument can't be null This has to be here because of the test in update_used_tables(). */ if (!used_tables_cache) if (!used_tables_cache && !with_subselect) return cached_value; return args[0]->is_null() ? 1: 0; } Loading @@ -2998,7 +2998,7 @@ longlong Item_is_not_null_test::val_int() { DBUG_ASSERT(fixed == 1); DBUG_ENTER("Item_is_not_null_test::val_int"); if (!used_tables_cache) if (!used_tables_cache && !with_subselect) { owner->was_null|= (!cached_value); DBUG_PRINT("info", ("cached :%ld", (long) cached_value)); Loading @@ -3025,7 +3025,7 @@ void Item_is_not_null_test::update_used_tables() else { args[0]->update_used_tables(); if (!(used_tables_cache=args[0]->used_tables())) if (!(used_tables_cache=args[0]->used_tables()) && !with_subselect) { /* Remember if the value is always NULL or never NULL */ cached_value= (longlong) !args[0]->is_null(); Loading sql/item_cmpfunc.h +2 −1 Original line number Diff line number Diff line Loading @@ -1027,7 +1027,8 @@ class Item_func_isnull :public Item_bool_func else { args[0]->update_used_tables(); if ((const_item_cache= !(used_tables_cache= args[0]->used_tables()))) if ((const_item_cache= !(used_tables_cache= args[0]->used_tables())) && !with_subselect) { /* Remember if the value is always NULL or never NULL */ cached_value= (longlong) args[0]->is_null(); Loading sql/sql_lex.cc +1 −0 Original line number Diff line number Diff line Loading @@ -1902,6 +1902,7 @@ void st_select_lex_unit::set_limit(SELECT_LEX *sl) { ha_rows select_limit_val; DBUG_ASSERT(! thd->stmt_arena->is_stmt_prepare()); select_limit_val= (ha_rows)(sl->select_limit ? sl->select_limit->val_uint() : HA_POS_ERROR); offset_limit_cnt= (ha_rows)(sl->offset_limit ? sl->offset_limit->val_uint() : Loading Loading
mysql-test/r/ps.result +7 −0 Original line number Diff line number Diff line Loading @@ -1528,5 +1528,12 @@ a 1 2 DEALLOCATE PREPARE stmt; PREPARE stmt FROM 'SELECT a FROM t1 WHERE (SELECT b FROM t2 limit ?) IS NULL'; SET @arg=1; EXECUTE stmt USING @arg; a 1 2 DEALLOCATE PREPARE stmt; DROP TABLE t1,t2; End of 5.0 tests.
mysql-test/t/ps.test +5 −0 Original line number Diff line number Diff line Loading @@ -1577,8 +1577,13 @@ SELECT a FROM t1 WHERE (SELECT b FROM t2) IS NULL; PREPARE stmt FROM 'SELECT a FROM t1 WHERE (SELECT b FROM t2) IS NULL'; EXECUTE stmt; DEALLOCATE PREPARE stmt; PREPARE stmt FROM 'SELECT a FROM t1 WHERE (SELECT b FROM t2 limit ?) IS NULL'; SET @arg=1; EXECUTE stmt USING @arg; DEALLOCATE PREPARE stmt; DROP TABLE t1,t2; --echo End of 5.0 tests.
sql/item_cmpfunc.cc +3 −3 Original line number Diff line number Diff line Loading @@ -2989,7 +2989,7 @@ longlong Item_func_isnull::val_int() Handle optimization if the argument can't be null This has to be here because of the test in update_used_tables(). */ if (!used_tables_cache) if (!used_tables_cache && !with_subselect) return cached_value; return args[0]->is_null() ? 1: 0; } Loading @@ -2998,7 +2998,7 @@ longlong Item_is_not_null_test::val_int() { DBUG_ASSERT(fixed == 1); DBUG_ENTER("Item_is_not_null_test::val_int"); if (!used_tables_cache) if (!used_tables_cache && !with_subselect) { owner->was_null|= (!cached_value); DBUG_PRINT("info", ("cached :%ld", (long) cached_value)); Loading @@ -3025,7 +3025,7 @@ void Item_is_not_null_test::update_used_tables() else { args[0]->update_used_tables(); if (!(used_tables_cache=args[0]->used_tables())) if (!(used_tables_cache=args[0]->used_tables()) && !with_subselect) { /* Remember if the value is always NULL or never NULL */ cached_value= (longlong) !args[0]->is_null(); Loading
sql/item_cmpfunc.h +2 −1 Original line number Diff line number Diff line Loading @@ -1027,7 +1027,8 @@ class Item_func_isnull :public Item_bool_func else { args[0]->update_used_tables(); if ((const_item_cache= !(used_tables_cache= args[0]->used_tables()))) if ((const_item_cache= !(used_tables_cache= args[0]->used_tables())) && !with_subselect) { /* Remember if the value is always NULL or never NULL */ cached_value= (longlong) args[0]->is_null(); Loading
sql/sql_lex.cc +1 −0 Original line number Diff line number Diff line Loading @@ -1902,6 +1902,7 @@ void st_select_lex_unit::set_limit(SELECT_LEX *sl) { ha_rows select_limit_val; DBUG_ASSERT(! thd->stmt_arena->is_stmt_prepare()); select_limit_val= (ha_rows)(sl->select_limit ? sl->select_limit->val_uint() : HA_POS_ERROR); offset_limit_cnt= (ha_rows)(sl->offset_limit ? sl->offset_limit->val_uint() : Loading