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