Changeset: 23052201fcbe for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/23052201fcbe Modified Files: gdk/gdk_bat.c monetdb5/mal/Tests/dataflow01.maltest monetdb5/mal/Tests/tst901a.maltest monetdb5/modules/mal/Tests/bigsum.maltest monetdb5/modules/mal/Tests/imprints.maltest monetdb5/modules/mal/Tests/manifold.maltest monetdb5/modules/mal/Tests/manifoldstr.maltest sql/test/BugTracker-2009/Tests/use_order_column_first.SF-2686008.test sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.test sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.test sql/test/BugTracker-2015/Tests/large_join.Bug-3809.test sql/test/BugTracker-2016/Tests/merge_project.Bug-3955.test sql/test/BugTracker-2018/Tests/count_from_commented_function_signatures.Bug-6542.test sql/test/BugTracker-2021/Tests/plan-not-optimal-view.Bug-7140.test sql/test/BugTracker-2023/Tests/join-on-row_number-over-7403.test sql/test/BugTracker/Tests/explain.SF-1739353.test sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-1join-query.test sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-1join-view.test sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-query.test sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-view.test sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-3join-query.test sql/test/Tests/keys.test sql/test/merge-partitions/Tests/mergepart31.test sql/test/miscellaneous/Tests/groupby_error.test sql/test/miscellaneous/Tests/groupby_expressions.test sql/test/miscellaneous/Tests/simple_plans.test sql/test/miscellaneous/Tests/unique_keys.test sql/test/out2in/Tests/out2in.test sql/test/rel-optimizers/Tests/groupby-cse.test sql/test/rel-optimizers/Tests/join-merge-remote-replica-plan.test sql/test/rel-optimizers/Tests/local-replica.test sql/test/rel-optimizers/Tests/merge-unions.test sql/test/rel-optimizers/Tests/replicas-join-plan.test sql/test/sysmon/timeout/Tests/timeout_aggr.maltest sql/test/sysmon/timeout/Tests/timeout_join.maltest Branch: Aug2024 Log Message:
Better maintain tnil/tnonil properties when appending data. diffs (truncated from 2721 to 300 lines): diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c --- a/gdk/gdk_bat.c +++ b/gdk/gdk_bat.c @@ -1200,6 +1200,9 @@ BUNappendmulti(BAT *b, const void *value maxvalp = t; } } + } else { + b->tnil = true; + b->tnonil = false; } p++; } @@ -1219,6 +1222,8 @@ BUNappendmulti(BAT *b, const void *value } else if (ATOMstorage(b->ttype) == TYPE_msk) { bi.minpos = bi.maxpos = BUN_NONE; minvalp = maxvalp = NULL; + b->tnil = false; + b->tnonil = true; for (BUN i = 0; i < count; i++) { t = (void *) ((char *) values + (i << b->tshift)); mskSetVal(b, p, *(msk *) t); @@ -1255,12 +1260,16 @@ BUNappendmulti(BAT *b, const void *value maxvalp = t; } } + } else { + b->tnil = true; + b->tnonil = false; } p++; } nunique = b->thash ? b->thash->nunique : 0; } } else { + /* inserting nils, unless it's msk */ for (BUN i = 0; i < count; i++) { gdk_return rc = tfastins_nocheck(b, p, t); if (rc != GDK_SUCCEED) { @@ -1273,6 +1282,8 @@ BUNappendmulti(BAT *b, const void *value p++; } nunique = b->thash ? b->thash->nunique : 0; + b->tnil = b->ttype != TYPE_msk; + b->tnonil = false; } MT_lock_set(&b->theaplock); b->tminpos = bi.minpos; @@ -1283,8 +1294,6 @@ BUNappendmulti(BAT *b, const void *value if (b->ttype == TYPE_oid) { /* spend extra effort on oid (possible candidate list) */ if (values == NULL || is_oid_nil(((oid *) values)[0])) { - b->tnil = true; - b->tnonil = false; b->tsorted = false; b->trevsorted = false; b->tkey = false; @@ -1295,8 +1304,6 @@ BUNappendmulti(BAT *b, const void *value b->trevsorted = true; b->tkey = true; b->tseqbase = count == 1 ? ((oid *) values)[0] : oid_nil; - b->tnil = false; - b->tnonil = true; } else { if (!is_oid_nil(b->tseqbase) && (count > 1 || @@ -1325,8 +1332,6 @@ BUNappendmulti(BAT *b, const void *value } for (BUN i = 1; i < count; i++) { if (is_oid_nil(((oid *) values)[i])) { - b->tnil = true; - b->tnonil = false; b->tsorted = false; b->trevsorted = false; b->tkey = false; @@ -1357,18 +1362,14 @@ BUNappendmulti(BAT *b, const void *value } } } else if (!ATOMlinear(b->ttype)) { - b->tnil = b->tnonil = false; b->tsorted = b->trevsorted = b->tkey = false; } else if (b->batCount == 0) { if (values == NULL) { b->tsorted = b->trevsorted = true; b->tkey = count == 1; - b->tnil = true; - b->tnonil = false; b->tunique_est = 1; } else { int c; - b->tnil = b->tnonil = false; switch (count) { case 1: b->tsorted = b->trevsorted = b->tkey = true; @@ -1415,11 +1416,7 @@ BUNappendmulti(BAT *b, const void *value b->tnokey[0] = 0; b->tnokey[1] = !b->tkey; b->tunique_est = (double) (1 + b->tkey); - b->tnil |= values == NULL; - b->tnonil = false; } else { - b->tnil |= values == NULL; - b->tnonil = false; b->tsorted = b->trevsorted = b->tkey = false; } BATsetcount(b, p); diff --git a/monetdb5/mal/Tests/dataflow01.maltest b/monetdb5/mal/Tests/dataflow01.maltest --- a/monetdb5/mal/Tests/dataflow01.maltest +++ b/monetdb5/mal/Tests/dataflow01.maltest @@ -4,7 +4,7 @@ b:= bat.new(:lng); k:=0; INT_MAX := 2147483647; dbgmsk_restore := mdb.getDebug(); -dbgmsk_unset := 8+8388608; +dbgmsk_unset := 8+2; dbgmsk_keep := calc.xor(INT_MAX,dbgmsk_unset); dbgmsk_set := calc.and(dbgmsk_restore,dbgmsk_keep); mdb.setDebug(dbgmsk_set); diff --git a/monetdb5/mal/Tests/tst901a.maltest b/monetdb5/mal/Tests/tst901a.maltest --- a/monetdb5/mal/Tests/tst901a.maltest +++ b/monetdb5/mal/Tests/tst901a.maltest @@ -3,7 +3,7 @@ function foo(); b:= bat.new(:lng); INT_MAX := 2147483647; dbgmsk_restore := mdb.getDebug(); -dbgmsk_unset := 8+8388608; +dbgmsk_unset := 8+2; dbgmsk_keep := calc.xor(INT_MAX,dbgmsk_unset); dbgmsk_set := calc.and(dbgmsk_restore,dbgmsk_keep); mdb.setDebug(dbgmsk_set); diff --git a/monetdb5/modules/mal/Tests/bigsum.maltest b/monetdb5/modules/mal/Tests/bigsum.maltest --- a/monetdb5/modules/mal/Tests/bigsum.maltest +++ b/monetdb5/modules/mal/Tests/bigsum.maltest @@ -8,7 +8,7 @@ statement ok dbgmsk_restore := mdb.getDebug() statement ok -dbgmsk_unset := 8+8388608 +dbgmsk_unset := 8+2 statement ok dbgmsk_keep := calc.xor(INT_MAX,dbgmsk_unset) diff --git a/monetdb5/modules/mal/Tests/imprints.maltest b/monetdb5/modules/mal/Tests/imprints.maltest --- a/monetdb5/modules/mal/Tests/imprints.maltest +++ b/monetdb5/modules/mal/Tests/imprints.maltest @@ -11,7 +11,7 @@ statement ok dbgmsk_restore := mdb.getDebug() statement ok -dbgmsk_unset := 8+8388608 +dbgmsk_unset := 8+2 statement ok dbgmsk_keep := calc.xor(INT_MAX,dbgmsk_unset) diff --git a/monetdb5/modules/mal/Tests/manifold.maltest b/monetdb5/modules/mal/Tests/manifold.maltest --- a/monetdb5/modules/mal/Tests/manifold.maltest +++ b/monetdb5/modules/mal/Tests/manifold.maltest @@ -11,7 +11,7 @@ statement ok dbgmsk_restore := mdb.getDebug() statement ok -dbgmsk_unset := 8+8388608 +dbgmsk_unset := 8+2 statement ok dbgmsk_keep := calc.xor(INT_MAX,dbgmsk_unset) diff --git a/monetdb5/modules/mal/Tests/manifoldstr.maltest b/monetdb5/modules/mal/Tests/manifoldstr.maltest --- a/monetdb5/modules/mal/Tests/manifoldstr.maltest +++ b/monetdb5/modules/mal/Tests/manifoldstr.maltest @@ -11,7 +11,7 @@ statement ok dbgmsk_restore := mdb.getDebug() statement ok -dbgmsk_unset := 8+8388608 +dbgmsk_unset := 8+2 statement ok dbgmsk_keep := calc.xor(INT_MAX,dbgmsk_unset) diff --git a/sql/test/BugTracker-2009/Tests/use_order_column_first.SF-2686008.test b/sql/test/BugTracker-2009/Tests/use_order_column_first.SF-2686008.test --- a/sql/test/BugTracker-2009/Tests/use_order_column_first.SF-2686008.test +++ b/sql/test/BugTracker-2009/Tests/use_order_column_first.SF-2686008.test @@ -58,18 +58,18 @@ PLAN select a,b from sorted group by a,b ---- project ( | group by ( -| | table("sys"."sorted") [ "sorted"."a", "sorted"."b" ] -| ) [ "sorted"."a", "sorted"."b" ] [ "sorted"."a", "sorted"."b" ] -) [ "sorted"."a", "sorted"."b" ] +| | table("sys"."sorted") [ "sorted"."a" NOT NULL, "sorted"."b" NOT NULL ] +| ) [ "sorted"."a" NOT NULL, "sorted"."b" NOT NULL ] [ "sorted"."a" NOT NULL, "sorted"."b" NOT NULL ] +) [ "sorted"."a" NOT NULL, "sorted"."b" NOT NULL ] query T nosort PLAN select a,b from sorted group by b,a ---- project ( | group by ( -| | table("sys"."sorted") [ "sorted"."a", "sorted"."b" ] -| ) [ "sorted"."a", "sorted"."b" ] [ "sorted"."b", "sorted"."a" ] -) [ "sorted"."a", "sorted"."b" ] +| | table("sys"."sorted") [ "sorted"."a" NOT NULL, "sorted"."b" NOT NULL ] +| ) [ "sorted"."a" NOT NULL, "sorted"."b" NOT NULL ] [ "sorted"."b" NOT NULL, "sorted"."a" NOT NULL ] +) [ "sorted"."a" NOT NULL, "sorted"."b" NOT NULL ] statement ok drop table unsorted diff --git a/sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.test b/sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.test --- a/sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.test +++ b/sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.test @@ -20,59 +20,59 @@ query T nosort PLAN select * from oblo ---- project ( -| table("sys"."oblo") [ "oblo"."a" ] -) [ "oblo"."a" ] +| table("sys"."oblo") [ "oblo"."a" NOT NULL ] +) [ "oblo"."a" NOT NULL ] query T nosort PLAN select * from oblo OFFSET 2 ---- project ( | top N ( -| | table("sys"."oblo") [ "oblo"."a" ] +| | table("sys"."oblo") [ "oblo"."a" NOT NULL ] | ) [ bigint(63) NULL, bigint(63) "2" ] -) [ "oblo"."a" ] +) [ "oblo"."a" NOT NULL ] query T nosort PLAN select * from oblo LIMIT 2 ---- project ( | top N ( -| | table("sys"."oblo") [ "oblo"."a" ] +| | table("sys"."oblo") [ "oblo"."a" NOT NULL ] | ) [ bigint(63) "2" ] -) [ "oblo"."a" ] +) [ "oblo"."a" NOT NULL ] query T nosort PLAN select * from oblo LIMIT 1 OFFSET 2 ---- project ( | top N ( -| | table("sys"."oblo") [ "oblo"."a" ] +| | table("sys"."oblo") [ "oblo"."a" NOT NULL ] | ) [ bigint(63) "1", bigint(63) "2" ] -) [ "oblo"."a" ] +) [ "oblo"."a" NOT NULL ] query T nosort PLAN select * from oblo LIMIT 2 OFFSET 1 ---- project ( | top N ( -| | table("sys"."oblo") [ "oblo"."a" ] +| | table("sys"."oblo") [ "oblo"."a" NOT NULL ] | ) [ bigint(63) "2", bigint(63) "1" ] -) [ "oblo"."a" ] +) [ "oblo"."a" NOT NULL ] query T nosort PLAN select * from oblo ORDER BY a ---- project ( -| table("sys"."oblo") [ "oblo"."a" ] -) [ "oblo"."a" ] [ "oblo"."a" ASC ] +| table("sys"."oblo") [ "oblo"."a" NOT NULL ] +) [ "oblo"."a" NOT NULL ] [ "oblo"."a" ASC NOT NULL ] query T nosort PLAN select * from oblo ORDER BY a OFFSET 2 ---- top N ( | project ( -| | table("sys"."oblo") [ "oblo"."a" ] -| ) [ "oblo"."a" ] [ "oblo"."a" ASC ] +| | table("sys"."oblo") [ "oblo"."a" NOT NULL ] +| ) [ "oblo"."a" NOT NULL ] [ "oblo"."a" ASC NOT NULL ] ) [ bigint(63) NULL, bigint(63) "2" ] query T nosort @@ -80,8 +80,8 @@ query T nosort ---- top N ( | project ( -| | table("sys"."oblo") [ "oblo"."a" ] -| ) [ "oblo"."a" ] [ "oblo"."a" ASC ] +| | table("sys"."oblo") [ "oblo"."a" NOT NULL ] +| ) [ "oblo"."a" NOT NULL ] [ "oblo"."a" ASC NOT NULL ] ) [ bigint(63) "2" ] query T nosort @@ -89,8 +89,8 @@ query T nosort ---- top N ( | project ( -| | table("sys"."oblo") [ "oblo"."a" ] -| ) [ "oblo"."a" ] [ "oblo"."a" ASC ] _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org