Changeset: cafeea3f90ec for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cafeea3f90ec
Modified Files:
sql/storage/bat/bat_table.c
Branch: Jul2015
Log Message:
improved column_find_row
diffs (62 lines):
diff --git a/sql/storage/bat/bat_table.c b/sql/storage/bat/bat_table.c
--- a/sql/storage/bat/bat_table.c
+++ b/sql/storage/bat/bat_table.c
@@ -141,7 +141,37 @@ full_destroy(sql_column *c, BAT *b)
bat_destroy(b);
}
-static oid column_find_row(sql_trans *tr, sql_column *c, const void *value,
...);
+static oid
+column_find_oid(sql_trans *tr, sql_column *c, const int *vid)
+{
+ BAT *b = NULL, *s = NULL;
+ oid rid = oid_nil;
+
+ b = full_column(tr, c);
+ if (!b)
+ return oid_nil;
+
+ if (store_funcs.count_del(tr, c->t))
+ s = store_funcs.bind_del(tr, c->t, RD_INS);
+
+ if (BAThash(b, 0) == GDK_SUCCEED) {
+ BATiter cni = bat_iterator(b);
+ BUN p;
+
+ HASHloop(cni, cni.b->T->hash, p, vid) {
+ oid pos = p;
+
+ if (!s || BUNfnd(s, &pos) == BUN_NONE) {
+ rid = p;
+ break;
+ }
+ }
+ }
+ if (s)
+ bat_destroy(s);
+ return rid;
+}
+
static oid
column_find_row(sql_trans *tr, sql_column *c, const void *value, ...)
{
@@ -150,14 +180,17 @@ column_find_row(sql_trans *tr, sql_colum
oid rid = oid_nil;
sql_column *n = NULL;
+ va_start(va, value);
+ if ((n = va_arg(va, sql_column *)) == NULL && c->type.type->localtype
==TYPE_int)
+ return column_find_oid(tr, c, value);
+
s = delta_cands(tr, c->t);
if (!s)
return oid_nil;
- va_start(va, value);
b = full_column(tr, c);
if (!b)
return oid_nil;
- if ((n = va_arg(va, sql_column *)) == NULL) {
+ if (!n) {
if (BAThash(b, 0) == GDK_SUCCEED) {
BATiter cni = bat_iterator(b);
BUN p;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list