Changeset: 789e813e6ba0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/789e813e6ba0
Modified Files:
sql/server/rel_basetable.c
sql/server/rel_basetable.h
sql/server/rel_dump.c
sql/server/rel_psm.c
sql/server/rel_rel.c
sql/server/rel_updates.c
sql/test/BugTracker-2015/Tests/crash.Bug-3736.test
Branch: Jul2021
Log Message:
Partly reverting commits ff40ce536e95 and 0487ed622863 Making the TID column
optional, makes join idxs not be used on some plans. SQLancer15 crashing query
needs an alternative solution
diffs (144 lines):
diff --git a/sql/server/rel_basetable.c b/sql/server/rel_basetable.c
--- a/sql/server/rel_basetable.c
+++ b/sql/server/rel_basetable.c
@@ -16,7 +16,6 @@
#define USED_LEN(nr) ((nr+31)/32)
#define rel_base_set_used(b,nr) b->used[(nr)/32] |= (1<<((nr)%32))
-#define rel_base_set_not_used(b,nr) b->used[(nr)/32] &= ~(1<<((nr)%32))
#define rel_base_is_used(b,nr) ((b->used[(nr)/32]&(1<<((nr)%32))) != 0)
typedef struct rel_base_t {
@@ -75,7 +74,7 @@ rel_base_use_tid( mvc *sql, sql_rel *rt)
}
void
-rel_base_use_all( mvc *sql, sql_rel *rel, int with_tid)
+rel_base_use_all( mvc *sql, sql_rel *rel)
{
sql_table *t = rel->l;
rel_base_t *ba = rel->r;
@@ -88,14 +87,10 @@ rel_base_use_all( mvc *sql, sql_rel *rel
continue;
rel_base_set_used(ba, i);
}
- if (with_tid)
- rel_base_set_used(ba, ol_length(t->columns));
} else {
int len = USED_LEN(ol_length(t->columns) + 1 +
ol_length(t->idxs));
for (int i = 0; i < len; i++)
ba->used[i] = ~0;
- if (!with_tid)
- rel_base_set_not_used(ba, ol_length(t->columns));
}
}
@@ -113,7 +108,7 @@ rel_basetable(mvc *sql, sql_table *t, co
assert(atname);
if (strcmp(atname, t->base.name) != 0)
ba->name = sa_strdup(sa, atname);
- for(int i = nrcols + 1; i<end; i++) /* TID is not used at start */
+ for(int i = nrcols; i<end; i++)
rel_base_set_used(ba, i);
rel->l = t;
rel->r = ba;
diff --git a/sql/server/rel_basetable.h b/sql/server/rel_basetable.h
--- a/sql/server/rel_basetable.h
+++ b/sql/server/rel_basetable.h
@@ -24,7 +24,7 @@ extern sql_rel *rel_basetable(mvc *sql,
extern void rel_base_disallow(sql_rel *r); /* set flag too check
per column access */
extern int rel_base_use(mvc *ql, sql_rel *rt, int nr); /* return error on
(read) access violation */
extern void rel_base_use_tid(mvc *sql, sql_rel *rt);
-extern void rel_base_use_all(mvc *sql, sql_rel *rel, int with_tid);
+extern void rel_base_use_all(mvc *sql, sql_rel *rel);
extern char *rel_base_name(sql_rel *r);
extern char *rel_base_rename(sql_rel *r, char *name);
diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -1815,7 +1815,7 @@ rel_read(mvc *sql, char *r, int *pos, li
return sql_error(sql, -1,
SQLSTATE(42000) "Access denied for %s to table '%s.%s'\n",
get_string_global_var(sql, "current_user"), s->base.name, tname);
}
- rel_base_use_all(sql, rel, 1);
+ rel_base_use_all(sql, rel);
rel = rewrite_basetable(sql, rel);
if (!r[*pos])
diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -1240,7 +1240,7 @@ static sql_rel_view*
_stack_push_table(mvc *sql, const char *tname, sql_table *t)
{
sql_rel *r = rel_basetable(sql, t, tname );
- rel_base_use_all(sql, r, 1);
+ rel_base_use_all(sql, r);
r = rewrite_basetable(sql, r);
return stack_push_rel_view(sql, tname, r);
}
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
@@ -907,7 +907,7 @@ list *
return new_exp_list(sql->sa);
if (!tname && is_basetable(rel->op) && !is_processed(rel))
- rel_base_use_all( sql, rel, 1);
+ rel_base_use_all( sql, rel);
switch(rel->op) {
case op_join:
diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c
--- a/sql/server/rel_updates.c
+++ b/sql/server/rel_updates.c
@@ -286,7 +286,7 @@ static sql_rel *
rel_insert_table(sql_query *query, sql_table *t, char *name, sql_rel *inserts)
{
sql_rel *rel = rel_basetable(query->sql, t, name);
- rel_base_use_all(query->sql, rel, 1);
+ rel_base_use_all(query->sql, rel);
rel = rewrite_basetable(query->sql, rel);
return rel_insert(query->sql, rel, inserts);
}
diff --git a/sql/test/BugTracker-2015/Tests/crash.Bug-3736.test
b/sql/test/BugTracker-2015/Tests/crash.Bug-3736.test
--- a/sql/test/BugTracker-2015/Tests/crash.Bug-3736.test
+++ b/sql/test/BugTracker-2015/Tests/crash.Bug-3736.test
@@ -113,8 +113,8 @@ Select b.* FROM open_auctions o, bidder
----
REF 1 (2)
join (
-| table("sys"."open_auctions") [ "open_auctions"."open_auction_id" NOT NULL as
"o"."open_auction_id" ] COUNT ,
-| table("sys"."bidder") [ "bidder"."id" NOT NULL HASHCOL as "b"."id",
"bidder"."open_auction_id" NOT NULL as "b"."open_auction_id", "bidder"."date"
NOT NULL as "b"."date", "bidder"."time" NOT NULL as "b"."time",
"bidder"."personref" NOT NULL as "b"."personref", "bidder"."increase" NOT NULL
as "b"."increase" ] COUNT
+| table("sys"."open_auctions") [ "open_auctions"."open_auction_id" NOT NULL as
"o"."open_auction_id", "open_auctions"."%TID%" NOT NULL as "o"."%TID%" ] COUNT ,
+| table("sys"."bidder") [ "bidder"."id" NOT NULL HASHCOL as "b"."id",
"bidder"."open_auction_id" NOT NULL as "b"."open_auction_id", "bidder"."date"
NOT NULL as "b"."date", "bidder"."time" NOT NULL as "b"."time",
"bidder"."personref" NOT NULL as "b"."personref", "bidder"."increase" NOT NULL
as "b"."increase", "bidder"."%TID%" NOT NULL as "b"."%TID%" ] COUNT
) [ "o"."open_auction_id" NOT NULL = "b"."open_auction_id" NOT NULL ]
REF 2 (2)
single left outer join (
@@ -123,7 +123,7 @@ single left outer join (
| | select (
| | | project (
| | | | crossproduct (
-| | | | | table("sys"."bidder") [ "bidder"."id" NOT NULL HASHCOL as
"b3"."id", "bidder"."increase" NOT NULL as "b3"."increase" ] COUNT ,
+| | | | | table("sys"."bidder") [ "bidder"."id" NOT NULL HASHCOL as
"b3"."id", "bidder"."increase" NOT NULL as "b3"."increase", "bidder"."%TID%"
NOT NULL as "b3"."%TID%" ] COUNT ,
| | | | | group by (
| | | | | | join (
| | | | | | | group by (
@@ -131,13 +131,13 @@ single left outer join (
| | | | | | | | | & REF 1
| | | | | | | | ) [ "o"."open_auction_id" NOT NULL ]
| | | | | | | ) [ "o"."open_auction_id" NOT NULL ] [ "o"."open_auction_id" NOT
NULL ],
-| | | | | | | table("sys"."bidder") [ "bidder"."id" NOT NULL HASHCOL as
"b3a"."id", "bidder"."open_auction_id" NOT NULL as "b3a"."open_auction_id" ]
COUNT
+| | | | | | | table("sys"."bidder") [ "bidder"."id" NOT NULL HASHCOL as
"b3a"."id", "bidder"."open_auction_id" NOT NULL as "b3a"."open_auction_id",
"bidder"."%TID%" NOT NULL as "b3a"."%TID%" ] COUNT
| | | | | | ) [ "b3a"."open_auction_id" NOT NULL = "o"."open_auction_id" NOT
NULL ]
| | | | | ) [ "o"."open_auction_id" NOT NULL ] [ "sys"."min" no nil
("b3a"."id" NOT NULL HASHCOL ) as "%1"."%1", "o"."open_auction_id" NOT NULL ]
| | | | ) [ ]
-| | | ) [ "o"."open_auction_id" NOT NULL, "b3"."id" NOT NULL HASHCOL ,
"b3"."increase" NOT NULL, "%1"."%1", "b3"."increase" NOT NULL as "%2"."%2" ]
+| | | ) [ "o"."open_auction_id" NOT NULL, "b3"."id" NOT NULL HASHCOL ,
"b3"."increase" NOT NULL, "b3"."%TID%" NOT NULL, "%1"."%1", "b3"."increase" NOT
NULL as "%2"."%2" ]
| | ) [ "b3"."id" NOT NULL HASHCOL = "%1"."%1" ]
-| ) [ "b3"."id" NOT NULL HASHCOL , "b3"."increase" NOT NULL, "%1"."%1",
"%2"."%2" NOT NULL, "o"."open_auction_id" NOT NULL as "%5"."%5" ]
+| ) [ "b3"."id" NOT NULL HASHCOL , "b3"."increase" NOT NULL, "b3"."%TID%" NOT
NULL, "%1"."%1", "%2"."%2" NOT NULL, "o"."open_auction_id" NOT NULL as
"%5"."%5" ]
) [ "o"."open_auction_id" NOT NULL * = "%5"."%5" NOT NULL ]
project (
| single select (
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list