summaryrefslogtreecommitdiff
path: root/client/mysqldump.c
diff options
context:
space:
mode:
authorunknown <msvensson@neptunus.(none)>2005-06-30 19:21:38 +0200
committerunknown <msvensson@neptunus.(none)>2005-06-30 19:21:38 +0200
commit19769cbf48282a02378faf6dcf5f1ec758c43666 (patch)
treedc4a8882a805ed0d7cab5292423cd20c1ada7483 /client/mysqldump.c
parent6a5ba8fdc2b5c2b5d9f94049c040c24566248461 (diff)
parent11dc2506bc3e2db294e847fabbad21adcbca96a2 (diff)
downloadmariadb-git-19769cbf48282a02378faf6dcf5f1ec758c43666.tar.gz
Merge
client/mysqldump.c: Auto merged
Diffstat (limited to 'client/mysqldump.c')
-rw-r--r--client/mysqldump.c50
1 files changed, 49 insertions, 1 deletions
diff --git a/client/mysqldump.c b/client/mysqldump.c
index c75f02353b4..1f520243c7c 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -1252,7 +1252,54 @@ static uint get_table_structure(char *table, char *db)
if (strcmp(field->name, "View") == 0)
{
if (verbose)
- fprintf(stderr, "-- It's a view, skipped\n");
+ fprintf(stderr, "-- It's a view, create dummy table for view\n");
+
+ mysql_free_result(tableRes);
+
+ /* Create a dummy table for the view. ie. a table which has the
+ same columns as the view should have. This table is dropped
+ just before the view is created. The table is used to handle the
+ case where a view references another view, which hasn't yet been
+ created(during the load of the dump). BUG#10927 */
+
+ /* Create temp table by selecting from the view */
+ my_snprintf(query_buff, sizeof(query_buff),
+ "CREATE TEMPORARY TABLE %s SELECT * FROM %s WHERE 0",
+ result_table, result_table);
+ if (mysql_query_with_error_report(sock, 0, query_buff))
+ {
+ safe_exit(EX_MYSQLERR);
+ DBUG_RETURN(0);
+ }
+
+ /* Get CREATE statement for the temp table */
+ my_snprintf(query_buff, sizeof(query_buff), "SHOW CREATE TABLE %s",
+ result_table);
+ if (mysql_query_with_error_report(sock, 0, query_buff))
+ {
+ safe_exit(EX_MYSQLERR);
+ DBUG_RETURN(0);
+ }
+ tableRes= mysql_store_result(sock);
+ row= mysql_fetch_row(tableRes);
+
+ if (opt_drop)
+ fprintf(sql_file, "DROP VIEW IF EXISTS %s;\n",opt_quoted_table);
+
+ /* Print CREATE statement but remove TEMPORARY */
+ fprintf(sql_file, "CREATE %s;\n", row[1]+17);
+ check_io(sql_file);
+
+ mysql_free_result(tableRes);
+
+ /* Drop the temp table */
+ my_snprintf(buff, sizeof(buff),
+ "DROP TEMPORARY TABLE %s", result_table);
+ if (mysql_query_with_error_report(sock, 0, buff))
+ {
+ safe_exit(EX_MYSQLERR);
+ DBUG_RETURN(0);
+ }
was_views= 1;
DBUG_RETURN(0);
}
@@ -2855,6 +2902,7 @@ static my_bool get_view_structure(char *table, char* db)
}
if (opt_drop)
{
+ fprintf(sql_file, "DROP TABLE IF EXISTS %s;\n", opt_quoted_table);
fprintf(sql_file, "DROP VIEW IF EXISTS %s;\n", opt_quoted_table);
check_io(sql_file);
}