ClickHouse/dbms/src/Interpreters/tests/in_join_subqueries_preprocessor.cpp

1277 lines
43 KiB
C++
Raw Normal View History

#include <ext/shared_ptr_helper.hpp>
2015-09-18 13:36:10 +00:00
#include <DB/Parsers/ASTSelectQuery.h>
#include <DB/Parsers/ParserSelectQuery.h>
#include <DB/Parsers/parseQuery.h>
#include <DB/Parsers/queryToString.h>
#include <DB/Interpreters/InJoinSubqueriesPreprocessor.h>
#include <DB/Interpreters/Context.h>
#include <DB/Interpreters/Settings.h>
#include <DB/Storages/IStorage.h>
Squashed commit of the following: commit f9b478181cd49224154cc350fb57df7121842f1c Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Sat Mar 19 04:06:36 2016 +0300 Database engines: development [#METR-19997]. commit f7a10a67761ccfd05f3dac32d6444920cd8d4d60 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Sat Mar 19 03:44:37 2016 +0300 Database engines: development [#METR-19997]. commit bd98a8558e98bad2bed278e5762c4e0fc66e6f38 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Sat Mar 19 00:33:59 2016 +0300 Database engines: development [#METR-19997]. commit 19712fd884c22a4e2c2b67474086dea8f44e7c7b Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Sat Mar 19 00:03:11 2016 +0300 Database engines: development [#METR-19997]. commit 50274d6df7e91fcc34aab8a8c72347daa2c6512f Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Fri Mar 18 23:24:57 2016 +0300 Database engines: development [#METR-19997]. commit 4a0b99b19b34e90ef8b7be2d199f6232e36ef3f7 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Fri Mar 18 22:50:36 2016 +0300 Database engines: development [#METR-19997]. commit 44ff3ebba7a3e460a27a89f31ddf199dbea1d182 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Fri Mar 18 15:09:17 2016 +0300 Database engines: development [#METR-19997]. commit 137c31f3004cfd282473b6acb01cbe1b4ca2aadd Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Fri Mar 18 03:26:34 2016 +0300 Database engines: development [#METR-19997]. commit aa4c0496d4afe4a691164254be2bd5600542b38a Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Fri Mar 18 03:22:59 2016 +0300 Database engines: development [#METR-19997]. commit 5a94d1f0607450a2dac28a4d7df8b1393a864c23 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Fri Mar 18 01:02:40 2016 +0300 Database engines: development [#METR-19997]. commit 50fd5b52ea1141955a5dfba0dcb191f3289ac25b Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Thu Mar 17 23:23:40 2016 +0300 Database engines: development [#METR-19997]. commit a333d91b058e4f56dd83a6d2878c3c2bd8efc002 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Thu Mar 17 20:29:07 2016 +0300 Database engines: development [#METR-19997]. commit f81d366e7ac8348436f2698d040f8e341743a024 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Thu Mar 17 01:30:23 2016 +0300 Database engines: development [#METR-19997]. commit d0696860c9060827896214c08d147c759ea79376 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Wed Mar 16 21:55:31 2016 +0300 Database engines: development [#METR-19997]. commit 46a168c2ada140a0e95cd8d4b9d8ba9bac855d11 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Wed Mar 16 08:00:58 2016 +0300 Database engines: development [#METR-19997]. commit 20a2bad161454225fc1b5f9b919b842fbebc3231 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Wed Mar 16 06:51:10 2016 +0300 Database engines: development [#METR-19997]. commit ca0a77fcc2a8d0b276eb3743c53551ad3fe16314 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Wed Mar 16 06:02:20 2016 +0300 Reverted erroneous modification [#METR-19997]. commit 1370bdcc4594182f6ef2b146f9afabfe1c295080 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Wed Mar 16 00:41:34 2016 +0300 Database engines: development [#METR-19997]. commit 16e72c67041cae6471509d3f0f3d4a9aa7b7dc0f Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Tue Mar 15 00:41:48 2016 +0300 Database engines: development [#METR-19997].
2016-03-19 01:18:49 +00:00
#include <DB/Databases/IDatabase.h>
#include <DB/Databases/DatabaseOrdinary.h>
2015-09-18 13:36:10 +00:00
#include <iostream>
#include <vector>
#include <utility>
#include <string>
/// Упрощённый вариант класса StorageDistributed.
class StorageDistributedFake : private ext::shared_ptr_helper<StorageDistributedFake>, public DB::IStorage
2015-09-18 13:36:10 +00:00
{
friend class ext::shared_ptr_helper<StorageDistributedFake>;
2015-09-18 13:36:10 +00:00
public:
static DB::StoragePtr create(const std::string & remote_database_, const std::string & remote_table_, size_t shard_count_)
{
return make_shared(remote_database_, remote_table_, shard_count_);
2015-09-18 13:36:10 +00:00
}
std::string getName() const override { return "DistributedFake"; }
bool isRemote() const override { return true; }
size_t getShardCount() const { return shard_count; }
std::string getRemoteDatabaseName() const { return remote_database; }
std::string getRemoteTableName() const { return remote_table; }
std::string getTableName() const override { return ""; }
const DB::NamesAndTypesList & getColumnsListImpl() const override { return names_and_types; }
private:
StorageDistributedFake(const std::string & remote_database_, const std::string & remote_table_, size_t shard_count_)
: remote_database(remote_database_), remote_table(remote_table_), shard_count(shard_count_)
{
}
private:
const std::string remote_database;
const std::string remote_table;
size_t shard_count;
DB::NamesAndTypesList names_and_types;
};
struct TestEntry
{
2016-02-02 11:49:57 +00:00
unsigned int line_num;
2015-09-18 13:36:10 +00:00
std::string input;
std::string expected_output;
size_t shard_count;
DB::DistributedProductMode mode;
bool expected_success;
};
using TestEntries = std::vector<TestEntry>;
using TestResult = std::pair<bool, std::string>;
TestResult check(const TestEntry & entry);
bool parse(DB::ASTPtr & ast, const std::string & query);
bool equals(const DB::ASTPtr & lhs, const DB::ASTPtr & rhs);
void reorder(DB::IAST * ast);
2016-11-13 02:19:38 +00:00
TestEntries entries =
2015-09-18 13:36:10 +00:00
{
2016-11-13 02:19:38 +00:00
/// Тривиальный запрос.
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT 1",
"SELECT 1",
0,
DB::DistributedProductMode::ALLOW,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT 1",
"SELECT 1",
1,
DB::DistributedProductMode::ALLOW,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT 1",
"SELECT 1",
2,
DB::DistributedProductMode::ALLOW,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT 1",
"SELECT 1",
0,
DB::DistributedProductMode::DENY,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT 1",
"SELECT 1",
1,
DB::DistributedProductMode::DENY,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT 1",
"SELECT 1",
2,
DB::DistributedProductMode::DENY,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT 1",
"SELECT 1",
0,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT 1",
"SELECT 1",
1,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT 1",
"SELECT 1",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT 1",
"SELECT 1",
0,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT 1",
"SELECT 1",
1,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT 1",
"SELECT 1",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
/// Секция IN / глубина 1
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM test.visits_all)",
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM test.visits_all)",
1,
DB::DistributedProductMode::ALLOW,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM test.visits_all)",
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM test.visits_all)",
2,
DB::DistributedProductMode::ALLOW,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM test.visits_all)",
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM test.visits_all)",
1,
DB::DistributedProductMode::DENY,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM test.visits_all)",
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM test.visits_all)",
2,
DB::DistributedProductMode::DENY,
false
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM test.visits_all)",
"SELECT count() FROM test.visits_all WHERE UserID GLOBAL IN (SELECT UserID FROM test.visits_all)",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM remote_db.remote_visits)",
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM remote_db.remote_visits)",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM test.visits_all)",
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM remote_db.remote_visits)",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM remote_db.remote_visits)",
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM remote_db.remote_visits)",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
/// Секция NOT IN / глубина 1
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID NOT IN (SELECT UserID FROM test.visits_all)",
"SELECT count() FROM test.visits_all WHERE UserID NOT IN (SELECT UserID FROM test.visits_all)",
2,
DB::DistributedProductMode::ALLOW,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID NOT IN (SELECT UserID FROM test.visits_all)",
"SELECT count() FROM test.visits_all WHERE UserID NOT IN (SELECT UserID FROM test.visits_all)",
2,
DB::DistributedProductMode::DENY,
false
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID NOT IN (SELECT UserID FROM test.visits_all)",
"SELECT count() FROM test.visits_all WHERE UserID GLOBAL NOT IN (SELECT UserID FROM test.visits_all)",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID NOT IN (SELECT UserID FROM remote_db.remote_visits)",
"SELECT count() FROM test.visits_all WHERE UserID NOT IN (SELECT UserID FROM remote_db.remote_visits)",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID NOT IN (SELECT UserID FROM test.visits_all)",
"SELECT count() FROM test.visits_all WHERE UserID NOT IN (SELECT UserID FROM remote_db.remote_visits)",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID NOT IN (SELECT UserID FROM remote_db.remote_visits)",
"SELECT count() FROM test.visits_all WHERE UserID NOT IN (SELECT UserID FROM remote_db.remote_visits)",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
/// Секция GLOBAL IN / глубина 1
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID GLOBAL IN (SELECT UserID FROM test.visits_all)",
"SELECT count() FROM test.visits_all WHERE UserID GLOBAL IN (SELECT UserID FROM test.visits_all)",
2,
DB::DistributedProductMode::ALLOW,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID GLOBAL IN (SELECT UserID FROM test.visits_all)",
"SELECT count() FROM test.visits_all WHERE UserID GLOBAL IN (SELECT UserID FROM test.visits_all)",
2,
DB::DistributedProductMode::DENY,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID GLOBAL IN (SELECT UserID FROM test.visits_all)",
"SELECT count() FROM test.visits_all WHERE UserID GLOBAL IN (SELECT UserID FROM test.visits_all)",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID GLOBAL IN (SELECT UserID FROM test.visits_all)",
"SELECT count() FROM test.visits_all WHERE UserID GLOBAL IN (SELECT UserID FROM test.visits_all)",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
/// Секция GLOBAL NOT IN / глубина 1
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID GLOBAL NOT IN (SELECT UserID FROM test.visits_all)",
"SELECT count() FROM test.visits_all WHERE UserID GLOBAL NOT IN (SELECT UserID FROM test.visits_all)",
2,
DB::DistributedProductMode::ALLOW,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID GLOBAL NOT IN (SELECT UserID FROM test.visits_all)",
"SELECT count() FROM test.visits_all WHERE UserID GLOBAL NOT IN (SELECT UserID FROM test.visits_all)",
2,
DB::DistributedProductMode::DENY,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID GLOBAL NOT IN (SELECT UserID FROM test.visits_all)",
"SELECT count() FROM test.visits_all WHERE UserID GLOBAL NOT IN (SELECT UserID FROM test.visits_all)",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID GLOBAL NOT IN (SELECT UserID FROM test.visits_all)",
"SELECT count() FROM test.visits_all WHERE UserID GLOBAL NOT IN (SELECT UserID FROM test.visits_all)",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
/// Секция JOIN / глубина 1
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM test.visits_all) USING UserID",
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM test.visits_all) USING UserID",
2,
DB::DistributedProductMode::ALLOW,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM test.visits_all) USING UserID",
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM test.visits_all) USING UserID",
2,
DB::DistributedProductMode::DENY,
false
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM test.visits_all) USING UserID",
"SELECT UserID FROM test.visits_all GLOBAL ALL INNER JOIN (SELECT UserID FROM test.visits_all) USING UserID",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM remote_db.remote_visits) USING UserID",
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM remote_db.remote_visits) USING UserID",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM test.visits_all) USING UserID",
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM remote_db.remote_visits) USING UserID",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM remote_db.remote_visits) USING UserID",
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM remote_db.remote_visits) USING UserID",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
/// Секция GLOBAL JOIN / глубина 1
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all GLOBAL ALL INNER JOIN (SELECT UserID FROM test.visits_all) USING UserID",
"SELECT UserID FROM test.visits_all GLOBAL ALL INNER JOIN (SELECT UserID FROM test.visits_all) USING UserID",
2,
DB::DistributedProductMode::ALLOW,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all GLOBAL ALL INNER JOIN (SELECT UserID FROM test.visits_all) USING UserID",
"SELECT UserID FROM test.visits_all GLOBAL ALL INNER JOIN (SELECT UserID FROM test.visits_all) USING UserID",
2,
DB::DistributedProductMode::DENY,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all GLOBAL ALL INNER JOIN (SELECT UserID FROM test.visits_all) USING UserID",
"SELECT UserID FROM test.visits_all GLOBAL ALL INNER JOIN (SELECT UserID FROM test.visits_all) USING UserID",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all GLOBAL ALL INNER JOIN (SELECT UserID FROM test.visits_all) USING UserID",
"SELECT UserID FROM test.visits_all GLOBAL ALL INNER JOIN (SELECT UserID FROM test.visits_all) USING UserID",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
/// Секция JOIN / глубина 1 / 2 подзапроса.
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM (SELECT UserID FROM test.visits_all WHERE RegionID = 1) ALL INNER JOIN (SELECT UserID FROM test.visits_all WHERE RegionID = 2) USING UserID",
"SELECT UserID FROM (SELECT UserID FROM test.visits_all WHERE RegionID = 1) ALL INNER JOIN (SELECT UserID FROM test.visits_all WHERE RegionID = 2) USING UserID",
2,
DB::DistributedProductMode::ALLOW,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM (SELECT UserID FROM test.visits_all WHERE RegionID = 1) ALL INNER JOIN (SELECT UserID FROM remote_db.remote_visits WHERE RegionID = 2) USING UserID",
"SELECT UserID FROM (SELECT UserID FROM test.visits_all WHERE RegionID = 1) ALL INNER JOIN (SELECT UserID FROM remote_db.remote_visits WHERE RegionID = 2) USING UserID",
2,
DB::DistributedProductMode::DENY,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM (SELECT UserID FROM test.visits_all WHERE RegionID = 1) ALL INNER JOIN (SELECT UserID FROM test.visits_all WHERE RegionID = 2) USING UserID",
"SELECT UserID FROM (SELECT UserID FROM test.visits_all WHERE RegionID = 1) ALL INNER JOIN (SELECT UserID FROM test.visits_all WHERE RegionID = 2) USING UserID",
2,
DB::DistributedProductMode::DENY,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM (SELECT UserID FROM test.visits_all WHERE RegionID = 1) ALL INNER JOIN (SELECT UserID FROM test.visits_all WHERE RegionID = 2) USING UserID",
"SELECT UserID FROM (SELECT UserID FROM test.visits_all WHERE RegionID = 1) ALL INNER JOIN (SELECT UserID FROM test.visits_all WHERE RegionID = 2) USING UserID",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM (SELECT UserID FROM test.visits_all WHERE RegionID = 1) ALL INNER JOIN (SELECT UserID FROM test.visits_all WHERE RegionID = 2) USING UserID",
"SELECT UserID FROM (SELECT UserID FROM test.visits_all WHERE RegionID = 1) ALL INNER JOIN (SELECT UserID FROM test.visits_all WHERE RegionID = 2) USING UserID",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
/// Секция IN / глубина 1 / таблица на уровне 2
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM (SELECT UserID FROM test.visits_all))",
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM (SELECT UserID FROM test.visits_all))",
2,
DB::DistributedProductMode::ALLOW,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM (SELECT UserID FROM test.visits_all))",
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM (SELECT UserID FROM test.visits_all))",
2,
DB::DistributedProductMode::DENY,
false
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM (SELECT UserID FROM test.visits_all))",
"SELECT count() FROM test.visits_all WHERE UserID GLOBAL IN (SELECT UserID FROM (SELECT UserID FROM test.visits_all))",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM (SELECT UserID FROM remote_db.remote_visits))",
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM (SELECT UserID FROM remote_db.remote_visits))",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM (SELECT UserID FROM test.visits_all))",
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM (SELECT UserID FROM remote_db.remote_visits))",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM (SELECT UserID FROM remote_db.remote_visits))",
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM (SELECT UserID FROM remote_db.remote_visits))",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
/// Секция GLOBAL IN / глубина 1 / таблица на уровне 2
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all WHERE UserID GLOBAL IN (SELECT UserID FROM (SELECT UserID FROM test.visits_all))",
"SELECT UserID FROM test.visits_all WHERE UserID GLOBAL IN (SELECT UserID FROM (SELECT UserID FROM test.visits_all))",
2,
DB::DistributedProductMode::ALLOW,
true
},
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all WHERE UserID GLOBAL IN (SELECT UserID FROM (SELECT UserID FROM test.visits_all))",
"SELECT UserID FROM test.visits_all WHERE UserID GLOBAL IN (SELECT UserID FROM (SELECT UserID FROM test.visits_all))",
2,
DB::DistributedProductMode::DENY,
true
},
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all WHERE UserID GLOBAL IN (SELECT UserID FROM (SELECT UserID FROM test.visits_all))",
"SELECT UserID FROM test.visits_all WHERE UserID GLOBAL IN (SELECT UserID FROM (SELECT UserID FROM test.visits_all))",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all WHERE UserID GLOBAL IN (SELECT UserID FROM (SELECT UserID FROM test.visits_all))",
"SELECT UserID FROM test.visits_all WHERE UserID GLOBAL IN (SELECT UserID FROM (SELECT UserID FROM test.visits_all))",
2,
DB::DistributedProductMode::LOCAL,
true
},
2016-11-13 02:19:38 +00:00
/// Секция IN на уровне 1, секция GLOBAL IN на уровне 2.
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all WHERE UserID IN (SELECT UserID FROM remote_db.remote_visits WHERE UserID GLOBAL IN (SELECT UserID FROM (SELECT UserID FROM test.visits_all)))",
"SELECT UserID FROM test.visits_all WHERE UserID IN (SELECT UserID FROM remote_db.remote_visits WHERE UserID GLOBAL IN (SELECT UserID FROM (SELECT UserID FROM test.visits_all)))",
2,
DB::DistributedProductMode::ALLOW,
true
},
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all WHERE UserID IN (SELECT UserID FROM remote_db.remote_visits WHERE UserID GLOBAL IN (SELECT UserID FROM (SELECT UserID FROM test.visits_all)))",
"SELECT UserID FROM test.visits_all WHERE UserID IN (SELECT UserID FROM remote_db.remote_visits WHERE UserID GLOBAL IN (SELECT UserID FROM (SELECT UserID FROM test.visits_all)))",
2,
DB::DistributedProductMode::DENY,
false
},
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all WHERE UserID IN (SELECT UserID FROM remote_db.remote_visits WHERE UserID GLOBAL IN (SELECT UserID FROM (SELECT UserID FROM test.visits_all)))",
"SELECT UserID FROM test.visits_all WHERE UserID IN (SELECT UserID FROM remote_db.remote_visits WHERE UserID GLOBAL IN (SELECT UserID FROM (SELECT UserID FROM test.visits_all)))",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all WHERE UserID IN (SELECT UserID FROM remote_db.remote_visits WHERE UserID GLOBAL IN (SELECT UserID FROM (SELECT UserID FROM test.visits_all)))",
"SELECT UserID FROM test.visits_all WHERE UserID IN (SELECT UserID FROM remote_db.remote_visits WHERE UserID GLOBAL IN (SELECT UserID FROM (SELECT UserID FROM remote_db.remote_visits)))",
2,
DB::DistributedProductMode::LOCAL,
true
},
2016-11-13 02:19:38 +00:00
/// Секция JOIN / глубина 1 / таблица на уровне 2
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM (SELECT UserID FROM test.visits_all)) USING UserID",
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM (SELECT UserID FROM test.visits_all)) USING UserID",
2,
DB::DistributedProductMode::ALLOW,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM (SELECT UserID FROM test.visits_all)) USING UserID",
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM (SELECT UserID FROM test.visits_all)) USING UserID",
2,
DB::DistributedProductMode::DENY,
false
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM (SELECT UserID FROM test.visits_all)) USING UserID",
"SELECT UserID FROM test.visits_all GLOBAL ALL INNER JOIN (SELECT UserID FROM (SELECT UserID FROM test.visits_all)) USING UserID",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM (SELECT UserID FROM remote_db.remote_visits)) USING UserID",
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM (SELECT UserID FROM remote_db.remote_visits)) USING UserID",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM (SELECT UserID FROM test.visits_all)) USING UserID",
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM (SELECT UserID FROM remote_db.remote_visits)) USING UserID",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM (SELECT UserID FROM remote_db.remote_visits)) USING UserID",
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM (SELECT UserID FROM remote_db.remote_visits)) USING UserID",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
/// Секция IN / глубина 2
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID IN (SELECT CounterID FROM test.visits_all WHERE BrowserID IN (SELECT BrowserID FROM test.visits_all WHERE OtherID = 1))",
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID IN (SELECT CounterID FROM test.visits_all WHERE BrowserID IN (SELECT BrowserID FROM test.visits_all WHERE OtherID = 1))",
2,
DB::DistributedProductMode::ALLOW,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID GLOBAL IN (SELECT CounterID FROM test.visits_all WHERE BrowserID IN (SELECT BrowserID FROM remote_db.remote_visits WHERE OtherID = 1))",
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID GLOBAL IN (SELECT CounterID FROM test.visits_all WHERE BrowserID IN (SELECT BrowserID FROM remote_db.remote_visits WHERE OtherID = 1))",
2,
DB::DistributedProductMode::DENY,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID IN (SELECT CounterID FROM test.visits_all WHERE BrowserID IN (SELECT BrowserID FROM test.visits_all WHERE OtherID = 1))",
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID IN (SELECT CounterID FROM test.visits_all WHERE BrowserID IN (SELECT BrowserID FROM test.visits_all WHERE OtherID = 1))",
2,
DB::DistributedProductMode::DENY,
false
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID GLOBAL IN (SELECT CounterID FROM test.visits_all WHERE BrowserID IN (SELECT BrowserID FROM test.visits_all WHERE OtherID = 1))",
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID GLOBAL IN (SELECT CounterID FROM test.visits_all WHERE BrowserID IN (SELECT BrowserID FROM test.visits_all WHERE OtherID = 1))",
2,
DB::DistributedProductMode::DENY,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID IN (SELECT CounterID FROM test.visits_all WHERE BrowserID IN (SELECT BrowserID FROM test.visits_all WHERE OtherID = 1))",
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID GLOBAL IN (SELECT CounterID FROM test.visits_all WHERE BrowserID GLOBAL IN (SELECT BrowserID FROM test.visits_all WHERE OtherID = 1))",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID IN (SELECT CounterID FROM test.visits_all WHERE BrowserID IN (SELECT BrowserID FROM remote_db.remote_visits WHERE OtherID = 1))",
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID GLOBAL IN (SELECT CounterID FROM test.visits_all WHERE BrowserID IN (SELECT BrowserID FROM remote_db.remote_visits WHERE OtherID = 1))",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID IN (SELECT CounterID FROM test.visits_all WHERE BrowserID IN (SELECT BrowserID FROM test.visits_all WHERE OtherID = 1))",
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID IN (SELECT CounterID FROM remote_db.remote_visits WHERE BrowserID IN (SELECT BrowserID FROM remote_db.remote_visits WHERE OtherID = 1))",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID GLOBAL IN (SELECT CounterID FROM test.visits_all WHERE BrowserID IN (SELECT BrowserID FROM test.visits_all WHERE OtherID = 1))",
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID GLOBAL IN (SELECT CounterID FROM test.visits_all WHERE BrowserID IN (SELECT BrowserID FROM test.visits_all WHERE OtherID = 1))",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID IN (SELECT CounterID FROM test.visits_all WHERE BrowserID IN (SELECT BrowserID FROM remote_db.remote_visits WHERE OtherID = 1))",
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID IN (SELECT CounterID FROM remote_db.remote_visits WHERE BrowserID IN (SELECT BrowserID FROM remote_db.remote_visits WHERE OtherID = 1))",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
/// Секция JOIN / глубина 2
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID IN (SELECT CounterID FROM test.visits_all ALL INNER JOIN (SELECT CounterID FROM (SELECT CounterID FROM test.visits_all)) USING CounterID)",
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID IN (SELECT CounterID FROM test.visits_all ALL INNER JOIN (SELECT CounterID FROM (SELECT CounterID FROM test.visits_all)) USING CounterID)",
2,
DB::DistributedProductMode::ALLOW,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID GLOBAL IN (SELECT CounterID FROM test.visits_all ALL INNER JOIN (SELECT CounterID FROM (SELECT CounterID FROM remote_db.remote_visits)) USING CounterID)",
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID GLOBAL IN (SELECT CounterID FROM test.visits_all ALL INNER JOIN (SELECT CounterID FROM (SELECT CounterID FROM remote_db.remote_visits)) USING CounterID)",
2,
DB::DistributedProductMode::DENY,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID GLOBAL IN (SELECT CounterID FROM test.visits_all ALL INNER JOIN (SELECT CounterID FROM (SELECT CounterID FROM test.visits_all)) USING CounterID)",
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID GLOBAL IN (SELECT CounterID FROM test.visits_all ALL INNER JOIN (SELECT CounterID FROM (SELECT CounterID FROM test.visits_all)) USING CounterID)",
2,
DB::DistributedProductMode::DENY,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID IN (SELECT CounterID FROM test.visits_all ALL INNER JOIN (SELECT CounterID FROM (SELECT CounterID FROM test.visits_all)) USING CounterID)",
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID GLOBAL IN (SELECT CounterID FROM test.visits_all GLOBAL ALL INNER JOIN (SELECT CounterID FROM (SELECT CounterID FROM test.visits_all)) USING CounterID)",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID IN (SELECT CounterID FROM test.visits_all ALL INNER JOIN (SELECT CounterID FROM (SELECT CounterID FROM test.visits_all)) USING CounterID)",
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID IN (SELECT CounterID FROM remote_db.remote_visits ALL INNER JOIN (SELECT CounterID FROM (SELECT CounterID FROM remote_db.remote_visits)) USING CounterID)",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
/// Секция JOIN / глубина 2
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all WHERE OtherID IN (SELECT OtherID FROM (SELECT OtherID FROM test.visits_all WHERE RegionID = 1) ALL INNER JOIN (SELECT OtherID FROM test.visits_all WHERE RegionID = 2) USING OtherID)",
"SELECT UserID FROM test.visits_all WHERE OtherID IN (SELECT OtherID FROM (SELECT OtherID FROM test.visits_all WHERE RegionID = 1) ALL INNER JOIN (SELECT OtherID FROM test.visits_all WHERE RegionID = 2) USING OtherID)",
2,
DB::DistributedProductMode::ALLOW,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all WHERE OtherID GLOBAL IN (SELECT OtherID FROM (SELECT OtherID FROM test.visits_all WHERE RegionID = 1) ALL INNER JOIN (SELECT OtherID FROM remote_db.remote_visits WHERE RegionID = 2) USING OtherID)",
"SELECT UserID FROM test.visits_all WHERE OtherID GLOBAL IN (SELECT OtherID FROM (SELECT OtherID FROM test.visits_all WHERE RegionID = 1) ALL INNER JOIN (SELECT OtherID FROM remote_db.remote_visits WHERE RegionID = 2) USING OtherID)",
2,
DB::DistributedProductMode::DENY,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all WHERE OtherID GLOBAL IN (SELECT OtherID FROM (SELECT OtherID FROM test.visits_all WHERE RegionID = 1) ALL INNER JOIN (SELECT OtherID FROM test.visits_all WHERE RegionID = 2) USING OtherID)",
"SELECT UserID FROM test.visits_all WHERE OtherID GLOBAL IN (SELECT OtherID FROM (SELECT OtherID FROM test.visits_all WHERE RegionID = 1) ALL INNER JOIN (SELECT OtherID FROM test.visits_all WHERE RegionID = 2) USING OtherID)",
2,
DB::DistributedProductMode::DENY,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all WHERE OtherID IN (SELECT OtherID FROM (SELECT OtherID FROM test.visits_all WHERE RegionID = 1) ALL INNER JOIN (SELECT OtherID FROM test.visits_all WHERE RegionID = 2) USING OtherID)",
"SELECT UserID FROM test.visits_all WHERE OtherID IN (SELECT OtherID FROM (SELECT OtherID FROM test.visits_all WHERE RegionID = 1) ALL INNER JOIN (SELECT OtherID FROM test.visits_all WHERE RegionID = 2) USING OtherID)",
2,
DB::DistributedProductMode::DENY,
false
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all WHERE OtherID IN (SELECT OtherID FROM (SELECT OtherID FROM test.visits_all WHERE RegionID = 1) ALL INNER JOIN (SELECT OtherID FROM test.visits_all WHERE RegionID = 2) USING OtherID)",
"SELECT UserID FROM test.visits_all WHERE OtherID GLOBAL IN (SELECT OtherID FROM (SELECT OtherID FROM test.visits_all WHERE RegionID = 1) GLOBAL ALL INNER JOIN (SELECT OtherID FROM test.visits_all WHERE RegionID = 2) USING OtherID)",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all WHERE OtherID IN (SELECT OtherID FROM (SELECT OtherID FROM test.visits_all WHERE RegionID = 1) ALL INNER JOIN (SELECT OtherID FROM test.visits_all WHERE RegionID = 2) USING OtherID)",
"SELECT UserID FROM test.visits_all WHERE OtherID IN (SELECT OtherID FROM (SELECT OtherID FROM remote_db.remote_visits WHERE RegionID = 1) ALL INNER JOIN (SELECT OtherID FROM remote_db.remote_visits WHERE RegionID = 2) USING OtherID)",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
/// Секция JOIN / секция IN
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM test.visits_all WHERE OtherID IN (SELECT OtherID FROM test.visits_all WHERE RegionID = 2)) USING UserID",
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM test.visits_all WHERE OtherID IN (SELECT OtherID FROM test.visits_all WHERE RegionID = 2)) USING UserID",
2,
DB::DistributedProductMode::ALLOW,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM test.visits_all WHERE OtherID IN (SELECT OtherID FROM test.visits_all WHERE RegionID = 2)) USING UserID",
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM test.visits_all WHERE OtherID IN (SELECT OtherID FROM test.visits_all WHERE RegionID = 2)) USING UserID",
2,
DB::DistributedProductMode::DENY,
false
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all GLOBAL ALL INNER JOIN (SELECT UserID FROM test.visits_all WHERE OtherID IN (SELECT OtherID FROM test.visits_all WHERE RegionID = 2)) USING UserID",
"SELECT UserID FROM test.visits_all GLOBAL ALL INNER JOIN (SELECT UserID FROM test.visits_all WHERE OtherID IN (SELECT OtherID FROM test.visits_all WHERE RegionID = 2)) USING UserID",
2,
DB::DistributedProductMode::DENY,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all GLOBAL ALL INNER JOIN (SELECT UserID FROM test.visits_all WHERE OtherID IN (SELECT OtherID FROM remote_db.remote_visits WHERE RegionID = 2)) USING UserID",
"SELECT UserID FROM test.visits_all GLOBAL ALL INNER JOIN (SELECT UserID FROM test.visits_all WHERE OtherID IN (SELECT OtherID FROM remote_db.remote_visits WHERE RegionID = 2)) USING UserID",
2,
DB::DistributedProductMode::DENY,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM test.visits_all WHERE OtherID IN (SELECT OtherID FROM test.visits_all WHERE RegionID = 2)) USING UserID",
"SELECT UserID FROM test.visits_all GLOBAL ALL INNER JOIN (SELECT UserID FROM test.visits_all WHERE OtherID GLOBAL IN (SELECT OtherID FROM test.visits_all WHERE RegionID = 2)) USING UserID",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM test.visits_all WHERE OtherID IN (SELECT OtherID FROM test.visits_all WHERE RegionID = 2)) USING UserID",
"SELECT UserID FROM test.visits_all ALL INNER JOIN (SELECT UserID FROM remote_db.remote_visits WHERE OtherID IN (SELECT OtherID FROM remote_db.remote_visits WHERE RegionID = 2)) USING UserID",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
/// Табличная функция.
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM remote('127.0.0.{1,2}', test, visits_all) WHERE UserID IN (SELECT UserID FROM test.visits_all)",
"SELECT count() FROM remote('127.0.0.{1,2}', test, visits_all) WHERE UserID IN (SELECT UserID FROM test.visits_all)",
2,
DB::DistributedProductMode::ALLOW,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM remote('127.0.0.{1,2}', test, visits_all) WHERE UserID IN (SELECT UserID FROM test.visits_all)",
"SELECT count() FROM remote('127.0.0.{1,2}', test, visits_all) WHERE UserID IN (SELECT UserID FROM test.visits_all)",
2,
DB::DistributedProductMode::DENY,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM remote('127.0.0.{1,2}', test, visits_all))",
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM remote('127.0.0.{1,2}', test, visits_all))",
2,
DB::DistributedProductMode::DENY,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM remote('127.0.0.{1,2}', test, visits_all) WHERE UserID IN (SELECT UserID FROM test.visits_all)",
"SELECT count() FROM remote('127.0.0.{1,2}', test, visits_all) WHERE UserID IN (SELECT UserID FROM test.visits_all)",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM remote('127.0.0.{1,2}', test, visits_all))",
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM remote('127.0.0.{1,2}', test, visits_all))",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM remote('127.0.0.{1,2}', test, visits_all) WHERE UserID IN (SELECT UserID FROM test.visits_all)",
"SELECT count() FROM remote('127.0.0.{1,2}', test, visits_all) WHERE UserID IN (SELECT UserID FROM test.visits_all)",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM remote('127.0.0.{1,2}', test, visits_all))",
"SELECT count() FROM test.visits_all WHERE UserID IN (SELECT UserID FROM remote('127.0.0.{1,2}', test, visits_all))",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
/// Секция IN / глубина 2 / две распределённые таблицы
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID IN (SELECT CounterID FROM test.hits_all WHERE BrowserID IN (SELECT BrowserID FROM test.visits_all WHERE OtherID = 1))",
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID GLOBAL IN (SELECT CounterID FROM test.hits_all WHERE BrowserID GLOBAL IN (SELECT BrowserID FROM test.visits_all WHERE OtherID = 1))",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID IN (SELECT CounterID FROM test.hits_all WHERE BrowserID IN (SELECT BrowserID FROM test.visits_all WHERE OtherID = 1))",
"SELECT UserID, RegionID FROM test.visits_all WHERE CounterID IN (SELECT CounterID FROM distant_db.distant_hits WHERE BrowserID IN (SELECT BrowserID FROM remote_db.remote_visits WHERE OtherID = 1))",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
/// Агрегатная функция.
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT sum(RegionID IN (SELECT RegionID from test.hits_all)) FROM test.visits_all",
"SELECT sum(RegionID IN (SELECT RegionID from test.hits_all)) FROM test.visits_all",
2,
DB::DistributedProductMode::ALLOW,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT sum(RegionID IN (SELECT RegionID from test.hits_all)) FROM test.visits_all",
"SELECT sum(RegionID IN (SELECT RegionID from test.hits_all)) FROM test.visits_all",
2,
DB::DistributedProductMode::DENY,
false
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT sum(RegionID GLOBAL IN (SELECT RegionID from test.hits_all)) FROM test.visits_all",
"SELECT sum(RegionID GLOBAL IN (SELECT RegionID from test.hits_all)) FROM test.visits_all",
2,
DB::DistributedProductMode::DENY,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT sum(RegionID IN (SELECT RegionID from test.hits_all)) FROM test.visits_all",
"SELECT sum(RegionID GLOBAL IN (SELECT RegionID from test.hits_all)) FROM test.visits_all",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT sum(RegionID GLOBAL IN (SELECT RegionID from test.hits_all)) FROM test.visits_all",
"SELECT sum(RegionID GLOBAL IN (SELECT RegionID from test.hits_all)) FROM test.visits_all",
2,
DB::DistributedProductMode::LOCAL,
true
},
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT sum(RegionID IN (SELECT RegionID from test.hits_all)) FROM test.visits_all",
"SELECT sum(RegionID IN (SELECT RegionID from distant_db.distant_hits)) FROM test.visits_all",
2,
DB::DistributedProductMode::LOCAL,
true
},
2016-02-02 11:49:57 +00:00
2016-11-13 02:19:38 +00:00
/// Miscellaneous.
2016-02-02 11:49:57 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE x GLOBAL IN (SELECT x FROM test.visits_all WHERE x GLOBAL IN (SELECT x FROM test.visits_all))",
"SELECT count() FROM test.visits_all WHERE x GLOBAL IN (SELECT x FROM test.visits_all WHERE x GLOBAL IN (SELECT x FROM test.visits_all))",
2,
DB::DistributedProductMode::DENY,
true
},
2016-02-02 11:49:57 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE x GLOBAL IN (SELECT x FROM test.visits_all WHERE x GLOBAL IN (SELECT x FROM test.visits_all))",
"SELECT count() FROM test.visits_all WHERE x GLOBAL IN (SELECT x FROM test.visits_all WHERE x GLOBAL IN (SELECT x FROM test.visits_all))",
2,
DB::DistributedProductMode::LOCAL,
true
},
2016-02-02 11:49:57 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT count() FROM test.visits_all WHERE x GLOBAL IN (SELECT x FROM test.visits_all WHERE x GLOBAL IN (SELECT x FROM test.visits_all))",
"SELECT count() FROM test.visits_all WHERE x GLOBAL IN (SELECT x FROM test.visits_all WHERE x GLOBAL IN (SELECT x FROM test.visits_all))",
2,
DB::DistributedProductMode::GLOBAL,
true
},
2016-02-02 11:49:57 +00:00
2016-11-13 02:19:38 +00:00
{
__LINE__,
"SELECT UserID FROM (SELECT UserID FROM test.visits_all WHERE UserID GLOBAL IN (SELECT UserID FROM test.hits_all))",
"SELECT UserID FROM (SELECT UserID FROM test.visits_all WHERE UserID GLOBAL IN (SELECT UserID FROM test.hits_all))",
2,
DB::DistributedProductMode::DENY,
true
}
};
2015-09-18 13:36:10 +00:00
2016-11-13 02:19:38 +00:00
bool performTests(const TestEntries & entries)
2015-09-18 13:36:10 +00:00
{
unsigned int count = 0;
unsigned int i = 1;
for (const auto & entry : entries)
{
auto res = check(entry);
if (res.first)
{
++count;
}
else
2016-11-13 02:19:38 +00:00
std::cout << "Test " << i << " at line " << entry.line_num << " failed.\n"
"Expected: " << entry.expected_output << ".\n"
"Received: " << res.second << "\n";
2015-09-18 13:36:10 +00:00
++i;
}
2016-11-13 02:19:38 +00:00
2015-09-18 13:36:10 +00:00
std::cout << count << " out of " << entries.size() << " test(s) passed.\n";
2016-11-13 02:19:38 +00:00
return count == entries.size();
}
bool run()
{
return performTests(entries);
2015-09-18 13:36:10 +00:00
}
TestResult check(const TestEntry & entry)
{
try
{
DB::Context context;
auto storage_distributed_visits = StorageDistributedFake::create("remote_db", "remote_visits", entry.shard_count);
auto storage_distributed_hits = StorageDistributedFake::create("distant_db", "distant_hits", entry.shard_count);
DB::DatabasePtr database = std::make_shared<DB::DatabaseOrdinary>("test", "./metadata/test/");
Squashed commit of the following: commit f9b478181cd49224154cc350fb57df7121842f1c Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Sat Mar 19 04:06:36 2016 +0300 Database engines: development [#METR-19997]. commit f7a10a67761ccfd05f3dac32d6444920cd8d4d60 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Sat Mar 19 03:44:37 2016 +0300 Database engines: development [#METR-19997]. commit bd98a8558e98bad2bed278e5762c4e0fc66e6f38 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Sat Mar 19 00:33:59 2016 +0300 Database engines: development [#METR-19997]. commit 19712fd884c22a4e2c2b67474086dea8f44e7c7b Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Sat Mar 19 00:03:11 2016 +0300 Database engines: development [#METR-19997]. commit 50274d6df7e91fcc34aab8a8c72347daa2c6512f Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Fri Mar 18 23:24:57 2016 +0300 Database engines: development [#METR-19997]. commit 4a0b99b19b34e90ef8b7be2d199f6232e36ef3f7 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Fri Mar 18 22:50:36 2016 +0300 Database engines: development [#METR-19997]. commit 44ff3ebba7a3e460a27a89f31ddf199dbea1d182 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Fri Mar 18 15:09:17 2016 +0300 Database engines: development [#METR-19997]. commit 137c31f3004cfd282473b6acb01cbe1b4ca2aadd Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Fri Mar 18 03:26:34 2016 +0300 Database engines: development [#METR-19997]. commit aa4c0496d4afe4a691164254be2bd5600542b38a Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Fri Mar 18 03:22:59 2016 +0300 Database engines: development [#METR-19997]. commit 5a94d1f0607450a2dac28a4d7df8b1393a864c23 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Fri Mar 18 01:02:40 2016 +0300 Database engines: development [#METR-19997]. commit 50fd5b52ea1141955a5dfba0dcb191f3289ac25b Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Thu Mar 17 23:23:40 2016 +0300 Database engines: development [#METR-19997]. commit a333d91b058e4f56dd83a6d2878c3c2bd8efc002 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Thu Mar 17 20:29:07 2016 +0300 Database engines: development [#METR-19997]. commit f81d366e7ac8348436f2698d040f8e341743a024 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Thu Mar 17 01:30:23 2016 +0300 Database engines: development [#METR-19997]. commit d0696860c9060827896214c08d147c759ea79376 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Wed Mar 16 21:55:31 2016 +0300 Database engines: development [#METR-19997]. commit 46a168c2ada140a0e95cd8d4b9d8ba9bac855d11 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Wed Mar 16 08:00:58 2016 +0300 Database engines: development [#METR-19997]. commit 20a2bad161454225fc1b5f9b919b842fbebc3231 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Wed Mar 16 06:51:10 2016 +0300 Database engines: development [#METR-19997]. commit ca0a77fcc2a8d0b276eb3743c53551ad3fe16314 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Wed Mar 16 06:02:20 2016 +0300 Reverted erroneous modification [#METR-19997]. commit 1370bdcc4594182f6ef2b146f9afabfe1c295080 Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Wed Mar 16 00:41:34 2016 +0300 Database engines: development [#METR-19997]. commit 16e72c67041cae6471509d3f0f3d4a9aa7b7dc0f Author: Alexey Milovidov <milovidov@yandex-team.ru> Date: Tue Mar 15 00:41:48 2016 +0300 Database engines: development [#METR-19997].
2016-03-19 01:18:49 +00:00
context.addDatabase("test", database);
database->attachTable("visits_all", storage_distributed_visits);
database->attachTable("hits_all", storage_distributed_hits);
2015-09-18 13:36:10 +00:00
context.setCurrentDatabase("test");
auto & settings = context.getSettingsRef();
settings.distributed_product_mode = entry.mode;
/// Парсить и обработать входящий запрос.
DB::ASTPtr ast_input;
if (!parse(ast_input, entry.input))
return TestResult(false, "parse error");
auto select_query = typeid_cast<DB::ASTSelectQuery *>(&*ast_input);
bool success = true;
try
{
DB::InJoinSubqueriesPreprocessor<StorageDistributedFake> preprocessor(select_query, context, storage_distributed_visits);
preprocessor.perform();
}
catch (const DB::Exception & ex)
{
if (ex.code() == DB::ErrorCodes::DISTRIBUTED_IN_JOIN_SUBQUERY_DENIED)
success = false;
else
throw;
}
catch (...)
{
throw;
}
if (success != entry.expected_success)
return TestResult(false, "unexpected result");
/// Парсить ожидаемый результат.
DB::ASTPtr ast_expected;
if (!parse(ast_expected, entry.expected_output))
return TestResult(false, "parse error");
/// Сравнить обработанный запрос и ожидаемый результат.
bool res = equals(ast_input, ast_expected);
std::string output = DB::queryToString(ast_input);
return TestResult(res, output);
}
catch (DB::Exception & e)
{
return TestResult(false, e.displayText());
}
}
bool parse(DB::ASTPtr & ast, const std::string & query)
{
DB::ParserSelectQuery parser;
std::string message;
auto begin = query.data();
auto end = begin + query.size();
ast = DB::tryParseQuery(parser, begin, end, message, false, "", false);
return ast != nullptr;
2015-09-18 13:36:10 +00:00
}
bool equals(const DB::ASTPtr & lhs, const DB::ASTPtr & rhs)
{
DB::ASTPtr lhs_reordered = lhs->clone();
reorder(&*lhs_reordered);
DB::ASTPtr rhs_reordered = rhs->clone();
reorder(&*rhs_reordered);
return lhs_reordered->getTreeID() == rhs_reordered->getTreeID();
}
void reorder(DB::IAST * ast)
{
if (ast == nullptr)
return;
auto & children = ast->children;
if (children.empty())
return;
for (auto & child : children)
reorder(&*child);
std::sort(children.begin(), children.end(), [](const DB::ASTPtr & lhs, const DB::ASTPtr & rhs)
{
return lhs->getTreeID() < rhs->getTreeID();
});
}
int main()
{
2016-11-13 02:19:38 +00:00
return run() ? EXIT_SUCCESS : EXIT_FAILURE;
2015-09-18 13:36:10 +00:00
}