Changeset: da1dfeb8b6f4 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=da1dfeb8b6f4
Modified Files:
        sql/backends/monet5/generator/Tests/generator03.stable.out
        sql/backends/monet5/generator/generator.c
Branch: default
Log Message:

Silence compilers


diffs (173 lines):

diff --git a/sql/backends/monet5/generator/Tests/generator03.stable.out 
b/sql/backends/monet5/generator/Tests/generator03.stable.out
--- a/sql/backends/monet5/generator/Tests/generator03.stable.out
+++ b/sql/backends/monet5/generator/Tests/generator03.stable.out
@@ -35,9 +35,10 @@ Ready.
 % single_value # name
 % sec_interval # type
 % 0 # length
-[ 10.000       ]
-#select * from generate_series(cast( '2008-03-01 00:00' as timestamp),
-#                              cast( '2008-03-04 12:00' as timestamp), 
+[ 36000.000    ]
+#select * from generate_series(
+#      timestamp '2008-03-01 00:00',
+#      timestamp '2008-03-04 12:00',
 #                                                        cast( '10' as 
interval hour));
 % . # table_name
 % value # name
diff --git a/sql/backends/monet5/generator/generator.c 
b/sql/backends/monet5/generator/generator.c
--- a/sql/backends/monet5/generator/generator.c
+++ b/sql/backends/monet5/generator/generator.c
@@ -18,7 +18,7 @@
  */
 
 /*
- * (c) Martin Kersten
+ * (c) Martin Kersten, Sjoerd Mullender
  * Series generating module for integer, decimal, real, double and timestamps.
  */
 
@@ -289,10 +289,11 @@ findLastAssign(MalBlkPtr mb, InstrPtr pc
 {
        InstrPtr q, p = NULL;
        int i;
+       str vaultRef = putName("vault",5);
 
        for (i = 1; i < mb->stop; i++) {
                q = getInstrPtr(mb, i);
-               if (q->argv[0] == target)
+               if (q->argv[0] == target && getModuleId(q) == vaultRef)
                        p = q;
                if (q == pci)
                        return p;
@@ -759,16 +760,15 @@ str VLTgenerator_leftfetchjoin(Client cn
 
 /* The operands of a join operation can either be defined on a generator */
 #define VLTjoin(TPE) \
-       { TPE f,l,s;\
-       TPE *v,w;\
+       { TPE f,l,s; TPE *v; BUN w;\
        f = *(TPE*) getArgReference(stk,p, 1);\
        l = *(TPE*) getArgReference(stk,p, 2);\
        s = *(TPE*) getArgReference(stk,p, 3);\
        for( ; cnt >0; cnt--,os++,o++){\
                v = (TPE*) Tloc(bl,BUNfirst(bl));\
-               w = floor((*v -f)/s);\
-               if ( *v >= f && *v < l && f + w * s == *v ){\
-                       *or++ = (oid) w;\
+               w = (BUN) floor((*v -f)/s);\
+               if ( *v >= f && *v < l && f + (TPE)(w * s) == *v ){\
+                       *or++ = w;\
                        *ol++ = *o;\
                        c++;\
                }\
@@ -776,34 +776,46 @@ str VLTgenerator_leftfetchjoin(Client cn
 
 str VLTgenerator_join(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
-       BAT *bl, *br, *bln = NULL, *brn= NULL;
+       BAT  *b, *bl = NULL, *br = NULL, *bln = NULL, *brn= NULL;
        BUN cnt,c =0;
        oid *o = 0, os= 0, *ol, *or;
-       int tpe,bid;
-       InstrPtr p = NULL;
+       int tpe;
+       InstrPtr p = NULL, q = NULL;
        str msg = MAL_SUCCEED;
 
        (void) cntxt;
        // we assume at most one of the arguments to refer to the generator
-       bl = BATdescriptor(bid = *(int*) getArgReference(stk,pci,2));
-       if( bl == NULL)
-               throw(MAL,"generator.join",RUNTIME_OBJECT_MISSING);
-       br = BATdescriptor(bid = *(int*) getArgReference(stk,pci,3));
-       if( br == NULL){
-               //BBPreleaseref(bl->batCacheid));
-               throw(MAL,"generator.join",RUNTIME_OBJECT_MISSING);
+       p = findLastAssign(mb,pci,pci->argv[2]);
+       if( p == NULL){
+               bl = BATdescriptor(*(int*) getArgReference(stk,pci,2));
+               if( bl == NULL)
+                       throw(MAL,"generator.join",RUNTIME_OBJECT_MISSING);
+       }
+       q = findLastAssign(mb,pci,pci->argv[3]);
+       if ( q == NULL){
+               br = BATdescriptor(*(int*) getArgReference(stk,pci,3));
+               if( br == NULL){
+                       BBPreleaseref(bl->batCacheid);
+                       throw(MAL,"generator.join",RUNTIME_OBJECT_MISSING);
+               }
        }
 
-       p = findLastAssign(mb,pci,pci->argv[3]);
-       assert(p);
+       // in case of both generators materialize the 'smallest' one first
+       // or implement more knowledge, postponed
+       assert(!( p && q));
+       assert(p || q);
 
-       cnt = BATcount(bl);
-       tpe = br->ttype;
-       if( bl->ttype == TYPE_void)
-               os = bl->tseqbase;
+       // switch roles to have a single target bat[:oid,:any] designated 
+       // by b and reference instruction p for the generator
+       b = q? br : bl;
+       p = q? q : p;
+       cnt = BATcount(b);
+       tpe = b->ttype;
+       if( b->ttype == TYPE_void)
+               os = b->tseqbase;
        else
-               o = (oid*) Tloc(bl,BUNfirst(bl));
-
+               o = (oid*) Tloc(b,BUNfirst(b));
+       
        bln = BATnew(TYPE_void,TYPE_oid, cnt);
        brn = BATnew(TYPE_void,TYPE_oid, cnt);
        if( bln == NULL || brn == NULL){
@@ -818,16 +830,15 @@ str VLTgenerator_join(Client cntxt, MalB
 
        /* The actual join code for generators be injected here */
        switch(tpe){
-       case TYPE_bte: //VLTjoin(bte); break;
-       { bte f,l,s;
-       bte *v,w;
+       case TYPE_bte: //VLTjoin(bte); break; 
+       { bte f,l,s; bte *v; BUN w;
        f = *(bte*) getArgReference(stk,p, 1);
        l = *(bte*) getArgReference(stk,p, 2);
        s = *(bte*) getArgReference(stk,p, 3);
        for( ; cnt >0; cnt--,os++,o++){
-               v = (bte*) Tloc(bl,BUNfirst(bl));
-               w = (int) ((*v -f)/s);
-               if ( *v >= f && *v < l && f + w * s == *v ){
+               v = (bte*) Tloc(b,BUNfirst(b));
+               w = (BUN) ((*v -f)/s);
+               if ( *v >= f && *v < l && f + (bte)( w * s) == *v ){
                        *or++ = (oid) w;
                        *ol++ = *o;
                        c++;
@@ -870,14 +881,20 @@ str VLTgenerator_join(Client cntxt, MalB
        bln->hseqbase = 0;
        bln->hkey = 1;
        BATderiveProps(bln,0);
-       BBPkeepref(*(int*)getArgReference(stk,pci,0)= bln->batCacheid);
        
        BATsetcount(brn,c);
        brn->hdense = 1;
        brn->hseqbase = 0;
        brn->hkey = 1;
        BATderiveProps(brn,0);
-       BBPkeepref(*(int*)getArgReference(stk,pci,1)= brn->batCacheid);
+       if( q){
+               BBPkeepref(*(int*)getArgReference(stk,pci,1)= brn->batCacheid);
+               BBPkeepref(*(int*)getArgReference(stk,pci,0)= bln->batCacheid);
+       } else {
+               // switch their role
+               BBPkeepref(*(int*)getArgReference(stk,pci,0)= brn->batCacheid);
+               BBPkeepref(*(int*)getArgReference(stk,pci,1)= bln->batCacheid);
+       }
        return msg;
 /*
 wrapup:
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to