Changeset: 6a05428d4df7 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6a05428d4df7 Modified Files: monetdb5/mal/mal_profiler.c monetdb5/mal/mal_profiler.h sql/backends/monet5/sql.c sql/server/rel_select.c sql/test/BugTracker-2015/Tests/sys_tracelog.Bug-3887.stable.err sql/test/BugTracker-2015/Tests/sys_tracelog.Bug-3887.stable.out Branch: default Log Message:
fixed bug 3887, ie return error when profiler isn't started handle over() again on query without where. diffs (128 lines): diff --git a/monetdb5/mal/mal_profiler.c b/monetdb5/mal/mal_profiler.c --- a/monetdb5/mal/mal_profiler.c +++ b/monetdb5/mal/mal_profiler.c @@ -560,12 +560,11 @@ static BAT *TRACE_id_majflt = 0; static BAT *TRACE_id_nvcsw = 0; static BAT *TRACE_id_stmt = 0; - -void +int TRACEtable(BAT **r) { if (TRACE_init == 0) - return ; /* not initialized */ + return -1; /* not initialized */ MT_lock_set(&mal_profileLock); r[0] = COLcopy(TRACE_id_event, TRACE_id_event->ttype, 0, TRANSIENT); r[1] = COLcopy(TRACE_id_time, TRACE_id_time->ttype, 0, TRANSIENT); @@ -581,6 +580,7 @@ TRACEtable(BAT **r) r[11] = COLcopy(TRACE_id_nvcsw, TRACE_id_nvcsw->ttype, 0, TRANSIENT); r[12] = COLcopy(TRACE_id_stmt, TRACE_id_stmt->ttype, 0, TRANSIENT); MT_lock_unset(&mal_profileLock); + return 13; } BAT * diff --git a/monetdb5/mal/mal_profiler.h b/monetdb5/mal/mal_profiler.h --- a/monetdb5/mal/mal_profiler.h +++ b/monetdb5/mal/mal_profiler.h @@ -39,7 +39,7 @@ mal_export void MPresetProfiler(stream * mal_export int malProfileMode; mal_export void clearTrace(void); -mal_export void TRACEtable(BAT **r); +mal_export int TRACEtable(BAT **r); mal_export int initTrace(void); mal_export str cleanupTraces(void); mal_export BAT *getTrace(const char *ev); 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 @@ -4202,7 +4202,8 @@ dump_trace(Client cntxt, MalBlkPtr mb, M (void) cntxt; (void) mb; - TRACEtable(t); + if (TRACEtable(t) != 13) + throw(SQL, "sql.dump_trace", "3F000!Profiler not started"); for(i=0; i< 13; i++){ id = t[i]->batCacheid; *getArgReference_bat(stk, pci, i) = id; 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 @@ -4951,7 +4951,7 @@ rel_frame(mvc *sql, symbol *frame, list * aa = project (a) [ x, y, r = rank_op(diff(x) (marks a new partition), rediff(diff(x), y) (marks diff value with in partition)), z, w, v ] * project(aa) [ aa.x, aa.y, aa.r ] -- only keep current output list * bb = project (b) [ x, y, a = aggr_op(z, diff(y), rediff(diff(y), x)), z, w, v ] - * project(j) [ bb.x, bb.y, bb.a ] -- only keep current output list + * project(bb) [ bb.x, bb.y, bb.a ] -- only keep current output list */ static sql_exp * rel_rankop(mvc *sql, sql_rel **rel, symbol *se, int f) @@ -4967,7 +4967,7 @@ rel_rankop(mvc *sql, sql_rel **rel, symb sql_rel *r = *rel, *p; list *gbe = NULL, *obe = NULL, *fbe = NULL, *args, *types; sql_schema *s = sql->session->schema; - int distinct = 0; + int distinct = 0, project_added = 0; if (window_function->token == SQL_RANK) { aname = qname_fname(window_function->data.lval); @@ -4990,6 +4990,10 @@ rel_rankop(mvc *sql, sql_rel **rel, symb } /* window operations are only allowed in the projection */ + if (r && r->op != op_project) { + *rel = r = rel_project(sql->sa, r, rel_projections(sql, r, NULL, 1, 1)); + project_added = 1; + } if (f != sql_sel || !r || r->op != op_project || is_processed(r)) return sql_error(sql, 02, "OVER: only possible within the selection"); @@ -5110,6 +5114,10 @@ rel_rankop(mvc *sql, sql_rel **rel, symb set_processed(p); append(p->exps, e); e = rel_lastexp(sql, p); + if (project_added) { + append(r->exps, e); + e = rel_lastexp(sql, r); + } return e; } diff --git a/sql/test/BugTracker-2015/Tests/sys_tracelog.Bug-3887.stable.err b/sql/test/BugTracker-2015/Tests/sys_tracelog.Bug-3887.stable.err --- a/sql/test/BugTracker-2015/Tests/sys_tracelog.Bug-3887.stable.err +++ b/sql/test/BugTracker-2015/Tests/sys_tracelog.Bug-3887.stable.err @@ -27,7 +27,11 @@ stderr of test 'sys_tracelog.Bug-3887` i # cmdline opt gdk_debug = 536870922 -# 14:11:11 > -# 14:11:11 > "Done." -# 14:11:11 > +MAPI = (monetdb) /var/tmp/mtest-25081/.s.monetdb.33961 +QUERY = select count(*) from "sys"."tracelog"; +ERROR = !Profiler not started +# 12:53:39 > +# 12:53:39 > "Done." +# 12:53:39 > + diff --git a/sql/test/BugTracker-2015/Tests/sys_tracelog.Bug-3887.stable.out b/sql/test/BugTracker-2015/Tests/sys_tracelog.Bug-3887.stable.out --- a/sql/test/BugTracker-2015/Tests/sys_tracelog.Bug-3887.stable.out +++ b/sql/test/BugTracker-2015/Tests/sys_tracelog.Bug-3887.stable.out @@ -73,12 +73,6 @@ Ready. # 14:11:11 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-17906" "--port=36024" # 14:11:11 > -#select count(*) from "sys"."tracelog"; -% .L1 # table_name -% L1 # name -% wrd # type -% 1 # length -[ 0 ] # 14:11:11 > # 14:11:11 > "Done." _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list