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

Reply via email to