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

Reply via email to