mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-24 10:40:49 +00:00
Use 0x80000000 as unmatched event
This commit is contained in:
parent
841d9cbb09
commit
753c32ee13
@ -49,8 +49,8 @@ AggregateFunctionPtr createAggregateFunctionSequenceNextNode(const std::string &
|
|||||||
|
|
||||||
if (argument_types.size() < 3)
|
if (argument_types.size() < 3)
|
||||||
throw Exception("Aggregate function " + name + " requires at least three arguments.", ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH);
|
throw Exception("Aggregate function " + name + " requires at least three arguments.", ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH);
|
||||||
else if (argument_types.size() > 2 + 32)
|
else if (argument_types.size() > 2 + 31)
|
||||||
throw Exception("Aggregate function " + name + " requires at most 34(timestamp, value_column, 32 events) arguments.", ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH);
|
throw Exception("Aggregate function " + name + " requires at most 34(timestamp, value_column, 31 events) arguments.", ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH);
|
||||||
|
|
||||||
for (const auto i : ext::range(2, argument_types.size()))
|
for (const auto i : ext::range(2, argument_types.size()))
|
||||||
{
|
{
|
||||||
|
@ -106,7 +106,7 @@ struct SequenceNextNodeGeneralData
|
|||||||
{
|
{
|
||||||
if constexpr (Descending)
|
if constexpr (Descending)
|
||||||
return lhs->event_time == rhs->event_time ?
|
return lhs->event_time == rhs->event_time ?
|
||||||
lhs->events_bitset < rhs->events_bitset: lhs->event_time > rhs->event_time;
|
lhs->events_bitset < rhs->events_bitset : lhs->event_time > rhs->event_time;
|
||||||
else
|
else
|
||||||
return lhs->event_time == rhs->event_time ?
|
return lhs->event_time == rhs->event_time ?
|
||||||
lhs->events_bitset < rhs->events_bitset : lhs->event_time < rhs->event_time;
|
lhs->events_bitset < rhs->events_bitset : lhs->event_time < rhs->event_time;
|
||||||
@ -182,6 +182,7 @@ public:
|
|||||||
for (UInt8 i = 0; i < events_size; ++i)
|
for (UInt8 i = 0; i < events_size; ++i)
|
||||||
if (assert_cast<const ColumnVector<UInt8> *>(columns[2 + i])->getData()[row_num])
|
if (assert_cast<const ColumnVector<UInt8> *>(columns[2 + i])->getData()[row_num])
|
||||||
events_bitset += (1 << i);
|
events_bitset += (1 << i);
|
||||||
|
if (events_bitset == 0) events_bitset = 0x80000000; // Any events are not matched.
|
||||||
|
|
||||||
node->event_time = timestamp;
|
node->event_time = timestamp;
|
||||||
node->events_bitset = events_bitset;
|
node->events_bitset = events_bitset;
|
||||||
|
@ -245,8 +245,8 @@
|
|||||||
(1, B->A->A) 5 \N
|
(1, B->A->A) 5 \N
|
||||||
(1, B->A->A) 6 \N
|
(1, B->A->A) 6 \N
|
||||||
(0, A) id >= 10 10 B
|
(0, A) id >= 10 10 B
|
||||||
(0, A) id >= 10 10 C
|
(0, A->B) id >= 10 10 C
|
||||||
(0, A) id >= 10 10 D
|
(0, B->C) id >= 10 10 D
|
||||||
(0, A) id >= 10 10 B
|
(0, C->) id >= 10 10 B
|
||||||
(0, A) id >= 10 10 B
|
(0, D->C) id >= 10 10 B
|
||||||
(0, A) id >= 10 10 A
|
(0, C->B) id >= 10 10 A
|
||||||
|
@ -61,6 +61,15 @@ SELECT '(0, A) id >= 10', id, sequenceNextNode(1)(dt, action, action = 'C') AS n
|
|||||||
SELECT '(0, A) id >= 10', id, sequenceNextNode(1)(dt, action, action = 'D', action = 'C') AS next_node FROM test_sequenceNextNode_Nullable WHERE id >= 10 GROUP BY id ORDER BY id;
|
SELECT '(0, A) id >= 10', id, sequenceNextNode(1)(dt, action, action = 'D', action = 'C') AS next_node FROM test_sequenceNextNode_Nullable WHERE id >= 10 GROUP BY id ORDER BY id;
|
||||||
SELECT '(0, A) id >= 10', id, sequenceNextNode(1)(dt, action, action = 'C', action = 'B') AS next_node FROM test_sequenceNextNode_Nullable WHERE id >= 10 GROUP BY id ORDER BY id;
|
SELECT '(0, A) id >= 10', id, sequenceNextNode(1)(dt, action, action = 'C', action = 'B') AS next_node FROM test_sequenceNextNode_Nullable WHERE id >= 10 GROUP BY id ORDER BY id;
|
||||||
|
|
||||||
|
SELECT '(0, A) id = 11', count() FROM (SELECT id, sequenceNextNode(0)(dt, action, action = 'A') AS next_node FROM test_sequenceNextNode WHERE id = 11 GROUP BY id HAVING next_node in ('B', 'C', 'D'));
|
||||||
|
SELECT '(0, C) id = 11', count() FROM (SELECT id, sequenceNextNode(0)(dt, action, action = 'C') AS next_node FROM test_sequenceNextNode WHERE id = 11 GROUP BY id HAVING next_node in ('B', 'A', 'D'));
|
||||||
|
SELECT '(0, B->C) id = 11', count() FROM (SELECT id, sequenceNextNode(0)(dt, action, action = 'B', action ='C') AS next_node FROM test_sequenceNextNode WHERE id = 11 GROUP BY id HAVING next_node in ('A', 'D'));
|
||||||
|
SELECT '(0, A->B->C) id = 11', count() FROM (SELECT id, sequenceNextNode(0)(dt, action, action = 'A', action = 'B', action = 'C') AS next_node FROM test_sequenceNextNode WHERE id = 11 GROUP BY id HAVING next_node in ('D'));
|
||||||
|
SELECT '(0, A) id = 11', count() FROM (SELECT id, sequenceNextNode(1)(dt, action, action = 'A') AS next_node FROM test_sequenceNextNode WHERE id = 11 GROUP BY id HAVING next_node in ('B', 'C', 'D'));
|
||||||
|
SELECT '(0, C) id = 11', count() FROM (SELECT id, sequenceNextNode(1)(dt, action, action = 'C') AS next_node FROM test_sequenceNextNode WHERE id = 11 GROUP BY id HAVING next_node in ('B', 'A', 'D'));
|
||||||
|
SELECT '(0, C->B) id = 11', count() FROM (SELECT id, sequenceNextNode(1)(dt, action, action = 'C', action ='B') AS next_node FROM test_sequenceNextNode WHERE id = 11 GROUP BY id HAVING next_node in ('A', 'D'));
|
||||||
|
SELECT '(0, C->B->A) id = 11', count() FROM (SELECT id, sequenceNextNode(1)(dt, action, action = 'C', action = 'B', action = 'A') AS next_node FROM test_sequenceNextNode WHERE id = 11 GROUP BY id HAVING next_node in ('D'));
|
||||||
|
|
||||||
DROP TABLE IF EXISTS test_sequenceNextNode_Nullable;
|
DROP TABLE IF EXISTS test_sequenceNextNode_Nullable;
|
||||||
|
|
||||||
-- The same testcases for a non-null type.
|
-- The same testcases for a non-null type.
|
||||||
@ -120,11 +129,25 @@ INSERT INTO test_sequenceNextNode values ('1970-01-01 09:00:02',10,'B');
|
|||||||
INSERT INTO test_sequenceNextNode values ('1970-01-01 09:00:03',10,'C');
|
INSERT INTO test_sequenceNextNode values ('1970-01-01 09:00:03',10,'C');
|
||||||
INSERT INTO test_sequenceNextNode values ('1970-01-01 09:00:04',10,'D');
|
INSERT INTO test_sequenceNextNode values ('1970-01-01 09:00:04',10,'D');
|
||||||
|
|
||||||
SELECT '(0, A) id >= 10', id, sequenceNextNode(0)(dt, action, action = 'A') AS next_node FROM test_sequenceNextNode WHERE id >= 10 GROUP BY id ORDER BY id;
|
SELECT '(0, A) id = 10', id, sequenceNextNode(0)(dt, action, action = 'A') AS next_node FROM test_sequenceNextNode WHERE id = 10 GROUP BY id;
|
||||||
SELECT '(0, A) id >= 10', id, sequenceNextNode(0)(dt, action, action = 'A', action = 'B') AS next_node FROM test_sequenceNextNode WHERE id >= 10 GROUP BY id ORDER BY id;
|
SELECT '(0, A->B) id = 10', id, sequenceNextNode(0)(dt, action, action = 'A', action = 'B') AS next_node FROM test_sequenceNextNode WHERE id = 10 GROUP BY id;
|
||||||
SELECT '(0, A) id >= 10', id, sequenceNextNode(0)(dt, action, action = 'B', action = 'C') AS next_node FROM test_sequenceNextNode WHERE id >= 10 GROUP BY id ORDER BY id;
|
SELECT '(0, B->C) id = 10', id, sequenceNextNode(0)(dt, action, action = 'B', action = 'C') AS next_node FROM test_sequenceNextNode WHERE id = 10 GROUP BY id;
|
||||||
SELECT '(0, A) id >= 10', id, sequenceNextNode(1)(dt, action, action = 'C') AS next_node FROM test_sequenceNextNode WHERE id >= 10 GROUP BY id ORDER BY id;
|
SELECT '(0, C) id = 10', id, sequenceNextNode(1)(dt, action, action = 'C') AS next_node FROM test_sequenceNextNode WHERE id = 10 GROUP BY id;
|
||||||
SELECT '(0, A) id >= 10', id, sequenceNextNode(1)(dt, action, action = 'D', action = 'C') AS next_node FROM test_sequenceNextNode WHERE id >= 10 GROUP BY id ORDER BY id;
|
SELECT '(0, D->C) id = 10', id, sequenceNextNode(1)(dt, action, action = 'D', action = 'C') AS next_node FROM test_sequenceNextNode WHERE id = 10 GROUP BY id;
|
||||||
SELECT '(0, A) id >= 10', id, sequenceNextNode(1)(dt, action, action = 'C', action = 'B') AS next_node FROM test_sequenceNextNode WHERE id >= 10 GROUP BY id ORDER BY id;
|
SELECT '(0, C->B) id = 10', id, sequenceNextNode(1)(dt, action, action = 'C', action = 'B') AS next_node FROM test_sequenceNextNode WHERE id = 10 GROUP BY id;
|
||||||
|
|
||||||
|
INSERT INTO test_sequenceNextNode values ('1970-01-01 09:00:01',11,'A');
|
||||||
|
INSERT INTO test_sequenceNextNode values ('1970-01-01 09:00:01',11,'B');
|
||||||
|
INSERT INTO test_sequenceNextNode values ('1970-01-01 09:00:01',11,'C');
|
||||||
|
INSERT INTO test_sequenceNextNode values ('1970-01-01 09:00:01',11,'D');
|
||||||
|
|
||||||
|
SELECT '(0, A) id = 11', count() FROM (SELECT id, sequenceNextNode(0)(dt, action, action = 'A') AS next_node FROM test_sequenceNextNode WHERE id = 11 GROUP BY id HAVING next_node in ('B', 'C', 'D'));
|
||||||
|
SELECT '(0, C) id = 11', count() FROM (SELECT id, sequenceNextNode(0)(dt, action, action = 'C') AS next_node FROM test_sequenceNextNode WHERE id = 11 GROUP BY id HAVING next_node in ('B', 'A', 'D'));
|
||||||
|
SELECT '(0, B->C) id = 11', count() FROM (SELECT id, sequenceNextNode(0)(dt, action, action = 'B', action ='C') AS next_node FROM test_sequenceNextNode WHERE id = 11 GROUP BY id HAVING next_node in ('A', 'D'));
|
||||||
|
SELECT '(0, A->B->C) id = 11', count() FROM (SELECT id, sequenceNextNode(0)(dt, action, action = 'A', action = 'B', action = 'C') AS next_node FROM test_sequenceNextNode WHERE id = 11 GROUP BY id HAVING next_node in ('D'));
|
||||||
|
SELECT '(0, A) id = 11', count() FROM (SELECT id, sequenceNextNode(1)(dt, action, action = 'A') AS next_node FROM test_sequenceNextNode WHERE id = 11 GROUP BY id HAVING next_node in ('B', 'C', 'D'));
|
||||||
|
SELECT '(0, C) id = 11', count() FROM (SELECT id, sequenceNextNode(1)(dt, action, action = 'C') AS next_node FROM test_sequenceNextNode WHERE id = 11 GROUP BY id HAVING next_node in ('B', 'A', 'D'));
|
||||||
|
SELECT '(0, C->B) id = 11', count() FROM (SELECT id, sequenceNextNode(1)(dt, action, action = 'C', action ='B') AS next_node FROM test_sequenceNextNode WHERE id = 11 GROUP BY id HAVING next_node in ('A', 'D'));
|
||||||
|
SELECT '(0, C->B->A) id = 11', count() FROM (SELECT id, sequenceNextNode(1)(dt, action, action = 'C', action = 'B', action = 'A') AS next_node FROM test_sequenceNextNode WHERE id = 11 GROUP BY id HAVING next_node in ('D'));
|
||||||
|
|
||||||
DROP TABLE IF EXISTS test_sequenceNextNode;
|
DROP TABLE IF EXISTS test_sequenceNextNode;
|
||||||
|
Loading…
Reference in New Issue
Block a user