#include "name_service.h" namespace NSQLComplete { namespace { void SetPrefix(TString& name, TStringBuf delimeter, const TNamespaced& namespaced) { if (namespaced.Namespace.empty()) { return; } name.prepend(delimeter); name.prepend(namespaced.Namespace); } void FixPrefix(TString& name, TStringBuf delimeter, const TNamespaced& namespaced) { if (namespaced.Namespace.empty()) { return; } name.remove(0, namespaced.Namespace.size() + delimeter.size()); } } // namespace TGenericName TNameConstraints::Qualified(TGenericName unqualified) const { return std::visit([&](auto&& name) -> TGenericName { using T = std::decay_t; if constexpr (std::is_same_v) { SetPrefix(name.Identifier, ".", *Pragma); } else if constexpr (std::is_same_v) { SetPrefix(name.Identifier, "::", *Function); } else if constexpr (std::is_same_v) { SetPrefix(name.Identifier, ":", *Cluster); } return name; }, std::move(unqualified)); } TGenericName TNameConstraints::Unqualified(TGenericName qualified) const { return std::visit([&](auto&& name) -> TGenericName { using T = std::decay_t; if constexpr (std::is_same_v) { FixPrefix(name.Identifier, ".", *Pragma); } else if constexpr (std::is_same_v) { FixPrefix(name.Identifier, "::", *Function); } else if constexpr (std::is_same_v) { FixPrefix(name.Identifier, ":", *Cluster); } return name; }, std::move(qualified)); } TVector TNameConstraints::Qualified(TVector unqualified) const { for (auto& name : unqualified) { name = Qualified(std::move(name)); } return unqualified; } TVector TNameConstraints::Unqualified(TVector qualified) const { for (auto& name : qualified) { name = Unqualified(std::move(name)); } return qualified; } } // namespace NSQLComplete