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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list