Changeset: 27394319198b for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=27394319198b
Modified Files:
        monetdb5/optimizer/opt_iot.c
        sql/backends/monet5/iot/basket.c
        sql/backends/monet5/sql_optimizer.c
Branch: iot
Log Message:

Update a stream table.


diffs (208 lines):

diff --git a/monetdb5/optimizer/opt_iot.c b/monetdb5/optimizer/opt_iot.c
--- a/monetdb5/optimizer/opt_iot.c
+++ b/monetdb5/optimizer/opt_iot.c
@@ -40,6 +40,8 @@
                fnd= 1; break;\
        }
 
+#undef OPTDEBUGiot
+#define OPTDEBUGiot
 int
 OPTiotImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
@@ -74,7 +76,7 @@ OPTiotImplementation(Client cntxt, MalBl
        OPTDEBUGiot {
                mnstr_printf(cntxt->fdout, "#iot optimizer started\n");
                printFunction(cntxt->fdout, mb, stk, LIST_MAL_DEBUG);
-       } else
+       }// else
                (void) stk;
 
        alias = (int *) GDKzalloc(mb->vtop * 2 * sizeof(int));
diff --git a/sql/backends/monet5/iot/basket.c b/sql/backends/monet5/iot/basket.c
--- a/sql/backends/monet5/iot/basket.c
+++ b/sql/backends/monet5/iot/basket.c
@@ -379,42 +379,52 @@ BSKTdump(void *ret)
 str
 BSKTappend(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
-    str sch = *getArgReference_str(stk, pci, 2);
-    str tbl = *getArgReference_str(stk, pci, 3);
-    str col = *getArgReference_str(stk, pci, 4);
-    void *val = (void*) getArgReference(stk, pci, 5);
-    int idx;
-       BAT *b;
-       mvc *m = NULL;
-       str msg = MAL_SUCCEED;
-       sql_schema *s = NULL;
-       sql_table *t = NULL;
-       sql_column *c = NULL;
+    int *res = getArgReference_int(stk, pci, 0);
+    mvc *m = NULL;
+    str msg;
+    str sname = *getArgReference_str(stk, pci, 2);
+    str tname = *getArgReference_str(stk, pci, 3);
+    str cname = *getArgReference_str(stk, pci, 4);
+    ptr ins = getArgReference(stk, pci, 5);
+    int tpe = getArgType(mb, pci, 5);
+    sql_schema *s;
+    sql_table *t;
+    sql_column *c;
+    BAT *bn=0, *b = 0;
 
-       idx= BSKTlocate(sch,tbl);
-       if (idx <= 0)
-               throw(SQL,"iot.bind","Stream table '%s.%s' not 
registered",sch,tbl);
+    *res = 0;
+    if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
+        return msg;
+    if ((msg = checkSQLContext(cntxt)) != NULL)
+        return msg;
+    if (tpe > GDKatomcnt)
+        tpe = TYPE_bat;
+    if (tpe == TYPE_bat && (ins = BATdescriptor(*(int *) ins)) == NULL)
+        throw(SQL, "basket.append", "Cannot access descriptor");
+    if (ATOMextern(tpe))
+        ins = *(ptr *) ins;
+    if ( tpe == TYPE_bat)
+        b =  (BAT*) ins;
 
-       msg = getSQLContext(cntxt, 0, &m, NULL);
-       if ( msg != MAL_SUCCEED)
-               throw(SQL, "basket.append", "Unknown SQL context");
-
-       s= mvc_bind_schema(m, sch);
-       if ( s)
-               t= mvc_bind_table(m, s, tbl);
-       else throw(SQL,"basket.append","Schema %s not accessible\n",sch);
+    s = mvc_bind_schema(m, sname);
+    if (s == NULL)
+        throw(SQL, "basket.append", "Schema missing");
+    t = mvc_bind_table(m, s, tname);
        if ( t)
-               c= mvc_bind_column(m, t, col);
-       else throw(SQL,"basket.append","Stream table %s.%s not 
accessible\n",sch,tbl);
-
-       if( c){
-               b = store_funcs.bind_col(m->session->tr,c,RD_UPD_VAL);
-               if( b){
-                       BUNappend(b, val, FALSE);
-                       BBPunfix(b->batCacheid);
+               c= mvc_bind_column(m, t, cname);
+       else throw(SQL,"basket.append","Stream table %s.%s not 
accessible\n",sname,tname);
+       if( c) {
+               bn = store_funcs.bind_col(m->session->tr,c,RD_UPD_VAL);
+               if( bn){
+                       if( tpe == TYPE_bat)
+                               BATappend(bn, b, TRUE);
+                       else BUNappend(bn, ins, TRUE);
+                       BBPunfix(bn->batCacheid);
                }
-       } else throw(SQL,"basket.append","Stream column %s.%s.%s not 
accessible\n",sch,tbl,col);
-       (void) mb;
+       } else throw(SQL,"basket.append","Stream column %s.%s.%s not 
accessible\n",sname,tname,cname);
+       if (tpe == TYPE_bat) {
+               BBPunfix(((BAT *) ins)->batCacheid);
+       }
        return MAL_SUCCEED;
 }
 
@@ -424,27 +434,6 @@ BSKTupdateInstruction(MalBlkPtr mb, str 
        (void) mb;
        (void) sch;
        (void) tbl;
-/*
-       int i, j, bskt;
-       InstrPtr p;
-       BAT *b;
-
-       bskt = BSKTlocate(sch,tbl);
-       if (bskt == 0)
-               return 0;
-       p = newInstruction(mb, ASSIGNsymbol);
-       getArg(p, 0) = newTmpVariable(mb, TYPE_any);
-       getModuleId(p) = basketRef;
-       getFunctionId(p) = putName("update", 6);
-       p = pushStr(mb, p, sch);
-       p = pushStr(mb, p, tbl);
-       for (i = 0; i < baskets[bskt].count; i++) {
-               b = BBPquickdesc(baskets[bskt].bats[i], FALSE);
-               j = newTmpVariable(mb, newBatType(TYPE_oid, b->ttype));
-               p = pushArgument(mb, p, j);
-       }
-       return p;
-*/
        return NULL;
 }
 
diff --git a/sql/backends/monet5/sql_optimizer.c 
b/sql/backends/monet5/sql_optimizer.c
--- a/sql/backends/monet5/sql_optimizer.c
+++ b/sql/backends/monet5/sql_optimizer.c
@@ -30,7 +30,7 @@
 #include "sql_gencode.h"
 #include "opt_pipes.h"
 
-static lng 
+static str 
 SQLgetSpace(mvc *m, MalBlkPtr mb)
 {
        sql_trans *tr = m->session->tr;
@@ -38,6 +38,7 @@ SQLgetSpace(mvc *m, MalBlkPtr mb)
        InstrPtr q;
        int last = 2;
        int mvcpc= 0;
+       str pipe= "default_pipe";
 
        for (i = 0; i < mb->stop; i++) {
                InstrPtr p = mb->stmt[i];
@@ -59,6 +60,7 @@ SQLgetSpace(mvc *m, MalBlkPtr mb)
                        c = mvc_bind_column(m, t, cname);
                        if (c && isStream(c->t->type)) {
                                setModuleId(p, basketRef);
+                               pipe= "iot_pipe";
                                continue;
                        }
                }
@@ -116,13 +118,16 @@ SQLgetSpace(mvc *m, MalBlkPtr mb)
                                                q= pushStr(mb,q, sname);
                                                q= pushStr(mb,q, tname);
                                                moveInstruction(mb, mb->stop - 
1, mvcpc+1);
+                                               pipe= "iot_pipe";
                                                last ++;
                                        }
                                }
                        }
                }
        }
-       return space;
+       if( space > (lng)(0.8 * MT_npages() * MT_pagesize())  && GDKnr_threads 
> 1)
+               pipe= "volcano_pipe";
+       return pipe;
 }
 
 str
@@ -143,20 +148,14 @@ addOptimizers(Client c, MalBlkPtr mb, ch
        InstrPtr q;
        backend *be;
        str msg;
-       lng space;
+       str alterpipe;
 
        be = (backend *) c->sqlcontext;
        assert(be && be->mvc);  /* SQL clients should always have their state 
set */
 
-       space = SQLgetSpace(be->mvc, mb);
-       if(space && (pipe == NULL || strcmp(pipe,"default_pipe")== 0)){
-               if( space > (lng)(0.8 * MT_npages() * MT_pagesize())  && 
GDKnr_threads > 1){
-                       pipe = "volcano_pipe";
-                       //mnstr_printf(GDKout, "#use volcano optimizer 
pipeline? "SZFMT"\n", space);
-               }else
-                       pipe = "default_pipe";
-       } else
-               pipe = pipe? pipe: "default_pipe";
+       alterpipe = SQLgetSpace(be->mvc, mb);
+       // global setting always prefail
+       pipe = strcmp(pipe,"default_pipe") ? pipe: alterpipe;
        msg = addOptimizerPipe(c, mb, pipe);
        if (msg)
                GDKfree(msg);   /* what to do with an error? */
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to