Changeset: 36659119f7e9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=36659119f7e9
Modified Files:
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_execute.c
        sql/backends/monet5/sql_scenario.c
        sql/storage/bat/bat_storage.c
        sql/storage/store.c
Branch: default
Log Message:

Merge with Oct2020 branch.


diffs (truncated from 376 to 300 lines):

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
@@ -1611,7 +1611,7 @@ str
 mvc_append_column(sql_trans *t, sql_column *c, BAT *ins)
 {
        int res = store_funcs.append_col(t, c, ins, TYPE_bat);
-       if (res != 0)
+       if (res != LOG_OK)
                throw(SQL, "sql.append", SQLSTATE(42000) "Cannot append 
values");
        return MAL_SUCCEED;
 }
@@ -1667,7 +1667,7 @@ mvc_append_wrap(Client cntxt, MalBlkPtr 
        const char *tname = *getArgReference_str(stk, pci, 3);
        const char *cname = *getArgReference_str(stk, pci, 4);
        ptr ins = getArgReference(stk, pci, 5);
-       int tpe = getArgType(mb, pci, 5);
+       int tpe = getArgType(mb, pci, 5), err = 0;
        sql_schema *s;
        sql_table *t;
        sql_column *c;
@@ -1702,12 +1702,15 @@ mvc_append_wrap(Client cntxt, MalBlkPtr 
        if( b && BATcount(b) > 4096 && !b->batTransient)
                BATmsync(b);
        if (cname[0] != '%' && (c = mvc_bind_column(m, t, cname)) != NULL) {
-               store_funcs.append_col(m->session->tr, c, ins, tpe);
+               if (store_funcs.append_col(m->session->tr, c, ins, tpe) != 
LOG_OK)
+                       err = 1;
        } else if (cname[0] == '%') {
                sql_idx *i = mvc_bind_idx(m, s, cname + 1);
-               if (i)
-                       store_funcs.append_idx(m->session->tr, i, ins, tpe);
-       }
+               if (i && store_funcs.append_idx(m->session->tr, i, ins, tpe) != 
LOG_OK)
+                       err = 1;
+       }
+       if (err)
+               throw(SQL, "sql.append", SQLSTATE(42S02) "append failed");
        if (b) {
                BBPunfix(b->batCacheid);
        }
@@ -1727,7 +1730,7 @@ mvc_update_wrap(Client cntxt, MalBlkPtr 
        bat Tids = *getArgReference_bat(stk, pci, 5);
        bat Upd = *getArgReference_bat(stk, pci, 6);
        BAT *tids, *upd;
-       int tpe = getArgType(mb, pci, 6);
+       int tpe = getArgType(mb, pci, 6), err = 0;
        sql_schema *s;
        sql_table *t;
        sql_column *c;
@@ -1769,14 +1772,17 @@ mvc_update_wrap(Client cntxt, MalBlkPtr 
        if( tids && BATcount(tids) > 4096 && !tids->batTransient)
                BATmsync(tids);
        if (cname[0] != '%' && (c = mvc_bind_column(m, t, cname)) != NULL) {
-               store_funcs.update_col(m->session->tr, c, tids, upd, TYPE_bat);
+               if (store_funcs.update_col(m->session->tr, c, tids, upd, 
TYPE_bat) != LOG_OK)
+                       err = 1;
        } else if (cname[0] == '%') {
                sql_idx *i = mvc_bind_idx(m, s, cname + 1);
-               if (i)
-                       store_funcs.update_idx(m->session->tr, i, tids, upd, 
TYPE_bat);
+               if (i && store_funcs.update_idx(m->session->tr, i, tids, upd, 
TYPE_bat) != LOG_OK)
+                       err = 1;
        }
        BBPunfix(tids->batCacheid);
        BBPunfix(upd->batCacheid);
+       if (err)
+               throw(SQL, "sql.update", SQLSTATE(42S02) "update failed");
        return MAL_SUCCEED;
 }
 
@@ -1803,6 +1809,8 @@ mvc_clear_table_wrap(Client cntxt, MalBl
        if (t == NULL)
                throw(SQL, "sql.clear_table", SQLSTATE(42S02) "Table missing 
%s.%s", sname,tname);
        *res = mvc_clear_table(m, t);
+       if (*res == BUN_NONE)
+               throw(SQL, "sql.clear_table", SQLSTATE(42S02) "clear failed");
        return MAL_SUCCEED;
 }
 
@@ -1850,7 +1858,8 @@ mvc_delete_wrap(Client cntxt, MalBlkPtr 
        }
        if( b && BATcount(b) > 4096 && !b->batTransient)
                BATmsync(b);
-       store_funcs.delete_tab(m->session->tr, t, b, tpe);
+       if (store_funcs.delete_tab(m->session->tr, t, b, tpe) != LOG_OK)
+               throw(SQL, "sql.delete", SQLSTATE(3F000) "delete failed");
        if (b)
                BBPunfix(b->batCacheid);
        return MAL_SUCCEED;
@@ -4075,7 +4084,7 @@ vacuum(Client cntxt, MalBlkPtr mb, MalSt
        bat bid;
        BAT *b, *del;
        node *o;
-       int i, bids[2049];
+       int i, bids[2049], err = 0;
 
        if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
                return msg;
@@ -4140,17 +4149,21 @@ vacuum(Client cntxt, MalBlkPtr mb, MalSt
        }
        BBPunfix(del->batCacheid);
 
-       mvc_clear_table(m, t);
+       if (mvc_clear_table(m, t) == BUN_NONE)
+               throw(SQL, name, SQLSTATE(42000) "vacumm: clear failed");
        for (o = t->columns.set->h, i = 0; o; o = o->next, i++) {
                sql_column *c = o->data;
                BAT *ins = BATdescriptor(bids[i]);      /* use the insert bat */
 
                if( ins){
-                       store_funcs.append_col(tr, c, ins, TYPE_bat);
+                       if (store_funcs.append_col(tr, c, ins, TYPE_bat) != 
LOG_OK)
+                               err = 1;
                        BBPunfix(ins->batCacheid);
                }
                BBPrelease(bids[i]);
        }
+       if (err)
+               throw(SQL, name, SQLSTATE(42000) "vacuum: reappend failed");
        /* TODO indices */
        return MAL_SUCCEED;
 }
diff --git a/sql/backends/monet5/sql_execute.c 
b/sql/backends/monet5/sql_execute.c
--- a/sql/backends/monet5/sql_execute.c
+++ b/sql/backends/monet5/sql_execute.c
@@ -701,7 +701,7 @@ SQLengineIntern(Client c, backend *be)
                msg = SQLrun(c,m);
 
 cleanup_engine:
-       if (m->type == Q_SCHEMA && m->qc != NULL)
+       if (m->emode != m_prepare && m->type == Q_SCHEMA && m->qc != NULL)
                qc_clean(m->qc);
        if (msg) {
                /* don't print exception decoration, just the message */
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -798,6 +798,8 @@ SQLreader(Client c)
                        go = msg == MAL_SUCCEED;
                        commit_done = true;
                }
+               if (m->session->tr && m->session->tr->active)
+                       c->idle = 0;
 
                if (go && in->pos >= in->len) {
                        ssize_t rd;
diff --git 
a/sql/jdbc/tests/Tests/ValidateSystemCatalogTables.stable.out.Windows 
b/sql/jdbc/tests/Tests/ValidateSystemCatalogTables.stable.out.Windows
new file mode 100755
--- /dev/null
+++ b/sql/jdbc/tests/Tests/ValidateSystemCatalogTables.stable.out.Windows
@@ -0,0 +1,45 @@
+stdout of test 'ValidateSystemCatalogTables` in directory 'sql/jdbc/tests` 
itself:
+
+
+# 16:25:09 >  
+# 16:25:09 >  "./ValidateSystemCatalogTables.SQL.sh" 
"ValidateSystemCatalogTables"
+# 16:25:09 >  
+
+
+# 16:25:09 >  
+# 16:25:09 >  java nl.cwi.monetdb.client.JdbcClient -h localhost -p 34154 -d 
mTests_sql_jdbc_tests -e -f 
/home/dinther/dev/dev/MonetDB/sql/jdbc/tests/Tests/ValidateSystemCatalogTables.sql
+# 16:25:09 >  
+
+\vsci
+Checking     45 tables/keys  in schema sys for Primary Key uniqueness 
violations.
+Checking     45 columns      in schema sys for Primary Key Not Null violations.
+Checking     30 tables/keys  in schema sys for Unique Constraint violations.
+Checking     96 foreign keys in schema sys for Foreign Key referential 
integrity violations.
+Checking    169 columns      in schema sys for Not Null violations.
+Checking    145 columns      in schema sys for Max Character Length violations.
+Checking      6 tables/keys  in schema tmp for Primary Key uniqueness 
violations.
+Checking      6 columns      in schema tmp for Primary Key Not Null violations.
+Checking      7 tables/keys  in schema tmp for Unique Constraint violations.
+Checking     13 foreign keys in schema tmp for Foreign Key referential 
integrity violations.
+Checking     35 columns      in schema tmp for Not Null violations.
+Checking     14 columns      in schema tmp for Max Character Length violations.
+\vsi sys
+Checking     10 keys         in schema sys for Primary Key uniqueness 
violations.
+Checking      7 keys         in schema sys for Unique Constraint violations.
+Checking      0 foreign keys in schema sys for Foreign Key referential 
integrity violations.
+Checking     29 columns      in schema sys for Not Null violations.
+Checking    145 columns      in schema sys for Max Character Length violations.
+\vsi tmp
+Checking      0 keys         in schema tmp for Primary Key uniqueness 
violations.
+Checking      0 keys         in schema tmp for Unique Constraint violations.
+Checking      0 foreign keys in schema tmp for Foreign Key referential 
integrity violations.
+Checking      0 columns      in schema tmp for Not Null violations.
+Checking     14 columns      in schema tmp for Max Character Length violations.
+\vdbi
+No user schemas found in this database.
+
+
+# 16:25:12 >  
+# 16:25:12 >  "Done."
+# 16:25:12 >  
+
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -2024,7 +2024,7 @@ static BUN
 clear_col(sql_trans *tr, sql_column *c)
 {
        if (bind_col_data(tr, c) == LOG_ERR)
-               return 0;
+               return BUN_NONE;
        c->t->s->base.wtime = c->t->base.wtime = c->base.wtime = tr->wstime;
        if (c->data)
                return clear_delta(tr, c->data);
@@ -2037,7 +2037,7 @@ clear_idx(sql_trans *tr, sql_idx *i)
        if (!isTable(i->t) || (hash_index(i->type) && list_length(i->columns) 
<= 1) || !idx_has_column(i->type))
                return 0;
        if (bind_idx_data(tr, i) == LOG_ERR)
-               return 0;
+               return BUN_NONE;
        i->t->s->base.wtime = i->t->base.wtime = i->base.wtime = tr->wstime;
        if (i->data)
                return clear_delta(tr, i->data);
@@ -2076,7 +2076,7 @@ clear_del(sql_trans *tr, sql_table *t)
 {
 
        if (bind_del_data(tr, t) == LOG_ERR)
-               return 0;
+               return BUN_NONE;
        t->s->base.wtime = t->base.wtime = tr->wstime;
        return clear_dbat(tr, t->data);
 }
@@ -2771,9 +2771,11 @@ update_table(sql_trans *tr, sql_table *f
                                        oc->data = timestamp_delta(o->data, 
oc->base.stime);
                                }
                                assert(oc->data);
-                               if (tr_merge_delta(tr, oc->data, oc->unique == 
1) != LOG_OK)
-                                       ok = LOG_ERR;
-                               cc->data = NULL;
+                               if (cc->base.wtime) {
+                                       if (tr_merge_delta(tr, oc->data, 
oc->unique == 1) != LOG_OK)
+                                               ok = LOG_ERR;
+                                       cc->data = NULL;
+                               }
                        } else if (cc->data) {
                                tr_handle_snapshot(tr, cc->data);
                                oc->data = cc->data;
@@ -2852,9 +2854,11 @@ update_table(sql_trans *tr, sql_table *f
                                                oi->data = 
timestamp_delta(o->data, oi->base.stime);
                                        }
                                        assert(oi->data);
-                                       if (tr_merge_delta(tr, oi->data, 0) != 
LOG_OK)
-                                               ok = LOG_ERR;
-                                       ci->data = NULL;
+                                       if (ci->base.wtime) {
+                                               if (tr_merge_delta(tr, 
oi->data, 0) != LOG_OK)
+                                                       ok = LOG_ERR;
+                                               ci->data = NULL;
+                                       }
                                } else if (ci->data) {
                                        tr_handle_snapshot(tr, ci->data);
                                        oi->data = ci->data;
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -37,6 +37,7 @@ store_type active_store_type = store_bat
 int store_readonly = 0;
 int store_singleuser = 0;
 int store_initialized = 0;
+int store_debug = 0;
 
 store_functions store_funcs;
 table_functions table_funcs;
@@ -2074,6 +2075,7 @@ store_init(sql_allocator *pa, int debug,
 
        store_readonly = readonly;
        store_singleuser = singleuser;
+       store_debug = debug;
 
        MT_lock_set(&bs_lock);
 
@@ -6509,28 +6511,34 @@ sql_trans_clear_table(sql_trans *tr, sql
 {
        node *n = t->columns.set->h;
        sql_column *c = n->data;
-       BUN sz = 0;
+       BUN sz = 0, nsz = 0;
 
        t->cleared = 1;
        t->base.wtime = t->s->base.wtime = tr->wtime = tr->wstime;
        c->base.wtime = tr->wstime;
 
-       sz += store_funcs.clear_col(tr, c);
-       sz -= store_funcs.clear_del(tr, t);
+       if ((nsz = store_funcs.clear_col(tr, c)) == BUN_NONE)
+               return BUN_NONE;
+       sz += nsz;
+       if ((nsz = store_funcs.clear_del(tr, t)) == BUN_NONE)
+               return BUN_NONE;
+       sz -= nsz;
 
        for (n = n->next; n; n = n->next) {
                c = n->data;
                c->base.wtime = tr->wstime;
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to