Changeset: 5528cb409945 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5528cb409945
Removed Files:
        sql/test/BugTracker-2019/Tests/msqldump-mapi-cache.Bug-6777.timeout
Modified Files:
        monetdb5/modules/mal/mal_io.c
        monetdb5/modules/mal/pcre.c
        monetdb5/modules/mal/projectionpath.c
        monetdb5/optimizer/opt_mergetable.c
        sql/backends/monet5/sql_execute.c
        sql/backends/monet5/wlr.c
        sql/server/rel_dump.c
        sql/server/rel_updates.c
        sql/server/rel_updates.h
        
sql/test/BugTracker-2015/Tests/local-remotetable-crash.Bug-3754.stable.err
        sql/test/BugTracker-2019/Tests/msqldump-mapi-cache.Bug-6777.py
        sql/test/BugTracker-2019/Tests/msqldump-mapi-cache.Bug-6777.stable.out
        
sql/test/BugTracker-2019/Tests/remote-table-non-existent-column.Bug-6750.py
Branch: default
Log Message:

Merged with linear-hashing


diffs (truncated from 2994 to 300 lines):

diff --git a/monetdb5/modules/mal/mal_io.c b/monetdb5/modules/mal/mal_io.c
--- a/monetdb5/modules/mal/mal_io.c
+++ b/monetdb5/modules/mal/mal_io.c
@@ -48,6 +48,8 @@ io_stdin(Client cntxt, MalBlkPtr mb, Mal
 {
        bstream **ret= (bstream**) getArgReference(stk,pci,0);
        (void) mb;
+       if( cntxt->fdin == NULL)
+               throw(MAL, "io.print", SQLSTATE(HY002) "Input channel missing");
        *ret = cntxt->fdin;
        return MAL_SUCCEED;
 }
@@ -57,6 +59,8 @@ io_stdout(Client cntxt, MalBlkPtr mb, Ma
 {
        stream **ret= (stream**) getArgReference(stk,pci,0);
        (void) mb;
+       if( cntxt->fdout == NULL)
+               throw(MAL, "io.print", SQLSTATE(HY002) "Output channel 
missing");
        *ret = cntxt->fdout;
        return MAL_SUCCEED;
 }
@@ -69,6 +73,8 @@ IOprintBoth(Client cntxt, MalBlkPtr mb, 
        stream *fp = cntxt->fdout;
 
        (void) mb;
+       if( cntxt->fdout == NULL)
+               throw(MAL, "io.print", SQLSTATE(HY002) "Output channel 
missing");
 
        if (tpe == TYPE_any)
                tpe = stk->stk[pci->argv[indx]].vtype;
diff --git a/monetdb5/modules/mal/pcre.c b/monetdb5/modules/mal/pcre.c
--- a/monetdb5/modules/mal/pcre.c
+++ b/monetdb5/modules/mal/pcre.c
@@ -714,6 +714,7 @@ re_likeselect(BAT **bnp, BAT *b, BAT *s,
        oid o, off;
        const char *v;
        RE *re = NULL;
+       uint32_t *wpat = NULL;
 
        assert(ATOMstorage(b->ttype) == TYPE_str);
 
@@ -735,7 +736,6 @@ re_likeselect(BAT **bnp, BAT *b, BAT *s,
 
                if (use_strcmp) {
                        if (caseignore) {
-                               uint32_t *wpat;
                                wpat = utf8stoucs(pat);
                                if (wpat == NULL)
                                        throw(MAL, "pcre.likeselect", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
@@ -746,6 +746,7 @@ re_likeselect(BAT **bnp, BAT *b, BAT *s,
                                        candscanloop(v && *v != '\200' &&
                                                                 
mywstrcasecmp(v, wpat) == 0);
                                GDKfree(wpat);
+                               wpat = NULL;
                        } else {
                                if (anti)
                                        candscanloop(v && *v != '\200' &&
@@ -786,7 +787,6 @@ re_likeselect(BAT **bnp, BAT *b, BAT *s,
                }
                if (use_strcmp) {
                        if (caseignore) {
-                               uint32_t *wpat;
                                wpat = utf8stoucs(pat);
                                if (wpat == NULL)
                                        throw(MAL, "pcre.likeselect", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
@@ -797,6 +797,7 @@ re_likeselect(BAT **bnp, BAT *b, BAT *s,
                                        scanloop(v && *v != '\200' &&
                                                         mywstrcasecmp(v, wpat) 
== 0);
                                GDKfree(wpat);
+                               wpat = NULL;
                        } else {
                                if (anti)
                                        scanloop(v && *v != '\200' &&
@@ -834,6 +835,7 @@ re_likeselect(BAT **bnp, BAT *b, BAT *s,
 
   bunins_failed:
        re_destroy(re);
+       GDKfree(wpat);
        BBPreclaim(bn);
        *bnp = NULL;
        throw(MAL, "pcre.likeselect", OPERATION_FAILED);
diff --git a/monetdb5/modules/mal/projectionpath.c 
b/monetdb5/modules/mal/projectionpath.c
--- a/monetdb5/modules/mal/projectionpath.c
+++ b/monetdb5/modules/mal/projectionpath.c
@@ -15,13 +15,14 @@ ALGprojectionpath(Client cntxt, MalBlkPt
        int i;
        bat bid;
        bat *r = getArgReference_bat(stk, pci, 0);
-       BAT *b, **joins = (BAT**)GDKzalloc(pci->argc * sizeof(BAT*)); 
+       BAT *b, **joins = NULL;
 
        (void) mb;
        (void) cntxt;
 
        if(pci->argc <= 1)
                throw(MAL, "algebra.projectionpath", SQLSTATE(HY013) "INTERNAL 
ERROR");
+       joins = (BAT**)GDKzalloc(pci->argc * sizeof(BAT*)); 
        if ( joins == NULL)
                throw(MAL, "algebra.projectionpath", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
        for (i = pci->retc; i < pci->argc; i++) {
diff --git a/monetdb5/optimizer/opt_mergetable.c 
b/monetdb5/optimizer/opt_mergetable.c
--- a/monetdb5/optimizer/opt_mergetable.c
+++ b/monetdb5/optimizer/opt_mergetable.c
@@ -1417,8 +1417,13 @@ mat_group_new(MalBlkPtr mb, InstrPtr p, 
                pushInstruction(mb, q);
                if(setPartnr(ml, getArg(ml->v[b].mi,i), getArg(q,0), i) ||
                   setPartnr(ml, getArg(ml->v[b].mi,i), getArg(q,1), i) ||
-                  setPartnr(ml, getArg(ml->v[b].mi,i), getArg(q,2), i))
+                  setPartnr(ml, getArg(ml->v[b].mi,i), getArg(q,2), i)){
+                       freeInstruction(r0);
+                       freeInstruction(r1);
+                       freeInstruction(r2);
+                       freeInstruction(attr);
                        return -1;
+               }
 
                /* add result to mats */
                r0 = addArgument(mb,r0,getArg(q,0));
@@ -1429,8 +1434,13 @@ mat_group_new(MalBlkPtr mb, InstrPtr p, 
                getArg(r, 0) = newTmpVariable(mb, atp);
                r = addArgument(mb, r, getArg(q,1));
                r = addArgument(mb, r, getArg(ml->v[b].mi,i));
-               if(setPartnr(ml, getArg(ml->v[b].mi,i), getArg(r,0), i))
+               if(setPartnr(ml, getArg(ml->v[b].mi,i), getArg(r,0), i)){
+                       freeInstruction(r0);
+                       freeInstruction(r1);
+                       freeInstruction(r2);
+                       freeInstruction(attr);
                        return -1;
+               }
                pushInstruction(mb,r);
 
                attr = addArgument(mb, attr, getArg(r, 0)); 
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
@@ -951,9 +951,13 @@ RAstatement2(Client cntxt, MalBlkPtr mb,
        rel = rel_read(m, *expr, &pos, refs);
        stack_pop_frame(m);
        if (rel)
-               rel = sql_processrelation(m, rel, 0);
-       if (!rel || monet5_create_relational_function(m, *mod, *nme, rel, NULL, 
ops, 0) < 0)
-               throw(SQL, "sql.register", SQLSTATE(42000) "Cannot register %s: 
%s", buf, m->errstr);
+               rel = sql_processrelation(m, rel, 1);
+       if (!rel || monet5_create_relational_function(m, *mod, *nme, rel, NULL, 
ops, 0) < 0) {
+               if (strlen(m->errstr) > 6 && m->errstr[5] == '!')
+                       msg = createException(SQL, "RAstatement2", "%s", 
m->errstr);
+               else
+                       msg = createException(SQL, "RAstatement2", 
SQLSTATE(42000) "%s", m->errstr);
+       }
        rel_destroy(rel);
        sqlcleanup(m, 0);
        return msg;
diff --git a/sql/backends/monet5/wlr.c b/sql/backends/monet5/wlr.c
--- a/sql/backends/monet5/wlr.c
+++ b/sql/backends/monet5/wlr.c
@@ -163,7 +163,7 @@ WLRgetMaster(void)
 {
        char path[FILENAME_MAX];
        int len;
-       str dir, msg;
+       str dir, msg = MAL_SUCCEED;
        FILE *fd;
 
        if( wlr_master[0] == 0 )
@@ -173,12 +173,19 @@ WLRgetMaster(void)
        len = snprintf(path, FILENAME_MAX, "..%c%s", DIR_SEP, wlr_master);
        if (len == -1 || len >= FILENAME_MAX)
                throw(MAL, "wlr.getMaster", "wlc.config filename path is too 
large");
-       if((dir = GDKfilepath(0, path, "wlc.config", 0)) == NULL)
+       if ((dir = GDKfilepath(0, path, "wlc.config", 0)) == NULL)
                throw(MAL,"wlr.getMaster","Could not access wlc.config file 
%s/wlc.config\n", path);
 
        fd = fopen(dir,"r");
        GDKfree(dir);
-       if( fd == NULL )
+       if( fd ){
+               msg = WLCreadConfig(fd);
+               if( msg != MAL_SUCCEED)
+                       return msg;
+               if( ! wlr_master[0] )
+                       throw(MAL,"wlr.getMaster","Master not identified\n");
+               wlc_state = WLC_CLONE; // not used as master
+       } else
                throw(MAL,"wlr.getMaster","Could not get read access to 
'%s'config file\n", wlr_master);
        if((msg = WLCreadConfig(fd)))
                return msg;
diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -762,6 +762,8 @@ read_prop( mvc *sql, sql_exp *exp, char 
                r[*pos] = 0;
 
                s = mvc_bind_schema(sql, sname);
+               if (sname && !s)
+                       return sql_error(sql, -1, SQLSTATE(42000) "Schema %s 
missing\n", sname);
                if (!find_prop(exp->p, PROP_JOINIDX)) {
                        p = exp->p = prop_create(sql->sa, PROP_JOINIDX, exp->p);
                        p->value = mvc_bind_idx(sql, s, iname);
@@ -769,7 +771,7 @@ read_prop( mvc *sql, sql_exp *exp, char 
                r[*pos] = old;
                skipWS(r,pos);
        }
-       return exp->p;
+       return exp;
 }
 
 static list*
@@ -789,12 +791,13 @@ read_exps(mvc *sql, sql_rel *lrel, sql_r
                        return sql_error(sql, -1, SQLSTATE(42000) "Missing 
closing %c\n", ebracket);
                } else if (!e) {
                        (*pos)++;
-                       skipWS( r, pos);
-                       return exps;
+                       skipWS(r, pos);
+                       return sql->errstr[0] ? NULL : exps; /* A function call 
might not have any input expressions, so return empty exps on that case */
                }
                append(exps, e);
                skipWS( r, pos);
-               read_prop( sql, e, r, pos);
+               if (!read_prop(sql, e, r, pos))
+                       return NULL;
                while (r[*pos] == ',') {
                        int op = 0;
 
@@ -810,7 +813,8 @@ read_exps(mvc *sql, sql_rel *lrel, sql_r
                                return NULL;
                        append(exps, e);
                        skipWS( r, pos);
-                       read_prop( sql, e, r, pos);
+                       if (!read_prop(sql, e, r, pos))
+                               return NULL;
                }
                if (r[*pos] != ebracket)
                        return sql_error(sql, -1, SQLSTATE(42000) "Missing 
closing %c\n", ebracket);
@@ -824,7 +828,7 @@ static sql_exp*
 exp_read(mvc *sql, sql_rel *lrel, sql_rel *rrel, list *pexps, char *r, int 
*pos, int grp)
 {
        int f = -1, not = 1, old, d=0, s=0, unique = 0, no_nils = 0, quote = 0;
-       char *tname, *cname = NULL, *e, *b = r + *pos, *st;
+       char *tname = NULL, *cname = NULL, *var_cname = NULL, *e, *b = r + 
*pos, *st;
        sql_exp *exp = NULL;
        list *exps = NULL;
        sql_subtype *tpe;
@@ -869,7 +873,8 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
                        list *lexps,*rexps;
                        char *fname = NULL;
 
-                       lexps = read_exps(sql, lrel, rrel, pexps, r, pos, '(', 
0);
+                       if (!(lexps = read_exps(sql, lrel, rrel, pexps, r, pos, 
'(', 0)))
+                               return NULL;
                        skipWS(r, pos);
                        if (r[*pos] == '!') {
                                anti = 1;
@@ -895,7 +900,8 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
                                skipWS(r,pos);
                        }
 
-                       rexps = read_exps(sql, lrel, rrel, pexps, r, pos, '(', 
0);
+                       if (!(rexps = read_exps(sql, lrel, rrel, pexps, r, pos, 
'(', 0)))
+                               return NULL;
                        if (filter) {
                                sql_subfunc *func = sql_find_func(sql->sa, 
mvc_bind_schema(sql, "sys"), fname, 1+list_length(exps), F_FILT, NULL);
                                if (!func)
@@ -909,8 +915,7 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
        case '[':
                tname = b;
                if (tname && *tname == '[') { /* list of values */
-                       exps = read_exps(sql, lrel, rrel, pexps, r, pos, '[', 
0);
-                       if (!exps)
+                       if (!(exps = read_exps(sql, lrel, rrel, pexps, r, pos, 
'[', 0)))
                                return NULL;
                        exp = exp_values(sql->sa, exps);
                } else {
@@ -929,14 +934,14 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
                                        return sql_error(sql, -1, 
SQLSTATE(42000) "Type: missing ')'\n");
                                (*pos)++;
                        }
-                       tpe = sql_bind_subtype(sql->sa, tname, d, s);
+                       if (!(tpe = sql_bind_subtype(sql->sa, tname, d, s)))
+                               return sql_error(sql, -1, SQLSTATE(42000) "SQL 
type %s(%d, %d) not found\n", tname, d, s);
                        skipWS(r, pos);
                        *e = old;
                        if (r[*pos] == '[') { /* convert */
                                (*pos)++;
                                skipWS(r, pos);
-                               exp = exp_read(sql, lrel, rrel, pexps, r, pos, 
0);
-                               if (!exp)
+                               if (!(exp = exp_read(sql, lrel, rrel, pexps, r, 
pos, 0)))
                                        return NULL;
                                if (r[*pos] != ']')
                                        return sql_error(sql, -1, 
SQLSTATE(42000) "Convert: missing ']'\n");
@@ -956,7 +961,8 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
        case '\"':
                *e = 0;
                tname = b;
-               tpe = sql_bind_subtype(sql->sa, tname, 0, 0);
+               if (!(tpe = sql_bind_subtype(sql->sa, tname, 0, 0)))
+                       return sql_error(sql, -1, SQLSTATE(42000) "SQL type %s 
not found\n", tname);
                st = readString(r,pos);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to