summaryrefslogtreecommitdiff
path: root/sql/sql_show.cc
diff options
context:
space:
mode:
authorholyfoot/hf@hfmain.(none) <>2007-06-14 16:42:43 +0500
committerholyfoot/hf@hfmain.(none) <>2007-06-14 16:42:43 +0500
commit1e9373fd60374b74af73429d864d3a86b6eccce8 (patch)
tree970f3c802c31f6740056dc4d047fed4ec26d9ab9 /sql/sql_show.cc
parentee116570dc44bdb95a95fc04b27dfb1171ec85d7 (diff)
parent76e0a0768a66684f82923c7ddb2cfcac8b3e782f (diff)
downloadmariadb-git-1e9373fd60374b74af73429d864d3a86b6eccce8.tar.gz
Merge bk@192.168.21.1:mysql-5.1
into mysql.com:/d2/hf/mrg/mysql-5.1-opt
Diffstat (limited to 'sql/sql_show.cc')
-rw-r--r--sql/sql_show.cc95
1 files changed, 37 insertions, 58 deletions
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index 624ecf88c02..903c8ab74f1 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -79,58 +79,6 @@ append_algorithm(TABLE_LIST *table, String *buff);
** List all table types supported
***************************************************************************/
-static my_bool show_handlerton(THD *thd, plugin_ref plugin,
- void *arg)
-{
- handlerton *default_type= (handlerton *) arg;
- Protocol *protocol= thd->protocol;
- handlerton *hton= plugin_data(plugin, handlerton *);
-
- if (!(hton->flags & HTON_HIDDEN))
- {
- protocol->prepare_for_resend();
- protocol->store(plugin_name(plugin)->str, plugin_name(plugin)->length,
- system_charset_info);
- const char *option_name= show_comp_option_name[(int) hton->state];
-
- if (hton->state == SHOW_OPTION_YES && default_type == hton)
- option_name= "DEFAULT";
- protocol->store(option_name, system_charset_info);
- protocol->store(plugin_decl(plugin)->descr, system_charset_info);
- protocol->store(hton->commit ? "YES" : "NO", system_charset_info);
- protocol->store(hton->prepare ? "YES" : "NO", system_charset_info);
- protocol->store(hton->savepoint_set ? "YES" : "NO", system_charset_info);
-
- return protocol->write() ? 1 : 0;
- }
- return 0;
-}
-
-bool mysqld_show_storage_engines(THD *thd)
-{
- List<Item> field_list;
- Protocol *protocol= thd->protocol;
- DBUG_ENTER("mysqld_show_storage_engines");
-
- field_list.push_back(new Item_empty_string("Engine",10));
- field_list.push_back(new Item_empty_string("Support",10));
- field_list.push_back(new Item_empty_string("Comment",80));
- field_list.push_back(new Item_empty_string("Transactions",3));
- field_list.push_back(new Item_empty_string("XA",3));
- field_list.push_back(new Item_empty_string("Savepoints",3));
-
- if (protocol->send_fields(&field_list,
- Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
- DBUG_RETURN(TRUE);
-
- if (plugin_foreach(thd, show_handlerton,
- MYSQL_STORAGE_ENGINE_PLUGIN, ha_default_handlerton(thd)))
- DBUG_RETURN(TRUE);
-
- send_eof(thd);
- DBUG_RETURN(FALSE);
-}
-
static int make_version_string(char *buf, int buf_length, uint version)
{
return my_snprintf(buf, buf_length, "%d.%d", version>>8,version&0xff);
@@ -2109,6 +2057,8 @@ static bool show_status_array(THD *thd, const char *wild,
case SHOW_LONG_NOFLUSH: // the difference lies in refresh_status()
end= int10_to_str(*(long*) value, buff, 10);
break;
+ case SHOW_LONGLONG_STATUS:
+ value= ((char *) status_var + (ulonglong) value);
case SHOW_LONGLONG:
end= longlong10_to_str(*(longlong*) value, buff, 10);
break;
@@ -3313,6 +3263,7 @@ static my_bool iter_schema_engines(THD *thd, plugin_ref plugin,
handlerton *hton= plugin_data(plugin, handlerton *);
const char *wild= thd->lex->wild ? thd->lex->wild->ptr() : NullS;
CHARSET_INFO *scs= system_charset_info;
+ handlerton *default_type= ha_default_handlerton(thd);
DBUG_ENTER("iter_schema_engines");
if (!(hton->flags & HTON_HIDDEN))
@@ -3321,16 +3272,16 @@ static my_bool iter_schema_engines(THD *thd, plugin_ref plugin,
if (!(wild && wild[0] &&
wild_case_compare(scs, name->str,wild)))
{
- LEX_STRING state[2]= {{ C_STRING_WITH_LEN("ENABLED") },
- { C_STRING_WITH_LEN("DISABLED") }};
LEX_STRING yesno[2]= {{ C_STRING_WITH_LEN("NO") },
{ C_STRING_WITH_LEN("YES") }};
LEX_STRING *tmp;
+ const char *option_name= show_comp_option_name[(int) hton->state];
restore_record(table, s->default_values);
table->field[0]->store(name->str, name->length, scs);
- tmp= &state[test(hton->state)];
- table->field[1]->store(tmp->str, tmp->length, scs);
+ if (hton->state == SHOW_OPTION_YES && default_type == hton)
+ option_name= "DEFAULT";
+ table->field[1]->store(option_name, strlen(option_name), scs);
table->field[2]->store(plugin_decl(plugin)->descr,
strlen(plugin_decl(plugin)->descr), scs);
tmp= &yesno[test(hton->commit)];
@@ -3652,6 +3603,7 @@ static int get_schema_views_record(THD *thd, struct st_table_list *tables,
DBUG_ENTER("get_schema_views_record");
char definer[USER_HOST_BUFF_SIZE];
uint definer_len;
+ bool updatable_view;
if (tables->view)
{
@@ -3689,7 +3641,34 @@ static int get_schema_views_record(THD *thd, struct st_table_list *tables,
else
table->field[4]->store(STRING_WITH_LEN("NONE"), cs);
- if (tables->updatable_view)
+ updatable_view= 0;
+ if (tables->algorithm != VIEW_ALGORITHM_TMPTABLE)
+ {
+ /*
+ We should use tables->view->select_lex.item_list here and
+ can not use Field_iterator_view because the view always uses
+ temporary algorithm during opening for I_S and
+ TABLE_LIST fields 'field_translation' & 'field_translation_end'
+ are uninitialized is this case.
+ */
+ List<Item> *fields= &tables->view->select_lex.item_list;
+ List_iterator<Item> it(*fields);
+ Item *item;
+ Item_field *field;
+ /*
+ chech that at least one coulmn in view is updatable
+ */
+ while ((item= it++))
+ {
+ if ((field= item->filed_for_view_update()) && field->field &&
+ !field->field->table->pos_in_table_list->schema_table)
+ {
+ updatable_view= 1;
+ break;
+ }
+ }
+ }
+ if (updatable_view)
table->field[5]->store(STRING_WITH_LEN("YES"), cs);
else
table->field[5]->store(STRING_WITH_LEN("NO"), cs);
@@ -4046,7 +4025,7 @@ static void store_schema_partitions_record(THD *thd, TABLE *schema_table,
table->field[22]->store(part_elem->part_comment,
strlen(part_elem->part_comment), cs);
else
- table->field[22]->store(STRING_WITH_LEN("default"), cs);
+ table->field[22]->store(STRING_WITH_LEN(""), cs);
if (part_elem->nodegroup_id != UNDEF_NODEGROUP)
table->field[23]->store((longlong) part_elem->nodegroup_id, TRUE);
else