Changeset: c920a864d72a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c920a864d72a
Modified Files:
        gdk/gdk_string.c
        sql/storage/bat/bat_logger.c
        sql/test/BugDay_2005-10-06_2.8/Tests/mixed_type.SF-917372.sql
        sql/test/BugDay_2005-10-06_2.8/Tests/mixed_type.SF-917372.stable.out
        sql/test/BugTracker-2011/Tests/CASE_nested_functions.Bug-2852.sql
        sql/test/BugTracker-2011/Tests/CASE_nested_functions.Bug-2852.stable.out
        sql/test/BugTracker-2017/Tests/one-plus-nil.Bug-6243.sql
        sql/test/BugTracker-2017/Tests/one-plus-nil.Bug-6243.stable.out
        sql/test/SQLancer/Tests/sqlancer02.sql
        sql/test/analytics/Tests/analytics17.stable.out
        sql/test/group-concat/Tests/groupconcat05.sql
        sql/test/group-concat/Tests/groupconcat05.stable.out
Branch: default
Log Message:

Merged with Jun2020


diffs (truncated from 658 to 300 lines):

diff --git a/gdk/gdk_string.c b/gdk/gdk_string.c
--- a/gdk/gdk_string.c
+++ b/gdk/gdk_string.c
@@ -866,8 +866,8 @@ concat_strings(BAT **bnp, ValPtr pt, BAT
                }
                canditer_reset(ci);
 
-               if (nils == 0) {
-                       char *single_str;
+               if (nils == 0 && !empty) {
+                       char *single_str = NULL;
 
                        if ((single_str = GDKmalloc(single_length + 1)) == NULL)
                                return GDK_FAIL;
@@ -1185,6 +1185,7 @@ GDKanalytical_str_group_concat(BAT *r, B
        str sb, sl, single_str = NULL, next_single_str;
        bool empty;
        size_t separator_length = 0, next_group_length, max_group_length = 0, 
next_length, offset;
+       bool hasnil = 0;
 
        assert(s && e && ((sep && !separator && BATcount(b) == BATcount(sep)) 
|| (!sep && separator)));
        start = (lng *) Tloc(s, 0);
@@ -1235,61 +1236,65 @@ GDKanalytical_str_group_concat(BAT *r, B
                        }
                }
 
-               empty = true;
-
-               if (!single_str) { /* reuse the same buffer, resize it when 
needed */
-                       max_group_length = next_group_length;
-                       if ((single_str = GDKmalloc(max_group_length + 1)) == 
NULL)
-                               goto allocation_error;
-               } else if (next_group_length > max_group_length) {
-                       max_group_length = next_group_length;
-                       if ((next_single_str = GDKrealloc(single_str, 
max_group_length + 1)) == NULL)
+               if (empty) {
+                       if ((single_str = GDKstrdup(str_nil)) == NULL)
                                goto allocation_error;
-                       single_str = next_single_str;
-               }
+                       hasnil = true;
+               } else {
+                       empty = true;
+                       if (!single_str) { /* reuse the same buffer, resize it 
when needed */
+                               max_group_length = next_group_length;
+                               if ((single_str = GDKmalloc(max_group_length + 
1)) == NULL)
+                                       goto allocation_error;
+                       } else if (next_group_length > max_group_length) {
+                               max_group_length = next_group_length;
+                               if ((next_single_str = GDKrealloc(single_str, 
max_group_length + 1)) == NULL)
+                                       goto allocation_error;
+                               single_str = next_single_str;
+                       }
 
-               for (j = start[i]; j < l; j++) {
-                       sb = BUNtvar(bi, (BUN) j);
+                       for (j = start[i]; j < l; j++) {
+                               sb = BUNtvar(bi, (BUN) j);
 
-                       if (separator) {
-                               if (strNil(sb))
-                                       continue;
-                               if (!empty) {
-                                       memcpy(single_str + offset, separator, 
separator_length);
-                                       offset += separator_length;
+                               if (separator) {
+                                       if (strNil(sb))
+                                               continue;
+                                       if (!empty) {
+                                               memcpy(single_str + offset, 
separator, separator_length);
+                                               offset += separator_length;
+                                       }
+                                       next_length = strlen(sb);
+                                       memcpy(single_str + offset, sb, 
next_length);
+                                       offset += next_length;
+                                       empty = false;
+                               } else { /* sep case */
+                                       assert(sep != NULL);
+                                       sl = BUNtvar(bis, (BUN) j);
+
+                                       if (strNil(sb))
+                                               continue;
+                                       if (!empty && !strNil(sl)) {
+                                               next_length = strlen(sl);
+                                               memcpy(single_str + offset, sl, 
next_length);
+                                               offset += next_length;
+                                       }
+                                       next_length = strlen(sb);
+                                       memcpy(single_str + offset, sb, 
next_length);
+                                       offset += next_length;
+                                       empty = false;
                                }
-                               next_length = strlen(sb);
-                               memcpy(single_str + offset, sb, next_length);
-                               offset += next_length;
-                               empty = false;
-                       } else { /* sep case */
-                               assert(sep != NULL);
-                               sl = BUNtvar(bis, (BUN) j);
+                       }
 
-                               if (strNil(sb))
-                                       continue;
-                               if (!empty && !strNil(sl)) {
-                                       next_length = strlen(sl);
-                                       memcpy(single_str + offset, sl, 
next_length);
-                                       offset += next_length;
-                               }
-                               next_length = strlen(sb);
-                               memcpy(single_str + offset, sb, next_length);
-                               offset += next_length;
-                               empty = false;
-                       }
+                       single_str[offset] = '\0';
                }
-
-               single_str[offset] = '\0';
                if (BUNappend(r, single_str, false) != GDK_SUCCEED)
                        goto allocation_error;
-
        }
 
        GDKfree(single_str);
        BATsetcount(r, cnt);
-       r->tnonil = true;
-       r->tnil = false;
+       r->tnonil = !hasnil;
+       r->tnil = hasnil;
        return GDK_SUCCEED;
   allocation_error:
        GDKfree(single_str);
diff --git a/sql/storage/bat/bat_logger.c b/sql/storage/bat/bat_logger.c
--- a/sql/storage/bat/bat_logger.c
+++ b/sql/storage/bat/bat_logger.c
@@ -154,29 +154,36 @@ tabins(void *lg, bool first, int tt, con
        while ((cname = va_arg(va, char *)) != NULL) {
                cval = va_arg(va, void *);
                len = snprintf(lname, sizeof(lname), "%s_%s_%s", sname, tname, 
cname);
-               if (len == -1 || (size_t)len >= sizeof(lname))
+               if (len == -1 || (size_t)len >= sizeof(lname) ||
+                       (b = temp_descriptor(logger_find_bat(lg, lname, 0, 0))) 
== NULL) {
+                       va_end(va);
                        return GDK_FAIL;
-               if ((b = temp_descriptor(logger_find_bat(lg, lname, 0, 0))) == 
NULL)
-                       return GDK_FAIL;
+               }
                if (first) {
                        BAT *bn;
                        if ((bn = COLcopy(b, b->ttype, true, PERSISTENT)) == 
NULL) {
                                BBPunfix(b->batCacheid);
+                               va_end(va);
                                return GDK_FAIL;
                        }
                        BBPunfix(b->batCacheid);
                        if (BATsetaccess(bn, BAT_READ) != GDK_SUCCEED ||
                            logger_add_bat(lg, bn, lname, 0, 0) != GDK_SUCCEED) 
{
                                BBPunfix(bn->batCacheid);
+                               va_end(va);
                                return GDK_FAIL;
                        }
                        b = bn;
                }
                rc = BUNappend(b, cval, true);
                BBPunfix(b->batCacheid);
-               if (rc != GDK_SUCCEED)
+               if (rc != GDK_SUCCEED) {
+                       va_end(va);
                        return rc;
+               }
        }
+       va_end(va);
+
        if (tt >= 0) {
                if ((b = COLnew(0, tt, 0, PERSISTENT)) == NULL)
                        return GDK_FAIL;
@@ -1128,16 +1135,20 @@ bl_find_table_value(const char *tabnam, 
                b = temp_descriptor(logger_find_bat(bat_logger, tab, 0, 0));
                if (b == NULL) {
                        bat_destroy(s);
+                       va_end(va);
                        return NULL;
                }
                BAT *t = BATselect(b, s, val, val, 1, 1, 0);
                bat_destroy(b);
                bat_destroy(s);
-               if (t == NULL)
+               if (t == NULL) {
+                       va_end(va);
                        return NULL;
+               }
                s = t;
                if (BATcount(s) == 0) {
                        bat_destroy(s);
+                       va_end(va);
                        return NULL;
                }
        } while ((tab = va_arg(va, const char *)) != NULL &&
diff --git a/sql/test/BugDay_2005-10-06_2.8/Tests/mixed_type.SF-917372.sql 
b/sql/test/BugDay_2005-10-06_2.8/Tests/mixed_type.SF-917372.sql
--- a/sql/test/BugDay_2005-10-06_2.8/Tests/mixed_type.SF-917372.sql
+++ b/sql/test/BugDay_2005-10-06_2.8/Tests/mixed_type.SF-917372.sql
@@ -1,3 +1,3 @@
 select 'a'+1;
 select 1-'a';
-select true+1;
+select cast(true+1 as bigint);
diff --git 
a/sql/test/BugDay_2005-10-06_2.8/Tests/mixed_type.SF-917372.stable.out 
b/sql/test/BugDay_2005-10-06_2.8/Tests/mixed_type.SF-917372.stable.out
--- a/sql/test/BugDay_2005-10-06_2.8/Tests/mixed_type.SF-917372.stable.out
+++ b/sql/test/BugDay_2005-10-06_2.8/Tests/mixed_type.SF-917372.stable.out
@@ -1,32 +1,14 @@
 stdout of test 'mixed_type.SF-917372` in directory 
'sql/test/BugDay_2005-10-06_2.8` itself:
 
 
-# 18:31:51 >  
-# 18:31:51 >   mserver5 
"--config=/ufs/niels/scratch/monetdb/Linux-x86_64/etc/monetdb5.conf" --debug=10 
--set gdk_nr_threads=4 --set 
"monet_mod_path=/ufs/niels/scratch/monetdb/Linux-x86_64/lib/MonetDB5:/ufs/niels/scratch/monetdb/Linux-x86_64/lib/MonetDB5/lib:/ufs/niels/scratch/monetdb/Linux-x86_64/lib/MonetDB5/bin"
 --set "gdk_dbfarm=/ufs/niels/scratch/monetdb/Linux-x86_64/var/MonetDB5/dbfarm" 
--set 
"sql_logdir=/ufs/niels/scratch/monetdb/Linux-x86_64/var/MonetDB5/sql_logs"  
--set mapi_open=true --set xrpc_open=true --set mapi_port=38592 --set 
xrpc_port=45862 --set monet_prompt= --trace  
"--dbname=mTests_src_test_BugDay_2005-10-06_2.8" --set mal_listing=0 "--dbinit= 
include sql;" ; echo ; echo Over..
-# 18:31:51 >  
-
-# MonetDB server v5.9.0, based on kernel v1.27.0
-# Serving database 'mTests_src_test_BugDay_2005-10-06_2.8', using 4 threads
-# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs dynamically 
linked
-# Copyright (c) 1993-July 2008 CWI.
-# Copyright (c) August 2008- MonetDB B.V., all rights reserved
-# Visit http://monetdb.cwi.nl/ for further information
-# Listening for connection requests on mapi:monetdb://alf.ins.cwi.nl:38592/
-# MonetDB/SQL module v2.27.0 loaded
+# 14:04:34 >  
+# 14:04:34 >  "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-390464" "--port=31391"
+# 14:04:34 >  
 
-#function user.main():void;
-#    clients.quit();
-#end main;
-
-
-# 11:50:16 >  
-# 11:50:16 >  Mtimeout -timeout 60 MapiClient -lsql -umonetdb -Pmonetdb 
--host=localhost --port=35781  < mixed_type.SF-917372.sql
-# 11:50:16 >  
-
-#select true+1;
-% .%2 # table_name
-% %2 # name
-% hugeint # type
+#select cast(true+1 as bigint);
+% .%1 # table_name
+% %1 # name
+% bigint # type
 % 1 # length
 [ 2    ]
 
diff --git a/sql/test/BugTracker-2011/Tests/CASE_nested_functions.Bug-2852.sql 
b/sql/test/BugTracker-2011/Tests/CASE_nested_functions.Bug-2852.sql
--- a/sql/test/BugTracker-2011/Tests/CASE_nested_functions.Bug-2852.sql
+++ b/sql/test/BugTracker-2011/Tests/CASE_nested_functions.Bug-2852.sql
@@ -1,7 +1,7 @@
 CREATE TABLE t2852 (c INT);
 INSERT INTO t2852 VALUES (0);
 SELECT
-        COALESCE(
+        CAST(COALESCE(
             COALESCE("c"  /
               CASE 
               WHEN COALESCE("c" , 0)  = 0 
@@ -15,7 +15,7 @@ SELECT
                       NULL
                       END
             ,0)
-        , 0)
+        , 0) AS BIGINT)
     FROM
       t2852
   ;
diff --git 
a/sql/test/BugTracker-2011/Tests/CASE_nested_functions.Bug-2852.stable.out 
b/sql/test/BugTracker-2011/Tests/CASE_nested_functions.Bug-2852.stable.out
--- a/sql/test/BugTracker-2011/Tests/CASE_nested_functions.Bug-2852.stable.out
+++ b/sql/test/BugTracker-2011/Tests/CASE_nested_functions.Bug-2852.stable.out
@@ -46,9 +46,9 @@ stdout of test 'CASE_nested_functions.Bu
 #    FROM
 #      t2852
 #  ;
-% sys.%15 # table_name
-% %15 # name
-% hugeint # type
+% sys.%4 # table_name
+% %4 # name
+% bigint # type
 % 1 # length
 [ 0    ]
 #DROP TABLE t2852;
diff --git a/sql/test/BugTracker-2017/Tests/one-plus-nil.Bug-6243.sql 
b/sql/test/BugTracker-2017/Tests/one-plus-nil.Bug-6243.sql
--- a/sql/test/BugTracker-2017/Tests/one-plus-nil.Bug-6243.sql
+++ b/sql/test/BugTracker-2017/Tests/one-plus-nil.Bug-6243.sql
@@ -1,1 +1,1 @@
-select 1 + null;
+select cast(1 + null as bigint);
diff --git a/sql/test/BugTracker-2017/Tests/one-plus-nil.Bug-6243.stable.out 
b/sql/test/BugTracker-2017/Tests/one-plus-nil.Bug-6243.stable.out
--- a/sql/test/BugTracker-2017/Tests/one-plus-nil.Bug-6243.stable.out
+++ b/sql/test/BugTracker-2017/Tests/one-plus-nil.Bug-6243.stable.out
@@ -5,70 +5,10 @@ stdout of test 'one-plus-nil.Bug-6243` i
 # 21:23:57 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=39261" "--set" 
"mapi_usock=/var/tmp/mtest-22986/.s.monetdb.39261" "--set" "monet_prompt=" 
"--forcemito" 
"--dbpath=/home/sjoerd/Monet-stable/var/MonetDB/mTests_sql_test_BugTracker-2017"
 "--set" "embedded_r=yes" "--set" "embedded_py=true"
 # 21:23:57 >  
 
-# MonetDB 5 server v11.25.12 (hg id: 947957af7128+)
-# This is an unreleased version
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to