Skip to content

Commit

Permalink
Merge pull request #74 from cybertec-postgresql/spoint3_fetch
Browse files Browse the repository at this point in the history
Spoint3 fetch
  • Loading branch information
vitcpp authored Oct 4, 2023
2 parents 1066514 + c2a2351 commit 73a07e3
Show file tree
Hide file tree
Showing 13 changed files with 89 additions and 102 deletions.
19 changes: 5 additions & 14 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ DATA_built = $(RELEASE_SQL) \
pg_sphere--1.2.1--1.2.2.sql \
pg_sphere--1.2.2--1.2.3.sql \
pg_sphere--1.2.3--1.3.0.sql \
pg_sphere--1.3.0--1.3.1.sql
pg_sphere--1.3.0--1.3.1.sql \
pg_sphere--1.3.1--1.3.2.sql

DOCS = README.pg_sphere COPYRIGHT.pg_sphere
REGRESS = init tables points euler circle line ellipse poly path box index \
Expand All @@ -41,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 @@ -83,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 @@ -111,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 Expand Up @@ -258,6 +246,9 @@ pg_sphere--1.2.3--1.3.0.sql: pgs_brin.sql.in
pg_sphere--1.3.0--1.3.1.sql:
cat upgrade_scripts/$@.in > $@

pg_sphere--1.3.1--1.3.2.sql:
cat upgrade_scripts/$@.in > $@

# end of local stuff

src/sscan.o : src/sparse.c
Expand Down
2 changes: 1 addition & 1 deletion Makefile.common.mk
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
#----------------------------------------------------------------------------

EXTENSION := pg_sphere
PGSPHERE_VERSION := 1.3.1
PGSPHERE_VERSION := 1.3.2
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.

2 changes: 1 addition & 1 deletion expected/init.out
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ CREATE EXTENSION pg_sphere;
select pg_sphere_version();
pg_sphere_version
-------------------
1.3.1
1.3.2
(1 row)

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.
File renamed without changes.
2 changes: 1 addition & 1 deletion pg_sphere.control
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# pg_sphere extension
comment = 'spherical objects with useful functions, operators and index support'
default_version = '1.3.1'
default_version = '1.3.2'
module_pathname = '$libdir/pg_sphere'
relocatable = true
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.

Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
-- add functionality that is only available for PostgreSQL 9.5+


-- add "fetch" support function to enable index-only scans for spoint3

ALTER OPERATOR FAMILY spoint3 USING gist ADD
Expand Down

0 comments on commit 73a07e3

Please sign in to comment.