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