diff --git a/src/Storages/MutationCommands.cpp b/src/Storages/MutationCommands.cpp index daa7665403fde9587bb1dcb94b89b6712b318086..1873fa5652adeea80ab2f52029e96fd61fde7894 100644 --- a/src/Storages/MutationCommands.cpp +++ b/src/Storages/MutationCommands.cpp @@ -1,5 +1,6 @@ #include -#include +#include +#include #include #include #include @@ -133,13 +134,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 0000000000000000000000000000000000000000..0d55bed3a35cf47eefff69beadce1213b1f64c39 --- /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 0000000000000000000000000000000000000000..689da842f1630dbffd3c882021888d163b72dc52 --- /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;