Commit 9e0240d3 authored by unknown's avatar unknown

Merge aelkin@bk-internal.mysql.com:/home/bk/mysql-5.0

into  mysql.com:/usr_rh9/home/elkin.rh9/MySQL/mysql-5.0

parents 794e94e4 333b1f85
...@@ -1084,3 +1084,16 @@ DROP TABLE t1; ...@@ -1084,3 +1084,16 @@ DROP TABLE t1;
DROP VIEW v1; DROP VIEW v1;
DROP FUNCTION func1; DROP FUNCTION func1;
DROP FUNCTION func2; DROP FUNCTION func2;
create database mysqltest;
create table mysqltest.t1(a int);
select table_schema from information_schema.tables where table_schema='mysqltest';
table_schema
drop database mysqltest;
select column_type, group_concat(table_schema, '.', table_name), count(*) as num
from information_schema.columns where
table_schema='information_schema' and
(column_type = 'varchar(7)' or column_type = 'varchar(20)')
group by column_type order by num;
column_type group_concat(table_schema, '.', table_name) num
varchar(20) information_schema.COLUMNS 1
varchar(7) information_schema.ROUTINES,information_schema.VIEWS 2
...@@ -790,3 +790,22 @@ DROP TABLE t1; ...@@ -790,3 +790,22 @@ DROP TABLE t1;
DROP VIEW v1; DROP VIEW v1;
DROP FUNCTION func1; DROP FUNCTION func1;
DROP FUNCTION func2; DROP FUNCTION func2;
#
# Bug #15851 Unlistable directories yield no info from information_schema
#
create database mysqltest;
create table mysqltest.t1(a int);
--exec chmod -r $MYSQL_TEST_DIR/var/master-data/mysqltest
select table_schema from information_schema.tables where table_schema='mysqltest';
--exec chmod +r $MYSQL_TEST_DIR/var/master-data/mysqltest
drop database mysqltest;
#
# Bug#15307 GROUP_CONCAT() with ORDER BY returns empty set on information_schema
#
select column_type, group_concat(table_schema, '.', table_name), count(*) as num
from information_schema.columns where
table_schema='information_schema' and
(column_type = 'varchar(7)' or column_type = 'varchar(20)')
group by column_type order by num;
...@@ -170,6 +170,8 @@ MY_DIR *my_dir(const char *path, myf MyFlags) ...@@ -170,6 +170,8 @@ MY_DIR *my_dir(const char *path, myf MyFlags)
bzero(finfo.mystat, sizeof(MY_STAT)); bzero(finfo.mystat, sizeof(MY_STAT));
VOID(strmov(tmp_file,dp->d_name)); VOID(strmov(tmp_file,dp->d_name));
VOID(my_stat(tmp_path, finfo.mystat, MyFlags)); VOID(my_stat(tmp_path, finfo.mystat, MyFlags));
if (!(finfo.mystat->st_mode & MY_S_IREAD))
continue;
} }
else else
finfo.mystat= NULL; finfo.mystat= NULL;
......
...@@ -2111,6 +2111,8 @@ void reinit_stmt_before_use(THD *thd, LEX *lex) ...@@ -2111,6 +2111,8 @@ void reinit_stmt_before_use(THD *thd, LEX *lex)
were closed in the end of previous prepare or execute call. were closed in the end of previous prepare or execute call.
*/ */
tables->table= 0; tables->table= 0;
/* Reset is_schema_table_processed value(needed for I_S tables */
tables->is_schema_table_processed= FALSE;
if (tables->prep_on_expr) if (tables->prep_on_expr)
{ {
......
...@@ -11582,6 +11582,12 @@ create_sort_index(THD *thd, JOIN *join, ORDER *order, ...@@ -11582,6 +11582,12 @@ create_sort_index(THD *thd, JOIN *join, ORDER *order,
goto err; goto err;
} }
} }
/* Fill schema tables with data before filesort if it's necessary */
if ((join->select_lex->options & OPTION_SCHEMA_TABLE) &&
get_schema_tables_result(join))
goto err;
if (table->s->tmp_table) if (table->s->tmp_table)
table->file->info(HA_STATUS_VARIABLE); // Get record count table->file->info(HA_STATUS_VARIABLE); // Get record count
table->sort.found_records=filesort(thd, table,sortorder, length, table->sort.found_records=filesort(thd, table,sortorder, length,
......
...@@ -3845,7 +3845,16 @@ bool get_schema_tables_result(JOIN *join) ...@@ -3845,7 +3845,16 @@ bool get_schema_tables_result(JOIN *join)
TABLE_LIST *table_list= tab->table->pos_in_table_list; TABLE_LIST *table_list= tab->table->pos_in_table_list;
if (table_list->schema_table && thd->fill_derived_tables()) if (table_list->schema_table && thd->fill_derived_tables())
{ {
if (&lex->unit != lex->current_select->master_unit()) // is subselect bool is_subselect= (&lex->unit != lex->current_select->master_unit());
/*
The schema table is already processed and
the statement is not a subselect.
So we don't need to handle this table again.
*/
if (table_list->is_schema_table_processed && !is_subselect)
continue;
if (is_subselect) // is subselect
{ {
table_list->table->file->extra(HA_EXTRA_RESET_STATE); table_list->table->file->extra(HA_EXTRA_RESET_STATE);
table_list->table->file->delete_all_rows(); table_list->table->file->delete_all_rows();
...@@ -3858,6 +3867,7 @@ bool get_schema_tables_result(JOIN *join) ...@@ -3858,6 +3867,7 @@ bool get_schema_tables_result(JOIN *join)
if (table_list->schema_table->fill_table(thd, table_list, if (table_list->schema_table->fill_table(thd, table_list,
tab->select_cond)) tab->select_cond))
result= 1; result= 1;
table_list->is_schema_table_processed= TRUE;
} }
} }
thd->no_warnings_for_error= 0; thd->no_warnings_for_error= 0;
......
...@@ -515,6 +515,7 @@ typedef struct st_table_list ...@@ -515,6 +515,7 @@ typedef struct st_table_list
st_select_lex_unit *derived; /* SELECT_LEX_UNIT of derived table */ st_select_lex_unit *derived; /* SELECT_LEX_UNIT of derived table */
ST_SCHEMA_TABLE *schema_table; /* Information_schema table */ ST_SCHEMA_TABLE *schema_table; /* Information_schema table */
st_select_lex *schema_select_lex; st_select_lex *schema_select_lex;
bool is_schema_table_processed;
/* /*
True when the view field translation table is used to convert True when the view field translation table is used to convert
schema table fields for backwards compatibility with SHOW command. schema table fields for backwards compatibility with SHOW command.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment