Changeset: bfc05edc1fa1 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bfc05edc1fa1
Added Files:
sql/test/BugTracker-2016/Tests/dce.Bug-6114.sql
sql/test/BugTracker-2016/Tests/dce.Bug-6114.stable.err
sql/test/BugTracker-2016/Tests/dce.Bug-6114.stable.out
sql/test/BugTracker-2016/Tests/dce2.Bug-6115.sql
sql/test/BugTracker-2016/Tests/dce2.Bug-6115.stable.err
sql/test/BugTracker-2016/Tests/dce2.Bug-6115.stable.out
sql/test/BugTracker-2016/Tests/semijoin.Bug-6116.sql
sql/test/BugTracker-2016/Tests/semijoin.Bug-6116.stable.err
sql/test/BugTracker-2016/Tests/semijoin.Bug-6116.stable.out
sql/test/BugTracker-2016/Tests/split_project.Bug-6117.sql
sql/test/BugTracker-2016/Tests/split_project.Bug-6117.stable.err
sql/test/BugTracker-2016/Tests/split_project.Bug-6117.stable.out
Modified Files:
sql/jdbc/tests/Tests/BugDatabaseMetaData_Bug_3356.stable.out
sql/jdbc/tests/Tests/Test_JdbcClient.stable.out
sql/server/rel_optimizer.c
sql/test/BugDay_2005-10-06_2.9.3/Tests/not_null.SF-933194.stable.out
sql/test/BugDay_2005-10-06_2.9.3/Tests/type_dump_test.SF-989257.stable.out
sql/test/BugTracker-2016/Tests/All
sql/test/BugTracker-2016/Tests/catalog_name_qualifier.Bug-3948.stable.out
sql/test/BugTracker-2016/Tests/fk-smaller-pk.Bug-3983.stable.out
sql/test/BugTracker-2016/Tests/ifthenelse-void.Bug-6075.stable.out
sql/test/BugTracker-2016/Tests/storagemodel.stable.out
sql/test/BugTracker-2016/Tests/storagemodel.stable.out.32bit
sql/test/BugTracker-2016/Tests/storagemodel.stable.out.int128
sql/test/BugTracker/Tests/authorization.SF-1430616.stable.out
sql/test/BugTracker/Tests/explain.SF-1739353.stable.out
Branch: Jun2016
Log Message:
fixes for bugs 6114, 6115, 6116 and 6117
improved dead code elimination for cases with references to sub queries (ie its
a dag)
push simple select like expressions downs
split_project test is added here but only crashes in the dec2016/default.
diffs (truncated from 2218 to 300 lines):
diff --git a/sql/jdbc/tests/Tests/BugDatabaseMetaData_Bug_3356.stable.out
b/sql/jdbc/tests/Tests/BugDatabaseMetaData_Bug_3356.stable.out
--- a/sql/jdbc/tests/Tests/BugDatabaseMetaData_Bug_3356.stable.out
+++ b/sql/jdbc/tests/Tests/BugDatabaseMetaData_Bug_3356.stable.out
@@ -21,21 +21,21 @@ stdout of test 'BugDatabaseMetaData_Bug_
Ready.
-# 17:27:28 >
-# 17:27:28 > "./BugDatabaseMetaData_Bug_3356.SQL.sh"
"BugDatabaseMetaData_Bug_3356"
-# 17:27:28 >
+# 22:06:18 >
+# 22:06:18 > "./BugDatabaseMetaData_Bug_3356.SQL.sh"
"BugDatabaseMetaData_Bug_3356"
+# 22:06:18 >
-# 17:27:28 >
-# 17:27:28 > java BugDatabaseMetaData_Bug_3356
"jdbc:monetdb://madrid:34631/mTests_sql_jdbc_tests?user=monetdb&password=monetdb"
-# 17:27:28 >
+# 22:06:18 >
+# 22:06:18 > java BugDatabaseMetaData_Bug_3356
"jdbc:monetdb://localhost:39265/mTests_sql_jdbc_tests?user=monetdb&password=monetdb"
+# 22:06:18 >
-null
-null
-null
-null
+_tables
+_tables
+YES
+YES
-# 17:27:28 >
-# 17:27:28 > "Done."
-# 17:27:28 >
+# 22:06:18 >
+# 22:06:18 > "Done."
+# 22:06:18 >
diff --git a/sql/jdbc/tests/Tests/Test_JdbcClient.stable.out
b/sql/jdbc/tests/Tests/Test_JdbcClient.stable.out
--- a/sql/jdbc/tests/Tests/Test_JdbcClient.stable.out
+++ b/sql/jdbc/tests/Tests/Test_JdbcClient.stable.out
@@ -126,11 +126,11 @@ CREATE SCHEMA "sys";
SET SCHEMA "sys";
CREATE TABLE "allnewtriples" (
- "id" int NOT NULL,
- "subject" int NOT NULL,
- "predicate" int NOT NULL,
- "object" int NOT NULL,
- "explicit" boolean NOT NULL,
+ "id" INTEGER NOT NULL,
+ "subject" INTEGER NOT NULL,
+ "predicate" INTEGER NOT NULL,
+ "object" INTEGER NOT NULL,
+ "explicit" BOOLEAN NOT NULL,
CONSTRAINT "allnewtriples_id_pkey" PRIMARY KEY ("id"),
CONSTRAINT "unique_key" UNIQUE ("subject", "predicate", "object")
);
@@ -147,10 +147,10 @@ INSERT INTO "allnewtriples" VALUES (6, 2
INSERT INTO "allnewtriples" VALUES (7, 2, 2, 2, false);
CREATE TABLE "foreign" (
- "id" int NOT NULL,
- "subject" int NOT NULL,
- "predicate" int NOT NULL,
- "object" int NOT NULL,
+ "id" INTEGER NOT NULL,
+ "subject" INTEGER NOT NULL,
+ "predicate" INTEGER NOT NULL,
+ "object" INTEGER NOT NULL,
CONSTRAINT "foreign_id_fkey" FOREIGN KEY ("id") REFERENCES
"sys"."allnewtriples" ("id"),
CONSTRAINT "foreign_subject_predicate_object_fkey" FOREIGN KEY
("subject", "predicate", "object") REFERENCES "sys"."allnewtriples" ("subject",
"predicate", "object")
);
@@ -164,11 +164,11 @@ INSERT INTO "foreign" VALUES (6, 1, 2, 1
INSERT INTO "foreign" VALUES (7, 1, 1, 2);
CREATE TABLE "triples" (
- "id" int NOT NULL,
- "subject" int NOT NULL,
- "predicate" int NOT NULL,
- "object" int NOT NULL,
- "explicit" boolean NOT NULL,
+ "id" INTEGER NOT NULL,
+ "subject" INTEGER NOT NULL,
+ "predicate" INTEGER NOT NULL,
+ "object" INTEGER NOT NULL,
+ "explicit" BOOLEAN NOT NULL,
CONSTRAINT "triples_subject_predicate_object_unique" UNIQUE ("subject",
"predicate", "object")
);
CREATE INDEX "triples_object_idx" ON "triples" ("object");
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
@@ -3829,11 +3829,35 @@ rel_push_join_down(int *changes, mvc *sq
* semijoin( join(A, B) [ A.x == B.y ], C ) [ A.z == C.c ]
* ->
* join( semijoin(A, C) [ A.z == C.c ], B ) [ A.x == B.y ]
+ *
+ * also push simple expressions of a semijoin down if they only
+ * involve the left sided of the semijoin.
*/
static sql_rel *
rel_push_semijoin_down(int *changes, mvc *sql, sql_rel *rel)
{
(void)*changes;
+
+ /* first push down the expressions involving only A */
+ if (is_semi(rel->op) && rel->exps && rel->l) {
+ list *exps = rel->exps, *nexps = sa_list(sql->sa);
+ node *n;
+
+ for(n = exps->h; n; n = n->next) {
+ sql_exp *sje = n->data;
+
+ if (n != exps->h &&
+ !is_complex_exp(sje->flag) &&
+ rel_has_exp(rel->l, sje->l) >= 0 &&
+ rel_has_exp(rel->l, sje->r) >= 0) {
+ rel->l = rel_select(sql->sa, rel->l, NULL);
+ rel_select_add_exp(sql->sa, rel->l, sje);
+ } else {
+ append(nexps, sje);
+ }
+ }
+ rel->exps = nexps;
+ }
if (is_semi(rel->op) && rel->exps && rel->l) {
operator_type op = rel->op, lop;
node *n;
@@ -7892,7 +7916,7 @@ static sql_rel *
if (gp.cnt[op_left] || gp.cnt[op_right] || gp.cnt[op_full])
rel = rewrite_topdown(sql, rel, &rel_split_outerjoin, &changes);
- if (gp.cnt[op_select]) {
+ if (gp.cnt[op_select] || gp.cnt[op_semi]) {
/* only once */
if (level <= 0)
rel = rewrite(sql, rel, &rel_merge_rse, &changes);
diff --git
a/sql/test/BugDay_2005-10-06_2.9.3/Tests/not_null.SF-933194.stable.out
b/sql/test/BugDay_2005-10-06_2.9.3/Tests/not_null.SF-933194.stable.out
--- a/sql/test/BugDay_2005-10-06_2.9.3/Tests/not_null.SF-933194.stable.out
+++ b/sql/test/BugDay_2005-10-06_2.9.3/Tests/not_null.SF-933194.stable.out
@@ -26,9 +26,9 @@ Ready.
Operation successful
CREATE TABLE "sys"."test" (
- "id1" int,
- "id2" int NOT NULL,
- "id3" int
+ "id1" INTEGER,
+ "id2" INTEGER NOT NULL,
+ "id3" INTEGER
);
Operation successful
diff --git
a/sql/test/BugDay_2005-10-06_2.9.3/Tests/type_dump_test.SF-989257.stable.out
b/sql/test/BugDay_2005-10-06_2.9.3/Tests/type_dump_test.SF-989257.stable.out
--- a/sql/test/BugDay_2005-10-06_2.9.3/Tests/type_dump_test.SF-989257.stable.out
+++ b/sql/test/BugDay_2005-10-06_2.9.3/Tests/type_dump_test.SF-989257.stable.out
@@ -26,27 +26,27 @@ Ready.
Operation successful
CREATE TABLE "sys"."voyages" (
- "number" int ,
- "number_sup" char (1),
- "trip" int ,
- "trip_sup" char (1),
- "boatname" varchar(50),
- "master" varchar(50),
- "tonnage" int ,
- "type_of_boat" varchar(30),
- "built" varchar(15),
- "bought" varchar(15),
- "hired" varchar(15),
- "yard" char (1),
- "chamber" char (1),
- "departure_date" varchar(15),
- "departure_harbour" varchar(30),
- "cape_arrival" varchar(15),
- "cape_departure" varchar(15),
- "arrival_date" varchar(15),
- "arrival_harbour" varchar(30),
- "next_voyage" int ,
- "particulars" varchar(507)
+ "number" INTEGER,
+ "number_sup" CHAR(1),
+ "trip" INTEGER,
+ "trip_sup" CHAR(1),
+ "boatname" VARCHAR(50),
+ "master" VARCHAR(50),
+ "tonnage" INTEGER,
+ "type_of_boat" VARCHAR(30),
+ "built" VARCHAR(15),
+ "bought" VARCHAR(15),
+ "hired" VARCHAR(15),
+ "yard" CHAR(1),
+ "chamber" CHAR(1),
+ "departure_date" VARCHAR(15),
+ "departure_harbour" VARCHAR(30),
+ "cape_arrival" VARCHAR(15),
+ "cape_departure" VARCHAR(15),
+ "arrival_date" VARCHAR(15),
+ "arrival_harbour" VARCHAR(30),
+ "next_voyage" INTEGER,
+ "particulars" VARCHAR(507)
);
# 12:41:42 >
diff --git a/sql/test/BugTracker-2016/Tests/All
b/sql/test/BugTracker-2016/Tests/All
--- a/sql/test/BugTracker-2016/Tests/All
+++ b/sql/test/BugTracker-2016/Tests/All
@@ -54,3 +54,7 @@ assert-on-table-producing-function.Bug-6
assert-on-push-project-up.Bug-6077
assert-on-project.Bug-6078
crash.Bug-6081
+dce.Bug-6114
+dce2.Bug-6115
+semijoin.Bug-6116
+split_project.Bug-6117
diff --git
a/sql/test/BugTracker-2016/Tests/catalog_name_qualifier.Bug-3948.stable.out
b/sql/test/BugTracker-2016/Tests/catalog_name_qualifier.Bug-3948.stable.out
--- a/sql/test/BugTracker-2016/Tests/catalog_name_qualifier.Bug-3948.stable.out
+++ b/sql/test/BugTracker-2016/Tests/catalog_name_qualifier.Bug-3948.stable.out
@@ -131,12 +131,12 @@ Ready.
[ 21 ]
#drop table sys.t3948;
#select * from dependencies_tables_on_views();
-% ., ., . # table_name
+% .L1, .L1, .L1 # table_name
% sch, usr, dep_type # name
% varchar, varchar, varchar # type
% 0, 0, 0 # length
#select * from sys.dependencies_tables_on_views();
-% ., ., . # table_name
+% .L1, .L1, .L1 # table_name
% sch, usr, dep_type # name
% varchar, varchar, varchar # type
% 0, 0, 0 # length
diff --git a/sql/test/BugTracker-2016/Tests/dce.Bug-6114.sql
b/sql/test/BugTracker-2016/Tests/dce.Bug-6114.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2016/Tests/dce.Bug-6114.sql
@@ -0,0 +1,260 @@
+
+/* Relations */
+CREATE TABLE comments(
+ id BIGINT NOT NULL PRIMARY KEY,
+ creationDate TIMESTAMP(3) WITH TIME ZONE NOT NULL,
+ locationIP VARCHAR(40) NOT NULL,
+ browserUsed VARCHAR(40) NOT NULL,
+ content VARCHAR(2000) NOT NULL,
+ length INT NOT NULL,
+ creator BIGINT NOT NULL,
+ place_id BIGINT NOT NULL,
+ replyOfPost BIGINT,
+ replyOfComment BIGINT
+);
+
+CREATE TABLE comment_tags(
+ comment_id BIGINT NOT NULL,
+ tag_id BIGINT NOT NULL,
+ PRIMARY KEY(comment_id, tag_id)
+);
+
+CREATE TABLE forums(
+ id BIGINT NOT NULL PRIMARY KEY,
+ title VARCHAR(80) NOT NULL,
+ creationDate TIMESTAMP(3) WITH TIME ZONE NOT NULL,
+ moderator BIGINT /*though it seems that all generated tuples have always a
moderator */
+);
+
+CREATE TABLE forum_persons(
+ forum_id BIGINT NOT NULL,
+ person_id BIGINT NOT NULL,
+ joinDate TIMESTAMP(3) WITH TIME ZONE NOT NULL,
+ PRIMARY KEY(forum_id, person_id)
+);
+
+CREATE TABLE forum_tags(
+ forum_id BIGINT NOT NULL,
+ tag_id BIGINT NOT NULL,
+ PRIMARY KEY(forum_id, tag_id)
+);
+
+CREATE TABLE friends(
+ src BIGINT NOT NULL,
+ dst BIGINT NOT NULL,
+ creationDate TIMESTAMP(3) WITH TIME ZONE NOT NULL,
+ PRIMARY KEY(src, dst)
+);
+
+CREATE TABLE organisations(
+ id BIGINT NOT NULL PRIMARY KEY,
+ "type" VARCHAR(40) NOT NULL, /* university or company */
+ name VARCHAR(160) NOT NULL,
+ url VARCHAR(2000) NOT NULL,
+ place_id BIGINT NOT NULL
+);
+
+CREATE TABLE persons(
+ id BIGINT NOT NULL PRIMARY KEY,
+ firstName VARCHAR(40) NOT NULL ,
+ lastName VARCHAR(40) NOT NULL,
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list