Changeset: 29e3e20eee99 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=29e3e20eee99
Modified Files:
        clients/mapiclient/Tests/mclient--help.stable.err
        clients/mapiclient/Tests/mclient--help.stable.err.Windows
        clients/mapiclient/mclient.1
        clients/mapiclient/mclient.c
        monetdb5/mal/mal_interpreter.c
        monetdb5/mal/mal_listing.c
        monetdb5/modules/mal/inspect.c
        monetdb5/modules/mal/mdb.c
        sql/backends/monet5/sql.c
        sql/storage/bat/bat_storage.c
        sql/storage/bat/bat_utils.c
Branch: default
Log Message:

Merged with Mar2018 branch.


diffs (truncated from 831 to 300 lines):

diff --git a/clients/mapiclient/Tests/mclient--help.stable.err 
b/clients/mapiclient/Tests/mclient--help.stable.err
--- a/clients/mapiclient/Tests/mclient--help.stable.err
+++ b/clients/mapiclient/Tests/mclient--help.stable.err
@@ -22,7 +22,7 @@ Options are:
  -f kind     | --format=kind      specify output format 
{csv,tab,raw,sql,xml,trash}
  -H          | --history          load/save cmdline history (default off)
  -i          | --interactive      interpret `\' commands on stdin
- -t          | --timer=format     use time formatting 
{clock,minutes,seconds,milliseconds,microseconds,none}
+ -t          | --timer=format     use time formatting {clock,performance,none}
  -l language | --language=lang    {sql,mal}
  -L logfile  | --log=logfile      save client/server interaction
  -s stmt     | --statement=stmt   run single statement
diff --git a/clients/mapiclient/Tests/mclient--help.stable.err.Windows 
b/clients/mapiclient/Tests/mclient--help.stable.err.Windows
--- a/clients/mapiclient/Tests/mclient--help.stable.err.Windows
+++ b/clients/mapiclient/Tests/mclient--help.stable.err.Windows
@@ -22,7 +22,7 @@ Options are:
  -f kind     | --format=kind      specify output format 
{csv,tab,raw,sql,xml,trash}
  -H          | --history          load/save cmdline history (default off)
  -i          | --interactive      interpret `\' commands on stdin
- -t          | --timer=format     use time formatting 
{clock,minutes,seconds,milliseconds,microseconds,none}
+ -t          | --timer=format     use time formatting {clock,performance,none}
  -l language | --language=lang    {sql,mal}
  -L logfile  | --log=logfile      save client/server interaction
  -s stmt     | --statement=stmt   run single statement
diff --git a/clients/mapiclient/mclient.1 b/clients/mapiclient/mclient.1
--- a/clients/mapiclient/mclient.1
+++ b/clients/mapiclient/mclient.1
@@ -148,17 +148,23 @@ these are supported.
 Specify the portnumber of the server (default:
 .BR 50000 ).
 .TP
-\fB\-\-interactive\fP
+\fB\-\-interactive\fP (\fB\-i\fP)
 When reading from standard input, interpret lines starting with
 .B \e
 (backslash) specially.
 See the section BACKSLASH COMMANDS below.
-
-\fB\-\-timer\fP[\fB=\fP\fItimermode\fP] 
+.TP
+\fB\-\-timer\fP\fB=\fP\fItimermode\fP (\fB\-t\fP \fItimermode\fP)
 The \fItimer\fP command controls the format of the time reported for queries.
 The default mode is \fBclock\fP which reports on the wall-clock time in a 
human friendly way.
 The timer mode \fBnone\fP turns off timing reporting.
 The timer mode \fBperformance\fP shows the timing components in millisecond 
resolution.
+.br
+\fBNote\fP that Timermode \fBnone\fP (\fB--timer=none\fP) should be used with 
formatting options
+.B csv,
+.B tab,
+.B xml,
+in order to not have the output(-format) compromized/invalidated by the extra 
timing output.
 .TP
 \fB\-\-user\fP\fB=\fP\fIuser\fP (\fB\-u\fP \fIuser\fP)
 Specify the user to connect as.
@@ -197,6 +203,12 @@ In addition to plain \fBcsv\fP, two othe
 \fBcsv=\fP\fIc\fP uses \fIc\fP as column separator; \fBcsv+\fP\fIc\fP
 uses \fIc\fP as column separator and produces a single header line in
 addition to the data.
+.br
+\fBNote\fP that Timermode \fBnone\fP (\fB--timer=none\fP) should be used with 
formatting options
+.B csv,
+.B tab,
+.B xml,
+in order to not have the output(-format) compromized/invalidated by the extra 
timing output.
 .TP
 \fB\-\-echo\fP (\fB\-e\fP)
 Echo the query.
diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -1696,7 +1696,7 @@ setFormatter(const char *s)
                } else
                        separator = strdup(s + 4);
                csvheader = 1;
-       } else if (strcmp(s, "tsv") == 0) {
+       } else if (strcmp(s, "tab") == 0) {
                formatter = CSVformatter;
                separator = strdup("\t");
        } else if (strcmp(s, "raw") == 0) {
@@ -2164,7 +2164,7 @@ showCommands(void)
                mnstr_printf(toConsole, "\\a      - disable auto commit\n");
        }
        mnstr_printf(toConsole, "\\e      - echo the query in sql formatting 
mode\n");
-       mnstr_printf(toConsole, "\\t      - set the timer 
{clock,minutes,seconds,milliseconds,microseconds,none}\n");
+       mnstr_printf(toConsole, "\\t      - set the timer 
{clock,performance,none}\n");
        mnstr_printf(toConsole, "\\f      - format using a built-in renderer 
{csv,tab,raw,sql,xml,trash}\n");
        mnstr_printf(toConsole, "\\w#     - set maximal page width 
(-1=unlimited, 0=terminal width, >0=limit to num)\n");
        mnstr_printf(toConsole, "\\r#     - set maximum rows per page 
(-1=raw)\n");
@@ -2950,7 +2950,7 @@ usage(const char *prog, int xit)
        fprintf(stderr, " -f kind     | --format=kind      specify output 
format {csv,tab,raw,sql,xml,trash}\n");
        fprintf(stderr, " -H          | --history          load/save cmdline 
history (default off)\n");
        fprintf(stderr, " -i          | --interactive      interpret `\\' 
commands on stdin\n");
-       fprintf(stderr, " -t          | --timer=format     use time formatting 
{clock,minutes,seconds,milliseconds,microseconds,none}\n");
+       fprintf(stderr, " -t          | --timer=format     use time formatting 
{clock,performance,none}\n");
        fprintf(stderr, " -l language | --language=lang    {sql,mal}\n");
        fprintf(stderr, " -L logfile  | --log=logfile      save client/server 
interaction\n");
        fprintf(stderr, " -s stmt     | --statement=stmt   run single 
statement\n");
@@ -3013,7 +3013,7 @@ main(int argc, char **argv)
                {"history", 0, 0, 'H'},
                {"host", 1, 0, 'h'},
                {"interactive", 0, 0, 'i'},
-               {"timer", 2, 0, 't'},
+               {"timer", 1, 0, 't'},
                {"language", 1, 0, 'l'},
                {"log", 1, 0, 'L'},
                {"null", 1, 0, 'n'},
diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -792,8 +792,12 @@ str runMALsequence(Client cntxt, MalBlkP
                                break;
                        }
                        w= instruction2str(mb, 0, pci, FALSE);
-                       ret = createException(MAL,"interpreter", "unkown 
operation:%s", w);
-                       GDKfree(w);
+                       if(w) {
+                               ret = createException(MAL,"interpreter", 
"unkown operation:%s", w);
+                               GDKfree(w);
+                       } else {
+                               ret = createException(MAL,"interpreter", 
"failed instruction2str");
+                       }
                        if (cntxt->qtimeout && GDKusec()- mb->starttime > 
cntxt->qtimeout){
                                ret= createException(MAL, "mal.interpreter", 
RUNTIME_QRY_TIMEOUT);
                                break;
diff --git a/monetdb5/mal/mal_listing.c b/monetdb5/mal/mal_listing.c
--- a/monetdb5/mal/mal_listing.c
+++ b/monetdb5/mal/mal_listing.c
@@ -546,7 +546,7 @@ str
 mal2str(MalBlkPtr mb, int first, int last)
 {
        str ps = NULL, *txt;
-       int i, *len, totlen = 0;
+       int i, *len, totlen = 0, j;
 
        txt = GDKmalloc(sizeof(str) * mb->stop);
        len = GDKmalloc(sizeof(int) * mb->stop);
@@ -568,11 +568,21 @@ mal2str(MalBlkPtr mb, int first, int las
 
                if ( txt[i])
                        totlen += len[i] = (int)strlen(txt[i]);
+               else {
+                       addMalException(mb,"mal2str: " MAL_MALLOC_FAIL);
+                       GDKfree(len);
+                       for (j = first; j < i; j++)
+                               GDKfree(txt[j]);
+                       GDKfree(txt);
+                       return NULL;
+               }
        }
        ps = GDKmalloc(totlen + mb->stop + 1);
        if( ps == NULL){
                addMalException(mb,"mal2str: " MAL_MALLOC_FAIL);
                GDKfree(len);
+               for (i = first; i < last; i++)
+                       GDKfree(txt[i]);
                GDKfree(txt);
                return NULL;
        }
@@ -604,6 +614,8 @@ printInstruction(stream *fd, MalBlkPtr m
        if ( ps ){
                mnstr_printf(fd, "%s%s", (flg & LIST_MAL_MAPI ? "=" : ""), ps);
                GDKfree(ps);
+       } else {
+               mnstr_printf(fd,"#failed instruction2str()");
        }
        mnstr_printf(fd, "\n");
 }
@@ -620,6 +632,8 @@ fprintInstruction(FILE *fd, MalBlkPtr mb
        if ( ps ){
                fprintf(fd, "%s%s", (flg & LIST_MAL_MAPI ? "=" : ""), ps);
                GDKfree(ps);
+       } else {
+               fprintf(fd,"#failed instruction2str()");
        }
        fprintf(fd, "\n");
 }
@@ -660,6 +674,8 @@ void showMalBlkHistory(stream *out, MalB
                                mnstr_printf(out,"%s.%s[%2d] %s\n", 
                                        getModuleId(sig), 
getFunctionId(sig),j++,msg+3);
                                GDKfree(msg);
+                       } else {
+                               mnstr_printf(out,"#failed instruction2str()\n");
                        }
                } 
                m= m->history;
diff --git a/monetdb5/modules/mal/inspect.c b/monetdb5/modules/mal/inspect.c
--- a/monetdb5/modules/mal/inspect.c
+++ b/monetdb5/modules/mal/inspect.c
@@ -280,7 +280,8 @@ INSPECTgetDefinition(Client cntxt, MalBl
                str ps;
 
                for (i = 0; i < s->def->stop; i++) {
-                       ps = instruction2str(s->def,0, getInstrPtr(s->def, i), 
0);
+                       if((ps = instruction2str(s->def,0, getInstrPtr(s->def, 
i), 0)) == NULL)
+                               goto bailout;
                        if (BUNappend(b, ps + 1, FALSE) != GDK_SUCCEED) {
                                GDKfree(ps);
                                goto bailout;
@@ -321,6 +322,9 @@ INSPECTgetSignature(Client cntxt, MalBlk
                        char *c, *w;
 
                        ps = instruction2str(s->def, 0, getSignature(s), 0);
+                       if (ps == 0) {
+                               continue;
+                       }
                        c = strchr(ps, '(');
                        if (c == 0) {
                                GDKfree(ps);
@@ -461,7 +465,10 @@ INSPECTgetSource(Client cntxt, MalBlkPtr
                str ps;
 
                for (i = 0; i < s->def->stop; i++) {
-                       ps = instruction2str(s->def, 0, getInstrPtr(s->def, i), 
LIST_MAL_NAME );
+                       if((ps = instruction2str(s->def, 0, getInstrPtr(s->def, 
i), LIST_MAL_NAME )) == NULL) {
+                               GDKfree(buf);
+                               throw(MAL, "inspect.getSource", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+                       }
                        if( strlen(ps) >= lim-len){
                                /* expand the buffer */
                                char *bn;
diff --git a/monetdb5/modules/mal/mdb.c b/monetdb5/modules/mal/mdb.c
--- a/monetdb5/modules/mal/mdb.c
+++ b/monetdb5/modules/mal/mdb.c
@@ -399,6 +399,7 @@ MDBStkTrace(Client cntxt, MalBlkPtr m, M
        (void) cntxt;
        if ((msg = instruction2str(s->blk, s, p, LIST_MAL_DEBUG)) == NULL) {
                BBPreclaim(b);
+               BBPreclaim(bn);
                throw(MAL, "mdb.getStackTrace", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
        }
        len = strlen(msg);
@@ -406,6 +407,7 @@ MDBStkTrace(Client cntxt, MalBlkPtr m, M
        if ( buf == NULL){
                GDKfree(msg);
                BBPreclaim(b);
+               BBPreclaim(bn);
                throw(MAL,"mdb.setTrace", SQLSTATE(HY001) MAL_MALLOC_FAIL);
        }
        snprintf(buf,len+1024,"%s at %s.%s[%d]", msg,
@@ -416,12 +418,17 @@ MDBStkTrace(Client cntxt, MalBlkPtr m, M
                GDKfree(msg);
                GDKfree(buf);
                BBPreclaim(b);
+               BBPreclaim(bn);
                throw(MAL,"mdb.setTrace", SQLSTATE(HY001) MAL_MALLOC_FAIL);
        }
        GDKfree(msg);
 
        for (s = s->up, k++; s != NULL; s = s->up, k++) {
-               msg = instruction2str(s->blk, s, 
getInstrPtr(s->blk,s->pcup),LIST_MAL_DEBUG);
+               if ((msg = instruction2str(s->blk, s, 
getInstrPtr(s->blk,s->pcup),LIST_MAL_DEBUG)) == NULL){
+                       BBPunfix(b->batCacheid);
+                       BBPunfix(bn->batCacheid);
+                       throw(MAL,"mdb.setTrace", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+               }
                l = strlen(msg);
                if (l>len){
                        GDKfree(buf);
@@ -562,7 +569,10 @@ MDBgetDefinition(Client cntxt, MalBlkPtr
                throw(MAL, "mdb.getDefinition", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
 
        for (i = 0; i < m->stop; i++) {
-               ps = instruction2str(m,0, getInstrPtr(m, i), 1);
+               if((ps = instruction2str(m,0, getInstrPtr(m, i), 1)) == NULL) {
+                       BBPreclaim(b);
+                       throw(MAL, "mdb.getDefinition", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+               }
                if (BUNappend(b, ps, FALSE) != GDK_SUCCEED) {
                        GDKfree(ps);
                        BBPreclaim(b);
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -1430,7 +1430,11 @@ DELTAbat(bat *result, const bat *col, co
                BBPunfix(res->batCacheid);
                throw(MAL, "sql.delta", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
        }
-       u_id = BATdescriptor(*uid);
+       if ((u_id = BATdescriptor(*uid)) == NULL) {
+               BBPunfix(u_val->batCacheid);
+               BBPunfix(res->batCacheid);
+               throw(MAL, "sql.delta", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
+       }
        assert(BATcount(u_id) == BATcount(u_val));
        if (BATcount(u_id) &&
            BATreplace(res, u_id, u_val, TRUE) != GDK_SUCCEED) {
@@ -1443,7 +1447,10 @@ DELTAbat(bat *result, const bat *col, co
        BBPunfix(u_val->batCacheid);
 
        if (i && BATcount(i)) {
-               i = BATdescriptor(*ins);
+               if ((i = BATdescriptor(*ins)) == NULL) {
+                       BBPunfix(res->batCacheid);
+                       throw(MAL, "sql.delta", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
+               }
                if (BATappend(res, i, NULL, TRUE) != GDK_SUCCEED) {
                        BBPunfix(res->batCacheid);
                        BBPunfix(i->batCacheid);
@@ -2855,7 +2862,10 @@ zero_or_one(ptr ret, const bat *bid)
                memcpy(*(ptr *) ret, p, _s);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to