Changeset: da122b3b2dd3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/da122b3b2dd3
Added Files:
        sql/backends/monet5/Tests/persist_unlogged.SQL.py
Removed Files:
        sql/backends/monet5/Tests/insertonly_persist.SQL.py
Modified Files:
        sql/backends/monet5/Tests/All
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql.h
        sql/backends/monet5/sql_upgrades.c
        sql/scripts/77_storage.sql
Branch: insertonly
Log Message:

Refactor insertonly_nowal to unlogged_persist.


diffs (292 lines):

diff --git a/sql/backends/monet5/Tests/All b/sql/backends/monet5/Tests/All
--- a/sql/backends/monet5/Tests/All
+++ b/sql/backends/monet5/Tests/All
@@ -34,4 +34,4 @@ shutdown
 
 HAVE_HGE?int_notation_1e5
 
-insertonly_persist
+persist_unlogged
diff --git a/sql/backends/monet5/Tests/insertonly_persist.SQL.py 
b/sql/backends/monet5/Tests/insertonly_persist.SQL.py
deleted file mode 100644
--- a/sql/backends/monet5/Tests/insertonly_persist.SQL.py
+++ /dev/null
@@ -1,42 +0,0 @@
-import os, tempfile
-
-from MonetDBtesting.sqltest import SQLTestCase
-try:
-    from MonetDBtesting import process
-except ImportError:
-    import process
-
-with tempfile.TemporaryDirectory() as farm_dir:
-    os.mkdir(os.path.join(farm_dir, 'db1'))
-
-    with process.server(mapiport='0', dbname='db1',
-                        dbfarm=os.path.join(farm_dir, 'db1'),
-                        args=["--set", "insertonly_nowal=true"],
-                        stdin=process.PIPE,
-                        stdout=process.PIPE, stderr=process.PIPE) as s:
-        with SQLTestCase() as tc:
-            tc.connect(username="monetdb", password="monetdb", port=s.dbport, 
database='db1')
-            tc.execute("CREATE OR REPLACE FUNCTION sleep(msecs int) RETURNS 
INT EXTERNAL NAME alarm.sleep")
-            tc.execute("CREATE TABLE foo (x INT)").assertSucceeded()
-            tc.execute("ALTER TABLE foo SET INSERT ONLY").assertSucceeded()
-            tc.execute("INSERT INTO foo SELECT * FROM generate_series(0,500)")
-            tc.execute("SELECT count(*) FROM 
foo").assertSucceeded().assertDataResultMatch([(500,)])
-            tc.execute("SELECT * FROM 
insertonly_persist()").assertSucceeded().assertDataResultMatch([('foo', 7896, 
0)])
-            tc.execute("CREATE TABLE bar (x INT)").assertSucceeded()
-            tc.execute("CREATE TABLE barbar (x INT)").assertSucceeded()
-            tc.execute("CREATE TABLE baz (x INT)").assertSucceeded()
-            tc.execute("CREATE TABLE bazbaz (x INT)").assertSucceeded()
-
-            tc.execute("SELECT sleep(2000)")
-
-            tc.execute("SELECT * FROM 
insertonly_persist()").assertSucceeded().assertDataResultMatch([('foo', 7896, 
500)])
-        s.communicate()
-
-    with process.server(mapiport='0', dbname='db1',
-                        dbfarm=os.path.join(farm_dir, 'db1'),
-                        stdin=process.PIPE,
-                        stdout=process.PIPE, stderr=process.PIPE) as s:
-        with SQLTestCase() as tc:
-            tc.connect(username="monetdb", password="monetdb", port=s.dbport, 
database='db1')
-            tc.execute("SELECT COUNT(*) FROM 
foo").assertSucceeded().assertDataResultMatch([(500,)])
-        s.communicate()
diff --git a/sql/backends/monet5/Tests/persist_unlogged.SQL.py 
b/sql/backends/monet5/Tests/persist_unlogged.SQL.py
new file mode 100644
--- /dev/null
+++ b/sql/backends/monet5/Tests/persist_unlogged.SQL.py
@@ -0,0 +1,39 @@
+import os, tempfile
+
+from MonetDBtesting.sqltest import SQLTestCase
+try:
+    from MonetDBtesting import process
+except ImportError:
+    import process
+
+with tempfile.TemporaryDirectory() as farm_dir:
+    os.mkdir(os.path.join(farm_dir, 'db1'))
+
+    with process.server(mapiport='0', dbname='db1',
+                        dbfarm=os.path.join(farm_dir, 'db1'),
+                        stdin=process.PIPE,
+                        stdout=process.PIPE, stderr=process.PIPE) as s:
+        with SQLTestCase() as tc:
+            tc.connect(username="monetdb", password="monetdb", port=s.dbport, 
database='db1')
+            tc.execute("CREATE OR REPLACE FUNCTION sleep(msecs int) RETURNS 
INT EXTERNAL NAME alarm.sleep")
+            tc.execute("CREATE UNLOGGED TABLE foo (x INT)").assertSucceeded()
+            tc.execute("ALTER TABLE foo SET INSERT ONLY").assertSucceeded()
+            tc.execute("INSERT INTO foo SELECT * FROM generate_series(0,500)")
+            tc.execute("SELECT count(*) FROM 
foo").assertSucceeded().assertDataResultMatch([(500,)])
+            tc.execute("SELECT table, rowcount FROM 
persist_unlogged()").assertSucceeded().assertDataResultMatch([('foo', 0)])
+            tc.execute("CREATE TABLE bar (x INT)").assertSucceeded()
+            tc.execute("INSERT INTO bar SELECT * FROM 
generate_series(0,100000)").assertSucceeded()
+
+            tc.execute("SELECT sleep(2000)")
+
+            tc.execute("SELECT table, rowcount FROM 
persist_unlogged()").assertSucceeded().assertDataResultMatch([('foo', 500)])
+        s.communicate()
+
+    with process.server(mapiport='0', dbname='db1',
+                        dbfarm=os.path.join(farm_dir, 'db1'),
+                        stdin=process.PIPE,
+                        stdout=process.PIPE, stderr=process.PIPE) as s:
+        with SQLTestCase() as tc:
+            tc.connect(username="monetdb", password="monetdb", port=s.dbport, 
database='db1')
+            tc.execute("SELECT COUNT(*) FROM 
foo").assertSucceeded().assertDataResultMatch([(500,)])
+        s.communicate()
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -4322,7 +4322,7 @@ end:
 }
 
 str
-SQLinsertonly_persist(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+SQLpersist_unlogged(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        (void)stk;
        (void)pci;
@@ -4354,21 +4354,17 @@ SQLinsertonly_persist(Client cntxt, MalB
        store = m->session->tr->store;
        tr = m->session->tr;
 
-       /* if (store->insertonly_nowal == false) */
-               /* throw(SQL, "sql.insertonly_persist", "Function cannot be 
used without setting" */
-                         /* " insertonly_nowal flag at server startup."); */
-
        sql_schema *s = NULL;
        if (i1) {
                s = mvc_bind_schema(m, i1);
                if (s == NULL)
-                       throw(SQL, "sql.insertonly_persist", SQLSTATE(3F000) 
"Schema missing %s.", i1);
+                       throw(SQL, "sql.persist_unlogged", SQLSTATE(3F000) 
"Schema missing %s.", i1);
        } else {
                s = m->session->schema;
        }
 
        if (pci->argc != 3 && !mvc_schema_privs(m, s))
-               throw(SQL, "sql.insertonly_persist", SQLSTATE(42000) "Access 
denied for %s to schema '%s'.",
+               throw(SQL, "sql.persist_unlogged", SQLSTATE(42000) "Access 
denied for %s to schema '%s'.",
                          get_string_global_var(m, "current_user"), 
s->base.name);
 
        int n = 100;
@@ -4383,7 +4379,7 @@ SQLinsertonly_persist(Client cntxt, MalB
                GDKfree(commit_list);
                GDKfree(sizes);
                BBPnreclaim(3, tables, sqlids, rowcounts);
-               throw(SQL, "sql.insertonly_persist", SQLSTATE(HY001));
+               throw(SQL, "sql.persist_unlogged", SQLSTATE(HY001));
        }
 
        commit_list[0] = 0;
@@ -4412,7 +4408,7 @@ SQLinsertonly_persist(Client cntxt, MalB
                                        GDKfree(commit_list);
                                        GDKfree(sizes);
                                        BBPnreclaim(3, tables, sqlids, 
rowcounts);
-                                       throw(SQL, "sql.insertonly_persist", 
"Cannot access %s column storage.", t_name);
+                                       throw(SQL, "sql.persist_unlogged", 
"Cannot access %s column storage.", t_name);
                                }
 
                                if (ol_first_node(t->columns)) {
@@ -4426,7 +4422,7 @@ SQLinsertonly_persist(Client cntxt, MalB
                                                        GDKfree(commit_list);
                                                        GDKfree(sizes);
                                                        BBPnreclaim(3, tables, 
sqlids, rowcounts);
-                                                       throw(SQL, 
"sql.insertonly_persist", "Cannot access column descriptor.");
+                                                       throw(SQL, 
"sql.persist_unlogged", "Cannot access column descriptor.");
                                                }
 
                                                if (isVIEW(b))
@@ -4443,7 +4439,7 @@ SQLinsertonly_persist(Client cntxt, MalB
                                                        GDKfree(commit_list);
                                                        GDKfree(sizes);
                                                        BBPnreclaim(3, tables, 
sqlids, rowcounts);
-                                                       throw(SQL, 
"sql.insertonly_persist", SQLSTATE(HY001));
+                                                       throw(SQL, 
"sql.persist_unlogged", SQLSTATE(HY001));
                                                }
 
                                                if (BBP_status(b->batCacheid) & 
BBPEXISTING) {
@@ -4460,7 +4456,7 @@ SQLinsertonly_persist(Client cntxt, MalB
                                                        GDKfree(commit_list);
                                                        GDKfree(sizes);
                                                        BBPnreclaim(3, tables, 
sqlids, rowcounts);
-                                                       throw(SQL, 
"sql.insertonly_persist", SQLSTATE(HY001));
+                                                       throw(SQL, 
"sql.persist_unlogged", SQLSTATE(HY001));
                                                }
                                        }
                                }
@@ -4479,7 +4475,7 @@ SQLinsertonly_persist(Client cntxt, MalB
        MT_lock_unset(&store->commit);
 
        if (commit_list[1] > 0 && TMsubcommit_list(commit_list, sizes, i, -1, 
-1) != GDK_SUCCEED)
-               msg = createException(SQL, "sql.insertonly_persist", 
GDK_EXCEPTION);
+               msg = createException(SQL, "sql.persist_unlogged", 
GDK_EXCEPTION);
 
        GDKfree(commit_list);
        GDKfree(sizes);
@@ -5249,9 +5245,9 @@ static mel_func sql_init_funcs[] = {
  pattern("sql", "resume_log_flushing", SQLresume_log_flushing, true, "Resume 
WAL log flushing", args(1,1, arg("",void))),
  pattern("sql", "suspend_log_flushing", SQLsuspend_log_flushing, true, 
"Suspend WAL log flushing", args(1,1, arg("",void))),
  pattern("sql", "hot_snapshot", SQLhot_snapshot, true, "Write db snapshot to 
the given tar(.gz/.lz4/.bz/.xz) file on either server or client", args(1,3, 
arg("",void),arg("tarfile", str),arg("onserver",bit))),
- pattern("sql", "insertonly_persist", SQLinsertonly_persist, true, "Persist 
deltas on append only tables in current schema", args(3, 3, batarg("table", 
str), batarg("table_id", int), batarg("rowcount", lng))),
- pattern("sql", "insertonly_persist", SQLinsertonly_persist, true, "Persist 
deltas on append only tables in schema s", args(3, 4, batarg("table", str), 
batarg("table_id", int), batarg("rowcount", lng), arg("s", str))),
- pattern("sql", "insertonly_persist", SQLinsertonly_persist, true, "Persist 
deltas on append only table in schema s table t", args(3, 5, batarg("table", 
str), batarg("table_id", int), batarg("rowcount", lng), arg("s", str), arg("t", 
str))),
+ pattern("sql", "persist_unlogged", SQLpersist_unlogged, true, "Persist deltas 
on append only tables in current schema", args(3, 3, batarg("table", str), 
batarg("table_id", int), batarg("rowcount", lng))),
+ pattern("sql", "persist_unlogged", SQLpersist_unlogged, true, "Persist deltas 
on append only tables in schema s", args(3, 4, batarg("table", str), 
batarg("table_id", int), batarg("rowcount", lng), arg("s", str))),
+ pattern("sql", "persist_unlogged", SQLpersist_unlogged, true, "Persist deltas 
on append only table in schema s table t", args(3, 5, batarg("table", str), 
batarg("table_id", int), batarg("rowcount", lng), arg("s", str), arg("t", 
str))),
  pattern("sql", "assert", SQLassert, false, "Generate an exception when 
b==true", args(1,3, arg("",void),arg("b",bit),arg("msg",str))),
  pattern("sql", "assert", SQLassertInt, false, "Generate an exception when 
b!=0", args(1,3, arg("",void),arg("b",int),arg("msg",str))),
  pattern("sql", "assert", SQLassertLng, false, "Generate an exception when 
b!=0", args(1,3, arg("",void),arg("b",lng),arg("msg",str))),
diff --git a/sql/backends/monet5/sql.h b/sql/backends/monet5/sql.h
--- a/sql/backends/monet5/sql.h
+++ b/sql/backends/monet5/sql.h
@@ -283,7 +283,7 @@ extern str SQLsuspend_log_flushing(Clien
 extern str SQLresume_log_flushing(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 extern str SQLhot_snapshot(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 extern str SQLhot_snapshot_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
-extern str SQLinsertonly_persist(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
+extern str SQLpersist_unlogged(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 
 extern str SQLsession_prepared_statements(Client cntxt, MalBlkPtr mb, 
MalStkPtr stk, InstrPtr pci);
 extern str SQLsession_prepared_statements_args(Client cntxt, MalBlkPtr mb, 
MalStkPtr stk, InstrPtr pci);
diff --git a/sql/backends/monet5/sql_upgrades.c 
b/sql/backends/monet5/sql_upgrades.c
--- a/sql/backends/monet5/sql_upgrades.c
+++ b/sql/backends/monet5/sql_upgrades.c
@@ -6241,22 +6241,22 @@ sql_update_default(Client c, mvc *sql, s
        }
 
        /* 77_storage.sql */
-       if (!sql_bind_func(sql, s->base.name, "insertonly_persist", NULL, NULL, 
F_UNION, true)) {
+       if (!sql_bind_func(sql, s->base.name, "persist_unlogged", NULL, NULL, 
F_UNION, true)) {
                sql->session->status = 0;
                sql->errstr[0] = '\0';
                const char *query =
-                       "CREATE FUNCTION sys.insertonly_persist()\n"
+                       "CREATE FUNCTION sys.persist_unlogged()\n"
                        "RETURNS TABLE(\"table\" STRING, \"table_id\" INT, 
\"rowcount\" BIGINT)\n"
-                       "EXTERNAL NAME sql.insertonly_persist;\n"
-                       "CREATE FUNCTION sys.insertonly_persist(sname STRING)\n"
+                       "EXTERNAL NAME sql.persist_unlogged;\n"
+                       "CREATE FUNCTION sys.persist_unlogged(sname STRING)\n"
                        "RETURNS TABLE(\"table\" STRING, \"table_id\" INT, 
\"rowcount\" BIGINT)\n"
-                       "EXTERNAL NAME sql.insertonly_persist(string);\n"
-                       "CREATE FUNCTION sys.insertonly_persist(sname STRING, 
tname STRING)\n"
+                       "EXTERNAL NAME sql.persist_unlogged(string);\n"
+                       "CREATE FUNCTION sys.persist_unlogged(sname STRING, 
tname STRING)\n"
                        "RETURNS TABLE(\"table\" STRING, \"table_id\" INT, 
\"rowcount\" BIGINT)\n"
-                       "EXTERNAL NAME sql.insertonly_persist(string, 
string);\n"
-                       "GRANT EXECUTE ON FUNCTION sys.insertonly_persist() TO 
PUBLIC;\n"
+                       "EXTERNAL NAME sql.persist_unlogged(string, string);\n"
+                       "GRANT EXECUTE ON FUNCTION sys.persist_unlogged() TO 
PUBLIC;\n"
                        "UPDATE sys.functions SET system = true WHERE system <> 
true AND\n"
-                       "name = 'insertonly_persist' AND schema_id = 2000;\n";
+                       "name = 'persist_unlogged' AND schema_id = 2000;\n";
                printf("Running database upgrade commands:\n%s\n", query);
                fflush(stdout);
                err = SQLstatementIntern(c, query, "update", true, false, NULL);
diff --git a/sql/scripts/77_storage.sql b/sql/scripts/77_storage.sql
--- a/sql/scripts/77_storage.sql
+++ b/sql/scripts/77_storage.sql
@@ -6,29 +6,29 @@
 --
 -- Copyright 1997 - July 2008 CWI, August 2008 - 2023 MonetDB B.V.
 
-CREATE FUNCTION sys.insertonly_persist()
+CREATE FUNCTION sys.persist_unlogged()
 RETURNS TABLE(
        "table" STRING,
        "table_id" INT,
        "rowcount" BIGINT
 )
-EXTERNAL NAME sql.insertonly_persist;
-GRANT EXECUTE ON FUNCTION sys.insertonly_persist() TO PUBLIC;
+EXTERNAL NAME sql.persist_unlogged;
+GRANT EXECUTE ON FUNCTION sys.persist_unlogged() TO PUBLIC;
 
-CREATE FUNCTION sys.insertonly_persist(sname STRING)
+CREATE FUNCTION sys.persist_unlogged(sname STRING)
 RETURNS TABLE(
        "table" STRING,
        "table_id" INT,
        "rowcount" BIGINT
 )
-EXTERNAL NAME sql.insertonly_persist;
-GRANT EXECUTE ON FUNCTION sys.insertonly_persist(string) TO PUBLIC;
+EXTERNAL NAME sql.persist_unlogged;
+GRANT EXECUTE ON FUNCTION sys.persist_unlogged(string) TO PUBLIC;
 
-CREATE FUNCTION sys.insertonly_persist(sname STRING, tname STRING)
+CREATE FUNCTION sys.persist_unlogged(sname STRING, tname STRING)
 RETURNS TABLE(
        "table" STRING,
        "table_id" INT,
        "rowcount" BIGINT
 )
-EXTERNAL NAME sql.insertonly_persist;
-GRANT EXECUTE ON FUNCTION sys.insertonly_persist(string, string) TO PUBLIC;
+EXTERNAL NAME sql.persist_unlogged;
+GRANT EXECUTE ON FUNCTION sys.persist_unlogged(string, string) TO PUBLIC;
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to