Changeset: 2ffbb40fb0de for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2ffbb40fb0de
Modified Files:
        clients/mapiclient/dump.c
        sql/test/emptydb/Tests/check.stable.out.int128
Branch: Jan2022
Log Message:

Dump global temporary tables.


diffs (130 lines):

diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -1140,6 +1140,7 @@ describe_table(Mapi mid, const char *sch
        MapiHdl hdl = NULL;
        char *query = NULL, *view = NULL, *remark = NULL, *sname = NULL, *s = 
NULL, *t = NULL;
        int type = 0;
+       int ca = 0;
        size_t maxquerylen;
        bool hashge;
 
@@ -1168,7 +1169,7 @@ describe_table(Mapi mid, const char *sch
                goto bailout;
 
        snprintf(query, maxquerylen,
-                "SELECT t.name, t.query, t.type, t.id, c.remark "
+                "SELECT t.name, t.query, t.type, t.id, c.remark, 
t.commit_action "
                 "FROM sys.schemas s, sys._tables t "
                        "LEFT OUTER JOIN sys.comments c ON t.id = c.id "
                 "WHERE s.name = '%s' "
@@ -1187,6 +1188,7 @@ describe_table(Mapi mid, const char *sch
                view = mapi_fetch_field(hdl, 1);
                table_id = atoi(mapi_fetch_field(hdl, 3));
                remark = mapi_fetch_field(hdl, 4);
+               ca = atoi(mapi_fetch_field(hdl, 5));
        }
        if (mapi_error(mid)) {
                view = NULL;
@@ -1260,17 +1262,23 @@ describe_table(Mapi mid, const char *sch
                }
                /* the table is a real table */
                mnstr_printf(toConsole, "CREATE %sTABLE ",
-                           type == 3 ? "MERGE " :
-                           type == 4 ? "STREAM " :
-                           type == 5 ? "REMOTE " :
-                           type == 6 ? "REPLICA " :
-                           "");
+                                        ca > 0 ? "GLOBAL TEMPORARY " :
+                                        type == 3 ? "MERGE " :
+                                        type == 4 ? "STREAM " :
+                                        type == 5 ? "REMOTE " :
+                                        type == 6 ? "REPLICA " :
+                                        "");
                dquoted_print(toConsole, schema, ".");
                dquoted_print(toConsole, tname, " ");
 
                if (dump_column_definition(mid, toConsole, schema, tname, NULL, 
foreign, hashge))
                        goto bailout;
-               if (type == 5) { /* remote table */
+               if (ca > 0) {                   /* temporary table */
+                       mnstr_printf(toConsole, " ON COMMIT %s",
+                                                ca == 1 /* the default */ ? 
"DELETE ROWS" :
+                                                ca == 2 ? "PRESERVE ROWS" :
+                                                /* ca == 3 */ "DROP");
+               } else if (type == 5) { /* remote table */
                        char *rt_user = NULL;
                        char *rt_hash = NULL;
                        snprintf(query, maxquerylen,
@@ -1996,8 +2004,7 @@ dump_table_defaults(Mapi mid, const char
                                 "WHERE c.\"default\" IS NOT NULL "
                                 "AND c.table_id = t.id "
                                 "AND t.schema_id = s.id "
-                                "AND NOT t.system "
-                                "AND t.commit_action = 0"); /* no temp tables 
*/
+                                "AND NOT t.system");
        else
                snprintf(query, maxquerylen,
                                 "SELECT s.name, t.name, c.name, c.\"default\" "
@@ -2583,7 +2590,6 @@ dump_database(Mapi mid, stream *toConsol
                "WHERE t.type IN (0, 3, 4, 5, 6) "
                  "AND t.system = FALSE "
                  "AND s.id = t.schema_id "
-                 "AND s.name <> 'tmp' "
                "ORDER BY id";
        const char *mergetables =
                has_table_partitions(mid) ?
@@ -2862,18 +2868,20 @@ dump_database(Mapi mid, stream *toConsol
                        free(name);
                        continue;
                }
-               if (curschema == NULL || strcmp(schema, curschema) != 0) {
-                       if (curschema)
-                               free(curschema);
-                       curschema = schema ? strdup(schema) : NULL;
-                       if (schema && !curschema) {
-                               free(id);
-                               free(schema);
-                               free(name);
-                               goto bailout;
+               if (strcmp(schema, "tmp") != 0) {
+                       if (curschema == NULL || strcmp(schema, curschema) != 
0) {
+                               if (curschema)
+                                       free(curschema);
+                               curschema = schema ? strdup(schema) : NULL;
+                               if (schema && !curschema) {
+                                       free(id);
+                                       free(schema);
+                                       free(name);
+                                       goto bailout;
+                               }
+                               mnstr_printf(toConsole, "SET SCHEMA ");
+                               dquoted_print(toConsole, curschema, ";\n");
                        }
-                       mnstr_printf(toConsole, "SET SCHEMA ");
-                       dquoted_print(toConsole, curschema, ";\n");
                }
                int ptype = atoi(type), dont_describe = (ptype == 3 || ptype == 
5);
                rc = dump_table(mid, schema, name, toConsole, dont_describe || 
describe, describe, useInserts, true, noescape);
diff --git a/sql/test/emptydb/Tests/check.stable.out.int128 
b/sql/test/emptydb/Tests/check.stable.out.int128
--- a/sql/test/emptydb/Tests/check.stable.out.int128
+++ b/sql/test/emptydb/Tests/check.stable.out.int128
@@ -1009,12 +1009,12 @@ CREATE TABLE "sys"."triggers" ("id" INTE
 CREATE TABLE "sys"."types" ("id" INTEGER, "systemname" VARCHAR(256), "sqlname" 
VARCHAR(1024), "digits" INTEGER, "scale" INTEGER, "radix" INTEGER, "eclass" 
INTEGER, "schema_id" INTEGER);
 CREATE TABLE "sys"."user_role" ("login_id" INTEGER, "role_id" INTEGER);
 CREATE TABLE "sys"."value_partitions" ("table_id" INTEGER, "partition_id" 
INTEGER, "value" VARCHAR(2048));
-CREATE TABLE "tmp"."_columns" ("id" INTEGER, "name" VARCHAR(1024), "type" 
VARCHAR(1024), "type_digits" INTEGER, "type_scale" INTEGER, "table_id" INTEGER, 
"default" VARCHAR(2048), "null" BOOLEAN, "number" INTEGER, "storage" 
VARCHAR(2048));
-CREATE TABLE "tmp"."_tables" ("id" INTEGER, "name" VARCHAR(1024), "schema_id" 
INTEGER, "query" VARCHAR(1048576), "type" SMALLINT, "system" BOOLEAN, 
"commit_action" SMALLINT, "access" SMALLINT);
-CREATE TABLE "tmp"."idxs" ("id" INTEGER, "table_id" INTEGER, "type" INTEGER, 
"name" VARCHAR(1024));
-CREATE TABLE "tmp"."keys" ("id" INTEGER, "table_id" INTEGER, "type" INTEGER, 
"name" VARCHAR(1024), "rkey" INTEGER, "action" INTEGER);
-CREATE TABLE "tmp"."objects" ("id" INTEGER, "name" VARCHAR(1024), "nr" 
INTEGER, "sub" INTEGER);
-CREATE TABLE "tmp"."triggers" ("id" INTEGER, "name" VARCHAR(1024), "table_id" 
INTEGER, "time" SMALLINT, "orientation" SMALLINT, "event" SMALLINT, "old_name" 
VARCHAR(1024), "new_name" VARCHAR(1024), "condition" VARCHAR(2048), "statement" 
VARCHAR(2048));
+CREATE GLOBAL TEMPORARY TABLE "tmp"."_columns" ("id" INTEGER, "name" 
VARCHAR(1024), "type" VARCHAR(1024), "type_digits" INTEGER, "type_scale" 
INTEGER, "table_id" INTEGER, "default" VARCHAR(2048), "null" BOOLEAN, "number" 
INTEGER, "storage" VARCHAR(2048)) ON COMMIT PRESERVE ROWS;
+CREATE GLOBAL TEMPORARY TABLE "tmp"."_tables" ("id" INTEGER, "name" 
VARCHAR(1024), "schema_id" INTEGER, "query" VARCHAR(1048576), "type" SMALLINT, 
"system" BOOLEAN, "commit_action" SMALLINT, "access" SMALLINT) ON COMMIT 
PRESERVE ROWS;
+CREATE GLOBAL TEMPORARY TABLE "tmp"."idxs" ("id" INTEGER, "table_id" INTEGER, 
"type" INTEGER, "name" VARCHAR(1024)) ON COMMIT PRESERVE ROWS;
+CREATE GLOBAL TEMPORARY TABLE "tmp"."keys" ("id" INTEGER, "table_id" INTEGER, 
"type" INTEGER, "name" VARCHAR(1024), "rkey" INTEGER, "action" INTEGER) ON 
COMMIT PRESERVE ROWS;
+CREATE GLOBAL TEMPORARY TABLE "tmp"."objects" ("id" INTEGER, "name" 
VARCHAR(1024), "nr" INTEGER, "sub" INTEGER) ON COMMIT PRESERVE ROWS;
+CREATE GLOBAL TEMPORARY TABLE "tmp"."triggers" ("id" INTEGER, "name" 
VARCHAR(1024), "table_id" INTEGER, "time" SMALLINT, "orientation" SMALLINT, 
"event" SMALLINT, "old_name" VARCHAR(1024), "new_name" VARCHAR(1024), 
"condition" VARCHAR(2048), "statement" VARCHAR(2048)) ON COMMIT PRESERVE ROWS;
 create view logging.compinfo as select * from logging.compinfo();
 SELECT * FROM (SELECT p.* FROM "sys"."_columns" AS p UNION ALL SELECT t.* FROM 
"tmp"."_columns" AS t) AS columns;
 create view sys.dependencies_vw as select d.id, i1.obj_type, i1.name, 
d.depend_id as used_by_id, i2.obj_type as used_by_obj_type, i2.name as 
used_by_name, d.depend_type, dt.dependency_type_name from sys.dependencies d 
join sys.ids i1 on d.id = i1.id join sys.ids i2 on d.depend_id = i2.id join 
sys.dependency_types dt on d.depend_type = dt.dependency_type_id order by id, 
depend_id;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to