Commit graph

37 commits

Author SHA1 Message Date
Monty
4dc5075860 Fixed compiler warnings and test failures found by buildbot
Fixed ccfilter to detect errors where the column is included in the error message
2016-06-24 02:25:14 +03:00
Vicențiu Ciorbaru
31fb045c12 Make ntile use args[0] for it's argument.
Don't hold a separate pointer as args[0] changes during fix_fields /
split_sum_func.
2016-04-13 11:26:58 +02:00
Vicențiu Ciorbaru
3dd08a11de Fix another bug in dense_rank.
When ordering by a column and partitioning by another, we must reset the
peer_tracker for dense_rank, regardless if the value for the order
column changes or not.

Example:
select a, b, dense_rank() over (partition by b order by a)
a  |  b  |  dense_rank
----------------------
1  | p1  |           1
2  | p1  |           2
2  | p2  |           1   // Here, without this fix we returned 0.
2  | p2  |           2   // And 1 here.
2016-04-13 10:39:06 +02:00
Vicențiu Ciorbaru
419c925069 Fix dense_rank returning minimum rank of 2 when using null columns.
The bug was caused by a weird behaviour in test_if_group_changed, not
returning true when testing for the first time after initializing
the Cached_item list.
2016-04-11 10:46:58 +02:00
Sergei Petrunia
cb002d3479 Window functions: make "ORDER BY window_func" work
- When window functions are present, JOIN::simple_order should be set
  to FALSE. (Otherwise, the optimizer may attempt to do a "pre-sorting"
  on the first join_tab. Which can work in some cases, but generally
  isn't)

- filesort tries to only read table fields that it requires. Window
  function requires its temp.table field.  In order to pass this info
  to filesort, added an implementation of Item_window_func::
  register_field_in_read_map.
2016-04-08 03:21:25 +03:00
Vicențiu Ciorbaru
7c9cfa07ad Fix ntile to work with --ps-protocol 2016-04-06 12:17:04 +03:00
Vicențiu Ciorbaru
960b221c0b Convert ntile to work with expressions as parameters. 2016-04-04 22:04:18 +03:00
Vicențiu Ciorbaru
be3902fceb Implement ntile window function.
The current implementation does not allow for a dynamic expression
within the sum function's parameter.
2016-04-04 22:04:18 +03:00
Vicențiu Ciorbaru
a5d300814c Remove no longer used Window_context class. 2016-04-04 22:04:18 +03:00
Igor Babaev
162ea7c0cf Fix a problem in code for percent_rank().
The problem popped up when running win_percent_cume.test
with --ps-protocol.
2016-04-01 15:29:45 -07:00
Vicențiu Ciorbaru
3544fe0144 Implemented cume_dist function.
Also fixed a bug in row_counts detection, when partition changes.
2016-03-28 22:51:42 +03:00
Vicențiu Ciorbaru
d40d68f236 Convert percent_rank to work with cursors
The percent_rank function now is compatible with the cursor algorithm.
We no longer need a special implementation for it to work.
2016-03-28 22:51:42 +03:00
Vicențiu Ciorbaru
bf18dac08f Lay the groundwork for variable number of cursors.
Instead of relying solely on top bound and bottom bound cursors,
now we create a list of cursors that are iterated over.
2016-03-28 22:51:42 +03:00
Sergei Petrunia
6ad9ac212c Encapsulate use of List<Cached_item> in a Group_bound_tracker. 2016-03-24 03:23:14 +03:00
Sergei Petrunia
c7a60de78c Code cleanup 2016-03-24 03:08:43 +03:00
Sergei Petrunia
39d3cdbf22 Encapsulate the switching between different return values in Item_window_func 2016-03-24 02:57:03 +03:00
Sergei Petrunia
d8b8b5affa Fix a PS re-execution problem and code cleanup
- Make Item_XXX::cleanup() clean List<Cached_item> orderby_fields.
  (Items survive across PS re-executions. Cached_item don't, because
   they keep pointers to fix_field'ed items, etc)
- Move List<Cached_item> out into Group_bound_tracker.
2016-03-24 02:09:17 +03:00
Igor Babaev
602e15a0cb 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-21 20:00:05 -07:00
Igor Babaev
a74e8d36dd For some window functions an order list must be present. 2016-03-18 10:52:02 -07: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
Vicențiu Ciorbaru
aa74fef25e Fix 2 more bugs in item_windowfunc.
1. Item_windowfunc must check the nullness of the field if it returns the
   value from the result_field.
2. The decimal value must come from the window_func instead of the
   result_field when not fetching values from the result_field.

Added a more extensive test case that highlights if these bugs occur.
The 2 select statements check behaviour for decimal and real typed
fields respectively.
2016-03-16 01:42:45 +02:00
Vicențiu Ciorbaru
333ac13be5 Make sure to return the result value when calling Item_windowfunc::val_real()
This caused Item_windowfunc to return garbage.
2016-03-16 01:09:53 +02:00
Sergei Petrunia
833304313d Continuation of "Implemented a counter within Item_sum_sum" a few commits before
Query result had 0 where it should have had NULLs:
- Make Item_window_func::val* functions honor NULL-handling conventions:
  1. set null_value to indicate whether we've returned a NULL value
  2. val_str and val_decimal should return NULL pointer when they're
     returning SQL NULL value.

Fix assertion failure when sending results to network.
- The assert was due to window func returing SQL NULL despite having
  maybe_null=false
- Fixed by settting Item_window_func::maybe_null correctly in fix_fields
2016-03-16 01:26:39 +03:00
Vicențiu Ciorbaru
b579a626cf Implement percent_rank window function 2016-03-03 18:48:34 +02:00
Vicențiu Ciorbaru
f638ffef2c Convert if statements to switch case. 2016-03-03 18:48:34 +02:00
Sergei Petrunia
1cc6fd1f00 Remove comments that may be confusing 2016-03-02 14:01:43 +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
d8a20d4db7 Post-merge fixes. win.test passes but further cleanup is needed. 2016-02-14 21:00:05 +03:00
Sergei Petrunia
64ab10ffff Initial implementation of RANK() window function 2016-02-14 11:30:36 +03:00
Sergei Petrunia
30c9450af7 More comments 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
Sergei Petrunia
6399187ebc Added comments 2016-02-14 11:14:34 +03:00
Igor Babaev
9d9c60fb12 Initial patch for the implementation of window functions (MDEV-6115):
- All parsing problems look like resolved
- Stub performing name resolution of window functions
in simplest queries has been added.
2016-02-12 20:33:56 -08:00