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

Check for nil values in contains join.


diffs (129 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
@@ -5472,74 +5472,76 @@ STRcontainsselect(Client cntxt, MalBlkPt
 
 #define CONTAINS_JOIN_LOOP(STR_CMP, STR_LEN)                                   
                \
        do {                                                                    
                                                        \
-               canditer_init(&rci, r, cr);                                     
                                \
+               canditer_init(&rci, r, cr);                                     
                                        \
                for (BUN ridx = 0; ridx < rci.ncand; ridx++) {                  
                \
                        BAT *filtered_sl = NULL;                                
                                        \
                        GDK_CHECK_TIMEOUT(timeoffset, counter, 
GOTO_LABEL_TIMEOUT_HANDLER(exit)); \
                        ro = canditer_next(&rci);                               
                                        \
                        vr = VALUE(r, ro - rbase);                              
                                        \
-                       vr_len = STR_LEN;                                       
                                                \
                        matches = 0;                                            
                                                \
-                       if (with_strimps)                                       
                                                \
-                               filtered_sl = STRMPfilter(l, cl, vr, anti);     
                \
-                       if (filtered_sl)                                        
                                                \
-                               canditer_init(&lci, l, filtered_sl);            
                        \
-                       else                                                    
                                                        \
-                               canditer_init(&lci, l, cl);                     
                                \
-                       for (BUN lidx = 0; lidx < lci.ncand; lidx++) {          
                \
-                               lo = canditer_next(&lci);                       
                                        \
-                               vl = VALUE(l, lo - lbase);                      
                                        \
-                               if (strNil(vl))                                 
                                        \
-                                       continue;                               
                                                        \
-                               if (STR_CMP)                                    
                                                \
-                                       continue;                               
                                                        \
-                               if (BATcount(rl) == BATcapacity(rl)) {          
                        \
-                                       newcap = BATgrows(rl);                  
                                        \
-                                       BATsetcount(rl, BATcount(rl));          
                                \
-                                       if (rr)                                 
                                                \
-                                               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);     \
-                                               goto exit;                      
                                                        \
+                       if (!strNil(vr)) {                                      
                                                \
+                               vr_len = STR_LEN;                               
                                                \
+                               if (with_strimps)                               
                                                \
+                                       filtered_sl = STRMPfilter(l, cl, vr, 
anti);                     \
+                               if (filtered_sl)                                
                                                \
+                                       canditer_init(&lci, l, filtered_sl);    
                        \
+                               else                                            
                                                        \
+                                       canditer_init(&lci, l, cl);             
                                        \
+                               for (BUN lidx = 0; lidx < lci.ncand; lidx++) {  
                \
+                                       lo = canditer_next(&lci);               
                                        \
+                                       vl = VALUE(l, lo - lbase);              
                                        \
+                                       if (strNil(vl))                         
                                                \
+                                               continue;                       
                                                        \
+                                       if (STR_CMP)                            
                                                \
+                                               continue;                       
                                                        \
+                                       if (BATcount(rl) == BATcapacity(rl)) {  
                        \
+                                               newcap = BATgrows(rl);          
                                        \
+                                               BATsetcount(rl, BATcount(rl));  
                                \
+                                               if (rr)                         
                                                        \
+                                                       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);     \
+                                                       goto exit;              
                                                        \
+                                               }                               
                                                                \
+                                               assert(!rr || BATcapacity(rl) 
== BATcapacity(rr)); \
                                        }                                       
                                                                \
-                                       assert(!rr || BATcapacity(rl) == 
BATcapacity(rr));      \
-                               }                                               
                                                                \
-                               if (BATcount(rl) > 0) {                         
                                \
-                                       if (lastl + 1 != lo)                    
                                        \
-                                               rl->tseqbase = oid_nil;         
                                \
-                                       if (matches == 0) {                     
                                        \
-                                               if (rr)                         
                                                \
-                                                       rr->trevsorted = false; 
                                \
-                                               if (lastl > lo) {               
                                                \
-                                                       rl->tsorted = false;    
                                        \
-                                                       rl->tkey = false;       
                                                \
-                                               } else if (lastl < lo) {        
                                        \
-                                                       rl->trevsorted = false; 
                                \
-                                               } else {                        
                                                        \
-                                                       rl->tkey = false;       
                                                \
+                                       if (BATcount(rl) > 0) {                 
                                        \
+                                               if (lastl + 1 != lo)            
                                        \
+                                                       rl->tseqbase = oid_nil; 
                                        \
+                                               if (matches == 0) {             
                                                \
+                                                       if (rr)                 
                                                        \
+                                                               rr->trevsorted 
= false;                                 \
+                                                       if (lastl > lo) {       
                                                \
+                                                               rl->tsorted = 
false;                                    \
+                                                               rl->tkey = 
false;                                               \
+                                                       } else if (lastl < lo) 
{                                        \
+                                                               rl->trevsorted 
= false;                                 \
+                                                       } else {                
                                                        \
+                                                               rl->tkey = 
false;                                               \
+                                                       }                       
                                                                \
                                                }                               
                                                                \
                                        }                                       
                                                                \
+                                       APPEND(rl, lo);                         
                                                \
+                                       if (rr)                                 
                                                        \
+                                               APPEND(rr, ro);                 
                                                \
+                                       lastl = lo;                             
                                                        \
+                                       matches++;                              
                                                        \
                                }                                               
                                                                \
-                               APPEND(rl, lo);                                 
                                        \
-                               if (rr)                                         
                                                \
-                                       APPEND(rr, ro);                         
                                        \
-                               lastl = lo;                                     
                                                \
-                               matches++;                                      
                                                        \
+                               BBPreclaim(filtered_sl);                        
                                        \
                        }                                                       
                                                                \
-                       BBPreclaim(filtered_sl);                                
                                        \
                        if (rr) {                                               
                                                        \
                                if (matches > 1) {                              
                                                \
                                        rr->tkey = false;                       
                                                \
-                                       rr->tseqbase = oid_nil;                 
                                \
-                                       rl->trevsorted = false;                 
                                \
+                                       rr->tseqbase = oid_nil;                 
                                        \
+                                       rl->trevsorted = false;                 
                                        \
                                } else if (matches == 0) {                      
                                        \
                                        rskipped = BATcount(rr) > 0;            
                                \
                                } else if (rskipped) {                          
                                        \
-                                       rr->tseqbase = oid_nil;                 
                                \
+                                       rr->tseqbase = oid_nil;                 
                                        \
                                }                                               
                                                                \
                        } else if (matches > 1) {                               
                                        \
-                               rl->trevsorted = false;                         
                                \
+                               rl->trevsorted = false;                         
                                        \
                        }                                                       
                                                                \
                }                                                               
                                                                \
        } while (0)
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to