Commit 814d720e authored by unknown's avatar unknown
Browse files

Merge sanja.is.com.ua:/home/bell/mysql/bk/mysql-4.1

into sanja.is.com.ua:/home/bell/mysql/bk/work-sub-4.1


sql/sql_parse.cc:
  Auto merged
parents 9f1751c5 db4683c6
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -222,7 +222,7 @@ THD::THD()

  init();
  /* Initialize sub structures */
  init_alloc_root(&warn_root, WARN_ALLOC_BLOCK_SIZE, WARN_ALLOC_PREALLOC_SIZE);
  init_sql_alloc(&warn_root, WARN_ALLOC_BLOCK_SIZE, WARN_ALLOC_PREALLOC_SIZE);
  user_connect=(USER_CONN *)0;
  hash_init(&user_vars, &my_charset_bin, USER_VARS_HASH_SIZE, 0, 0,
	    (hash_get_key) get_var_key,
@@ -258,7 +258,7 @@ THD::THD()
    transaction.trans_log.end_of_file= max_binlog_cache_size;
  }
#endif
  init_alloc_root(&transaction.mem_root, ALLOC_ROOT_MIN_BLOCK_SIZE, 0);
  init_sql_alloc(&transaction.mem_root, ALLOC_ROOT_MIN_BLOCK_SIZE, 0);
  {
    ulong tmp=sql_rnd_with_mutex();
    randominit(&rand, tmp + (ulong) &rand, tmp + (ulong) ::query_id);
@@ -1421,7 +1421,7 @@ Item_arena::Item_arena(bool init_mem_root)
  state(CONVENTIONAL_EXECUTION)
{
  if (init_mem_root)
    init_alloc_root(&mem_root, ALLOC_ROOT_MIN_BLOCK_SIZE, 0);
    init_sql_alloc(&mem_root, ALLOC_ROOT_MIN_BLOCK_SIZE, 0);
}


+27 −9
Original line number Diff line number Diff line
@@ -2018,6 +2018,7 @@ mysql_execute_command(THD *thd)
      CHARSET_INFO *to_cs= thd->variables.collation_connection;
      bool need_conversion;
      user_var_entry *entry;
      String *pstr= &str;
      uint32 unused;
      /*
        Convert @var contents to string in connection character set. Although
@@ -2033,26 +2034,43 @@ mysql_execute_command(THD *thd)
        String *pstr;
        my_bool is_var_null;
        pstr= entry->val_str(&is_var_null, &str, NOT_FIXED_DEC);
        /*
          NULL value of variable checked early as entry->value so here
          we can't get NULL in normal conditions
        */
        DBUG_ASSERT(!is_var_null);
        if (!pstr)
          send_error(thd, ER_OUT_OF_RESOURCES);
        DBUG_ASSERT(pstr == &str);
        {
          res= -1;
          break;      // EOM (error should be reported by allocator)
        }
      }
      else
      {
        /*
          variable absent or equal to NULL, so we need to set variable to
          something reasonable to get readable error message during parsing
        */
        str.set("NULL", 4, &my_charset_latin1);
      }

      need_conversion=
        String::needs_conversion(str.length(), str.charset(), to_cs, &unused);
        String::needs_conversion(pstr->length(), pstr->charset(),
                                 to_cs, &unused);

      query_len= need_conversion? (str.length() * to_cs->mbmaxlen) :
                                  str.length();
      query_len= need_conversion? (pstr->length() * to_cs->mbmaxlen) :
                                  pstr->length();
      if (!(query_str= alloc_root(&thd->mem_root, query_len+1)))
        send_error(thd, ER_OUT_OF_RESOURCES);
      {
        res= -1;
        break;        // EOM (error should be reported by allocator)
      }

      if (need_conversion)
        query_len= copy_and_convert(query_str, query_len, to_cs, str.ptr(),
                                    str.length(), str.charset());
        query_len= copy_and_convert(query_str, query_len, to_cs, pstr->ptr(),
                                    pstr->length(), pstr->charset());
      else
        memcpy(query_str, str.ptr(), str.length());
        memcpy(query_str, pstr->ptr(), pstr->length());
      query_str[query_len]= 0;
    }
    else