![]()  | 
  
    MySQL 8.0.44
    
   Source Code Documentation 
   | 
 
Common base class for n-ary set operations, including unary. More...
#include <query_term.h>
Public Member Functions | |
| Query_block * | query_block () const override | 
| Getter for m_block, q.v.  More... | |
| bool | set_block (Query_block *b) | 
| Setter for m_block, q.v.  More... | |
| void | label_children () override | 
Set the correct value of Query_term::m_sibling_idx recursively for set operations.  More... | |
| size_t | child_count () const override | 
| Get the number of children this node has.  More... | |
| bool | open_result_tables (THD *thd, int level) override | 
| Open tmp tables for the tree of set operation query results, by recursing.  More... | |
| void | cleanup (bool full) override | 
| Reset resources used.  More... | |
| void | destroy_tree () override | 
| Destroy the query term tree structure.  More... | |
| bool | has_mixed_distinct_operators () | 
| Check if this set operation has a mix of DISTINCT and ALL.  More... | |
| bool | is_unary () const | 
| Check if this term is a unary set operation.  More... | |
| Mem_root_array< MaterializePathParameters::QueryBlock > | setup_materialize_set_op (THD *thd, TABLE *dst_table, bool union_distinct_only, bool calc_found_rows) | 
| Sets up each(*) query block in this query expression for materialization into the given table by making a materialization parameter for each block (*) modulo union_distinct_only.  More... | |
  Public Member Functions inherited from Query_term | |
| Query_term * | pushdown_limit_order_by (Query_term_set_op *parent=nullptr) | 
| Called after contextualization to simplify query, c.f.  More... | |
| bool | validate_structure (const Query_term *parent, int depth=0) const | 
| Return true if structure is too deep, i.e.  More... | |
| std::pair< bool, bool > | redundant_order_by (Query_block *block, int level) | 
| Determine if we have a redundant ORDER BY in block.  More... | |
| virtual Query_term_type | term_type () const =0 | 
| Get the node tree type.  More... | |
| virtual const char * | operator_string () const =0 | 
| Get the node type description.  More... | |
| virtual | ~Query_term ()=default | 
| Node destructor.  More... | |
| Query_term_set_op * | parent () const | 
| Getter for m_parent, q.v.  More... | |
| void | set_sibling_idx (uint idx) | 
Setter for m_sibling_idx, q.v.  More... | |
| uint | sibling_idx () | 
Getter for m_sibling_idx, q.v.  More... | |
| virtual void | debugPrint (int level, std::ostringstream &buf) const =0 | 
| Print the tree rooted at this node to buf.  More... | |
| void | printPointers (std::ostringstream &buf) const | 
| Print the pointer of this node and its parent to buf.  More... | |
| void | set_setop_query_result (Query_result *rs) | 
| Setter for m_setop_query_result, q.v.  More... | |
| Query_result * | setop_query_result () | 
| Getter for m_setop_query_result, q.v.  More... | |
| Query_result_union * | setop_query_result_union () | 
| Getter for m_setop_query_result, q.v. Use only if we can down cast.  More... | |
| void | cleanup_query_result (bool full) | 
| Cleanup m_setop_query_result, q.v.  More... | |
| void | set_owning_operand () | 
| Setter for m_owning_operand, q.v.  More... | |
| bool | owning_operand () | 
| Getter for m_owning_operand, q.v.  More... | |
| void | set_result_table (Table_ref *tl) | 
| Setter for m_result_table, q.v.  More... | |
| Table_ref & | result_table () | 
| Getter for m_result_table, q.v.  More... | |
| void | set_fields (mem_root_deque< Item * > *fields) | 
| mem_root_deque< Item * > * | fields () | 
Public Attributes | |
| mem_root_deque< Query_term * > | m_children | 
| Tree structure.  More... | |
| int64_t | m_last_distinct | 
| Index of last query expression which has <set-op> DISTINCT on its left.  More... | |
| int64_t | m_first_distinct | 
| Presently only needed by EXCEPT set operator: the index of the first DISTINCT set operand: minimum legal value is 1.  More... | |
| bool | m_is_materialized {true} | 
| true if the result of this set operation is materialized.  More... | |
Protected Member Functions | |
| Query_term_set_op (MEM_ROOT *mem_root) | |
| void | print (int level, std::ostringstream &buf, const char *type) const | 
| Common printing minion for set operations.  More... | |
Private Attributes | |
| Query_block * | m_block {nullptr} | 
| Replaces the old "fake" query block for post processing result set with ORDER BY, LIMIT.  More... | |
Additional Inherited Members | |
  Static Public Member Functions inherited from Query_term | |
| static void | indent (int level, std::ostringstream &buf) | 
| Print blank space indentation (unit: two) to buf according to level.  More... | |
| static void | print_order (const THD *thd, String *str, ORDER *ord, enum_query_type query_type) | 
| Print into str the order indicated in ord, using standard print_for_order Used by traditional explain.  More... | |
  Protected Attributes inherited from Query_term | |
| Query_term_set_op * | m_parent {nullptr} | 
| Back pointer to the node whose child we are, or nullptr (root term).  More... | |
| uint | m_sibling_idx {0} | 
| If parent is non-null, this holds the index of the current sibling.  More... | |
| Query_result * | m_setop_query_result {nullptr} | 
| The query result for this term.  More... | |
| bool | m_owning_operand {false} | 
| The operand of a n-ary set operation (that owns the common query result) has this set to true.  More... | |
| Table_ref * | m_result_table {nullptr} | 
| Result temporary table for the set operation, if applicable.  More... | |
| mem_root_deque< Item * > * | m_fields {nullptr} | 
| Used only when streaming, i.e.  More... | |
Common base class for n-ary set operations, including unary.
      
  | 
  inlineprotected | 
      
  | 
  inlineoverridevirtual | 
      
  | 
  overridevirtual | 
Reset resources used.
| full | do full cleanup. Same semantics as for Query_expression's cleanup | 
Reimplemented from Query_term.
      
  | 
  inlineoverridevirtual | 
Destroy the query term tree structure.
Implements Query_term.
| bool Query_term_set_op::has_mixed_distinct_operators | ( | ) | 
Check if this set operation has a mix of DISTINCT and ALL.
      
  | 
  inline | 
Check if this term is a unary set operation.
      
  | 
  inlineoverridevirtual | 
Set the correct value of Query_term::m_sibling_idx recursively for set operations. 
For Query_term_unary, this is done in its constructor. A no-op for Query_block. See also set_sibling_idx. 
Implements Query_term.
      
  | 
  overridevirtual | 
Open tmp tables for the tree of set operation query results, by recursing.
| thd | session context | 
| level | level in the tree, top should be called with 0. | 
Reimplemented from Query_term.
      
  | 
  protected | 
Common printing minion for set operations.
| level | level in tree | 
| buf | the buffer to format output into | 
| type | descriptive string of set operation to use for printing | 
      
  | 
  inlineoverridevirtual | 
Getter for m_block, q.v.
Implements Query_term.
      
  | 
  inline | 
Setter for m_block, q.v.
| Mem_root_array< MaterializePathParameters::QueryBlock > Query_term_set_op::setup_materialize_set_op | ( | THD * | thd, | 
| TABLE * | dst_table, | ||
| bool | union_distinct_only, | ||
| bool | calc_found_rows | ||
| ) | 
Sets up each(*) query block in this query expression for materialization into the given table by making a materialization parameter for each block (*) modulo union_distinct_only.
| thd | session context | 
| dst_table | the table to materialize into | 
| union_distinct_only | if true, materialize only UNION DISTINCT query blocks (any UNION ALL blocks are presumed handled higher up, by AppendIterator) | 
| calc_found_rows | if true, calculate rows found | 
      
  | 
  private | 
Replaces the old "fake" query block for post processing result set with ORDER BY, LIMIT.
The query block(s) of the query specifications can be found via m_children.
| mem_root_deque<Query_term *> Query_term_set_op::m_children | 
Tree structure.
Cardinality is one for unary, two or more for UNION, EXCEPT, INTERSECT
| int64_t Query_term_set_op::m_first_distinct | 
Presently only needed by EXCEPT set operator: the index of the first DISTINCT set operand: minimum legal value is 1.
If not DISTINCT, it should have the value std::numeric_limits<int64_t>::max(). The value is set in PT_set_operation::merge_descendants.
| bool Query_term_set_op::m_is_materialized {true} | 
true if the result of this set operation is materialized.
A priori true unless we have a pure UNION ALL.
| int64_t Query_term_set_op::m_last_distinct | 
Index of last query expression which has <set-op> DISTINCT on its left.
In a list of <set-op>ed blocks, UNION is left-associative; so UNION DISTINCT eliminates duplicates in all blocks up to the first one on its right included. Which is why we only need to remember that query block. Is -1 for Unary.