Changeset: 9245a489a85a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9245a489a85a
Modified Files:
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql.mal
Branch: Apr2019
Log Message:

Added sys.deltas version for schemas' tables columns and table's columns.


diffs (truncated from 302 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
@@ -1106,9 +1106,9 @@ mvc_bind_wrap(Client cntxt, MalBlkPtr mb
 str
 mvc_delta_values(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
-       const char *sname = *getArgReference_str(stk, pci, 7);
-       const char *tname = *getArgReference_str(stk, pci, 8);
-       const char *cname = *getArgReference_str(stk, pci, 9);
+       const char *sname = *getArgReference_str(stk, pci, 7),
+                          *tname = (pci->argc > 8) ? *getArgReference_str(stk, 
pci, 8) : NULL,
+                          *cname = (pci->argc > 9) ? *getArgReference_str(stk, 
pci, 9) : NULL;
        mvc *m;
        str msg = MAL_SUCCEED;
        BAT *col1 = NULL, *col2 = NULL, *col3 = NULL, *col4 = NULL, *col5 = 
NULL, *col6 = NULL, *col7 = NULL;
@@ -1123,93 +1123,202 @@ mvc_delta_values(Client cntxt, MalBlkPtr
        sql_schema *s = NULL;
        sql_table *t = NULL;
        sql_column *c = NULL;
+       node *n;
        bool cleared;
        int level = 0;
-       lng all, readonly, inserted, updates, deletes;
+       lng nrows = 0, all, readonly, inserted, updates, deletes;
 
        if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
                goto cleanup;
        if ((msg = checkSQLContext(cntxt)) != NULL)
                goto cleanup;
 
-       if (!sname || strcmp(sname, str_nil) == 0 || *sname == '\0')
-               throw(SQL, "sql.delta", SQLSTATE(3F000) "Invalid schema name");
-       if (!tname || strcmp(tname, str_nil) == 0 || *tname == '\0')
-               throw(SQL, "sql.delta", SQLSTATE(3F000) "Invalid table name");
-       if (!cname || strcmp(cname, str_nil) == 0 || *cname == '\0')
-               throw(SQL, "sql.delta", SQLSTATE(3F000) "Invalid column name");
        if (!(s = mvc_bind_schema(m, sname)))
                throw(SQL, "sql.delta", SQLSTATE(3F000) "No such schema '%s'", 
sname);
-       if (!(t = mvc_bind_table(m, s, tname)))
-               throw(SQL, "sql.delta", SQLSTATE(3F000) "No such table '%s' in 
schema '%s'", tname, s->base.name);
-       if (!(c = mvc_bind_column(m, t, cname)))
-               throw(SQL, "sql.delta", SQLSTATE(3F000) "No such column '%s' in 
table '%s'", cname, t->base.name);
-
-       cleared = (t->cleared != 0);
-       inserted = (lng) store_funcs.count_col(m->session->tr, c, 0);
-       all = (lng) store_funcs.count_col(m->session->tr, c, 1);
-       updates = (lng) store_funcs.count_col_upd(m->session->tr, c);
-       deletes = (lng) store_funcs.count_del(m->session->tr, t);
-       readonly = all - inserted;
-       tr = m->session->tr;
-       while((tr = tr->parent)) level++;
-
-       if ((col1 = COLnew(0, TYPE_int, 1, TRANSIENT)) == NULL) {
+
+       if (tname) {
+               if (!(t = mvc_bind_table(m, s, tname)))
+                       throw(SQL, "sql.delta", SQLSTATE(3F000) "No such table 
'%s' in schema '%s'", tname, s->base.name);
+               if (isView(t))
+                       throw(SQL, "sql.delta", SQLSTATE(42000) "Views don't 
have delta values");
+               if (isMergeTable(t))
+                       throw(SQL, "sql.delta", SQLSTATE(42000) "Merge tables 
don't have delta values");
+               if (isStream(t))
+                       throw(SQL, "sql.delta", SQLSTATE(42000) "Stream tables 
don't have delta values");
+               if (isRemote(t))
+                       throw(SQL, "sql.delta", SQLSTATE(42000) "Remote tables 
don't have delta values");
+               if (isReplicaTable(t))
+                       throw(SQL, "sql.delta", SQLSTATE(42000) "Replica tables 
don't have delta values");
+               if (cname) {
+                       if (!(c = mvc_bind_column(m, t, cname)))
+                               throw(SQL, "sql.delta", SQLSTATE(3F000) "No 
such column '%s' in table '%s'", cname, t->base.name);
+                       nrows = 1;
+               } else {
+                       nrows = t->columns.set->cnt;
+               }
+       } else {
+               for (n = s->tables.set->h; n ; n = n->next) {
+                       t = (sql_table *) n->data;
+                       if (!(isView(t) || isMergeTable(t) || isStream(t) || 
isRemote(t) || isReplicaTable(t)))
+                               nrows += t->columns.set->cnt;
+               }
+       }
+       assert(nrows);
+
+       if ((col1 = COLnew(0, TYPE_int, nrows, TRANSIENT)) == NULL) {
                msg = createException(SQL, "sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
                goto cleanup;
        }
-       if ((col2 = COLnew(0, TYPE_bit, 1, TRANSIENT)) == NULL) {
+       if ((col2 = COLnew(0, TYPE_bit, nrows, TRANSIENT)) == NULL) {
+               msg = createException(SQL, "sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+               goto cleanup;
+       }
+       if ((col3 = COLnew(0, TYPE_lng, nrows, TRANSIENT)) == NULL) {
                msg = createException(SQL, "sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
                goto cleanup;
        }
-       if ((col3 = COLnew(0, TYPE_lng, 1, TRANSIENT)) == NULL) {
+       if ((col4 = COLnew(0, TYPE_lng, nrows, TRANSIENT)) == NULL) {
                msg = createException(SQL, "sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
                goto cleanup;
        }
-       if ((col4 = COLnew(0, TYPE_lng, 1, TRANSIENT)) == NULL) {
+       if ((col5 = COLnew(0, TYPE_lng, nrows, TRANSIENT)) == NULL) {
+               msg = createException(SQL, "sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+               goto cleanup;
+       }
+       if ((col6 = COLnew(0, TYPE_lng, nrows, TRANSIENT)) == NULL) {
+               msg = createException(SQL, "sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+               goto cleanup;
+       }
+       if ((col7 = COLnew(0, TYPE_int, nrows, TRANSIENT)) == NULL) {
                msg = createException(SQL, "sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
                goto cleanup;
        }
-       if ((col5 = COLnew(0, TYPE_lng, 1, TRANSIENT)) == NULL) {
-               msg = createException(SQL, "sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
-               goto cleanup;
-       }
-       if ((col6 = COLnew(0, TYPE_lng, 1, TRANSIENT)) == NULL) {
-               msg = createException(SQL, "sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
-               goto cleanup;
-       }
-       if ((col7 = COLnew(0, TYPE_int, 1, TRANSIENT)) == NULL) {
-               msg = createException(SQL, "sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
-               goto cleanup;
-       }
-
-       if (BUNappend(col1, &c->base.id, false) != GDK_SUCCEED) {
-               msg = createException(SQL,"sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
-               goto cleanup;
-       }
-       if (BUNappend(col2, &cleared, false) != GDK_SUCCEED) {
-               msg = createException(SQL,"sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
-               goto cleanup;
-       }
-       if (BUNappend(col3, &readonly, false) != GDK_SUCCEED) {
-               msg = createException(SQL,"sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
-               goto cleanup;
-       }
-       if (BUNappend(col4, &inserted, false) != GDK_SUCCEED) {
-               msg = createException(SQL,"sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
-               goto cleanup;
-       }
-       if (BUNappend(col5, &updates, false) != GDK_SUCCEED) {
-               msg = createException(SQL,"sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
-               goto cleanup;
-       }
-       if (BUNappend(col6, &deletes, false) != GDK_SUCCEED) {
-               msg = createException(SQL,"sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
-               goto cleanup;
-       }
-       if (BUNappend(col7, &level, false) != GDK_SUCCEED) {
-               msg = createException(SQL,"sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
-               goto cleanup;
+
+       tr = m->session->tr;
+       while((tr = tr->parent)) level++;
+
+       if (tname) {
+               cleared = (t->cleared != 0);
+               deletes = (lng) store_funcs.count_del(m->session->tr, t);
+               if (cname) {
+                       inserted = (lng) store_funcs.count_col(m->session->tr, 
c, 0);
+                       all = (lng) store_funcs.count_col(m->session->tr, c, 1);
+                       updates = (lng) 
store_funcs.count_col_upd(m->session->tr, c);
+                       readonly = all - inserted;
+
+                       if (BUNappend(col1, &c->base.id, false) != GDK_SUCCEED) 
{
+                               msg = createException(SQL,"sql.delta", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                               goto cleanup;
+                       }
+                       if (BUNappend(col2, &cleared, false) != GDK_SUCCEED) {
+                               msg = createException(SQL,"sql.delta", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                               goto cleanup;
+                       }
+                       if (BUNappend(col3, &readonly, false) != GDK_SUCCEED) {
+                               msg = createException(SQL,"sql.delta", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                               goto cleanup;
+                       }
+                       if (BUNappend(col4, &inserted, false) != GDK_SUCCEED) {
+                               msg = createException(SQL,"sql.delta", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                               goto cleanup;
+                       }
+                       if (BUNappend(col5, &updates, false) != GDK_SUCCEED) {
+                               msg = createException(SQL,"sql.delta", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                               goto cleanup;
+                       }
+                       if (BUNappend(col6, &deletes, false) != GDK_SUCCEED) {
+                               msg = createException(SQL,"sql.delta", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                               goto cleanup;
+                       }
+                       if (BUNappend(col7, &level, false) != GDK_SUCCEED) {
+                               msg = createException(SQL,"sql.delta", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                               goto cleanup;
+                       }
+               } else {
+                       for (n = t->columns.set->h; n ; n = n->next) {
+                               c = (sql_column*) n->data;
+
+                               inserted = (lng) 
store_funcs.count_col(m->session->tr, c, 0);
+                               all = (lng) 
store_funcs.count_col(m->session->tr, c, 1);
+                               updates = (lng) 
store_funcs.count_col_upd(m->session->tr, c);
+                               readonly = all - inserted;
+
+                               if (BUNappend(col1, &c->base.id, false) != 
GDK_SUCCEED) {
+                                       msg = createException(SQL,"sql.delta", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                                       goto cleanup;
+                               }
+                               if (BUNappend(col2, &cleared, false) != 
GDK_SUCCEED) {
+                                       msg = createException(SQL,"sql.delta", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                                       goto cleanup;
+                               }
+                               if (BUNappend(col3, &readonly, false) != 
GDK_SUCCEED) {
+                                       msg = createException(SQL,"sql.delta", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                                       goto cleanup;
+                               }
+                               if (BUNappend(col4, &inserted, false) != 
GDK_SUCCEED) {
+                                       msg = createException(SQL,"sql.delta", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                                       goto cleanup;
+                               }
+                               if (BUNappend(col5, &updates, false) != 
GDK_SUCCEED) {
+                                       msg = createException(SQL,"sql.delta", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                                       goto cleanup;
+                               }
+                               if (BUNappend(col6, &deletes, false) != 
GDK_SUCCEED) {
+                                       msg = createException(SQL,"sql.delta", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                                       goto cleanup;
+                               }
+                               if (BUNappend(col7, &level, false) != 
GDK_SUCCEED) {
+                                       msg = createException(SQL,"sql.delta", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                                       goto cleanup;
+                               }
+                       }
+               }
+       } else {
+               for (n = s->tables.set->h; n ; n = n->next) {
+                       t = (sql_table *) n->data;
+                       if (!(isView(t) || isMergeTable(t) || isStream(t) || 
isRemote(t) || isReplicaTable(t))) {
+                               cleared = (t->cleared != 0);
+                               deletes = (lng) 
store_funcs.count_del(m->session->tr, t);
+
+                               for (node *nn = t->columns.set->h; nn ; nn = 
nn->next) {
+                                       c = (sql_column*) nn->data;
+
+                                       inserted = (lng) 
store_funcs.count_col(m->session->tr, c, 0);
+                                       all = (lng) 
store_funcs.count_col(m->session->tr, c, 1);
+                                       updates = (lng) 
store_funcs.count_col_upd(m->session->tr, c);
+                                       readonly = all - inserted;
+
+                                       if (BUNappend(col1, &c->base.id, false) 
!= GDK_SUCCEED) {
+                                               msg = 
createException(SQL,"sql.delta", SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                                               goto cleanup;
+                                       }
+                                       if (BUNappend(col2, &cleared, false) != 
GDK_SUCCEED) {
+                                               msg = 
createException(SQL,"sql.delta", SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                                               goto cleanup;
+                                       }
+                                       if (BUNappend(col3, &readonly, false) 
!= GDK_SUCCEED) {
+                                               msg = 
createException(SQL,"sql.delta", SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                                               goto cleanup;
+                                       }
+                                       if (BUNappend(col4, &inserted, false) 
!= GDK_SUCCEED) {
+                                               msg = 
createException(SQL,"sql.delta", SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                                               goto cleanup;
+                                       }
+                                       if (BUNappend(col5, &updates, false) != 
GDK_SUCCEED) {
+                                               msg = 
createException(SQL,"sql.delta", SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                                               goto cleanup;
+                                       }
+                                       if (BUNappend(col6, &deletes, false) != 
GDK_SUCCEED) {
+                                               msg = 
createException(SQL,"sql.delta", SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                                               goto cleanup;
+                                       }
+                                       if (BUNappend(col7, &level, false) != 
GDK_SUCCEED) {
+                                               msg = 
createException(SQL,"sql.delta", SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                                               goto cleanup;
+                                       }
+                               }
+                       }
+               }
        }
 
 cleanup:
diff --git a/sql/backends/monet5/sql.mal b/sql/backends/monet5/sql.mal
--- a/sql/backends/monet5/sql.mal
+++ b/sql/backends/monet5/sql.mal
@@ -113,6 +113,14 @@ unsafe pattern restart( sname:str, seque
 address mvc_restart_seq
 comment "restart the sequence with value start";
 
+pattern deltas( schema:str 
)(ids:bat[:int],cleared:bat[:bit],readonly:bat[:lng],inserted:bat[:lng],updated:bat[:lng],deleted:bat[:lng],tr_level:bat[:int])
+address mvc_delta_values
+comment "Return the delta values sizes of all columns of the schema's tables, 
plus the current transaction level";
+
+pattern deltas( schema:str, table:str 
)(ids:bat[:int],cleared:bat[:bit],readonly:bat[:lng],inserted:bat[:lng],updated:bat[:lng],deleted:bat[:lng],tr_level:bat[:int])
+address mvc_delta_values
+comment "Return the delta values sizes from the table's columns, plus the 
current transaction level";
+
 pattern deltas( schema:str, table:str, column:str 
)(ids:bat[:int],cleared:bat[:bit],readonly:bat[:lng],inserted:bat[:lng],updated:bat[:lng],deleted:bat[:lng],tr_level:bat[:int])
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to