Commit eca431f3 authored by unknown's avatar unknown
Browse files

Merge olga.mysql.com:/home/igor/mysql-5.0-opt

into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug25027


sql/item_cmpfunc.cc:
  Auto merged
sql/item_cmpfunc.h:
  Auto merged
sql/sql_lex.cc:
  Auto merged
parents 48451b86 cbd1bd90
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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.
+5 −0
Original line number Diff line number Diff line
@@ -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.
+3 −3
Original line number Diff line number Diff line
@@ -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;
}
@@ -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));
@@ -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();
+2 −1
Original line number Diff line number Diff line
@@ -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();
+1 −0
Original line number Diff line number Diff line
@@ -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() :