| 148 | } |
| 149 | |
| 150 | String ParsedTemplateFormatString::dump() const |
| 151 | { |
| 152 | WriteBufferFromOwnString res; |
| 153 | res << "\nDelimiter " << 0 << ": "; |
| 154 | verbosePrintString(delimiters.front().c_str(), delimiters.front().c_str() + delimiters.front().size(), res); |
| 155 | |
| 156 | size_t num_columns = std::max(escaping_rules.size(), format_idx_to_column_idx.size()); |
| 157 | for (size_t i = 0; i < num_columns; ++i) |
| 158 | { |
| 159 | res << "\nColumn " << i << ": \""; |
| 160 | if (column_names.size() <= i) |
| 161 | res << "<ERROR>"; |
| 162 | else if (column_names[i].empty()) |
| 163 | res << "<SKIPPED>"; |
| 164 | else |
| 165 | res << column_names[i]; |
| 166 | |
| 167 | res << "\" (mapped to table column "; |
| 168 | if (format_idx_to_column_idx.size() <= i) |
| 169 | res << "<ERROR>"; |
| 170 | else if (!format_idx_to_column_idx[i]) |
| 171 | res << "<SKIPPED>"; |
| 172 | else |
| 173 | res << *format_idx_to_column_idx[i]; |
| 174 | |
| 175 | res << "), Format " << (i < escaping_rules.size() ? escapingRuleToString(escaping_rules[i]) : "<ERROR>"); |
| 176 | |
| 177 | res << "\nDelimiter " << i + 1 << ": "; |
| 178 | if (delimiters.size() <= i + 1) |
| 179 | res << "<ERROR>"; |
| 180 | else |
| 181 | verbosePrintString(delimiters[i + 1].c_str(), delimiters[i + 1].c_str() + delimiters[i + 1].size(), res); |
| 182 | } |
| 183 | |
| 184 | return res.str(); |
| 185 | } |
| 186 | |
| 187 | void ParsedTemplateFormatString::throwInvalidFormat(const String & message, size_t column) const |
| 188 | { |
nothing calls this directly
no test coverage detected