mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge
sql/sql_parse.cc: Auto merged sql/sql_union.cc: SCCS merged
This commit is contained in:
@ -13,3 +13,5 @@ t1 CREATE TABLE `t1` (
|
|||||||
`a` set('','a','b') NOT NULL default 'b'
|
`a` set('','a','b') NOT NULL default 'b'
|
||||||
) TYPE=MyISAM CHARSET=latin1
|
) TYPE=MyISAM CHARSET=latin1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 ( user varchar(64) NOT NULL default '', path varchar(255) NOT NULL default '', privilege set('select','RESERVED30','RESERVED29','RESERVED28','RESERVED27','RESERVED26', 'RESERVED25','RESERVED24','data.delete','RESERVED22','RESERVED21', 'RESERVED20','data.insert.none','data.insert.approve', 'data.insert.delete','data.insert.move','data.insert.propose', 'data.insert.reject','RESERVED13','RESERVED12','RESERVED11','RESERVED10', 'RESERVED09','data.update','RESERVED07','RESERVED06','RESERVED05', 'RESERVED04','metadata.delete','metadata.put','RESERVED01','RESERVED00') NOT NULL default '', KEY user (user) ) TYPE=MyISAM CHARSET=utf8;
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -12,3 +12,5 @@ drop table t1;
|
|||||||
create table t1 (a set (' ','a','b ') not null default 'b ');
|
create table t1 (a set (' ','a','b ') not null default 'b ');
|
||||||
show create table t1;
|
show create table t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 ( user varchar(64) NOT NULL default '', path varchar(255) NOT NULL default '', privilege set('select','RESERVED30','RESERVED29','RESERVED28','RESERVED27','RESERVED26', 'RESERVED25','RESERVED24','data.delete','RESERVED22','RESERVED21', 'RESERVED20','data.insert.none','data.insert.approve', 'data.insert.delete','data.insert.move','data.insert.propose', 'data.insert.reject','RESERVED13','RESERVED12','RESERVED11','RESERVED10', 'RESERVED09','data.update','RESERVED07','RESERVED06','RESERVED05', 'RESERVED04','metadata.delete','metadata.put','RESERVED01','RESERVED00') NOT NULL default '', KEY user (user) ) TYPE=MyISAM CHARSET=utf8;
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -4038,9 +4038,10 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (new_field->length > MAX_FIELD_CHARLENGTH ||
|
if ((new_field->length > MAX_FIELD_CHARLENGTH && type != FIELD_TYPE_SET &&
|
||||||
|
type != FIELD_TYPE_ENUM) ||
|
||||||
(!new_field->length && !(new_field->flags & BLOB_FLAG) &&
|
(!new_field->length && !(new_field->flags & BLOB_FLAG) &&
|
||||||
type != FIELD_TYPE_STRING &&
|
type != FIELD_TYPE_STRING &&
|
||||||
type != FIELD_TYPE_VAR_STRING && type != FIELD_TYPE_GEOMETRY))
|
type != FIELD_TYPE_VAR_STRING && type != FIELD_TYPE_GEOMETRY))
|
||||||
{
|
{
|
||||||
net_printf(thd,ER_TOO_BIG_FIELDLENGTH,field_name,
|
net_printf(thd,ER_TOO_BIG_FIELDLENGTH,field_name,
|
||||||
|
@ -123,7 +123,7 @@ int st_select_lex_unit::prepare(THD *thd, select_result *sel_result,
|
|||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
prepared= 1;
|
prepared= 1;
|
||||||
res= 0;
|
res= 0;
|
||||||
found_rows_for_union= 0;
|
found_rows_for_union= first_select_in_union()->options & OPTION_FOUND_ROWS;
|
||||||
TMP_TABLE_PARAM tmp_table_param;
|
TMP_TABLE_PARAM tmp_table_param;
|
||||||
result= sel_result;
|
result= sel_result;
|
||||||
t_and_f= tables_and_fields_initied;
|
t_and_f= tables_and_fields_initied;
|
||||||
@ -131,13 +131,6 @@ int st_select_lex_unit::prepare(THD *thd, select_result *sel_result,
|
|||||||
bzero((char *)&tmp_table_param,sizeof(TMP_TABLE_PARAM));
|
bzero((char *)&tmp_table_param,sizeof(TMP_TABLE_PARAM));
|
||||||
thd->lex.current_select= select_cursor= first_select_in_union();
|
thd->lex.current_select= select_cursor= first_select_in_union();
|
||||||
/* Global option */
|
/* Global option */
|
||||||
if (((void*)(global_parameters)) == ((void*)this))
|
|
||||||
{
|
|
||||||
found_rows_for_union= first_select()->options & OPTION_FOUND_ROWS &&
|
|
||||||
global_parameters->select_limit;
|
|
||||||
if (found_rows_for_union)
|
|
||||||
first_select()->options&= ~OPTION_FOUND_ROWS;
|
|
||||||
}
|
|
||||||
if (t_and_f)
|
if (t_and_f)
|
||||||
{
|
{
|
||||||
// Item list and tables will be initialized by mysql_derived
|
// Item list and tables will be initialized by mysql_derived
|
||||||
@ -245,6 +238,7 @@ int st_select_lex_unit::exec()
|
|||||||
{
|
{
|
||||||
SELECT_LEX *lex_select_save= thd->lex.current_select;
|
SELECT_LEX *lex_select_save= thd->lex.current_select;
|
||||||
SELECT_LEX *select_cursor=first_select_in_union();
|
SELECT_LEX *select_cursor=first_select_in_union();
|
||||||
|
unsigned int add_rows=0;
|
||||||
DBUG_ENTER("st_select_lex_unit::exec");
|
DBUG_ENTER("st_select_lex_unit::exec");
|
||||||
|
|
||||||
if (executed && !(dependent || uncacheable))
|
if (executed && !(dependent || uncacheable))
|
||||||
@ -261,6 +255,7 @@ int st_select_lex_unit::exec()
|
|||||||
}
|
}
|
||||||
for (SELECT_LEX *sl= select_cursor; sl; sl= sl->next_select())
|
for (SELECT_LEX *sl= select_cursor; sl; sl= sl->next_select())
|
||||||
{
|
{
|
||||||
|
unsigned int rows;
|
||||||
thd->lex.current_select= sl;
|
thd->lex.current_select= sl;
|
||||||
|
|
||||||
if (optimized)
|
if (optimized)
|
||||||
@ -273,6 +268,11 @@ int st_select_lex_unit::exec()
|
|||||||
select_limit_cnt= HA_POS_ERROR; // no limit
|
select_limit_cnt= HA_POS_ERROR; // no limit
|
||||||
if (select_limit_cnt == HA_POS_ERROR)
|
if (select_limit_cnt == HA_POS_ERROR)
|
||||||
sl->options&= ~OPTION_FOUND_ROWS;
|
sl->options&= ~OPTION_FOUND_ROWS;
|
||||||
|
else if (found_rows_for_union)
|
||||||
|
{
|
||||||
|
rows= thd->select_limit;
|
||||||
|
sl->options|= OPTION_FOUND_ROWS;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
As far as union share table space we should reassign table map,
|
As far as union share table space we should reassign table map,
|
||||||
@ -313,6 +313,8 @@ int st_select_lex_unit::exec()
|
|||||||
thd->lex.current_select= lex_select_save;
|
thd->lex.current_select= lex_select_save;
|
||||||
DBUG_RETURN(res);
|
DBUG_RETURN(res);
|
||||||
}
|
}
|
||||||
|
if (found_rows_for_union && !sl->braces && sl->options & OPTION_FOUND_ROWS)
|
||||||
|
add_rows+= (thd->limit_found_rows > rows) ? thd->limit_found_rows - rows : 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
optimized= 1;
|
optimized= 1;
|
||||||
@ -328,15 +330,17 @@ int st_select_lex_unit::exec()
|
|||||||
if (!thd->is_fatal_error) // Check if EOM
|
if (!thd->is_fatal_error) // Check if EOM
|
||||||
{
|
{
|
||||||
thd->lex.current_select= fake_select_lex;
|
thd->lex.current_select= fake_select_lex;
|
||||||
offset_limit_cnt= (select_cursor->braces ?
|
if (select_cursor->braces)
|
||||||
global_parameters->offset_limit : 0);
|
{
|
||||||
select_limit_cnt= (select_cursor->braces ?
|
offset_limit_cnt= global_parameters->offset_limit;
|
||||||
global_parameters->select_limit+
|
select_limit_cnt= global_parameters->select_limit + global_parameters->offset_limit;
|
||||||
global_parameters->offset_limit : HA_POS_ERROR);
|
if (select_limit_cnt < global_parameters->select_limit)
|
||||||
if (select_limit_cnt < global_parameters->select_limit)
|
select_limit_cnt= HA_POS_ERROR; // no limit
|
||||||
select_limit_cnt= HA_POS_ERROR; // no limit
|
}
|
||||||
if (select_limit_cnt == HA_POS_ERROR)
|
if (select_limit_cnt == HA_POS_ERROR)
|
||||||
thd->options&= ~OPTION_FOUND_ROWS;
|
thd->options&= ~OPTION_FOUND_ROWS;
|
||||||
|
else if (found_rows_for_union && !describe)
|
||||||
|
thd->options|= OPTION_FOUND_ROWS;
|
||||||
fake_select_lex->ftfunc_list= &empty_list;
|
fake_select_lex->ftfunc_list= &empty_list;
|
||||||
fake_select_lex->table_list.link_in_list((byte *)&result_table_list,
|
fake_select_lex->table_list.link_in_list((byte *)&result_table_list,
|
||||||
(byte **)
|
(byte **)
|
||||||
@ -374,7 +378,11 @@ int st_select_lex_unit::exec()
|
|||||||
thd->options | SELECT_NO_UNLOCK,
|
thd->options | SELECT_NO_UNLOCK,
|
||||||
result, this, fake_select_lex, 0);
|
result, this, fake_select_lex, 0);
|
||||||
if (found_rows_for_union && !res)
|
if (found_rows_for_union && !res)
|
||||||
thd->limit_found_rows = (ulonglong)table->file->records;
|
{
|
||||||
|
thd->limit_found_rows= table->file->records;
|
||||||
|
if (!select_cursor->braces)
|
||||||
|
thd->limit_found_rows+= add_rows;
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
Mark for slow query log if any of the union parts didn't use
|
Mark for slow query log if any of the union parts didn't use
|
||||||
indexes efficiently
|
indexes efficiently
|
||||||
|
Reference in New Issue
Block a user