Changeset: 2fc31b3262ba for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2fc31b3262ba
Modified Files:
        .hgtags
        MonetDB.spec
        NT/installer32/MonetDB-ODBC-Installer.vdproj
        NT/installer32/MonetDB5-Geom-Module.vdproj
        NT/installer32/MonetDB5-SQL-Installer.vdproj
        NT/installer64/MonetDB-ODBC-Installer.vdproj
        NT/installer64/MonetDB5-Geom-Module.vdproj
        NT/installer64/MonetDB5-SQL-Installer.vdproj
        NT/monetdb_config.h.in
        NT/rules.msc
        clients/mapilib/mapi.rc
        clients/odbc/driver/driver.rc
        clients/odbc/winsetup/setup.rc
        clients/python2/setup.py
        clients/python3/setup.py
        configure.ag
        debian/changelog
        debian/control
        gdk/libbat.rc
        libversions
        monetdb5/tools/libmonetdb5.rc
        sql/backends/monet5/generator/generator.c
        sql/backends/monet5/generator/generator.h
        sql/server/sql_parser.y
        vertoo.data
Branch: default
Log Message:

Merger


diffs (truncated from 612 to 300 lines):

diff --git a/.hgtags b/.hgtags
--- a/.hgtags
+++ b/.hgtags
@@ -564,3 +564,6 @@ fa6872e2a8cf8bb3b4fb25a3b356946316f52a6b
 242fe4b4960f54c339f7a6fb79aedd8f3b5e217a Jan2014_SP1_release
 c91c4d792dee1074ce6f489e94ce4bfc480edfb3 Jan2014_15
 13e1b24f442791f5ab790fa77453d3bd4e88a9c8 Jan2014_SP2_release
+c3051f066a9eea814487dfb0b7cf7070ae16cd21 Jan2014_17
+13e1b24f442791f5ab790fa77453d3bd4e88a9c8 Jan2014_SP2_release
+389f5f0d4c43ab689e31c28e01b43c8b7ba8de9c Jan2014_SP2_release
diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -800,6 +800,10 @@ mv $RPM_BUILD_ROOT%{_datadir}/doc/MonetD
 rm -fr $RPM_BUILD_ROOT
 
 %changelog
+* Wed May 14 2014 Sjoerd Mullender <sjo...@acm.org> - 11.17.17-20140514
+- Rebuilt.
+- BZ#3482: Crossproduct error
+
 * Thu May 08 2014 Sjoerd Mullender <sjo...@acm.org> - 11.17.15-20140508
 - Rebuilt.
 - BZ#3424: numeric values at the front of strings determines whether
diff --git a/debian/changelog b/debian/changelog
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,16 @@
+monetdb (11.17.17-20140514) unstable; urgency=low
+
+  * Rebuilt.
+
+ -- Sjoerd Mullender <sjo...@acm.org>  Wed, 14 May 2014 09:55:30 +0200
+
+monetdb (11.17.17-20140514) unstable; urgency=low
+
+  * Rebuilt.
+  * BZ#3482: Crossproduct error
+
+ -- Sjoerd Mullender <sjo...@acm.org>  Wed, 14 May 2014 09:55:28 +0200
+
 monetdb (11.17.15-20140508) unstable; urgency=low
 
   * Rebuilt.
diff --git a/debian/control b/debian/control
--- a/debian/control
+++ b/debian/control
@@ -9,8 +9,9 @@ Vcs-Hg: http://dev.monetdb.org/hg/MonetD
 # http://www.debian.org/doc/debian-policy/ch-relationships.html
 Build-Depends: debhelper (>= 5), autotools-dev, bison, flex, libbz2-dev,
  libcurl4-gnutls-dev, libgeos-dev, libgsl0-dev, libpcre3-dev,
- libreadline-gplv2-dev|libreadline-dev, libssl-dev, libxml2-dev, perl,
- python, ruby, rubygems, unixodbc-dev, uuid-dev, zlib1g-dev, python3
+ libreadline-gplv2-dev | libreadline-dev, libssl-dev, libxml2-dev, perl,
+ ruby, rubygems | libyaml-0-2, unixodbc-dev, uuid-dev, zlib1g-dev,
+ python, python3
 # Build-Depends: libraptor1-dev
 Standards-Version: 3.8.0
 X-Python-Version: >= 2.6
diff --git a/libversions b/libversions
--- a/libversions
+++ b/libversions
@@ -42,7 +42,7 @@ GDK_VERSION=10:7:0
 MAPI_VERSION=6:5:0
 
 # version of the MONETDB5 library (subdirectory monetdb5, not including extras)
-MONETDB5_VERSION=16:7:0
+MONETDB5_VERSION=16:8:0
 
 # version of the STREAM library (subdirectory common/stream)
-STREAM_VERSION=5:3:0
+STREAM_VERSION=5:4:0
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
@@ -150,92 +150,120 @@ VLTgenerator_noop(Client cntxt, MalBlkPt
        return MAL_SUCCEED;
 }
 
-/* 
+/*
  * The base line consists of materializing the generator iterator value
  */
-#define VLTmaterialize(TPE) {\
-                       TPE *v,f,l,s;\
-                       f = *(TPE*) getArgReference(stk,pci, 1);\
-                       l = *(TPE*) getArgReference(stk,pci, 2);\
-                       s = pci->argc == 3 ? 1:  *(TPE*) 
getArgReference(stk,pci, 3);\
-                       bn = BATnew(TYPE_void, TYPE_##TPE, (l>f ? 
(l-f+abs(s))/abs(s):(f-l+abs(s))/abs(s)));\
-                       if( bn == NULL)\
-                               throw(MAL,"generator.table",MAL_MALLOC_FAIL);\
-                       v = (TPE*) Tloc(bn,BUNfirst(bn));\
-                       if( f < l && s > 0)\
-                               for(; f<l; f+= s){\
-                                       *v++ = f;\
-                                       c++;\
-                               }\
-                       else\
-                       if( f > l && s < 0)\
-                               for(; f>l; f+= s){\
-                                       *v++ = f;\
-                                       c++;\
-                               }\
-                       else\
-                               throw(MAL,"generator.table","illegal generator 
arguments");\
-               }
+#define VLTmaterialize(TPE)                                            \
+       do {                                                            \
+               TPE *v, f, l, s;                                        \
+               f = *(TPE*) getArgReference(stk, pci, 1);               \
+               l = *(TPE*) getArgReference(stk, pci, 2);               \
+               s = pci->argc == 3 ? 1 : *(TPE*) getArgReference(stk, pci, 3); \
+               if (s == 0 || (s > 0 && f > l) || (s < 0 && f < l))     \
+                       throw(MAL, "generator.table",                   \
+                             "illegal generator arguments");           \
+               n = (lng) ((l - f) / s);                                \
+               assert(n >= 0);                                         \
+               if (n * s + f != l)                                     \
+                       n++;                                            \
+               bn = BATnew(TYPE_void, TYPE_##TPE, (BUN) n);            \
+               if (bn == NULL)                                         \
+                       throw(MAL, "generator.table", MAL_MALLOC_FAIL); \
+               v = (TPE*) Tloc(bn, BUNfirst(bn));                      \
+               for (c = 0; c < n; c++)                                 \
+                       *v++ = (TPE) (f + c * s);                       \
+               bn->tsorted = s > 0 || n <= 1;                          \
+               bn->trevsorted = s < 0 || n <= 1;                       \
+       } while (0)
 
 str
 VLTgenerator_table(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
-       BUN c= 0;
-       BAT *bn= 0;
-       str msg= MAL_SUCCEED;
+       lng c, n;
+       BAT *bn;
+       str msg;
        int tpe;
        (void) cntxt;
 
-       if ( (msg= VLTgenerator_noop(cntxt,mb,stk,pci)) )
+       if ((msg = VLTgenerator_noop(cntxt, mb, stk, pci)) != MAL_SUCCEED)
                return msg;
-       if( VLTgenerator_optimizer(cntxt,mb) == 0 )
+       if (VLTgenerator_optimizer(cntxt, mb) == 0)
                return MAL_SUCCEED;
 
-       switch( tpe = getArgType(mb,pci,1)){
-       case TYPE_bte: VLTmaterialize(bte); break;
-       case TYPE_sht: VLTmaterialize(sht); break;
-       case TYPE_int: VLTmaterialize(int); break;
-       case TYPE_lng: VLTmaterialize(lng); break;
-       case TYPE_flt: VLTmaterialize(flt); break;
-       case TYPE_dbl: VLTmaterialize(dbl); break;
+       tpe = getArgType(mb, pci, 1);
+       switch (tpe) {
+       case TYPE_bte:
+               VLTmaterialize(bte);
+               break;
+       case TYPE_sht:
+               VLTmaterialize(sht);
+               break;
+       case TYPE_int:
+               VLTmaterialize(int);
+               break;
+       case TYPE_wrd:
+               VLTmaterialize(wrd);
+               break;
+       case TYPE_lng:
+               VLTmaterialize(lng);
+               break;
+       case TYPE_flt:
+               VLTmaterialize(flt);
+               break;
+       case TYPE_dbl:
+               VLTmaterialize(dbl);
+               break;
        default:
-               if ( tpe == TYPE_timestamp){
+               if (tpe == TYPE_timestamp) {
                        timestamp *v,f,l;
                        lng s;
-                       f = *(timestamp*) getArgReference(stk,pci, 1);
-                       l = *(timestamp*) getArgReference(stk,pci, 2);
-                       s =  *(lng *) getArgReference(stk,pci, 3) ;
-                       bn = BATnew(TYPE_void, tpe, (l.days > f.days ? ((l.days 
-f.days)*24*60*60 +abs(s))/abs(s):((f.days -l.days)*24*60*60 +abs(s))/abs(s)));
-                       if( bn == NULL)
-                               throw(MAL,"generator.table",MAL_MALLOC_FAIL);
-                       v = (timestamp*) Tloc(bn,BUNfirst(bn));
-                       if( (f.days < l.days || (f.days = l.days && f.msecs 
<l.msecs)) && s > 0){
-                               for(; f.days<l.days || (f.days == l.days && 
f.msecs <l.msecs); ){
-                                       *v++ = f;
-                                       if( (msg=MTIMEtimestamp_add(&f, &f, 
&s)) != MAL_SUCCEED)
-                                               return msg;
-                                       c++;
+                       ValRecord ret;
+                       if (VARcalccmp(&ret, &stk->stk[pci->argv[1]],
+                                      &stk->stk[pci->argv[2]]) == GDK_FAIL)
+                               throw(MAL, "generator.table",
+                                     "illegal generator arguments");
+                       f = *(timestamp *) getArgReference(stk, pci, 1);
+                       l = *(timestamp *) getArgReference(stk, pci, 2);
+                       s = *(lng *) getArgReference(stk, pci, 3);
+                       if (s == 0 ||
+                           (s > 0 && ret.val.btval > 0) ||
+                           (s < 0 && ret.val.btval < 0))
+                               throw(MAL, "generator.table",
+                                     "illegal generator arguments");
+                       /* casting one value to lng causes the whole
+                        * computation to be done as lng, reducing the
+                        * risk of overflow */
+                       n = (BUN) ((((lng) l.days - f.days) * 24*60*60*1000 + 
l.msecs - f.msecs) / s);
+                       bn = BATnew(TYPE_void, tpe, n + 1);
+                       if (bn == NULL)
+                               throw(MAL, "generator.table", MAL_MALLOC_FAIL);
+                       v = (timestamp *) Tloc(bn, BUNfirst(bn));
+                       for (c = 0; c < n; c++) {
+                               *v++ = f;
+                               msg = MTIMEtimestamp_add(&f, &f, &s);
+                               if (msg != MAL_SUCCEED) {
+                                       BBPreclaim(bn);
+                                       return msg;
                                }
-                       } else
-                       if( f.days > l.days && s < 0)
-                               for(; f.days>l.days || (f.days == l.days && 
f.msecs > l.msecs); ){
-                                       *v++ = f;
-                                       if( (msg = MTIMEtimestamp_add(&f, &f, 
&s)) != MAL_SUCCEED)
-                                               return msg;
-                                       c++;
-                               }
-                       else
-                               throw(MAL,"generator.table","illegal generator 
arguments");
+                       }
+                       if (f.days != l.days || f.msecs != l.msecs) {
+                               *v++ = f;
+                               n++;
+                       }
+                       bn->tsorted = s > 0 || n <= 1;
+                       bn->trevsorted = s < 0 || n <= 1;
+               } else {
+                       throw(MAL, "generator.table", "unsupported type");
                }
+               break;
        }
-       if( bn){
-               BATsetcount(bn,c);
-        bn->hdense = 1;
-        bn->hseqbase = 0;
-        bn->hkey = 1;
-               BATderiveProps(bn,0);
-               BBPkeepref(*(int*)getArgReference(stk,pci,0)= bn->batCacheid);
-       }
+       BATsetcount(bn, c);
+       BATseqbase(bn, 0);
+       bn->tkey = 1;
+       bn->T->nil = 0;
+       bn->T->nonil = 1;
+       *(bat*) getArgReference(stk, pci, 0) = bn->batCacheid;
+       BBPkeepref(bn->batCacheid);
        return MAL_SUCCEED;
 }
 
@@ -251,139 +279,209 @@ findLastAssign(MalBlkPtr mb, InstrPtr pc
        InstrPtr q, p = NULL;
        int i;
 
-       for( i= 1; i< mb->stop; i++){
-               q= getInstrPtr(mb,i);
-               if( q->argv[0] == target)
+       for (i = 1; i < mb->stop; i++) {
+               q = getInstrPtr(mb, i);
+               if (q->argv[0] == target)
                        p = q;
-               if( q == pci)
+               if (q == pci)
                        return p;
        }
        return p;
 }
 
-#define VLTsubselect(TPE) {\
-       TPE f,l,s, low,hgh;\
-       oid *v;\
-       f = *(TPE*) getArgReference(stk,p, 1);\
-       l = *(TPE*) getArgReference(stk,p, 2);\
-       s = pci->argc == 3 ? 1:  *(TPE*) getArgReference(stk,p, 3);\
-       low = *(TPE*) getArgReference(stk,pci, i);\
-       hgh = *(TPE*) getArgReference(stk,pci, i+1);\
-       bn = BATnew(TYPE_void, TYPE_oid, (l>f ? 
(l-f+abs(s))/abs(s):(f-l+abs(s))/abs(s)));\
-       if( bn == NULL)\
-               throw(MAL,"generator.subselect",MAL_MALLOC_FAIL);\
-       if( low == TPE##_nil ) low = li?f:f+1;\
-       if( hgh == TPE##_nil ) hgh = hi?l+1:l;\
-       v = (oid*) Tloc(bn,BUNfirst(bn));\
-       if( f < l && s > 0){\
-               for(; f<l; f+= s, o++)\
-               if( ((low == TPE##_nil || f >= low) && (f <= hgh || hgh == 
TPE##_nil)) || anti){\
-                       *v++ = o;\
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to