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

Reply via email to