From b1c4e5b9f2258d2b561e2d8536368dcbd548ec9d Mon Sep 17 00:00:00 2001 From: alesapin Date: Mon, 11 Jan 2021 17:43:05 +0300 Subject: [PATCH] Fix mutations text escaping --- src/Storages/MutationCommands.cpp | 6 +++--- .../01648_mutations_and_escaping.reference | 2 ++ .../01648_mutations_and_escaping.sql | 18 ++++++++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 tests/queries/0_stateless/01648_mutations_and_escaping.reference create mode 100644 tests/queries/0_stateless/01648_mutations_and_escaping.sql diff --git a/src/Storages/MutationCommands.cpp b/src/Storages/MutationCommands.cpp index 2aa90a039bc..c533e5496ce 100644 --- a/src/Storages/MutationCommands.cpp +++ b/src/Storages/MutationCommands.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include #include @@ -133,13 +133,13 @@ void MutationCommands::writeText(WriteBuffer & out) const { WriteBufferFromOwnString commands_buf; formatAST(*ast(), commands_buf, /* hilite = */ false, /* one_line = */ true); - out << escape << commands_buf.str(); + writeEscapedString(commands_buf.str(), out); } void MutationCommands::readText(ReadBuffer & in) { String commands_str; - in >> escape >> commands_str; + readEscapedString(commands_str, in); ParserAlterCommandList p_alter_commands; auto commands_ast = parseQuery( diff --git a/tests/queries/0_stateless/01648_mutations_and_escaping.reference b/tests/queries/0_stateless/01648_mutations_and_escaping.reference new file mode 100644 index 00000000000..0d55bed3a35 --- /dev/null +++ b/tests/queries/0_stateless/01648_mutations_and_escaping.reference @@ -0,0 +1,2 @@ +foo +foo diff --git a/tests/queries/0_stateless/01648_mutations_and_escaping.sql b/tests/queries/0_stateless/01648_mutations_and_escaping.sql new file mode 100644 index 00000000000..689da842f16 --- /dev/null +++ b/tests/queries/0_stateless/01648_mutations_and_escaping.sql @@ -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;