Changeset: 0107d2897550 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0107d2897550
Added Files:
        monetdb5/modules/kernel/Tests/select.malC
        monetdb5/modules/kernel/Tests/select.stable.err
        monetdb5/modules/kernel/Tests/select.stable.out
Modified Files:
        gdk/gdk_select.c
        monetdb5/modules/kernel/Tests/All
        monetdb5/modules/mal/Tests/orderidx01.malC
        monetdb5/modules/mal/Tests/orderidx02.malC
Branch: Dec2016
Log Message:

Fix algebra.subselect so that it conforms to the comments; add test to confirm.


diffs (truncated from 2943 to 300 lines):

diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -1275,14 +1275,13 @@ BATselect(BAT *b, BAT *s, const void *tl
        equi = th == NULL || (lval && ATOMcmp(t, tl, th) == 0); /* point 
select? */
        if (equi) {
                assert(lval);
-               hi = li;
+               if (th == NULL)
+                       hi = li;
                th = tl;
                hval = 1;
        } else {
                hval = ATOMcmp(t, th, nil) != 0;
        }
-       if (!equi && !lval && !hval && lnil) 
-               anti = !anti;
        if (anti) {
                if (lval != hval) {
                        /* one of the end points is nil and the other
diff --git a/monetdb5/modules/kernel/Tests/All 
b/monetdb5/modules/kernel/Tests/All
--- a/monetdb5/modules/kernel/Tests/All
+++ b/monetdb5/modules/kernel/Tests/All
@@ -1,3 +1,4 @@
 time01
 TriBool
 batstr
+select
diff --git a/monetdb5/modules/kernel/Tests/select.malC 
b/monetdb5/modules/kernel/Tests/select.malC
new file mode 100644
--- /dev/null
+++ b/monetdb5/modules/kernel/Tests/select.malC
@@ -0,0 +1,1010 @@
+b := bat.new(:int);
+bat.append(b, 7);
+bat.append(b, 6);
+bat.append(b, 8);
+bat.append(b, nil:int);
+bat.append(b, 9);
+bat.append(b, 5);
+bat.append(b, 0);
+bat.append(b, 3);
+bat.append(b, 2);
+bat.append(b, 1);
+bat.append(b, 4);
+s := algebra.subsort(b, false, true);
+r := algebra.subsort(b, true, true);
+bat.setAccess(b, "r");
+bat.setAccess(s, "r");
+bat.setAccess(r, "r");
+
+# if tl and th are both nil, and li and hi are both true,
+# algebra.subselect translates th to NULL
+
+x := algebra.subselect(b, nil:int, nil:int, true, true, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # nil
+io.print("nil");
+x := algebra.subselect(b, nil:int, nil:int, true, false, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 0,1,2,3,4,5,6,7,8,9
+io.print("0,1,2,3,4,5,6,7,8,9");
+x := algebra.subselect(b, nil:int, nil:int, false, true, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 0,1,2,3,4,5,6,7,8,9
+io.print("0,1,2,3,4,5,6,7,8,9");
+x := algebra.subselect(b, nil:int, nil:int, false, false, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 0,1,2,3,4,5,6,7,8,9
+io.print("0,1,2,3,4,5,6,7,8,9");
+x := algebra.subselect(b, nil:int, nil:int, true, true, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 0,1,2,3,4,5,6,7,8,9
+io.print("0,1,2,3,4,5,6,7,8,9");
+x := algebra.subselect(b, nil:int, nil:int, true, false, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # nothing
+io.print("nothing");
+x := algebra.subselect(b, nil:int, nil:int, false, true, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # nothing
+io.print("nothing");
+x := algebra.subselect(b, nil:int, nil:int, false, false, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # nothing
+io.print("nothing");
+
+x := algebra.subselect(b, 4, nil:int, true, true, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 4,5,6,7,8,9
+io.print("4,5,6,7,8,9");
+x := algebra.subselect(b, 4, nil:int, true, false, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 4,5,6,7,8,9
+io.print("4,5,6,7,8,9");
+x := algebra.subselect(b, 4, nil:int, false, true, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 5,6,7,8,9
+io.print("5,6,7,8,9");
+x := algebra.subselect(b, 4, nil:int, false, false, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 5,6,7,8,9
+io.print("5,6,7,8,9");
+x := algebra.subselect(b, 4, nil:int, true, true, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 0,1,2,3
+io.print("0,1,2,3");
+x := algebra.subselect(b, 4, nil:int, true, false, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 0,1,2,3
+io.print("0,1,2,3");
+x := algebra.subselect(b, 4, nil:int, false, true, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 0,1,2,3,4
+io.print("0,1,2,3,4");
+x := algebra.subselect(b, 4, nil:int, false, false, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 0,1,2,3,4
+io.print("0,1,2,3,4");
+
+x := algebra.subselect(b, nil:int, 4, true, true, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 0,1,2,3,4
+io.print("0,1,2,3,4");
+x := algebra.subselect(b, nil:int, 4, true, false, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 0,1,2,3
+io.print("0,1,2,3");
+x := algebra.subselect(b, nil:int, 4, false, true, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 0,1,2,3,4
+io.print("0,1,2,3,4");
+x := algebra.subselect(b, nil:int, 4, false, false, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 0,1,2,3
+io.print("0,1,2,3");
+x := algebra.subselect(b, nil:int, 4, true, true, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 5,6,7,8,9
+io.print("5,6,7,8,9");
+x := algebra.subselect(b, nil:int, 4, true, false, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 4,5,6,7,8,9
+io.print("4,5,6,7,8,9");
+x := algebra.subselect(b, nil:int, 4, false, true, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 5,6,7,8,9
+io.print("5,6,7,8,9");
+x := algebra.subselect(b, nil:int, 4, false, false, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 4,5,6,7,8,9
+io.print("4,5,6,7,8,9");
+
+x := algebra.subselect(b, 4, 4, true, true, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 4
+io.print("4");
+x := algebra.subselect(b, 4, 4, true, false, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # nothing
+io.print("nothing");
+x := algebra.subselect(b, 4, 4, false, true, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # nothing
+io.print("nothing");
+x := algebra.subselect(b, 4, 4, false, false, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # nothing
+io.print("nothing");
+x := algebra.subselect(b, 4, 4, true, true, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 0,1,2,3,5,6,7,8,9
+io.print("0,1,2,3,5,6,7,8,9");
+x := algebra.subselect(b, 4, 4, true, false, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 0,1,2,3,4,5,6,7,8,9
+io.print("0,1,2,3,4,5,6,7,8,9");
+x := algebra.subselect(b, 4, 4, false, true, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 0,1,2,3,4,5,6,7,8,9
+io.print("0,1,2,3,4,5,6,7,8,9");
+x := algebra.subselect(b, 4, 4, false, false, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 0,1,2,3,4,5,6,7,8,9
+io.print("0,1,2,3,4,5,6,7,8,9");
+
+x := algebra.subselect(b, 3, 7, true, true, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 3,4,5,6,7
+io.print("3,4,5,6,7");
+x := algebra.subselect(b, 3, 7, true, false, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 3,4,5,6
+io.print("3,4,5,6");
+x := algebra.subselect(b, 3, 7, false, true, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 4,5,6,7
+io.print("4,5,6,7");
+x := algebra.subselect(b, 3, 7, false, false, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 4,5,6
+io.print("4,5,6");
+x := algebra.subselect(b, 3, 7, true, true, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 0,1,2,8,9
+io.print("0,1,2,8,9");
+x := algebra.subselect(b, 3, 7, true, false, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 0,1,2,7,8,9
+io.print("0,1,2,7,8,9");
+x := algebra.subselect(b, 3, 7, false, true, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 0,1,2,3,8,9
+io.print("0,1,2,3,8,9");
+x := algebra.subselect(b, 3, 7, false, false, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # 0,1,2,3,7,8,9
+io.print("0,1,2,3,7,8,9");
+
+x := algebra.subselect(b, 7, 3, true, true, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # nothing
+io.print("nothing");
+x := algebra.subselect(b, 7, 3, true, false, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # nothing
+io.print("nothing");
+x := algebra.subselect(b, 7, 3, false, true, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # nothing
+io.print("nothing");
+x := algebra.subselect(b, 7, 3, false, false, false);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # nothing
+io.print("nothing");
+x := algebra.subselect(b, 7, 3, true, true, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # nothing
+io.print("nothing");
+x := algebra.subselect(b, 7, 3, true, false, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # nothing
+io.print("nothing");
+x := algebra.subselect(b, 7, 3, false, true, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # nothing
+io.print("nothing");
+x := algebra.subselect(b, 7, 3, false, false, true);
+z := algebra.projection(x, b);
+z := algebra.subsort(z, false, true);
+io.print(z);                    # nothing
+io.print("nothing");
+
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to