ClickHouse/dbms/Parsers/ASTExtendedRoleSet.cpp

76 lines
2.3 KiB
C++
Raw Normal View History

#include <Parsers/ASTExtendedRoleSet.h>
2019-12-01 22:01:05 +00:00
#include <Common/quoteString.h>
namespace DB
{
namespace
{
void formatRoleNameOrID(const String & str, bool is_id, const IAST::FormatSettings & settings)
{
if (is_id)
{
settings.ostr << (settings.hilite ? IAST::hilite_keyword : "") << "ID" << (settings.hilite ? IAST::hilite_none : "") << "("
<< quoteString(str) << ")";
}
else
{
settings.ostr << backQuoteIfNeed(str);
}
}
}
void ASTExtendedRoleSet::formatImpl(const FormatSettings & settings, FormatState &, FormatStateStacked) const
2019-12-01 22:01:05 +00:00
{
if (empty())
{
settings.ostr << (settings.hilite ? IAST::hilite_keyword : "") << "NONE" << (settings.hilite ? IAST::hilite_none : "");
return;
}
bool need_comma = false;
if (all)
2019-12-01 22:01:05 +00:00
{
if (std::exchange(need_comma, true))
settings.ostr << ", ";
settings.ostr << (settings.hilite ? IAST::hilite_keyword : "") << "ALL" << (settings.hilite ? IAST::hilite_none : "");
2019-12-01 22:01:05 +00:00
}
else
2019-12-01 22:01:05 +00:00
{
for (auto & role : names)
{
if (std::exchange(need_comma, true))
settings.ostr << ", ";
formatRoleNameOrID(role, id_mode, settings);
}
if (current_user)
{
if (std::exchange(need_comma, true))
settings.ostr << ", ";
settings.ostr << (settings.hilite ? IAST::hilite_keyword : "") << "CURRENT_USER" << (settings.hilite ? IAST::hilite_none : "");
}
2019-12-01 22:01:05 +00:00
}
if (except_current_user || !except_names.empty())
2019-12-01 22:01:05 +00:00
{
settings.ostr << (settings.hilite ? IAST::hilite_keyword : "") << " EXCEPT " << (settings.hilite ? IAST::hilite_none : "");
need_comma = false;
2019-12-01 22:01:05 +00:00
for (auto & except_role : except_names)
{
if (std::exchange(need_comma, true))
settings.ostr << ", ";
formatRoleNameOrID(except_role, id_mode, settings);
}
2019-12-01 22:01:05 +00:00
if (except_current_user)
{
if (std::exchange(need_comma, true))
settings.ostr << ", ";
settings.ostr << (settings.hilite ? IAST::hilite_keyword : "") << "CURRENT_USER" << (settings.hilite ? IAST::hilite_none : "");
2019-12-01 22:01:05 +00:00
}
}
}
}