mirror of
https://github.com/MariaDB/server.git
synced 2025-02-02 20:11:42 +01:00
Merge lgrimmer@bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/space/my/mysql-4.1
This commit is contained in:
commit
a77d4ce272
4 changed files with 39 additions and 29 deletions
|
@ -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,37 +612,30 @@ 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));
|
||||
if (!e)
|
||||
{
|
||||
fprintf(stderr, "Internal memory allocation error\n");
|
||||
exit(1);
|
||||
}
|
||||
/* 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)
|
||||
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:
|
||||
{
|
||||
{
|
||||
char buff[255];
|
||||
char *end= compatible_mode_normal_str;
|
||||
int i;
|
||||
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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())
|
||||
|
|
Loading…
Add table
Reference in a new issue