From 4695511b58381f24df11c6f6c1119a83b4b5f549 Mon Sep 17 00:00:00 2001 From: Vitaliy Lyudvichenko Date: Thu, 26 Apr 2018 22:21:32 +0300 Subject: [PATCH 01/15] Fixed tests isolation. [#CLICKHOUSE-2] --- ...ptimize_on_nonleader_replica_zookeeper.sql | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/dbms/tests/queries/0_stateless/00620_optimize_on_nonleader_replica_zookeeper.sql b/dbms/tests/queries/0_stateless/00620_optimize_on_nonleader_replica_zookeeper.sql index f66ab550bd4..5e463ede704 100644 --- a/dbms/tests/queries/0_stateless/00620_optimize_on_nonleader_replica_zookeeper.sql +++ b/dbms/tests/queries/0_stateless/00620_optimize_on_nonleader_replica_zookeeper.sql @@ -1,20 +1,21 @@ -DROP TABLE IF EXISTS test.clear_column1; -DROP TABLE IF EXISTS test.clear_column2; -CREATE TABLE test.clear_column1 (p Int64, i Int64, v UInt64) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/test/clear_column', '1', v) PARTITION BY p ORDER BY i; -CREATE TABLE test.clear_column2 (p Int64, i Int64, v UInt64) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/test/clear_column', '2', v) PARTITION BY p ORDER BY i; +DROP TABLE IF EXISTS test.rename1; +DROP TABLE IF EXISTS test.rename2; +CREATE TABLE test.rename1 (p Int64, i Int64, v UInt64) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/test/tables/rename', '1', v) PARTITION BY p ORDER BY i; +CREATE TABLE test.rename2 (p Int64, i Int64, v UInt64) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/test/tables/rename', '2', v) PARTITION BY p ORDER BY i; -INSERT INTO test.clear_column1 VALUES (0, 1, 0); -INSERT INTO test.clear_column1 VALUES (0, 1, 1); +INSERT INTO test.rename1 VALUES (0, 1, 0); +INSERT INTO test.rename1 VALUES (0, 1, 1); -OPTIMIZE TABLE test.clear_column1; -OPTIMIZE TABLE test.clear_column2; -SELECT * FROM test.clear_column1; +OPTIMIZE TABLE test.rename1; +OPTIMIZE TABLE test.rename2; +SELECT * FROM test.rename1; -RENAME TABLE test.clear_column2 TO test.clear_column3; +RENAME TABLE test.rename2 TO test.rename3; -INSERT INTO test.clear_column1 VALUES (0, 1, 2); -OPTIMIZE TABLE test.clear_column3; -SELECT * FROM test.clear_column1; +INSERT INTO test.rename1 VALUES (0, 1, 2); +OPTIMIZE TABLE test.rename3; +SELECT * FROM test.rename1; -DROP TABLE IF EXISTS test.clear_column1; -DROP TABLE IF EXISTS test.clear_column2; \ No newline at end of file +DROP TABLE IF EXISTS test.rename1; +DROP TABLE IF EXISTS test.rename2; +DROP TABLE IF EXISTS test.rename3; \ No newline at end of file From af82c78a45b6a6f136e10bb2e7ca9b936d09a46c Mon Sep 17 00:00:00 2001 From: Vitaliy Lyudvichenko Date: Thu, 26 Apr 2018 22:43:51 +0300 Subject: [PATCH 02/15] Fix nodes leak in case of session expiration. [#CLICKHOUSE-2] --- dbms/src/Common/ZooKeeper/ZooKeeper.cpp | 16 ++++++++++++++++ dbms/src/Common/ZooKeeper/ZooKeeper.h | 7 ++----- dbms/src/Storages/StorageReplicatedMergeTree.cpp | 2 +- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/dbms/src/Common/ZooKeeper/ZooKeeper.cpp b/dbms/src/Common/ZooKeeper/ZooKeeper.cpp index bccfd16b61c..65ba0b9306b 100644 --- a/dbms/src/Common/ZooKeeper/ZooKeeper.cpp +++ b/dbms/src/Common/ZooKeeper/ZooKeeper.cpp @@ -739,6 +739,22 @@ std::future ZooKeeper::asyncMulti(const return future; } +int32_t ZooKeeper::tryMultiNoThrow(const Requests & requests, Responses & responses) +{ + try + { + return multiImpl(requests, responses); + } + catch (ZooKeeperImpl::Exception & e) + { + return e.code; + } + catch (...) + { + throw; + } +} + size_t KeeperMultiException::getFailedOpIndex(int32_t code, const Responses & responses) const { diff --git a/dbms/src/Common/ZooKeeper/ZooKeeper.h b/dbms/src/Common/ZooKeeper/ZooKeeper.h index e91bb20d877..340d0dc2b2c 100644 --- a/dbms/src/Common/ZooKeeper/ZooKeeper.h +++ b/dbms/src/Common/ZooKeeper/ZooKeeper.h @@ -148,11 +148,8 @@ public: /// Throws only if some operation has returned an "unexpected" error /// - an error that would cause the corresponding try- method to throw. int32_t tryMulti(const Requests & requests, Responses & responses); - /// Throws nothing, just alias of multiImpl - int32_t tryMultiNoThrow(const Requests & requests, Responses & responses) - { - return multiImpl(requests, responses); - } + /// Throws nothing (even session expired errors) + int32_t tryMultiNoThrow(const Requests & requests, Responses & responses); Int64 getClientID(); diff --git a/dbms/src/Storages/StorageReplicatedMergeTree.cpp b/dbms/src/Storages/StorageReplicatedMergeTree.cpp index 4dd113bcf0b..8b0935a0188 100644 --- a/dbms/src/Storages/StorageReplicatedMergeTree.cpp +++ b/dbms/src/Storages/StorageReplicatedMergeTree.cpp @@ -3635,7 +3635,7 @@ void StorageReplicatedMergeTree::clearOldPartsAndRemoveFromZK() } catch (...) { - LOG_ERROR(log, "There is a problem with deleting parts from ZooKeeper: " << getCurrentExceptionMessage(false)); + LOG_ERROR(log, "There is a problem with deleting parts from ZooKeeper: " << getCurrentExceptionMessage(true)); } /// Part names that were reliably deleted from ZooKeeper should be deleted from filesystem From 6d854ee6085c3336e5c9051bc7a3bdaf6aea1741 Mon Sep 17 00:00:00 2001 From: Vitaliy Lyudvichenko Date: Thu, 3 May 2018 16:34:19 +0300 Subject: [PATCH 03/15] Fixed incorrect failed OP detection in ZooKeeper. [#CLICKHOUSE-2] --- .gitignore | 1 + dbms/src/Common/ZooKeeper/ZooKeeper.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index ac01f15002f..f4e9bab7a7a 100644 --- a/.gitignore +++ b/.gitignore @@ -43,6 +43,7 @@ cmake-build-* # Python cache *.pyc __pycache__ +*.pytest_cache # ignore generated files *-metrika-yandex diff --git a/dbms/src/Common/ZooKeeper/ZooKeeper.cpp b/dbms/src/Common/ZooKeeper/ZooKeeper.cpp index 65ba0b9306b..c348a5fab01 100644 --- a/dbms/src/Common/ZooKeeper/ZooKeeper.cpp +++ b/dbms/src/Common/ZooKeeper/ZooKeeper.cpp @@ -775,7 +775,7 @@ size_t KeeperMultiException::getFailedOpIndex(int32_t code, const Responses & re KeeperMultiException::KeeperMultiException(int32_t code, const Requests & requests, const Responses & responses) : KeeperException("Transaction failed at op #" + std::to_string(getFailedOpIndex(code, responses)), code), - requests(requests), responses(responses) + requests(requests), responses(responses), failed_op_index(getFailedOpIndex(code, responses)) { } From 537c564d029b86ac09345fd7e2e58b1b12c1b4a5 Mon Sep 17 00:00:00 2001 From: Vitaliy Lyudvichenko Date: Fri, 18 May 2018 01:57:31 +0300 Subject: [PATCH 04/15] Don't make extra checksums checks when commit a part. [#CLICKHOUSE-2] This patch is very crucial in case of many replicas. --- dbms/src/Storages/StorageReplicatedMergeTree.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dbms/src/Storages/StorageReplicatedMergeTree.cpp b/dbms/src/Storages/StorageReplicatedMergeTree.cpp index 8b0935a0188..bdeff970421 100644 --- a/dbms/src/Storages/StorageReplicatedMergeTree.cpp +++ b/dbms/src/Storages/StorageReplicatedMergeTree.cpp @@ -920,6 +920,14 @@ void StorageReplicatedMergeTree::checkPartChecksumsAndAddCommitOps(const zkutil: if (replica == replica_name) has_been_alredy_added = true; + + /// If we verify checksums in "sequential manner" (i.e. recheck absence of checksums on other replicas when commit) + /// then it is enough to verify checksums on at least one replica since checksums on other replicas must be the same. + if (absent_replicas_paths) + { + absent_replicas_paths->clear(); + break; + } } if (!has_been_alredy_added) From 84532a2a30e5bb897e9fc17b870787860322ccc3 Mon Sep 17 00:00:00 2001 From: robot-metrika-test Date: Fri, 18 May 2018 02:16:00 +0300 Subject: [PATCH 05/15] Auto version update to [54383] --- dbms/cmake/version.cmake | 6 +++--- debian/changelog | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dbms/cmake/version.cmake b/dbms/cmake/version.cmake index edaafe61522..b20fd425726 100644 --- a/dbms/cmake/version.cmake +++ b/dbms/cmake/version.cmake @@ -1,7 +1,7 @@ # This strings autochanged from release_lib.sh: -set(VERSION_DESCRIBE v1.1.54380-testing) -set(VERSION_REVISION 54380) -set(VERSION_GITHASH fb4a44a9132ee6c84aa3b0adff9c8d09a8473a15) +set(VERSION_DESCRIBE v1.1.54383-testing) +set(VERSION_REVISION 54383) +set(VERSION_GITHASH 537c564d029b86ac09345fd7e2e58b1b12c1b4a5) # end of autochange set (VERSION_MAJOR 1) diff --git a/debian/changelog b/debian/changelog index 2c5d782f65a..b8acd348b1f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,5 @@ -clickhouse (1.1.54380) unstable; urgency=low +clickhouse (1.1.54383) unstable; urgency=low * Modified source code - -- Fri, 20 Apr 2018 22:47:20 +0300 + -- Fri, 18 May 2018 02:16:00 +0300 From ce12f0b37cc5ab3100fa41476521cd25e53be8cc Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Thu, 31 May 2018 22:26:21 +0300 Subject: [PATCH 06/15] Fixed error in ZK library [#CLICKHOUSE-3753] --- dbms/src/Common/ZooKeeper/ZooKeeperImpl.cpp | 16 +++++++++------- dbms/src/Common/ZooKeeper/ZooKeeperImpl.h | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/dbms/src/Common/ZooKeeper/ZooKeeperImpl.cpp b/dbms/src/Common/ZooKeeper/ZooKeeperImpl.cpp index bca15656eda..0222dd1aed5 100644 --- a/dbms/src/Common/ZooKeeper/ZooKeeperImpl.cpp +++ b/dbms/src/Common/ZooKeeper/ZooKeeperImpl.cpp @@ -996,13 +996,14 @@ void ZooKeeper::receiveEvent() void ZooKeeper::finalize(bool error_send, bool error_receive) { - std::unique_lock lock(finalize_mutex, std::defer_lock); - if (!lock.try_lock()) - return; + { + /// Will wait for pushRequest method. + std::unique_lock lock(expired_mutex); - if (expired) - return; - expired = true; + if (expired) + return; + expired = true; + } active_session_metric_increment.destroy(); @@ -1020,6 +1021,7 @@ void ZooKeeper::finalize(bool error_send, bool error_receive) /// This happens for example, when "Cannot push request to queue within operation timeout". tryLogCurrentException(__PRETTY_FUNCTION__); } + send_thread.join(); } @@ -1348,7 +1350,7 @@ void ZooKeeper::pushRequest(RequestInfo && info) /// to avoid forgotten operations in the queue when session is expired. /// Invariant: when expired, no new operations will be pushed to the queue in 'pushRequest' /// and the queue will be drained in 'finalize'. - std::lock_guard lock(finalize_mutex); + std::lock_guard lock(expired_mutex); if (expired) throw Exception("Session expired", ZSESSIONEXPIRED); diff --git a/dbms/src/Common/ZooKeeper/ZooKeeperImpl.h b/dbms/src/Common/ZooKeeper/ZooKeeperImpl.h index ad5facf7f6d..7b17b581403 100644 --- a/dbms/src/Common/ZooKeeper/ZooKeeperImpl.h +++ b/dbms/src/Common/ZooKeeper/ZooKeeperImpl.h @@ -573,7 +573,7 @@ private: std::atomic xid {1}; std::atomic expired {false}; - std::mutex finalize_mutex; + std::mutex expired_mutex; using clock = std::chrono::steady_clock; From 81a505ad64f428a00cfcdfb7e317e0d0fd913ac2 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Thu, 31 May 2018 22:28:30 +0300 Subject: [PATCH 07/15] Better name [#CLICKHOUSE-3753] --- dbms/src/Common/ZooKeeper/ZooKeeperImpl.cpp | 5 ++--- dbms/src/Common/ZooKeeper/ZooKeeperImpl.h | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/dbms/src/Common/ZooKeeper/ZooKeeperImpl.cpp b/dbms/src/Common/ZooKeeper/ZooKeeperImpl.cpp index 0222dd1aed5..6d543b4af6b 100644 --- a/dbms/src/Common/ZooKeeper/ZooKeeperImpl.cpp +++ b/dbms/src/Common/ZooKeeper/ZooKeeperImpl.cpp @@ -997,8 +997,7 @@ void ZooKeeper::receiveEvent() void ZooKeeper::finalize(bool error_send, bool error_receive) { { - /// Will wait for pushRequest method. - std::unique_lock lock(expired_mutex); + std::unique_lock lock(push_request_mutex); if (expired) return; @@ -1350,7 +1349,7 @@ void ZooKeeper::pushRequest(RequestInfo && info) /// to avoid forgotten operations in the queue when session is expired. /// Invariant: when expired, no new operations will be pushed to the queue in 'pushRequest' /// and the queue will be drained in 'finalize'. - std::lock_guard lock(expired_mutex); + std::lock_guard lock(push_request_mutex); if (expired) throw Exception("Session expired", ZSESSIONEXPIRED); diff --git a/dbms/src/Common/ZooKeeper/ZooKeeperImpl.h b/dbms/src/Common/ZooKeeper/ZooKeeperImpl.h index 7b17b581403..170458e930f 100644 --- a/dbms/src/Common/ZooKeeper/ZooKeeperImpl.h +++ b/dbms/src/Common/ZooKeeper/ZooKeeperImpl.h @@ -573,7 +573,7 @@ private: std::atomic xid {1}; std::atomic expired {false}; - std::mutex expired_mutex; + std::mutex push_request_mutex; using clock = std::chrono::steady_clock; From ba48e31507199b79a2b67c9a8e45d68605c2915b Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Thu, 31 May 2018 22:30:08 +0300 Subject: [PATCH 08/15] Miscellaneous [#CLICKHOUSE-3753] --- dbms/src/Common/ZooKeeper/ZooKeeperImpl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dbms/src/Common/ZooKeeper/ZooKeeperImpl.cpp b/dbms/src/Common/ZooKeeper/ZooKeeperImpl.cpp index 6d543b4af6b..0d8bc8de725 100644 --- a/dbms/src/Common/ZooKeeper/ZooKeeperImpl.cpp +++ b/dbms/src/Common/ZooKeeper/ZooKeeperImpl.cpp @@ -997,7 +997,7 @@ void ZooKeeper::receiveEvent() void ZooKeeper::finalize(bool error_send, bool error_receive) { { - std::unique_lock lock(push_request_mutex); + std::lock_guard lock(push_request_mutex); if (expired) return; From 6a57f55f0c1c7c8fee2e3e2673350a9f9f8daf26 Mon Sep 17 00:00:00 2001 From: robot-metrika-test Date: Fri, 1 Jun 2018 15:43:56 +0300 Subject: [PATCH 09/15] Auto version update to [54385] --- dbms/cmake/version.cmake | 6 +++--- debian/changelog | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dbms/cmake/version.cmake b/dbms/cmake/version.cmake index b20fd425726..8e821596b81 100644 --- a/dbms/cmake/version.cmake +++ b/dbms/cmake/version.cmake @@ -1,7 +1,7 @@ # This strings autochanged from release_lib.sh: -set(VERSION_DESCRIBE v1.1.54383-testing) -set(VERSION_REVISION 54383) -set(VERSION_GITHASH 537c564d029b86ac09345fd7e2e58b1b12c1b4a5) +set(VERSION_DESCRIBE v1.1.54385-testing) +set(VERSION_REVISION 54385) +set(VERSION_GITHASH ba48e31507199b79a2b67c9a8e45d68605c2915b) # end of autochange set (VERSION_MAJOR 1) diff --git a/debian/changelog b/debian/changelog index b8acd348b1f..b09cba656d9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,5 @@ -clickhouse (1.1.54383) unstable; urgency=low +clickhouse (1.1.54385) unstable; urgency=low * Modified source code - -- Fri, 18 May 2018 02:16:00 +0300 + -- Fri, 01 Jun 2018 15:43:56 +0300 From c89c62f9291c1ac572711c2a73340f7c076e39d2 Mon Sep 17 00:00:00 2001 From: Olga Khvostikova Date: Sat, 9 Jun 2018 06:56:10 +0000 Subject: [PATCH 10/15] Draft --- dbms/src/Server/HTTPHandler.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/dbms/src/Server/HTTPHandler.cpp b/dbms/src/Server/HTTPHandler.cpp index fba60c5c12b..7fa01e5e4e8 100644 --- a/dbms/src/Server/HTTPHandler.cpp +++ b/dbms/src/Server/HTTPHandler.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -421,13 +422,32 @@ void HTTPHandler::processQuery( std::unique_ptr in; + std::cout << "params before parsing:\n"; + for (const auto & it : params) + { + std::cout << it.first << " " << it.second << "\n"; + } + /// Support for "external data for query processing". if (startsWith(request.getContentType().data(), "multipart/form-data")) { - in = std::move(in_param); ExternalTablesHandler handler(context, params); params.load(request, istr, handler); + // Params are form params of POST + std::cout << "params after parsing:\n"; + std::string full_query = ""; + for (const auto & it : params) + { + std::cout << it.first << " " << it.second << "\n"; + if (it.first == "query") + { + full_query += it.second; + } + } + std::cout << "full query:\n" << full_query; + in = std::make_unique(full_query); + /// Erase unneeded parameters to avoid confusing them later with context settings or query /// parameters. From 7b8c31eb505a51e8a6d2defae4c4229566fd310e Mon Sep 17 00:00:00 2001 From: Olga Khvostikova Date: Sat, 9 Jun 2018 06:59:12 +0000 Subject: [PATCH 11/15] Fix --- dbms/src/Server/HTTPHandler.cpp | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/dbms/src/Server/HTTPHandler.cpp b/dbms/src/Server/HTTPHandler.cpp index 7fa01e5e4e8..0b41950a49f 100644 --- a/dbms/src/Server/HTTPHandler.cpp +++ b/dbms/src/Server/HTTPHandler.cpp @@ -1,6 +1,5 @@ #include #include -#include #include #include @@ -422,30 +421,22 @@ void HTTPHandler::processQuery( std::unique_ptr in; - std::cout << "params before parsing:\n"; - for (const auto & it : params) - { - std::cout << it.first << " " << it.second << "\n"; - } - /// Support for "external data for query processing". if (startsWith(request.getContentType().data(), "multipart/form-data")) { ExternalTablesHandler handler(context, params); + /// Params are of both form params POST and uri (GET params) params.load(request, istr, handler); - // Params are form params of POST - std::cout << "params after parsing:\n"; + std::string full_query = ""; for (const auto & it : params) { - std::cout << it.first << " " << it.second << "\n"; if (it.first == "query") { full_query += it.second; } } - std::cout << "full query:\n" << full_query; in = std::make_unique(full_query); From 15cc44d894d8772f82e4b8dcbb447499dee30441 Mon Sep 17 00:00:00 2001 From: Olga Khvostikova Date: Sat, 9 Jun 2018 07:18:59 +0000 Subject: [PATCH 12/15] Fix possible memeory problem --- dbms/src/Server/HTTPHandler.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dbms/src/Server/HTTPHandler.cpp b/dbms/src/Server/HTTPHandler.cpp index 0b41950a49f..0284efebfc3 100644 --- a/dbms/src/Server/HTTPHandler.cpp +++ b/dbms/src/Server/HTTPHandler.cpp @@ -421,6 +421,9 @@ void HTTPHandler::processQuery( std::unique_ptr in; + // Used in case of POST request with form-data, but it not to be expectd to be deleted after that scope + std::string full_query = ""; + /// Support for "external data for query processing". if (startsWith(request.getContentType().data(), "multipart/form-data")) { @@ -429,7 +432,6 @@ void HTTPHandler::processQuery( /// Params are of both form params POST and uri (GET params) params.load(request, istr, handler); - std::string full_query = ""; for (const auto & it : params) { if (it.first == "query") From b159bf160555406d47ef2f7bd629c7d849e171ca Mon Sep 17 00:00:00 2001 From: alexey-milovidov Date: Sat, 9 Jun 2018 15:24:18 +0300 Subject: [PATCH 13/15] Update HTTPHandler.cpp --- dbms/src/Server/HTTPHandler.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dbms/src/Server/HTTPHandler.cpp b/dbms/src/Server/HTTPHandler.cpp index 0284efebfc3..f2a114c4702 100644 --- a/dbms/src/Server/HTTPHandler.cpp +++ b/dbms/src/Server/HTTPHandler.cpp @@ -422,7 +422,7 @@ void HTTPHandler::processQuery( std::unique_ptr in; // Used in case of POST request with form-data, but it not to be expectd to be deleted after that scope - std::string full_query = ""; + std::string full_query; /// Support for "external data for query processing". if (startsWith(request.getContentType().data(), "multipart/form-data")) @@ -441,7 +441,6 @@ void HTTPHandler::processQuery( } in = std::make_unique(full_query); - /// Erase unneeded parameters to avoid confusing them later with context settings or query /// parameters. for (const auto & it : handler.names) From e1cd4d22db2ef85667a9a5204bd940178002ca73 Mon Sep 17 00:00:00 2001 From: stavrolia Date: Mon, 25 Jun 2018 20:46:52 +0300 Subject: [PATCH 14/15] Add test (#2490) --- .../queries/0_stateless/00625_query_in_form_data.reference | 1 + dbms/tests/queries/0_stateless/00625_query_in_form_data.sh | 7 +++++++ 2 files changed, 8 insertions(+) create mode 100755 dbms/tests/queries/0_stateless/00625_query_in_form_data.reference create mode 100755 dbms/tests/queries/0_stateless/00625_query_in_form_data.sh diff --git a/dbms/tests/queries/0_stateless/00625_query_in_form_data.reference b/dbms/tests/queries/0_stateless/00625_query_in_form_data.reference new file mode 100755 index 00000000000..d00491fd7e5 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00625_query_in_form_data.reference @@ -0,0 +1 @@ +1 diff --git a/dbms/tests/queries/0_stateless/00625_query_in_form_data.sh b/dbms/tests/queries/0_stateless/00625_query_in_form_data.sh new file mode 100755 index 00000000000..bc387394cd0 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00625_query_in_form_data.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +set -e + +CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +. $CURDIR/../shell_config.sh + +${CLICKHOUSE_CURL} ${CLICKHOUSE_URL}?query="select" -X POST -F "query= 1;" 2>/dev/null From 5966b78d411013a76861f35474ea98dfa4503993 Mon Sep 17 00:00:00 2001 From: stavrolia Date: Wed, 27 Jun 2018 21:53:11 +0300 Subject: [PATCH 15/15] add case with external file --- .../queries/0_stateless/00625_query_in_form_data.reference | 2 ++ dbms/tests/queries/0_stateless/00625_query_in_form_data.sh | 3 +++ 2 files changed, 5 insertions(+) diff --git a/dbms/tests/queries/0_stateless/00625_query_in_form_data.reference b/dbms/tests/queries/0_stateless/00625_query_in_form_data.reference index d00491fd7e5..65ab8440601 100755 --- a/dbms/tests/queries/0_stateless/00625_query_in_form_data.reference +++ b/dbms/tests/queries/0_stateless/00625_query_in_form_data.reference @@ -1 +1,3 @@ 1 +1 Hello +2 World diff --git a/dbms/tests/queries/0_stateless/00625_query_in_form_data.sh b/dbms/tests/queries/0_stateless/00625_query_in_form_data.sh index bc387394cd0..901da66c05a 100755 --- a/dbms/tests/queries/0_stateless/00625_query_in_form_data.sh +++ b/dbms/tests/queries/0_stateless/00625_query_in_form_data.sh @@ -5,3 +5,6 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh ${CLICKHOUSE_CURL} ${CLICKHOUSE_URL}?query="select" -X POST -F "query= 1;" 2>/dev/null + + +echo -ne '1,Hello\n2,World\n' | ${CLICKHOUSE_CURL} -sSF 'file=@-' "${CLICKHOUSE_URL}?file_format=CSV&file_types=UInt8,String&query=SELE" -X POST -F "query=CT * FROM file" 2>/dev/null