Changeset: 8f1cc1e39038 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8f1cc1e39038
Modified Files:
        sql/server/rel_select.c
Branch: sciql
Log Message:

merge


diffs (truncated from 1036 to 300 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -6161,7 +6161,7 @@ void printStack(stream *f, MalBlkPtr mb,
 void printTraceCall(stream *out, MalBlkPtr mb, MalStkPtr stk, int pc, int 
flags);
 str prodRef;
 int profilerAvailable(void);
-void profilerEvent(int idx, MalBlkPtr mb, MalStkPtr stk, int pc, str status);
+void profilerEvent(int idx, MalBlkPtr mb, MalStkPtr stk, int pc, int start);
 str profilerRef;
 str projectRef;
 void promptInstruction(stream *fd, MalBlkPtr mb, MalStkPtr stk, InstrPtr p, 
int flg);
diff --git a/clients/mapiclient/Tests/stethoscope--help.stable.err 
b/clients/mapiclient/Tests/stethoscope--help.stable.err
--- a/clients/mapiclient/Tests/stethoscope--help.stable.err
+++ b/clients/mapiclient/Tests/stethoscope--help.stable.err
@@ -18,25 +18,25 @@ stethoscope [options] +[trace options] {
   -h | --host=<hostname>
 
 The trace options:
-  S = start instruction profiling
-  a = aggregates
-  e = event
-  f = function 
-  o = operation called
-  i = interpreter thread
-  T = time
-  t = ticks
-  c = cpu statistics
-  m = memory resources
+  S = monitor start of instruction profiling
+  a = aggregate clock ticks per instruction
+  e = event counter
+  f = function name and pc counter 
+  o = module.function operation called
+  i = interpreter thread number
+  T = wall colck time
+  t = ticks in microseconds
+  c = cpu statistics (utime,ctime,stime,cstime)
+  m = memory resources as provided by OS
   r = block reads
   w = block writes
   b = bytes read/written
-  s = statement
-  y = argument types
-  p = page faults, context switches
-  u = user
+  s = MAL statement
+  y = MAL argument types
+  p = process statistics, e.g. page faults, context switches
+  u = user id
 
-# 10:36:09 >  
-# 10:36:09 >  Done.
-# 10:36:09 >  
+# 19:24:05 >  
+# 19:24:05 >  "Done."
+# 19:24:05 >  
 
diff --git a/monetdb5/modules/mal/Tests/inspect05.stable.out 
b/monetdb5/modules/mal/Tests/inspect05.stable.out
--- a/monetdb5/modules/mal/Tests/inspect05.stable.out
+++ b/monetdb5/modules/mal/Tests/inspect05.stable.out
@@ -5479,6 +5479,7 @@ end main;
 [ "collect",                     "pattern",      "mdb",          
"(v:any_1):void ",                                                              
                                                        "OPTtraceCall;"         
                                ]
 [ "dump",                        "pattern",      "mdb",          "():void ",   
                                                                                
                                          "MDBdump;"                            
                  ]
 [ "dot",                         "pattern",      "mdb",          
"(M:str,F:str,s:str):void ",                                                    
                                                        "MDBshowFlowGraph;"     
                                ]
+[ "dot",                         "pattern",      "mdb",          "(s:str):void 
",                                                                              
                  "MDBshowFlowGraph;"                     ]
 [ "getDefinition",               "pattern",      "mdb",          
"():bat[:void,:str] ",                                                          
                                                        "MDBgetDefinition;"     
                                ]
 [ "getStackTrace",               "pattern",      "mdb",          
"():bat[:void,:str] ",                                                          
                                                        "MDBStkTrace;"          
                                ]
 [ "getStackFrame",               "pattern",      "mdb",          
"():bat[:str,:str] ",                                                           
                                                        "MDBgetStackFrame;"     
                                ]
diff --git a/monetdb5/modules/mal/Tests/inspect05.stable.out.Windows 
b/monetdb5/modules/mal/Tests/inspect05.stable.out.Windows
--- a/monetdb5/modules/mal/Tests/inspect05.stable.out.Windows
+++ b/monetdb5/modules/mal/Tests/inspect05.stable.out.Windows
@@ -5467,6 +5467,7 @@ end main;
 [ "collect",                     "pattern",      "mdb",          
"(v:any_1):void ",                                                              
                                                        "OPTtraceCall;"         
                                ]
 [ "dump",                        "pattern",      "mdb",          "():void ",   
                                                                                
                                          "MDBdump;"                            
                  ]
 [ "dot",                         "pattern",      "mdb",          
"(M:str,F:str,s:str):void ",                                                    
                                                        "MDBshowFlowGraph;"     
                                ]
+[ "dot",                         "pattern",      "mdb",          "(s:str):void 
",                                                                              
                  "MDBshowFlowGraph;"                     ]
 [ "getDefinition",               "pattern",      "mdb",          
"():bat[:void,:str] ",                                                          
                                                        "MDBgetDefinition;"     
                                ]
 [ "getStackTrace",               "pattern",      "mdb",          
"():bat[:void,:str] ",                                                          
                                                        "MDBStkTrace;"          
                                ]
 [ "getStackFrame",               "pattern",      "mdb",          
"():bat[:str,:str] ",                                                           
                                                        "MDBgetStackFrame;"     
                                ]
diff --git a/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out 
b/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
--- a/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
+++ b/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
@@ -862,7 +862,7 @@ Ready.
 # 11:48:06 >  
 
 % sys.customer,        sys.customer,   sys.orders,     sys.orders,     
sys.orders,     sys.lineitem # table_name
-% c_name,      c_custkey,      o_orderkey,     o_orderdate,    o_totalprice,   
L5 # name
+% c_name,      c_custkey,      o_orderkey,     o_orderdate,    o_totalprice,   
L4 # name
 % varchar,     int,    int,    date,   decimal,        bigint # type
 % 18,  3,      5,      10,     17,     3 # length
 [ "Customer#000000667",        667,    29158,  1995-10-21,     439687.23,      
305     ]
diff --git a/sql/benchmarks/tpch/LOCKED/Tests/18.stable.out 
b/sql/benchmarks/tpch/LOCKED/Tests/18.stable.out
--- a/sql/benchmarks/tpch/LOCKED/Tests/18.stable.out
+++ b/sql/benchmarks/tpch/LOCKED/Tests/18.stable.out
@@ -24,7 +24,7 @@ Ready.
 # 11:48:03 >  
 
 % sys.customer,        sys.customer,   sys.orders,     sys.orders,     
sys.orders,     sys.lineitem # table_name
-% c_name,      c_custkey,      o_orderkey,     o_orderdate,    o_totalprice,   
L5 # name
+% c_name,      c_custkey,      o_orderkey,     o_orderdate,    o_totalprice,   
L4 # name
 % varchar,     int,    int,    date,   decimal,        bigint # type
 % 18,  3,      5,      10,     17,     3 # length
 [ "Customer#000000667",        667,    29158,  1995-10-21,     439687.23,      
305     ]
diff --git a/sql/benchmarks/tpch/Tests/01-22.stable.out 
b/sql/benchmarks/tpch/Tests/01-22.stable.out
--- a/sql/benchmarks/tpch/Tests/01-22.stable.out
+++ b/sql/benchmarks/tpch/Tests/01-22.stable.out
@@ -862,7 +862,7 @@ Ready.
 # 11:48:06 >  
 
 % sys.customer,        sys.customer,   sys.orders,     sys.orders,     
sys.orders,     sys.lineitem # table_name
-% c_name,      c_custkey,      o_orderkey,     o_orderdate,    o_totalprice,   
L5 # name
+% c_name,      c_custkey,      o_orderkey,     o_orderdate,    o_totalprice,   
L4 # name
 % varchar,     int,    int,    date,   decimal,        bigint # type
 % 18,  3,      5,      10,     17,     3 # length
 [ "Customer#000000667",        667,    29158,  1995-10-21,     439687.23,      
305     ]
diff --git a/sql/benchmarks/tpch/Tests/18.stable.out 
b/sql/benchmarks/tpch/Tests/18.stable.out
--- a/sql/benchmarks/tpch/Tests/18.stable.out
+++ b/sql/benchmarks/tpch/Tests/18.stable.out
@@ -24,7 +24,7 @@ Ready.
 # 11:48:03 >  
 
 % sys.customer,        sys.customer,   sys.orders,     sys.orders,     
sys.orders,     sys.lineitem # table_name
-% c_name,      c_custkey,      o_orderkey,     o_orderdate,    o_totalprice,   
L5 # name
+% c_name,      c_custkey,      o_orderkey,     o_orderdate,    o_totalprice,   
L4 # name
 % varchar,     int,    int,    date,   decimal,        bigint # type
 % 18,  3,      5,      10,     17,     3 # length
 [ "Customer#000000667",        667,    29158,  1995-10-21,     439687.23,      
305     ]
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -1037,3 +1037,27 @@ compare_func( comp_type t )
        }
 }
 
+int
+is_identity( sql_exp *e, sql_rel *r)
+{
+       switch(e->type) {
+       case e_column:
+               if (r && is_project(r->op)) {
+                       sql_exp *re = NULL;
+                       if (e->l)
+                               re = exps_bind_column2(r->exps, e->l, e->r);
+                       if (!re && ((char*)e->r)[0] == 'L')
+                               re = exps_bind_column(r->exps, e->r, NULL);
+                       if (re)
+                               return is_identity(re, r->l);
+               }
+               return 0;
+       case e_func: {
+               sql_subfunc *f = e->f;
+               return (strcmp(f->func->base.name, "identity") == 0);
+       }
+       default:
+               return 0;
+       }
+}
+
diff --git a/sql/server/rel_exp.h b/sql/server/rel_exp.h
--- a/sql/server/rel_exp.h
+++ b/sql/server/rel_exp.h
@@ -100,5 +100,6 @@ extern void exps_fix_card( list *exps, i
 extern int exps_intern(list *exps);
 
 extern char *compare_func( comp_type t );
+extern int is_identity( sql_exp *e, sql_rel *r);
 
 #endif /* _REL_EXP_H_ */
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
@@ -482,8 +482,8 @@ exp_count(int *cnt, int seqnr, sql_exp *
                        return 0;
                }
        case e_column:
-               *cnt += 1;
-               return 1;
+               *cnt += 20;
+               return 20;
        case e_atom:
                *cnt += 10;
                return 10;
@@ -1030,9 +1030,8 @@ reorder_join(mvc *sql, sql_rel *rel)
                list_append(rels, rel->r);
                cnt = list_length(exps);
                rel->exps = find_fk(sql->sa, rels, exps);
-               if (list_length(rel->exps) != cnt) {
-                       rel->exps = list_dup(exps, (fdup)NULL);
-               }
+               if (list_length(rel->exps) != cnt) 
+                       rel->exps = order_join_expressions(sql->sa, exps, rels);
        } else { 
                get_relations(rel, rels);
                if (list_length(rels) > 1) {
@@ -1850,7 +1849,7 @@ exps_case_fixup( mvc *sql, list *exps, s
                list *nexps = new_exp_list(sql->sa);
                for( n = exps->h; n; n = n->next) {
                        sql_exp *e = n->data;
-                       if (e->type == e_func && e->l && !is_rank_op(e) ) {
+                       if (is_func(e->type) && e->l && !is_rank_op(e) ) {
                                sql_subfunc *f = e->f;
 
                                if (!f->func->s && !strcmp(f->func->base.name, 
"sql_div")) {
@@ -4923,30 +4922,6 @@ rel_reduce_casts(int *changes, mvc *sql,
 }
 
 static int
-is_identity( sql_exp *e, sql_rel *r)
-{
-       switch(e->type) {
-       case e_column:
-               if (r && is_project(r->op)) {
-                       sql_exp *re = NULL;
-                       if (e->l)
-                               re = exps_bind_column2(r->exps, e->l, e->r);
-                       if (!re && ((char*)e->r)[0] == 'L')
-                               re = exps_bind_column(r->exps, e->r, NULL);
-                       if (re)
-                               return is_identity(re, r->l);
-               }
-               return 0;
-       case e_func: {
-               sql_subfunc *f = e->f;
-               return (strcmp(f->func->base.name, "identity") == 0);
-       }
-       default:
-               return 0;
-       }
-}
-
-static int
 is_identity_of(sql_exp *e, sql_rel *l) 
 {
        if (e->type != e_cmp)
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
@@ -174,7 +174,11 @@ exp_alias_or_copy( mvc *sql, char *tname
        if (settname && !tname && old->type == e_column)
                tname = old->l;
 
-       if (!cname) {
+       if (!cname && exp_name(old) && exp_name(old)[0] == 'L') {
+               ne = exp_column(sql->sa, exp_relname(old), exp_name(old), 
exp_subtype(old), orel->card, has_nil(old), is_intern(old));
+               ne->p = prop_copy(sql->sa, old->p);
+               return ne;
+       } else if (!cname) {
                char name[16], *nme;
                nme = number2name(name, 16, ++sql->label);
 
@@ -2761,12 +2765,87 @@ rel_add_identity(mvc *sql, sql_rel *rel,
        }
        rel = rel_project(sql->sa, rel, rel_projections(sql, rel, NULL, 1, 1));
        e = rel_unop_(sql, rel->exps->h->data, NULL, "identity", card_value);
-       set_intern(e);
+       //set_intern(e);
        rel_project_add_exp(sql, rel, e);
        *exp = exp_label(sql->sa, e, ++sql->label);
        return rel;
 }
 
+static sql_exp *
+find_identity(list *exps, sql_rel *r) 
+{
+       node *n;
+
+       if (!exps)
+               return NULL;
+       for (n = exps->h; n; n = n->next) {
+               sql_exp *e = n->data;
+
+               if (is_identity(e, r)) 
+                       return e;
+       }
+       return NULL;
+}
+
+static sql_exp *
+rel_find_identity(mvc *sql, sql_rel *r, sql_exp *e ) 
+{
+       sql_exp *ne = NULL;
+       node *n;
+
+       switch(r->op) {
+       case op_join:
+       case op_left:
+       case op_right:
+       case op_full:
+               ne = rel_find_identity(sql, r->l, e);
+               if (!ne)
+                       ne = rel_find_identity(sql, r->r, e);
+               return ne;
+       case op_semi:
+       case op_anti:
+       case op_select:
+               ne = rel_find_identity(sql, r->l, e);
+               return ne;
+       case op_topn:
+       case op_sample:
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to