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