void CollectAliases::dump(WriteBuffer & out) const
{
	/// For need of tests, we need to dump result in some fixed order.
	std::vector<Aliases::const_iterator> vec;
	vec.reserve(aliases.size());
	for (auto it = aliases.begin(); it != aliases.end(); ++it)
		vec.emplace_back(it);

	std::sort(vec.begin(), vec.end(), [](const auto & a, const auto & b) { return a->first < b->first; });

	for (const auto & it : vec)
	{
		writeProbablyBackQuotedString(it->first, out);
		writeCString(" -> ", out);

		switch (it->second.kind)
		{
			case Kind::Expression:
				writeCString("(expression) ", out);
				break;
			case Kind::Table:
				writeCString("(table) ", out);
				break;
			case Kind::ArrayJoin:
				writeCString("(array join) ", out);
				break;
		}

		std::stringstream formatted_ast;
		formatAST(*it->second.node, formatted_ast, 0, false, true);
		writeString(formatted_ast.str(), out);

		writeChar('\n', out);
	}
}
Exemple #2
0
void IAST::FormatSettings::writeIdentifier(const String & name) const
{
    WriteBufferFromOStream out(ostr, 32);

    switch (identifier_quoting_style)
    {
        case IdentifierQuotingStyle::None:
        {
            if (always_quote_identifiers)
                throw Exception("Incompatible arguments: always_quote_identifiers = true && identifier_quoting_style == IdentifierQuotingStyle::None",
                    ErrorCodes::BAD_ARGUMENTS);
            writeString(name, out);
            break;
        }
        case IdentifierQuotingStyle::Backticks:
        {
            if (always_quote_identifiers)
                writeBackQuotedString(name, out);
            else
                writeProbablyBackQuotedString(name, out);
            break;
        }
        case IdentifierQuotingStyle::DoubleQuotes:
        {
            if (always_quote_identifiers)
                writeDoubleQuotedString(name, out);
            else
                writeProbablyDoubleQuotedString(name, out);
            break;
        }
    }

    out.next();
}
Exemple #3
0
void ASTIdentifier::formatImplWithoutAlias(const FormatSettings & settings, FormatState & state, FormatStateStacked frame) const
{
    auto format_element = [&](const String & name)
    {
        settings.ostr << (settings.hilite ? hilite_identifier : "");

        WriteBufferFromOStream wb(settings.ostr, 32);
        writeProbablyBackQuotedString(name, wb);
        wb.next();

        settings.ostr << (settings.hilite ? hilite_none : "");
    };

    /// A simple or compound identifier?

    if (children.size() > 1)
    {
        for (size_t i = 0, size = children.size(); i < size; ++i)
        {
            if (i != 0)
                settings.ostr << '.';

            format_element(static_cast<const ASTIdentifier &>(*children[i].get()).name);
        }
    }
    else
    {
        format_element(name);
    }
}
Exemple #4
0
/// Quote the identifier with backquotes, if required.
String backQuoteIfNeed(const String & x)
{
    String res(x.size(), '\0');
    {
        WriteBufferFromString wb(res);
        writeProbablyBackQuotedString(x, wb);
    }
    return res;
}
Exemple #5
0
void IAST::writeAlias(const String & name, std::ostream & s, bool hilite) const
{
    s << (hilite ? hilite_keyword : "") << " AS " << (hilite ? hilite_alias : "");

    WriteBufferFromOStream wb(s, 32);
    writeProbablyBackQuotedString(name, wb);
    wb.next();

    s << (hilite ? hilite_none : "");
}
Exemple #6
0
void AnalyzeColumns::dump(WriteBuffer & out) const
{
    /// For need of tests, we need to dump result in some fixed order.
    std::vector<Columns::const_iterator> vec;
    vec.reserve(columns.size());
    for (auto it = columns.begin(); it != columns.end(); ++it)
        vec.emplace_back(it);

    std::sort(vec.begin(), vec.end(), [](const auto & a, const auto & b) { return a->first < b->first; });

    for (const auto & it : vec)
    {
        writeString(it->first, out);
        writeCString(" -> ", out);

        writeProbablyBackQuotedString(it->second.name_in_table, out);
        writeCString(" ", out);
        writeProbablyBackQuotedString(it->second.data_type->getName(), out);

        const auto & table = it->second.table;

        writeCString(". Database name: ", out);
        if (table.database_name.empty())
            writeCString("(none)", out);
        else
            writeProbablyBackQuotedString(table.database_name, out);

        writeCString(". Table name: ", out);
        if (table.table_name.empty())
            writeCString("(none)", out);
        else
            writeProbablyBackQuotedString(table.table_name, out);

        writeCString(". Alias: ", out);
        if (table.alias.empty())
            writeCString("(none)", out);
        else
            writeProbablyBackQuotedString(table.alias, out);

        writeCString(". Storage: ", out);
        if (!table.storage)
            writeCString("(none)", out);
        else
            writeProbablyBackQuotedString(table.storage->getName(), out);

        writeCString(". AST: ", out);
        if (it->second.node)
        {
            std::stringstream formatted_ast;
            formatAST(*it->second.node, formatted_ast, false, true);
            writeString(formatted_ast.str(), out);
        }
        else
            writeCString("(none)", out);

        writeChar('\n', out);
    }
}