Skip to content

Commit

Permalink
Merge index fetch support for spoint3 into main files
Browse files Browse the repository at this point in the history
So far, the function backing index only fetches on spoint3 gist indexes
was already always compiled, but only added to the operator class for
PG9.5+, and only when special code in the Makefile was uncommented. We
are well past 9.5, and the feature works just fine, so load it
unconditionally (assuming no one used it in production yet, ADD FUNCTION
will fail when executed twice). Version bumped since we add a new
function to the opclass.
  • Loading branch information
df7cb committed Oct 2, 2023
1 parent 2a2f70e commit c2a2351
Show file tree
Hide file tree
Showing 10 changed files with 85 additions and 103 deletions.
13 changes: 0 additions & 13 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,6 @@ ifneq ($(USE_HEALPIX),0)
REGRESS += healpix moc mocautocast
endif

REGRESS_9_5 = index_9.5 # experimental for spoint3

TESTS = init_test tables points euler circle line ellipse poly path box \
index contains_ops contains_ops_compat bounding_box_gist gnomo \
epochprop contains overlaps spoint_brin sbox_brin
Expand Down Expand Up @@ -84,8 +82,6 @@ endif

PGS_SQL += pgs_epochprop.sql

PGS_SQL_9_5 = pgs_9.5.sql # experimental for spoint3

ifdef USE_PGXS
ifndef PG_CONFIG
PG_CONFIG = pg_config
Expand All @@ -112,18 +108,9 @@ endif
healpix_bare/healpix_bare.o : healpix_bare/healpix_bare.c
$(COMPILE.c) -Wno-declaration-after-statement -o $@ $^

# experimental for spoint3
pg_version := $(word 2,$(shell $(PG_CONFIG) --version))
pg_version_9_5_plus = $(if $(filter-out 9.1% 9.2% 9.3% 9.4%,$(pg_version)),y,n)
has_explain_summary = $(if $(filter-out 9.%,$(pg_version)),y,n)

## the use of spoint 3 is too experimental and preliminary:
#ifeq ($(pg_version_9_5_plus),y)
# REGRESS += $(REGRESS_9_5)
# TESTS += $(REGRESS_9_5)
# PGS_SQL += $(PGS_SQL_9_5)
#endif

crushtest: REGRESS += $(CRUSH_TESTS)
crushtest: installcheck

Expand Down
61 changes: 61 additions & 0 deletions expected/index.out
Original file line number Diff line number Diff line change
Expand Up @@ -134,3 +134,64 @@ SELECT count(*) FROM spheretmp4 WHERE l && scircle '<(1,1),0.3>' ;
40
(1 row)

-- test spoint3 operator class with and without index-only scan
SET enable_bitmapscan = OFF;
SET enable_indexonlyscan = ON;
EXPLAIN (COSTS OFF) SELECT count(*) FROM spheretmp1b WHERE p <@ scircle '<(1,1),0.3>';
QUERY PLAN
--------------------------------------------------------
Aggregate
-> Index Only Scan using spoint3_idx on spheretmp1b
Index Cond: (p <@ '<(1 , 1) , 0.3>'::scircle)
(3 rows)

SELECT count(*) FROM spheretmp1b WHERE p <@ scircle '<(1,1),0.3>';
count
-------
32
(1 row)

EXPLAIN (COSTS OFF) SELECT count(*) FROM spheretmp1b WHERE p = spoint '(3.09 , 1.25)';
QUERY PLAN
--------------------------------------------------------
Aggregate
-> Index Only Scan using spoint3_idx on spheretmp1b
Index Cond: (p = '(3.09 , 1.25)'::spoint)
(3 rows)

SELECT count(*) FROM spheretmp1b WHERE p = spoint '(3.09 , 1.25)';
count
-------
4
(1 row)

SET enable_bitmapscan = ON;
SET enable_indexonlyscan = OFF;
EXPLAIN (COSTS OFF) SELECT count(*) FROM spheretmp1b WHERE p <@ scircle '<(1,1),0.3>';
QUERY PLAN
-------------------------------------------------------
Aggregate
-> Index Scan using spoint3_idx on spheretmp1b
Index Cond: (p <@ '<(1 , 1) , 0.3>'::scircle)
(3 rows)

SELECT count(*) FROM spheretmp1b WHERE p <@ scircle '<(1,1),0.3>';
count
-------
32
(1 row)

EXPLAIN (COSTS OFF) SELECT count(*) FROM spheretmp1b WHERE p = spoint '(3.09 , 1.25)';
QUERY PLAN
---------------------------------------------------
Aggregate
-> Index Scan using spoint3_idx on spheretmp1b
Index Cond: (p = '(3.09 , 1.25)'::spoint)
(3 rows)

SELECT count(*) FROM spheretmp1b WHERE p = spoint '(3.09 , 1.25)';
count
-------
4
(1 row)

62 changes: 0 additions & 62 deletions expected/index_9.5.out

This file was deleted.

4 changes: 2 additions & 2 deletions expected/init_test_healpix.out.in
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
psql:pg_sphere.test.sql:9684: NOTICE: return type smoc is only a shell
psql:pg_sphere.test.sql:9690: NOTICE: argument type smoc is only a shell
psql:pg_sphere.test.sql:9685: NOTICE: return type smoc is only a shell
psql:pg_sphere.test.sql:9691: NOTICE: argument type smoc is only a shell
Empty file removed index_9.5
Empty file.
7 changes: 0 additions & 7 deletions pgs_9.5.sql.in

This file was deleted.

1 change: 1 addition & 0 deletions pgs_gist_spoint3.sql.in
Original file line number Diff line number Diff line change
Expand Up @@ -66,4 +66,5 @@ CREATE OPERATOR CLASS spoint3
FUNCTION 6 g_spoint3_picksplit (internal, internal),
FUNCTION 7 g_spoint3_same (bytea, bytea, internal),
FUNCTION 8 g_spoint3_distance (internal, internal, int4, oid),
FUNCTION 9 (spoint, spoint) g_spoint3_fetch (internal),
STORAGE pointkey;
17 changes: 17 additions & 0 deletions sql/index.sql
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,20 @@ SELECT count(*) FROM spheretmp4 WHERE l @ scircle '<(1,1),0.3>' ;

SELECT count(*) FROM spheretmp4 WHERE l && scircle '<(1,1),0.3>' ;

-- test spoint3 operator class with and without index-only scan

SET enable_bitmapscan = OFF;
SET enable_indexonlyscan = ON;

EXPLAIN (COSTS OFF) SELECT count(*) FROM spheretmp1b WHERE p <@ scircle '<(1,1),0.3>';
SELECT count(*) FROM spheretmp1b WHERE p <@ scircle '<(1,1),0.3>';
EXPLAIN (COSTS OFF) SELECT count(*) FROM spheretmp1b WHERE p = spoint '(3.09 , 1.25)';
SELECT count(*) FROM spheretmp1b WHERE p = spoint '(3.09 , 1.25)';

SET enable_bitmapscan = ON;
SET enable_indexonlyscan = OFF;

EXPLAIN (COSTS OFF) SELECT count(*) FROM spheretmp1b WHERE p <@ scircle '<(1,1),0.3>';
SELECT count(*) FROM spheretmp1b WHERE p <@ scircle '<(1,1),0.3>';
EXPLAIN (COSTS OFF) SELECT count(*) FROM spheretmp1b WHERE p = spoint '(3.09 , 1.25)';
SELECT count(*) FROM spheretmp1b WHERE p = spoint '(3.09 , 1.25)';
18 changes: 0 additions & 18 deletions sql/index_9.5.sql

This file was deleted.

5 changes: 4 additions & 1 deletion upgrade_scripts/pg_sphere--1.3.1--1.3.2.sql.in
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
-- Nothing to upgrade in the schema
-- add "fetch" support function to enable index-only scans for spoint3

ALTER OPERATOR FAMILY spoint3 USING gist ADD
FUNCTION 9 (spoint, spoint) g_spoint3_fetch (internal);

0 comments on commit c2a2351

Please sign in to comment.