oop, sorry, message should have been "Merge with Apr2012 branch."
Stefan On Sat, Mar 17, 2012 at 03:20:38PM +0100, Stefan Manegold wrote: > Changeset: 498e01451664 for MonetDB > URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=498e01451664 > Modified Files: > clients/mapiclient/mclient.c > monetdb5/mal/mal_resolve.c > sql/backends/monet5/UDF/udf.c > sql/backends/monet5/UDF/udf.h > sql/test/bugs/Tests/crash_order_by.stable.out > tools/merovingian/daemon/controlrunner.c > tools/merovingian/daemon/merovingian.c > Branch: default > Log Message: > > Merge with default branch. > > > diffs (truncated from 413 to 300 lines): > > diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c > --- a/clients/mapiclient/mclient.c > +++ b/clients/mapiclient/mclient.c > @@ -654,7 +654,9 @@ CSVrenderer(MapiHdl hdl) > s = mapi_fetch_field(hdl, i); > if (s == NULL) > s = nullstring == default_nullstring ? "" : > nullstring; > - if (strchr(s, *sep) != NULL || strchr(s, '\n') != NULL > || strchr(s, '"') != NULL) { > + if (strchr(s, *sep) != NULL || > + strchr(s, '\n') != NULL || > + strchr(s, '"') != NULL) { > mnstr_printf(toConsole, "%s\"", > i == 0 ? "" : sep); > while (*s) { > @@ -675,8 +677,6 @@ CSVrenderer(MapiHdl hdl) > mnstr_write(toConsole, "\"\"", > 1, 2); > break; > default: > - if (*s == *sep) > - mnstr_write(toConsole, > "\\", 1, 1); > mnstr_write(toConsole, s, 1, 1); > break; > } > diff --git a/monetdb5/mal/mal_resolve.c b/monetdb5/mal/mal_resolve.c > --- a/monetdb5/mal/mal_resolve.c > +++ b/monetdb5/mal/mal_resolve.c > @@ -68,7 +68,7 @@ > * These examples give little room to achieve our prime objective, i.e. > * a fast and early type resolution scheme. Any non-polymorphic function > * can be type checked and marked type-safe upon completion. > - * Type checking polymorphic functions are post-poned until a concrete > + * Type checking polymorphic functions are postponed until a concrete > * type instance is known. It leads to a clone, which can be type checked > * and is entered into the symbol table. > * The type resolution status is marked in each instruction. > diff --git a/sql/backends/monet5/UDF/udf.c b/sql/backends/monet5/UDF/udf.c > --- a/sql/backends/monet5/UDF/udf.c > +++ b/sql/backends/monet5/UDF/udf.c > @@ -3,26 +3,26 @@ > * Version 1.1 (the "License"); you may not use this file except in > * compliance with the License. You may obtain a copy of the License at > * http://www.monetdb.org/Legal/MonetDBLicense > - * > + * > * Software distributed under the License is distributed on an "AS IS" > * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the > * License for the specific language governing rights and limitations > * under the License. > - * > + * > * The Original Code is the MonetDB Database System. > - * > + * > * The Initial Developer of the Original Code is CWI. > * Portions created by CWI are Copyright (C) 1997-July 2008 CWI. > * Copyright August 2008-2012 MonetDB B.V. > * All Rights Reserved. > -*/ > - > + */ > > #include "monetdb_config.h" > #include "udf.h" > > /* Reverse a string */ > -str UDFreverse ( str *ret , str *arg ) > +str > +UDFreverse(str *ret, str *arg) > { > size_t len = 0; > str src = NULL, dst = NULL; > @@ -37,7 +37,8 @@ str UDFreverse ( str *ret , str *arg ) > if (src == NULL || strcmp(src, str_nil) == 0) { > *ret = GDKstrdup(str_nil); > if (*ret == NULL) > - throw(MAL, "udf.reverse", "failed to create copy of > str_nil"); > + throw(MAL, "udf.reverse", > + "failed to create copy of str_nil"); > > return MAL_SUCCEED; > } > @@ -46,7 +47,8 @@ str UDFreverse ( str *ret , str *arg ) > len = strlen(src); > *ret = dst = GDKmalloc(len + 1); > if (dst == NULL) > - throw(MAL, "udf.reverse", "failed to allocate string of length > " SZFMT, len+1); > + throw(MAL, "udf.reverse", > + "failed to allocate string of length " SZFMT, len + 1); > > /* copy characters from src to dst in reverse order */ > dst[len] = 0; > @@ -62,7 +64,8 @@ str UDFreverse ( str *ret , str *arg ) > * Generic "type-oblivious" version, > * using generic "type-oblivious" BAT access interface. > */ > -str UDFBATreverse ( bat *ret , bat *bid ) > +str > +UDFBATreverse(bat *ret, bat *bid) > { > BATiter li; > BAT *bn = NULL, *left = NULL; > @@ -78,7 +81,8 @@ str UDFBATreverse ( bat *ret , bat *bid > /* check tail type */ > if (left->ttype != TYPE_str) { > BBPreleaseref(left->batCacheid); > - throw(MAL, "batudf.reverse", "tail-type of input BAT must be > TYPE_str"); > + throw(MAL, "batudf.reverse", > + "tail-type of input BAT must be TYPE_str"); > } > > /* allocate result BAT */ > @@ -98,6 +102,7 @@ str UDFBATreverse ( bat *ret , bat *bid > /* the core of the algorithm, expensive due to malloc/frees */ > BATloop(left, p, q) { > str tr = NULL, err = NULL; > + > /* get original head & tail value */ > ptr h = BUNhead(li, p); > str t = (str) BUNtail(li, p); > @@ -106,7 +111,8 @@ str UDFBATreverse ( bat *ret , bat *bid > err = UDFreverse(&tr, &t); > if (err != MAL_SUCCEED) { > /* error -> bail out */ > - BATaccessEnd(left, USE_HEAD | USE_TAIL, > MMAP_SEQUENTIAL); > + BATaccessEnd(left, USE_HEAD | USE_TAIL, > + MMAP_SEQUENTIAL); > BBPreleaseref(left->batCacheid); > BBPreleaseref(*ret); > return err; > @@ -116,7 +122,7 @@ str UDFBATreverse ( bat *ret , bat *bid > assert(tr != NULL); > > /* insert original head and reversed tail in result BAT */ > - /* BUNins() takes care of all necessary admininstration */ > + /* BUNins() takes care of all necessary administration */ > BUNins(bn, h, tr, FALSE); > > /* free memory allocated in UDFreverse() */ > @@ -155,9 +161,9 @@ str UDFfuse_##in##_##out ( out *ret , in > return MAL_SUCCEED; \ > } > > -UDFfuse_scalar_impl(bte,unsigned char ,sht, 8) > -UDFfuse_scalar_impl(sht,unsigned short,int,16) > -UDFfuse_scalar_impl(int,unsigned int ,lng,32) > +UDFfuse_scalar_impl(bte, unsigned char, sht, 8) > +UDFfuse_scalar_impl(sht, unsigned short, int, 16) > +UDFfuse_scalar_impl(int, unsigned int, lng, 32) > > > /* BAT fuse */ > @@ -165,8 +171,8 @@ UDFfuse_scalar_impl(int,unsigned int ,l > * Type-expanded optimized version, > * accessing value arrays directly. > */ > -str > -UDFBATfuse ( bat *ires , bat *ione , bat *itwo) > + str > +UDFBATfuse(bat *ires, bat *ione, bat *itwo) > { > BAT *bres = NULL, *bone = NULL, *btwo = NULL; > bit two_tail_sorted_unsigned = FALSE; > @@ -185,89 +191,102 @@ UDFBATfuse ( bat *ires , bat *ione , bat > } > > /* check for dense & aligned heads */ > - if (!BAThdense(bone) || !BAThdense(btwo) || BATcount(bone) != > BATcount(btwo) || bone->hseqbase != btwo->hseqbase) { > + if (!BAThdense(bone) || > + !BAThdense(btwo) || > + BATcount(bone) != BATcount(btwo) || > + bone->hseqbase != btwo->hseqbase) { > BBPreleaseref(bone->batCacheid); > BBPreleaseref(btwo->batCacheid); > - throw(MAL, "batudf.fuse", "heads of input BATs must be > aligned"); > + throw(MAL, "batudf.fuse", > + "heads of input BATs must be aligned"); > } > > /* check tail types */ > if (bone->ttype != btwo->ttype) { > BBPreleaseref(bone->batCacheid); > BBPreleaseref(btwo->batCacheid); > - throw(MAL, "batudf.fuse", "tails of input BATs must be > identical"); > + throw(MAL, "batudf.fuse", > + "tails of input BATs must be identical"); > } > > /* advice on sequential scan */ > BATaccessBegin(bone, USE_TAIL, MMAP_SEQUENTIAL); > BATaccessBegin(btwo, USE_TAIL, MMAP_SEQUENTIAL); > > -#define UDFBATfuse_TYPE(in,uin,out,shift) > \ > -{ /* type-specific core algorithm */ > \ > - in *one = NULL, *two = NULL; > \ > - out *res = NULL; > \ > - BUN i, n = BATcount(bone); > \ > - > \ > - /* allocate result BAT */ > \ > - bres = BATnew(TYPE_void, TYPE_##out, n); > \ > - if (bres == NULL) { > \ > - BBPreleaseref(bone->batCacheid); > \ > - BBPreleaseref(btwo->batCacheid); > \ > - throw(MAL, "batudf.fuse", MAL_MALLOC_FAIL); > \ > - } > \ > - > \ > - /* get direct access to the tail arrays */ > \ > - one = (in *) Tloc(bone, BUNfirst(bone)); > \ > - two = (in *) Tloc(btwo, BUNfirst(btwo)); > \ > - res = (out*) Tloc(bres, BUNfirst(bres)); > \ > - > \ > - /* is tail of right/second BAT sorted, also when cast to unsigned type, > */ \ > - /* i.e., are the values either all >= 0 or all < 0? > */ \ > - two_tail_sorted_unsigned = BATtordered(btwo)&1 && ( two[0] >= 0 || > two[n-1] < 0 ); \ > - > \ > - /* iterate over all values/tuples and do the work */ > \ > - for (i = 0; i < n; i++) > \ > - if (one[i] == in##_nil || two[i] == in##_nil) > \ > - /* NULL/nil in => NULL/nil out */ > \ > - res[i] = out##_nil; > \ > - else > \ > - /* do the work; watch out for sign bits */ > \ > - res[i] = ( ((out)((uin)one[i])) << shift ) | > ((uin)two[i]); \ > - > \ > - /* set number of tuples in result BAT */ > \ > - BATsetcount(bres, n); > \ > -} > +#define UDFBATfuse_TYPE(in,uin,out,shift) \ > +do { /* type-specific core algorithm */ \ > + in *one = NULL, *two = NULL; \ > + out *res = NULL; \ > + BUN i, n = BATcount(bone); \ > + \ > + /* allocate result BAT */ \ > + bres = BATnew(TYPE_void, TYPE_##out, n); \ > + if (bres == NULL) { \ > + BBPreleaseref(bone->batCacheid); \ > + BBPreleaseref(btwo->batCacheid); \ > + throw(MAL, "batudf.fuse", MAL_MALLOC_FAIL); \ > + } \ > + \ > + /* get direct access to the tail arrays */ \ > + one = (in *) Tloc(bone, BUNfirst(bone)); \ > + two = (in *) Tloc(btwo, BUNfirst(btwo)); \ > + res = (out*) Tloc(bres, BUNfirst(bres)); \ > + \ > + /* is tail of right/second BAT sorted, also when cast to \ > + * unsigned type, */ \ > + /* i.e., are the values either all >= 0 or all < 0? */ \ > + two_tail_sorted_unsigned = BATtordered(btwo) & 1 && \ > + (two[0] >= 0 || two[n - 1] < 0); \ > + \ > + /* iterate over all values/tuples and do the work */ \ > + for (i = 0; i < n; i++) \ > + if (one[i] == in##_nil || two[i] == in##_nil) \ > + /* NULL/nil in => NULL/nil out */ \ > + res[i] = out##_nil; \ > + else \ > + /* do the work; watch out for sign bits */ \ > + res[i] = ((out) (uin) one[i] << shift) | (uin) two[i]; \ > + \ > + /* set number of tuples in result BAT */ \ > + BATsetcount(bres, n); \ > +} while (0) > > /* type expansion for core algorithm */ > switch (bone->ttype) { > case TYPE_bte: > - UDFBATfuse_TYPE(bte,unsigned char ,sht, 8) > + UDFBATfuse_TYPE(bte, unsigned char, sht, 8); > break; > + > case TYPE_sht: > - UDFBATfuse_TYPE(sht,unsigned short,int,16) > + UDFBATfuse_TYPE(sht, unsigned short, int, 16); > break; > + > case TYPE_int: > - UDFBATfuse_TYPE(int,unsigned int ,lng,32) > + UDFBATfuse_TYPE(int, unsigned int, lng, 32); > break; > + > default: > - throw(MAL, "batudf.fuse", "tails of input BATs must be one of > {bte, sht, int}"); > + throw(MAL, "batudf.fuse", > + "tails of input BATs must be one of {bte, sht, int}"); > } > > BATaccessEnd(bone, USE_TAIL, MMAP_SEQUENTIAL); > BATaccessEnd(btwo, USE_TAIL, MMAP_SEQUENTIAL); > > /* set result properties */ > - bres->hdense = TRUE; /* result head is dense */ > + bres->hdense = TRUE; /* result head is dense */ > BATseqbase(bres, bone->hseqbase); /* result head has same seqbase as > input */ > - bres->hsorted = GDK_SORTED; /* result head is sorted */ > - BATkey(bone, TRUE); /* result head is key (unique) */ > + bres->hsorted = GDK_SORTED; /* result head is sorted */ > + BATkey(bres, TRUE); /* result head is key (unique) */ > > - /* Result tail is sorted, if the left/first input tail is sorted and > key (unique), > _______________________________________________ > Checkin-list mailing list > Checkin-list@monetdb.org > http://mail.monetdb.org/mailman/listinfo/checkin-list > -- | Stefan.Manegold @ CWI.nl | DB Architectures (INS1) | | http://CWI.nl/~manegold/ | Science Park 123 (L321) | | Tel.: +31 (0)20 592-4212 | 1098 XG Amsterdam (NL) | _______________________________________________ Checkin-list mailing list Checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list