mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
merge with 3.23 to get:
- Fix for empty table/column names mysql-test/t/create.test: Auto merged sql/sql_parse.cc: Auto merged sql/ha_innodb.cc: Auto merged sql/table.cc: Auto merged tests/grant.pl: Auto merged sql/filesort.cc: merge with 3.23 sql/sql_table.cc: merge with 3.23 tests/grant.res: merge with 3.23
This commit is contained in:
@ -55,6 +55,14 @@ create table test_$1.test2$ (a int);
|
|||||||
drop table test_$1.test2$;
|
drop table test_$1.test2$;
|
||||||
drop database test_$1;
|
drop database test_$1;
|
||||||
|
|
||||||
|
--error 1103
|
||||||
|
create table `` (a int);
|
||||||
|
--error 1103
|
||||||
|
drop table if exists ``;
|
||||||
|
--error 1166
|
||||||
|
create table t1 (`` int);
|
||||||
|
drop table if exists t1;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Test of CREATE ... SELECT with indexes
|
# Test of CREATE ... SELECT with indexes
|
||||||
#
|
#
|
||||||
|
@ -68,7 +68,7 @@ ha_rows filesort(TABLE *table, SORT_FIELD *sortorder, uint s_length,
|
|||||||
ha_rows *examined_rows)
|
ha_rows *examined_rows)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
ulong memavl;
|
ulong memavl, min_sort_memory;
|
||||||
uint maxbuffer;
|
uint maxbuffer;
|
||||||
BUFFPEK *buffpek;
|
BUFFPEK *buffpek;
|
||||||
ha_rows records;
|
ha_rows records;
|
||||||
@ -137,7 +137,8 @@ ha_rows filesort(TABLE *table, SORT_FIELD *sortorder, uint s_length,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
memavl= thd->variables.sortbuff_size;
|
memavl= thd->variables.sortbuff_size;
|
||||||
while (memavl >= MIN_SORT_MEMORY)
|
min_sort_memory= max(MIN_SORT_MEMORY, param.sort_length*MERGEBUFF2);
|
||||||
|
while (memavl >= min_sort_memory)
|
||||||
{
|
{
|
||||||
ulong old_memavl;
|
ulong old_memavl;
|
||||||
ulong keys= memavl/(param.sort_length+sizeof(char*));
|
ulong keys= memavl/(param.sort_length+sizeof(char*));
|
||||||
@ -146,15 +147,10 @@ ha_rows filesort(TABLE *table, SORT_FIELD *sortorder, uint s_length,
|
|||||||
MYF(0))))
|
MYF(0))))
|
||||||
break;
|
break;
|
||||||
old_memavl=memavl;
|
old_memavl=memavl;
|
||||||
if ((memavl=memavl/4*3) < MIN_SORT_MEMORY && old_memavl > MIN_SORT_MEMORY)
|
if ((memavl=memavl/4*3) < min_sort_memory && old_memavl > min_sort_memory)
|
||||||
memavl=MIN_SORT_MEMORY;
|
memavl= min_sort_memory;
|
||||||
}
|
}
|
||||||
if (memavl < param.sort_length*MERGEBUFF2)
|
if (memavl < min_sort_memory)
|
||||||
{
|
|
||||||
my_error(ER_OUT_OF_SORTMEMORY,MYF(0));
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if (memavl < MIN_SORT_MEMORY)
|
|
||||||
{
|
{
|
||||||
my_error(ER_OUTOFMEMORY,MYF(ME_ERROR+ME_WAITTANG),
|
my_error(ER_OUTOFMEMORY,MYF(ME_ERROR+ME_WAITTANG),
|
||||||
thd->variables.sortbuff_size);
|
thd->variables.sortbuff_size);
|
||||||
|
@ -3218,8 +3218,7 @@ TABLE_LIST *add_table_to_list(Table_ident *table, LEX_STRING *alias,
|
|||||||
if (!table)
|
if (!table)
|
||||||
DBUG_RETURN(0); // End of memory
|
DBUG_RETURN(0); // End of memory
|
||||||
alias_str= alias ? alias->str : table->table.str;
|
alias_str= alias ? alias->str : table->table.str;
|
||||||
if (table->table.length > NAME_LEN ||
|
if (check_table_name(table->table.str,table->table.length) ||
|
||||||
check_table_name(table->table.str,table->table.length) ||
|
|
||||||
table->db.str && check_db_name(table->db.str))
|
table->db.str && check_db_name(table->db.str))
|
||||||
{
|
{
|
||||||
net_printf(&thd->net,ER_WRONG_TABLE_NAME,table->table.str);
|
net_printf(&thd->net,ER_WRONG_TABLE_NAME,table->table.str);
|
||||||
|
@ -394,6 +394,11 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
|
|||||||
}
|
}
|
||||||
if (!(sql_field->flags & NOT_NULL_FLAG))
|
if (!(sql_field->flags & NOT_NULL_FLAG))
|
||||||
null_fields++;
|
null_fields++;
|
||||||
|
if (check_column_name(sql_field->field_name))
|
||||||
|
{
|
||||||
|
my_error(ER_WRONG_COLUMN_NAME, MYF(0), sql_field->field_name);
|
||||||
|
DBUG_RETURN(-1);
|
||||||
|
}
|
||||||
while ((dup_field=it2++) != sql_field)
|
while ((dup_field=it2++) != sql_field)
|
||||||
{
|
{
|
||||||
if (my_strcasecmp(sql_field->field_name, dup_field->field_name) == 0)
|
if (my_strcasecmp(sql_field->field_name, dup_field->field_name) == 0)
|
||||||
@ -830,12 +835,6 @@ TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info,
|
|||||||
while ((item=it++))
|
while ((item=it++))
|
||||||
{
|
{
|
||||||
create_field *cr_field;
|
create_field *cr_field;
|
||||||
if (strlen(item->name) > NAME_LEN ||
|
|
||||||
check_column_name(item->name))
|
|
||||||
{
|
|
||||||
my_error(ER_WRONG_COLUMN_NAME,MYF(0),item->name);
|
|
||||||
DBUG_RETURN(0);
|
|
||||||
}
|
|
||||||
Field *field;
|
Field *field;
|
||||||
if (item->type() == Item::FUNC_ITEM)
|
if (item->type() == Item::FUNC_ITEM)
|
||||||
field=item->tmp_table_field(&tmp_table);
|
field=item->tmp_table_field(&tmp_table);
|
||||||
|
@ -1164,6 +1164,8 @@ bool check_db_name(char *name)
|
|||||||
bool check_table_name(const char *name, uint length)
|
bool check_table_name(const char *name, uint length)
|
||||||
{
|
{
|
||||||
const char *end= name+length;
|
const char *end= name+length;
|
||||||
|
if (!length || length > NAME_LEN)
|
||||||
|
return 1;
|
||||||
|
|
||||||
while (name != end)
|
while (name != end)
|
||||||
{
|
{
|
||||||
@ -1187,6 +1189,8 @@ bool check_table_name(const char *name, uint length)
|
|||||||
|
|
||||||
bool check_column_name(const char *name)
|
bool check_column_name(const char *name)
|
||||||
{
|
{
|
||||||
|
const char *start= name;
|
||||||
|
|
||||||
while (*name)
|
while (*name)
|
||||||
{
|
{
|
||||||
#if defined(USE_MB) && defined(USE_MB_IDENT)
|
#if defined(USE_MB) && defined(USE_MB_IDENT)
|
||||||
@ -1204,7 +1208,8 @@ bool check_column_name(const char *name)
|
|||||||
return 1;
|
return 1;
|
||||||
name++;
|
name++;
|
||||||
}
|
}
|
||||||
return 0;
|
/* Error if empty or too long column name */
|
||||||
|
return (name == start || (uint) (name - start) > NAME_LEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -210,6 +210,16 @@ user_query("delete from $opt_database.test where a=1",1);
|
|||||||
user_query("update $opt_database.test set b=3 where b=1",1);
|
user_query("update $opt_database.test set b=3 where b=1",1);
|
||||||
user_query("update $opt_database.test set b=b+1",1);
|
user_query("update $opt_database.test set b=b+1",1);
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test global SELECT privilege combined with table level privileges
|
||||||
|
#
|
||||||
|
|
||||||
|
safe_query("grant SELECT on *.* to $user");
|
||||||
|
user_connect(0);
|
||||||
|
user_query("update $opt_database.test set b=b+1");
|
||||||
|
safe_query("revoke SELECT on *.* from $user");
|
||||||
|
user_connect(0);
|
||||||
|
|
||||||
# Add one privilege at a time until the user has all privileges
|
# Add one privilege at a time until the user has all privileges
|
||||||
user_query("select * from test",1);
|
user_query("select * from test",1);
|
||||||
safe_query("grant select on $opt_database.test to $user");
|
safe_query("grant select on $opt_database.test to $user");
|
||||||
|
@ -195,7 +195,12 @@ update grant_test.test set b=3 where b=1
|
|||||||
Error in execute: SELECT command denied to user: 'grant_user@localhost' for column 'b' in table 'test'
|
Error in execute: SELECT command denied to user: 'grant_user@localhost' for column 'b' in table 'test'
|
||||||
update grant_test.test set b=b+1
|
update grant_test.test set b=b+1
|
||||||
Error in execute: SELECT command denied to user: 'grant_user@localhost' for column 'b' in table 'test'
|
Error in execute: SELECT command denied to user: 'grant_user@localhost' for column 'b' in table 'test'
|
||||||
select * from test
|
grant SELECT on *.* to grant_user@localhost
|
||||||
|
Connecting grant_user
|
||||||
|
update grant_test.test set b=b+1
|
||||||
|
revoke SELECT on *.* from grant_user@localhost
|
||||||
|
Connecting grant_user
|
||||||
|
lect * from test
|
||||||
Error in execute: select command denied to user: 'grant_user@localhost' for table 'test'
|
Error in execute: select command denied to user: 'grant_user@localhost' for table 'test'
|
||||||
grant select on grant_test.test to grant_user@localhost
|
grant select on grant_test.test to grant_user@localhost
|
||||||
delete from grant_test.test where a=1
|
delete from grant_test.test where a=1
|
||||||
|
Reference in New Issue
Block a user