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 -- [email protected]
To unsubscribe send an email to [email protected]