Changeset: 6d456568bc95 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/6d456568bc95 Modified Files: sql/server/rel_rel.c Branch: antipush Log Message:
Merged with default diffs (169 lines): diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c --- a/sql/server/rel_rel.c +++ b/sql/server/rel_rel.c @@ -838,6 +838,7 @@ rel_project(sql_allocator *sa, sql_rel * else rel->nrcols = l->nrcols; rel->single = is_single(l); + rel->grouped = l->grouped; } if (e && !list_empty(e)) { set_processed(rel); @@ -1411,7 +1412,7 @@ static sql_rel * *exp = NULL; return rel; } - if (!is_simple_project(rel->op) || !list_empty(rel->r) || rel_is_ref(rel)) + if (!is_simple_project(rel->op) || need_distinct(rel) || !list_empty(rel->r) || rel_is_ref(rel)) rel = rel_project(sql->sa, rel, exps); e = rel->exps->h->data; e = exp_column(sql->sa, exp_relname(e), exp_name(e), exp_subtype(e), rel->card, has_nil(e), is_unique(e), is_intern(e)); @@ -1428,7 +1429,7 @@ static sql_rel * sql_rel * rel_add_identity(mvc *sql, sql_rel *rel, sql_exp **exp) { - if (rel && is_project(rel->op) && (*exp = exps_find_identity(rel->exps, rel->l)) != NULL) + if (rel && is_project(rel->op) && !need_distinct(rel) && (*exp = exps_find_identity(rel->exps, rel->l)) != NULL) return rel; return _rel_add_identity(sql, rel, exp); } diff --git a/sql/server/sql_query.c b/sql/server/sql_query.c --- a/sql/server/sql_query.c +++ b/sql/server/sql_query.c @@ -19,7 +19,7 @@ sq_create( sql_allocator *sa, sql_rel *r *q = (stacked_query) { .rel = rel, .sql_state = sql_state, - .grouped = is_groupby(rel->op), + .grouped = is_groupby(rel->op)|rel->grouped, .groupby = 0, /* not used for groupby of inner */ }; return q; diff --git a/sql/test/BugTracker-2021/Tests/copyinto-copyfrom.Bug-7186.SQL.py b/sql/test/BugTracker-2021/Tests/copyinto-copyfrom.Bug-7186.SQL.py --- a/sql/test/BugTracker-2021/Tests/copyinto-copyfrom.Bug-7186.SQL.py +++ b/sql/test/BugTracker-2021/Tests/copyinto-copyfrom.Bug-7186.SQL.py @@ -2,20 +2,22 @@ import tempfile, os, shutil from MonetDBtesting.sqltest import SQLTestCase nexdir = tempfile.mkdtemp() -temp_name = os.path.join(nexdir, 'myp.csv') -with SQLTestCase() as cli: - cli.connect(username="monetdb", password="monetdb") +try: + temp_name = os.path.join(nexdir, 'myfile.csv').replace("\\", "\\\\") + with SQLTestCase() as cli: + cli.connect(username="monetdb", password="monetdb") - cli.execute("START TRANSACTION;").assertSucceeded() - cli.execute(""" - CREATE TABLE "t" ("id" INTEGER,"name" VARCHAR(1024),"schema_id" INTEGER,"query" VARCHAR(1048576),"type" SMALLINT,"system" BOOLEAN,"commit_action" SMALLINT,"access" SMALLINT,"temporary" TINYINT); - """).assertSucceeded() - cli.execute(""" - COPY SELECT "id","name","schema_id","query","type","system","commit_action","access","temporary" FROM sys.tables LIMIT 100 INTO '%s' DELIMITERS '|'; - """ % (temp_name)).assertSucceeded() - cli.execute("COPY INTO t FROM '%s' DELIMITERS '|';" % (temp_name)).assertSucceeded() - cli.execute("DROP TABLE t;").assertSucceeded() - cli.execute("ROLLBACK;").assertSucceeded() - -shutil.rmtree(nexdir) + cli.execute("START TRANSACTION;").assertSucceeded() + cli.execute(""" + CREATE TABLE "t" ("id" INTEGER,"name" VARCHAR(1024),"schema_id" INTEGER,"query" VARCHAR(1048576),"type" SMALLINT,"system" BOOLEAN,"commit_action" SMALLINT,"access" SMALLINT,"temporary" TINYINT); + """).assertSucceeded() + cli.execute(""" + COPY SELECT "id","name","schema_id","query","type","system","commit_action","access","temporary" FROM sys.tables LIMIT 100 INTO '%s' DELIMITERS '|'; + """ % (temp_name)).assertSucceeded() + cli.execute("COPY INTO t FROM '%s' DELIMITERS '|';" % (temp_name)).assertSucceeded() + cli.execute("DROP TABLE t;").assertSucceeded() + cli.execute("ROLLBACK;").assertSucceeded() +finally: + if os.path.exists(nexdir): + shutil.rmtree(nexdir) diff --git a/sql/test/SQLancer/Tests/sqlancer18.test b/sql/test/SQLancer/Tests/sqlancer18.test --- a/sql/test/SQLancer/Tests/sqlancer18.test +++ b/sql/test/SQLancer/Tests/sqlancer18.test @@ -305,8 +305,8 @@ NULL query T rowsort SELECT vx.vc0 <> ALL(SELECT vx.vc0 FROM vx WHERE vx.vc0 <> vx.vc0) FROM vx ---- -False -NULL +True +True query T rowsort SELECT vx.vc0 FROM vx WHERE vx.vc0 <> ALL(SELECT vx.vc0 FROM vx WHERE vx.vc0 <> vx.vc0) @@ -314,7 +314,7 @@ SELECT vx.vc0 FROM vx WHERE vx.vc0 <> AL 1970-01-01 NULL -statement error GDK reported error: BATsubcross: more than one match +statement error GDK reported error: mergejoin: more than one match SELECT max((SELECT (SELECT rt2.c1 FROM t2) FROM t2 as rt2)) statement ok diff --git a/sql/test/bugs/Tests/All b/sql/test/bugs/Tests/All --- a/sql/test/bugs/Tests/All +++ b/sql/test/bugs/Tests/All @@ -113,3 +113,4 @@ HAVE_GEOM?filter_error in rtrim_bug savepoint-release +procedure-recompile diff --git a/sql/test/bugs/Tests/procedure-recompile.test b/sql/test/bugs/Tests/procedure-recompile.test new file mode 100644 --- /dev/null +++ b/sql/test/bugs/Tests/procedure-recompile.test @@ -0,0 +1,51 @@ +statement ok +create table x (a int) + +statement ok rowcount 2 +insert into x values (1),(2) + +statement ok +create procedure myproc() begin insert into x values (3); end + +query I rowsort +select a from x +---- +1 +2 + +statement ok +call myproc() + +query I rowsort +select a from x +---- +1 +2 +3 + +statement ok +alter table x add constraint mycon primary key(a) + +query I rowsort +select a from x +---- +1 +2 +3 + +statement error primary key violation +call myproc() + +query I rowsort +select a from x +---- +1 +2 +3 + +statement ok +drop procedure myproc + +statement ok +drop table x + _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list