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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list