Changeset: 6330a12fca51 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6330a12fca51
Modified Files:
        gdk/gdk_utils.c
        monetdb5/modules/atoms/mtime.c
        monetdb5/modules/atoms/mtime.h
        monetdb5/modules/atoms/mtime.mal
        monetdb5/optimizer/opt_pushselect.c
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_scenario.c
        sql/server/rel_select.c
Branch: default
Log Message:

merged with oct2014


diffs (199 lines):

diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -1045,7 +1045,6 @@ GDKinit(opt *set, int setlen)
        MT_lock_init(&GDKthreadLock, "GDKthreadLock");
        MT_lock_init(&GDKtmLock, "GDKtmLock");
 #endif
-       (void) ATOMIC_TAS(GDKstopped, GDKstoppedLock, "GDKinit");
        for (i = 0; i <= BBP_BATMASK; i++) {
                MT_lock_init(&GDKbatLock[i].swap, "GDKswapLock");
                MT_lock_init(&GDKbatLock[i].hash, "GDKhashLock");
@@ -1342,10 +1341,6 @@ GDKlockHome(void)
                GDKfatal("GDKlockHome: Could not truncate %s\n", GDKLOCK);
        fflush(GDKlockFile);
        GDKlog(GDKLOGON);
-       /*
-        * In shared mode, we allow more parties to join. Release the lock.
-        */
-       ATOMIC_CLEAR(GDKstopped, GDKstoppedLock, "");
 }
 
 static void
diff --git a/monetdb5/modules/atoms/mtime.c b/monetdb5/modules/atoms/mtime.c
--- a/monetdb5/modules/atoms/mtime.c
+++ b/monetdb5/modules/atoms/mtime.c
@@ -1963,6 +1963,13 @@ MTIMEdate_addmonths(date *ret, const dat
        return MAL_SUCCEED;
 }
 
+str
+MTIMEdate_submonths(date *ret, const date *v, const int *delta)
+{
+       int mindelta = -(*delta);
+       return MTIMEdate_addmonths(ret, v, &mindelta);
+}
+
 /* returns the number of days between 'val1' and 'val2'. */
 str
 MTIMEdate_diff(int *ret, const date *v1, const date *v2)
diff --git a/monetdb5/modules/atoms/mtime.h b/monetdb5/modules/atoms/mtime.h
--- a/monetdb5/modules/atoms/mtime.h
+++ b/monetdb5/modules/atoms/mtime.h
@@ -175,6 +175,7 @@ mtime_export str MTIMEtimestamp_extract_
 mtime_export str MTIMEdate_addyears(date *ret, const date *v, const int 
*delta);
 mtime_export str MTIMEdate_adddays(date *ret, const date *v, const int *delta);
 mtime_export str MTIMEdate_addmonths(date *ret, const date *v, const int 
*delta);
+mtime_export str MTIMEdate_submonths(date *ret, const date *v, const int 
*delta);
 mtime_export str MTIMEdate_diff(int *ret, const date *v1, const date *v2);
 mtime_export str MTIMEdate_diff_bulk(bat *ret, const bat *bid1, const bat 
*bid2);
 mtime_export str MTIMEtimestamp_add(timestamp *ret, const timestamp *v, const 
lng *msec);
diff --git a/monetdb5/modules/atoms/mtime.mal b/monetdb5/modules/atoms/mtime.mal
--- a/monetdb5/modules/atoms/mtime.mal
+++ b/monetdb5/modules/atoms/mtime.mal
@@ -424,6 +424,10 @@ command date_add_month_interval(t:date,s
 address MTIMEdate_addmonths
 comment "Add months to a date";
 
+command date_sub_month_interval(t:date,s:int):date
+address MTIMEdate_submonths
+comment "Subtract months from a date";
+
 # @-
 # #command int(d:date):int = MTIMEdate_2int;
 # #command int(d:daytime):int = MTIMEdaytime_2int;
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
@@ -190,6 +190,12 @@ OPTpushselectImplementation(Client cntxt
        
                                        if (getModuleId(s) == sqlRef && 
getFunctionId(s) == tidRef) 
                                                tid = getArg(q, 1);
+                                       if (s->argc == 2 && s->retc == 1) {
+                                               int i1 = getArg(s, 1);
+                                               InstrPtr s = old[vars[i1]];
+                                               if (getModuleId(s) == sqlRef && 
getFunctionId(s) == tidRef) 
+                                                       tid = getArg(q, 1);
+                                       }
                                        break;
                                } else if (isMapOp(q) && q->argc >= 2 && 
isaBatType(getArgType(mb, q, 1))) {
                                        int i1 = getArg(q, 1);
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
@@ -1513,16 +1513,16 @@ rel2bin_join( mvc *sql, sql_rel *rel, li
                list *lje = sa_list(sql->sa);
                list *rje = sa_list(sql->sa);
 
-               /* get equi-joins first */
+               /* get equi-joins/filters first */
                if (list_length(rel->exps) > 1) {
                        for( en = rel->exps->h; en; en = en->next ) {
                                sql_exp *e = en->data;
-                               if (e->type == e_cmp && e->flag == cmp_equal)
+                               if (e->type == e_cmp && (e->flag == cmp_equal 
|| e->flag == cmp_filter))
                                        append(jexps, e);
                        }
                        for( en = rel->exps->h; en; en = en->next ) {
                                sql_exp *e = en->data;
-                               if (e->type != e_cmp || e->flag != cmp_equal)
+                               if (e->type != e_cmp || (e->flag != cmp_equal 
&& e->flag != cmp_filter))
                                        append(jexps, e);
                        }
                        rel->exps = jexps;
@@ -1536,7 +1536,7 @@ rel2bin_join( mvc *sql, sql_rel *rel, li
                        prop *p;
 
                        /* only handle simple joins here */             
-                       if (exp_has_func(e)) {
+                       if (exp_has_func(e) && e->flag != cmp_filter) {
                                if (!join && !list_length(lje)) {
                                        stmt *l = bin_first_column(sql->sa, 
left);
                                        stmt *r = bin_first_column(sql->sa, 
right);
@@ -1544,7 +1544,8 @@ rel2bin_join( mvc *sql, sql_rel *rel, li
                                }
                                break;
                        }
-                       if (list_length(lje) && (idx || e->type != e_cmp || 
e->flag != cmp_equal))
+                       if (list_length(lje) && (idx || e->type != e_cmp || 
(e->flag != cmp_equal && e->flag != cmp_filter) ||
+                          (join && e->flag == cmp_filter)))
                                break;
 
                        /* handle possible index lookups */
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -1379,7 +1379,7 @@ sql_variables(Client cntxt, MalBlkPtr mb
        mvc *m = NULL;
        BAT *vars;
        str msg;
-       int *res = getArgReference_int(stk, pci, 0);
+       bat *res = getArgReference_bat(stk, pci, 0);
 
        if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
                return msg;
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -931,9 +931,15 @@ SQLsetTrace(backend *be, Client c, bit o
 #define MAX_QUERY      (64*1024*1024)
 
 static int
+caching(mvc *m)
+{
+       return m->caching;
+}
+
+static int
 cachable(mvc *m, stmt *s)
 {
-       if (m->emode == m_plan || !m->caching || m->type == Q_TRANS ||  
/*m->type == Q_SCHEMA || cachable to make sure we have trace on alter 
statements  */
+       if (m->emode == m_plan || m->type == Q_TRANS || /*m->type == Q_SCHEMA 
|| cachable to make sure we have trace on alter statements  */
            (s && s->type == st_none) || sa_size(m->sa) > MAX_QUERY)
                return 0;
        return 1;
@@ -1111,7 +1117,7 @@ SQLparser(Client c)
                }
                m->emode = m_inplace;
                scanner_query_processed(&(m->scanner));
-       } else if (cachable(m, NULL) && m->emode != m_prepare && (be->q = 
qc_match(m->qc, m->sym, m->args, m->argc, m->scanner.key ^ 
m->session->schema->base.id)) != NULL) {
+       } else if (caching(m) && cachable(m, NULL) && m->emode != m_prepare && 
(be->q = qc_match(m->qc, m->sym, m->args, m->argc, m->scanner.key ^ 
m->session->schema->base.id)) != NULL) {
 
                if (m->emod & mod_debug)
                        SQLsetDebugger(c, m, TRUE);
@@ -1137,7 +1143,7 @@ SQLparser(Client c)
                        SQLsetTrace(be, c, TRUE);
                if (m->emod & mod_debug)
                        SQLsetDebugger(c, m, TRUE);
-               if (!cachable(m, s)) {
+               if (!caching(m) || !cachable(m, s)) {
                        MalBlkPtr mb;
 
                        scanner_query_processed(&(m->scanner));
@@ -1145,7 +1151,10 @@ SQLparser(Client c)
                                trimMalBlk(c->curprg->def);
                                mb = c->curprg->def;
                                chkProgram(c->fdout, c->nspace, mb);
-                               addOptimizerPipe(c, mb, "minimal_pipe");
+                               if (!cachable(m, s))
+                                       addOptimizerPipe(c, mb, "minimal_pipe");
+                               else
+                                       addOptimizerPipe(c, mb, "default_pipe");
                                msg = optimizeMALBlock(c, mb);
                                if (msg != MAL_SUCCEED) {
                                        sqlcleanup(m, err);
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -1542,9 +1542,9 @@ rel_named_table_function(mvc *sql, sql_r
                        node *n, *m;
                        list *nexps;
 
-                       if (sf->func->vararg) 
+                       if (sf->func->vararg) {
                                e = exp_op(sql->sa, exps, sf);
-                       else {
+                       } else {
                                nexps = new_exp_list(sql->sa);
                                for (n = exps->h, m = sf->func->ops->h; n && m; 
n = n->next, m = m->next) {
                                        sql_arg *a = m->data;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to