Changeset: 645e0989e16d for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=645e0989e16d Modified Files: clients/mapiclient/dump.c common/utils/mutils.c configure.ag gdk/gdk_posix.c monetdb5/mal/mal_instruction.c sql/backends/monet5/sql_gencode.c Branch: default Log Message:
Merge with Jan2014 branch. diffs (truncated from 301 to 300 lines): diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c --- a/clients/mapiclient/dump.c +++ b/clients/mapiclient/dump.c @@ -828,70 +828,69 @@ describe_table(Mapi mid, char *schema, c if (view) { /* the table is actually a view */ mnstr_printf(toConsole, "%s\n", view); - goto doreturn; + } else { + /* the table is a real table */ + mnstr_printf(toConsole, "CREATE TABLE \"%s\".\"%s\" ", schema, tname); + + if (dump_column_definition(mid, toConsole, schema, tname, NULL, foreign)) + goto bailout; + mnstr_printf(toConsole, ";\n"); + + snprintf(query, maxquerylen, + "SELECT i.name, " /* 0 */ + "k.name, " /* 1 */ + "kc.nr, " /* 2 */ + "c.name " /* 3 */ + "FROM sys.idxs AS i LEFT JOIN sys.keys AS k " + "ON i.name = k.name, " + "sys.objects AS kc, " + "sys._columns AS c, " + "sys.schemas s, " + "sys._tables AS t " + "WHERE i.table_id = t.id AND " + "i.id = kc.id AND " + "t.id = c.table_id AND " + "kc.name = c.name AND " + "(k.type IS NULL OR k.type = 1) AND " + "t.schema_id = s.id AND " + "s.name = '%s' AND " + "t.name = '%s' " + "ORDER BY i.name, kc.nr", schema, tname); + if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid)) + goto bailout; + cnt = 0; + while (mapi_fetch_row(hdl) != 0) { + char *i_name = mapi_fetch_field(hdl, 0); + char *k_name = mapi_fetch_field(hdl, 1); + char *kc_nr = mapi_fetch_field(hdl, 2); + char *c_name = mapi_fetch_field(hdl, 3); + + if (mapi_error(mid)) + goto bailout; + if (k_name != NULL) { + /* unique key, already handled */ + continue; + } + + if (strcmp(kc_nr, "0") == 0) { + if (cnt) + mnstr_printf(toConsole, ");\n"); + mnstr_printf(toConsole, + "CREATE INDEX \"%s\" ON \"%s\".\"%s\" (", + i_name, schema, tname); + cnt = 1; + } else + mnstr_printf(toConsole, ", "); + mnstr_printf(toConsole, "\"%s\"", c_name); + if (mnstr_errnr(toConsole)) + goto bailout; + } + if (cnt) + mnstr_printf(toConsole, ");\n"); + if (mapi_error(mid)) + goto bailout; } - mnstr_printf(toConsole, "CREATE TABLE \"%s\".\"%s\" ", schema, tname); - - if (dump_column_definition(mid, toConsole, schema, tname, NULL, foreign)) - goto bailout; - mnstr_printf(toConsole, ";\n"); - - snprintf(query, maxquerylen, - "SELECT i.name, " /* 0 */ - "k.name, " /* 1 */ - "kc.nr, " /* 2 */ - "c.name " /* 3 */ - "FROM sys.idxs AS i LEFT JOIN sys.keys AS k " - "ON i.name = k.name, " - "sys.objects AS kc, " - "sys._columns AS c, " - "sys.schemas s, " - "sys._tables AS t " - "WHERE i.table_id = t.id AND " - "i.id = kc.id AND " - "t.id = c.table_id AND " - "kc.name = c.name AND " - "(k.type IS NULL OR k.type = 1) AND " - "t.schema_id = s.id AND " - "s.name = '%s' AND " - "t.name = '%s' " - "ORDER BY i.name, kc.nr", schema, tname); - if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid)) - goto bailout; - cnt = 0; - while (mapi_fetch_row(hdl) != 0) { - char *i_name = mapi_fetch_field(hdl, 0); - char *k_name = mapi_fetch_field(hdl, 1); - char *kc_nr = mapi_fetch_field(hdl, 2); - char *c_name = mapi_fetch_field(hdl, 3); - - if (mapi_error(mid)) - goto bailout; - if (k_name != NULL) { - /* unique key, already handled */ - continue; - } - - if (strcmp(kc_nr, "0") == 0) { - if (cnt) - mnstr_printf(toConsole, ");\n"); - mnstr_printf(toConsole, - "CREATE INDEX \"%s\" ON \"%s\".\"%s\" (", - i_name, schema, tname); - cnt = 1; - } else - mnstr_printf(toConsole, ", "); - mnstr_printf(toConsole, "\"%s\"", c_name); - if (mnstr_errnr(toConsole)) - goto bailout; - } - if (cnt) - mnstr_printf(toConsole, ");\n"); - if (mapi_error(mid)) - goto bailout; - - doreturn: if (hdl) mapi_close_handle(hdl); if (view) diff --git a/common/utils/mutils.c b/common/utils/mutils.c --- a/common/utils/mutils.c +++ b/common/utils/mutils.c @@ -28,7 +28,7 @@ #endif #include "mutils.h" -#ifdef HAVE_EXECINFO_H +#if defined(HAVE_EXECINFO_H) && defined(HAVE_BACKTRACE) #include <execinfo.h> #endif @@ -345,7 +345,7 @@ MT_lockf(char *filename, int mode, off_t #endif -#ifdef HAVE_EXECINFO_H +#if defined(HAVE_EXECINFO_H) && defined(HAVE_BACKTRACE) /* Obtain a backtrace and print it to stdout. */ void diff --git a/configure.ag b/configure.ag --- a/configure.ag +++ b/configure.ag @@ -2791,6 +2791,7 @@ save_LIBS="$LIBS" LIBS="$LIBS $MATH_LIBS" AC_CHECK_FUNCS([\ asctime_r \ + backtrace \ ctime_r \ fabsf \ fcntl \ diff --git a/gdk/gdk_posix.c b/gdk/gdk_posix.c --- a/gdk/gdk_posix.c +++ b/gdk/gdk_posix.c @@ -839,10 +839,11 @@ int MT_path_absolute(const char *pathname) { /* drive letter, colon, directory separator */ - return ((('a' <= pathname[0] && pathname[0] <= 'z') || - ('A' <= pathname[0] && pathname[0] <= 'Z')) && - pathname[1] == ':' && - (pathname[2] == '/' || pathname[2] == '\\')); + return (((('a' <= pathname[0] && pathname[0] <= 'z') || + ('A' <= pathname[0] && pathname[0] <= 'Z')) && + pathname[1] == ':' && + (pathname[2] == '/' || pathname[2] == '\\')) || + (pathname[0] == '\\' && pathname[1] == '\\')); } diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c --- a/monetdb5/mal/mal_instruction.c +++ b/monetdb5/mal/mal_instruction.c @@ -908,6 +908,7 @@ makeVarSpace(MalBlkPtr mb) return 0; } +/* swallows name argument */ int newVariable(MalBlkPtr mb, str name, malType type) { @@ -915,8 +916,10 @@ newVariable(MalBlkPtr mb, str name, malT if (name == NULL) return -1; - if (makeVarSpace(mb)) + if (makeVarSpace(mb)) { + GDKfree(name); return -1; + } if (isTmpName(name)) { int i = atol(name + (*name == TMPMARKER ? 1 : 2)); @@ -932,8 +935,11 @@ newVariable(MalBlkPtr mb, str name, malT n = mb->vtop; if (getVar(mb, n) == NULL){ getVar(mb, n) = (VarPtr) GDKzalloc(sizeof(VarRecord) + MAXARG * sizeof(int)); - if ( getVar(mb,n) == NULL) + if ( getVar(mb,n) == NULL) { GDKerror("newVariable:" MAL_MALLOC_FAIL); + GDKfree(name); + return -1; + } } mb->var[n]->name = name; mb->var[n]->propc = 0; @@ -1637,11 +1643,16 @@ pushReturn(MalBlkPtr mb, InstrPtr p, int * pushArgument, but it is more efficient in searching and collecting * the information. * TODO */ +/* swallows name argument */ InstrPtr pushArgumentId(MalBlkPtr mb, InstrPtr p, str name) { int v; + if (p == NULL) { + GDKfree(name); + return NULL; + } v = findVariable(mb, name); if (v < 0) { if ((v = newVariable(mb, name, getTypeIndex(name, -1, TYPE_any))) < 0) { 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 @@ -770,6 +770,8 @@ static int } else if ((s->flag & VAR_DECLARE) == 0) { char *buf = GDKmalloc(MAXIDENTLEN); + if (buf == NULL) + return -1; (void) snprintf(buf, MAXIDENTLEN, "A%s", s->op1->op4.aval->data.val.sval); q = newAssignment(mb); q = pushArgumentId(mb, q, buf); @@ -789,10 +791,14 @@ static int } tt = st->type->localtype; buf = GDKmalloc(MAXIDENTLEN); + if (buf == NULL) + return -1; (void) snprintf(buf, MAXIDENTLEN, "A%s", s->op1->op4.aval->data.val.sval); q = newInstruction(mb, ASSIGNsymbol); - if (q == NULL) + if (q == NULL) { + GDKfree(buf); return -1; + } q->argc = q->retc = 0; q = pushArgumentId(mb, q, buf); q = pushNil(mb, q, tt); @@ -807,6 +813,8 @@ static int q = pushArgument(mb, q, sql->mvc->args[s->flag]->varid); } else { char *buf = GDKmalloc(SMALLBUFSIZ); + if (buf == NULL) + return -1; (void) snprintf(buf, SMALLBUFSIZ, "A%d", s->flag); q = pushArgumentId(mb, q, buf); } @@ -2454,10 +2462,14 @@ static int break; } buf = GDKmalloc(MAXIDENTLEN); + if (buf == NULL) + return -1; (void) snprintf(buf, MAXIDENTLEN, "A%s", vn); q = newInstruction(mb, ASSIGNsymbol); - if (q == NULL) + if (q == NULL) { + GDKfree(buf); return -1; + } q->argc = q->retc = 0; q = pushArgumentId(mb, q, buf); if (q == NULL) @@ -2850,6 +2862,8 @@ backend_create_func(backend *be, sql_fun int varid = 0; char *buf = GDKmalloc(MAXIDENTLEN); + if (buf == NULL) + return -1; if (a->name) (void) snprintf(buf, MAXIDENTLEN, "A%s", a->name); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list