mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 23:21:59 +00:00
Fix bitmap functions crash the server bug segfault
This commit is contained in:
parent
8dd7d4d46b
commit
4b66622601
@ -406,7 +406,12 @@ private:
|
|||||||
{
|
{
|
||||||
const ColumnAggregateFunction * columns[2];
|
const ColumnAggregateFunction * columns[2];
|
||||||
for (size_t i = 0; i < 2; ++i)
|
for (size_t i = 0; i < 2; ++i)
|
||||||
columns[i] = typeid_cast<const ColumnAggregateFunction *>(block.getByPosition(arguments[i]).column.get());
|
{
|
||||||
|
if (auto argument_column_const = typeid_cast<const ColumnConst *>(block.getByPosition(arguments[i]).column.get()))
|
||||||
|
columns[i] = typeid_cast<const ColumnAggregateFunction *>(argument_column_const->getDataColumnPtr().get());
|
||||||
|
else
|
||||||
|
columns[i] = typeid_cast<const ColumnAggregateFunction *>(block.getByPosition(arguments[i]).column.get());
|
||||||
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < input_rows_count; ++i)
|
for (size_t i = 0; i < input_rows_count; ++i)
|
||||||
{
|
{
|
||||||
@ -511,7 +516,12 @@ private:
|
|||||||
{
|
{
|
||||||
const ColumnAggregateFunction * columns[2];
|
const ColumnAggregateFunction * columns[2];
|
||||||
for (size_t i = 0; i < 2; ++i)
|
for (size_t i = 0; i < 2; ++i)
|
||||||
columns[i] = typeid_cast<const ColumnAggregateFunction *>(block.getByPosition(arguments[i]).column.get());
|
{
|
||||||
|
if (auto argument_column_const = typeid_cast<const ColumnConst *>(block.getByPosition(arguments[i]).column.get()))
|
||||||
|
columns[i] = typeid_cast<const ColumnAggregateFunction *>(argument_column_const->getDataColumnPtr().get());
|
||||||
|
else
|
||||||
|
columns[i] = typeid_cast<const ColumnAggregateFunction *>(block.getByPosition(arguments[i]).column.get());
|
||||||
|
}
|
||||||
|
|
||||||
auto col_to = ColumnAggregateFunction::create(columns[0]->getAggregateFunction());
|
auto col_to = ColumnAggregateFunction::create(columns[0]->getAggregateFunction());
|
||||||
|
|
||||||
|
@ -15,3 +15,7 @@
|
|||||||
60 50 70 40 20 30
|
60 50 70 40 20 30
|
||||||
2019-01-01 50
|
2019-01-01 50
|
||||||
2019-01-02 60
|
2019-01-02 60
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
USE test;
|
||||||
SELECT bitmapToArray(bitmapBuild([1, 2, 3, 4, 5]));
|
SELECT bitmapToArray(bitmapBuild([1, 2, 3, 4, 5]));
|
||||||
SELECT bitmapToArray(bitmapAnd(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])));
|
SELECT bitmapToArray(bitmapAnd(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])));
|
||||||
SELECT bitmapToArray(bitmapOr(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])));
|
SELECT bitmapToArray(bitmapOr(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])));
|
||||||
@ -53,7 +54,7 @@ ALL LEFT JOIN
|
|||||||
)
|
)
|
||||||
USING city_id;
|
USING city_id;
|
||||||
|
|
||||||
|
-- bitmap state test
|
||||||
DROP TABLE IF EXISTS bitmap_state_test;
|
DROP TABLE IF EXISTS bitmap_state_test;
|
||||||
CREATE TABLE bitmap_state_test
|
CREATE TABLE bitmap_state_test
|
||||||
(
|
(
|
||||||
@ -72,6 +73,26 @@ GROUP BY pickup_date, city_id;
|
|||||||
|
|
||||||
SELECT pickup_date, groupBitmapMerge(uv) AS users from bitmap_state_test group by pickup_date;
|
SELECT pickup_date, groupBitmapMerge(uv) AS users from bitmap_state_test group by pickup_date;
|
||||||
|
|
||||||
|
-- between column and expression test
|
||||||
|
DROP TABLE IF EXISTS bitmap_column_expr_test;
|
||||||
|
CREATE TABLE bitmap_column_expr_test
|
||||||
|
(
|
||||||
|
t DateTime,
|
||||||
|
z AggregateFunction(groupBitmap, UInt32)
|
||||||
|
)
|
||||||
|
ENGINE = MergeTree
|
||||||
|
PARTITION BY toYYYYMMDD(t)
|
||||||
|
ORDER BY t;
|
||||||
|
|
||||||
|
INSERT INTO bitmap_column_expr_test VALUES (now(), bitmapBuild(cast([3,19,47] as Array(UInt32))));
|
||||||
|
|
||||||
|
SELECT bitmapAndCardinality( bitmapBuild(cast([19,7] as Array(UInt32))), z) from bitmap_column_expr_test;
|
||||||
|
SELECT bitmapAndCardinality( z, bitmapBuild(cast([19,7] as Array(UInt32))) ) from bitmap_column_expr_test;
|
||||||
|
|
||||||
|
select bitmapCardinality(bitmapAnd(bitmapBuild(cast([19,7] as Array(UInt32))), z )) from bitmap_column_expr_test;
|
||||||
|
select bitmapCardinality(bitmapAnd(z, bitmapBuild(cast([19,7] as Array(UInt32))))) from bitmap_column_expr_test;
|
||||||
|
|
||||||
DROP TABLE IF EXISTS bitmap_test;
|
DROP TABLE IF EXISTS bitmap_test;
|
||||||
DROP TABLE IF EXISTS bitmap_state_test;
|
DROP TABLE IF EXISTS bitmap_state_test;
|
||||||
|
DROP TABLE IF EXISTS bitmap_column_expr_test;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user