Changeset: e75ebf8fbbdd for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e75ebf8fbbdd
Added Files:
sql/test/BugTracker-2017/Tests/crash-dce.Bug-6330.sql
sql/test/BugTracker-2017/Tests/delete_from_merge_table.Bug-3743.sql
sql/test/BugTracker-2017/Tests/delete_from_merge_table.Bug-3743.stable.err
sql/test/BugTracker-2017/Tests/delete_from_merge_table.Bug-3743.stable.out
sql/test/BugTracker-2017/Tests/push_subslice.Bug-6322.sql
sql/test/BugTracker-2017/Tests/push_subslice.Bug-6322.stable.err
sql/test/BugTracker-2017/Tests/push_subslice.Bug-6322.stable.out
sql/test/Tests/ifexists-views.sql
sql/test/Tests/ifexists-views.stable.err
sql/test/Tests/ifexists-views.stable.out
Modified Files:
MonetDB.spec
clients/ChangeLog.Dec2016
common/stream/stream.c
monetdb5/optimizer/opt_mergetable.c
monetdb5/optimizer/opt_pushselect.c
sql/backends/monet5/sql_cat.c
sql/backends/monet5/sql_upgrades.c
sql/include/sql_catalog.h
sql/scripts/51_sys_schema_extension.sql
sql/server/rel_optimizer.c
sql/server/rel_schema.c
sql/server/rel_select.c
sql/server/rel_updates.c
sql/server/sql_parser.y
sql/test/BugTracker-2017/Tests/All
sql/test/Tests/All
sql/test/Tests/copy-into-fwf.sql.in
sql/test/sys-schema/Tests/check_AlternateKey_uniqueness.sql
sql/test/sys-schema/Tests/check_AlternateKey_uniqueness.stable.out
tools/merovingian/daemon/controlrunner.c
tools/merovingian/utils/control.c
Branch: default
Log Message:
Merge with Jul2017 branch.
diffs (truncated from 1135 to 300 lines):
diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -311,6 +311,11 @@ MonetDB, you will very likely need this
Summary: MonetDB - Monet Database Management System Client Programs
Group: Applications/Databases
Requires: %{name}-client%{?_isa} = %{version}-%{release}
+%if (0%{?fedora} >= 22)
+# tomograph executes these two:
+Recommends: /usr/bin/gs
+Recommends: /usr/bin/gnuplot
+%endif
%description client-tools
MonetDB is a database management system that is developed from a
diff --git a/clients/ChangeLog.Dec2016 b/clients/ChangeLog.Dec2016
--- a/clients/ChangeLog.Dec2016
+++ b/clients/ChangeLog.Dec2016
@@ -1,3 +1,7 @@
# ChangeLog file for clients
# This file is updated with Maddlog
+* Mon Jun 12 2017 Sjoerd Mullender <[email protected]>
+- A bug was fixed in the implementation of the functions SQLTables in
+ the ODBC driver where not enough memory was allocated.
+
diff --git a/common/stream/stream.c b/common/stream/stream.c
--- a/common/stream/stream.c
+++ b/common/stream/stream.c
@@ -5444,11 +5444,11 @@ typedef struct {
char filler;
// state
size_t line_len;
- char* in_buf;
- char* out_buf;
+ char *in_buf;
+ char *out_buf;
size_t out_buf_start;
size_t out_buf_remaining;
- char* nl_buf;
+ char nl_buf[1];
} stream_fwf_data;
@@ -5458,10 +5458,11 @@ stream_fwf_read(stream *s, void *buf, si
stream_fwf_data *fsd;
size_t to_write = cnt;
size_t buf_written = 0;
- if (strcmp(s->name, STREAM_FWF_NAME) != 0 || elmsize != 1) {
+
+ fsd = (stream_fwf_data*) s->stream_data.p;
+ if (fsd == NULL || elmsize != 1) {
return -1;
}
- fsd = (stream_fwf_data*) s->stream_data.p;
while (to_write > 0) {
// input conversion
@@ -5499,12 +5500,12 @@ stream_fwf_read(stream *s, void *buf, si
// now we know something is in output_buf so deliver it
if (fsd->out_buf_remaining <= to_write) {
- memcpy((char*)buf + buf_written, fsd->out_buf +
fsd->out_buf_start, fsd->out_buf_remaining);
+ memcpy((char *) buf + buf_written, fsd->out_buf +
fsd->out_buf_start, fsd->out_buf_remaining);
to_write -= fsd->out_buf_remaining;
buf_written += fsd->out_buf_remaining;
fsd->out_buf_remaining = 0;
} else {
- memcpy((char*) buf + buf_written, fsd->out_buf +
fsd->out_buf_start, to_write);
+ memcpy((char *) buf + buf_written, fsd->out_buf +
fsd->out_buf_start, to_write);
fsd->out_buf_start += to_write;
fsd->out_buf_remaining -= to_write;
buf_written += to_write;
@@ -5518,25 +5519,35 @@ stream_fwf_read(stream *s, void *buf, si
static void
stream_fwf_close(stream *s)
{
- if (strcmp(s->name, STREAM_FWF_NAME) == 0) {
+ stream_fwf_data *fsd = (stream_fwf_data*) s->stream_data.p;
+
+ if (fsd != NULL) {
stream_fwf_data *fsd = (stream_fwf_data*) s->stream_data.p;
mnstr_close(fsd->s);
+ mnstr_destroy(fsd->s);
free(fsd->widths);
free(fsd->in_buf);
free(fsd->out_buf);
- free(fsd->nl_buf);
free(fsd);
- }
- // FIXME destroy(s);
-}
-
-stream*
+ s->stream_data.p = NULL;
+ }
+}
+
+static void
+stream_fwf_destroy(stream *s)
+{
+ stream_fwf_close(s);
+ destroy(s);
+}
+
+stream *
stream_fwf_create (stream *s, size_t num_fields, size_t *widths, char filler)
{
stream *ns;
stream_fwf_data *fsd = malloc(sizeof(stream_fwf_data));
size_t i, out_buf_len;
- if (!fsd) {
+
+ if (fsd == NULL) {
return NULL;
}
fsd->s = s;
@@ -5548,34 +5559,27 @@ stream_fwf_create (stream *s, size_t num
fsd->line_len += widths[i];
}
fsd->in_buf = malloc(fsd->line_len);
- if (!fsd->in_buf) {
+ if (fsd->in_buf == NULL) {
free(fsd);
return NULL;
}
out_buf_len = fsd->line_len * 3;
fsd->out_buf = malloc(out_buf_len);
- if (!fsd->out_buf) {
+ if (fsd->out_buf == NULL) {
free(fsd->in_buf);
free(fsd);
return NULL;
}
fsd->out_buf_remaining = 0;
- fsd->nl_buf = malloc(1);
- if (!fsd->nl_buf) {
+ if ((ns = create_stream(STREAM_FWF_NAME)) == NULL) {
free(fsd->in_buf);
free(fsd->out_buf);
free(fsd);
return NULL;
}
- if ((ns = create_stream(STREAM_FWF_NAME)) == NULL) {
- free(fsd->in_buf);
- free(fsd->out_buf);
- free(fsd->nl_buf);
- free(fsd);
- return NULL;
- }
ns->read = stream_fwf_read;
ns->close = stream_fwf_close;
+ ns->destroy = stream_fwf_destroy;
ns->write = NULL;
ns->flush = NULL;
ns->access = ST_READ;
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
@@ -32,6 +32,7 @@ typedef struct mat {
typedef struct matlist {
mat_t *v;
+ int *vars; /* result variable is a mat */
int top;
int size;
@@ -50,11 +51,10 @@ mat_type( mat_t *mat, int n)
}
static int
-is_a_mat(int idx, matlist_t *ml){
- int i;
- for(i =0; i<ml->top; i++)
- if (!ml->v[i].packed && ml->v[i].mv == idx)
- return i;
+is_a_mat(int idx, matlist_t *ml)
+{
+ if (ml->vars[idx] && !ml->v[ml->vars[idx]].packed)
+ return ml->vars[idx];
return -1;
}
@@ -112,6 +112,7 @@ mat_add_var(matlist_t *ml, InstrPtr q, I
dst->pm = parentmat;
dst->packed = 0;
dst->pushed = pushed;
+ ml->vars[var] = ml->top;
++ml->top;
}
@@ -159,8 +160,11 @@ checksize(matlist_t *ml, int v)
ml->vsize *= 2;
ml->horigin = (int*) GDKrealloc(ml->horigin, sizeof(int)*
ml->vsize);
ml->torigin = (int*) GDKrealloc(ml->torigin, sizeof(int)*
ml->vsize);
- for (i = sz; i < ml->vsize; i++)
+ ml->vars = (int*) GDKrealloc(ml->vars, sizeof(int)* ml->vsize);
+ for (i = sz; i < ml->vsize; i++) {
ml->horigin[i] = ml->torigin[i] = -1;
+ ml->vars[i] = 0;
+ }
}
}
@@ -1546,7 +1550,8 @@ OPTmergetableImplementation(Client cntxt
ml.vsize = mb->vsize;
ml.horigin = (int*) GDKmalloc(sizeof(int)* ml.vsize);
ml.torigin = (int*) GDKmalloc(sizeof(int)* ml.vsize);
- if ( ml.v == NULL || ml.horigin == NULL || ml.torigin == NULL) {
+ ml.vars = (int*) GDKzalloc(sizeof(int)* ml.vsize);
+ if ( ml.v == NULL || ml.horigin == NULL || ml.torigin == NULL ||
ml.vars == NULL) {
goto cleanup;
}
for (i=0; i<ml.vsize; i++)
@@ -1867,6 +1872,7 @@ cleanup:
if (ml.v) GDKfree(ml.v);
if (ml.horigin) GDKfree(ml.horigin);
if (ml.torigin) GDKfree(ml.torigin);
+ if (ml.vars) GDKfree(ml.vars);
/* Defense line against incorrect plans */
if( actions > 0){
chkTypes(cntxt->fdout, cntxt->nspace, mb, FALSE);
diff --git a/monetdb5/optimizer/opt_pushselect.c
b/monetdb5/optimizer/opt_pushselect.c
--- a/monetdb5/optimizer/opt_pushselect.c
+++ b/monetdb5/optimizer/opt_pushselect.c
@@ -485,9 +485,10 @@ OPTpushselectImplementation(Client cntxt
InstrPtr r = copyInstruction(p);
InstrPtr s = copyInstruction(q);
+ rslices[getArg(p,0)] = 1; /* mark slice as
rewriten */
/* keep new output of slice */
slices[getArg(s, 1)] = getArg(p, 0);
- rslices[getArg(p,0)] = 1;
+ rslices[getArg(q,0)] = 1; /* mark projectdelta
as rewriten */
/* slice the candidates */
setFunctionId(r, sliceRef);
getArg(r, 0) = getArg(p, 0);
@@ -498,11 +499,12 @@ OPTpushselectImplementation(Client cntxt
/* dummy result for the old q, will be removed
by deadcode optimizer */
getArg(q, 0) = newTmpVariable(mb,
getArgType(mb, q, 0));
- getArg(s, 1) = getArg(r, 0); /* use result of
subslice */
+ getArg(s, 1) = getArg(r, 0); /* use result of
slice */
pushInstruction(mb, s);
freeInstruction(p);
old[i] = r;
+
continue;
}
}
@@ -513,11 +515,31 @@ OPTpushselectImplementation(Client cntxt
*/
else if (getModuleId(p) == algebraRef && getFunctionId(p) ==
projectionRef) {
int var = getArg(p, 1);
- InstrPtr r = old[vars[var]];
+ InstrPtr r = old[vars[var]], q;
- if (r && isSlice(r) && rslices[getArg(p,1)] != 0 &&
getArg(r, 0) == getArg(p, 1)) {
- InstrPtr q = newAssignment(mb);
+ if (r && isSlice(r) && rslices[var] && getArg(r, 0) ==
getArg(p, 1)) {
+ if (!rslices[getArg(p,2)]) { /* was the
deltaproject rewriten (sliced) */
+ int col = getArg(p,2);
+ InstrPtr s = old[vars[col]], u = NULL;
+ if (s && getModuleId(s) == algebraRef
&& getFunctionId(s) == projectRef) {
+ col = getArg(s, 1);
+ u = s;
+ s = old[vars[col]];
+ }
+ if (s && getModuleId(s) == sqlRef &&
getFunctionId(s) == projectdeltaRef) {
+ InstrPtr t = copyInstruction(s);
+
+ getArg(t, 1) = getArg(r, 0); /*
use result of slice */
+ rslices[col] = 1;
+ pushInstruction(mb, t);
+ if (u) { /* add again */
+ t = copyInstruction(u);
+ pushInstruction(mb, t);
+ }
+ }
+ }
+ q = newAssignment(mb);
getArg(q, 0) = getArg(p, 0);
(void) pushArgument(mb, q, getArg(p, 2));
actions++;
diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -297,7 +297,7 @@ drop_table(mvc *sql, char *sname, char *
}
static char *
-drop_view(mvc *sql, char *sname, char *tname, int drop_action)
+drop_view(mvc *sql, char *sname, char *tname, int drop_action, int if_exists)
{
sql_table *t = NULL;
sql_schema *ss = NULL;
@@ -309,10 +309,12 @@ drop_view(mvc *sql, char *sname, char *t
ss = cur_schema(sql);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list