| 6 | namespace duckdb { |
| 7 | |
| 8 | string JoinRef::ToString() const { |
| 9 | string result; |
| 10 | result = left->ToString() + " "; |
| 11 | switch (ref_type) { |
| 12 | case JoinRefType::REGULAR: |
| 13 | result += EnumUtil::ToString(type) + " JOIN "; |
| 14 | break; |
| 15 | case JoinRefType::NATURAL: |
| 16 | result += "NATURAL "; |
| 17 | result += EnumUtil::ToString(type) + " JOIN "; |
| 18 | break; |
| 19 | case JoinRefType::ASOF: |
| 20 | result += "ASOF "; |
| 21 | result += EnumUtil::ToString(type) + " JOIN "; |
| 22 | break; |
| 23 | case JoinRefType::CROSS: |
| 24 | result += is_implicit ? ", " : "CROSS JOIN "; |
| 25 | break; |
| 26 | case JoinRefType::POSITIONAL: |
| 27 | result += "POSITIONAL JOIN "; |
| 28 | break; |
| 29 | case JoinRefType::DEPENDENT: |
| 30 | result += "DEPENDENT JOIN "; |
| 31 | break; |
| 32 | } |
| 33 | result += right->ToString(); |
| 34 | if (condition) { |
| 35 | D_ASSERT(using_columns.empty()); |
| 36 | result += " ON ("; |
| 37 | result += condition->ToString(); |
| 38 | result += ")"; |
| 39 | } else if (!using_columns.empty()) { |
| 40 | result += " USING ("; |
| 41 | for (idx_t i = 0; i < using_columns.size(); i++) { |
| 42 | if (i > 0) { |
| 43 | result += ", "; |
| 44 | } |
| 45 | result += KeywordHelper::WriteOptionallyQuoted(using_columns[i]); |
| 46 | } |
| 47 | result += ")"; |
| 48 | } |
| 49 | return result; |
| 50 | } |
| 51 | |
| 52 | bool JoinRef::Equals(const TableRef &other_p) const { |
| 53 | if (!TableRef::Equals(other_p)) { |
no test coverage detected