1
0
mirror of https://github.com/MariaDB/server.git synced 2025-12-09 08:01:34 +03:00
Commit Graph

27 Commits

Author SHA1 Message Date
Sergei Petrunia
e88758330c Make window functions computation step show up in EXPLAIN FORMAT=JSON output 2016-03-28 18:38:42 +03:00
Igor Babaev
82cb35be11 Changed the base class for Item_window_func from Item_result_field to
Item_func_or_sum.
Implemented method update_used_tables for class Item_findow_func.
Added the flag Item::with_window_func.
Made sure that window functions could be used only in SELECT list
and ORDER BY clause.
Added test cases that checked different illegal placements of
window functions.
2016-03-23 16:09:58 -07:00
Igor Babaev
a74e8d36dd For some window functions an order list must be present. 2016-03-18 10:52:02 -07:00
Sergei Petrunia
13f9535f2d MDEV-9724: Window functions: Frame Exclusion support
Produce a "not supported" error if one attempts to exclude rows
2016-03-18 11:32:38 +03:00
Igor Babaev
a197c6bb68 Prohibit using window functions of some types with
window frames in full accordance with the SQL standard.
2016-03-18 00:33:53 -07:00
Igor Babaev
84c3a20ff9 Fixed bug mdev-9754.
Each window name has to be resolved only once.
2016-03-17 14:13:38 -07:00
Sergei Petrunia
ee9297f656 MDEV-9740: Window functions: catch invalid window frame specs
Catch errors in window frame definitions
2016-03-17 16:55:44 +03:00
Igor Babaev
c3ab9712b0 Fixed the bug mdev-9719 concerning execution of prepared statements
with window functions. Added the test case for it.
Also allowed to use aliases for set functions in partition and order lists
that are specified in window functions.
2016-03-16 23:35:28 -07:00
Sergei Petrunia
72a4969eca Add testcases for frames with bound1 > bound2. 2016-03-16 12:04:53 +03:00
Sergei Petrunia
e261c14456 Add a testcase for RANGE-type frames and NULL values 2016-03-14 17:50:36 +03:00
Sergei Petrunia
ce8a0d8e19 MDEV-9676: RANGE-type frames for window functions
- Handle ORDER BY DESC in window definitions.
- Fix an issue in Frame_range_current_row_top
2016-03-14 14:13:59 +03:00
Sergei Petrunia
b8d8d9b8cc Add a testcase for non-integer range frame. 2016-03-13 03:44:40 +03:00
Sergei Petrunia
e859c2dbb8 MDEV-9676: RANGE-type frames for window functions
Add support for "RANGE n PRECEDING|FOLLOWING" frame bounds.
- n is currently limited to whatever Item and Item_sum_plus/minus
  can handle (i.e. no DATETIME intervals).
- Didn't check NULL value handling yet.
2016-03-13 03:34:31 +03:00
Sergei Petrunia
53784d9abc MDEV-9695: Wrong window frame when using RANGE BETWEEN N FOLLOWING AND PRECEDING
Part#2: Fix a couple more issues in rows-type frames.
This also has a code cleanup:
- introduce a separate Frame_rows_current_row_(top,bottom). This is
  is a special case which doesn't need its cursor or partition bound check
- Split Frame_n_rows into
  = Frame_n_rows_preceding (this one is now much simpler)
  = Frame_n_rows_following (simpler and works but may need some work still)
2016-03-11 20:23:24 +03:00
Sergei Petrunia
0e9fb982f1 MDEV-9695: Wrong window frame when using RANGE BETWEEN N FOLLOWING AND PRECEDING
Part#1: Frame_n_rows::next_partition() should not assume that the
current table->record[0] points to the first row in the partition.

Since cursor supports move_to() operation, we dont need this.
2016-03-10 17:46:47 +03:00
Sergei Petrunia
02b7d13730 MDEV-9676: RANGE-type frames for window functions
Add testcases for RANGE UNBOUNDED PRECEDING|FOLLOWING
2016-03-06 23:55:34 +03:00
Sergei Petrunia
1fa12cdfb7 MDEV-9676: RANGE-type frames for window functions
Support RANGE ... CURRENT ROW as frame's first and second bound.
2016-03-06 23:10:20 +03:00
Sergei Petrunia
d290a66553 MDEV-9634: Window function produces incorrect value
- Item_sum_count::remove() should check if the argument's value is NULL.
- Window Function item must have its Item_window_func::split_sum_func
  called,
- and it must call split_sum_func for aggregate's arguments (see the
  comment near Item_window_func::split_sum_func for explanation why)
2016-02-26 02:08:45 +03:00
Igor Babaev
0c6d753708 Fixed a problems in the parser.
Resolved window names.
Checked some constraints for window frames.
Added test cases for window name resolution.
2016-02-19 23:20:09 -08:00
Sergei Petrunia
be15858245 MDEV-9526: Compute Aggregate functions as window functions
- Add temporary code: clone_read_record() clones READ_RECORD structure,
  as long as it is used for reading filesort() result that fits into
  memory.
- Add frame bounds for ROWS-type frames. ROWS n PRECEDING|FOLLOWING,
  ROWS UNBOUNDED PRECEDING|FOLLOWING, CURRENT ROW are supported.
- Add Item_sum_count::remove() which allows "streaming" computation
  of COUNT() over a moving frame.
2016-02-18 01:25:26 +03:00
Vicențiu Ciorbaru
0c223a96c1 Fix review comments. 2016-02-16 00:43:57 +02:00
Vicențiu Ciorbaru
9a673e0a88 Implement DENSE_RANK function. 2016-02-16 00:22:12 +02:00
Sergei Petrunia
c30119adc7 Testcase fix and code cleanup for window functions
- Make queries that use multiple window functions not to leak memory
- Code cleanup in sql_window.cc
2016-02-15 18:46:02 +03:00
Sergei Petrunia
a9ed132a0f More testcases, fixed comments 2016-02-14 11:30:40 +03:00
Sergei Petrunia
64ab10ffff Initial implementation of RANK() window function 2016-02-14 11:30:36 +03:00
Sergei Petrunia
e64b57a839 More testcases. Added .result file 2016-02-14 11:30:14 +03:00
Sergei Petrunia
346c1a0ad0 Got sort-and-read single-pass window function computation to work 2016-02-14 11:29:53 +03:00