Changeset: 7ed6d7c007d7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7ed6d7c007d7
Modified Files:
        sql/storage/bat/bat_storage.c
Branch: default
Log Message:

merged with Jan2022


diffs (246 lines):

diff --git a/sql/backends/monet5/dict.c b/sql/backends/monet5/dict.c
--- a/sql/backends/monet5/dict.c
+++ b/sql/backends/monet5/dict.c
@@ -294,7 +294,7 @@ DICTdecompress_(BAT *o, BAT *u, role_t r
        if (o->ttype == TYPE_bte) {
                unsigned char *op = Tloc(o, 0);
 
-               if (ATOMstorage(u->ttype) == TYPE_int) {
+               if (ATOMbasetype(u->ttype) == TYPE_int) {
                        int *up = Tloc(u, 0);
                        int *bp = Tloc(b, 0);
 
@@ -307,7 +307,7 @@ DICTdecompress_(BAT *o, BAT *u, role_t r
                        BATnegateprops(b);
                        b->tnil = nils;
                        b->tnonil = !nils;
-               } else if (ATOMstorage(u->ttype) == TYPE_lng) {
+               } else if (ATOMbasetype(u->ttype) == TYPE_lng) {
                        lng *up = Tloc(u, 0);
                        lng *bp = Tloc(b, 0);
 
@@ -334,7 +334,7 @@ DICTdecompress_(BAT *o, BAT *u, role_t r
                assert(o->ttype == TYPE_sht);
                unsigned short *op = Tloc(o, 0);
 
-               if (ATOMstorage(u->ttype) == TYPE_int) {
+               if (ATOMbasetype(u->ttype) == TYPE_int) {
                        int *up = Tloc(u, 0);
                        int *bp = Tloc(b, 0);
 
@@ -347,7 +347,7 @@ DICTdecompress_(BAT *o, BAT *u, role_t r
                        BATnegateprops(b);
                        b->tnil = nils;
                        b->tnonil = !nils;
-               } else if (ATOMstorage(u->ttype) == TYPE_lng) {
+               } else if (ATOMbasetype(u->ttype) == TYPE_lng) {
                        lng *up = Tloc(u, 0);
                        lng *bp = Tloc(b, 0);
 
@@ -852,9 +852,12 @@ DICTenlarge(BAT *offsets, BUN cnt, BUN s
        for(BUN i = 0; i<cnt; i++) {
                no[i] = o[i];
        }
+       BATnegateprops(n);
+       n->tnil = offsets->tnil;
+       n->tnonil = offsets->tnonil;
        n->tkey = offsets->tkey;
-       BATnegateprops(n);
        n->tsorted = offsets->tsorted;
+       n->trevsorted = offsets->trevsorted;
        return n;
 }
 
@@ -901,20 +904,22 @@ DICTrenumber(Client cntxt, MalBlkPtr mb,
        }
        BATsetcount(n, cnt);
        BATnegateprops(n);
+       n->tnil = false;
+       n->tnonil = true;
        if (o->ttype == TYPE_bte) {
                unsigned char *mp = Tloc(m, 0);
                unsigned char mm = 0;
                for(BUN i = 0; i<BATcount(m); i++)
                        if (mp[i] > mm)
                                mm = mp[i];
-               BATmaxminpos_bte(o, mm);
+               BATmaxminpos_bte(n, mm);
        } else {
                unsigned short *mp = Tloc(m, 0);
                unsigned short mm = 0;
                for(BUN i = 0; i<BATcount(m); i++)
                        if (mp[i] > mm)
                                mm = mp[i];
-               BATmaxminpos_sht(o, mm);
+               BATmaxminpos_sht(n, mm);
        }
        bat_destroy(o);
        bat_destroy(m);
@@ -1015,6 +1020,8 @@ DICTprepare4append(BAT **noffsets, BAT *
        bat_iterator_end(&bi);
        BATsetcount(n, sz);
        BATnegateprops(n);
+       n->tnil = false;
+       n->tnonil = true;
        *noffsets = n;
        return 0;
 }
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -1567,13 +1567,14 @@ stmt_col( backend *be, sql_column *c, st
           (!isNew(c) || !isNew(c->t) /* alter */) &&
           (c->t->persistence == SQL_PERSIST || c->t->s) /*&& 
!c->t->commit_action*/) {
                stmt *u = stmt_bat(be, c, RD_UPD_ID, part);
+               assert(u);
+               sc = stmt_project_delta(be, sc, u);
                if (c->storage_type && c->storage_type[0] == 'D') {
                        stmt *v = stmt_bat(be, c, RD_EXT, part);
                        sc = stmt_dict(be, sc, v);
                } else if (c->storage_type && c->storage_type[0] == 'F') {
                        sc = stmt_for(be, sc, stmt_atom(be, atom_general( 
be->mvc->sa, &c->type, c->storage_type+4/*skip FOR-*/)));
                }
-               sc = stmt_project_delta(be, sc, u);
                if (del)
                        sc = stmt_project(be, del, sc);
        } else if (del) { /* always handle the deletes */
diff --git a/sql/backends/monet5/sql_statement.c 
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -588,7 +588,7 @@ stmt_bat(backend *be, sql_column *c, int
        q = newStmtArgs(mb, sqlRef, bindRef, 9);
        if (q == NULL)
                return NULL;
-       if (c->storage_type && access != RD_EXT && access != RD_UPD_ID) {
+       if (c->storage_type && access != RD_EXT) {
                sql_trans *tr = be->mvc->session->tr;
                sqlstore *store = tr->store;
                BAT *b = store->storage_api.bind_col(tr, c, QUICK);
@@ -2328,6 +2328,7 @@ stmt_for(backend *be, stmt *op1, stmt *m
                }
 
                s->op1 = op1;
+               s->op2 = min_val;
                s->flag = cmp_project;
                s->key = 0;
                s->nrcols = op1->nrcols;
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
@@ -354,6 +354,111 @@ statement ok
 START TRANSACTION
 
 statement ok
+CREATE TABLE rmct20(c0 BIGINT)
+
+statement ok
+CREATE TABLE rmct21(c0 BIGINT)
+
+statement ok rowcount 3
+INSERT INTO rmct20(c0) VALUES(40000), (26857000), (127117816000)
+
+statement ok rowcount 9
+INSERT INTO rmct21(c0) 
VALUES(1510153480000),(1054357633000),(93000),(542168641000),(1963352769000),(855906053000),(1937466219000),(27000),(875025185000)
+
+statement ok
+COMMIT
+
+statement ok
+CALL "sys"."dict_compress"('sys','rmct21','c0',true)
+
+statement ok rowcount 4
+INSERT INTO rmct21(c0) 
VALUES(1829991355000),(2073175664000),(1969480299000),(1534889714000)
+
+query T rowsort
+(SELECT greatest(rmct21.c0, rmct21.c0) FROM rmct21) INTERSECT ALL (SELECT 
DISTINCT sql_max(737555899, rmct21.c0) FROM rmct21)
+----
+1054357633000
+1510153480000
+1534889714000
+1829991355000
+1937466219000
+1963352769000
+1969480299000
+2073175664000
+542168641000
+855906053000
+875025185000
+
+statement ok
+START TRANSACTION
+
+statement ok
+DROP TABLE rmct20
+
+statement ok
+DROP TABLE rmct21
+
+statement ok
+COMMIT
+
+statement ok
+START TRANSACTION
+
+statement ok
+CREATE TABLE "t0" ("c0" INET)
+
+statement ok rowcount 18
+INSERT INTO "t0" VALUES 
('164.82.81.89'),('113.147.23.38'),('86.149.73.111'),('181.250.179.49/28'),('194.195.10.124/2'),('73.161.236.158'),('10.30.207.106'),
+('70.12.16.242/26'),('202.52.196.246/20'),('208.167.107.137'),('31.108.174.206'),('103.74.10.64/29'),('230.91.255.3/25'),('128.184.144.74'),('72.63.75.16/22'),
+('23.39.29.46/31'),('35.154.241.4/10'),('97.134.228.106/31')
+
+statement ok
+CREATE TABLE "t1" ("c0" INET)
+
+statement ok rowcount 13
+INSERT INTO "t1" VALUES 
('58.166.167.234/4'),('17.41.170.78'),(NULL),('125.66.199.214'),('31.72.22.103/13'),('177.199.200.115'),('140.247.168.238/24'),
+('175.250.175.86/17'),('16.63.246.44'),('54.110.196.2/0'),('208.9.31.24/0'),('119.47.128.18'),('5.250.95.199/28')
+
+statement ok
+COMMIT
+
+statement ok
+CALL "dict_compress"('sys','t1','c0',false)
+
+statement error MERGE DELETE: Multiple rows in the input relation match the 
same row in the target table 'sys.t1'
+MERGE INTO t1 USING (SELECT DISTINCT 0.3, sys."network"(t1.c0) FROM t1) AS 
mergejoined(c0,c1) ON TRUE WHEN MATCHED THEN UPDATE SET c0 = INET 
'56.157.166.36'
+
+statement ok
+START TRANSACTION
+
+statement ok
+DROP TABLE t0
+
+statement ok
+DROP TABLE t1
+
+statement ok
+COMMIT
+
+statement ok
+CREATE TABLE t0(c0 boolean PRIMARY KEY)
+
+statement ok rowcount 1
+INSERT INTO t0(c0) VALUES(TRUE)
+
+statement ok
+CALL "sys"."dict_compress"('sys','t0','c0')
+
+statement ok rowcount 1
+MERGE INTO t0 USING (SELECT INTERVAL '9' MONTH FROM t0) AS mergejoined(c0) ON 
t0.c0 WHEN MATCHED THEN UPDATE SET c0 = TRUE WHEN NOT MATCHED THEN INSERT (c0) 
VALUES (FALSE)
+
+statement ok
+DROP TABLE t0
+
+statement ok
+START TRANSACTION
+
+statement ok
 DROP ALL PROCEDURE "sys"."dict_compress"
 
 statement ok
@@ -361,3 +466,4 @@ DROP ALL PROCEDURE "sys"."for_compress"
 
 statement ok
 COMMIT
+
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to