Skip to content

Commit 827990d

Browse files
Merge pull request #12305 from ClickHouse/fix-virtual-columns-filter
Fix virtual columns filter
2 parents e73c677 + c46ca16 commit 827990d

File tree

3 files changed

+15
-2
lines changed

3 files changed

+15
-2
lines changed

src/Storages/VirtualColumnUtils.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
#include <Columns/ColumnsNumber.h>
1616
#include <Columns/ColumnsCommon.h>
17+
#include <Columns/FilterDescription.h>
1718

1819
#include <Storages/VirtualColumnUtils.h>
1920
#include <IO/WriteHelpers.h>
@@ -127,12 +128,21 @@ void filterBlockWithQuery(const ASTPtr & query, Block & block, const Context & c
127128
/// Filter the block.
128129
String filter_column_name = expression_ast->getColumnName();
129130
ColumnPtr filter_column = block_with_filter.getByName(filter_column_name).column->convertToFullColumnIfConst();
130-
const IColumn::Filter & filter = typeid_cast<const ColumnUInt8 &>(*filter_column).getData();
131+
132+
ConstantFilterDescription constant_filter(*filter_column);
133+
134+
if (constant_filter.always_true)
135+
return;
136+
137+
if (constant_filter.always_false)
138+
block = block.cloneEmpty();
139+
140+
FilterDescription filter(*filter_column);
131141

132142
for (size_t i = 0; i < block.columns(); ++i)
133143
{
134144
ColumnPtr & column = block.safeGetByPosition(i).column;
135-
column = column->filter(filter, -1);
145+
column = column->filter(*filter.data, -1);
136146
}
137147
}
138148

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
0
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
SELECT count() FROM system.parts WHERE table = NULL AND database = currentDatabase();
2+
SELECT DISTINCT marks FROM system.parts WHERE (table = NULL) AND (database = currentDatabase()) AND (active = 1);

0 commit comments

Comments
 (0)