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