Skip to content

Commit 865c827

Browse files
authored
Merge pull request #48 from citusdata/bump-2.4.0
2 parents 9b77e07 + 4bb5cea commit 865c827

File tree

11 files changed

+146
-11
lines changed

11 files changed

+146
-11
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@
3636
copy_data.out
3737

3838
# Generated migration scripts
39-
topn--?.?.?.sql
39+
topn--*.sql
40+
!update/topn--*.sql
4041

4142
# Sample data
4243
customer_reviews_????.csv

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ matrix:
1313
- env: PGVERSION=11
1414
- env: PGVERSION=12
1515
- env: PGVERSION=13
16+
- env: PGVERSION=14
1617
before_install:
1718
- bash test_data_provider
1819
- git clone -b v0.7.13 --depth 1 https://github.com/citusdata/tools.git

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
### topn v2.4.0 (September 09, 2021) ###
2+
3+
* Adds PostgreSQL 14 support
4+
15
### topn v2.3.1 (November 27, 2020) ###
26

37
* Adds PostgreSQL 13 support

Makefile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
MODULES = topn
44
EXTENSION = topn
5-
EXTVERSIONS = 2.0.0 2.1.0 2.2.0 2.2.1 2.2.2 2.3.0 2.3.1
5+
EXTVERSIONS = 2.0.0 2.1.0 2.2.0 2.2.1 2.2.2 2.3.0 2.3.1 2.4.0
66
DATA = $(wildcard $(EXTENSION)--*--*.sql)
77
DATA_built = $(foreach v,$(EXTVERSIONS),$(EXTENSION)--$(v).sql)
88
PG_CONFIG ?= pg_config
@@ -32,6 +32,8 @@ $(EXTENSION)--2.3.0.sql: $(EXTENSION)--2.2.2.sql $(EXTENSION)--2.2.2--2.3.0.sql
3232
cat $^ > $@
3333
$(EXTENSION)--2.3.1.sql: $(EXTENSION)--2.3.0.sql $(EXTENSION)--2.3.0--2.3.1.sql
3434
cat $^ > $@
35+
$(EXTENSION)--2.4.0.sql: $(EXTENSION)--2.3.1.sql $(EXTENSION)--2.3.1--2.4.0.sql
36+
cat $^ > $@
3537

3638
EXTRA_CLEAN += topn--*.sql -r $(RPM_BUILD_ROOT)
3739

expected/customer_reviews_query.out

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
SHOW server_version \gset
2-
SELECT substring(:'server_version', '\d+')::int >= 13;
2+
SELECT substring(:'server_version', '\d+')::int = 14;
33
?column?
44
----------
55
t
66
(1 row)
77

8+
SELECT substring(:'server_version', '\d+')::int = 13;
9+
?column?
10+
----------
11+
f
12+
(1 row)
13+
814
-- Create table to insert summaries.
915
create table popular_products
1016
(
@@ -47,9 +53,9 @@ order by 2 DESC, 1;
4753
0671014730 | 572
4854
0743527550 | 572
4955
0375700757 | 555
50-
0871136791 | 553
56+
0871136791 | 555
5157
0679460691 | 551
52-
0375402926 | 548
58+
0375402926 | 550
5359
0613221583 | 536
5460
0812550293 | 536
5561
1575110458 | 536

expected/customer_reviews_query_0.out

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
SHOW server_version \gset
2-
SELECT substring(:'server_version', '\d+')::int >= 13;
2+
SELECT substring(:'server_version', '\d+')::int = 14;
33
?column?
44
----------
55
f
66
(1 row)
77

8+
SELECT substring(:'server_version', '\d+')::int = 13;
9+
?column?
10+
----------
11+
t
12+
(1 row)
13+
814
-- Create table to insert summaries.
915
create table popular_products
1016
(
@@ -47,9 +53,9 @@ order by 2 DESC, 1;
4753
0671014730 | 572
4854
0743527550 | 572
4955
0375700757 | 555
50-
0871136791 | 555
56+
0871136791 | 553
5157
0679460691 | 551
52-
0375402926 | 550
58+
0375402926 | 548
5359
0613221583 | 536
5460
0812550293 | 536
5561
1575110458 | 536
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
SHOW server_version \gset
2+
SELECT substring(:'server_version', '\d+')::int = 14;
3+
?column?
4+
----------
5+
f
6+
(1 row)
7+
8+
SELECT substring(:'server_version', '\d+')::int = 13;
9+
?column?
10+
----------
11+
f
12+
(1 row)
13+
14+
-- Create table to insert summaries.
15+
create table popular_products
16+
(
17+
review_summary jsonb,
18+
year double precision,
19+
month double precision
20+
);
21+
set topn.number_of_counters to 1000;
22+
-- Create different summaries by grouping the reviews according to their year and month.
23+
insert into
24+
popular_products(review_summary, year, month )
25+
select
26+
topn_add_agg(product_id),
27+
extract(year from review_date) as year,
28+
extract(month from review_date) as month
29+
from
30+
customer_reviews
31+
group by
32+
year,
33+
month;
34+
-- Create another table for the merged results.
35+
create table
36+
overall_result(merged_summary jsonb);
37+
-- Let's merge the summaries for the overall result and check top-20 items.
38+
insert into
39+
overall_result(merged_summary)
40+
select
41+
topn_union_agg(review_summary)
42+
from
43+
popular_products;
44+
select
45+
(topn(merged_summary, 20)).*
46+
from
47+
overall_result
48+
order by 2 DESC, 1;
49+
item | frequency
50+
------------+-----------
51+
0671003755 | 576
52+
0613033205 | 575
53+
0671014730 | 572
54+
0743527550 | 572
55+
0375700757 | 555
56+
0871136791 | 555
57+
0679460691 | 551
58+
0375402926 | 550
59+
0613221583 | 536
60+
0812550293 | 536
61+
1575110458 | 536
62+
1590073983 | 536
63+
1590073991 | 536
64+
0375402675 | 524
65+
0375403477 | 524
66+
0375703241 | 524
67+
0399143904 | 524
68+
0425170349 | 524
69+
0613222407 | 524
70+
0765342294 | 510
71+
(20 rows)
72+
73+
-- Test window functions
74+
CREATE TABLE daily_populars
75+
(
76+
date DATE,
77+
agg_data JSONB
78+
);
79+
INSERT INTO daily_populars
80+
SELECT
81+
date_trunc('day', review_date),
82+
topn_add_agg(product_id)
83+
FROM
84+
customer_reviews
85+
GROUP BY
86+
1;
87+
SELECT
88+
date,
89+
topn_union_agg(agg_data) OVER seven_days
90+
FROM
91+
daily_populars
92+
WINDOW
93+
seven_days AS (ORDER BY date ASC ROWS 6 PRECEDING)
94+
ORDER BY
95+
1
96+
LIMIT 5;
97+
date | topn_union_agg
98+
------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
99+
12-30-1970 | {"1551802538": 1, "1551803542": 1}
100+
06-19-1995 | {"0898624932": 1, "1551802538": 1, "1551803542": 1}
101+
06-23-1995 | {"0521469112": 1, "0898624932": 1, "1551802538": 1, "1551803542": 1}
102+
07-14-1995 | {"0521469112": 1, "0679722955": 1, "0898624932": 1, "1551802538": 1, "1551803542": 1}
103+
07-18-1995 | {"0195069056": 1, "0471114251": 1, "0517887290": 1, "0521469112": 1, "0679722955": 1, "0898624932": 1, "0962344788": 1, "1551802538": 1, "1551803542": 1, "1574531093": 1}
104+
(5 rows)
105+

sql/customer_reviews_query.sql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
SHOW server_version \gset
2-
SELECT substring(:'server_version', '\d+')::int >= 13;
2+
SELECT substring(:'server_version', '\d+')::int = 14;
3+
SELECT substring(:'server_version', '\d+')::int = 13;
34

45
-- Create table to insert summaries.
56
create table popular_products

topn.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -719,14 +719,20 @@ CreateTopnAggState(void)
719719
{
720720
int32 hashTableSize = 0;
721721
HASHCTL hashInfo;
722+
int flags = HASH_ELEM | HASH_CONTEXT;
722723

723724
hashTableSize = (NumberOfCounters / 0.75) + 1;
724725
memset(&hashInfo, 0, sizeof(hashInfo));
725726
hashInfo.keysize = MAX_KEYSIZE;
726727
hashInfo.entrysize = sizeof(FrequentTopnItem);
727728
hashInfo.hcxt = CurrentMemoryContext;
729+
730+
#if PG_VERSION_NUM >= 140000
731+
flags |= HASH_STRINGS;
732+
#endif
733+
728734
return (TopnAggState *) hash_create("Item Frequency Map", hashTableSize, &hashInfo,
729-
HASH_ELEM | HASH_CONTEXT);
735+
flags);
730736
}
731737

732738

topn.control

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# topn extension
22
comment = 'type for top-n JSONB'
3-
default_version = '2.3.1'
3+
default_version = '2.4.0'
44
module_pathname = '$libdir/topn'

0 commit comments

Comments
 (0)