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