#58363 - added setting is_writing_to_terminal to FormatSettings.h, modified PrettyBlockOutputFormat to use this, which is set in FormatFactory.cpp getOutputFormat and getOutputFormatParallelIfPossible

This commit is contained in:
Blargian 2024-01-15 16:32:51 +02:00
parent ce012d217f
commit 5f500522a4
3 changed files with 5 additions and 2 deletions

View File

@ -5,6 +5,7 @@
#include <Interpreters/Context.h>
#include <Interpreters/ProcessList.h>
#include <IO/SharedThreadPools.h>
#include <IO/WriteHelpers.h>
#include <Processors/Formats/IRowInputFormat.h>
#include <Processors/Formats/IRowOutputFormat.h>
#include <Processors/Formats/Impl/MySQLOutputFormat.h>
@ -448,6 +449,7 @@ OutputFormatPtr FormatFactory::getOutputFormatParallelIfPossible(
throw Exception(ErrorCodes::FORMAT_IS_NOT_SUITABLE_FOR_OUTPUT, "Format {} is not suitable for output", name);
auto format_settings = _format_settings ? *_format_settings : getFormatSettings(context);
format_settings.is_writing_to_terminal = isWritingToTerminal(buf);
const Settings & settings = context->getSettingsRef();
@ -489,6 +491,7 @@ OutputFormatPtr FormatFactory::getOutputFormat(
auto format_settings = _format_settings ? *_format_settings : getFormatSettings(context);
format_settings.max_threads = context->getSettingsRef().max_threads;
format_settings.is_writing_to_terminal = format_settings.is_writing_to_terminal = isWritingToTerminal(buf);
/** TODO: Materialization is needed, because formats can use the functions `IDataType`,
* which only work with full columns.

View File

@ -34,6 +34,7 @@ struct FormatSettings
bool null_as_default = true;
bool decimal_trailing_zeros = false;
bool defaults_for_omitted_fields = true;
bool is_writing_to_terminal = false;
bool seekable_read = true;
UInt64 max_rows_to_read_for_schema_inference = 25000;

View File

@ -4,7 +4,6 @@
#include <Processors/Formats/IOutputFormat.h>
#include <Formats/FormatSettings.h>
#include <Formats/FormatFactory.h>
#include <IO/WriteHelpers.h>
namespace DB
{
@ -73,7 +72,7 @@ void registerPrettyFormatWithNoEscapesAndMonoBlock(FormatFactory & factory, cons
const Block & sample,
const FormatSettings & format_settings)
{
bool color = !no_escapes && format_settings.pretty.color.valueOr(isWritingToTerminal(buf));
bool color = !no_escapes && format_settings.pretty.color.valueOr(format_settings.is_writing_to_terminal);
return std::make_shared<OutputFormat>(buf, sample, format_settings, mono_block, color);
});
if (!mono_block)