Changeset: 4954a28ae547 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4954a28ae547
Modified Files:
        monetdb5/extras/crackers/crackers_core_unordered.mx
Branch: holindex
Log Message:

Fix return position when there are not any qualifying tuples.


diffs (59 lines):

diff --git a/monetdb5/extras/crackers/crackers_core_unordered.mx 
b/monetdb5/extras/crackers/crackers_core_unordered.mx
--- a/monetdb5/extras/crackers/crackers_core_unordered.mx
+++ b/monetdb5/extras/crackers/crackers_core_unordered.mx
@@ -1270,9 +1270,6 @@ static str CRKvectorized_MT_@2_@1 (const
                         }*/
                 }
         }
-        assert(f != BUN_NONE);
-       assert((f == last + 1 && src_t[f-1] @7 pivot) || src_t[f]   @8 pivot);
-       assert((f == first    && src_t[f]   @8 pivot) || src_t[f-1] @7 pivot);
 
        if(remaining_elements > 0)
        {
@@ -1281,6 +1278,11 @@ static str CRKvectorized_MT_@2_@1 (const
                oid *tmp_head = GDKmalloc(remaining_elements * sizeof(oid));
                @1 *tmp_tail = GDKmalloc(remaining_elements * sizeof(@1 ));
 
+               if (f == BUN_NONE) /*if there are not qualifying tuples*/
+               {
+                       f = first;
+               }
+
                while (src_t[lowerCursor] @7 pivot)
                {
                        lowerCursor++;
@@ -1309,19 +1311,25 @@ static str CRKvectorized_MT_@2_@1 (const
                }
                if (lowerCursor == upperCursor && src_t[lowerCursor] @7 pivot)
                        qualifying_elements += 1;
-               
-               memcpy(tmp_head, src_h + f, sizeof(oid)*qualifying_elements);
-               memcpy(src_h +  f, src_h + last + 1, 
sizeof(oid)*qualifying_elements);
-               memcpy(src_h + last + 1, tmp_head, 
sizeof(oid)*qualifying_elements);
-               memcpy(tmp_tail, src_t + f, sizeof(@1)*qualifying_elements);
-               memcpy(src_t + f, src_t + last + 1, 
sizeof(@1)*qualifying_elements);
-               memcpy(src_t + last + 1, tmp_tail, 
sizeof(@1)*qualifying_elements);                     
-               
+
+               if (qualifying_elements > 0)
+               {
+                       memcpy(tmp_head, src_h + f, 
sizeof(oid)*qualifying_elements);
+                       memcpy(src_h +  f, src_h + last + 1, 
sizeof(oid)*qualifying_elements);
+                       memcpy(src_h + last + 1, tmp_head, 
sizeof(oid)*qualifying_elements);
+                       memcpy(tmp_tail, src_t + f, 
sizeof(@1)*qualifying_elements);
+                       memcpy(src_t + f, src_t + last + 1, 
sizeof(@1)*qualifying_elements);
+                       memcpy(src_t + last + 1, tmp_tail, 
sizeof(@1)*qualifying_elements);                     
+               }
                f += qualifying_elements;
                GDKfree(tmp_head);
                GDKfree(tmp_tail);
        }
 
+        assert(f != BUN_NONE);
+       assert((f == last + 1 && src_t[f-1] @7 pivot) || src_t[f]   @8 pivot);
+       assert((f == first    && src_t[f]   @8 pivot) || src_t[f-1] @7 pivot);
+
         *pos = (BUN) (f == 0 ? 0 : f - 1);
 
        GDKfree(tmp_h);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to