Changeset: 19bd9e7b068d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/19bd9e7b068d
Modified Files:
monetdb5/optimizer/opt_dict.c
sql/backends/monet5/dict.c
Branch: dict
Log Message:
small fixes (ie don't assert but throw errors)
set seqbase
join over equal dict value bat (not sure about joins over 2 sides dictionaries
with different value bats yet)
diffs (110 lines):
diff --git a/monetdb5/optimizer/opt_dict.c b/monetdb5/optimizer/opt_dict.c
--- a/monetdb5/optimizer/opt_dict.c
+++ b/monetdb5/optimizer/opt_dict.c
@@ -133,6 +133,20 @@ OPTdictImplementation(Client cntxt, MalB
done = 1;
break;
+ } else if (j == 2 && p->argc > j+1 &&
getModuleId(p) == algebraRef && getFunctionId(p) == joinRef
+ && varisdict[getArg(p, j+1)] &&
vardictvalue[k] == vardictvalue[getArg(p, j+1)]) {
+ /* (r1, r2) = join(col1, col2, cand1,
cand2, ...) with
+ * col1 =
dict.decompress(o1,u1), col2 = dict.decompress(o2,u2)
+ * iff u1 == u2
+ * (r1, r2) =
join(o1, o2, cand1, cand2, ...)
+ * else go for decompress
*/
+ int l = getArg(p, j+1);
+ InstrPtr r = copyInstruction(p);
+ getArg(r, j+0) = varisdict[k];
+ getArg(r, j+1) = varisdict[l];
+ pushInstruction(mb,r);
+ done = 1;
+ break;
} else if ((isMapOp(p) || isMap2Op(p)) &&
allConstExcept(mb, p, j)) {
/* batcalc.-(1, col) with col =
dict.decompress(o,u)
* v1 = batcalc.-(1, u)
diff --git a/sql/backends/monet5/dict.c b/sql/backends/monet5/dict.c
--- a/sql/backends/monet5/dict.c
+++ b/sql/backends/monet5/dict.c
@@ -25,11 +25,14 @@ DICTcompress(Client cntxt, MalBlkPtr mb,
tr = be->mvc->session->tr;
sql_schema *s = find_sql_schema(tr, sname);
- assert(s);
+ if (!s)
+ throw(SQL, "sql.dict_compress", SQLSTATE(3F000) "schema '%s'
unknown", sname);
sql_table *t = find_sql_table(tr, s, tname);
- assert(t);
+ if (!t)
+ throw(SQL, "sql.dict_compress", SQLSTATE(3F000) "table '%s.%s'
unknown", sname, tname);
sql_column *c = find_sql_column(t, cname);
- assert(c);
+ if (!c)
+ throw(SQL, "sql.dict_compress", SQLSTATE(3F000) "column
'%s.%s.%s' unknown", sname, tname, cname);
sqlstore *store = tr->store;
BAT *b = store->storage_api.bind_col(tr, c, RDONLY);
@@ -61,11 +64,12 @@ DICTcompress(Client cntxt, MalBlkPtr mb,
bat_destroy(uv);
u = uu;
- BAT *o = COLnew(0, tt, BATcount(b), PERSISTENT);
+ BAT *o = COLnew(b->hseqbase, tt, BATcount(b), PERSISTENT);
if (!o || BAThash(u) != GDK_SUCCEED) {
bat_destroy(u);
throw(SQL, "sql.dict_compress", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
}
+
BUN p, q;
BATiter bi = bat_iterator(b);
BATiter ui = bat_iterator_nolock(u);
@@ -83,8 +87,10 @@ DICTcompress(Client cntxt, MalBlkPtr mb,
o->tnil = b->tnil;
o->tnonil = b->tnonil;
o->tkey = b->tkey;
- if (sql_trans_alter_storage(tr, c, "DICT") != LOG_OK ||
store->storage_api.col_dict(tr, c, o, u) != LOG_OK)
+ if (sql_trans_alter_storage(tr, c, "DICT") != LOG_OK ||
store->storage_api.col_dict(tr, c, o, u) != LOG_OK) {
+ bat_iterator_end(&bi);
throw(SQL, "sql.dict_compress", SQLSTATE(HY013)
"alter_storage failed");
+ }
} else if (tt == TYPE_sht) {
sht *op = (sht*)Tloc(o, 0);
BATloop(b, p, q) {
@@ -99,8 +105,10 @@ DICTcompress(Client cntxt, MalBlkPtr mb,
o->tnil = b->tnil;
o->tnonil = b->tnonil;
o->tkey = b->tkey;
- if (sql_trans_alter_storage(tr, c, "DICT") != LOG_OK ||
store->storage_api.col_dict(tr, c, o, u) != LOG_OK)
+ if (sql_trans_alter_storage(tr, c, "DICT") != LOG_OK ||
store->storage_api.col_dict(tr, c, o, u) != LOG_OK) {
+ bat_iterator_end(&bi);
throw(SQL, "sql.dict_compress", SQLSTATE(HY013)
"alter_storage failed");
+ }
} else {
printf("implement int cases \n");
}
@@ -131,12 +139,11 @@ DICTdecompress(Client cntxt, MalBlkPtr m
bat_destroy(u);
throw(SQL, "sql.dict_compress", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
}
- BAT *b = COLnew(0, u->ttype, BATcount(o), TRANSIENT);
+ BAT *b = COLnew(o->hseqbase, u->ttype, BATcount(o), TRANSIENT);
BUN p, q;
BATiter oi = bat_iterator(o);
BATiter ui = bat_iterator_nolock(u);
- //if (ATOMvarsized(u->ttype)) {
if (o->ttype == TYPE_bte) {
unsigned char *op = Tloc(o, 0);
BATloop(o, p, q) {
@@ -190,10 +197,10 @@ DICTconvert(Client cntxt, MalBlkPtr mb,
if (!o)
throw(SQL, "sql.dict_compress", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
- BAT *b = COLnew(0, rt, BATcount(o), TRANSIENT);
- BATiter oi = bat_iterator(o);
+ BAT *b = COLnew(o->hseqbase, rt, BATcount(o), TRANSIENT);
BUN p, q;
+ BATiter oi = bat_iterator(o);
if (rt == TYPE_bte) {
unsigned char *rp = Tloc(b, 0);
oid *op = Tloc(o, 0);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list