mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 23:21:59 +00:00
Mysql handler: Move format check to the handler
This commit is contained in:
parent
918a69e70b
commit
f6788fc660
@ -5,7 +5,6 @@
|
|||||||
#include <Interpreters/Context.h>
|
#include <Interpreters/Context.h>
|
||||||
#include <Core/Settings.h>
|
#include <Core/Settings.h>
|
||||||
#include <DataStreams/MaterializingBlockOutputStream.h>
|
#include <DataStreams/MaterializingBlockOutputStream.h>
|
||||||
#include <DataStreams/NativeBlockInputStream.h>
|
|
||||||
#include <Formats/FormatSettings.h>
|
#include <Formats/FormatSettings.h>
|
||||||
#include <Processors/Formats/IRowInputFormat.h>
|
#include <Processors/Formats/IRowInputFormat.h>
|
||||||
#include <Processors/Formats/IRowOutputFormat.h>
|
#include <Processors/Formats/IRowOutputFormat.h>
|
||||||
@ -214,8 +213,8 @@ BlockOutputStreamPtr FormatFactory::getOutputStreamParallelIfPossible(
|
|||||||
bool parallel_formatting = settings.output_format_parallel_formatting;
|
bool parallel_formatting = settings.output_format_parallel_formatting;
|
||||||
auto format_settings = _format_settings ? *_format_settings : getFormatSettings(context);
|
auto format_settings = _format_settings ? *_format_settings : getFormatSettings(context);
|
||||||
|
|
||||||
if (output_getter && parallel_formatting && getCreators(name).supports_parallel_formatting && !settings.output_format_json_array_of_rows
|
if (output_getter && parallel_formatting && getCreators(name).supports_parallel_formatting
|
||||||
&& !format_settings.mysql_wire.sequence_id)
|
&& !settings.output_format_json_array_of_rows)
|
||||||
{
|
{
|
||||||
auto formatter_creator = [output_getter, sample, callback, format_settings]
|
auto formatter_creator = [output_getter, sample, callback, format_settings]
|
||||||
(WriteBuffer & output) -> OutputFormatPtr
|
(WriteBuffer & output) -> OutputFormatPtr
|
||||||
@ -315,7 +314,7 @@ OutputFormatPtr FormatFactory::getOutputFormatParallelIfPossible(
|
|||||||
const Settings & settings = context->getSettingsRef();
|
const Settings & settings = context->getSettingsRef();
|
||||||
|
|
||||||
if (settings.output_format_parallel_formatting && getCreators(name).supports_parallel_formatting
|
if (settings.output_format_parallel_formatting && getCreators(name).supports_parallel_formatting
|
||||||
&& !settings.output_format_json_array_of_rows && !format_settings.mysql_wire.sequence_id)
|
&& !settings.output_format_json_array_of_rows)
|
||||||
{
|
{
|
||||||
auto formatter_creator = [output_getter, sample, callback, format_settings]
|
auto formatter_creator = [output_getter, sample, callback, format_settings]
|
||||||
(WriteBuffer & output) -> OutputFormatPtr
|
(WriteBuffer & output) -> OutputFormatPtr
|
||||||
@ -353,10 +352,6 @@ OutputFormatPtr FormatFactory::getOutputFormat(
|
|||||||
|
|
||||||
auto format_settings = _format_settings ? *_format_settings : getFormatSettings(context);
|
auto format_settings = _format_settings ? *_format_settings : getFormatSettings(context);
|
||||||
|
|
||||||
/// If we're handling MySQL protocol connection right now then MySQLWire is only allowed output format.
|
|
||||||
if (format_settings.mysql_wire.sequence_id && (name != "MySQLWire"))
|
|
||||||
throw Exception(ErrorCodes::UNSUPPORTED_METHOD, "MySQL protocol does not support custom output formats");
|
|
||||||
|
|
||||||
/** TODO: Materialization is needed, because formats can use the functions `IDataType`,
|
/** TODO: Materialization is needed, because formats can use the functions `IDataType`,
|
||||||
* which only work with full columns.
|
* which only work with full columns.
|
||||||
*/
|
*/
|
||||||
|
@ -57,6 +57,7 @@ namespace ErrorCodes
|
|||||||
extern const int NOT_IMPLEMENTED;
|
extern const int NOT_IMPLEMENTED;
|
||||||
extern const int MYSQL_CLIENT_INSUFFICIENT_CAPABILITIES;
|
extern const int MYSQL_CLIENT_INSUFFICIENT_CAPABILITIES;
|
||||||
extern const int SUPPORT_IS_DISABLED;
|
extern const int SUPPORT_IS_DISABLED;
|
||||||
|
extern const int UNSUPPORTED_METHOD;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -352,8 +353,10 @@ void MySQLHandler::comQuery(ReadBuffer & payload)
|
|||||||
format_settings.mysql_wire.max_packet_size = max_packet_size;
|
format_settings.mysql_wire.max_packet_size = max_packet_size;
|
||||||
format_settings.mysql_wire.sequence_id = &sequence_id;
|
format_settings.mysql_wire.sequence_id = &sequence_id;
|
||||||
|
|
||||||
auto set_result_details = [&with_output](const String &, const String &, const String &, const String &)
|
auto set_result_details = [&with_output](const String &, const String &, const String &format, const String &)
|
||||||
{
|
{
|
||||||
|
if (format != "MySQLWire")
|
||||||
|
throw Exception(ErrorCodes::UNSUPPORTED_METHOD, "MySQL protocol does not support custom output formats");
|
||||||
with_output = true;
|
with_output = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -34,6 +34,14 @@ expect "ERROR 395 (00000): Code: 395"
|
|||||||
send -- "select * from system.one format TSV;\r"
|
send -- "select * from system.one format TSV;\r"
|
||||||
expect "ERROR 1 (00000): Code: 1"
|
expect "ERROR 1 (00000): Code: 1"
|
||||||
|
|
||||||
|
send -- "select * from system.one format JSON;\r"
|
||||||
|
expect "ERROR 1 (00000): Code: 1"
|
||||||
|
|
||||||
|
send -- "select * from system.one format MySQLWire;\r"
|
||||||
|
expect "| dummy |"
|
||||||
|
expect "| 0 |"
|
||||||
|
expect "1 row in set"
|
||||||
|
|
||||||
send -- "select count(number), sum(number) from numbers(10);\r"
|
send -- "select count(number), sum(number) from numbers(10);\r"
|
||||||
expect "+---------------+-------------+"
|
expect "+---------------+-------------+"
|
||||||
expect "| count(number) | sum(number) |"
|
expect "| count(number) | sum(number) |"
|
||||||
|
Loading…
Reference in New Issue
Block a user