|
| PT_window (PT_order_list *partition_by, PT_order_list *order_by, PT_frame *frame) |
|
| PT_window (PT_order_list *partition_by, PT_order_list *order_by, PT_frame *frame, Item_string *inherit) |
|
| PT_window (Item_string *name) |
|
bool | contextualize (Parse_context *pc) override |
|
virtual | ~Parse_tree_node_tmpl ()=default |
|
bool | is_contextualized () const |
|
virtual bool | contextualize (Context *pc) |
| Do all context-sensitive things and mark the node as contextualized. More...
|
|
void | error (Context *pc, const POS &pos) const |
| syntax_error() function replacement for deferred reporting of syntax errors More...
|
|
void | error (Context *pc, const POS &pos, const char *msg) const |
| syntax_error() function replacement for deferred reporting of syntax errors More...
|
|
void | errorf (Context *pc, const POS &pos, const char *format,...) const |
| syntax_error() function replacement for deferred reporting of syntax errors More...
|
|
void | save_pos (Window_retrieve_cached_row_reason reason) |
| See m_tmp_pos. More...
|
|
void | restore_pos (Window_retrieve_cached_row_reason reason) |
| See m_tmp_pos. More...
|
|
void | copy_pos (Window_retrieve_cached_row_reason from_reason, Window_retrieve_cached_row_reason to_reason) |
| Copy frame buffer position hint from one to another. More...
|
|
| Window (Item_string *name) |
| Reference to a named window. More...
|
|
| Window (PT_order_list *partition_by, PT_order_list *order_by, PT_frame *frame) |
| Unnamed window. More...
|
|
| Window (PT_order_list *partition_by, PT_order_list *order_by, PT_frame *frame, Item_string *inherit) |
| Unnamed window based on a named window. More...
|
|
void | set_name (Item_string *name) |
| We have a named window. More...
|
|
void | set_ancestor (Window *a) |
| After resolving an existing window name reference in a window definition, we set the ancestor pointer to easy access later. More...
|
|
Item_string * | name () const |
| Get the name of a window. More...
|
|
uint | def_pos () const |
|
void | set_def_pos (uint pos) |
|
const PT_frame * | frame () const |
| Get the frame, if any. More...
|
|
const PT_order_list * | effective_order_by () const |
| Get the ORDER BY, if any. More...
|
|
ORDER * | first_order_by () const |
| Get the first argument of the ORDER BY clause for this window if any. More...
|
|
const PT_order_list * | effective_partition_by () const |
| Get partition, if any. More...
|
|
ORDER * | first_partition_by () const |
| Get the first argument of the PARTITION clause for this window if any. More...
|
|
List< Item_sum > & | functions () |
| Get the list of functions invoked on this window. More...
|
|
ORDER * | sorting_order (THD *thd=nullptr, bool implicit_grouping=false) |
| Concatenation of columns in PARTITION BY and ORDER BY. More...
|
|
bool | check_window_functions1 (THD *thd, Query_block *select) |
| Check that the semantic requirements for window functions over this window are fulfilled, and accumulate evaluation requirements. More...
|
|
bool | check_window_functions2 (THD *thd) |
| Like check_window_functions1() but contains checks which must wait until the start of the execution phase. More...
|
|
bool | setup_range_expressions (THD *thd) |
| For RANGE frames we need to do computations involving add/subtract and less than, smaller than. More...
|
|
bool | is_reference () const |
| Return if this window represents an unresolved window reference seen in a window function OVER clause. More...
|
|
void | check_partition_boundary () |
| Check if the just read input row marks the start of a new partition. More...
|
|
void | reset_order_by_peer_set () |
| Reset the current row's ORDER BY expressions when starting a new peer set. More...
|
|
bool | in_new_order_by_peer_set (bool compare_all_order_by_items=true) |
| Determine if the current row is not in the same peer set as the previous row. More...
|
|
bool | before_frame () |
| While processing buffered rows in RANGE frame mode we, determine if the present row revisited from the buffer is before the row being processed; i.e. More...
|
|
bool | after_frame () |
|
bool | at_partition_border () const |
| Check if we have read all the rows in a partition, possibly having buffered them for further processing. More...
|
|
void | save_special_row (uint64 special_rowno, TABLE *t) |
| Save row special_rowno in table t->record[0] to an in-memory copy for later restoration. More...
|
|
void | restore_special_row (uint64 special_rowno, uchar *record) |
| Restore row special_rowno into record from in-memory copy. More...
|
|
bool | resolve_window_ordering (THD *thd, Ref_item_array ref_item_array, Table_ref *tables, mem_root_deque< Item * > *fields, ORDER *o, bool partition_order) |
| Resolve and set up the PARTITION BY or an ORDER BY list of a window. More...
|
|
bool | check_unique_name (const List< Window > &windows) |
| Return true if this window's name is not unique in windows. More...
|
|
void | apply_temp_table (THD *thd, const Func_ptr_array &items_to_copy) |
| Specify that this window is to be evaluated after a given temporary table. More...
|
|
bool | setup_ordering_cached_items (THD *thd, Query_block *select, const PT_order_list *o, bool partition_order) |
| Set up cached items for an partition or an order by list updating m_partition_items or m_order_by_items respectively. More...
|
|
bool | needs_sorting () const |
| Determine if the window had either a partition clause (inclusive) or a ORDER BY clause, either defined by itself or inherited from another window. More...
|
|
bool | needs_buffering () const |
| If we cannot compute one of window functions without looking at succeeding rows, return true, else false. More...
|
|
bool | needs_peerset () const |
| If we cannot compute one of window functions without looking at all rows in the peerset of the current row, return true, else false. More...
|
|
bool | needs_last_peer_in_frame () const |
| If we cannot compute one of window functions without looking at all rows in the peerset of the current row in this frame, return true, else false. More...
|
|
bool | needs_partition_cardinality () const |
| If we need to read the entire partition before we can evaluate some window function(s) on this window,. More...
|
|
bool | optimizable_row_aggregates () const |
| Return true if the set of window functions are all ROW unit optimizable. More...
|
|
bool | optimizable_range_aggregates () const |
| Return true if the set of window functions are all RANGE unit optimizable. More...
|
|
bool | static_aggregates () const |
| Return true if the aggregates are static, i.e. More...
|
|
bool | opt_first_row () const |
| See m_opt_first_row. More...
|
|
bool | opt_last_row () const |
| See m_opt_last_row. More...
|
|
bool | is_last () const |
| See m_last. More...
|
|
void | set_is_last (bool last) |
| An override used by the hypergraph join optimizer only. More...
|
|
const st_nth & | opt_nth_row () const |
| See m_opt_nth_row. More...
|
|
const st_lead_lag & | opt_lead_lag () const |
| See m_opt_lead_lag. More...
|
|
Temp_table_param * | frame_buffer_param () const |
| Getter for m_frame_buffer_param, q.v. More...
|
|
void | set_frame_buffer_param (Temp_table_param *p) |
| Setter for m_frame_buffer_param, q.v. More...
|
|
TABLE * | frame_buffer () const |
| Getter for m_frame_buffer, q.v. More...
|
|
void | set_frame_buffer (TABLE *tab) |
| Setter for m_frame_buffer, q.v. More...
|
|
bool | short_circuit () const |
|
void | set_short_circuit (bool short_circuit) |
|
int64 | partition_rowno () const |
| Getter for m_part_row_number, q.v., the current row number within the partition. More...
|
|
bool | make_special_rows_cache (THD *thd, TABLE *out_tbl) |
| Allocate the cache for special rows. More...
|
|
int64 | last_row_output () const |
| See m_last_row_output. More...
|
|
void | set_last_row_output (int64 rno) |
| See m_last_row_output. More...
|
|
int64 | rowno_being_visited () const |
| See m_rowno_being_visited. More...
|
|
void | set_rowno_being_visited (int64 rno) |
| See m_rowno_being_visited. More...
|
|
int64 | last_rowno_in_cache () const |
| See m_last_rowno_in_cache. More...
|
|
void | set_last_rowno_in_cache (uint64 rno) |
| See m_last_rowno_in_cache. More...
|
|
int64 | last_rowno_in_range_frame () const |
| See m_last_rowno_in_range_frame. More...
|
|
void | set_last_rowno_in_range_frame (uint64 rno) |
| See m_last_rowno_in_range_frame. More...
|
|
int64 | last_rowno_in_peerset () const |
| See m_last_rowno_in_peerset. More...
|
|
void | set_last_rowno_in_peerset (uint64 rno) |
| See m_last_rowno_in_peerset. More...
|
|
int64 | is_last_row_in_peerset_within_frame () const |
| See m_is_last_row_in_peerset_within_frame. More...
|
|
void | set_is_last_row_in_peerset_within_frame (bool value) |
| See m_is_last_row_in_peerset_within_frame. More...
|
|
bool | do_copy_null () const |
| See m_do_copy_null. More...
|
|
void | set_do_copy_null (bool b) |
| See m_do_copy_null. More...
|
|
bool | do_inverse () const |
| See m_inverse_aggregation. More...
|
|
Window & | set_inverse (bool b) |
| See m_inverse_aggregation. More...
|
|
bool | aggregates_primed () const |
| See m_aggregates_primed. More...
|
|
void | set_aggregates_primed (bool b) |
| See m_aggregates_primed. More...
|
|
bool | is_last_row_in_frame () const |
| See m_is_last_row_in_frame. More...
|
|
void | set_is_last_row_in_frame (bool b) |
| See m_is_last_row_in_frame. More...
|
|
int64 | rowno_in_frame () const |
| Return the size of the frame in number of rows. More...
|
|
Window & | set_rowno_in_frame (int64 rowno) |
| See m_rowno_in_frame. More...
|
|
int64 | rowno_in_partition () const |
| See m_rowno_in_partition. More...
|
|
void | set_rowno_in_partition (int64 rowno) |
| See m_rowno_in_partition. More...
|
|
void | set_first_rowno_in_rows_frame (int64 rowno) |
| See m_first_rowno_in_rows_frame. More...
|
|
int64 | first_rowno_in_rows_frame () const |
|
void | set_first_rowno_in_range_frame (int64 rowno) |
| See m_first_rowno_in_range_frame. More...
|
|
int64 | first_rowno_in_range_frame () const |
| See m_first_rowno_in_range_frame. More...
|
|
void | set_frame_buffer_total_rows (int64 rows) |
| See m_frame_buffer_total_rows. More...
|
|
int64 | frame_buffer_total_rows () const |
| See m_frame_buffer_total_rows. More...
|
|
void | set_frame_buffer_partition_offset (int64 offset) |
| See m_frame_buffer_partition_offset. More...
|
|
int64 | frame_buffer_partition_offset () const |
| See m_frame_buffer_partition_offset. More...
|
|
int64 | row_has_fields_in_out_table () const |
| See m_row_has_fields_in_out_table. More...
|
|
void | set_row_has_fields_in_out_table (int64 rowno) |
| See m_row_has_fields_in_out_table. More...
|
|
void | cleanup () |
| Free up any resource used to process the window functions of this window, e.g. More...
|
|
void | destroy () |
| Free structures that were set up during preparation of window functions. More...
|
|
void | reset_partition_state () |
| Reset window state for a new partition. More...
|
|
void | reset_round () |
| Reset execution state for next call to JOIN::exec, cf. More...
|
|
void | reset_lead_lag () |
| Reset execution state for LEAD/LAG for the current row in partition. More...
|
|
void | reset_all_wf_state () |
| Reset the execution state for all window functions defined on this window. More...
|
|
const char * | printable_name () const |
|
void | print (const THD *thd, String *str, enum_query_type qt, bool expand_definition) const |
|
bool | has_windowing_steps () const |
|
|
typedef Context | context_t |
|
enum | Special_keys { FBC_FIRST_IN_NEXT_PARTITION = -1
, FBC_FIRST_KEY = FBC_FIRST_IN_NEXT_PARTITION
, FBC_LAST_KEY = FBC_FIRST_IN_NEXT_PARTITION
} |
| Keys for m_special_rows_cache, for special rows (see the comment on m_special_row_cache). More...
|
|
static void * | operator new (size_t size, MEM_ROOT *mem_root, const std::nothrow_t &arg=std::nothrow) noexcept |
|
static void | operator delete (void *ptr, size_t size) |
|
static void | operator delete (void *, MEM_ROOT *, const std::nothrow_t &) noexcept |
|
static bool | resolve_reference (THD *thd, Item_sum *wf, PT_window **m_window) |
| Resolve any named window to its definition and update m_window to point to the definition instead. More...
|
|
static bool | setup_windows1 (THD *thd, Query_block *select, Ref_item_array ref_item_array, Table_ref *tables, mem_root_deque< Item * > *fields, List< Window > *windows) |
| Semantic checking of windows. More...
|
|
static bool | setup_windows2 (THD *thd, List< Window > *windows) |
| Like setup_windows1() but contains operations which must wait until the start of the execution phase. More...
|
|
static void | eliminate_unused_objects (List< Window > *windows) |
| Check window definitions to remove unused windows. More...
|
|
static double | compute_cost (double cost, const List< Window > &windows) |
| Compute sorting costs for windowing. More...
|
|
Mem_root_array_YY< Frame_buffer_position > | m_frame_buffer_positions |
| Execution state: used iff m_needs_frame_buffering. More...
|
|
Frame_buffer_position | m_tmp_pos |
| Sometimes we read one row too many, so that the saved position will be too far out because we subsequently need to read an earlier (previous) row of the same kind (reason). More...
|
|
Bounds_checked_array< Arg_comparator > | m_comparators [2] |
|
int | m_ordering_idx |
| The logical ordering index (into LogicalOrderings) needed by this window's PARTITION BY and ORDER BY clauses together (if any; else, 0). More...
|
|
bool | m_mark |
| Used temporarily by the hypergraph join optimizer to mark which windows are referred to by a given ordering (so that one doesn't try to satisfy a window's ordering by an ordering referring to that window). More...
|
|
static constexpr int | FRAME_BUFFER_POSITIONS_CARD |
| Cardinality of m_frame_buffer_positions if no NTH_VALUE, LEAD/LAG. More...
|
|
| Parse_tree_node_tmpl () |
|
Query_block * | m_query_block |
| The SELECT the window is on. More...
|
|
PT_order_list *const | m_partition_by |
| <window partition clause> More...
|
|
PT_order_list *const | m_order_by |
| <window order clause> More...
|
|
ORDER * | m_sorting_order |
| merged partition/order by More...
|
|
PT_frame *const | m_frame |
| <window frame clause> More...
|
|
Item_string * | m_name |
| <window name> More...
|
|
uint | m_def_pos |
| Position of definition in query's text, 1 for leftmost. More...
|
|
Item_string *const | m_inherit_from |
| <existing window name> More...
|
|
const bool | m_is_reference |
| If true, m_name is an unbound window reference, other fields are unused. More...
|
|
bool | m_needs_frame_buffering |
| (At least) one window function needs to buffer frame rows for evaluation i.e. More...
|
|
bool | m_needs_peerset |
| (At least) one window function needs the peer set of the current row to evaluate the wf for the current row More...
|
|
bool | m_needs_last_peer_in_frame |
| (At least) one window function (currently JSON_OBJECTAGG) needs the last peer for the current row to evaluate the wf for the current row. More...
|
|
bool | m_needs_partition_cardinality |
| (At least) one window function needs the cardinality of the partition of the current row to evaluate the wf for the current row More...
|
|
bool | m_row_optimizable |
| The functions are optimizable with ROW unit. More...
|
|
bool | m_range_optimizable |
| The functions are optimizable with RANGE unit. More...
|
|
bool | m_static_aggregates |
| The aggregates (SUM, etc) can be evaluated once for a partition, since it is static, i.e. More...
|
|
bool | m_opt_first_row |
| Window equires re-evaluation of the first row in optimized moving frame mode e.g. More...
|
|
bool | m_opt_last_row |
| Window requires re-evaluation of the last row in optimized moving frame mode e.g. More...
|
|
bool | m_last |
| The last window to be evaluated at execution time. More...
|
|
st_nth | m_opt_nth_row |
| Window requires re-evaluation of the Nth row in optimized moving frame mode e.g. More...
|
|
st_lead_lag | m_opt_lead_lag |
|
const Window * | m_ancestor |
| resolved from existing window name More...
|
|
List< Item_sum > | m_functions |
| window functions based on 'this' More...
|
|
Mem_root_array< Cached_item * > | m_partition_items |
| items for the PARTITION BY columns More...
|
|
Mem_root_array< Cached_item * > | m_order_by_items |
| items for the ORDER BY exprs. More...
|
|
Temp_table_param * | m_frame_buffer_param |
| Execution state: used iff m_needs_frame_buffering. More...
|
|
bool | m_short_circuit = false |
| Holds whether this window should be “short-circuit”, ie., goes directly to the query output instead of to a temporary table. More...
|
|
TABLE * | m_frame_buffer |
| Execution state: used iff m_needs_frame_buffering. More...
|
|
int64 | m_frame_buffer_total_rows |
| Execution state: The frame buffer tmp file is not truncated for each new partition. More...
|
|
int64 | m_frame_buffer_partition_offset |
| Execution state: Snapshot of m_frame_buffer_total_rows when we start a new partition, i.e. More...
|
|
int64 | m_row_has_fields_in_out_table |
| If >=1: the row with this number (1-based, relative to start of partition) currently has its fields in the record buffer of the IN table and of the OUT table. More...
|
|
uchar * | m_special_rows_cache |
| Holds a fixed number of copies of special rows; each copy can use up to m_special_rows_cache_max_length bytes. More...
|
|
size_t | m_special_rows_cache_length [FBC_FIRST_KEY - FBC_LAST_KEY+1] |
| Length of each copy in m_special_rows_cache, in bytes. More...
|
|
size_t | m_special_rows_cache_max_length |
| Maximum allocated size in m_special_rows_cache. More...
|
|
int64 | m_last_rowno_in_cache |
| Execution state: used iff m_needs_frame_buffering. More...
|
|
int64 | m_last_rowno_in_peerset |
| Execution state: used iff m_needs_peerset. More...
|
|
int64 | m_is_last_row_in_peerset_within_frame |
| Execution state: used iff m_needs_last_peer_in_frame. More...
|
|
int64 | m_part_row_number |
| Execution state: the current row number in the current partition. More...
|
|
bool | m_partition_border |
| Execution state: the current row starts a new partition. More...
|
|
int64 | m_last_row_output |
| Execution state: The number, in the current partition, of the last output row, i.e. More...
|
|
int64 | m_rowno_being_visited |
| Execution state: The number of the row being visited for its contribution to a window function, relative to the start of the partition. More...
|
|
int64 | m_rowno_in_frame |
| Execution state: the row number of the row we are looking at for evaluating its contribution to some window function(s). More...
|
|
int64 | m_rowno_in_partition |
| Execution state: The row number of the current row being readied for output within the partition. More...
|
|
bool | m_aggregates_primed |
| Execution state: for optimizable aggregates, cf. More...
|
|
int64 | m_first_rowno_in_range_frame |
| Execution state: the row number of the first row in a frame when evaluating RANGE based frame bounds. More...
|
|
int64 | m_last_rowno_in_range_frame |
| Execution state: used for RANGE bounds frame evaluation for the continued evaluation for current row > 2 in a partition. More...
|
|
int64 | m_first_rowno_in_rows_frame |
| Execution state. More...
|
|
bool | m_is_last_row_in_frame |
| Execution state: the current row is the last row in a window frame For some aggregate functions, e.g AVG, we can save computation by not evaluating the entire function value before the last row has been read. More...
|
|
bool | m_do_copy_null |
| Execution state: make frame wf produce a NULL (or 0 depending, e.g. More...
|
|
bool | m_inverse_aggregation |
| Execution state: do inverse, e.g. More...
|
|
Parse tree node for a window; just a shallow wrapper for class Window, q.v.