Changeset: fcda84a42c58 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/fcda84a42c58 Modified Files: gdk/gdk_aggr.c gdk/gdk_batop.c Branch: analyze-fix Log Message:
Merged with Jan2022 diffs (193 lines): diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c --- a/clients/mapiclient/dump.c +++ b/clients/mapiclient/dump.c @@ -1942,6 +1942,7 @@ dump_table_alters(Mapi mid, const char * } rc = 0; /* success */ bailout: + free(query); free(s); free(t); mapi_close_handle(hdl); /* may be NULL */ diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c --- a/gdk/gdk_aggr.c +++ b/gdk/gdk_aggr.c @@ -3823,18 +3823,22 @@ BATmin_skipnil(BAT *b, void *aggr, bit s } if (is_oid_nil(pos)) { res = ATOMnilptr(b->ttype); - b->tminpos = BUN_NONE; } else { - BUN minpos = pos - b->hseqbase; - res = BUNtail(bi, minpos); - b->tminpos = minpos; - } - if (VIEWtparent(b)) { - BAT *pb = BBP_cache(VIEWtparent(b)); - MT_lock_set(&pb->theaplock); - if (bi.count == BATcount(pb)) - pb->tminpos = b->tminpos; - MT_lock_unset(&pb->theaplock); + bi.minpos = pos - b->hseqbase; + res = BUNtail(bi, bi.minpos); + MT_lock_set(&b->theaplock); + if (bi.count == BATcount(b) && bi.h == b->theap) + b->tminpos = bi.minpos; + MT_lock_unset(&b->theaplock); + bat pbid = VIEWtparent(b); + if (pbid) { + BAT *pb = BBP_cache(pbid); + MT_lock_set(&pb->theaplock); + if (bi.count == BATcount(pb) && + bi.h == pb->theap) + pb->tminpos = bi.minpos; + MT_lock_unset(&pb->theaplock); + } } } if (aggr == NULL) { @@ -3973,18 +3977,22 @@ BATmax_skipnil(BAT *b, void *aggr, bit s } if (is_oid_nil(pos)) { res = ATOMnilptr(b->ttype); - b->tmaxpos = BUN_NONE; } else { - BUN maxpos = pos - b->hseqbase; - res = BUNtail(bi, maxpos); - b->tmaxpos = maxpos; - } - if (VIEWtparent(b)) { - BAT *pb = BBP_cache(VIEWtparent(b)); - MT_lock_set(&pb->theaplock); - if (bi.count == BATcount(pb)) - pb->tmaxpos = b->tmaxpos; - MT_lock_unset(&pb->theaplock); + bi.maxpos = pos - b->hseqbase; + res = BUNtail(bi, bi.maxpos); + MT_lock_set(&b->theaplock); + if (bi.count == BATcount(b) && bi.h == b->theap) + b->tmaxpos = bi.maxpos; + MT_lock_unset(&b->theaplock); + bat pbid = VIEWtparent(b); + if (pbid) { + BAT *pb = BBP_cache(pbid); + MT_lock_set(&pb->theaplock); + if (bi.count == BATcount(pb) && + bi.h == pb->theap) + pb->tmaxpos = bi.maxpos; + MT_lock_unset(&pb->theaplock); + } } } if (aggr == NULL) { diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c --- a/gdk/gdk_batop.c +++ b/gdk/gdk_batop.c @@ -2960,11 +2960,30 @@ BATcount_no_nil(BAT *b, BAT *s) } break; } - if (cnt == BATcount(b)) { - /* we learned something */ - b->tnonil = true; - assert(!b->tnil); - b->tnil = false; + if (cnt == bi.count) { + MT_lock_set(&b->theaplock); + if (cnt == BATcount(b) && bi.h == b->theap) { + /* we learned something */ + b->batDirtydesc = true; + b->tnonil = true; + assert(!b->tnil); + b->tnil = false; + } + MT_lock_unset(&b->theaplock); + bat pbid = VIEWtparent(b); + if (pbid) { + BAT *pb = BBP_cache(pbid); + MT_lock_set(&pb->theaplock); + if (cnt == BATcount(pb) && + bi.h == pb->theap && + !pb->tnonil) { + pb->batDirtydesc = true; + pb->tnonil = true; + assert(!pb->tnil); + pb->tnil = false; + } + MT_lock_unset(&pb->theaplock); + } } bat_iterator_end(&bi); return cnt; diff --git a/gdk/gdk_unique.c b/gdk/gdk_unique.c --- a/gdk/gdk_unique.c +++ b/gdk/gdk_unique.c @@ -273,6 +273,21 @@ BATunique(BAT *b, BAT *s) TIMEOUT_CHECK(timeoffset, GOTO_LABEL_TIMEOUT_HANDLER(bunins_failed)); } + if (BATcount(bn) == bi.count) { + /* it turns out all values are distinct */ + MT_lock_set(&b->theaplock); + if (BATcount(b) == bi.count) { + /* and the input hasn't changed in the mean + * time--the only allowed change being appends; + * updates not allowed since the candidate list + * covers the complete bat */ + assert(b->tnokey[0] == 0); + assert(b->tnokey[1] == 0); + b->tkey = true; + b->batDirtydesc = true; + } + MT_lock_unset(&b->theaplock); + } bat_iterator_end(&bi); bn->theap->dirty = true; @@ -281,13 +296,6 @@ BATunique(BAT *b, BAT *s) bn->tkey = true; bn->tnil = false; bn->tnonil = true; - if (BATcount(bn) == bi.count) { - /* it turns out all values are distinct */ - assert(b->tnokey[0] == 0); - assert(b->tnokey[1] == 0); - b->tkey = true; - b->batDirtydesc = true; - } bn = virtualize(bn); MT_thread_setalgorithm(algomsg); TRC_DEBUG(ALGO, "b=" ALGOBATFMT diff --git a/sql/test/emptydb/Tests/check.stable.out b/sql/test/emptydb/Tests/check.stable.out --- a/sql/test/emptydb/Tests/check.stable.out +++ b/sql/test/emptydb/Tests/check.stable.out @@ -975,6 +975,7 @@ CREATE TABLE "sys"."dependency_types" (" ALTER TABLE "sys"."dependency_types" SET READ ONLY; CREATE TABLE "sys"."dump_statements" ("o" INTEGER, "s" CHARACTER LARGE OBJECT); CREATE TABLE "sys"."fkey_actions" ("action_id" SMALLINT NOT NULL, "action_name" VARCHAR(15) NOT NULL, CONSTRAINT "fkey_actions_action_id_pkey" PRIMARY KEY ("action_id")); +ALTER TABLE "sys"."fkey_actions" SET READ ONLY; CREATE TABLE "sys"."function_languages" ("language_id" SMALLINT NOT NULL, "language_name" VARCHAR(20) NOT NULL, "language_keyword" VARCHAR(20), CONSTRAINT "function_languages_language_id_pkey" PRIMARY KEY ("language_id"), CONSTRAINT "function_languages_language_name_unique" UNIQUE ("language_name")); ALTER TABLE "sys"."function_languages" SET READ ONLY; CREATE TABLE "sys"."function_types" ("function_type_id" SMALLINT NOT NULL, "function_type_name" VARCHAR(30) NOT NULL, "function_type_keyword" VARCHAR(30) NOT NULL, CONSTRAINT "function_types_function_type_id_pkey" PRIMARY KEY ("function_type_id"), CONSTRAINT "function_types_function_type_name_unique" UNIQUE ("function_type_name")); diff --git a/sql/test/emptydb/Tests/check.stable.out.32bit b/sql/test/emptydb/Tests/check.stable.out.32bit --- a/sql/test/emptydb/Tests/check.stable.out.32bit +++ b/sql/test/emptydb/Tests/check.stable.out.32bit @@ -975,6 +975,7 @@ CREATE TABLE "sys"."dependency_types" (" ALTER TABLE "sys"."dependency_types" SET READ ONLY; CREATE TABLE "sys"."dump_statements" ("o" INTEGER, "s" CHARACTER LARGE OBJECT); CREATE TABLE "sys"."fkey_actions" ("action_id" SMALLINT NOT NULL, "action_name" VARCHAR(15) NOT NULL, CONSTRAINT "fkey_actions_action_id_pkey" PRIMARY KEY ("action_id")); +ALTER TABLE "sys"."fkey_actions" SET READ ONLY; CREATE TABLE "sys"."function_languages" ("language_id" SMALLINT NOT NULL, "language_name" VARCHAR(20) NOT NULL, "language_keyword" VARCHAR(20), CONSTRAINT "function_languages_language_id_pkey" PRIMARY KEY ("language_id"), CONSTRAINT "function_languages_language_name_unique" UNIQUE ("language_name")); ALTER TABLE "sys"."function_languages" SET READ ONLY; CREATE TABLE "sys"."function_types" ("function_type_id" SMALLINT NOT NULL, "function_type_name" VARCHAR(30) NOT NULL, "function_type_keyword" VARCHAR(30) NOT NULL, CONSTRAINT "function_types_function_type_id_pkey" PRIMARY KEY ("function_type_id"), CONSTRAINT "function_types_function_type_name_unique" UNIQUE ("function_type_name")); diff --git a/sql/test/emptydb/Tests/check.stable.out.int128 b/sql/test/emptydb/Tests/check.stable.out.int128 --- a/sql/test/emptydb/Tests/check.stable.out.int128 +++ b/sql/test/emptydb/Tests/check.stable.out.int128 @@ -975,6 +975,7 @@ CREATE TABLE "sys"."dependency_types" (" ALTER TABLE "sys"."dependency_types" SET READ ONLY; CREATE TABLE "sys"."dump_statements" ("o" INTEGER, "s" CHARACTER LARGE OBJECT); CREATE TABLE "sys"."fkey_actions" ("action_id" SMALLINT NOT NULL, "action_name" VARCHAR(15) NOT NULL, CONSTRAINT "fkey_actions_action_id_pkey" PRIMARY KEY ("action_id")); +ALTER TABLE "sys"."fkey_actions" SET READ ONLY; CREATE TABLE "sys"."function_languages" ("language_id" SMALLINT NOT NULL, "language_name" VARCHAR(20) NOT NULL, "language_keyword" VARCHAR(20), CONSTRAINT "function_languages_language_id_pkey" PRIMARY KEY ("language_id"), CONSTRAINT "function_languages_language_name_unique" UNIQUE ("language_name")); ALTER TABLE "sys"."function_languages" SET READ ONLY; CREATE TABLE "sys"."function_types" ("function_type_id" SMALLINT NOT NULL, "function_type_name" VARCHAR(30) NOT NULL, "function_type_keyword" VARCHAR(30) NOT NULL, CONSTRAINT "function_types_function_type_id_pkey" PRIMARY KEY ("function_type_id"), CONSTRAINT "function_types_function_type_name_unique" UNIQUE ("function_type_name")); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list