Changeset: 014a72ce77ac for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/014a72ce77ac
Modified Files:
        gdk/gdk_strimps.c
        monetdb5/modules/mal/strimps.c
        sql/backends/monet5/sql_strimps.c
Branch: Jan2022
Log Message:

Missing bat unfixes and other small fixes on the strimps code


diffs (178 lines):

diff --git a/gdk/gdk_strimps.c b/gdk/gdk_strimps.c
--- a/gdk/gdk_strimps.c
+++ b/gdk/gdk_strimps.c
@@ -707,7 +707,7 @@ STRMPcreate(BAT *b, BAT *s)
 
        if (pb->tstrimps == NULL) {
                MT_lock_set(&pb->batIdxLock);
-                if (pb->tstrimps == NULL) {
+               if (pb->tstrimps == NULL) {
                        Strimps *r;
                        BATiter bi;
                        BUN i, ncand;
@@ -716,10 +716,10 @@ STRMPcreate(BAT *b, BAT *s)
                        str cs;
                        uint64_t *dh;
 
-                        if ((r = STRMPcreateStrimpHeap(pb, s)) == NULL) {
-                                MT_lock_unset(&b->batIdxLock);
+                       if ((r = STRMPcreateStrimpHeap(pb, s)) == NULL) {
+                               MT_lock_unset(&b->batIdxLock);
                                return GDK_FAIL;
-                        }
+                       }
                        dh = (uint64_t *)r->bitstrings_base;
 
                        /* Compute bitstrings */
@@ -739,10 +739,10 @@ STRMPcreate(BAT *b, BAT *s)
                        pb->tstrimps = r;
                        pb->batDirtydesc = true;
                        persistStrimp(pb);
-                }
-                MT_lock_unset(&pb->batIdxLock);
-        }
-        TRC_DEBUG(ACCELERATOR, "strimp creation took " LLFMT " usec\n", 
GDKusec()-t0);
+               }
+               MT_lock_unset(&pb->batIdxLock);
+       }
+       TRC_DEBUG(ACCELERATOR, "strimp creation took " LLFMT " usec\n", 
GDKusec()-t0);
        return GDK_SUCCEED;
 }
 
diff --git a/monetdb5/modules/mal/strimps.c b/monetdb5/modules/mal/strimps.c
--- a/monetdb5/modules/mal/strimps.c
+++ b/monetdb5/modules/mal/strimps.c
@@ -80,7 +80,9 @@ static str
 PATstrimpCreate(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        bat bid, sid;
-       BAT *b, *s;
+       BAT *b, *s = NULL;
+       gdk_return res;
+
        (void)cntxt;
        (void)mb;
 
@@ -89,11 +91,17 @@ PATstrimpCreate(Client cntxt, MalBlkPtr 
                throw(MAL, "strimps.strimpCreate", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
 
        sid = *getArgReference_bat(stk, pci, 2);
-       if ((s = BATdescriptor(sid)) == NULL)
+       if (sid && !is_bat_nil(sid) && (s = BATdescriptor(sid)) == NULL) {
+               BBPunfix(b->batCacheid);
                throw(MAL, "strimps.strimpCreate", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
+       }
 
-       if(STRMPcreate(b, s) != GDK_SUCCEED)
-               throw(MAL, "strimps.strimpCreate", SQLSTATE(HY002) 
OPERATION_FAILED);
+       res = STRMPcreate(b, s);
+       BBPunfix(b->batCacheid);
+       if (s)
+               BBPunfix(s->batCacheid);
+       if (res != GDK_SUCCEED)
+               throw(MAL, "strimps.strimpCreate", GDK_EXCEPTION);
 
        // *getArgReference_lng(stk, pci, 0) = 0;
        return MAL_SUCCEED;
@@ -112,7 +120,7 @@ static str
 PATstrimpFilterSelect(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        bat bid, sid;
-       BAT *b, *s, *ob;
+       BAT *b, *s = NULL, *ob;
        str pat;
 
        (void)cntxt;
@@ -123,19 +131,27 @@ PATstrimpFilterSelect(Client cntxt, MalB
                throw(MAL, "strimps.strimpfilter", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
 
        sid = *getArgReference_bat(stk, pci, 2);
-       if ((s = BATdescriptor(sid)) == NULL)
+       if (sid && !is_bat_nil(sid) && (s = BATdescriptor(sid)) == NULL) {
+               BBPunfix(b->batCacheid);
                throw(MAL, "strimps.strimpfilter", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
+       }
+
+       assert(!s || s->ttype == TYPE_void);
 
-       assert(s->ttype == TYPE_void);
-
-       if(STRMPcreate(b, s) != GDK_SUCCEED)
-               throw(MAL, "strimps.strimpfilter", SQLSTATE(HY002) "strimp 
creation failed");
+       if (STRMPcreate(b, s) != GDK_SUCCEED) {
+               BBPunfix(b->batCacheid);
+               if (s)
+                       BBPunfix(s->batCacheid);
+               throw(MAL, "strimps.strimpfilter", GDK_EXCEPTION);
+       }
 
        pat = *getArgReference_str(stk, pci, 3);
-       if ((ob = STRMPfilter(b, s, pat)) == NULL) {
-               BBPunfix(b->batCacheid);
-               throw(MAL, "strimps.strimpfilter", SQLSTATE(HY002) "filtering 
failed");
-       }
+       ob = STRMPfilter(b, s, pat);
+       BBPunfix(b->batCacheid);
+       if (s)
+               BBPunfix(s->batCacheid);
+       if (ob == NULL)
+               throw(MAL, "strimps.strimpfilter", GDK_EXCEPTION);
 
        *getArgReference_bat(stk, pci, 0) = ob->batCacheid;
        BBPkeepref(ob->batCacheid);
diff --git a/sql/backends/monet5/sql_strimps.c 
b/sql/backends/monet5/sql_strimps.c
--- a/sql/backends/monet5/sql_strimps.c
+++ b/sql/backends/monet5/sql_strimps.c
@@ -27,14 +27,24 @@ sql_load_bat(Client cntxt, MalBlkPtr mb,
        tbl = *getArgReference_str(stk, pci, 2);
        col = *getArgReference_str(stk, pci, 3);
 
+       if (strNil(sch))
+               throw(SQL, "sql.createstrimps", SQLSTATE(42000) "Schema name 
cannot be NULL");
+       if (strNil(tbl))
+               throw(SQL, "sql.createstrimps", SQLSTATE(42000) "Table name 
cannot be NULL");
+       if (strNil(col))
+               throw(SQL, "sql.createstrimps", SQLSTATE(42000) "Column name 
cannot be NULL");
+
        if (!(s = mvc_bind_schema(m, sch)))
                throw(SQL, "sql.createstrimps", SQLSTATE(3FOOO) "Unknown schema 
%s", sch);
 
        if (!mvc_schema_privs(m, s))
                throw(SQL, "sql.createstrimps", SQLSTATE(42000) "Access denied 
for %s to schema '%s'",
                          get_string_global_var(m, "current_user"), 
s->base.name);
-       if (!(t = mvc_bind_table(m, s, tbl)) || !isTable(t))
+       if (!(t = mvc_bind_table(m, s, tbl)))
                throw(SQL, "sql.createstrimps", SQLSTATE(42S02) "Unknown table 
%s.%s", sch, tbl);
+       if (!isTable(t))
+               throw(SQL, "sql.createstrimps", SQLSTATE(42000) "%s '%s' is not 
persistent",
+                         TABLE_TYPE_DESCRIPTION(t->type, t->properties), 
t->base.name);
        if (!(c = mvc_bind_column(m, t, col)))
                throw(SQL, "sql.createstrimps", SQLSTATE(38000) "Unknown column 
%s.%s.%s", sch, tbl, col);
 
@@ -51,16 +61,22 @@ str
 sql_createstrimps(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        BAT *b, *s;
+       gdk_return res;
 
        if (sql_load_bat(cntxt, mb, stk, pci, &b) != MAL_SUCCEED)
                throw(SQL, "sql.createstrimps", SQLSTATE(HY002) 
OPERATION_FAILED);
 
-       s = BATdense(0, 0, b->batCount);
+       if (!(s = BATdense(0, 0, b->batCount))) {
+               BBPunfix(b->batCacheid);
+               throw(SQL, "sql.createstrimps", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+       }
 
-       if (STRMPcreate(b, s) != GDK_SUCCEED)
-               throw(SQL, "sql.createstrimps", SQLSTATE(HY002) 
OPERATION_FAILED);
+       res = STRMPcreate(b, s);
+       BBPunfix(b->batCacheid);
+       BBPunfix(s->batCacheid);
+       if (res != GDK_SUCCEED)
+               throw(SQL, "sql.createstrimps", GDK_EXCEPTION);
 
-       BBPunfix(b->batCacheid);
        return MAL_SUCCEED;
 }
 
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to