Commit a77d4ce2 authored by unknown's avatar unknown
Browse files

Merge lgrimmer@bk-internal.mysql.com:/home/bk/mysql-4.1

into mysql.com:/space/my/mysql-4.1

parents 5256ae35 0ebb5292
Loading
Loading
Loading
Loading
+15 −28
Original line number Diff line number Diff line
@@ -137,7 +137,6 @@ typedef struct st_table_rule_ent
  uint key_len;
} TABLE_RULE_ENT;

my_bool ignore_table_inited;
HASH ignore_table;

static struct my_option my_long_options[] =
@@ -532,16 +531,12 @@ static byte* get_table_key(TABLE_RULE_ENT* e, uint* len,
}


void init_table_rule_hash(HASH* h, bool* h_inited)
void init_table_rule_hash(HASH* h)
{
  if(hash_init(h, charset_info, TABLE_RULE_HASH_SIZE, 0, 0,
	       (hash_get_key) get_table_key,
	       (hash_free_key) free_table_ent, 0))
  {
    fprintf(stderr, "Internal hash initialization error\n");
    exit(1);
  }
  *h_inited= 1;
    exit(EX_EOM);
}


@@ -617,33 +612,26 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
    break;
  case (int) OPT_IGNORE_TABLE:
  {
    const char* dot = strchr(argument, '.');
    if (!dot) 
    uint len= (uint)strlen(argument);
    TABLE_RULE_ENT* e;
    if (!strchr(argument, '.'))
    {
      fprintf(stderr, "Illegal use of option --ignore-table=<database>.<table>\n");
      exit(1);
    }
    // len is always > 0 because we know the there exists a '.'
    uint len= (uint)strlen(argument);
    TABLE_RULE_ENT* e= (TABLE_RULE_ENT*)my_malloc(sizeof(TABLE_RULE_ENT)
						  + len, MYF(MY_WME));
    /* len is always > 0 because we know the there exists a '.' */
    e= (TABLE_RULE_ENT*)my_malloc(sizeof(TABLE_RULE_ENT) + len, MYF(MY_WME));
    if (!e)
    {
      fprintf(stderr, "Internal memory allocation error\n");
      exit(1);
    }
      exit(EX_EOM);
    e->key= (char*)e + sizeof(TABLE_RULE_ENT);
    e->key_len= len;
    memcpy(e->key, argument, len);

    if (!ignore_table_inited)
      init_table_rule_hash(&ignore_table, &ignore_table_inited);
    if (!hash_inited(&ignore_table))
      init_table_rule_hash(&ignore_table);

    if(my_hash_insert(&ignore_table, (byte*)e))
    {
      fprintf(stderr, "Internal hash insert error\n");
      exit(1);
    }
      exit(EX_EOM);
    break;
  }
  case (int) OPT_COMPATIBLE:
@@ -2021,8 +2009,7 @@ static int init_dumping(char *database)

my_bool include_table(byte* hash_key, uint len)
{
  if (ignore_table_inited &&
      hash_search(&ignore_table, (byte*) hash_key, len))
  if (hash_search(&ignore_table, (byte*) hash_key, len))
    return FALSE;

  return TRUE;
+6 −0
Original line number Diff line number Diff line
@@ -697,3 +697,9 @@ quote(ltrim(concat(' ', 'a')))
select quote(trim(concat('    ', 'a')));
quote(trim(concat('    ', 'a')))
'a'
select trim(null from 'kate') as "must_be_null";
must_be_null
NULL
select trim('xyz' from null) as "must_be_null";
must_be_null
NULL
+8 −0
Original line number Diff line number Diff line
@@ -435,3 +435,11 @@ drop table t1;

select quote(ltrim(concat('    ', 'a')));
select quote(trim(concat('    ', 'a')));

#
# Bug#7455 unexpected result: TRIM(<NULL> FROM <whatever>) gives NOT NULL
# According to ANSI if one of the TRIM arguments is NULL, then the result
# must be NULL too.
#
select trim(null from 'kate') as "must_be_null";
select trim('xyz' from null) as "must_be_null";
+10 −1
Original line number Diff line number Diff line
@@ -1302,9 +1302,18 @@ String *Item_func_trim::val_str(String *str)
    return 0;					/* purecov: inspected */
  char buff[MAX_FIELD_WIDTH];
  String tmp(buff,sizeof(buff),res->charset());
  String *remove_str= (arg_count==2) ? args[1]->val_str(&tmp) : &remove;
  uint remove_length;
  LINT_INIT(remove_length);
  String *remove_str; /* The string to remove from res. */

  if (arg_count == 2)
  {
    remove_str= args[1]->val_str(&tmp);
    if ((null_value= args[1]->null_value))
      return 0;
  }
  else
    remove_str= &remove; /* Default value. */

  if (!remove_str || (remove_length=remove_str->length()) == 0 ||
      remove_length > res->length())