mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 16:50:48 +00:00
Merge pull request #3055 from yandex/fix-prewhere-with-aliases-2
Fix prewhere with aliases 2
This commit is contained in:
commit
79f33db9cc
@ -46,6 +46,7 @@
|
||||
#include <Columns/Collator.h>
|
||||
#include <Common/typeid_cast.h>
|
||||
#include <Parsers/queryToString.h>
|
||||
#include <ext/map.h>
|
||||
|
||||
|
||||
namespace DB
|
||||
@ -679,6 +680,7 @@ void InterpreterSelectQuery::executeFetchColumns(
|
||||
|
||||
/// Columns which we will get after prewhere execution.
|
||||
auto source_columns = storage->getColumns().getAllPhysical();
|
||||
auto physical_columns = ext::map<NameSet>(source_columns, [] (const auto & it) { return it.name; });
|
||||
|
||||
for (const auto & column : required_columns)
|
||||
{
|
||||
@ -723,14 +725,17 @@ void InterpreterSelectQuery::executeFetchColumns(
|
||||
prewhere_info->remove_prewhere_column = false;
|
||||
|
||||
/// Remove columns which will be added by prewhere.
|
||||
size_t next_req_column_pos = 0;
|
||||
for (size_t i = 0; i < required_columns.size(); ++i)
|
||||
{
|
||||
if (!storage->getColumns().hasPhysical(required_columns[i]))
|
||||
if (physical_columns.count(required_columns[i]))
|
||||
{
|
||||
std::swap(required_columns[i], required_columns.back());
|
||||
required_columns.pop_back();
|
||||
if (next_req_column_pos < i)
|
||||
std::swap(required_columns[i], required_columns[next_req_column_pos]);
|
||||
++next_req_column_pos;
|
||||
}
|
||||
}
|
||||
required_columns.resize(next_req_column_pos);
|
||||
|
||||
if (prewhere_info)
|
||||
{
|
||||
|
@ -0,0 +1 @@
|
||||
1 3 6
|
@ -0,0 +1,5 @@
|
||||
drop table if exists test.prewhere_alias;
|
||||
create table test.prewhere_alias (a Int32, b Int32, c alias a + b) engine = MergeTree order by b;
|
||||
insert into test.prewhere_alias values(1, 1);
|
||||
select a, c + toInt32(1), (c + toInt32(1)) * 2 from test.prewhere_alias prewhere (c + toInt32(1)) * 2 = 6;
|
||||
drop table test.prewhere_alias;
|
Loading…
Reference in New Issue
Block a user