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