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

Reply via email to