Changeset: 8a610fb9d7ae for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/8a610fb9d7ae
Modified Files:
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_rank.c
        sql/test/emptydb/Tests/check.stable.out
        sql/test/emptydb/Tests/check.stable.out.32bit
        sql/test/emptydb/Tests/check.stable.out.int128
Branch: default
Log Message:

Merged with Jul2021


diffs (truncated from 5837 to 300 lines):

diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -1263,7 +1263,7 @@ 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 == 4 ? "STREAM " :
                            type == 5 ? "REMOTE " :
                            type == 6 ? "REPLICA " :
                            "");
diff --git a/gdk/gdk_tracer.c b/gdk/gdk_tracer.c
--- a/gdk/gdk_tracer.c
+++ b/gdk/gdk_tracer.c
@@ -525,7 +525,7 @@ GDKtracer_log(const char *file, const ch
                fprintf(stderr, "#%s%s%s: %s: %s%s%s%s\n",
                        add_ts ? ts : "",
                        add_ts ? ": " : "",
-                       MT_thread_getname(), func, GDKERROR,
+                       MT_thread_getname(), func, level == M_WARNING ? 
GDKWARNING : GDKERROR,
                        msg, syserr ? ": " : "",
                        syserr ? syserr : "");
                if (active_tracer == NULL || active_tracer == stderr)
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -5648,7 +5648,7 @@ check_for_foreign_key_references(mvc *sq
                                                        continue;
                                                k = fk;
                                                /* make sure it is not a self 
referencing key */
-                                               if (k->t != t && !cascade) {
+                                               if (k->t != t && !cascade && 
isTable(t)) {
                                                        node *n = 
ol_first_node(t->columns);
                                                        sql_column *c = n->data;
                                                        size_t n_rows = 
store->storage_api.count_col(sql->session->tr, c, 10);
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
@@ -1309,8 +1309,12 @@ mvc_bind_wrap(Client cntxt, MalBlkPtr mb
                return msg;
        if ((msg = checkSQLContext(cntxt)) != NULL)
                return msg;
+       sqlstore *store = m->store;
        sql_schema *s = mvc_bind_schema(m, sname);
        sql_table *t = mvc_bind_table(m, s, tname);
+       if (t && !isTable(t))
+               throw(SQL, "sql.bind", SQLSTATE(42000) "%s '%s' is not 
persistent",
+                         TABLE_TYPE_DESCRIPTION(t->type, t->properties), 
t->base.name);
        sql_column *c = mvc_bind_column(m, t, cname);
        b = mvc_bind(m, sname, tname, cname, access);
        if (b && b->ttype && b->ttype != coltype) {
@@ -1319,7 +1323,6 @@ mvc_bind_wrap(Client cntxt, MalBlkPtr mb
        }
        if (b) {
                if (pci->argc == (8 + upd) && getArgType(mb, pci, 6 + upd) == 
TYPE_int) {
-                       sqlstore *store = m->session->tr->store;
                        BUN cnt = store->storage_api.count_col(m->session->tr, 
c, 0), psz;
                        /* partitioned access */
                        int part_nr = *getArgReference_int(stk, pci, 6 + upd);
@@ -1407,10 +1410,6 @@ mvc_bind_wrap(Client cntxt, MalBlkPtr mb
                                BBPkeepref(*bid = id->batCacheid);
                                BBPkeepref(*uvl = vl->batCacheid);
                        } else {
-                               sql_schema *s = mvc_bind_schema(m, sname);
-                               sql_table *t = mvc_bind_table(m, s, tname);
-                               sql_column *c = mvc_bind_column(m, t, cname);
-
                                *bid = e_bat(TYPE_oid);
                                *uvl = e_bat(c->type.type->localtype);
                                if (*bid == BID_NIL || *uvl == BID_NIL) {
@@ -1520,7 +1519,7 @@ mvc_delta_values(Client cntxt, MalBlkPtr
                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 (!isTable(t))
-                       throw(SQL, "sql.delta", SQLSTATE(42000) "%s don't have 
delta values", TABLE_TYPE_DESCRIPTION(t->type, t->properties));
+                       throw(SQL, "sql.delta", SQLSTATE(42000) "%s doesn't 
have delta values", TABLE_TYPE_DESCRIPTION(t->type, t->properties));
                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);
@@ -1650,6 +1649,10 @@ mvc_bind_idxbat_wrap(Client cntxt, MalBl
                return msg;
        sqlstore *store = m->store;
        sql_schema *s = mvc_bind_schema(m, sname);
+       sql_table *t = mvc_bind_table(m, s, tname);
+       if (t && !isTable(t))
+               throw(SQL, "sql.tid", SQLSTATE(42000) "%s '%s' is not 
persistent",
+                         TABLE_TYPE_DESCRIPTION(t->type, t->properties), 
t->base.name);
        sql_idx *i = mvc_bind_idx(m, s, iname);
        b = mvc_bind_idxbat(m, sname, tname, iname, access);
        if (b && b->ttype && b->ttype != coltype) {
@@ -1658,8 +1661,7 @@ mvc_bind_idxbat_wrap(Client cntxt, MalBl
        }
        if (b) {
                if (pci->argc == (8 + upd) && getArgType(mb, pci, 6 + upd) == 
TYPE_int) {
-                       BUN cnt = BATcount(b), psz;
-                       cnt = store->storage_api.count_idx(m->session->tr, i, 
0);
+                       BUN cnt = store->storage_api.count_idx(m->session->tr, 
i, 0), psz;
                        /* partitioned access */
                        int part_nr = *getArgReference_int(stk, pci, 6 + upd);
                        int nr_parts = *getArgReference_int(stk, pci, 7 + upd);
@@ -1682,12 +1684,6 @@ mvc_bind_idxbat_wrap(Client cntxt, MalBl
                        } else {
                                /* BAT b holds the UPD_ID bat */
                                oid l, h;
-                               BAT *s = mvc_bind_idxbat(m, sname, tname, 
iname, 0);
-                               if ( s == NULL) {
-                                       BBPunfix(b->batCacheid);
-                                       throw(SQL,"sql.bindidx",SQLSTATE(42000) 
"Cannot access index column %s.%s.%s",sname,tname,iname);
-                               }
-                               cnt = BATcount(s);
                                cnt = 
store->storage_api.count_idx(m->session->tr, i, 0);
                                psz = cnt ? (cnt / nr_parts) : 0;
                                l = part_nr * psz;
@@ -1698,7 +1694,6 @@ mvc_bind_idxbat_wrap(Client cntxt, MalBl
                                        h = cnt;
                                h--;
                                bn = BATselect(b, NULL, &l, &h, true, true, 
false);
-                               BBPunfix(s->batCacheid);
                                if(bn == NULL) {
                                        BBPunfix(b->batCacheid);
                                        throw(SQL, "sql.bindidx", 
GDK_EXCEPTION);
@@ -1738,15 +1733,17 @@ mvc_bind_idxbat_wrap(Client cntxt, MalBl
                                        bat_destroy(id);
                                        bat_destroy(vl);
                                        BBPunfix(b->batCacheid);
-                                       throw(SQL, "sql.idxbind", 
GDK_EXCEPTION);
+                                       throw(SQL, "sql.bindidx", 
GDK_EXCEPTION);
                                }
-                               assert(BATcount(id) == BATcount(vl));
+                               if ( BATcount(id) != BATcount(vl)){
+                                       BBPunfix(b->batCacheid);
+                                       bat_destroy(id);
+                                       bat_destroy(vl);
+                                       throw(SQL, "sql.bindidx", 
SQLSTATE(0000) "Inconsistent BAT count");
+                               }
                                BBPkeepref(*bid = id->batCacheid);
                                BBPkeepref(*uvl = vl->batCacheid);
                        } else {
-                               sql_schema *s = mvc_bind_schema(m, sname);
-                               sql_idx *i = mvc_bind_idx(m, s, iname);
-
                                *bid = e_bat(TYPE_oid);
                                *uvl = 
e_bat((i->type==join_idx)?TYPE_oid:TYPE_lng);
                                if (*bid == BID_NIL || *uvl == BID_NIL) {
@@ -1755,7 +1752,7 @@ mvc_bind_idxbat_wrap(Client cntxt, MalBl
                                        if (*uvl)
                                                BBPunfix(*uvl);
                                        BBPunfix(b->batCacheid);
-                                       throw(SQL, "sql.idxbind", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+                                       throw(SQL, "sql.bindidx", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
                                }
                        }
                        BBPunfix(b->batCacheid);
@@ -1765,8 +1762,8 @@ mvc_bind_idxbat_wrap(Client cntxt, MalBl
                return MAL_SUCCEED;
        }
        if (sname)
-               throw(SQL, "sql.idxbind", SQLSTATE(HY005) "Cannot access column 
descriptor %s for %s.%s", iname, sname, tname);
-       throw(SQL, "sql.idxbind", SQLSTATE(HY005) "Cannot access column 
descriptor %s for %s", iname, tname);
+               throw(SQL, "sql.bindidx", SQLSTATE(HY005) "Cannot access column 
descriptor %s for %s.%s", iname, sname, tname);
+       throw(SQL, "sql.bindidx", SQLSTATE(HY005) "Cannot access column 
descriptor %s for %s", iname, tname);
 }
 
 str
@@ -2371,6 +2368,9 @@ SQLtid(Client cntxt, MalBlkPtr mb, MalSt
        t = mvc_bind_table(m, s, tname);
        if (t == NULL)
                throw(SQL, "sql.tid", SQLSTATE(42S02) "Table missing 
%s.%s",sname,tname);
+       if (!isTable(t))
+               throw(SQL, "sql.tid", SQLSTATE(42000) "%s '%s' is not 
persistent",
+                         TABLE_TYPE_DESCRIPTION(t->type, t->properties), 
t->base.name);
 
        sqlstore *store = m->store;
        /* we have full table count, nr of deleted (unused rows) */
diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -475,8 +475,8 @@ alter_table_set_access(mvc *sql, char *s
                throw(SQL,"sql.alter_table_set_access",SQLSTATE(42000) "ALTER 
TABLE: access denied for %s to schema '%s'", get_string_global_var(sql, 
"current_user"), s->base.name);
        if (!(t = mvc_bind_table(sql, s, tname)))
                throw(SQL,"sql.alter_table_set_access",SQLSTATE(42S02) "ALTER 
TABLE: no such table '%s' in schema '%s'", tname, s->base.name);
-       if (isMergeTable(t))
-               throw(SQL,"sql.alter_table_set_access",SQLSTATE(42S02) "ALTER 
TABLE: read only MERGE TABLES are not supported");
+       if (!isTable(t))
+               throw(SQL,"sql.alter_table_set_access",SQLSTATE(42000) "ALTER 
TABLE: access changes on %sS not supported", TABLE_TYPE_DESCRIPTION(t->type, 
t->properties));
        if (t->access != access) {
                if (access && table_has_updates(sql->session->tr, t))
                        throw(SQL,"sql.alter_table_set_access",SQLSTATE(40000) 
"ALTER TABLE: set READ or INSERT ONLY not possible with outstanding updates 
(wait until updates are flushed)\n");
diff --git a/sql/backends/monet5/sql_optimizer.c 
b/sql/backends/monet5/sql_optimizer.c
--- a/sql/backends/monet5/sql_optimizer.c
+++ b/sql/backends/monet5/sql_optimizer.c
@@ -83,7 +83,7 @@ SQLgetSpace(mvc *m, MalBlkPtr mb, int pr
                                continue;
 
                        /* we have to sum the cost of all three components of a 
BAT */
-                       if (c && (!isRemote(c->t) && !isMergeTable(c->t)) && 
(lasttable == 0 || strcmp(lasttable,tname)==0)) {
+                       if (c && isTable(c->t) && (lasttable == 0 || 
strcmp(lasttable,tname)==0)) {
                                size = SQLgetColumnSize(tr, c, access);
                                space += size;  // accumulate once per table
                                //lasttable = tname;     invalidate this attempt
@@ -102,7 +102,7 @@ SQLgetSpace(mvc *m, MalBlkPtr mb, int pr
                        if (getFunctionId(p) == bindidxRef) {
                                sql_idx *i = mvc_bind_idx(m, s, idxname);
 
-                               if (i && (!isRemote(i->t) && 
!isMergeTable(i->t))) {
+                               if (i && isTable(i->t)) {
                                        size = SQLgetIdxSize(tr, i, access);
 
                                        if( !prepare && size == 0 && ! 
i->t->system){
diff --git a/sql/backends/monet5/sql_rank.c b/sql/backends/monet5/sql_rank.c
--- a/sql/backends/monet5/sql_rank.c
+++ b/sql/backends/monet5/sql_rank.c
@@ -1245,16 +1245,24 @@ SQLbasecount(Client cntxt, MalBlkPtr mb,
        str tname = *getArgReference_str(stk, pci, 2);
        mvc *m = NULL;
        str msg;
+       sql_schema *s = NULL;
+       sql_table *t = NULL;
+       sql_column *c = NULL;
 
        if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
                return msg;
        if ((msg = checkSQLContext(cntxt)) != NULL)
                return msg;
-       sql_schema *s = mvc_bind_schema(m, sname);
-       sql_table *t = s?mvc_bind_table(m, s, tname):NULL;
-       if (!t || !isTable(t) || isMergeTable(t) || isReplicaTable(t))
-               return createException(SQL, "sql.count", SQLSTATE(HY005) 
"Cannot find table %s.%s", sname, tname);
-       sql_column *c = ol_first_node(t->columns)->data;
+       if (!(s = mvc_bind_schema(m, sname)))
+               throw(SQL, "sql.count", SQLSTATE(3F000) "Schema missing %s", 
sname);
+       if (!(t = mvc_bind_table(m, s, tname)))
+               throw(SQL, "sql.count", SQLSTATE(42S02) "Table missing 
%s.%s",sname,tname);
+       if (!isTable(t))
+               throw(SQL, "sql.count", SQLSTATE(42000) "%s '%s' is not 
persistent",
+                         TABLE_TYPE_DESCRIPTION(t->type, t->properties), 
t->base.name);
+       if (!ol_first_node(t->columns))
+               throw(SQL, "sql.count", SQLSTATE(42S22) "Column missing 
%s.%s",sname,tname);
+       c = ol_first_node(t->columns)->data;
        sqlstore *store = m->session->tr->store;
 
        *res = store->storage_api.count_col(m->session->tr, c, 10);
@@ -1266,7 +1274,7 @@ SQLcount(Client cntxt, MalBlkPtr mb, Mal
 {
        BAT *r = NULL, *b = NULL, *p = NULL, *o = NULL, *s = NULL, *e = NULL;
        int tpe, frame_type;
-       bit ignore_nils;
+       bit ignore_nils, heap_loaded = false;
        bat *res = NULL;
        str msg = MAL_SUCCEED;
 
@@ -1280,9 +1288,18 @@ SQLcount(Client cntxt, MalBlkPtr mb, Mal
 
        if (isaBatType(tpe))
                tpe = getBatType(tpe);
-       if (isaBatType(getArgType(mb, pci, 1)) && (!(b = 
BATdescriptor(*getArgReference_bat(stk, pci, 1))))) {
-               msg = createException(SQL, "sql.count", SQLSTATE(HY005) "Cannot 
access column descriptor");
-               goto bailout;
+       if (isaBatType(getArgType(mb, pci, 1))) {
+               if (!(b = BBPquickdesc(*getArgReference_bat(stk, pci, 1)))) {
+                       msg = createException(SQL, "sql.count", SQLSTATE(HY005) 
"Cannot access column descriptor");
+                       goto bailout;
+               }
+               if (ignore_nils && !b->tnonil) {
+                       if (!(b = BATdescriptor(*getArgReference_bat(stk, pci, 
1)))) {
+                               msg = createException(SQL, "sql.count", 
SQLSTATE(HY005) "Cannot access column descriptor");
+                               goto bailout;
+                       }
+                       heap_loaded = true;
+               }
        }
        if (b && !(r = COLnew(b->hseqbase, TYPE_lng, BATcount(b), TRANSIENT))) {
                msg = createException(SQL, "sql.count", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
@@ -1326,7 +1343,9 @@ SQLcount(Client cntxt, MalBlkPtr mb, Mal
        }
 
 bailout:
-       unfix_inputs(5, b, p, o, s, e);
+       if (b && heap_loaded)
+               BBPunfix(b->batCacheid);
+       unfix_inputs(4, p, o, s, e);
        finalize_output(res, r, msg);
        return msg;
 }
diff --git a/sql/backends/monet5/sql_statement.c 
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -530,7 +530,7 @@ stmt_tid(backend *be, sql_table *t, int 
        q = pushStr(mb, q, t->base.name);
        if (q == NULL)
                return NULL;
-       if (t && (!isRemote(t) && !isMergeTable(t)) && partition) {
+       if (t && isTable(t) && partition) {
                sql_trans *tr = be->mvc->session->tr;
                sqlstore *store = tr->store;
                BUN rows = (BUN) store->storage_api.count_col(tr, 
ol_first_node(t->columns)->data, QUICK);
@@ -599,7 +599,7 @@ stmt_bat(backend *be, sql_column *c, int
                sql_trans *tr = be->mvc->session->tr;
                sqlstore *store = tr->store;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to