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

Reply via email to