diff options
author | unknown <dlenev@mysql.com> | 2005-09-30 20:28:24 +0400 |
---|---|---|
committer | unknown <dlenev@mysql.com> | 2005-09-30 20:28:24 +0400 |
commit | 246bd8cad9015f2a0e876f3d52704f33f206f021 (patch) | |
tree | fe440e3e274f9f57675ed648cda29bc27cbc6bc6 /sql | |
parent | 06e08e047a2bc9efc2432f394e0cfa26a0d494d7 (diff) | |
parent | 9b7e4a2aae5dd6ebe380f242d9d6caf295359115 (diff) | |
download | mariadb-git-246bd8cad9015f2a0e876f3d52704f33f206f021.tar.gz |
Merge mysqldev@production.mysql.com:/data0/mysqldev/my/mysql-5.0-release
into mysql.com:/home/dlenev/src/mysql-5.0-bg13629
Diffstat (limited to 'sql')
-rw-r--r-- | sql/sql_view.cc | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/sql/sql_view.cc b/sql/sql_view.cc index 36b49196456..f956d9d4928 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -482,8 +482,6 @@ err: /* index of revision number in following table */ static const int revision_number_position= 8; -/* index of source */ -static const int source_number_position= 11; /* index of last required parameter for making view */ static const int required_view_parameters= 10; /* number of backups */ @@ -1414,17 +1412,27 @@ mysql_rename_view(THD *thd, if ((parser= sql_parse_prepare(&pathstr, thd->mem_root, 1)) && is_equal(&view_type, parser->type())) { + TABLE_LIST view_def; char dir_buff[FN_REFLEN], file_buff[FN_REFLEN]; + /* + To be PS-friendly we should either to restore state of + TABLE_LIST object pointed by 'view' after using it for + view definition parsing or use temporary 'view_def' + object for it. + */ + bzero(&view_def, sizeof(view_def)); + view_def.timestamp.str= view_def.timestamp_buffer; + view_def.view_suid= TRUE; + /* get view definition and source */ - if (mysql_make_view(parser, view) || - parser->parse((gptr)view, thd->mem_root, - view_parameters + source_number_position, 1)) + if (parser->parse((gptr)&view_def, thd->mem_root, view_parameters, + sizeof(view_parameters)/sizeof(view_parameters[0])-1)) goto err; /* rename view and it's backups */ if (rename_in_schema_file(view->db, view->table_name, new_name, - view->revision - 1, num_view_backups)) + view_def.revision - 1, num_view_backups)) goto err; strxnmov(dir_buff, FN_REFLEN, mysql_data_home, "/", view->db, "/", NullS); @@ -1438,12 +1446,12 @@ mysql_rename_view(THD *thd, - file_buff); if (sql_create_definition_file(&pathstr, &file, view_file_type, - (gptr)view, view_parameters, + (gptr)&view_def, view_parameters, num_view_backups)) { /* restore renamed view in case of error */ rename_in_schema_file(view->db, new_name, view->table_name, - view->revision - 1, num_view_backups); + view_def.revision - 1, num_view_backups); goto err; } } else @@ -1455,10 +1463,5 @@ mysql_rename_view(THD *thd, error= FALSE; err: - /* - We have to explicitly call destructor for view's LEX since it won't - be called otherwise. - */ - delete view->view; DBUG_RETURN(error); } |