Fix reading empty set with prewhere dependent on alias column.

This commit is contained in:
Nikolai Kochetov 2019-11-25 17:33:54 +03:00
parent e1521524e9
commit 1a0f17cb2c
4 changed files with 47 additions and 6 deletions

View File

@ -1694,6 +1694,13 @@ void InterpreterSelectQuery::executeFetchColumns(
if (query_info.prewhere_info)
{
if (query_info.prewhere_info->alias_actions)
{
streams.back() = std::make_shared<ExpressionBlockInputStream>(
streams.back(),
query_info.prewhere_info->alias_actions);
}
streams.back() = std::make_shared<FilterBlockInputStream>(
streams.back(),
prewhere_info->prewhere_actions,
@ -1718,6 +1725,10 @@ void InterpreterSelectQuery::executeFetchColumns(
if (query_info.prewhere_info)
{
if (query_info.prewhere_info->alias_actions)
pipe.addSimpleTransform(std::make_shared<ExpressionTransform>(
pipe.getHeader(), query_info.prewhere_info->alias_actions));
pipe.addSimpleTransform(std::make_shared<FilterTransform>(
pipe.getHeader(),
prewhere_info->prewhere_actions,

View File

@ -0,0 +1,36 @@
DROP TABLE IF EXISTS test;
CREATE TABLE test (a UInt8, b UInt8, c UInt16 ALIAS a + b) ENGINE = MergeTree ORDER BY a;
SELECT b FROM test PREWHERE c = 1;
DROP TABLE test;
drop table if exists audience_local;
create table audience_local
(
Date Date,
AudienceType Enum8('other' = 0, 'client' = 1, 'group' = 2),
UMA UInt64,
APIKey String,
TrialNameID UInt32,
TrialGroupID UInt32,
AppVersion String,
Arch Enum8('other' = 0, 'x32' = 1, 'x64' = 2),
UserID UInt32,
GroupID UInt8,
OSName Enum8('other' = 0, 'Android' = 1, 'iOS' = 2, 'macOS' = 3, 'Windows' = 4, 'Linux' = 5),
Channel Enum8('other' = 0, 'Canary' = 1, 'Dev' = 2, 'Beta' = 3, 'Stable' = 4),
Hits UInt64,
Sum Int64,
Release String alias splitByChar('-', AppVersion)[1]
)
engine = SummingMergeTree
PARTITION BY (toISOYear(Date), toISOWeek(Date))
ORDER BY (AudienceType, UMA, APIKey, Date, TrialNameID, TrialGroupID, AppVersion, Arch, UserID, GroupID, OSName, Channel)
SETTINGS index_granularity = 8192;
SELECT DISTINCT UserID
FROM audience_local
PREWHERE Date = toDate('2019-07-25') AND Release = '17.11.0.542';
drop table if exists audience_local;

View File

@ -1,6 +0,0 @@
DROP TABLE IF EXISTS test.test;
CREATE TABLE test.test (a UInt8, b UInt8, c UInt16 ALIAS a + b) ENGINE = MergeTree ORDER BY a;
SELECT b FROM test.test PREWHERE c = 1;
DROP TABLE test;