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

Reply via email to