Changeset: 9e0e40d081f8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/9e0e40d081f8
Modified Files:
        sql/storage/bat/bat_storage.c
        sql/test/dict/Tests/dict01.test
Branch: Jan2022
Log Message:

Destroy right bat. Also fixed my introduced leak


diffs (65 lines):

diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -1200,11 +1200,11 @@ cs_update_bat( sql_trans *tr, column_sto
 
        if (cs->st == ST_DICT) {
                /* possibly a new array is returned */
-               updates = dict_append_bat(cs, updates);
+               BAT *noupdates = dict_append_bat(cs, updates);
                if (oupdates != updates)
                        bat_destroy(oupdates);
-               oupdates = updates;
-               if (!updates) {
+               oupdates = noupdates;
+               if (!oupdates) {
                        if (otids != tids)
                                bat_destroy(otids);
                        return LOG_ERR;
@@ -1841,14 +1841,14 @@ delta_append_bat(sql_trans *tr, sql_delt
 
        lock_column(tr->store, id);
        if (bat->cs.st == ST_DICT) {
-               BAT *ni = dict_append_bat(&bat->cs, i);
-               if (oi != i) /* oi and i will be replaced, so destroy possible 
unmask reference */
+               BAT *ni = dict_append_bat(&bat->cs, oi);
+               if (oi != i) /* oi will be replaced, so destroy possible unmask 
reference */
                        bat_destroy(oi);
-               if (!ni) {
+               oi = ni;
+               if (!oi) {
                        unlock_column(tr->store, id);
                        return LOG_ERR;
                }
-               oi = i = ni;
        }
 
        b = temp_descriptor(bat->cs.bid);
diff --git a/sql/test/dict/Tests/dict01.test b/sql/test/dict/Tests/dict01.test
--- a/sql/test/dict/Tests/dict01.test
+++ b/sql/test/dict/Tests/dict01.test
@@ -131,6 +131,24 @@ statement ok
 DROP TABLE "t2"
 
 statement ok
+CREATE TABLE t2(c0 JSON, c1 BIGINT, c2 CHAR(71))
+
+statement ok
+CALL "sys"."dict_compress"('sys','t2','c1')
+
+statement ok rowcount 2
+INSERT INTO t2(c2, c0) VALUES('', JSON '["aa","tyu"]'), ('a', JSON '0.4')
+
+statement ok rowcount 2
+INSERT INTO t2(c0) VALUES(JSON '[false,false]'), (JSON 'null')
+
+statement ok rowcount 4
+UPDATE t2 SET c1 = 1
+
+statement ok
+DROP TABLE "t2"
+
+statement ok
 START TRANSACTION
 
 statement ok
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to