Changeset: c803f8ba800b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/c803f8ba800b
Modified Files:
        gdk/gdk_analytic.h
        gdk/gdk_analytic_func.c
        sql/test/BugTracker-2024/Tests/orderby-max-over-rows-Bug-7488.test
Branch: default
Log Message:

fixed bug #7488, for ranges where the end is before the beginning skip 
computation of the window function using the segment tree


diffs (44 lines):

diff --git a/gdk/gdk_analytic.h b/gdk/gdk_analytic.h
--- a/gdk/gdk_analytic.h
+++ b/gdk/gdk_analytic.h
@@ -98,13 +98,14 @@ gdk_export gdk_return GDKrebuild_segment
        do { /* taken from https://www.vldb.org/pvldb/vol8/p1058-leis.pdf */ \
                oid begin = START, tend = END;                          \
                CAST computed;                                          \
-                                                                       \
                INIT_AGGREGATE(ARG1, ARG2, ARG3);                       \
+               if (begin < tend)                                       \
                for (oid level = 0; level < nlevels; level++) {         \
                        CAST *tlevel = (CAST *) segment_tree + 
levels_offset[level]; \
                        oid parent_begin = begin / SEGMENT_TREE_FANOUT; \
                        oid parent_end = tend / SEGMENT_TREE_FANOUT;    \
                                                                        \
+                                                                       \
                        if (parent_begin == parent_end) {               \
                                for (oid pos = begin; pos < tend; pos++) \
                                        COMPUTE(tlevel[pos], ARG1, ARG2, ARG3); 
\
diff --git a/gdk/gdk_analytic_func.c b/gdk/gdk_analytic_func.c
--- a/gdk/gdk_analytic_func.c
+++ b/gdk/gdk_analytic_func.c
@@ -37,7 +37,7 @@ GDKrebuild_segment_tree(oid ncount, oid 
 
        assert(ncount > 0);
        do { /* compute the next number of levels */
-               counter = (oid) ceil((dbl)counter / SEGMENT_TREE_FANOUT);
+               counter = (counter+(SEGMENT_TREE_FANOUT-1)) / 
SEGMENT_TREE_FANOUT;
                next_tree_size += counter;
                next_levels++;
        } while (counter > 1);
diff --git a/sql/test/BugTracker-2024/Tests/orderby-max-over-rows-Bug-7488.test 
b/sql/test/BugTracker-2024/Tests/orderby-max-over-rows-Bug-7488.test
--- a/sql/test/BugTracker-2024/Tests/orderby-max-over-rows-Bug-7488.test
+++ b/sql/test/BugTracker-2024/Tests/orderby-max-over-rows-Bug-7488.test
@@ -3,8 +3,7 @@ SELECT 0.100000 FROM dependencies ORDER 
 ----
 0.100
 
-skipif knownfail
 query R nosort
-SELECT 0.100000 FROM dependencies ORDER BY max ( 'y' ) OVER ( ROWS BETWEEN 
1.100000 PRECEDING AND 8 PRECEDING )
+SELECT 0.100000 FROM dependencies ORDER BY max ( 'y' ) OVER ( ROWS BETWEEN 
1.100000 PRECEDING AND 8 PRECEDING ) limit 1
 ----
 0.100
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to