Fix mutations text escaping

This commit is contained in:
alesapin 2021-01-11 17:43:05 +03:00
parent 53d0c9fa72
commit b1c4e5b9f2
3 changed files with 23 additions and 3 deletions

View File

@ -1,5 +1,5 @@
#include <Storages/MutationCommands.h> #include <Storages/MutationCommands.h>
#include <IO/Operators.h> #include <IO/WriteHelpers.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 +133,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(

View File

@ -0,0 +1,2 @@
foo
foo

View File

@ -0,0 +1,18 @@
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;