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

Reply via email to