[prev in list] [next in list] [prev in thread] [next in thread] 

List:       monetdb-checkins
Subject:    MonetDB: default - fixed typo (ie properly pass 'nil' == 'nil' s...
From:       Niels Nes <commits () monetdb ! org>
Date:       2015-01-28 14:59:48
Message-ID: hg.f6971e8244d5.1422457188.6315528441665844383 () monetdb2 ! cwi-incubator ! nl
[Download RAW message or body]

Changeset: f6971e8244d5 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f6971e8244d5
Modified Files:
	monetdb5/optimizer/opt_prelude.c
	monetdb5/optimizer/opt_prelude.h
	monetdb5/optimizer/opt_support.c
	sql/backends/monet5/rel_bin.c
	sql/backends/monet5/sql_gencode.c
	sql/benchmarks/ssbm/Tests/01-explain.stable.out.int128
	sql/benchmarks/ssbm/Tests/02-explain.stable.out.int128
	sql/benchmarks/ssbm/Tests/03-explain.stable.out.int128
	sql/benchmarks/ssbm/Tests/04-explain.stable.out.int128
	sql/benchmarks/ssbm/Tests/05-explain.stable.out.int128
	sql/benchmarks/ssbm/Tests/06-explain.stable.out.int128
	sql/benchmarks/ssbm/Tests/07-explain.stable.out.int128
	sql/benchmarks/ssbm/Tests/08-explain.stable.out.int128
	sql/benchmarks/ssbm/Tests/09-explain.stable.out.int128
	sql/benchmarks/ssbm/Tests/10-explain.stable.out.int128
	sql/benchmarks/ssbm/Tests/11-explain.stable.out.int128
	sql/benchmarks/ssbm/Tests/12-explain.stable.out.int128
	sql/benchmarks/ssbm/Tests/13-explain.stable.out.int128
	sql/benchmarks/tpch/Tests/02-explain.stable.out
	sql/benchmarks/tpch/Tests/03-explain.stable.out.int128
	sql/benchmarks/tpch/Tests/04-explain.stable.out
	sql/benchmarks/tpch/Tests/05-explain.stable.out.int128
	sql/benchmarks/tpch/Tests/07-explain.stable.out.int128
	sql/benchmarks/tpch/Tests/08-explain.stable.out.int128
	sql/benchmarks/tpch/Tests/09-explain.stable.out.int128
	sql/benchmarks/tpch/Tests/10-explain.stable.out.int128
	sql/benchmarks/tpch/Tests/11-explain.stable.out.int128
	sql/benchmarks/tpch/Tests/12-explain.stable.out.int128
	sql/benchmarks/tpch/Tests/13-explain.stable.out
	sql/benchmarks/tpch/Tests/14-explain.stable.out.int128
	sql/benchmarks/tpch/Tests/15-explain.stable.out.int128
	sql/benchmarks/tpch/Tests/16-explain.stable.out
	sql/benchmarks/tpch/Tests/17-explain.stable.out.int128
	sql/benchmarks/tpch/Tests/18-explain.stable.out.int128
	sql/benchmarks/tpch/Tests/19-explain.stable.out.int128
	sql/benchmarks/tpch/Tests/20-explain.stable.out.int128
	sql/benchmarks/tpch/Tests/21-explain.stable.out
	sql/benchmarks/tpch/Tests/22-explain.stable.out.int128
Branch: default
Log Message:

fixed typo (ie properly pass 'nil' == 'nil' semantics, fixes old  bug 3040 (null \
except null) properly find sub*joins (now including theta,band,anti and range joins)


diffs (truncated from 3305 to 300 lines):

diff --git a/monetdb5/optimizer/opt_prelude.c b/monetdb5/optimizer/opt_prelude.c
--- a/monetdb5/optimizer/opt_prelude.c
+++ b/monetdb5/optimizer/opt_prelude.c
@@ -121,6 +121,7 @@ str thetajoinRef;
 str subjoinRef;
 str subantijoinRef;
 str subbandjoinRef;
+str subrangejoinRef;
 str subthetajoinRef;
 str kdifferenceRef;
 str kunionRef;
@@ -373,6 +374,7 @@ void optimizerInit(void)
 	subjoinRef = putName("subjoin",7);
 	subantijoinRef = putName("subantijoin",11);
 	subbandjoinRef = putName("subbandjoin",11);
+	subrangejoinRef = putName("subrangejoin",12);
 	subthetajoinRef = putName("subthetajoin",12);
 	jsonRef = putName("json",4);
 	kdifferenceRef= putName("kdifference",11);
diff --git a/monetdb5/optimizer/opt_prelude.h b/monetdb5/optimizer/opt_prelude.h
--- a/monetdb5/optimizer/opt_prelude.h
+++ b/monetdb5/optimizer/opt_prelude.h
@@ -119,6 +119,7 @@ opt_export  str thetajoinRef;
 opt_export  str subjoinRef;
 opt_export  str subantijoinRef;
 opt_export  str subbandjoinRef;
+opt_export  str subrangejoinRef;
 opt_export  str subthetajoinRef;
 opt_export  str kdifferenceRef;
 opt_export  str kunionRef;
diff --git a/monetdb5/optimizer/opt_support.c b/monetdb5/optimizer/opt_support.c
--- a/monetdb5/optimizer/opt_support.c
+++ b/monetdb5/optimizer/opt_support.c
@@ -878,14 +878,12 @@ int isDiffOp(InstrPtr p){
 int isMatJoinOp(InstrPtr p){
 	return (getModuleId(p) == algebraRef &&
                 (getFunctionId(p) == crossRef ||
+                 getFunctionId(p) == joinRef ||
                  getFunctionId(p) == subjoinRef ||
-                 getFunctionId(p) == joinRef ||
-                 getFunctionId(p) == antijoinRef || /* is not mat save */
                  getFunctionId(p) == subantijoinRef || /* is not mat save */
-                 getFunctionId(p) == thetajoinRef ||
                  getFunctionId(p) == subthetajoinRef ||
-                 getFunctionId(p) == bandjoinRef ||
-                 getFunctionId(p) == subbandjoinRef)
+                 getFunctionId(p) == subbandjoinRef ||
+                 getFunctionId(p) == subrangejoinRef)
 		);
 }
 
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -1996,7 +1996,7 @@ rel2bin_except( mvc *sql, sql_rel *rel, 
 
 	/* now find the matching groups */
 
-	/* TODO change to leftjoin semantics to keep those in A not in B */
+	/* TODO change to left outer join semantics to keep those in A not in B */
 	/* would need outerjoin eqjoin and outer project code, cleans up following mess */
 	for (n = left->op4.lval->h, m = right->op4.lval->h; n && m; n = n->next, m = \
m->next) {  stmt *l = column(sql->sa, n->data);
diff --git a/sql/backends/monet5/sql_gencode.c b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -1253,10 +1253,10 @@ static int
 					return -1;
 				k = getDestVar(q);
 			} else {
-				char *cmd = "subselect";
+				char *cmd = subselectRef;
 
 				if (s->flag != cmp_equal && s->flag != cmp_notequal)
-					cmd = "thetasubselect";
+					cmd = thetasubselectRef;
 
 				if (get_cmp(s) == cmp_filter) {
 					node *n;
@@ -1304,7 +1304,7 @@ static int
 
 				switch (s->flag) {
 				case cmp_equal:{
-					q = newStmt1(mb, algebraRef, cmd);
+					q = newStmt2(mb, algebraRef, cmd);
 					q = pushArgument(mb, q, l);
 					if (sub > 0)
 						q = pushArgument(mb, q, sub);
@@ -1318,7 +1318,7 @@ static int
 					break;
 				}
 				case cmp_notequal:{
-					q = newStmt1(mb, algebraRef, cmd);
+					q = newStmt2(mb, algebraRef, cmd);
 					q = pushArgument(mb, q, l);
 					if (sub > 0)
 						q = pushArgument(mb, q, sub);
@@ -1332,7 +1332,7 @@ static int
 					break;
 				}
 				case cmp_lt:
-					q = newStmt1(mb, algebraRef, cmd);
+					q = newStmt2(mb, algebraRef, cmd);
 					q = pushArgument(mb, q, l);
 					if (sub > 0)
 						q = pushArgument(mb, q, sub);
@@ -1342,7 +1342,7 @@ static int
 						return -1;
 					break;
 				case cmp_lte:
-					q = newStmt1(mb, algebraRef, cmd);
+					q = newStmt2(mb, algebraRef, cmd);
 					q = pushArgument(mb, q, l);
 					if (sub > 0)
 						q = pushArgument(mb, q, sub);
@@ -1352,7 +1352,7 @@ static int
 						return -1;
 					break;
 				case cmp_gt:
-					q = newStmt1(mb, algebraRef, cmd);
+					q = newStmt2(mb, algebraRef, cmd);
 					q = pushArgument(mb, q, l);
 					if (sub > 0)
 						q = pushArgument(mb, q, sub);
@@ -1362,7 +1362,7 @@ static int
 						return -1;
 					break;
 				case cmp_gte:
-					q = newStmt1(mb, algebraRef, cmd);
+					q = newStmt2(mb, algebraRef, cmd);
 					q = pushArgument(mb, q, l);
 					if (sub > 0)
 						q = pushArgument(mb, q, sub);
@@ -1389,7 +1389,7 @@ static int
 			int r1 = -1, r2 = -1, rs = 0;
 			bit anti = (s->flag & ANTI) ? TRUE : FALSE;
 			bit swapped = (s->flag & SWAPPED) ? TRUE : FALSE;
-			char *cmd = (s->type == st_uselect2) ? "subselect" : "subrangejoin";
+			char *cmd = (s->type == st_uselect2) ? subselectRef : subrangejoinRef;
 			int sub = -1;
 
 			if (l < 0)
@@ -1476,7 +1476,7 @@ static int
 				if ((r2 = _dumpstmt(sql, mb, s->op3)) < 0)
 					return -1;
 			}
-			q = newStmt1(mb, algebraRef, cmd);
+			q = newStmt2(mb, algebraRef, cmd);
 			if (s->type == st_join2)
 				q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
 			q = pushArgument(mb, q, l);
@@ -1641,7 +1641,7 @@ static int
 				q = pushArgument(mb, q, r);
 				q = pushNil(mb, q, TYPE_bat);
 				q = pushNil(mb, q, TYPE_bat);
-				q = pushBit(mb, q, TRUE);
+				q = pushBit(mb, q, FALSE);
 				q = pushNil(mb, q, TYPE_lng);
 				if (q == NULL)
 					return -1;
@@ -1653,7 +1653,7 @@ static int
 				q = pushArgument(mb, q, r);
 				q = pushNil(mb, q, TYPE_bat);
 				q = pushNil(mb, q, TYPE_bat);
-				q = pushBit(mb, q, FALSE);
+				q = pushBit(mb, q, TRUE);
 				q = pushNil(mb, q, TYPE_lng);
 				if (q == NULL)
 					return -1;
diff --git a/sql/benchmarks/ssbm/Tests/01-explain.stable.out.int128 \
                b/sql/benchmarks/ssbm/Tests/01-explain.stable.out.int128
--- a/sql/benchmarks/ssbm/Tests/01-explain.stable.out.int128
+++ b/sql/benchmarks/ssbm/Tests/01-explain.stable.out.int128
@@ -67,7 +67,7 @@ function user.s2_1{autoCommit=true}(A0:i
     X_103 := algebra.subselect(X_42,X_33,A0,A0,true,true,false);
     X_44 := sql.subdelta(X_100,X_33,X_39,X_101,X_103);
     X_46 := X_44;
-    (X_47,r1_59) := algebra.subjoin(X_32,X_46,nil:BAT,nil:BAT,true,nil:lng);
+    (X_47,r1_59) := algebra.subjoin(X_32,X_46,nil:BAT,nil:BAT,false,nil:lng);
     X_51:bat[:oid,:int]  := sql.bind(X_6,"sys","lineorder","lo_extendedprice",0);
     (X_54,r1_66) := sql.bind(X_6,"sys","lineorder","lo_extendedprice",2);
     X_56:bat[:oid,:int]  := sql.bind(X_6,"sys","lineorder","lo_extendedprice",1);
diff --git a/sql/benchmarks/ssbm/Tests/02-explain.stable.out.int128 \
                b/sql/benchmarks/ssbm/Tests/02-explain.stable.out.int128
--- a/sql/benchmarks/ssbm/Tests/02-explain.stable.out.int128
+++ b/sql/benchmarks/ssbm/Tests/02-explain.stable.out.int128
@@ -67,7 +67,7 @@ function user.s2_1{autoCommit=true}(A0:i
     X_103 := algebra.subselect(X_42,X_33,A0,A0,true,true,false);
     X_44 := sql.subdelta(X_100,X_33,X_39,X_101,X_103);
     X_46 := X_44;
-    (X_47,r1_60) := algebra.subjoin(X_32,X_46,nil:BAT,nil:BAT,true,nil:lng);
+    (X_47,r1_60) := algebra.subjoin(X_32,X_46,nil:BAT,nil:BAT,false,nil:lng);
     X_51:bat[:oid,:int]  := sql.bind(X_7,"sys","lineorder","lo_extendedprice",0);
     (X_54,r1_67) := sql.bind(X_7,"sys","lineorder","lo_extendedprice",2);
     X_56:bat[:oid,:int]  := sql.bind(X_7,"sys","lineorder","lo_extendedprice",1);
diff --git a/sql/benchmarks/ssbm/Tests/03-explain.stable.out.int128 \
                b/sql/benchmarks/ssbm/Tests/03-explain.stable.out.int128
--- a/sql/benchmarks/ssbm/Tests/03-explain.stable.out.int128
+++ b/sql/benchmarks/ssbm/Tests/03-explain.stable.out.int128
@@ -74,7 +74,7 @@ function user.s2_1{autoCommit=true}(A0:i
     X_118 := algebra.subselect(X_43,X_50,A0,A0,true,true,false);
     X_53 := sql.subdelta(X_115,X_50,X_40,X_116,X_118);
     X_54 := X_53;
-    (X_55,r1_71) := algebra.subjoin(X_33,X_54,nil:BAT,nil:BAT,true,nil:lng);
+    (X_55,r1_71) := algebra.subjoin(X_33,X_54,nil:BAT,nil:BAT,false,nil:lng);
     X_59:bat[:oid,:int]  := sql.bind(X_8,"sys","lineorder","lo_extendedprice",0);
     (X_62,r1_78) := sql.bind(X_8,"sys","lineorder","lo_extendedprice",2);
     X_65:bat[:oid,:int]  := sql.bind(X_8,"sys","lineorder","lo_extendedprice",1);
diff --git a/sql/benchmarks/ssbm/Tests/04-explain.stable.out.int128 \
                b/sql/benchmarks/ssbm/Tests/04-explain.stable.out.int128
--- a/sql/benchmarks/ssbm/Tests/04-explain.stable.out.int128
+++ b/sql/benchmarks/ssbm/Tests/04-explain.stable.out.int128
@@ -49,14 +49,14 @@ function user.s2_1{autoCommit=true}(A0:s
     X_16 := sql.projectdelta(X_5,X_8,X_11,r1_11,X_14);
     X_19:bat[:oid,:str]  := sql.bind(X_4,"sys","part","p_category",0);
     X_17:bat[:oid,:oid]  := sql.tid(X_4,"sys","part");
-    X_165 := algebra.subselect(X_19,X_17,A0,A0,true,true,false);
+    X_166 := algebra.subselect(X_19,X_17,A0,A0,true,true,false);
     (X_21,r1_22) := sql.bind(X_4,"sys","part","p_category",2);
-    X_166 := algebra.subselect(r1_22,nil:bat[:oid,:oid],A0,A0,true,true,false);
+    X_167 := algebra.subselect(r1_22,nil:bat[:oid,:oid],A0,A0,true,true,false);
     X_23:bat[:oid,:str]  := sql.bind(X_4,"sys","part","p_category",1);
-    X_168 := algebra.subselect(X_23,X_17,A0,A0,true,true,false);
-    X_24 := sql.subdelta(X_165,X_17,X_21,X_166,X_168);
+    X_169 := algebra.subselect(X_23,X_17,A0,A0,true,true,false);
+    X_24 := sql.subdelta(X_166,X_17,X_21,X_167,X_169);
     X_26 := X_24;
-    (X_27,r1_31) := algebra.subjoin(X_16,X_26,nil:BAT,nil:BAT,true,nil:lng);
+    (X_27,r1_31) := algebra.subjoin(X_16,X_26,nil:BAT,nil:BAT,false,nil:lng);
     X_31:bat[:oid,:oid]  := \
                sql.bind_idxbat(X_4,"sys","lineorder","lineorder_lo_suppkey_fkey",0);
     (X_33,r1_37) := \
                sql.bind_idxbat(X_4,"sys","lineorder","lineorder_lo_suppkey_fkey",2);
     X_37:bat[:oid,:oid]  := \
sql.bind_idxbat(X_4,"sys","lineorder","lineorder_lo_suppkey_fkey",1); @@ -64,54 \
+64,54 @@ function user.s2_1{autoCommit=true}(A0:s  X_39 := \
algebra.leftfetchjoin(X_27,X_38);  X_42:bat[:oid,:str]  := \
sql.bind(X_4,"sys","supplier","s_region",0);  X_40:bat[:oid,:oid]  := \
                sql.tid(X_4,"sys","supplier");
-    X_169 := algebra.subselect(X_42,X_40,A1,A1,true,true,false);
+    X_170 := algebra.subselect(X_42,X_40,A1,A1,true,true,false);
     (X_45,r1_50) := sql.bind(X_4,"sys","supplier","s_region",2);
-    X_170 := algebra.subselect(r1_50,nil:bat[:oid,:oid],A1,A1,true,true,false);
+    X_171 := algebra.subselect(r1_50,nil:bat[:oid,:oid],A1,A1,true,true,false);
     X_48:bat[:oid,:str]  := sql.bind(X_4,"sys","supplier","s_region",1);
-    X_172 := algebra.subselect(X_48,X_40,A1,A1,true,true,false);
-    X_50 := sql.subdelta(X_169,X_40,X_45,X_170,X_172);
+    X_173 := algebra.subselect(X_48,X_40,A1,A1,true,true,false);
+    X_50 := sql.subdelta(X_170,X_40,X_45,X_171,X_173);
     X_52 := X_50;
-    (X_53,r1_61) := algebra.subjoin(X_39,X_52,nil:BAT,nil:BAT,true,nil:lng);
-    X_173 := algebra.leftfetchjoin(X_53,X_27);
-    X_55:bat[:oid,:oid]  := \
                sql.bind_idxbat(X_4,"sys","lineorder","lineorder_lo_orderdate_fkey",0);
                
-    (X_57,r1_65) := \
                sql.bind_idxbat(X_4,"sys","lineorder","lineorder_lo_orderdate_fkey",2);
                
-    X_59:bat[:oid,:oid]  := \
                sql.bind_idxbat(X_4,"sys","lineorder","lineorder_lo_orderdate_fkey",1);
                
-    X_60 := sql.projectdelta(X_5,X_55,X_57,r1_65,X_59);
-    X_61:bat[:oid,:oid]  := algebra.leftfetchjoin(X_173,X_60);
-    X_62:bat[:oid,:oid]  := sql.tid(X_4,"sys","dwdate");
-    (X_65,r1_75) := algebra.subjoin(X_61,X_62,nil:BAT,nil:BAT,true,nil:lng);
-    X_174 := algebra.leftfetchjoin(X_65,X_53);
-    X_69:bat[:oid,:str]  := sql.bind(X_4,"sys","part","p_brand1",0);
-    (X_73,r1_83) := sql.bind(X_4,"sys","part","p_brand1",2);
-    X_76:bat[:oid,:str]  := sql.bind(X_4,"sys","part","p_brand1",1);
-    X_78 := sql.projectdelta(X_24,X_69,X_73,r1_83,X_76);
-    X_79:bat[:oid,:str]  := algebra.leftfetchjoinPath(X_174,r1_31,X_78);
-    X_80:bat[:oid,:int]  := sql.bind(X_4,"sys","dwdate","d_year",0);
-    (X_82,r1_96) := sql.bind(X_4,"sys","dwdate","d_year",2);
-    X_84:bat[:oid,:int]  := sql.bind(X_4,"sys","dwdate","d_year",1);
-    X_85 := sql.projectdelta(X_62,X_80,X_82,r1_96,X_84);
-    X_86 := algebra.leftfetchjoin(r1_75,X_85);
-    (X_87,r1_102,r2_102) := group.subgroup(X_86);
-    (X_90,r1_105,r2_105) := group.subgroupdone(X_79,X_87);
-    X_93 := algebra.leftfetchjoin(r1_105,X_79);
-    X_94 := algebra.leftfetchjoin(r1_105,X_86);
-    X_102:bat[:oid,:int]  := sql.bind(X_4,"sys","lineorder","lo_revenue",0);
-    (X_107,r1_122) := sql.bind(X_4,"sys","lineorder","lo_revenue",2);
-    X_110:bat[:oid,:int]  := sql.bind(X_4,"sys","lineorder","lo_revenue",1);
-    X_112 := sql.projectdelta(X_5,X_102,X_107,r1_122,X_110);
-    X_113:bat[:oid,:int]  := algebra.leftfetchjoinPath(X_174,X_27,X_112);
-    X_114:bat[:oid,:hge]  := aggr.subsum(X_113,X_90,r1_105,true,true);
-    (X_95,r1_110,r2_110) := algebra.subsort(X_94,false,false);
-    (X_99,r1_114,r2_114) := algebra.subsort(X_93,r1_110,r2_110,false,false);
-    X_116 := algebra.leftfetchjoin(r1_114,X_114);
-    X_118 := algebra.leftfetchjoin(r1_114,X_93);
-    X_117 := algebra.leftfetchjoin(r1_114,X_94);
-    X_119 := sql.resultSet(3,1,X_116);
-    sql.rsColumn(X_119,"sys.L1","L1","hugeint",32,0,X_116);
-    sql.rsColumn(X_119,"sys.dwdate","d_year","int",32,0,X_117);
-    sql.rsColumn(X_119,"sys.part","p_brand1","clob",0,0,X_118);
-    X_134 := io.stdout();
-    sql.exportResult(X_134,X_119);
+    (X_53,r1_61) := algebra.subjoin(X_39,X_52,nil:BAT,nil:BAT,false,nil:lng);
+    X_174 := algebra.leftfetchjoin(X_53,X_27);
+    X_56:bat[:oid,:oid]  := \
sql.bind_idxbat(X_4,"sys","lineorder","lineorder_lo_orderdate_fkey",0); +    \
(X_58,r1_66) := sql.bind_idxbat(X_4,"sys","lineorder","lineorder_lo_orderdate_fkey",2);
 +    X_60:bat[:oid,:oid]  := \
sql.bind_idxbat(X_4,"sys","lineorder","lineorder_lo_orderdate_fkey",1); +    X_61 := \
sql.projectdelta(X_5,X_56,X_58,r1_66,X_60); +    X_62:bat[:oid,:oid]  := \
algebra.leftfetchjoin(X_174,X_61); +    X_63:bat[:oid,:oid]  := \
sql.tid(X_4,"sys","dwdate"); +    (X_66,r1_76) := \
algebra.subjoin(X_62,X_63,nil:BAT,nil:BAT,false,nil:lng); +    X_175 := \
algebra.leftfetchjoin(X_66,X_53); +    X_70:bat[:oid,:str]  := \
sql.bind(X_4,"sys","part","p_brand1",0); +    (X_74,r1_84) := \
sql.bind(X_4,"sys","part","p_brand1",2); +    X_77:bat[:oid,:str]  := \
sql.bind(X_4,"sys","part","p_brand1",1); +    X_79 := \
sql.projectdelta(X_24,X_70,X_74,r1_84,X_77); +    X_80:bat[:oid,:str]  := \
algebra.leftfetchjoinPath(X_175,r1_31,X_79); +    X_81:bat[:oid,:int]  := \
sql.bind(X_4,"sys","dwdate","d_year",0); \
_______________________________________________ checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic