Changeset: 12aaa7dcbdf6 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=12aaa7dcbdf6
Modified Files:
sql/benchmarks/tpch/load.sh
sql/server/rel_distribute.c
sql/server/rel_select.c
Branch: default
Log Message:
rel_districute.c: protect non distributed queries
rel_select.c:rel_copy: also copy arguments of table function
diffs (132 lines):
diff --git a/sql/benchmarks/tpch/load.sh b/sql/benchmarks/tpch/load.sh
--- a/sql/benchmarks/tpch/load.sh
+++ b/sql/benchmarks/tpch/load.sh
@@ -35,8 +35,8 @@ SF='sf-0.01'
#SF='sf-5'
dir=`echo $SF | tr '[a-z]' '[A-Z]'`
-#$SQL < c.sql-dec-primary-foreign
-$SQL < c.sql-dec
-cat load-$SF-LOCKED.sql$T | sed -e s+PWD+$PWD/$dir+ | $SQL
-#cat load-$SF.sql$T | sed -e s+PWD+$PWD/$dir+
+$SQL < c.sql-dec-primary-foreign
+#$SQL < c.sql-dec
+#cat load-$SF-LOCKED.sql$T | sed -e s+PWD+$PWD/$dir+ | $SQL
+cat load-$SF.sql$T | sed -e s+PWD+$PWD/$dir+ | $SQL
#$SQL < alter.sql
diff --git a/sql/server/rel_distribute.c b/sql/server/rel_distribute.c
--- a/sql/server/rel_distribute.c
+++ b/sql/server/rel_distribute.c
@@ -30,6 +30,57 @@
#include "sql_env.h"
+static int
+has_remote_or_replica( sql_rel *rel )
+{
+ if (!rel)
+ return 0;
+
+ switch (rel->op) {
+ case op_basetable: {
+ sql_table *t = rel->l;
+
+ if (isReplicaTable(t) || isRemote(t))
+ return 1;
+ }
+ case op_table:
+ break;
+ case op_join:
+ case op_left:
+ case op_right:
+ case op_full:
+
+ case op_semi:
+ case op_anti:
+
+ case op_union:
+ case op_inter:
+ case op_except:
+ if (has_remote_or_replica( rel->l ) ||
+ has_remote_or_replica( rel->r ))
+ return 1;
+ break;
+ case op_project:
+ case op_select:
+ case op_groupby:
+ case op_topn:
+ case op_sample:
+ if (has_remote_or_replica( rel->l ))
+ return 1;
+ break;
+ case op_ddl:
+ if (has_remote_or_replica( rel->l ))
+ return 1;
+ case op_insert:
+ case op_update:
+ case op_delete:
+ if (rel->r && has_remote_or_replica( rel->r ))
+ return 1;
+ break;
+ }
+ return 0;
+}
+
static sql_rel *
rewrite_replica( mvc *sql, sql_rel *rel, sql_table *t, sql_table *p)
{
@@ -53,12 +104,16 @@ replica(mvc *sql, sql_rel *rel, char *ur
return rel;
if (rel_is_ref(rel)) {
- sql_rel *nrel = rel_copy(sql->sa, rel);
+ if (has_remote_or_replica(rel)) {
+ sql_rel *nrel = rel_copy(sql->sa, rel);
- if (nrel && rel->p)
- nrel->p = prop_copy(sql->sa, rel->p);
- rel_destroy(rel);
- rel = nrel;
+ if (nrel && rel->p)
+ nrel->p = prop_copy(sql->sa, rel->p);
+ rel_destroy(rel);
+ rel = nrel;
+ } else {
+ return rel;
+ }
}
switch (rel->op) {
case op_basetable: {
@@ -130,12 +185,16 @@ distribute(mvc *sql, sql_rel *rel)
return rel;
if (rel_is_ref(rel)) {
- sql_rel *nrel = rel_copy(sql->sa, rel);
+ if (has_remote_or_replica(rel)) {
+ sql_rel *nrel = rel_copy(sql->sa, rel);
- if (nrel && rel->p)
- nrel->p = prop_copy(sql->sa, rel->p);
- rel_destroy(rel);
- rel = nrel;
+ if (nrel && rel->p)
+ nrel->p = prop_copy(sql->sa, rel->p);
+ rel_destroy(rel);
+ rel = nrel;
+ } else {
+ return rel;
+ }
}
switch (rel->op) {
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
@@ -405,6 +405,7 @@ rel_copy( sql_allocator *sa, sql_rel *i
break;
case op_table:
rel->l = i->l;
+ rel->r = i->r;
break;
case op_groupby:
rel->l = rel_copy(sa, i->l);
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list