Resolve a field for JOIN USING purposes.
| 4141 | |
| 4142 | // Resolve a field for JOIN USING purposes. |
| 4143 | static ValueExprNode* resolveUsingField(DsqlCompilerScratch* dsqlScratch, const MetaName& name, |
| 4144 | ValueListNode* list, const FieldNode* flawedNode, const TEXT* side, dsql_ctx*& ctx) |
| 4145 | { |
| 4146 | ValueExprNode* node = PASS1_lookup_alias(dsqlScratch, name, list, false); |
| 4147 | |
| 4148 | if (!node) |
| 4149 | { |
| 4150 | string qualifier; |
| 4151 | qualifier.printf("<%s side of USING>", side); |
| 4152 | PASS1_field_unknown(qualifier.c_str(), name.c_str(), flawedNode); |
| 4153 | } |
| 4154 | |
| 4155 | DsqlAliasNode* aliasNode; |
| 4156 | FieldNode* fieldNode; |
| 4157 | DerivedFieldNode* derivedField; |
| 4158 | |
| 4159 | if ((aliasNode = nodeAs<DsqlAliasNode>(node))) |
| 4160 | ctx = aliasNode->implicitJoin->visibleInContext; |
| 4161 | else if ((fieldNode = nodeAs<FieldNode>(node))) |
| 4162 | ctx = fieldNode->dsqlContext; |
| 4163 | else if ((derivedField = nodeAs<DerivedFieldNode>(node))) |
| 4164 | ctx = derivedField->context; |
| 4165 | else |
| 4166 | fb_assert(false); |
| 4167 | |
| 4168 | return node; |
| 4169 | } |
no test coverage detected