Changeset: 811966895ef2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=811966895ef2
Modified Files:
monetdb5/modules/atoms/mtime.c
sql/backends/monet5/sql_cast.c
sql/backends/monet5/sql_time.c
Branch: clean-candidates
Log Message:
Look for dense candidate lists
diffs (truncated from 730 to 300 lines):
diff --git a/monetdb5/modules/atoms/mtime.c b/monetdb5/modules/atoms/mtime.c
--- a/monetdb5/modules/atoms/mtime.c
+++ b/monetdb5/modules/atoms/mtime.c
@@ -212,10 +212,18 @@ NAME##_bulk(bat *ret, const bat *bid, co
}
\
INIT_SRC(src1, b1);
\
INIT_OUTPUT(dst, bn);
\
- for (BUN i = 0; i < n; i++) {
\
- BUN p = (BUN) (canditer_next(&ci) - off);
\
- FUNC_CALL(FUNC, (dst[i]), (GET_NEXT_SRC(src1)));
\
- nils |= is_##OUTTYPE##_nil(dst[i]);
\
+ if (ci.tpe == cand_dense) {
\
+ for (BUN i = 0; i < n; i++) {
\
+ BUN p = (BUN) (canditer_next_dense(&ci) - off);
\
+ FUNC_CALL(FUNC, (dst[i]), (GET_NEXT_SRC(src1)));
\
+ nils |= is_##OUTTYPE##_nil(dst[i]);
\
+ }
\
+ } else {
\
+ for (BUN i = 0; i < n; i++) {
\
+ BUN p = (BUN) (canditer_next(&ci) - off);
\
+ FUNC_CALL(FUNC, (dst[i]), (GET_NEXT_SRC(src1)));
\
+ nils |= is_##OUTTYPE##_nil(dst[i]);
\
+ }
\
}
\
bn->tnonil = !nils;
\
bn->tnil = nils;
\
diff --git a/sql/backends/monet5/sql_cast.c b/sql/backends/monet5/sql_cast.c
--- a/sql/backends/monet5/sql_cast.c
+++ b/sql/backends/monet5/sql_cast.c
@@ -67,17 +67,32 @@ batstr_2_blob(bat *res, const bat *bid,
goto bailout;
}
- for (BUN i = 0; i < q; i++) {
- BUN p = (BUN) (canditer_next(&ci) - off);
- str v = (str) BUNtvar(bi, p);
+ if (ci.tpe == cand_dense) {
+ for (BUN i = 0; i < q; i++) {
+ BUN p = (BUN) (canditer_next_dense(&ci) - off);
+ str v = (str) BUNtvar(bi, p);
- if ((msg = str_2_blob_imp(&r, &rlen, v)))
- goto bailout;
- if (tfastins_nocheckVAR(dst, i, r, Tsize(dst)) != GDK_SUCCEED) {
- msg = createException(SQL, "batcalc.str_2_blob",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
- goto bailout;
+ if ((msg = str_2_blob_imp(&r, &rlen, v)))
+ goto bailout;
+ if (tfastins_nocheckVAR(dst, i, r, Tsize(dst)) !=
GDK_SUCCEED) {
+ msg = createException(SQL,
"batcalc.str_2_blob", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ goto bailout;
+ }
+ nils |= ATOMcmp(TYPE_blob, r, ATOMnilptr(TYPE_blob)) ==
0;
}
- nils |= ATOMcmp(TYPE_blob, r, ATOMnilptr(TYPE_blob)) == 0;
+ } else {
+ for (BUN i = 0; i < q; i++) {
+ BUN p = (BUN) (canditer_next(&ci) - off);
+ str v = (str) BUNtvar(bi, p);
+
+ if ((msg = str_2_blob_imp(&r, &rlen, v)))
+ goto bailout;
+ if (tfastins_nocheckVAR(dst, i, r, Tsize(dst)) !=
GDK_SUCCEED) {
+ msg = createException(SQL,
"batcalc.str_2_blob", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ goto bailout;
+ }
+ nils |= ATOMcmp(TYPE_blob, r, ATOMnilptr(TYPE_blob)) ==
0;
+ }
}
bailout:
@@ -248,38 +263,75 @@ SQLbatstr_cast(Client cntxt, MalBlkPtr m
goto bailout;
}
- if (from_str) { /* string to string */
- for (BUN i = 0; i < q; i++) {
- BUN p = (BUN) (canditer_next(&ci) - off);
- str v = (str) BUNtail(bi, p);
+ if (ci.tpe == cand_dense) {
+ if (from_str) { /* string to string */
+ for (BUN i = 0; i < q; i++) {
+ BUN p = (BUN) (canditer_next_dense(&ci) - off);
+ str v = (str) BUNtail(bi, p);
- if (strNil(v)) {
- if (tfastins_nocheckVAR(dst, i, str_nil,
Tsize(dst)) != GDK_SUCCEED) {
- msg = createException(MAL,
"batcalc.str_cast", SQLSTATE(HY013) MAL_MALLOC_FAIL);
- goto bailout;
+ if (strNil(v)) {
+ if (tfastins_nocheckVAR(dst, i,
str_nil, Tsize(dst)) != GDK_SUCCEED) {
+ msg = createException(MAL,
"batcalc.str_cast", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ goto bailout;
+ }
+ nils = true;
+ } else {
+ if ((msg = SQLstr_cast_str(&r, &rlen,
v, digits)) != MAL_SUCCEED)
+ goto bailout;
+ if (tfastins_nocheckVAR(dst, i, r,
Tsize(dst)) != GDK_SUCCEED) {
+ msg = createException(SQL,
"batcalc.str_cast", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ goto bailout;
+ }
}
- nils = true;
- } else {
- if ((msg = SQLstr_cast_str(&r, &rlen, v,
digits)) != MAL_SUCCEED)
+ }
+ } else { /* any other type to string */
+ for (BUN i = 0; i < q; i++) {
+ BUN p = (BUN) (canditer_next_dense(&ci) - off);
+ ptr v = BUNtail(bi, p);
+
+ if ((msg = SQLstr_cast_any_type(&r, &rlen, m,
eclass, d1, s1, has_tz, v, tpe, digits)) != MAL_SUCCEED)
goto bailout;
if (tfastins_nocheckVAR(dst, i, r, Tsize(dst))
!= GDK_SUCCEED) {
msg = createException(SQL,
"batcalc.str_cast", SQLSTATE(HY013) MAL_MALLOC_FAIL);
goto bailout;
}
+ nils |= strNil(r);
}
}
- } else { /* any other type to string */
- for (BUN i = 0; i < q; i++) {
- BUN p = (BUN) (canditer_next(&ci) - off);
- ptr v = BUNtail(bi, p);
+ } else {
+ if (from_str) { /* string to string */
+ for (BUN i = 0; i < q; i++) {
+ BUN p = (BUN) (canditer_next(&ci) - off);
+ str v = (str) BUNtail(bi, p);
- if ((msg = SQLstr_cast_any_type(&r, &rlen, m, eclass,
d1, s1, has_tz, v, tpe, digits)) != MAL_SUCCEED)
- goto bailout;
- if (tfastins_nocheckVAR(dst, i, r, Tsize(dst)) !=
GDK_SUCCEED) {
- msg = createException(SQL, "batcalc.str_cast",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
- goto bailout;
+ if (strNil(v)) {
+ if (tfastins_nocheckVAR(dst, i,
str_nil, Tsize(dst)) != GDK_SUCCEED) {
+ msg = createException(MAL,
"batcalc.str_cast", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ goto bailout;
+ }
+ nils = true;
+ } else {
+ if ((msg = SQLstr_cast_str(&r, &rlen,
v, digits)) != MAL_SUCCEED)
+ goto bailout;
+ if (tfastins_nocheckVAR(dst, i, r,
Tsize(dst)) != GDK_SUCCEED) {
+ msg = createException(SQL,
"batcalc.str_cast", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ goto bailout;
+ }
+ }
}
- nils |= strNil(r);
+ } else { /* any other type to string */
+ for (BUN i = 0; i < q; i++) {
+ BUN p = (BUN) (canditer_next(&ci) - off);
+ ptr v = BUNtail(bi, p);
+
+ if ((msg = SQLstr_cast_any_type(&r, &rlen, m,
eclass, d1, s1, has_tz, v, tpe, digits)) != MAL_SUCCEED)
+ goto bailout;
+ if (tfastins_nocheckVAR(dst, i, r, Tsize(dst))
!= GDK_SUCCEED) {
+ msg = createException(SQL,
"batcalc.str_cast", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ goto bailout;
+ }
+ nils |= strNil(r);
+ }
}
}
diff --git a/sql/backends/monet5/sql_time.c b/sql/backends/monet5/sql_time.c
--- a/sql/backends/monet5/sql_time.c
+++ b/sql/backends/monet5/sql_time.c
@@ -75,15 +75,29 @@ daytime_2time_daytime(Client cntxt, MalB
if (is_a_bat) {
oid off = b->hseqbase;
daytime *restrict vals = (daytime*) Tloc(b, 0);
- for (BUN i = 0 ; i < q ; i++) {
- BUN p = (BUN) (canditer_next(&ci) - off);
- daytime next = vals[p];
+ if (ci.tpe == cand_dense) {
+ for (BUN i = 0; i < q; i++) {
+ BUN p = (BUN) (canditer_next_dense(&ci) - off);
+ daytime next = vals[p];
- if (is_daytime_nil(next)) {
- ret[i] = daytime_nil;
- nils = true;
- } else {
- ret[i] = daytime_2time_daytime_imp(next, shift,
divider, multiplier);
+ if (is_daytime_nil(next)) {
+ ret[i] = daytime_nil;
+ nils = true;
+ } else {
+ ret[i] =
daytime_2time_daytime_imp(next, shift, divider, multiplier);
+ }
+ }
+ } else {
+ for (BUN i = 0 ; i < q ; i++) {
+ BUN p = (BUN) (canditer_next(&ci) - off);
+ daytime next = vals[p];
+
+ if (is_daytime_nil(next)) {
+ ret[i] = daytime_nil;
+ nils = true;
+ } else {
+ ret[i] =
daytime_2time_daytime_imp(next, shift, divider, multiplier);
+ }
}
}
} else {
@@ -176,15 +190,29 @@ second_interval_2_daytime(Client cntxt,
if (is_a_bat) {
oid off = b->hseqbase;
lng *restrict vals = (lng*) Tloc(b, 0);
- for (BUN i = 0 ; i < q ; i++) {
- BUN p = (BUN) (canditer_next(&ci) - off);
- lng next = vals[p];
+ if (ci.tpe == cand_dense) {
+ for (BUN i = 0 ; i < q ; i++) {
+ BUN p = (BUN) (canditer_next_dense(&ci) - off);
+ lng next = vals[p];
- if (is_lng_nil(next)) {
- ret[i] = daytime_nil;
- nils = true;
- } else {
- ret[i] = second_interval_2_daytime_imp(next,
shift, divider, multiplier);
+ if (is_lng_nil(next)) {
+ ret[i] = daytime_nil;
+ nils = true;
+ } else {
+ ret[i] =
second_interval_2_daytime_imp(next, shift, divider, multiplier);
+ }
+ }
+ } else {
+ for (BUN i = 0 ; i < q ; i++) {
+ BUN p = (BUN) (canditer_next(&ci) - off);
+ lng next = vals[p];
+
+ if (is_lng_nil(next)) {
+ ret[i] = daytime_nil;
+ nils = true;
+ } else {
+ ret[i] =
second_interval_2_daytime_imp(next, shift, divider, multiplier);
+ }
}
}
} else {
@@ -305,15 +333,29 @@ str_2time_daytimetz_internal(ptr out, pt
if (is_a_bat) {
oid off = b->hseqbase;
BATiter it = bat_iterator(b);
- for (BUN i = 0 ; i < q && !msg; i++) {
- BUN p = (BUN) (canditer_next(&ci) - off);
- str next = BUNtail(it, p);
+ if (ci.tpe == cand_dense) {
+ for (BUN i = 0 ; i < q && !msg; i++) {
+ BUN p = (BUN) (canditer_next_dense(&ci) - off);
+ str next = BUNtail(it, p);
- if (strNil(next)) {
- ret[i] = daytime_nil;
- nils = true;
- } else {
- msg =
str_2time_daytimetz_internal_imp(&(ret[i]), next, fromstr_func, shift, divider,
multiplier);
+ if (strNil(next)) {
+ ret[i] = daytime_nil;
+ nils = true;
+ } else {
+ msg =
str_2time_daytimetz_internal_imp(&(ret[i]), next, fromstr_func, shift, divider,
multiplier);
+ }
+ }
+ } else {
+ for (BUN i = 0 ; i < q && !msg; i++) {
+ BUN p = (BUN) (canditer_next(&ci) - off);
+ str next = BUNtail(it, p);
+
+ if (strNil(next)) {
+ ret[i] = daytime_nil;
+ nils = true;
+ } else {
+ msg =
str_2time_daytimetz_internal_imp(&(ret[i]), next, fromstr_func, shift, divider,
multiplier);
+ }
}
}
} else {
@@ -432,15 +474,29 @@ timestamp_2_daytime(Client cntxt, MalBlk
if (is_a_bat) {
oid off = b->hseqbase;
timestamp *restrict vals = (timestamp*) Tloc(b, 0);
- for (BUN i = 0 ; i < q ; i++) {
- BUN p = (BUN) (canditer_next(&ci) - off);
- timestamp next = vals[p];
+ if (ci.tpe == cand_dense) {
+ for (BUN i = 0 ; i < q; i++) {
+ BUN p = (BUN) (canditer_next_dense(&ci) - off);
+ timestamp next = vals[p];
- if (is_timestamp_nil(next)) {
- ret[i] = daytime_nil;
- nils = true;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list