提交 a4e857a8 编写于 作者: R robot-clickhouse

Backport #19617 to 20.12: Fix function neighbor for LowCardinality argument.

上级 de933777
......@@ -50,6 +50,10 @@ public:
bool useDefaultImplementationForConstants() const override { return false; }
/// We do not use default implementation for LowCardinality because this is not a pure function.
/// If used, optimization for LC may execute function only for dictionary, which gives wrong result.
bool useDefaultImplementationForLowCardinalityColumns() const override { return false; }
DataTypePtr getReturnTypeImpl(const DataTypes & arguments) const override
{
size_t number_of_arguments = arguments.size();
......
0
0
0 0 0
1 1 1
2 2 2
3 3 3
4 4 4
0 0 0
1 1 1
2 2 2
┌─rowNr─┬─val_string─┬─str_m1───┬─str_p1───┬─val_low──┬─low_m1───┬─low_p1───┐
│ 1 │ String 1 │ │ String 1 │ String 1 │ │ String 1 │
│ 2 │ String 1 │ String 1 │ String 2 │ String 1 │ String 1 │ String 2 │
│ 3 │ String 2 │ String 1 │ │ String 2 │ String 1 │ │
└───────┴────────────┴──────────┴──────────┴──────────┴──────────┴──────────┘
SELECT
neighbor(n, -2) AS int,
neighbor(s, -2) AS str,
neighbor(lcs, -2) AS lowCstr
FROM
(
SELECT
number % 5 AS n,
toString(n) AS s,
CAST(s, 'LowCardinality(String)') AS lcs
FROM numbers(10)
);
drop table if exists neighbor_test;
CREATE TABLE neighbor_test
(
`rowNr` UInt8,
`val_string` String,
`val_low` LowCardinality(String)
)
ENGINE = MergeTree
PARTITION BY tuple()
ORDER BY rowNr;
INSERT INTO neighbor_test VALUES (1, 'String 1', 'String 1'), (2, 'String 1', 'String 1'), (3, 'String 2', 'String 2');
SELECT
rowNr,
val_string,
neighbor(val_string, -1) AS str_m1,
neighbor(val_string, 1) AS str_p1,
val_low,
neighbor(val_low, -1) AS low_m1,
neighbor(val_low, 1) AS low_p1
FROM
(
SELECT *
FROM neighbor_test
ORDER BY val_string ASC
) format PrettyCompact;
drop table if exists neighbor_test;
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册