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