void ExclusionNode::excludePath(FieldPath path) { if (path.getPathLength() == 1) { _excludedFields.insert(path.fullPath()); return; } addOrGetChild(path.getFieldName(0))->excludePath(path.tail()); }
void ProjectionNode::addProjectionForPath(const FieldPath& path) { if (path.getPathLength() == 1) { _projectedFields.insert(path.fullPath()); return; } // FieldPath can't be empty, so it is safe to obtain the first path component here. addOrGetChild(path.getFieldName(0).toString())->addProjectionForPath(path.tail()); }
void ProjectionNode::addExpressionForPath(const FieldPath& path, boost::intrusive_ptr<Expression> expr) { // If the computed fields policy is 'kBanComputedFields', we should never reach here. invariant(_policies.computedFieldsPolicy == ComputedFieldsPolicy::kAllowComputedFields); if (path.getPathLength() == 1) { auto fieldName = path.fullPath(); _expressions[fieldName] = expr; _orderToProcessAdditionsAndChildren.push_back(fieldName); return; } // FieldPath can't be empty, so it is safe to obtain the first path component here. addOrGetChild(path.getFieldName(0).toString())->addExpressionForPath(path.tail(), expr); }