Changeset: 13b37e298c46 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=13b37e298c46 Modified Files: sql/backends/monet5/generator/generator.c Branch: bamloader Log Message:
Merge with default diffs (89 lines): 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 @@ -30,6 +30,8 @@ #include "math.h" +#define IDENTITY(x) (x) + /* * The noop simply means that we keep the properties for the generator object. */ @@ -986,10 +988,10 @@ str VLTgenerator_join(Client cntxt, MalB } /* The operands of a join operation can either be defined on a generator */ -#define VLTrangejoin(TPE, ABS) \ +#define VLTrangejoin(TPE, ABS, FLOOR) \ { TPE f,f1,l,s; TPE *vlow,*vhgh; BUN w;\ - f = *getArgReference_bte(stk,p, 1);\ - l = *getArgReference_bte(stk,p, 2);\ + f = *getArgReference_##TPE(stk,p, 1);\ + l = *getArgReference_##TPE(stk,p, 2);\ if ( p->argc == 3) \ s = f<l? (TPE) 1: (TPE)-1;\ else s = * getArgReference_##TPE(stk, p, 3); \ @@ -999,9 +1001,9 @@ str VLTgenerator_join(Client cntxt, MalB vlow = (TPE*) Tloc(blow,BUNfirst(blow));\ vhgh = (TPE*) Tloc(bhgh,BUNfirst(bhgh));\ for( ; cnt >0; cnt--, done++, o++,vlow++,vhgh++){\ - f1 = f + floor(ABS(*vlow-f)/ABS(s)) * s;\ + f1 = f + FLOOR(ABS(*vlow-f)/ABS(s)) * s;\ if ( f1 < *vlow ) f1+= s;\ - w = (BUN) floor(ABS(f1-f)/ABS(s));\ + w = (BUN) FLOOR(ABS(f1-f)/ABS(s));\ for( ; (f1 > *vlow || (li && f1 == *vlow)) && (f1 < *vhgh || (ri && f1 == *vhgh)); f1 += s, w++){\ if(c == limit)\ VLTrangeExpand();\ @@ -1058,43 +1060,15 @@ str VLTgenerator_rangejoin(Client cntxt, /* The actual join code for generators be injected here */ switch(tpe){ - case TYPE_bte: VLTrangejoin(bte,abs); break; - case TYPE_sht: VLTrangejoin(sht,abs); break; - case TYPE_int: VLTrangejoin(int,abs); break; - case TYPE_lng: //VLTrangejoin(lng,llabs); break; - { lng f,f1,l,s; lng *vlow,*vhgh; BUN w; - f = *getArgReference_lng(stk,p, 1); - l = *getArgReference_lng(stk,p, 2); - if ( p->argc == 3) - s = f<l? (lng) 1: (lng)-1; - else s = * getArgReference_sht(stk, p, 3); - incr = s > 0; - - if ( s == 0 || (f> l && s>0) || (f<l && s < 0)) - throw(MAL,"generator.rangejoin","Illegal range"); - - vlow = (lng*) Tloc(blow,BUNfirst(blow)); - vhgh = (lng*) Tloc(bhgh,BUNfirst(bhgh)); - for( ; cnt >0; done++,cnt--, o++,vlow++,vhgh++){ - f1 = f + floor(abs(*vlow-f)/abs(s)) * s; - if ( f1 < *vlow ) f1+= s; - w = (BUN) floor(abs(f1-f)/abs(s)); - for( ; (f1 > *vlow || (li && f1 == *vlow)) && (f1 < *vhgh || (ri && f1 == *vhgh)); f1 += s, w++){ - if(c == limit){ - limit += 0; - VLTrangeExpand(); - } - *ol++ = (oid) w; - *or++ = o; - c++; - } - } } - break; + case TYPE_bte: VLTrangejoin(bte,abs,IDENTITY); break; + case TYPE_sht: VLTrangejoin(sht,abs,IDENTITY); break; + case TYPE_int: VLTrangejoin(int,abs,IDENTITY); break; + case TYPE_lng: VLTrangejoin(lng,llabs,IDENTITY); break; #ifdef HAVE_HGE - case TYPE_hge: VLTrangejoin(hge,HGE_ABS); break; + case TYPE_hge: VLTrangejoin(hge,HGE_ABS,IDENTITY); break; #endif - case TYPE_flt: VLTrangejoin(flt,fabsf); break; - case TYPE_dbl: VLTrangejoin(dbl,fabs); break; + case TYPE_flt: VLTrangejoin(flt,fabsf,floorf); break; + case TYPE_dbl: VLTrangejoin(dbl,fabs,floor); break; default: if( tpe == TYPE_timestamp){ // it is easier to produce the timestamp series _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list