| 181 | } |
| 182 | |
| 183 | void UnionNode::dumpTreeImpl(WriteBuffer & buffer, FormatState & format_state, size_t indent) const |
| 184 | { |
| 185 | buffer << std::string(indent, ' ') << "UNION id: " << format_state.getNodeId(this); |
| 186 | |
| 187 | if (hasAlias()) |
| 188 | buffer << ", alias: " << getAlias(); |
| 189 | |
| 190 | if (is_subquery) |
| 191 | buffer << ", is_subquery: " << is_subquery; |
| 192 | |
| 193 | if (is_cte) |
| 194 | buffer << ", is_cte: " << is_cte; |
| 195 | |
| 196 | if (is_materialized) |
| 197 | buffer << ", is_materialized: " << is_materialized; |
| 198 | |
| 199 | if (is_recursive_cte) |
| 200 | buffer << ", is_recursive_cte: " << is_recursive_cte; |
| 201 | |
| 202 | if (recursive_cte_table) |
| 203 | buffer << ", recursive_cte_table: " << recursive_cte_table->storage->getStorageID().getNameForLogs(); |
| 204 | |
| 205 | if (!cte_name.empty()) |
| 206 | buffer << ", cte_name: " << cte_name; |
| 207 | |
| 208 | buffer << ", union_mode: " << toString(union_mode); |
| 209 | |
| 210 | if (isCorrelated()) |
| 211 | { |
| 212 | buffer << ", is_correlated: 1\n" << std::string(indent + 2, ' ') << "CORRELATED COLUMNS\n"; |
| 213 | getCorrelatedColumns().dumpTreeImpl(buffer, format_state, indent + 4); |
| 214 | } |
| 215 | |
| 216 | buffer << '\n' << std::string(indent + 2, ' ') << "QUERIES\n"; |
| 217 | getQueriesNode()->dumpTreeImpl(buffer, format_state, indent + 4); |
| 218 | } |
| 219 | |
| 220 | bool UnionNode::isEqualImpl(const IQueryTreeNode & rhs, CompareOptions) const |
| 221 | { |
nothing calls this directly
no test coverage detected