OmniSciDB  72c90bc290
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl Class Reference
+ Inheritance diagram for org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl:
+ Collaboration diagram for org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl:

Public Member Functions

 HeavyDBRelWriterImpl (PrintWriter pw)
 
 HeavyDBRelWriterImpl (PrintWriter pw, SqlExplainLevel detailLevel, boolean withIdPrefix)
 
Set< String > collectRelColumnOrigin (RelMetadataQuery mq, RelNode rel, int targetColumnIndex)
 
final void explain (RelNode rel, List< Pair< String,@Nullable Object >> valueList)
 
SqlExplainLevel getDetailLevel ()
 
RelWriter item (String term,@Nullable Object value)
 
RelWriter done (RelNode node)
 
String simple ()
 

Protected Member Functions

void explain_ (RelNode rel, List< Pair< String,@Nullable Object >> values)
 

Protected Attributes

final PrintWriter pw
 
final SqlExplainLevel detailLevel
 
final boolean withIdPrefix
 
final Spacer spacer = new Spacer()
 

Private Member Functions

void explainInputs (List< RelNode > inputs)
 
boolean checkInputsPresentInExplain (RelNode node)
 

Private Attributes

final List< Pair< String,@Nullable
Object > > 
values = new ArrayList<>()
 

Detailed Description

Implementation of org.apache.calcite.rel.RelWriter.

Definition at line 43 of file HeavyDBRelWriterImpl.java.

Constructor & Destructor Documentation

org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.HeavyDBRelWriterImpl ( PrintWriter  pw)
inline

Definition at line 54 of file HeavyDBRelWriterImpl.java.

References org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.pw.

54  {
55  this(pw, SqlExplainLevel.EXPPLAN_ATTRIBUTES, true);
56  }
org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.HeavyDBRelWriterImpl ( PrintWriter  pw,
SqlExplainLevel  detailLevel,
boolean  withIdPrefix 
)
inline

Member Function Documentation

boolean org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.checkInputsPresentInExplain ( RelNode  node)
inlineprivate

Definition at line 234 of file HeavyDBRelWriterImpl.java.

References org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.values.

Referenced by org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.done().

234  {
235  int i = 0;
236  if (values.size() > 0 && values.get(0).left.equals("subset")) {
237  ++i;
238  }
239  for (RelNode input : node.getInputs()) {
240  assert values.get(i).right == input;
241  ++i;
242  }
243  return true;
244  }
final List< Pair< String,@Nullable Object > > values

+ Here is the caller graph for this function:

Set<String> org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.collectRelColumnOrigin ( RelMetadataQuery  mq,
RelNode  rel,
int  targetColumnIndex 
)
inline

Definition at line 67 of file HeavyDBRelWriterImpl.java.

Referenced by org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.explain_().

68  {
69  Set<RelColumnOrigin> columnOrigins = new HashSet<>();
70  Map<String, Set<String>> originInfoMap = new HashMap<>();
71  Set<String> originInfo = new HashSet<>();
72  try {
73  if (!rel.getInputs().isEmpty()) {
74  RelNode sourceNode = rel.getInputs().size() == 1 ? rel.getInput(0) : rel;
75  columnOrigins = mq.getColumnOrigins(sourceNode, targetColumnIndex);
76  }
77  for (RelColumnOrigin rco : columnOrigins) {
78  RelOptTable relOptTable = rco.getOriginTable();
79  String dbName = relOptTable.getQualifiedName().get(0);
80  String tableName = relOptTable.getQualifiedName().get(1);
81  String colName = relOptTable.getRowType()
82  .getFieldList()
83  .get(rco.getOriginColumnOrdinal())
84  .getName();
85  String key = "$" + targetColumnIndex;
86  String info = "db:" + dbName + ",tableName:" + tableName + ",colName:" + colName;
87  if (originInfoMap.containsKey(key)) {
88  originInfoMap.get(key).add(info);
89  } else {
90  Set<String> originList = new HashSet<>();
91  originList.add(info);
92  originInfoMap.put(key, originList);
93  }
94  }
95  } catch (Exception ex) {
96  throw new RuntimeException("EXPLAIN CALCITE DETAILED error: " + ex.getMessage());
97  }
98 
99  for (Map.Entry<String, Set<String>> entry : originInfoMap.entrySet()) {
100  int index = 1;
101  for (String colInfo : entry.getValue()) {
102  if (entry.getValue().size() > 1) {
103  originInfo.add(entry.getKey() + "-" + index + "->" + colInfo);
104  } else {
105  originInfo.add(entry.getKey() + "->" + colInfo);
106  }
107  index++;
108  }
109  }
110  return originInfo;
111  }

+ Here is the caller graph for this function:

RelWriter org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.done ( RelNode  node)
inline

Definition at line 225 of file HeavyDBRelWriterImpl.java.

References org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.checkInputsPresentInExplain(), org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.explain_(), and org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.values.

225  {
226  assert checkInputsPresentInExplain(node);
227  final List<Pair<String, @Nullable Object>> valuesCopy = ImmutableList.copyOf(values);
228  values.clear();
229  explain_(node, valuesCopy);
230  pw.flush();
231  return this;
232  }
final List< Pair< String,@Nullable Object > > values
void explain_(RelNode rel, List< Pair< String,@Nullable Object >> values)

+ Here is the call graph for this function:

final void org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.explain ( RelNode  rel,
List< Pair< String,@Nullable Object >>  valueList 
)
inline

Definition at line 209 of file HeavyDBRelWriterImpl.java.

References org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.explain_().

209  {
210  explain_(rel, valueList);
211  }
void explain_(RelNode rel, List< Pair< String,@Nullable Object >> values)

+ Here is the call graph for this function:

void org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.explain_ ( RelNode  rel,
List< Pair< String,@Nullable Object >>  values 
)
inlineprotected

Definition at line 113 of file HeavyDBRelWriterImpl.java.

References File_Namespace.append(), org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.collectRelColumnOrigin(), org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.detailLevel, org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.explainInputs(), org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.values, and org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.withIdPrefix.

Referenced by org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.done(), and org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.explain().

113  {
114  List<RelNode> inputs = rel.getInputs();
115  final RelMetadataQuery mq = rel.getCluster().getMetadataQuery();
116  if (!mq.isVisibleInExplain(rel, detailLevel)) {
117  // render children in place of this, at same level
118  explainInputs(inputs);
119  return;
120  }
121 
122  StringBuilder s = new StringBuilder();
123  spacer.spaces(s);
124  if (withIdPrefix) {
125  s.append(rel.getId()).append(":");
126  }
127  s.append(rel.getRelTypeName());
128  if (detailLevel != SqlExplainLevel.NO_ATTRIBUTES) {
129  int j = 0;
130  for (Pair<String, @Nullable Object> value : values) {
131  if (value.right instanceof RelNode) {
132  continue;
133  }
134  if (j++ == 0) {
135  s.append("(");
136  } else {
137  s.append(", ");
138  }
139  s.append(value.left).append("=[").append(value.right).append("]");
140  }
141  if (j > 0) {
142  s.append(")");
143  }
144  }
145  switch (detailLevel) {
146  case ALL_ATTRIBUTES:
147  s.append(": rowcount = ")
148  .append(mq.getRowCount(rel))
149  .append(", cumulative cost = ")
150  .append(mq.getCumulativeCost(rel));
151  break;
152  default:
153  break;
154  }
155  switch (detailLevel) {
156  case NON_COST_ATTRIBUTES:
157  case ALL_ATTRIBUTES:
158  if (!withIdPrefix) {
159  // If we didn't print the rel id at the start of the line, print
160  // it at the end.
161  s.append(", id = ").append(rel.getId());
162  }
163  break;
164  default:
165  break;
166  }
167  Set<String> originInfo = new HashSet<>();
168  if (rel instanceof LogicalAggregate) {
169  LogicalAggregate aggregate = (LogicalAggregate) rel;
170  for (AggregateCall aggCall : aggregate.getAggCallList()) {
171  for (int expressionIndex : aggCall.getArgList()) {
172  originInfo.addAll(collectRelColumnOrigin(mq, rel, expressionIndex));
173  }
174  }
175  } else {
176  rel.accept(new RexShuttle() {
177  @Override
178  public RexNode visitInputRef(final RexInputRef inputRef) {
179  originInfo.addAll(collectRelColumnOrigin(mq, rel, inputRef.getIndex()));
180  return inputRef;
181  }
182  });
183  }
184  if (!originInfo.isEmpty()) {
185  s.append("\t{");
186  int index = 1;
187  for (String info : originInfo) {
188  s.append("[").append(info).append("]");
189  if (index < originInfo.size()) {
190  s.append(", ");
191  }
192  index++;
193  }
194  s.append("}");
195  }
196  pw.println(s);
197  spacer.add(2);
198  explainInputs(inputs);
199  spacer.subtract(2);
200  }
size_t append(FILE *f, const size_t size, const int8_t *buf)
Appends the specified number of bytes to the end of the file f from buf.
Definition: File.cpp:158
Set< String > collectRelColumnOrigin(RelMetadataQuery mq, RelNode rel, int targetColumnIndex)
final List< Pair< String,@Nullable Object > > values

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.explainInputs ( List< RelNode >  inputs)
inlineprivate

Definition at line 202 of file HeavyDBRelWriterImpl.java.

Referenced by org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.explain_().

202  {
203  for (RelNode input : inputs) {
204  input.explain(this);
205  }
206  }

+ Here is the caller graph for this function:

SqlExplainLevel org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.getDetailLevel ( )
inline
RelWriter org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.item ( String  term,
@Nullable Object  value 
)
inline

Definition at line 219 of file HeavyDBRelWriterImpl.java.

219  {
220  values.add(Pair.of(term, value));
221  return this;
222  }
String org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.simple ( )
inline

Converts the collected terms and values to a string. Does not write to the parent writer.

Definition at line 250 of file HeavyDBRelWriterImpl.java.

References File_Namespace.append(), and org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.values.

250  {
251  final StringBuilder buf = new StringBuilder("(");
252  for (Ord<Pair<String, @Nullable Object>> ord : Ord.zip(values)) {
253  if (ord.i > 0) {
254  buf.append(", ");
255  }
256  buf.append(ord.e.left).append("=[").append(ord.e.right).append("]");
257  }
258  buf.append(")");
259  return buf.toString();
260  }
size_t append(FILE *f, const size_t size, const int8_t *buf)
Appends the specified number of bytes to the end of the file f from buf.
Definition: File.cpp:158
final List< Pair< String,@Nullable Object > > values

+ Here is the call graph for this function:

Member Data Documentation

final PrintWriter org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.pw
protected
final Spacer org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.spacer = new Spacer()
protected

Definition at line 49 of file HeavyDBRelWriterImpl.java.

final boolean org.apache.calcite.rel.externalize.HeavyDBRelWriterImpl.withIdPrefix
protected

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