Skip to content

Commit 3854a70

Browse files
committed
review fixes
1 parent af383c8 commit 3854a70

3 files changed

Lines changed: 37 additions & 3 deletions

File tree

tsl/src/nodes/vector_agg/exec.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,14 @@
4343
*/
4444
typedef struct ExprCacheEntry
4545
{
46-
Expr *key;
46+
Expr const *key;
4747
CompressedColumnValues result; /* DT_Invalid means not yet computed */
4848
uint32 status; /* required by simplehash */
4949
} ExprCacheEntry;
5050

5151
#define SH_PREFIX expr_cache
5252
#define SH_ELEMENT_TYPE ExprCacheEntry
53-
#define SH_KEY_TYPE Expr *
53+
#define SH_KEY_TYPE Expr const *
5454
#define SH_KEY key
5555
#define SH_HASH_KEY(tb, key) murmurhash64((uint64) (key))
5656
#define SH_EQUAL(tb, a, b) ((a) == (b))
@@ -674,7 +674,9 @@ vector_slot_evaluate_expression(DecompressContext *dcontext, TupleTableSlot *slo
674674
* broader result is safe to cache, because it has the correct values
675675
* for all rows of a narrower result.
676676
*/
677-
cache_entry = expr_cache_lookup(expr_cache, (Expr *) argument);
677+
cache_entry = expr_cache_lookup(expr_cache, argument);
678+
679+
Assert(!contain_volatile_functions((Node *) argument));
678680
}
679681

680682
if (cache_entry != NULL && cache_entry->result.decompression_type != DT_Invalid)

tsl/test/expected/vector_agg_expr.out

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2120,6 +2120,25 @@ select sum(abs(v - 500)), count(abs(v - 500)) from aggexpr where abs(v) > 3 AND
21202120
-------+-------
21212121
14820 | 30
21222122

2123+
-- CASE statement with cached parts
2124+
select sum(case when i > 0 then abs(v)::int2 else length(x)::int4 end)
2125+
from aggexpr
2126+
where abs(v) < 10 and length(x) < 10
2127+
;
2128+
sum
2129+
-----
2130+
120
2131+
2132+
-- CASE statement that is itself cached
2133+
select sum(x) from (
2134+
select (case when i > 0 then abs(v)::int2 else length(x)::int4 end) as x
2135+
from aggexpr) t
2136+
where x > 0
2137+
;
2138+
sum
2139+
---------
2140+
3321885
2141+
21232142
reset timescaledb.debug_require_vector_agg;
21242143
reset timescaledb.enable_vectorized_aggregation;
21252144
-- Some CASE statements are vectorized.

tsl/test/sql/vector_agg_expr.sql

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,19 @@ select sum((b = (i > 0))::int), count(b = (i > 0)) from aggexpr;
225225
-- Multiple qual evaluation with caching.
226226
select sum(abs(v - 500)), count(abs(v - 500)) from aggexpr where abs(v) > 3 AND abs(v) < 9;
227227

228+
-- CASE statement with cached parts
229+
select sum(case when i > 0 then abs(v)::int2 else length(x)::int4 end)
230+
from aggexpr
231+
where abs(v) < 10 and length(x) < 10
232+
;
233+
234+
-- CASE statement that is itself cached
235+
select sum(x) from (
236+
select (case when i > 0 then abs(v)::int2 else length(x)::int4 end) as x
237+
from aggexpr) t
238+
where x > 0
239+
;
240+
228241
reset timescaledb.debug_require_vector_agg;
229242
reset timescaledb.enable_vectorized_aggregation;
230243

0 commit comments

Comments
 (0)