Changeset: 0c7e2d3d4431 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/0c7e2d3d4431
Modified Files:
        monetdb5/modules/atoms/str.c
Branch: sw_ew_c_sorting
Log Message:

Skip candidates properly


diffs (142 lines):

diff --git a/monetdb5/modules/atoms/str.c b/monetdb5/modules/atoms/str.c
--- a/monetdb5/modules/atoms/str.c
+++ b/monetdb5/modules/atoms/str.c
@@ -3834,19 +3834,19 @@ STRupper(str *res, const str *arg1)
 }
 
 /* returns whether arg1 starts with arg2 */
-bit
+int
 str_is_prefix(const char *s, const char *prefix, int plen)
 {
        return strncmp(s, prefix, plen);
 }
 
-bit
+int
 str_is_iprefix(const char *s, const char *prefix, int plen)
 {
        return utf8ncasecmp(s, prefix, plen);
 }
 
-bit
+int
 str_is_suffix(const char *s, const char *suffix, int sul)
 {
        int sl = str_strlen(s);
@@ -3857,7 +3857,7 @@ str_is_suffix(const char *s, const char 
                return strcmp(s + sl - sul, suffix);
 }
 
-bit
+int
 str_is_isuffix(const char *s, const char *suffix, int sul)
 {
        int sl = str_strlen(s);
@@ -3868,7 +3868,7 @@ str_is_isuffix(const char *s, const char
                return utf8casecmp(s + sl - sul, suffix);
 }
 
-bit
+int
 str_contains(const char *h, const char *n, int nlen)
 {
        (void) nlen;
@@ -3876,7 +3876,7 @@ str_contains(const char *h, const char *
        return strstr(h, n) ? 0 : 1;
 }
 
-bit
+int
 str_icontains(const char *h, const char *n, int nlen)
 {
        (void) nlen;
@@ -5236,7 +5236,7 @@ BBPnreclaim(int nargs, ...)
 static str
 str_select(BAT *bn, BAT *b, BAT *s, struct canditer *ci, BUN p, BUN q,
                                 BUN *rcnt, const char *key, bool anti,
-                                bit (*str_cmp)(const char *, const char *, 
int),
+                                int (*str_cmp)(const char *, const char *, 
int),
                                 bool keep_nulls)
 {
        BATiter bi = bat_iterator(b);
@@ -5266,7 +5266,7 @@ str_select(BAT *bn, BAT *b, BAT *s, stru
 
 static str
 STRselect(bat *r_id, const bat *b_id, const bat *cb_id, const char *key,
-                         const bit anti, bit (*str_cmp)(const char *, const 
char *, int),
+                         const bit anti, int (*str_cmp)(const char *, const 
char *, int),
                          const str fname)
 {
        str msg = MAL_SUCCEED;
@@ -5616,21 +5616,21 @@ STRcontainsselect(Client cntxt, MalBlkPt
 #define STARTSWITH_SORTED_LOOP(STR_CMP, STR_LEN, FNAME)                        
        \
        do {                                                                    
                                                        \
                canditer_init(&rci, sorted_r, sorted_cr);                       
                        \
+               canditer_init(&lci, sorted_l, sorted_cl);                       
                        \
                for (BUN lidx = 0,ridx = 0; ridx < rci.ncand; ridx++) {         
\
                        GDK_CHECK_TIMEOUT(timeoffset, counter, 
GOTO_LABEL_TIMEOUT_HANDLER(exit)); \
                        ro = canditer_next(&rci);                               
                                        \
                        vr = VALUE(r, ro - rbase);                              
                                        \
                        if (strNil(vr))                                         
                                        \
                                continue;                                       
                                                        \
-                       vr_len = STR_LEN;                                       
                                                \
+                       vr_len = str_strlen(vr);                                
                                        \
                        matches = 0;                                            
                                                \
-                       canditer_init(&lci, sorted_l, sorted_cl);               
                        \
-                       for (n = lidx; n < lci.ncand; n++) {                    
                        \
+                       for (canditer_setidx(&lci, lidx), n = lidx; n < 
lci.ncand; n++) { \
                                lo = canditer_next(&lci);                       
                                        \
                                vl = VALUE(l, lo - lbase);                      
                                        \
                                if (strNil(vl))                                 
                                        \
                                        continue;                               
                                                        \
-                               cmp = STR_CMP;                                  
                                                \
+                               cmp = str_cmp(vl, vr, vr_len);                  
                                \
                                if (cmp < 0) {                                  
                                                \
                                        lidx++;                                 
                                                \
                                        continue;                               
                                                        \
@@ -5644,7 +5644,7 @@ STRcontainsselect(Client cntxt, MalBlkPt
                                                BATsetcount(rr, BATcount(rr));  
                                \
                                        if (BATextend(rl, newcap) != 
GDK_SUCCEED ||             \
                                                (rr && BATextend(rr, newcap) != 
GDK_SUCCEED)) { \
-                                               msg = createException(MAL, 
FNAME, SQLSTATE(HY013) MAL_MALLOC_FAIL); \
+                                               msg = createException(MAL, 
fname, SQLSTATE(HY013) MAL_MALLOC_FAIL); \
                                                goto exit;                      
                                                        \
                                        }                                       
                                                                \
                                        assert(!rr || BATcapacity(rl) == 
BATcapacity(rr));      \
@@ -5788,7 +5788,7 @@ batstr_strrev(BAT **r, BAT *b)
 
 static str
 str_join_nested(BAT *rl, BAT *rr, BAT *l, BAT *r, BAT *cl, BAT *cr,
-                               bit anti, bit (*str_cmp)(const char *, const 
char *, int), str fname)
+                               bit anti, int (*str_cmp)(const char *, const 
char *, int), str fname)
 {
        str msg = MAL_SUCCEED;
 
@@ -5875,7 +5875,7 @@ exit:
 
 static str
 contains_join(BAT *rl, BAT *rr, BAT *l, BAT *r, BAT *cl, BAT *cr, bit anti,
-                         bit (*str_cmp)(const char *, const char *, int), 
const str fname)
+                         int (*str_cmp)(const char *, const char *, int), 
const str fname)
 {
        str msg = MAL_SUCCEED;
 
@@ -5970,7 +5970,7 @@ exit:
 
 static str
 startswith_join(BAT **rl_ptr, BAT **rr_ptr, BAT *l, BAT *r, BAT *cl, BAT *cr,
-                               bit anti, bit (*str_cmp)(const char *, const 
char *, int), str fname)
+                               bit anti, int (*str_cmp)(const char *, const 
char *, int), str fname)
 {
        str msg = MAL_SUCCEED;
        gdk_return rc;
@@ -6137,7 +6137,7 @@ exit:
 static str
 STRjoin(bat *rl_id, bat *rr_id, const bat l_id, const bat r_id,
                const bat cl_id, const bat cr_id, const bit anti,
-               bit (*str_cmp)(const char *, const char *, int), str fname)
+               int (*str_cmp)(const char *, const char *, int), str fname)
 {
        str msg = MAL_SUCCEED;
 
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to