OmniSciDB  72c90bc290
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RelAlgDagViewer Class Reference

#include <RelAlgDagViewer.h>

+ Inheritance diagram for RelAlgDagViewer:
+ Collaboration diagram for RelAlgDagViewer:

Classes

struct  BreadthFirstSearch
 
struct  CollectImmediateChildren
 
struct  NodeInfo
 

Public Types

using id_map = std::unordered_map< std::uintptr_t, NodeInfo >
 

Public Member Functions

 RelAlgDagViewer ()
 
 RelAlgDagViewer (bool showing_steps, bool verbose)
 
virtual void clear ()
 
virtual std::string str () const
 
virtual id_map::iterator emplace (RelAlgDagNode const *n)
 
virtual void handleQueryEngineVector (std::vector< std::shared_ptr< RelAlgNode >> const nodes)
 
- Public Member Functions inherited from RelAlgDagNode::Visitor
virtual ~Visitor ()
 

Protected Member Functions

virtual id_map::iterator emplaceVoid (void const *n)
 
void beginNextLine (std::optional< size_t > step={})
 
template<typename T >
void visitChild (T child, std::string name)
 
template<typename T >
bool innerVisit (T t, std::string name, bool recurse=true)
 
bool visit (RelAggregate const *n, std::string s) override
 
bool visit (RelCompound const *n, std::string s) override
 
bool visit (RelFilter const *n, std::string s) override
 
bool visit (RelJoin const *n, std::string s) override
 
bool visit (RelLeftDeepInnerJoin const *n, std::string s) override
 
bool visit (RelLogicalUnion const *n, std::string s) override
 
bool visit (RelLogicalValues const *n, std::string s) override
 
bool visit (RelModify const *n, std::string s) override
 
bool visit (RelProject const *n, std::string s) override
 
bool visit (RelScan const *n, std::string s) override
 
bool visit (RelSort const *n, std::string s) override
 
bool visit (RelTableFunction const *n, std::string s) override
 
bool visit (RelTranslatedJoin const *n, std::string s) override
 
bool visit (RexAbstractInput const *n, std::string s) override
 
bool visit (RexCase const *n, std::string s) override
 
bool visit (RexFunctionOperator const *n, std::string s) override
 
bool visit (RexInput const *n, std::string s) override
 
bool visit (RexLiteral const *n, std::string s) override
 
bool visit (RexOperator const *n, std::string s) override
 
bool visit (RexRef const *n, std::string s) override
 
bool visit (RexAgg const *n, std::string s) override
 
bool visit (RexSubQuery const *n, std::string s) override
 
bool visit (RexWindowFunctionOperator const *n, std::string s) override
 
- Protected Member Functions inherited from RelAlgDagNode::Visitor
virtual bool visitAny (RelAlgDagNode const *n, std::string s)
 

Protected Attributes

std::ostringstream out_
 
size_t indent_level_ {0}
 
size_t line_number_ {1}
 
bool showing_steps_ {false}
 
id_map ids_
 
size_t next_id_ {1}
 
bool top_call_ {true}
 
bool already_indented_ {false}
 
bool needs_newline_ {false}
 
bool needs_colon_ {false}
 
bool verbose_ {false}
 

Static Protected Attributes

static constexpr size_t indent_spaces_ {4}
 

Detailed Description

Definition at line 30 of file RelAlgDagViewer.h.

Member Typedef Documentation

using RelAlgDagViewer::id_map = std::unordered_map<std::uintptr_t, NodeInfo>

Definition at line 51 of file RelAlgDagViewer.h.

Constructor & Destructor Documentation

RelAlgDagViewer::RelAlgDagViewer ( )
inline

Definition at line 32 of file RelAlgDagViewer.h.

Referenced by clear().

32 {}

+ Here is the caller graph for this function:

RelAlgDagViewer::RelAlgDagViewer ( bool  showing_steps,
bool  verbose 
)
inline

Definition at line 33 of file RelAlgDagViewer.h.

34  : showing_steps_(showing_steps), verbose_(verbose) {}

Member Function Documentation

void RelAlgDagViewer::beginNextLine ( std::optional< size_t >  step = {})
inlineprotected

Definition at line 79 of file RelAlgDagViewer.h.

Referenced by innerVisit().

79  {}) {
80  if (!already_indented_) {
81  if (needs_colon_) {
82  out_ << ":";
83  }
84  if (needs_newline_) {
85  out_ << "\n";
86  } else {
87  needs_newline_ = true;
88  }
89  if (showing_steps_) {
90  if (!step || *step == 0) {
91  out_ << " ";
92  } else {
93  out_ << "STEP " << std::to_string(*step) << ": ";
94  }
95  }
96  out_ << std::string(indent_level_ * indent_spaces_, ' ');
97  } else {
98  already_indented_ = false;
99  }
100  ++line_number_;
101  }
std::string to_string(char const *&&v)
static constexpr size_t indent_spaces_
std::ostringstream out_

+ Here is the caller graph for this function:

virtual void RelAlgDagViewer::clear ( )
inlinevirtual

Definition at line 36 of file RelAlgDagViewer.h.

References RelAlgDagViewer(), showing_steps_, and verbose_.

Referenced by innerVisit().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

virtual id_map::iterator RelAlgDagViewer::emplace ( RelAlgDagNode const *  n)
inlinevirtual

Definition at line 53 of file RelAlgDagViewer.h.

References emplaceVoid(), and RelAlgDagNode::setIdInPlanTree().

Referenced by handleQueryEngineVector(), and innerVisit().

53  {
54  // Ensures we always emplace RelAlgDagNode* to give a consistent uintptr_t key.
55  auto it = emplaceVoid(n);
56  n->setIdInPlanTree(it->second.id);
57  return it;
58  }
virtual id_map::iterator emplaceVoid(void const *n)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

virtual id_map::iterator RelAlgDagViewer::emplaceVoid ( void const *  n)
inlineprotectedvirtual

Definition at line 69 of file RelAlgDagViewer.h.

References CHECK, ids_, next_id_, and top_call_.

Referenced by emplace().

69  {
70  CHECK(n);
71  auto [it, id_is_new] = ids_.emplace(
72  std::uintptr_t(n), NodeInfo{next_id_, top_call_, /*used_node=*/false});
73  if (id_is_new) {
74  ++next_id_;
75  }
76  return it;
77  }
#define CHECK(condition)
Definition: Logger.h:291
constexpr double n
Definition: Utm.h:38

+ Here is the caller graph for this function:

void RelAlgDagViewer::handleQueryEngineVector ( std::vector< std::shared_ptr< RelAlgNode >> const  nodes)
inlinevirtual

Definition at line 316 of file RelAlgDagViewer.h.

References CHECK, emplace(), ids_, anonymous_namespace{Utm.h}::n, showing_steps_, and top_call_.

Referenced by RelAlgExecutor::executeRelAlgQueryNoRetry().

317  {
318  if (nodes.empty()) {
319  return;
320  }
321 
322  // Determines if a steps column needs to be displayed.
323  // TODO(sy): Do this recursively from the root node?
324  for (auto const& node : nodes) {
325  if (node && node->getStepNumber() > 1) {
326  showing_steps_ = true;
327  break;
328  }
329  }
330 
331  // Ensure that the root node is always node #1.
332  emplace(nodes.back().get()); // The last node in the vector is the root node.
333 
334  // Breadth-first search starting at the root node to assign node ID's to all used nodes,
335  // in order of importance. BFS is done instead of recursing which would give a
336  // depth-first search and a less helpful ordering of node ID's.
337  top_call_ = false;
338  BreadthFirstSearch bfs([this](RelAlgDagNode const* n) {
339  auto it = emplace(n);
340  CHECK(it != ids_.end());
341  it->second.used_node = true;
342  });
343  bfs.search(nodes.back().get());
344  top_call_ = true;
345 
346  // Visit all nodes, building the text output.
347  nodes.back()->accept(*this, {});
348 }
virtual id_map::iterator emplace(RelAlgDagNode const *n)
#define CHECK(condition)
Definition: Logger.h:291
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

template<typename T >
bool RelAlgDagViewer::innerVisit ( t,
std::string  name,
bool  recurse = true 
)
inlineprotected

Definition at line 158 of file RelAlgDagViewer.h.

References RelRexToStringConfig::attributes_only, beginNextLine(), CHECK, clear(), emplace(), ids_, indent_level_, line_number_, next_id_, RelAlgDagViewer::CollectImmediateChildren::nodes, out_, RelRexToStringConfig::skip_input_nodes, top_call_, verbose_, and visitChild().

Referenced by visit().

158  {
159  static_assert(std::is_base_of_v<RelAlgDagNode, std::remove_pointer_t<T>>);
160 
161  // Top nodes are directly emplaced by or directly visited by the user and must start
162  // with all the default settings, except that we want to preserve any node ID's that
163  // were assigned during the user's previous calls.
164  bool const top_call{top_call_};
165  if (top_call_) {
166  auto ids = std::move(ids_);
167  auto next_id = std::move(next_id_);
168  auto line_number = std::move(line_number_);
169  clear();
170  ids_ = std::move(ids);
171  next_id_ = std::move(next_id);
172  line_number_ = line_number;
173  }
174 
175  if (!t) {
176  return /*recurse=*/false;
177  }
178  id_map::iterator it = emplace(t); // Needs the original top_call_ setting.
179  CHECK(it != ids_.end());
180 
181  // Output some info about this node.
182  beginNextLine(t->getStepNumber());
183  std::string key_text{!name.empty() ? ("[" + name + "] ") : ""};
184  out_ << "#" << it->second.id << " " << key_text;
185 
187  cfg.skip_input_nodes = true;
188  cfg.attributes_only = true;
189  out_ << t->toString(cfg);
190 
191  // Recurse to child nodes.
192  // Non-top child nodes always will be recursed.
193  // Top child nodes normally won't be recursed because they'll be visited with their
194  // own direct call from the user (or from operator<< for the user). If we're here from
195  // a direct user call (top_call is true), the node will be recursed.
196  if (recurse) {
197  top_call_ = false; // Must turn off top_call_ before recursing to any children.
198  ++indent_level_;
199  CollectImmediateChildren visitor;
200  t->acceptChildren(visitor);
201  for (auto [key, child] : visitor.nodes) {
202  if (child) {
203  if (!verbose_) {
204  // Only show RelScan or RexInput nodes when verbose_ is true.
205  if (dynamic_cast<RelScan const*>(child) ||
206  dynamic_cast<RexInput const*>(child)) {
207  continue;
208  }
209  }
210  beginNextLine(child->getStepNumber());
211  visitChild(child, key);
212  }
213  }
214  --indent_level_;
215  }
216 
217  // Resets top_call_ to clear the out_ buffer if user directly calls visit again.
218  top_call_ = top_call;
219 
220  return /*recurse=*/false;
221  }
virtual id_map::iterator emplace(RelAlgDagNode const *n)
std::ostringstream out_
virtual void clear()
#define CHECK(condition)
Definition: Logger.h:291
string name
Definition: setup.in.py:72
void visitChild(T child, std::string name)
void beginNextLine(std::optional< size_t > step={})

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

virtual std::string RelAlgDagViewer::str ( ) const
inlinevirtual

Definition at line 38 of file RelAlgDagViewer.h.

References out_.

Referenced by operator<<().

38  {
39  std::string ret{out_.str()};
40  if (!ret.empty()) {
41  ret += '\n';
42  }
43  return ret;
44  }
std::ostringstream out_

+ Here is the caller graph for this function:

bool RelAlgDagViewer::visit ( RelAggregate const *  n,
std::string  s 
)
inlineoverrideprotectedvirtual

Reimplemented from RelAlgDagNode::Visitor.

Definition at line 225 of file RelAlgDagViewer.h.

References innerVisit().

225 { return innerVisit(n, s); }
bool innerVisit(T t, std::string name, bool recurse=true)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

bool RelAlgDagViewer::visit ( RelCompound const *  n,
std::string  s 
)
inlineoverrideprotectedvirtual

Reimplemented from RelAlgDagNode::Visitor.

Definition at line 227 of file RelAlgDagViewer.h.

References innerVisit().

227 { return innerVisit(n, s); }
bool innerVisit(T t, std::string name, bool recurse=true)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

bool RelAlgDagViewer::visit ( RelFilter const *  n,
std::string  s 
)
inlineoverrideprotectedvirtual

Reimplemented from RelAlgDagNode::Visitor.

Definition at line 229 of file RelAlgDagViewer.h.

References innerVisit().

229 { return innerVisit(n, s); }
bool innerVisit(T t, std::string name, bool recurse=true)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

bool RelAlgDagViewer::visit ( RelJoin const *  n,
std::string  s 
)
inlineoverrideprotectedvirtual

Reimplemented from RelAlgDagNode::Visitor.

Definition at line 231 of file RelAlgDagViewer.h.

References innerVisit().

231 { return innerVisit(n, s); }
bool innerVisit(T t, std::string name, bool recurse=true)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

bool RelAlgDagViewer::visit ( RelLeftDeepInnerJoin const *  n,
std::string  s 
)
inlineoverrideprotectedvirtual

Reimplemented from RelAlgDagNode::Visitor.

Definition at line 233 of file RelAlgDagViewer.h.

References innerVisit().

233  {
234  return innerVisit(n, s);
235  }
bool innerVisit(T t, std::string name, bool recurse=true)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

bool RelAlgDagViewer::visit ( RelLogicalUnion const *  n,
std::string  s 
)
inlineoverrideprotectedvirtual

Reimplemented from RelAlgDagNode::Visitor.

Definition at line 237 of file RelAlgDagViewer.h.

References innerVisit().

237  {
238  return innerVisit(n, s);
239  }
bool innerVisit(T t, std::string name, bool recurse=true)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

bool RelAlgDagViewer::visit ( RelLogicalValues const *  n,
std::string  s 
)
inlineoverrideprotectedvirtual

Reimplemented from RelAlgDagNode::Visitor.

Definition at line 241 of file RelAlgDagViewer.h.

References innerVisit().

241  {
242  return innerVisit(n, s);
243  }
bool innerVisit(T t, std::string name, bool recurse=true)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

bool RelAlgDagViewer::visit ( RelModify const *  n,
std::string  s 
)
inlineoverrideprotectedvirtual

Reimplemented from RelAlgDagNode::Visitor.

Definition at line 245 of file RelAlgDagViewer.h.

References innerVisit().

245 { return innerVisit(n, s); }
bool innerVisit(T t, std::string name, bool recurse=true)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

bool RelAlgDagViewer::visit ( RelProject const *  n,
std::string  s 
)
inlineoverrideprotectedvirtual

Reimplemented from RelAlgDagNode::Visitor.

Definition at line 247 of file RelAlgDagViewer.h.

References innerVisit().

247 { return innerVisit(n, s); }
bool innerVisit(T t, std::string name, bool recurse=true)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

bool RelAlgDagViewer::visit ( RelScan const *  n,
std::string  s 
)
inlineoverrideprotectedvirtual

Reimplemented from RelAlgDagNode::Visitor.

Definition at line 249 of file RelAlgDagViewer.h.

References innerVisit().

249 { return innerVisit(n, s); }
bool innerVisit(T t, std::string name, bool recurse=true)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

bool RelAlgDagViewer::visit ( RelSort const *  n,
std::string  s 
)
inlineoverrideprotectedvirtual

Reimplemented from RelAlgDagNode::Visitor.

Definition at line 251 of file RelAlgDagViewer.h.

References innerVisit().

251 { return innerVisit(n, s); }
bool innerVisit(T t, std::string name, bool recurse=true)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

bool RelAlgDagViewer::visit ( RelTableFunction const *  n,
std::string  s 
)
inlineoverrideprotectedvirtual

Reimplemented from RelAlgDagNode::Visitor.

Definition at line 253 of file RelAlgDagViewer.h.

References innerVisit().

253  {
254  return innerVisit(n, s);
255  }
bool innerVisit(T t, std::string name, bool recurse=true)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

bool RelAlgDagViewer::visit ( RelTranslatedJoin const *  n,
std::string  s 
)
inlineoverrideprotectedvirtual

Reimplemented from RelAlgDagNode::Visitor.

Definition at line 257 of file RelAlgDagViewer.h.

References innerVisit().

257  {
258  return innerVisit(n, s);
259  }
bool innerVisit(T t, std::string name, bool recurse=true)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

bool RelAlgDagViewer::visit ( RexAbstractInput const *  n,
std::string  s 
)
inlineoverrideprotectedvirtual

Reimplemented from RelAlgDagNode::Visitor.

Definition at line 263 of file RelAlgDagViewer.h.

References innerVisit().

263  {
264  return innerVisit(n, s);
265  }
bool innerVisit(T t, std::string name, bool recurse=true)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

bool RelAlgDagViewer::visit ( RexCase const *  n,
std::string  s 
)
inlineoverrideprotectedvirtual

Reimplemented from RelAlgDagNode::Visitor.

Definition at line 267 of file RelAlgDagViewer.h.

References innerVisit().

267 { return innerVisit(n, s); }
bool innerVisit(T t, std::string name, bool recurse=true)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

bool RelAlgDagViewer::visit ( RexFunctionOperator const *  n,
std::string  s 
)
inlineoverrideprotectedvirtual

Reimplemented from RelAlgDagNode::Visitor.

Definition at line 269 of file RelAlgDagViewer.h.

References innerVisit().

269  {
270  return innerVisit(n, s);
271  }
bool innerVisit(T t, std::string name, bool recurse=true)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

bool RelAlgDagViewer::visit ( RexInput const *  n,
std::string  s 
)
inlineoverrideprotectedvirtual

Reimplemented from RelAlgDagNode::Visitor.

Definition at line 273 of file RelAlgDagViewer.h.

References RexInput::getSourceNode(), ids_, innerVisit(), and out_.

273  {
274  // As a special case, don't print out the addtional lines for the source child under a
275  // RexInput node. The information is already shown inline elsewhere in the plan.
276  auto ret = innerVisit(n, s, /*recurse=*/false);
277  auto it =
278  ids_.find(std::uintptr_t(static_cast<RelAlgDagNode const*>(n->getSourceNode())));
279  if (it != ids_.end()) {
280  out_ << ": source #" << it->second.id;
281  }
282  return ret;
283  }
std::ostringstream out_
bool innerVisit(T t, std::string name, bool recurse=true)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

bool RelAlgDagViewer::visit ( RexLiteral const *  n,
std::string  s 
)
inlineoverrideprotectedvirtual

Reimplemented from RelAlgDagNode::Visitor.

Definition at line 285 of file RelAlgDagViewer.h.

References innerVisit().

285 { return innerVisit(n, s); }
bool innerVisit(T t, std::string name, bool recurse=true)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

bool RelAlgDagViewer::visit ( RexOperator const *  n,
std::string  s 
)
inlineoverrideprotectedvirtual

Reimplemented from RelAlgDagNode::Visitor.

Definition at line 287 of file RelAlgDagViewer.h.

References innerVisit().

287 { return innerVisit(n, s); }
bool innerVisit(T t, std::string name, bool recurse=true)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

bool RelAlgDagViewer::visit ( RexRef const *  n,
std::string  s 
)
inlineoverrideprotectedvirtual

Reimplemented from RelAlgDagNode::Visitor.

Definition at line 289 of file RelAlgDagViewer.h.

References innerVisit().

289 { return innerVisit(n, s); }
bool innerVisit(T t, std::string name, bool recurse=true)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

bool RelAlgDagViewer::visit ( RexAgg const *  n,
std::string  s 
)
inlineoverrideprotectedvirtual

Reimplemented from RelAlgDagNode::Visitor.

Definition at line 291 of file RelAlgDagViewer.h.

References innerVisit().

291 { return innerVisit(n, s); }
bool innerVisit(T t, std::string name, bool recurse=true)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

bool RelAlgDagViewer::visit ( RexSubQuery const *  n,
std::string  s 
)
inlineoverrideprotectedvirtual

Reimplemented from RelAlgDagNode::Visitor.

Definition at line 293 of file RelAlgDagViewer.h.

References innerVisit().

293 { return innerVisit(n, s); }
bool innerVisit(T t, std::string name, bool recurse=true)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

bool RelAlgDagViewer::visit ( RexWindowFunctionOperator const *  n,
std::string  s 
)
inlineoverrideprotectedvirtual

Reimplemented from RelAlgDagNode::Visitor.

Definition at line 295 of file RelAlgDagViewer.h.

References innerVisit().

295  {
296  return innerVisit(n, s);
297  }
bool innerVisit(T t, std::string name, bool recurse=true)
constexpr double n
Definition: Utm.h:38

+ Here is the call graph for this function:

template<typename T >
void RelAlgDagViewer::visitChild ( child,
std::string  name 
)
inlineprotected

Definition at line 146 of file RelAlgDagViewer.h.

References already_indented_, CHECK, ids_, and needs_colon_.

Referenced by innerVisit().

146  {
147  static_assert(std::is_base_of_v<RelAlgDagNode, std::remove_pointer_t<T>>);
148  auto it = ids_.find(std::uintptr_t(static_cast<RelAlgDagNode const*>(child)));
149  CHECK(it != ids_.end());
150  it->second.used_node = true; // Node is a child node.
151  already_indented_ = true;
152  needs_colon_ = true;
153  child->accept(*this, name);
154  needs_colon_ = false;
155  }
#define CHECK(condition)
Definition: Logger.h:291
string name
Definition: setup.in.py:72

+ Here is the caller graph for this function:

Member Data Documentation

bool RelAlgDagViewer::already_indented_ {false}
protected

Definition at line 308 of file RelAlgDagViewer.h.

Referenced by visitChild().

id_map RelAlgDagViewer::ids_
protected
size_t RelAlgDagViewer::indent_level_ {0}
protected

Definition at line 302 of file RelAlgDagViewer.h.

Referenced by innerVisit().

constexpr size_t RelAlgDagViewer::indent_spaces_ {4}
staticprotected

Definition at line 313 of file RelAlgDagViewer.h.

size_t RelAlgDagViewer::line_number_ {1}
protected

Definition at line 303 of file RelAlgDagViewer.h.

Referenced by innerVisit().

bool RelAlgDagViewer::needs_colon_ {false}
protected

Definition at line 310 of file RelAlgDagViewer.h.

Referenced by visitChild().

bool RelAlgDagViewer::needs_newline_ {false}
protected

Definition at line 309 of file RelAlgDagViewer.h.

size_t RelAlgDagViewer::next_id_ {1}
protected

Definition at line 306 of file RelAlgDagViewer.h.

Referenced by emplaceVoid(), and innerVisit().

std::ostringstream RelAlgDagViewer::out_
protected

Definition at line 301 of file RelAlgDagViewer.h.

Referenced by innerVisit(), str(), and visit().

bool RelAlgDagViewer::showing_steps_ {false}
protected

Definition at line 304 of file RelAlgDagViewer.h.

Referenced by clear(), and handleQueryEngineVector().

bool RelAlgDagViewer::top_call_ {true}
protected

Definition at line 307 of file RelAlgDagViewer.h.

Referenced by emplaceVoid(), handleQueryEngineVector(), and innerVisit().

bool RelAlgDagViewer::verbose_ {false}
protected

Definition at line 311 of file RelAlgDagViewer.h.

Referenced by clear(), and innerVisit().


The documentation for this class was generated from the following file: