Changeset: 7417a64a1aaf for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7417a64a1aaf
Modified Files:
        sql/backends/monet5/vaults/gadget/gadget.c
Branch: data-vaults
Log Message:

The tid and bind is not done in the generic vault.


diffs (280 lines):

diff --git a/sql/backends/monet5/vaults/gadget/gadget.c 
b/sql/backends/monet5/vaults/gadget/gadget.c
--- a/sql/backends/monet5/vaults/gadget/gadget.c
+++ b/sql/backends/monet5/vaults/gadget/gadget.c
@@ -1904,8 +1904,8 @@ gadgetCheckTable(Client cntxt, MalBlkPtr
   sql_table *gadget_tbl, *tbl = NULL;
   sql_column *col;
   oid rid = oid_nil;
-  str tname = *getArgReference_str(stk, pci, 2);
-  int *res = getArgReference_int(stk, pci, 0);
+  str tname = *getArgReference_str(stk, pci, 3);
+  int *res = getArgReference_int(stk, pci, 1);
 
   if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != MAL_SUCCEED)
     return msg;
@@ -1938,12 +1938,12 @@ gadgetCheckTable(Client cntxt, MalBlkPtr
   if (sz == 0) {
     /*Lets load the table*/
     msg = gadgetLoadTableAll_(m, sch, gadget_tbl, tname);
-    *res = GADGET_TABLE_LOADED;
+    *res = VAULT_TABLE_LOADED;
   } else {
     if (tbl->access == TABLE_WRITABLE)
-      *res = GADGET_TABLE_ANALYZE;
+      *res = VAULT_TABLE_ANALYZE;
     else 
-      *res = GADGET_TABLE_DONE;
+      *res = VAULT_TABLE_DONE;
 
 #ifndef NDEBUG
     fprintf(stderr, "The table %s is already loaded and its status is 
%d!!!\n", tname, *res);
@@ -1964,11 +1964,23 @@ gadgetAnalyzeTable(Client cntxt, MalBlkP
   sql_table *gadget_tbl;
   sql_column *col;
   oid rid = oid_nil;
-  int status = *getArgReference_int(stk, pci, 2);
-  str tname = *getArgReference_str(stk, pci, 3);
-  int *res = getArgReference_int(stk, pci, 0);
+  int status, *res;
+  str tname = NULL;
 
-  if (status != GADGET_TABLE_ANALYZE) {
+  if (pci->argc == 5) {
+      status = *getArgReference_int(stk, pci, 3);
+      tname = *getArgReference_str(stk, pci, 4);
+      res = getArgReference_int(stk, pci, 1);
+  } else if (pci->argc == 4) {
+      status = *getArgReference_int(stk, pci, 2);
+      tname = *getArgReference_str(stk, pci, 3);
+      res = getArgReference_int(stk, pci, 0);
+  } else {
+      msg = createException(MAL, "gadget.analyze", "incorrect number of 
arguments.\n");
+      return msg;
+  }
+
+  if (status != VAULT_TABLE_ANALYZE) {
     *res = status;
     return msg;
   }
@@ -2020,220 +2032,11 @@ gadgetAnalyzeTable(Client cntxt, MalBlkP
   if (msg)
     return msg;
     
-  *res = GADGET_TABLE_DONE;
+  *res = VAULT_TABLE_DONE;
 
   return MAL_SUCCEED;
 }
 
-static BAT *
-mvc_bind(mvc *m, char *sname, char *tname, char *cname, int access)
-{
-  sql_trans *tr = m->session->tr;
-  BAT *b = NULL;
-  sql_schema *s = NULL;
-  sql_table *t = NULL;
-  sql_column *c = NULL;
-
-  s = mvc_bind_schema(m, sname);
-  if (s == NULL)
-    return NULL;
-  t = mvc_bind_table(m, s, tname);
-  if (t == NULL)
-    return NULL;
-  c = mvc_bind_column(m, t, cname);
-  if (c == NULL)
-    return NULL;
-
-  b = store_funcs.bind_col(tr, c, access);
-  return b;
-}
-
-/* str mvc_bind_wrap(int *bid, str *sname, str *tname, str *cname, int 
*access); */
-str
-mvc_gadget_bind_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
-{
-  int upd = (pci->argc == 8 || pci->argc == 10);
-  BAT *b = NULL, *bn;
-  bat *bid = getArgReference_bat(stk, pci, 0);
-  int coltype = getBatType(getArgType(mb, pci, 0));
-  mvc *m = NULL;
-  str msg;
-  int status = *getArgReference_int(stk, pci, 1 + upd);
-  str *sname = getArgReference_str(stk, pci, 3 + upd);
-  str *tname = getArgReference_str(stk, pci, 4 + upd);
-  str *cname = getArgReference_str(stk, pci, 5 + upd);
-  int *access = getArgReference_int(stk, pci, 6 + upd);
-
-  if (!*access && status == GADGET_TABLE_LOADED)
-    *access = RD_INS;
-
-  printf (" Level 0\n" );
-  if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
-    return msg;
-  if ((msg = checkSQLContext(cntxt)) != NULL)
-    return msg;
-  b = mvc_bind(m, *sname, *tname, *cname, *access);
-  if (b && b->ttype != coltype)
-    throw(SQL,"sql.bind","tail type mismatch");
-  if (b) {
-    printf ("argc %d upd %d", pci->argc, upd);
-    if (pci->argc == (9 + upd) && getArgType(mb, pci, 7 + upd) == TYPE_int) {
-      BUN cnt = BATcount(b), psz;
-      /* partitioned access */
-      int part_nr = *getArgReference_int(stk, pci, 7 + upd);
-      int nr_parts = *getArgReference_int(stk, pci, 8 + upd);
-      printf (" Level 1\n" );
-
-      if (*access == 0) {
-        psz = cnt ? (cnt / nr_parts) : 0;
-        bn = BATslice(b, part_nr * psz, (part_nr + 1 == nr_parts) ? cnt : 
((part_nr + 1) * psz));
-        BAThseqbase(bn, part_nr * psz);
-      } else {
-        /* BAT b holds the UPD_ID bat */
-        oid l, h;
-        BAT *c = mvc_bind(m, *sname, *tname, *cname, 0);
-        if (c == NULL)
-          throw(SQL,"sql.bind","Cannot access the update column");
-
-        cnt = BATcount(c);
-        psz = cnt ? (cnt / nr_parts) : 0;
-        l = part_nr * psz;
-        h = (part_nr + 1 == nr_parts) ? cnt : ((part_nr + 1) * psz);
-        h--;
-        bn = BATselect(b, NULL, &l, &h, 1, 1, 0);
-        BBPunfix(c->batCacheid);
-      }
-      BBPunfix(b->batCacheid);
-      b = bn;
-    } else if (upd) {
-      BAT *uv = mvc_bind(m, *sname, *tname, *cname, RD_UPD_VAL);
-      bat *uvl = getArgReference_bat(stk, pci, 1);
-      printf (" Level 2\n" );
-
-      if (uv == NULL)
-        throw(SQL,"sql.bind","Cannot access the update column");
-      BBPkeepref(*bid = b->batCacheid);
-      BBPkeepref(*uvl = uv->batCacheid);
-      return MAL_SUCCEED;
-    }
-    if (upd) {
-      bat *uvl = getArgReference_bat(stk, pci, 1);
-      printf (" Level 3\n" );
-
-      if (BATcount(b)) {
-        BAT *uv = mvc_bind(m, *sname, *tname, *cname, RD_UPD_VAL);
-        BAT *ui = mvc_bind(m, *sname, *tname, *cname, RD_UPD_ID);
-        BAT *id;
-        BAT *vl;
-        if (ui == NULL)
-          throw(SQL,"sql.bind","Cannot access the insert column");
-        if (uv == NULL)
-          throw(SQL,"sql.bind","Cannot access the update column");
-        id = BATproject(b, ui);
-        vl = BATproject(b, uv);
-        assert(BATcount(id) == BATcount(vl));
-        bat_destroy(ui);
-        bat_destroy(uv);
-        BBPkeepref(*bid = id->batCacheid);
-        BBPkeepref(*uvl = vl->batCacheid);
-      } else {
-        sql_schema *s = mvc_bind_schema(m, *sname);
-        sql_table *t = mvc_bind_table(m, s, *tname);
-        sql_column *c = mvc_bind_column(m, t, *cname);
-
-        *bid = e_bat(TYPE_oid);
-        *uvl = e_bat(c->type.type->localtype);
-      }
-      BBPunfix(b->batCacheid);
-    } else {
-      printf (" Level 4\n" );
-      BBPkeepref(*bid = b->batCacheid);
-    }
-    return MAL_SUCCEED;
-  }
-  if (*sname && strcmp(*sname, str_nil) != 0)
-    throw(SQL, "sql.bind", "unable to find %s.%s(%s)", *sname, *tname, *cname);
-  throw(SQL, "sql.bind", "unable to find %s(%s)", *tname, *cname);
-}
-
-/* str SQLtid(bat *result, mvc *m, str *sname, str *tname) */
-str
-gadgetTid(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
-{
-  bat *res = getArgReference_bat(stk, pci, 0);
-  mvc *m = NULL;
-  str msg;
-  sql_trans *tr;
-  str sname = *getArgReference_str(stk, pci, 3);
-  str tname = *getArgReference_str(stk, pci, 4);
-
-  sql_schema *s;
-  sql_table *t;
-  sql_column *c;
-  BAT *tids;
-  size_t nr, inr = 0;
-  oid sb = 0;
-
-  *res = bat_nil;
-  if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
-    return msg;
-  tr = m->session->tr;
-  if ((msg = checkSQLContext(cntxt)) != NULL)
-    return msg;
-  s = mvc_bind_schema(m, sname);
-  if (s == NULL)
-    throw(SQL, "sql.tid", "3F000!Schema missing");
-  t = mvc_bind_table(m, s, tname);
-  if (t == NULL)
-    throw(SQL, "sql.tid", "42S02!Table missing");
-  c = t->columns.set->h->data;
-
-  nr = store_funcs.count_col(tr, c, 1);
-
-  if (isTable(t) && t->access == TABLE_WRITABLE && (t->base.flag != TR_NEW /* 
alter */ ) &&
-      t->persistence == SQL_PERSIST && !t->commit_action)
-    inr = store_funcs.count_col(tr, c, 0);
-  nr -= inr;
-  if (pci->argc == 6) {        /* partitioned version */
-    size_t cnt = nr;
-    int part_nr = *getArgReference_int(stk, pci, 5);
-    int nr_parts = *getArgReference_int(stk, pci, 6);
-
-    nr /= nr_parts;
-    sb = (oid) (part_nr * nr);
-    if (nr_parts == (part_nr + 1)) {   /* last part gets the inserts */
-      nr = cnt - (part_nr * nr);       /* keep rest */
-      nr += inr;
-    }
-  } else {
-    nr += inr;
-  }
-
-  /* create void,void bat with length and oid's set */
-  tids = COLnew(sb, TYPE_void, 0, TRANSIENT);
-  if (tids == NULL)
-    throw(SQL, "sql.tid", MAL_MALLOC_FAIL);
-  BATsetcount(tids, (BUN) nr);
-  BATtseqbase(tids, sb);
-
-  if (store_funcs.count_del(tr, t)) {
-    BAT *d = store_funcs.bind_del(tr, t, RD_INS);
-    BAT *diff;
-    if( d == NULL)
-      throw(SQL,"sql.tid","Can not bind delete column");
-
-    diff = BATdiff(tids, d, NULL, NULL, 0, BUN_NONE);
-    BBPunfix(d->batCacheid);
-    BBPunfix(tids->batCacheid);
-    BAThseqbase(diff, sb);
-    tids = diff;
-  }
-
-  if (!(tids->batDirty&2)) BATsetaccess(tids, BAT_READ);
-  BBPkeepref(*res = tids->batCacheid);
-  return MAL_SUCCEED;
-}
-
 str
 gadgetPHkeyConvert(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) {
   lng *phkey = getArgReference_lng(stk, pci, 0);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to