mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-01-14 09:12:57 +00:00
fix(mito): avoid caching empty batches in row group (#4652)
* fix: avoid caching empty batches in row group * fix: clippy * Update tests/cases/standalone/common/select/last_value.sql * fix: sqlness
This commit is contained in:
@@ -213,6 +213,10 @@ impl RowGroupLastRowReader {
|
||||
/// Updates row group's last row cache if cache manager is present.
|
||||
fn maybe_update_cache(&mut self) {
|
||||
if let Some(cache) = &self.cache_manager {
|
||||
if self.yielded_batches.is_empty() {
|
||||
// we always expect that row groups yields batches.
|
||||
return;
|
||||
}
|
||||
let value = Arc::new(SelectorResultValue {
|
||||
result: std::mem::take(&mut self.yielded_batches),
|
||||
projection: self
|
||||
|
||||
69
tests/cases/standalone/common/select/last_value.result
Normal file
69
tests/cases/standalone/common/select/last_value.result
Normal file
@@ -0,0 +1,69 @@
|
||||
create table t (
|
||||
ts timestamp time index,
|
||||
host string primary key,
|
||||
not_pk string,
|
||||
val double,
|
||||
) with (append_mode='true');
|
||||
|
||||
Affected Rows: 0
|
||||
|
||||
insert into t values
|
||||
(0, 'a', '🌕', 1.0),
|
||||
(1, 'b', '🌖', 2.0),
|
||||
(2, 'a', '🌗', 3.0),
|
||||
(3, 'c', '🌘', 4.0),
|
||||
(4, 'a', '🌑', 5.0),
|
||||
(5, 'b', '🌒', 6.0),
|
||||
(6, 'a', '🌓', 7.0),
|
||||
(7, 'c', '🌔', 8.0),
|
||||
(8, 'd', '🌕', 9.0);
|
||||
|
||||
Affected Rows: 9
|
||||
|
||||
admin flush_table('t');
|
||||
|
||||
+------------------------+
|
||||
| ADMIN flush_table('t') |
|
||||
+------------------------+
|
||||
| 0 |
|
||||
+------------------------+
|
||||
|
||||
select
|
||||
last_value(host order by ts),
|
||||
last_value(not_pk order by ts),
|
||||
last_value(val order by ts)
|
||||
from t
|
||||
group by host
|
||||
order by host;
|
||||
|
||||
+---------------------------------------------------+-----------------------------------------------------+--------------------------------------------------+
|
||||
| last_value(t.host) ORDER BY [t.ts ASC NULLS LAST] | last_value(t.not_pk) ORDER BY [t.ts ASC NULLS LAST] | last_value(t.val) ORDER BY [t.ts ASC NULLS LAST] |
|
||||
+---------------------------------------------------+-----------------------------------------------------+--------------------------------------------------+
|
||||
| a | 🌓 | 7.0 |
|
||||
| b | 🌒 | 6.0 |
|
||||
| c | 🌔 | 8.0 |
|
||||
| d | 🌕 | 9.0 |
|
||||
+---------------------------------------------------+-----------------------------------------------------+--------------------------------------------------+
|
||||
|
||||
-- repeat the query again, ref: https://github.com/GreptimeTeam/greptimedb/issues/4650
|
||||
select
|
||||
last_value(host order by ts),
|
||||
last_value(not_pk order by ts),
|
||||
last_value(val order by ts)
|
||||
from t
|
||||
group by host
|
||||
order by host;
|
||||
|
||||
+---------------------------------------------------+-----------------------------------------------------+--------------------------------------------------+
|
||||
| last_value(t.host) ORDER BY [t.ts ASC NULLS LAST] | last_value(t.not_pk) ORDER BY [t.ts ASC NULLS LAST] | last_value(t.val) ORDER BY [t.ts ASC NULLS LAST] |
|
||||
+---------------------------------------------------+-----------------------------------------------------+--------------------------------------------------+
|
||||
| a | 🌓 | 7.0 |
|
||||
| b | 🌒 | 6.0 |
|
||||
| c | 🌔 | 8.0 |
|
||||
| d | 🌕 | 9.0 |
|
||||
+---------------------------------------------------+-----------------------------------------------------+--------------------------------------------------+
|
||||
|
||||
drop table t;
|
||||
|
||||
Affected Rows: 0
|
||||
|
||||
38
tests/cases/standalone/common/select/last_value.sql
Normal file
38
tests/cases/standalone/common/select/last_value.sql
Normal file
@@ -0,0 +1,38 @@
|
||||
create table t (
|
||||
ts timestamp time index,
|
||||
host string primary key,
|
||||
not_pk string,
|
||||
val double,
|
||||
) with (append_mode='true');
|
||||
|
||||
insert into t values
|
||||
(0, 'a', '🌕', 1.0),
|
||||
(1, 'b', '🌖', 2.0),
|
||||
(2, 'a', '🌗', 3.0),
|
||||
(3, 'c', '🌘', 4.0),
|
||||
(4, 'a', '🌑', 5.0),
|
||||
(5, 'b', '🌒', 6.0),
|
||||
(6, 'a', '🌓', 7.0),
|
||||
(7, 'c', '🌔', 8.0),
|
||||
(8, 'd', '🌕', 9.0);
|
||||
|
||||
admin flush_table('t');
|
||||
|
||||
select
|
||||
last_value(host order by ts),
|
||||
last_value(not_pk order by ts),
|
||||
last_value(val order by ts)
|
||||
from t
|
||||
group by host
|
||||
order by host;
|
||||
|
||||
-- repeat the query again, ref: https://github.com/GreptimeTeam/greptimedb/issues/4650
|
||||
select
|
||||
last_value(host order by ts),
|
||||
last_value(not_pk order by ts),
|
||||
last_value(val order by ts)
|
||||
from t
|
||||
group by host
|
||||
order by host;
|
||||
|
||||
drop table t;
|
||||
Reference in New Issue
Block a user