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

Reply via email to