diff --git a/dbms/cmake/version.cmake b/dbms/cmake/version.cmake index 7400daec4e4..78fccb746a9 100644 --- a/dbms/cmake/version.cmake +++ b/dbms/cmake/version.cmake @@ -1,6 +1,6 @@ # This strings autochanged from release_lib.sh: -set(VERSION_DESCRIBE v1.1.54249-testing) -set(VERSION_REVISION 54249) +set(VERSION_DESCRIBE v1.1.54250-testing) +set(VERSION_REVISION 54250) # end of autochange set (VERSION_MAJOR 1) diff --git a/dbms/src/Interpreters/InterpreterSetQuery.cpp b/dbms/src/Interpreters/InterpreterSetQuery.cpp index b98cbc2f763..b4cc2188ff8 100644 --- a/dbms/src/Interpreters/InterpreterSetQuery.cpp +++ b/dbms/src/Interpreters/InterpreterSetQuery.cpp @@ -1,7 +1,7 @@ #include #include #include - +#include namespace DB { @@ -25,7 +25,6 @@ BlockIO InterpreterSetQuery::execute() return {}; } - void InterpreterSetQuery::checkAccess(const ASTSetQuery & ast) { /** The `readonly` value is understood as follows: @@ -41,7 +40,7 @@ void InterpreterSetQuery::checkAccess(const ASTSetQuery & ast) { String value; /// Setting isn't checked if value wasn't changed. - if (!settings.tryGet(change.name, value) || change.value != value) + if (!settings.tryGet(change.name, value) || applyVisitor(FieldVisitorToString(), change.value) != value) { if (readonly == 1) throw Exception("Cannot execute SET query in readonly mode", ErrorCodes::READONLY); diff --git a/dbms/tests/queries/0_stateless/00474_readonly_settings.reference b/dbms/tests/queries/0_stateless/00474_readonly_settings.reference new file mode 100644 index 00000000000..672b858d944 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00474_readonly_settings.reference @@ -0,0 +1,14 @@ + "name": "value", + "value": 4611686018427387904 + "name": "value", + "value": "4611686018427387904" +value +value +Cannot execute SET query in readonly mode. + "name": "value", + "value": "9223372036854775808" + "name": "value", + "value": 9223372036854775808 +value +value +Cannot override setting diff --git a/dbms/tests/queries/0_stateless/00474_readonly_settings.sh b/dbms/tests/queries/0_stateless/00474_readonly_settings.sh new file mode 100755 index 00000000000..f90592a6875 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00474_readonly_settings.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +clickhouse-client --query="select toUInt64(pow(2, 62)) as value format JSON" --output_format_json_quote_64bit_integers=0 | grep value +clickhouse-client --query="select toUInt64(pow(2, 62)) as value format JSON" --output_format_json_quote_64bit_integers=1 | grep value + +clickhouse-client --user readonly --multiquery --query="set output_format_json_quote_64bit_integers=1 ; select toUInt64(pow(2, 63)) as value format JSON" 2>&1 | grep -o 'value\|Cannot execute SET query in readonly mode.' +clickhouse-client --user readonly --multiquery --query="set output_format_json_quote_64bit_integers=0 ; select toUInt64(pow(2, 63)) as value format JSON" 2>&1 | grep -o 'value\|Cannot execute SET query in readonly mode.' + +curl -sS 'http://localhost:8123/?query=SELECT+toUInt64(pow(2,+63))+as+value+format+JSON&output_format_json_quote_64bit_integers=1' | grep value +curl -sS 'http://localhost:8123/?query=SELECT+toUInt64(pow(2,+63))+as+value+format+JSON&output_format_json_quote_64bit_integers=0' | grep value + +curl -sS 'http://localhost:8123/?user=readonly&query=SELECT+toUInt64(pow(2,+63))+as+value+format+JSON&output_format_json_quote_64bit_integers=1' 2>&1 | grep -o 'value\|Cannot override setting' +curl -sS 'http://localhost:8123/?user=readonly&query=SELECT+toUInt64(pow(2,+63))+as+value+format+JSON&output_format_json_quote_64bit_integers=0' 2>&1 | grep -o 'value\|Cannot override setting'