Changeset: ab48214902b5 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ab48214902b5 Modified Files: gdk/gdk_calc.c gdk/gdk_subquery.c sql/test/miscellaneous/Tests/simple_selects.test Branch: default Log Message:
Improving for fixed size types
diffs (truncated from 688 to 300 lines):
diff --git a/gdk/gdk_calc.c b/gdk/gdk_calc.c
--- a/gdk/gdk_calc.c
+++ b/gdk/gdk_calc.c
@@ -1268,35 +1268,71 @@ BATcalcmin(BAT *b1, BAT *b2, BAT *s1, BA
BATiter b1i = bat_iterator(b1), b2i = bat_iterator(b2);
int (*cmp)(const void *, const void *) = ATOMcompare(b1->ttype);
- if (ci1.tpe == cand_dense && ci2.tpe == cand_dense) {
- for (BUN i = 0; i < ncand; i++) {
- oid x1 = canditer_next_dense(&ci1) - b1hseqbase;
- oid x2 = canditer_next_dense(&ci2) - b2hseqbase;
- const void *p1 = BUNtail(b1i, x1);
- const void *p2 = BUNtail(b2i, x2);
- if (cmp(p1, nil) == 0 || cmp(p2, nil) == 0) {
- nils = true;
- p1 = nil;
- } else {
- p1 = cmp(p1, p2) < 0 ? p1 : p2;
+ if (ATOMvarsized(b1->ttype)) {
+ if (ci1.tpe == cand_dense && ci2.tpe == cand_dense) {
+ for (BUN i = 0; i < ncand; i++) {
+ oid x1 = canditer_next_dense(&ci1) -
b1hseqbase;
+ oid x2 = canditer_next_dense(&ci2) -
b2hseqbase;
+ const void *p1 = BUNtail(b1i, x1);
+ const void *p2 = BUNtail(b2i, x2);
+ if (cmp(p1, nil) == 0 || cmp(p2, nil)
== 0) {
+ nils = true;
+ p1 = nil;
+ } else {
+ p1 = cmp(p1, p2) < 0 ? p1 : p2;
+ }
+ if (tfastins_nocheckVAR(bn, i, p1,
Tsize(bn)) != GDK_SUCCEED)
+ goto bunins_failed;
}
- if (tfastins_nocheckVAR(bn, i, p1, Tsize(bn))
!= GDK_SUCCEED)
- goto bunins_failed;
+ } else {
+ for (BUN i = 0; i < ncand; i++) {
+ oid x1 = canditer_next(&ci1) -
b1hseqbase;
+ oid x2 = canditer_next(&ci2) -
b2hseqbase;
+ const void *p1 = BUNtail(b1i, x1);
+ const void *p2 = BUNtail(b2i, x2);
+ if (cmp(p1, nil) == 0 || cmp(p2, nil)
== 0) {
+ nils = true;
+ p1 = nil;
+ } else {
+ p1 = cmp(p1, p2) < 0 ? p1 : p2;
+ }
+ if (tfastins_nocheckVAR(bn, i, p1,
Tsize(bn)) != GDK_SUCCEED)
+ goto bunins_failed;
+ }
}
} else {
- for (BUN i = 0; i < ncand; i++) {
- oid x1 = canditer_next(&ci1) - b1hseqbase;
- oid x2 = canditer_next(&ci2) - b2hseqbase;
- const void *p1 = BUNtail(b1i, x1);
- const void *p2 = BUNtail(b2i, x2);
- if (cmp(p1, nil) == 0 || cmp(p2, nil) == 0) {
- nils = true;
- p1 = nil;
- } else {
- p1 = cmp(p1, p2) < 0 ? p1 : p2;
+ uint8_t *restrict bcast = (uint8_t *) Tloc(bn, 0);
+ uint16_t width = bn->twidth;
+ if (ci1.tpe == cand_dense && ci2.tpe == cand_dense) {
+ for (BUN i = 0; i < ncand; i++) {
+ oid x1 = canditer_next_dense(&ci1) -
b1hseqbase;
+ oid x2 = canditer_next_dense(&ci2) -
b2hseqbase;
+ const void *p1 = BUNtail(b1i, x1);
+ const void *p2 = BUNtail(b2i, x2);
+ if (cmp(p1, nil) == 0 || cmp(p2, nil)
== 0) {
+ nils = true;
+ p1 = nil;
+ } else {
+ p1 = cmp(p1, p2) < 0 ? p1 : p2;
+ }
+ memcpy(bcast, p1, width);
+ bcast += width;
}
- if (tfastins_nocheckVAR(bn, i, p1, Tsize(bn))
!= GDK_SUCCEED)
- goto bunins_failed;
+ } else {
+ for (BUN i = 0; i < ncand; i++) {
+ oid x1 = canditer_next(&ci1) -
b1hseqbase;
+ oid x2 = canditer_next(&ci2) -
b2hseqbase;
+ const void *p1 = BUNtail(b1i, x1);
+ const void *p2 = BUNtail(b2i, x2);
+ if (cmp(p1, nil) == 0 || cmp(p2, nil)
== 0) {
+ nils = true;
+ p1 = nil;
+ } else {
+ p1 = cmp(p1, p2) < 0 ? p1 : p2;
+ }
+ memcpy(bcast, p1, width);
+ bcast += width;
+ }
}
}
}
@@ -1427,43 +1463,87 @@ BATcalcmin_no_nil(BAT *b1, BAT *b2, BAT
BATiter b1i = bat_iterator(b1), b2i = bat_iterator(b2);
int (*cmp)(const void *, const void *) = ATOMcompare(b1->ttype);
- if (ci1.tpe == cand_dense && ci2.tpe == cand_dense) {
- for (BUN i = 0; i < ncand; i++) {
- oid x1 = canditer_next_dense(&ci1) - b1hseqbase;
- oid x2 = canditer_next_dense(&ci2) - b2hseqbase;
- const void *p1 = BUNtail(b1i, x1);
- const void *p2 = BUNtail(b2i, x2);
- if (cmp(p1, nil) == 0) {
- if (cmp(p2, nil) == 0) {
- /* both values are nil */
- nils = true;
+ if (ATOMvarsized(b1->ttype)) {
+ if (ci1.tpe == cand_dense && ci2.tpe == cand_dense) {
+ for (BUN i = 0; i < ncand; i++) {
+ oid x1 = canditer_next_dense(&ci1) -
b1hseqbase;
+ oid x2 = canditer_next_dense(&ci2) -
b2hseqbase;
+ const void *p1 = BUNtail(b1i, x1);
+ const void *p2 = BUNtail(b2i, x2);
+ if (cmp(p1, nil) == 0) {
+ if (cmp(p2, nil) == 0) {
+ /* both values are nil
*/
+ nils = true;
+ } else {
+ p1 = p2;
+ }
} else {
- p1 = p2;
+ p1 = cmp(p2, nil) != 0 &&
cmp(p2, p1) < 0 ? p2 : p1;
}
- } else {
- p1 = cmp(p2, nil) != 0 && cmp(p2, p1) <
0 ? p2 : p1;
+ if (tfastins_nocheckVAR(bn, i, p1,
Tsize(bn)) != GDK_SUCCEED)
+ goto bunins_failed;
}
- if (tfastins_nocheckVAR(bn, i, p1, Tsize(bn))
!= GDK_SUCCEED)
- goto bunins_failed;
+ } else {
+ for (BUN i = 0; i < ncand; i++) {
+ oid x1 = canditer_next(&ci1) -
b1hseqbase;
+ oid x2 = canditer_next(&ci2) -
b2hseqbase;
+ const void *p1 = BUNtail(b1i, x1);
+ const void *p2 = BUNtail(b2i, x2);
+ if (cmp(p1, nil) == 0) {
+ if (cmp(p2, nil) == 0) {
+ /* both values are nil
*/
+ nils = true;
+ } else {
+ p1 = p2;
+ }
+ } else {
+ p1 = cmp(p2, nil) != 0 &&
cmp(p2, p1) < 0 ? p2 : p1;
+ }
+ if (tfastins_nocheckVAR(bn, i, p1,
Tsize(bn)) != GDK_SUCCEED)
+ goto bunins_failed;
+ }
}
} else {
- for (BUN i = 0; i < ncand; i++) {
- oid x1 = canditer_next(&ci1) - b1hseqbase;
- oid x2 = canditer_next(&ci2) - b2hseqbase;
- const void *p1 = BUNtail(b1i, x1);
- const void *p2 = BUNtail(b2i, x2);
- if (cmp(p1, nil) == 0) {
- if (cmp(p2, nil) == 0) {
- /* both values are nil */
- nils = true;
+ uint8_t *restrict bcast = (uint8_t *) Tloc(bn, 0);
+ uint16_t width = bn->twidth;
+ if (ci1.tpe == cand_dense && ci2.tpe == cand_dense) {
+ for (BUN i = 0; i < ncand; i++) {
+ oid x1 = canditer_next_dense(&ci1) -
b1hseqbase;
+ oid x2 = canditer_next_dense(&ci2) -
b2hseqbase;
+ const void *p1 = BUNtail(b1i, x1);
+ const void *p2 = BUNtail(b2i, x2);
+ if (cmp(p1, nil) == 0) {
+ if (cmp(p2, nil) == 0) {
+ /* both values are nil
*/
+ nils = true;
+ } else {
+ p1 = p2;
+ }
} else {
- p1 = p2;
+ p1 = cmp(p2, nil) != 0 &&
cmp(p2, p1) < 0 ? p2 : p1;
}
- } else {
- p1 = cmp(p2, nil) != 0 && cmp(p2, p1) <
0 ? p2 : p1;
+ memcpy(bcast, p1, width);
+ bcast += width;
}
- if (tfastins_nocheckVAR(bn, i, p1, Tsize(bn))
!= GDK_SUCCEED)
- goto bunins_failed;
+ } else {
+ for (BUN i = 0; i < ncand; i++) {
+ oid x1 = canditer_next(&ci1) -
b1hseqbase;
+ oid x2 = canditer_next(&ci2) -
b2hseqbase;
+ const void *p1 = BUNtail(b1i, x1);
+ const void *p2 = BUNtail(b2i, x2);
+ if (cmp(p1, nil) == 0) {
+ if (cmp(p2, nil) == 0) {
+ /* both values are nil
*/
+ nils = true;
+ } else {
+ p1 = p2;
+ }
+ } else {
+ p1 = cmp(p2, nil) != 0 &&
cmp(p2, p1) < 0 ? p2 : p1;
+ }
+ memcpy(bcast, p1, width);
+ bcast += width;
+ }
}
}
}
@@ -1571,17 +1651,34 @@ BATcalcmincst(BAT *b, const ValRecord *v
default: {
BATiter bi = bat_iterator(b);
- for (BUN i = 0; i < ncand; i++) {
- oid x = canditer_next(&ci) - bhseqbase;
- const void *p1 = BUNtail(bi, x);
- if (cmp(p1, nil) == 0) {
- nils = true;
- p1 = nil;
- } else {
- p1 = cmp(p1, p2) < 0 ? p1 : p2;
- }
- if (tfastins_nocheckVAR(bn, i, p1, Tsize(bn)) !=
GDK_SUCCEED)
- goto bunins_failed;
+ if (ATOMvarsized(b->ttype)) {
+ for (BUN i = 0; i < ncand; i++) {
+ oid x = canditer_next(&ci) - bhseqbase;
+ const void *restrict p1 = BUNtail(bi, x);
+ if (cmp(p1, nil) == 0) {
+ nils = true;
+ p1 = nil;
+ } else {
+ p1 = cmp(p1, p2) < 0 ? p1 : p2;
+ }
+ if (tfastins_nocheckVAR(bn, i, p1, Tsize(bn))
!= GDK_SUCCEED)
+ goto bunins_failed;
+ }
+ } else {
+ uint8_t *restrict bcast = (uint8_t *) Tloc(bn, 0);
+ uint16_t width = bn->twidth;
+ for (BUN i = 0; i < ncand; i++) {
+ oid x = canditer_next(&ci) - bhseqbase;
+ const void *restrict p1 = BUNtail(bi, x);
+ if (cmp(p1, nil) == 0) {
+ nils = true;
+ p1 = nil;
+ } else {
+ p1 = cmp(p1, p2) < 0 ? p1 : p2;
+ }
+ memcpy(bcast, p1, width);
+ bcast += width;
+ }
}
}
}
@@ -1703,21 +1800,43 @@ BATcalcmincst_no_nil(BAT *b, const ValRe
default: {
BATiter bi = bat_iterator(b);
- if (cmp(p2, nil) == 0) {
- for (BUN i = 0; i < ncand; i++) {
- oid x = canditer_next(&ci) - bhseqbase;
- const void *p1 = BUNtail(bi, x);
- nils |= cmp(p1, nil) == 0;
- if (tfastins_nocheckVAR(bn, i, p1, Tsize(bn))
!= GDK_SUCCEED)
- goto bunins_failed;
+ if (ATOMvarsized(b->ttype)) {
+ if (cmp(p2, nil) == 0) {
+ for (BUN i = 0; i < ncand; i++) {
+ oid x = canditer_next(&ci) - bhseqbase;
+ const void *restrict p1 = BUNtail(bi,
x);
+ nils |= cmp(p1, nil) == 0;
+ if (tfastins_nocheckVAR(bn, i, p1,
Tsize(bn)) != GDK_SUCCEED)
+ goto bunins_failed;
+ }
+ } else {
+ for (BUN i = 0; i < ncand; i++) {
+ oid x = canditer_next(&ci) - bhseqbase;
+ const void *restrict p1 = BUNtail(bi,
x);
+ p1 = cmp(p1, nil) == 0 || cmp(p2, p1) <
0 ? p2 : p1;
+ if (tfastins_nocheckVAR(bn, i, p1,
Tsize(bn)) != GDK_SUCCEED)
+ goto bunins_failed;
+ }
}
} else {
- for (BUN i = 0; i < ncand; i++) {
- oid x = canditer_next(&ci) - bhseqbase;
- const void *p1 = BUNtail(bi, x);
- p1 = cmp(p1, nil) == 0 || cmp(p2, p1) < 0 ? p2
: p1;
- if (tfastins_nocheckVAR(bn, i, p1, Tsize(bn))
!= GDK_SUCCEED)
- goto bunins_failed;
+ uint8_t *restrict bcast = (uint8_t *) Tloc(bn, 0);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list
