提交 559478e4 编写于 作者: R robot-clickhouse

Backport #18944 to 20.12: Fix mutations text serialization

上级 3c0e8937
#include <Storages/MutationCommands.h> #include <Storages/MutationCommands.h>
#include <IO/Operators.h> #include <IO/WriteHelpers.h>
#include <IO/ReadHelpers.h>
#include <Parsers/formatAST.h> #include <Parsers/formatAST.h>
#include <Parsers/ExpressionListParsers.h> #include <Parsers/ExpressionListParsers.h>
#include <Parsers/ParserAlterQuery.h> #include <Parsers/ParserAlterQuery.h>
...@@ -133,13 +134,13 @@ void MutationCommands::writeText(WriteBuffer & out) const ...@@ -133,13 +134,13 @@ void MutationCommands::writeText(WriteBuffer & out) const
{ {
WriteBufferFromOwnString commands_buf; WriteBufferFromOwnString commands_buf;
formatAST(*ast(), commands_buf, /* hilite = */ false, /* one_line = */ true); formatAST(*ast(), commands_buf, /* hilite = */ false, /* one_line = */ true);
out << escape << commands_buf.str(); writeEscapedString(commands_buf.str(), out);
} }
void MutationCommands::readText(ReadBuffer & in) void MutationCommands::readText(ReadBuffer & in)
{ {
String commands_str; String commands_str;
in >> escape >> commands_str; readEscapedString(commands_str, in);
ParserAlterCommandList p_alter_commands; ParserAlterCommandList p_alter_commands;
auto commands_ast = parseQuery( auto commands_ast = parseQuery(
......
DROP TABLE IF EXISTS mutations_and_escaping_1648;
CREATE TABLE mutations_and_escaping_1648 (d Date, e Enum8('foo'=1, 'bar'=2)) Engine = MergeTree(d, (d), 8192);
INSERT INTO mutations_and_escaping_1648 (d, e) VALUES ('2018-01-01', 'foo');
INSERT INTO mutations_and_escaping_1648 (d, e) VALUES ('2018-01-02', 'bar');
-- slow mutation
ALTER TABLE mutations_and_escaping_1648 UPDATE e = CAST('foo', 'Enum8(\'foo\' = 1, \'bar\' = 2)') WHERE d='2018-01-02' and sleepEachRow(1) = 0;
-- check that we able to read mutation text after serialization
DETACH TABLE mutations_and_escaping_1648;
ATTACH TABLE mutations_and_escaping_1648;
ALTER TABLE mutations_and_escaping_1648 UPDATE e = CAST('foo', 'Enum8(\'foo\' = 1, \'bar\' = 2)') WHERE d='2018-01-02' SETTINGS mutations_sync = 1;
SELECT e FROM mutations_and_escaping_1648 ORDER BY d;
DROP TABLE mutations_and_escaping_1648;
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册