Changeset: a826dc3956b3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a826dc3956b3
Added Files:
        sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.sql
        
sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.stable.err
        
sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.stable.out
Removed Files:
        sql/test/BugTracker-2008/Tests/extract_bug.SF-2075266.stable.out.int128
        
sql/test/BugTracker-2008/Tests/groupby_with_NULL.SF-2155606.stable.out.int128
        sql/test/BugTracker-2008/Tests/mul_div_bug.SF-2075135.stable.out.int128
        
sql/test/BugTracker-2009/Tests/TribooleanFailureWithSubquery.SF-2679434.stable.out.int128
        
sql/test/BugTracker-2009/Tests/arithmetic-small-values-null.SF-2921310.stable.out.int128
        sql/test/BugTracker-2009/Tests/avg-bug.SF-2132666.stable.out.int128
        
sql/test/BugTracker-2009/Tests/case_evaluates_all_branches.SF-2893484.stable.out.int128
        sql/test/BugTracker-2009/Tests/count_bug.SF-2604583.stable.out.int128
        sql/test/Tests/outerref_in_selection.sql.src
Modified Files:
        buildtools/scripts/mal2h.py
        buildtools/scripts/sql2h.py
        embedded/monetdb_embedded.c
        monetdb5/mal/mal.c
        monetdb5/mal/mal_namespace.c
        monetdb5/mal/mal_private.h
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql_execute.c
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_scenario.c
        sql/backends/monet5/sql_scenario.h
        sql/server/rel_psm.c
        sql/server/rel_select.c
        sql/test/BugTracker-2008/Tests/extract_bug.SF-2075266.sql
        sql/test/BugTracker-2008/Tests/extract_bug.SF-2075266.stable.out
        sql/test/BugTracker-2008/Tests/groupby_with_NULL.SF-2155606.sql
        sql/test/BugTracker-2008/Tests/groupby_with_NULL.SF-2155606.stable.out
        sql/test/BugTracker-2008/Tests/mul_div_bug.SF-2075135.sql
        
sql/test/BugTracker-2009/Tests/TribooleanFailureWithSubquery.SF-2679434.sql
        
sql/test/BugTracker-2009/Tests/TribooleanFailureWithSubquery.SF-2679434.stable.out
        sql/test/BugTracker-2009/Tests/avg-bug.SF-2132666.sql
        sql/test/BugTracker-2009/Tests/avg-bug.SF-2132666.stable.out
        sql/test/BugTracker-2009/Tests/bit_and.SF-2850341.stable.out.int128
        
sql/test/BugTracker-2009/Tests/case_evaluates_all_branches.SF-2893484.sql
        
sql/test/BugTracker-2009/Tests/case_evaluates_all_branches.SF-2893484.stable.out
        sql/test/BugTracker-2009/Tests/count_bug.SF-2604583.sql
        sql/test/BugTracker-2009/Tests/count_bug.SF-2604583.stable.out
        sql/test/BugTracker-2017/Tests/prepare.Bug-6133.stable.err
        sql/test/BugTracker-2019/Tests/All
        sql/test/Tests/outerref_in_selection.stable.out
        sql/test/merge-partitions/Tests/mergepart28.stable.err
Branch: cmake-monetdblite
Log Message:

Merge with cmake-fun.


diffs (truncated from 1613 to 300 lines):

diff --git a/buildtools/scripts/mal2h.py b/buildtools/scripts/mal2h.py
--- a/buildtools/scripts/mal2h.py
+++ b/buildtools/scripts/mal2h.py
@@ -33,7 +33,7 @@ insert1 = ''.join([
     '*/\n',
     '\n',
     '// This file was generated automatically with mal2h.py. Do not edit this 
file directly.\n',
-    'char ', output_file_split[0], '[] = {'])
+    'static char ', output_file_split[0], '[] = {'])
 mal_h_output_file.write(insert1)
 
 file_stat = os.stat(sys.argv[1])
diff --git a/buildtools/scripts/sql2h.py b/buildtools/scripts/sql2h.py
--- a/buildtools/scripts/sql2h.py
+++ b/buildtools/scripts/sql2h.py
@@ -33,7 +33,7 @@ insert1 = ''.join([
     '*/\n',
     '\n',
     '// This file was generated automatically with sql2h.py. Do not edit this 
file directly.\n',
-    'char ', output_file_split[0], '[] = {'])
+    'static char ', output_file_split[0], '[] = {'])
 sql_h_output_file.write(insert1)
 
 file_stat = os.stat(sys.argv[1])
diff --git a/embedded/monetdb_embedded.c b/embedded/monetdb_embedded.c
--- a/embedded/monetdb_embedded.c
+++ b/embedded/monetdb_embedded.c
@@ -393,15 +393,8 @@ monetdb_append(monetdb_connection conn, 
        if (m->session->status < 0 && m->session->auto_commit == 0)
                return createException(MAL, "embedded.monetdb_append", 
SQLSTATE(25005) "Current transaction is aborted (please ROLLBACK)");
 
-       SQLtrans(m);
-       if (*m->errstr) {
-               if (strlen(m->errstr) > 6 && m->errstr[5] == '!')
-                       msg = createException(MAL, "embedded.monetdb_append", 
"%s", m->errstr);
-               else
-                       msg = createException(MAL, "embedded.monetdb_append", 
SQLSTATE(42000) "%s", m->errstr);
-               *m->errstr=0;
+       if ((msg = SQLtrans(m)) != MAL_SUCCEED)
                return msg;
-       }
        if (!m->sa) { // unclear why this is required
                m->sa = sa_create();
                if (!m->sa)
diff --git a/monetdb5/mal/mal_namespace.c b/monetdb5/mal/mal_namespace.c
--- a/monetdb5/mal/mal_namespace.c
+++ b/monetdb5/mal/mal_namespace.c
@@ -16,26 +16,25 @@
 #include "mal_exception.h"
 #include "mal_private.h"
 
-MT_Lock     mal_namespaceLock = MT_LOCK_INITIALIZER("mal_namespaceLk");
-
 #define MAXIDENTIFIERS 4096
 #define HASHMASK  4095
 
+MT_Lock mal_namespaceLock = MT_LOCK_INITIALIZER("mal_namespaceLk");
+
 /* taken from gdk_atoms */
 #define NME_HASH(_key,y,K)                                                     
        \
-    do {                                                                       
                        \
-        size_t _i;                                                             
                \
-        for (_i = y = 0; _i < K && _key[_i]; _i++) {   \
-            y += _key[_i];                                                     
        \
-            y += (y << 10);                                                    
        \
-            y ^= (y >> 6);                                                     
        \
-        }                                                                      
                        \
-        y += (y << 3);                                                         
        \
-        y ^= (y >> 11);                                                        
                \
-        y += (y << 15);                                                        
                \
+       do {                                                                    
                        \
+               size_t _i;                                                      
                        \
+               for (_i = y = 0; _i < K && _key[_i]; _i++) {    \
+                       y += _key[_i];                                          
                \
+                       y += (y << 10);                                         
                \
+                       y ^= (y >> 6);                                          
                \
+               }                                                               
                                \
+               y += (y << 3);                                                  
                \
+               y ^= (y >> 11);                                                 
                \
+               y += (y << 15);                                                 
                \
                y = y & HASHMASK;                                               
                \
-    } while (0)
-
+       } while (0)
 
 typedef struct NAME{
        struct NAME *next;
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -388,9 +388,12 @@ value_list(backend *be, list *vals, stmt
 {
        node *n;
        stmt *s;
-
+       sql_subtype *type = exp_subtype(vals->h->data);
+
+       if (!type)
+               return sql_error(be->mvc, 02, SQLSTATE(42000) "Could not infer 
the type of a value list column");
        /* create bat append values */
-       s = stmt_temp(be, exp_subtype(vals->h->data));
+       s = stmt_temp(be, type);
        for( n = vals->h; n; n = n->next) {
                sql_exp *e = n->data;
                stmt *i = exp_bin(be, e, left, NULL, NULL, NULL, NULL, sel);
@@ -400,7 +403,6 @@ value_list(backend *be, list *vals, stmt
 
                if (list_length(vals) == 1)
                        return i;
-               
                s = stmt_append(be, s, i);
        }
        return s;
diff --git a/sql/backends/monet5/sql_execute.c 
b/sql/backends/monet5/sql_execute.c
--- a/sql/backends/monet5/sql_execute.c
+++ b/sql/backends/monet5/sql_execute.c
@@ -484,13 +484,7 @@ SQLstatementIntern(Client c, str *expr, 
 
        /* create private allocator */
        m->sa = NULL;
-       SQLtrans(m);
-       if(*m->errstr) {
-               if (strlen(m->errstr) > 6 && m->errstr[5] == '!')
-                       msg = createException(SQL, "sql.statement", "%s", 
m->errstr);
-               else
-                       msg = createException(SQL, "sql.statement", 
SQLSTATE(42000) "%s", m->errstr);
-               *m->errstr=0;
+       if ((msg = SQLtrans(m)) != MAL_SUCCEED) {
                if (inited)
                        SQLresetClient(c);
                return msg;
diff --git a/sql/backends/monet5/sql_gencode.c 
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -674,11 +674,11 @@ backend_dumpstmt(backend *be, MalBlkPtr 
                return -1;
        be->mvc_var = getDestVar(q);
        be->mb = mb;
-               s = sql_relation2stmt(be, r);
+       s = sql_relation2stmt(be, r);
        if (!s) {
                if (querylog)
                        (void) pushInt(mb, querylog, mb->stop);
-               return 0;
+               return (be->mvc->errstr[0] == '\0') ? 0 : -1;
        }
 
        be->mvc_var = old_mv;
@@ -777,8 +777,8 @@ backend_dumpproc(backend *be, Client c, 
                        sql_type *tpe = atom_type(a)->type;
                        int type, varid = 0;
 
-                       if(!tpe) {
-                               sql_error(m, 003, SQLSTATE(42000) "Could not 
determine type for argument %d\n", argc+1);
+                       if (!tpe) {
+                               sql_error(m, 003, SQLSTATE(42000) "Could not 
determine type for argument number %d\n", argc+1);
                                goto cleanup;
                        }
                        type = tpe->localtype;
@@ -798,8 +798,8 @@ backend_dumpproc(backend *be, Client c, 
                        sql_type *tpe = a->type.type;
                        int type, varid = 0;
 
-                       if(!tpe) {
-                               sql_error(m, 003, SQLSTATE(42000) "Could not 
determine type for argument %d\n", argc+1);
+                       if (!tpe) {
+                               sql_error(m, 003, SQLSTATE(42000) "Could not 
determine type for argument number %d\n", argc+1);
                                goto cleanup;
                        }
                        type = tpe->localtype;
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -656,32 +656,30 @@ SQLautocommit(mvc *m)
        return msg;
 }
 
-void
+str
 SQLtrans(mvc *m)
 {
        m->caching = m->cache;
        if (!m->session->active) {
                sql_session *s;
 
-               if(mvc_trans(m) < 0) {
-                       (void) sql_error(m, 02, SQLSTATE(HY001) "Allocation 
failure while starting the transaction");
-                       return;
-               }
+               if (mvc_trans(m) < 0)
+                       throw(SQL, "sql.trans", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
                s = m->session;
                if (!s->schema) {
                        if (s->schema_name)
                                GDKfree(s->schema_name);
                        s->schema_name = monet5_user_get_def_schema(m, 
m->user_id);
-                       if(!s->schema_name) {
+                       if (!s->schema_name) {
                                mvc_cancel_session(m);
-                               (void) sql_error(m, 02, SQLSTATE(HY001) 
"Allocation failure while starting the transaction");
-                               return;
+                               throw(SQL, "sql.trans", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
                        }
                        assert(s->schema_name);
                        s->schema = find_sql_schema(s->tr, s->schema_name);
                        assert(s->schema);
                }
        }
+       return MAL_SUCCEED;
 }
 
 str
@@ -1023,16 +1021,11 @@ SQLparser(Client c)
 #endif
        m = be->mvc;
        m->type = Q_PARSE;
-       if (be->language != 'X')
-               SQLtrans(m);
-       if(*m->errstr) {
-               if (strlen(m->errstr) > 6 && m->errstr[5] == '!')
-                       msg = createException(PARSE, "SQLparser", "%s", 
m->errstr);
-               else
-                       msg = createException(PARSE, "SQLparser", 
SQLSTATE(42000) "%s", m->errstr);
-               *m->errstr=0;
-               c->mode = FINISHCLIENT;
-               return msg;
+       if (be->language != 'X') {
+               if ((msg = SQLtrans(m)) != MAL_SUCCEED) {
+                       c->mode = FINISHCLIENT;
+                       return msg;
+               }
        }
        pstatus = m->session->status;
 
@@ -1054,7 +1047,8 @@ SQLparser(Client c)
                        n = sscanf(in->buf + in->pos + 7, "%d %d %d", &v, &off, 
&len);
 
                if (n == 2 || n == 3) {
-                       mvc_export_chunk(be, out, v, off, n == 3 ? len : 
m->reply_size);
+                       if (mvc_export_chunk(be, out, v, off, n == 3 ? len : 
m->reply_size))
+                               throw(SQL, "SQLparser", SQLSTATE(45000) "Result 
set construction failed");
 
                        in->pos = in->len;      /* HACK: should use parsed 
length */
                        return MAL_SUCCEED;
diff --git a/sql/backends/monet5/sql_scenario.h 
b/sql/backends/monet5/sql_scenario.h
--- a/sql/backends/monet5/sql_scenario.h
+++ b/sql/backends/monet5/sql_scenario.h
@@ -20,7 +20,7 @@ sql5_export str SQLprelude(Client cntxt,
 sql5_export str SQLepilogue(void *ret);
 
 sql5_export str SQLautocommit(mvc *m);
-sql5_export void SQLtrans(mvc *m);
+sql5_export str SQLtrans(mvc *m);
 
 sql5_export str SQLexit(Client c);
 sql5_export str SQLexitClient(Client c);
diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -856,7 +856,7 @@ rel_create_func(sql_query *query, dlist 
                                                arg_list = tpe;
                                        }
                                }
-                               (void)sql_error(sql, 02, SQLSTATE(42000) 
"CREATE %s%s: name '%s' (%s) already in use", KF, F, fname, arg_list);
+                               (void)sql_error(sql, 02, SQLSTATE(42000) 
"CREATE %s%s: name '%s' (%s) already in use", KF, F, fname, arg_list ? arg_list 
: "");
                                _DELETE(arg_list);
                                list_destroy(type_list);
                                return NULL;
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -1157,7 +1157,7 @@ exp_fix_scale(mvc *sql, sql_subtype *ct,
 static int
 rel_set_type_param(mvc *sql, sql_subtype *type, sql_exp *param, int upcast)
 {
-       if (!type || !param || param->type != e_atom)
+       if (!type || !param || (param->type != e_atom && param->type != 
e_column))
                return -1;
 
        /* use largest numeric types */
diff --git a/sql/test/BugTracker-2008/Tests/extract_bug.SF-2075266.sql 
b/sql/test/BugTracker-2008/Tests/extract_bug.SF-2075266.sql
--- a/sql/test/BugTracker-2008/Tests/extract_bug.SF-2075266.sql
+++ b/sql/test/BugTracker-2008/Tests/extract_bug.SF-2075266.sql
@@ -4,8 +4,8 @@ CREATE TABLE A (FIPS2 TIMESTAMP);
 INSERT INTO A VALUES (
 TIMESTAMP '1996-08-24 16:03:00.999999');
 
-SELECT EXTRACT (SECOND FROM FIPS2)
-* 1000000 - 999990 FROM A;
+SELECT CAST( EXTRACT (SECOND FROM FIPS2)
+* 1000000 - 999990 as decimal(18,6)) FROM A;
 
 select EXTRACT (SECOND FROM FIPS2) FROM A;
 
diff --git a/sql/test/BugTracker-2008/Tests/extract_bug.SF-2075266.stable.out 
b/sql/test/BugTracker-2008/Tests/extract_bug.SF-2075266.stable.out
--- a/sql/test/BugTracker-2008/Tests/extract_bug.SF-2075266.stable.out
+++ b/sql/test/BugTracker-2008/Tests/extract_bug.SF-2075266.stable.out
@@ -26,8 +26,8 @@ stdout of test 'extract_bug.SF-2075266` 
 # 13:27:40 >  
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to