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 -- [email protected]
To unsubscribe send an email to [email protected]