mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-03 04:52:10 +00:00
49 lines
1.1 KiB
C++
49 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include <Parsers/IAST.h>
|
|
|
|
|
|
namespace DB
|
|
{
|
|
|
|
class WriteBuffer;
|
|
|
|
/// Takes a syntax tree and turns it into text.
|
|
/// Intended for pretty-printing (multi-line + hiliting).
|
|
/// In case of INSERT query, the data will be missing.
|
|
void formatAST(const IAST & ast, WriteBuffer & buf, bool hilite = true, bool one_line = false, bool show_secrets = true);
|
|
|
|
/// Like formatAST() but intended for serialization w/o pretty-printing (single-line, no hiliting).
|
|
String serializeAST(const IAST & ast);
|
|
|
|
inline WriteBuffer & operator<<(WriteBuffer & buf, const IAST & ast)
|
|
{
|
|
formatAST(ast, buf, false, true);
|
|
return buf;
|
|
}
|
|
|
|
inline WriteBuffer & operator<<(WriteBuffer & buf, const ASTPtr & ast)
|
|
{
|
|
formatAST(*ast, buf, false, true);
|
|
return buf;
|
|
}
|
|
|
|
}
|
|
|
|
template<>
|
|
struct fmt::formatter<DB::ASTPtr>
|
|
{
|
|
template<typename ParseContext>
|
|
constexpr auto parse(ParseContext & context)
|
|
{
|
|
return context.begin();
|
|
}
|
|
|
|
template<typename FormatContext>
|
|
auto format(const DB::ASTPtr & ast, FormatContext & context)
|
|
{
|
|
return fmt::format_to(context.out(), "{}", DB::serializeAST(*ast));
|
|
}
|
|
};
|
|
|