Changeset: cbf07f4ecaba for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cbf07f4ecaba Added Files: sql/test/BugTracker-2018/Tests/create-temp-table-ordered-index-error.Bug-6574.sql sql/test/BugTracker-2018/Tests/create-temp-table-ordered-index-error.Bug-6574.stable.err sql/test/BugTracker-2018/Tests/create-temp-table-ordered-index-error.Bug-6574.stable.out sql/test/BugTracker-2018/Tests/multiple-insertinto-table-Bug-6578.sql sql/test/BugTracker-2018/Tests/sqlitelogictest-aritmetic-expressions-handling.Bug-6576.sql sql/test/BugTracker-2018/Tests/sqlitelogictest-aritmetic-expressions-handling.Bug-6576.stable.err sql/test/BugTracker-2018/Tests/sqlitelogictest-aritmetic-expressions-handling.Bug-6576.stable.out sql/test/BugTracker-2018/Tests/sqlitelogictest-missing-bulk-implementation.Bug-6575.stable.err sql/test/BugTracker-2018/Tests/sqlitelogictest-missing-bulk-implementation.Bug-6575.stable.out sql/test/BugTracker-2018/Tests/sqlitelogictest-select-nullif-case.Bug-6579.sql Modified Files: NT/rules.msc clients/mapiclient/dump.c sql/backends/monet5/rel_bin.c sql/server/rel_optimizer.c sql/server/sql_mvc.c sql/server/sql_mvc.h sql/test/BugTracker-2017/Tests/type-resolution-error.Bugs-6313.stable.err sql/test/BugTracker-2018/Tests/All sql/test/Tests/comment-on.sql sql/test/Tests/comment-on.stable.err sql/test/Tests/comment-on.stable.out Branch: remote_auth Log Message:
Merge branch 'master' into branches/remote_auth diffs (truncated from 1037 to 300 lines): diff --git a/NT/rules.msc b/NT/rules.msc --- a/NT/rules.msc +++ b/NT/rules.msc @@ -39,12 +39,6 @@ BITSMCHN=X64 !ENDIF !IFDEF DEBUG -DEBUGLIB=d -!ELSE -DEBUGLIB= -!ENDIF - -!IFDEF DEBUG # force W_CFLAGS off in debug builds: using icc, you get way more # warnings about casts which results in the code being uncompilable W_CFLAGS = @@ -98,7 +92,7 @@ PYTHON_LIBDIR=$(PYTHON3_LIBDIR) !IFNDEF LIBPCRE LIBPCRE = C:\Program Files\PCRE !ENDIF -pcre_LIBS = "$(LIBPCRE)\lib\pcre$(DEBUGLIB).lib" +pcre_LIBS = "$(LIBPCRE)\lib\pcre.lib" pcre_CFLAGS = -DHAVE_LIBPCRE "-I$(LIBPCRE)\include" !ENDIF @@ -116,7 +110,7 @@ openssl_CFLAGS = -DHAVE_OPENSSL "-I$(LIB !IFNDEF LIBICONV LIBICONV = C:\iconv-1.9.2.win$(bits) !ENDIF -LTLIBICONV = "$(LIBICONV)\lib\iconv$(DEBUGLIB).lib" +LTLIBICONV = "$(LIBICONV)\lib\iconv.lib" ICONV_CFLAGS = -DHAVE_ICONV "-I$(LIBICONV)\include" !ENDIF @@ -135,7 +129,7 @@ LIBZLIB = C:\zlib-1.2.3.win$(bits) !IFNDEF LIBZLIBFILE LIBZLIBFILE=zlib1 !ENDIF -zlib_LIBS = "$(LIBZLIB)\lib\$(LIBZLIBFILE)$(DEBUGLIB).lib" +zlib_LIBS = "$(LIBZLIB)\lib\$(LIBZLIBFILE).lib" zlib_CFLAGS = -DHAVE_LIBZ "-I$(LIBZLIB)\include" !ENDIF @@ -144,7 +138,7 @@ zlib_CFLAGS = -DHAVE_LIBZ "-I$(LIBZLIB)\ !IFNDEF LIBBZIP2 LIBBZIP2 = C:\bzip2-1.0.5.win$(bits) !ENDIF -BZ_LIBS = "$(LIBBZIP2)\lib\libbz2$(DEBUGLIB).lib" +BZ_LIBS = "$(LIBBZIP2)\lib\libbz2.lib" BZ_CFLAGS = -DHAVE_LIBBZ2 "-I$(LIBBZIP2)\include" !ENDIF @@ -154,17 +148,13 @@ BZ_CFLAGS = -DHAVE_LIBBZ2 "-I$(LIBBZIP2) LIBXML2 = C:\libxml2-2.6.30.win$(bits) !ENDIF libxml2_CFLAGS = -DHAVE_LIBXML "-I$(LIBXML2)\include" $(zlib_CFLAGS) $(ICONV_CFLAGS) -libxml2_LIBS = "$(LIBXML2)\lib\libxml2$(DEBUGLIB).lib" $(zlib_LIBS) $(ICONV_LIBS) +libxml2_LIBS = "$(LIBXML2)\lib\libxml2.lib" $(zlib_LIBS) $(ICONV_LIBS) !ENDIF !IFNDEF LIBGEOS LIBGEOS = C:\geos-3.0.win$(bits) !ENDIF -!IFDEF DEBUG -GEOS_LIBS = $(LIBGEOS)\lib\geos_c_i$(GEOSDEBUGLIB).lib -!ELSE GEOS_LIBS = $(LIBGEOS)\lib\geos_c_i.lib -!ENDIF GEOS_INCS = -I$(LIBGEOS)\include !IFDEF HAVE_LIBR diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c --- a/clients/mapiclient/dump.c +++ b/clients/mapiclient/dump.c @@ -947,21 +947,22 @@ describe_table(Mapi mid, const char *sch } mapi_close_handle(hdl); hdl = NULL; - snprintf(query, maxquerylen, - "SELECT col.name, com.remark FROM sys._columns col, sys.comments com WHERE col.id = com.id AND col.table_id = (SELECT id FROM sys._tables WHERE schema_id = (SELECT id FROM sys.schemas WHERE name = '%s') AND name = '%s') ORDER BY number", schema, tname); - if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid)) - goto bailout; - while (mapi_fetch_row(hdl) != 0) { - comment_on(toConsole, "COLUMN", schema, tname, - mapi_fetch_field(hdl, 0), - mapi_fetch_field(hdl, 1)); - } - mapi_close_handle(hdl); - hdl = NULL; - if (mapi_error(mid)) - goto bailout; } + snprintf(query, maxquerylen, + "SELECT col.name, com.remark FROM sys._columns col, sys.comments com WHERE col.id = com.id AND col.table_id = (SELECT id FROM sys._tables WHERE schema_id = (SELECT id FROM sys.schemas WHERE name = '%s') AND name = '%s') ORDER BY number", schema, tname); + if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid)) + goto bailout; + while (mapi_fetch_row(hdl) != 0) { + comment_on(toConsole, "COLUMN", schema, tname, + mapi_fetch_field(hdl, 0), + mapi_fetch_field(hdl, 1)); + } + mapi_close_handle(hdl); + hdl = NULL; + if (mapi_error(mid)) + goto bailout; + if (view) free(view); if (remark) diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c --- a/sql/backends/monet5/rel_bin.c +++ b/sql/backends/monet5/rel_bin.c @@ -484,15 +484,26 @@ exp_bin(backend *be, sql_exp *e, stmt *l if (rows && en == exps->h && f->func->type != F_LOADER) es = stmt_const(be, rows, es); - if (es->nrcols > nrcols) - nrcols = es->nrcols; /* last argument is condition, change into candidate list */ if (!en->next && !f->func->varres && !f->func->vararg && list_length(exps) > list_length(f->func->ops)) { - if (es->nrcols) + if (es->nrcols) { + if (!nrcols) { + node *n; + list *nl = sa_list(sql->sa); + for (n = l->h; n; n = n->next) { + stmt *s = n->data; + s = stmt_const(be, es, s); + list_append(nl, s); + } + l = nl; + + } es = stmt_uselect(be, es, stmt_bool(be,1), cmp_equal, NULL, 0); - else /* need a condition */ + } else /* need a condition */ cond_execution = es; } + if (es->nrcols > nrcols) + nrcols = es->nrcols; if (!cond_execution) list_append(l,es); } @@ -580,10 +591,10 @@ exp_bin(backend *be, sql_exp *e, stmt *l if (!s && left) s = bin_find_column(be, left, e->l, e->r); if (!s) { - sql_rel *rel = mvc_find_subquery(be->mvc, e->l?e->l:e->r, e->r); - - if (rel) { - stmt *s = rel->p; + sql_subquery *sq = mvc_find_subquery(be->mvc, e->l?e->l:e->r, e->r); + + if (sq) { + stmt *s = sq->s; if (s && s->type == st_list) s = bin_find_column(be, s, e->l?e->l:e->r, e->r); @@ -5145,9 +5156,10 @@ static stmt * node *n; for(n = be->mvc->sqs->h; n; n = n->next) { - sql_var *v = n->data; - - v->rel->p = subrel_bin(be, v->rel, refs); + sql_subquery *v = n->data; + + if (!v->s) + v->s = subrel_bin(be, v->rel, refs); } } return subrel_bin(be, rel, refs); diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c --- a/sql/server/rel_optimizer.c +++ b/sql/server/rel_optimizer.c @@ -2900,16 +2900,22 @@ exp_simplify_math( mvc *sql, sql_exp *e, if (!f->func->s && !strcmp(f->func->base.name, "sql_mul") && list_length(l) == 2) { sql_exp *le = l->h->data; sql_exp *re = l->h->next->data; + sql_subtype *et = exp_subtype(e); + /* 0*a = 0 */ if (exp_is_atom(le) && exp_is_zero(sql, le) && exp_is_atom(re) && exp_is_not_null(sql, re)) { (*changes)++; exp_setname(sql->sa, le, exp_relname(e), exp_name(e)); + if (subtype_cmp(et, exp_subtype(le)) != 0) + le = exp_convert(sql->sa, le, exp_subtype(le), et); return le; } /* a*0 = 0 */ if (exp_is_atom(re) && exp_is_zero(sql, re) && exp_is_atom(le) && exp_is_not_null(sql, le)) { (*changes)++; exp_setname(sql->sa, re, exp_relname(e), exp_name(e)); + if (subtype_cmp(et, exp_subtype(re)) != 0) + re = exp_convert(sql->sa, re, exp_subtype(re), et); return re; } /* 1*a = a @@ -6614,7 +6620,7 @@ rel_dce(mvc *sql, sql_rel *rel) node *n; for(n = sql->sqs->h; n; n = n->next) { - sql_var *v = n->data; + sql_subquery *v = n->data; sql_rel *i = v->rel; while (!rel_is_ref(i) && i->l && !is_base(i->op)) @@ -9407,7 +9413,7 @@ rel_optimizer(mvc *sql, sql_rel *rel) node *n; for(n = sql->sqs->h; n; n = n->next) { - sql_var *v = n->data; + sql_subquery *v = n->data; v->rel = optimize(sql, v->rel); } diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c --- a/sql/server/sql_mvc.c +++ b/sql/server/sql_mvc.c @@ -1831,25 +1831,26 @@ mvc_copy_idx(mvc *m, sql_table *t, sql_i return sql_trans_copy_idx(m->session->tr, t, i); } -sql_rel * +sql_subquery * mvc_push_subquery(mvc *m, const char *name, sql_rel *r) { - sql_rel *res = NULL; + sql_subquery *res = NULL; if (!m->sqs) m->sqs = sa_list(m->sa); if (m->sqs) { - sql_var *v = SA_NEW(m->sa, sql_var); + sql_subquery *v = SA_NEW(m->sa, sql_subquery); v->name = name; v->rel = r; + v->s = NULL; list_append(m->sqs, v); - res = r; + res = v; } return res; } -sql_rel * +sql_subquery * mvc_find_subquery(mvc *m, const char *rname, const char *name) { node *n; @@ -1857,13 +1858,13 @@ mvc_find_subquery(mvc *m, const char *rn if (!m->sqs) return NULL; for (n = m->sqs->h; n; n = n->next) { - sql_var *v = n->data; + sql_subquery *v = n->data; if (strcmp(v->name, rname) == 0) { sql_exp *ne = exps_bind_column2(v->rel->exps, rname, name); if (ne) - return v->rel; + return v; } } return NULL; @@ -1877,7 +1878,7 @@ mvc_find_subexp(mvc *m, const char *rnam if (!m->sqs) return NULL; for (n = m->sqs->h; n; n = n->next) { - sql_var *v = n->data; + sql_subquery *v = n->data; if (strcmp(v->name, rname) == 0) { sql_exp *ne = exps_bind_column2(v->rel->exps, rname, name); diff --git a/sql/server/sql_mvc.h b/sql/server/sql_mvc.h --- a/sql/server/sql_mvc.h +++ b/sql/server/sql_mvc.h @@ -74,6 +74,12 @@ typedef struct sql_var { char frame; } sql_var; +typedef struct sql_subquery { + const char *name; + sql_rel *rel; + void *s; +} sql_subquery; + #define MAXSTATS 8 typedef struct mvc { @@ -263,8 +269,8 @@ extern sql_idx *mvc_copy_idx(mvc *m, sql extern void *sql_error(mvc *sql, int error_code, _In_z_ _Printf_format_string_ char *format, ...) __attribute__((__format__(__printf__, 3, 4))); -extern sql_rel *mvc_push_subquery(mvc *m, const char *name, sql_rel *r); -extern sql_rel *mvc_find_subquery(mvc *m, const char *rname, const char *name); +extern sql_subquery *mvc_push_subquery(mvc *m, const char *name, sql_rel *r); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list