This is an automated email from the git hooks/post-receive script. sebastic pushed a commit to branch master in repository postgis.
commit 049887b68c98af698b1a300c24c923d6ef764347 Author: Bas Couwenberg <[email protected]> Date: Tue Jan 31 08:18:50 2017 +0100 Imported Upstream version 2.3.2+dfsg --- ChangeLog | 79 ++++ NEWS | 36 +- README.postgis | 7 +- Version.config | 2 +- doc/release_notes.xml | 14 + extensions/address_standardizer/Makefile | 10 +- .../address_standardizer.control | 2 +- .../address_standardizer_data_us.control | 2 +- extensions/postgis/Makefile | 2 +- extensions/postgis/postgis.control | 2 +- extensions/postgis_sfcgal/Makefile | 2 +- extensions/postgis_sfcgal/postgis_sfcgal.control | 2 +- extensions/postgis_tiger_geocoder/Makefile | 2 +- .../postgis_tiger_geocoder.control | 2 +- extensions/postgis_topology/Makefile | 2 +- .../postgis_topology/postgis_topology.control | 2 +- extensions/upgradeable_versions.mk | 4 +- extras/tiger_geocoder/tiger_loader_2016.sql | 2 +- liblwgeom/cunit/cu_print.c | 2 + liblwgeom/lwprint.c | 20 +- postgis/geography.sql.in | 89 +---- postgis/geography_brin.sql.in | 104 ++++++ postgis/gserialized_gist_2d.c | 30 +- postgis/postgis.sql.in | 406 +++------------------ postgis/postgis_brin.sql.in | 336 +++++++++++++++++ postgis/sqldefines.h | 10 +- postgis_svn_revision.h | 2 +- regress/knn_recheck.sql | 13 + regress/knn_recheck_expected | 2 + utils/postgis_proc_upgrade.pl | 11 + 30 files changed, 702 insertions(+), 497 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6b4111d..32007c9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,82 @@ +2017-01-28 04:10 Regina Obe <[email protected]> + + * [r15295] liblwgeom/lwprint.c: Fix for 32-bit lwprint to support + ST_AsLatLonText + References #3688 for PostGIS 2.3.2 + +2017-01-25 23:42 Regina Obe <[email protected]> + + * [r15293] extras/tiger_geocoder/tiger_loader_2016.sql: Turn off + loading of tabblock by default. It's been broken since 2014 + References #3898 for PostGIS 2.3 + +2017-01-22 07:44 Regina Obe <[email protected]> + + * [r15291] postgis/geography.sql.in, postgis/geography_brin.sql.in, + postgis/postgis.sql.in, postgis/postgis_brin.sql.in: Fix for + pg_upgrade of pg < 9.5 + 2.3+, pg_upgrade and doing a postgis + micro update to latest stable. + closes #3683 for PostGIS 2.3 + +2017-01-18 21:07 Sandro Santilli <[email protected]> + + * [r15289] NEWS, liblwgeom/cunit/cu_print.c, liblwgeom/lwprint.c: + ST_AsLatLonText: round minutes [2.3 backport] + + Patch by Mike Toews, closes #3688 + +2017-01-07 08:52 Regina Obe <[email protected]> + + * [r15285] NEWS, postgis/gserialized_gist_2d.c, + regress/knn_recheck.sql, regress/knn_recheck_expected: KNN + recheck in 9.5+ fails with index returned tuples in wrong order + references #3418 for PostGIS 2.3 + +2017-01-06 10:31 Regina Obe <[email protected]> + + * [r15282] NEWS: update news with latest 2 bug fixes + +2017-01-05 19:15 Regina Obe <[email protected]> + + * [r15280] postgis/postgis.sql.in: Relationship functions not using + an index in some cases + Set cost back to 1 for functions that return a geometry + A higher cost has the side-effect of making the planner + think when used in conjunction with relate constructs like + ST_Intersects + it's cheaper to compute the geometry once rather + than compute twice and break into an index and non-index call. + References #3657 for PostGIS 2.3 + +2016-12-20 03:22 Regina Obe <[email protected]> + + * [r15278] utils/postgis_proc_upgrade.pl: PostGIS upgrade scripts + missing GRANT for views + references #3680 for PostGIS 2.3 + +2016-12-03 22:32 Sandro Santilli <[email protected]> + + * [r15270] NEWS: Indent and style NEWS file + +2016-12-03 20:39 Regina Obe <[email protected]> + + * [r15268] postgis/postgis.sql.in: Cost on ST_SetSRID is preventing + index use with relation functions. Change from 10 to 1. + References #3675 for PostGIS 2.3 + +2016-11-28 15:10 Regina Obe <[email protected]> + + * [r15265] HOWTO_RELEASE, Version.config, + extensions/upgradeable_versions.mk: More minor corrections to + HOW_TO_RELEASE, bump version to 2.3.2dev + +2016-11-28 14:49 Regina Obe <[email protected]> + + * [r15263] ChangeLog, HOWTO_RELEASE, NEWS, README.postgis, + Version.config, doc/release_notes.xml, + extensions/upgradeable_versions.mk: More corrections to + HOWTO_RELEASE, prepare for PostGIS 2.3.1 release + 2016-11-26 21:49 Regina Obe <[email protected]> * [r15260] HOWTO_RELEASE: Add build badges, trunk vs. branch diff --git a/NEWS b/NEWS index cb5b969..bc20478 100644 --- a/NEWS +++ b/NEWS @@ -1,23 +1,35 @@ +PostGIS 2.3.2 +2017/01/31 + + * Bug Fixes + + - #3418, KNN recheck in 9.5+ fails with index returned tuples in wrong order + - #3675, Relationship functions not using an index in some cases + - #3680, PostGIS upgrade scripts missing GRANT for views + - #3683, Unable to update postgis after postgres pg_upgrade going from < 9.5 to pg > 9.4 + - #3688, ST_AsLatLonText: round minutes + PostGIS 2.3.1 2016/11/28 * Bug Fixes + - #1973, st_concavehull() returns sometimes empty geometry collection - Fix from gde + (gde) - #3501, add raster constraint max extent exceeds array size limit - for large tables + for large tables - #3643, PostGIS not building on latest OSX XCode - #3644, Deadlock on interrupt - - #3650, Mark ST_Extent, ST_3DExtent and ST_Mem* - agg functions as parallel safe so they can be parallelized + - #3650, Mark ST_Extent, ST_3DExtent and ST_Mem* + agg functions as parallel safe so they can be parallelized - #3652, Crash on Collection(MultiCurve()) - #3656, Fix upgrade of aggregates from 2.2 or lower version - #3659, Crash caused by raster GUC define after CREATE EXTENSION - using wrong memory context. (manaeem) + using wrong memory context. (manaeem) - #3665, Index corruption and memory leak in BRIN indexes - patch from Julien Rouhaud (Dalibo) + (Julien Rouhaud of Dalibo) - #3667, geography ST_Segmentize bug - patch from Hugo Mercier (Oslandia) + (Hugo Mercier of Oslandia) PostGIS 2.3.0 2016/09/26 @@ -33,8 +45,6 @@ PostGIS 2.3.0 - #3396, ST_EstimatedExtent, throw WARNING instead of ERROR (Regina Obe) - * Deprecated signatures * - * New Features * - Add support for custom TOC in postgis_restore.pl @@ -76,7 +86,9 @@ PostGIS 2.3.0 (Hugo Mercier of Oslandia) * Bug Fixes - - #2841, ST_MinimumBoundingCircle not covering original + + - #2841, ST_MinimumBoundingCircle not covering original + * Performance Enhancements * - #75, Enhancement to PIP short circuit (Dan Baston) @@ -86,10 +98,6 @@ PostGIS 2.3.0 - Make adding a line to topology interruptible (Sandro Santilli) - Documentation updates from Mike Toews -PostGIS 2.3.0beta1 -2016/09/06 -See PostGIS 2.3.0 section for details - PostGIS 2.2.2 2016/03/22 diff --git a/README.postgis b/README.postgis index 287782d..7ffa9a8 100644 --- a/README.postgis +++ b/README.postgis @@ -1,8 +1,8 @@ PostGIS - Geographic Information Systems Extensions to PostgreSQL ================================================================= -:Version: 2.3.1 -:Date: 2016-11-28 +:Version: 2.3.2 +:Date: 2017-01-30 :Website: http://postgis.net This distribution contains a module which implements GIS simple features, ties @@ -187,7 +187,8 @@ UPGRADING EXISTING SPATIAL DATABASES Upgrade PostGIS using the "ALTER EXTENSION" facility. - ALTER EXTENSION postgis UPDATE TO '2.2.0'; + ALTER EXTENSION postgis UPDATE; + USAGE diff --git a/Version.config b/Version.config index 5fc9922..26c7df6 100644 --- a/Version.config +++ b/Version.config @@ -5,7 +5,7 @@ POSTGIS_MAJOR_VERSION=2 POSTGIS_MINOR_VERSION=3 -POSTGIS_MICRO_VERSION=1 +POSTGIS_MICRO_VERSION=2 # Liblwgeom interface versioning, reset to 0:0:0 (cur:age:rev) # when changing POSTGIS_MINOR_VERSION diff --git a/doc/release_notes.xml b/doc/release_notes.xml index abaedc6..a4a231c 100644 --- a/doc/release_notes.xml +++ b/doc/release_notes.xml @@ -3,6 +3,20 @@ <title>Appendix</title> <subtitle>Release Notes</subtitle> <sect1> + <title>Release 2.3.2</title> + <para>Release date: 2017/01/31</para> + <para>This is a bug fix and performance improvement release.</para> + <simplesect> + <title>Bug Fixes and Enhancements</title> + <para>#3418, KNN recheck in 9.5+ fails with index returned tuples in wrong order</para> + <para>#3675, Relationship functions not using an index in some cases</para> + <para>#3680, PostGIS upgrade scripts missing GRANT for views</para> + <para>#3683, Unable to update postgis after postgres pg_upgrade going from < 9.5 to pg > 9.4</para> + <para>#3688, ST_AsLatLonText: round minutes</para> + </simplesect> + </sect1> + + <sect1> <title>Release 2.3.1</title> <para>Release date: 2016/11/28</para> <para>This is a bug fix and performance improvement release.</para> diff --git a/extensions/address_standardizer/Makefile b/extensions/address_standardizer/Makefile index 026fcdf..20e1e0f 100644 --- a/extensions/address_standardizer/Makefile +++ b/extensions/address_standardizer/Makefile @@ -30,14 +30,14 @@ POSTGIS_PGSQL_VERSION=96 SQLPP = /usr/bin/cpp -traditional-cpp -w -P GREP=/bin/grep PERL=/usr/bin/perl -EXTVERSION = 2.3.1 +EXTVERSION = 2.3.2 MINORVERSION = 2.3 MODULE_big = address_standardizer-2.3 EXTENSION = address_standardizer DATA = address_standardizer_data_us.control sql/$(EXTENSION).sql sql/$(EXTENSION)_data_us.sql all: sql/address_standardizer.sql sql/address_standardizer--1.0--$(EXTVERSION).sql sql/address_standardizer--$(EXTVERSION).sql sql/address_standardizer--$(EXTVERSION)--$(EXTVERSION)next.sql sql/address_standardizer--$(EXTVERSION)next--$(EXTVERSION).sql \ - sql/$(EXTENSION)_data_us.sql sql/address_standardizer--2.3.1.sql sql/$(EXTENSION)_data_us--2.3.1.sql sql/$(EXTENSION)_data_us--$(EXTVERSION)--$(EXTVERSION)next.sql \ + sql/$(EXTENSION)_data_us.sql sql/address_standardizer--2.3.2.sql sql/$(EXTENSION)_data_us--2.3.2.sql sql/$(EXTENSION)_data_us--$(EXTVERSION)--$(EXTVERSION)next.sql \ sql/$(EXTENSION)_data_us--$(EXTVERSION)next--$(EXTVERSION).sql \ sql/test-init-extensions.sql sql/test-parseaddress.sql sql/test-standardize_address_1.sql sql/test-standardize_address_2.sql @@ -46,9 +46,9 @@ EXTRA_CLEAN += sql/*.sql DOCS = README.address_standardizer -PG_CPPFLAGS = -I/var/lib/jenkins/workspace/geos/rel-3.6.1devw64/include -I/usr/include/libxml2 -I/usr/include -DHAVE_SFCGAL -I/var/lib/jenkins/workspace/pg/rel/pg9.6w64/pg9.6/include -g -O0 +PG_CPPFLAGS = -I/var/lib/jenkins/workspace/geos/rel-3.7.0devw64/include -I/usr/include/libxml2 -I/usr/include -DHAVE_SFCGAL -I/var/lib/jenkins/workspace/pg/rel/pg9.6w64/pg9.6/include -g -O0 -SHLIB_LINK = -L/var/lib/jenkins/workspace/geos/rel-3.6.1devw64/lib -lgeos_c -lproj -ljson-c -lxml2 -L/usr/lib/x86_64-linux-gnu -lSFCGAL -Wl,--exclude-libs,ALL -lpcre +SHLIB_LINK = -L/var/lib/jenkins/workspace/geos/rel-3.7.0devw64/lib -lgeos_c -lproj -ljson-c -lxml2 -L/usr/lib/x86_64-linux-gnu -lSFCGAL -Wl,--exclude-libs,ALL -lpcre EXTRA_CLEAN = usps-st-city-name.txt mk-st-regexp mk-city-regex test_main REGRESS = test-init-extensions test-parseaddress test-standardize_address_1 test-standardize_address_2 @@ -68,7 +68,7 @@ sql/%.sql: %.sql.in $(SQLPP) -I../libpgcommon $< | grep -v '^#' | \ $(PERL) -lpe "s'MODULE_PATHNAME'\$$libdir/${EXTENSION}-${MINORVERSION}'g" > $@ -sql/address_standardizer--2.3.1.sql: sql/address_standardizer_types.sql \ +sql/address_standardizer--2.3.2.sql: sql/address_standardizer_types.sql \ sql/address_standardizer_functions.sql cat $^ > $@ diff --git a/extensions/address_standardizer/address_standardizer.control b/extensions/address_standardizer/address_standardizer.control index 6a5a76c..011a6fa 100644 --- a/extensions/address_standardizer/address_standardizer.control +++ b/extensions/address_standardizer/address_standardizer.control @@ -1,4 +1,4 @@ # address_standardizer extension comment = 'Used to parse an address into constituent elements. Generally used to support geocoding address normalization step.' -default_version = '2.3.1' +default_version = '2.3.2' relocatable = true diff --git a/extensions/address_standardizer/address_standardizer_data_us.control b/extensions/address_standardizer/address_standardizer_data_us.control index 6c5c17a..65e5218 100644 --- a/extensions/address_standardizer/address_standardizer_data_us.control +++ b/extensions/address_standardizer/address_standardizer_data_us.control @@ -1,4 +1,4 @@ # address standardizer us dataset comment = 'Address Standardizer US dataset example' -default_version = '2.3.1' +default_version = '2.3.2' relocatable = true diff --git a/extensions/postgis/Makefile b/extensions/postgis/Makefile index 0dd31f1..69e6848 100644 --- a/extensions/postgis/Makefile +++ b/extensions/postgis/Makefile @@ -1,7 +1,7 @@ include ../upgradeable_versions.mk EXTENSION = postgis -EXTVERSION = 2.3.1 +EXTVERSION = 2.3.2 MINORVERSION = 2.3 GREP = /bin/grep PERL = /usr/bin/perl diff --git a/extensions/postgis/postgis.control b/extensions/postgis/postgis.control index f15c2f3..5156b26 100644 --- a/extensions/postgis/postgis.control +++ b/extensions/postgis/postgis.control @@ -1,5 +1,5 @@ # postgis extension comment = 'PostGIS geometry, geography, and raster spatial types and functions' -default_version = '2.3.1' +default_version = '2.3.2' module_pathname = '$libdir/postgis-2.3' relocatable = false diff --git a/extensions/postgis_sfcgal/Makefile b/extensions/postgis_sfcgal/Makefile index de04b48..3a9c146 100644 --- a/extensions/postgis_sfcgal/Makefile +++ b/extensions/postgis_sfcgal/Makefile @@ -1,7 +1,7 @@ include ../upgradeable_versions.mk EXTENSION = postgis_sfcgal -EXTVERSION = 2.3.1 +EXTVERSION = 2.3.2 MINORVERSION = 2.3 GREP = /bin/grep PERL = /usr/bin/perl diff --git a/extensions/postgis_sfcgal/postgis_sfcgal.control b/extensions/postgis_sfcgal/postgis_sfcgal.control index 23dd8e0..ae39248 100644 --- a/extensions/postgis_sfcgal/postgis_sfcgal.control +++ b/extensions/postgis_sfcgal/postgis_sfcgal.control @@ -1,5 +1,5 @@ # postgis topology extension comment = 'PostGIS SFCGAL functions' -default_version = '2.3.1' +default_version = '2.3.2' relocatable = true requires = postgis diff --git a/extensions/postgis_tiger_geocoder/Makefile b/extensions/postgis_tiger_geocoder/Makefile index ab65cf4..c5b4813 100644 --- a/extensions/postgis_tiger_geocoder/Makefile +++ b/extensions/postgis_tiger_geocoder/Makefile @@ -1,7 +1,7 @@ include ../upgradeable_versions.mk EXTENSION = postgis_tiger_geocoder -EXTVERSION = 2.3.1 +EXTVERSION = 2.3.2 MINORVERSION = 2011.2.3 GREP = /bin/grep PERL = /usr/bin/perl diff --git a/extensions/postgis_tiger_geocoder/postgis_tiger_geocoder.control b/extensions/postgis_tiger_geocoder/postgis_tiger_geocoder.control index 15da133..45bbc5b 100644 --- a/extensions/postgis_tiger_geocoder/postgis_tiger_geocoder.control +++ b/extensions/postgis_tiger_geocoder/postgis_tiger_geocoder.control @@ -1,6 +1,6 @@ # postgis tiger geocoder extension comment = 'PostGIS tiger geocoder and reverse geocoder' -default_version = '2.3.1' +default_version = '2.3.2' relocatable = false schema = tiger requires = 'postgis,fuzzystrmatch' diff --git a/extensions/postgis_topology/Makefile b/extensions/postgis_topology/Makefile index 5e99b96..84e2267 100644 --- a/extensions/postgis_topology/Makefile +++ b/extensions/postgis_topology/Makefile @@ -1,7 +1,7 @@ include ../upgradeable_versions.mk EXTENSION = postgis_topology -EXTVERSION = 2.3.1 +EXTVERSION = 2.3.2 MINORVERSION = 2.3 GREP = /bin/grep PERL = /usr/bin/perl diff --git a/extensions/postgis_topology/postgis_topology.control b/extensions/postgis_topology/postgis_topology.control index 04039a2..be7b734 100644 --- a/extensions/postgis_topology/postgis_topology.control +++ b/extensions/postgis_topology/postgis_topology.control @@ -1,6 +1,6 @@ # postgis topology extension comment = 'PostGIS topology spatial types and functions' -default_version = '2.3.1' +default_version = '2.3.2' relocatable = false schema = topology requires = postgis diff --git a/extensions/upgradeable_versions.mk b/extensions/upgradeable_versions.mk index 625b277..751ae95 100644 --- a/extensions/upgradeable_versions.mk +++ b/extensions/upgradeable_versions.mk @@ -22,7 +22,9 @@ UPGRADEABLE_VERSIONS = \ 2.2.2 \ 2.2.3 \ 2.2.4 \ - 2.3.0 + 2.2.5 \ + 2.3.0 \ + 2.3.1 # This is to avoid forcing "check-installed-upgrades" as a default # rule, see https://trac.osgeo.org/postgis/ticket/3420 diff --git a/extras/tiger_geocoder/tiger_loader_2016.sql b/extras/tiger_geocoder/tiger_loader_2016.sql index 08bf8c4..7418e3a 100644 --- a/extras/tiger_geocoder/tiger_loader_2016.sql +++ b/extras/tiger_geocoder/tiger_loader_2016.sql @@ -263,7 +263,7 @@ VALUES(10, 'tract', 'tract', true, false, true,false, 'c', ${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');"', ARRAY['gid']); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process, columns_exclude ) -VALUES(11, 'tabblock', 'tabblock', true, false, true,false, 'c', +VALUES(11, 'tabblock', 'tabblock', false, false, true,false, 'c', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${lookup_name}(CONSTRAINT pk_${state_abbrev}_${lookup_name} PRIMARY KEY (tabblock_id)) INHERITS(tiger.${lookup_name});" ', '${psql} -c "ALTER TABLE ${staging_schema}.${state_abbrev}_${lookup_name} RENAME geoid10 TO tabblock_id;" ${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" diff --git a/liblwgeom/cunit/cu_print.c b/liblwgeom/cunit/cu_print.c index 782aa99..319e39a 100644 --- a/liblwgeom/cunit/cu_print.c +++ b/liblwgeom/cunit/cu_print.c @@ -80,6 +80,8 @@ static void test_lwprint_default_format(void) test_lwprint_assert_format("POINT(-181 -91)", "" , "89\xC2\xB0""0'0.000\"S 1\xC2\xB0""0'0.000\"W"); test_lwprint_assert_format("POINT(-180.0001 -90.0001)", NULL, "89\xC2\xB0""59'59.640\"S 0\xC2\xB0""0'0.360\"W"); test_lwprint_assert_format("POINT(-2348982391.123456 -238749827.34879)", "" , "12\xC2\xB0""39'4.356\"N 31\xC2\xB0""7'24.442\"W"); + /* See https://trac.osgeo.org/postgis/ticket/3688 */ + test_lwprint_assert_format("POINT (76.6 -76.6)", NULL, "76\xC2\xB0""36'0.000\"S 76\xC2\xB0""36'0.000\"E"); } /* diff --git a/liblwgeom/lwprint.c b/liblwgeom/lwprint.c index 7265d7a..6557ec0 100644 --- a/liblwgeom/lwprint.c +++ b/liblwgeom/lwprint.c @@ -26,6 +26,7 @@ #include <stdio.h> #include <string.h> +#include <math.h> #include "liblwgeom_internal.h" /* Ensures the given lat and lon are in the "normal" range: @@ -105,6 +106,8 @@ static char * lwdouble_to_dms(double val, const char *pos_dir_symbol, const char int sec_dec_digits = 0; int sec_piece = -1; + int round_pow = 0; + int format_length = ((NULL == format) ? 0 : strlen(format)); char * result; @@ -312,8 +315,8 @@ static char * lwdouble_to_dms(double val, const char *pos_dir_symbol, const char degrees = val; if (min_digits > 0) { - degrees = (long)degrees; - minutes = (val - degrees) * 60; + /* Break degrees to integer and use fraction for minutes */ + minutes = modf(val, °rees) * 60; } if (sec_digits > 0) { @@ -321,8 +324,17 @@ static char * lwdouble_to_dms(double val, const char *pos_dir_symbol, const char { lwerror("Bad format, cannot include seconds (SS.SSS) without including minutes (MM.MMM)."); } - minutes = (long)minutes; - seconds = (val - (degrees + (minutes / 60))) * 3600; + seconds = modf(minutes, &minutes) * 60; + if (sec_piece >= 0) + { + /* See if the formatted seconds round up to 60. If so, increment minutes and reset seconds. */ + round_pow = pow(10, sec_dec_digits); + if (floorf(seconds * round_pow) / round_pow >= 60) + { + minutes += 1; + seconds = 0; + } + } } /* Handle the compass direction. If not using compass dir, display degrees as a positive/negative number. */ diff --git a/postgis/geography.sql.in b/postgis/geography.sql.in index 9caf40d..36a2155 100644 --- a/postgis/geography.sql.in +++ b/postgis/geography.sql.in @@ -286,93 +286,8 @@ CREATE OPERATOR CLASS gist_geography_ops FUNCTION 6 geography_gist_picksplit (internal, internal), FUNCTION 7 geography_gist_same (box2d, box2d, internal); -#if POSTGIS_PGSQL_VERSION > 94 --------------------------------------------------------------------- --- BRIN support for geographies -- --------------------------------------------------------------------- - --------------------------------- --- the needed cross-operators -- --------------------------------- - --- Availability: 2.3.0 -CREATE OR REPLACE FUNCTION overlaps_geog(gidx, geography) -RETURNS boolean -AS 'MODULE_PATHNAME','gserialized_gidx_geog_overlaps' -LANGUAGE 'c' IMMUTABLE STRICT; - --- Availability: 2.3.0 -CREATE OR REPLACE FUNCTION overlaps_geog(gidx, gidx) -RETURNS boolean -AS 'MODULE_PATHNAME','gserialized_gidx_gidx_overlaps' -LANGUAGE 'c' IMMUTABLE STRICT; - --- Availability: 2.3.0 -CREATE OPERATOR && ( - LEFTARG = gidx, - RIGHTARG = geography, - PROCEDURE = overlaps_geog, - COMMUTATOR = && -); - --- Availability: 2.3.0 -CREATE OR REPLACE FUNCTION overlaps_geog(geography, gidx) -RETURNS boolean -AS $$ - SELECT $2 OPERATOR(@extschema@.&&) $1; -$$ LANGUAGE SQL IMMUTABLE STRICT; - --- Availability: 2.3.0 -CREATE OPERATOR && ( - LEFTARG = geography, - RIGHTARG = gidx, - PROCEDURE = overlaps_geog, - COMMUTATOR = && -); - --- Availability: 2.3.0 -CREATE OPERATOR && ( - LEFTARG = gidx, - RIGHTARG = gidx, - PROCEDURE = overlaps_geog, - COMMUTATOR = && -); - --------------------------------- --- the OpFamily -- --------------------------------- - --- Availability: 2.3.0 -CREATE OPERATOR FAMILY brin_geography_inclusion_ops USING brin; - --- Availability: 2.3.0 -CREATE OR REPLACE FUNCTION geog_brin_inclusion_add_value(internal, internal, internal, internal) RETURNS boolean - AS 'MODULE_PATHNAME','geog_brin_inclusion_add_value' - LANGUAGE 'c'; - --- Availability: 2.3.0 -CREATE OPERATOR CLASS brin_geography_inclusion_ops - DEFAULT FOR TYPE geography - USING brin - FAMILY brin_geography_inclusion_ops AS - OPERATOR 3 &&(geography, geography), - FUNCTION 1 brin_inclusion_opcinfo(internal) , - FUNCTION 2 geog_brin_inclusion_add_value(internal, internal, internal, internal) , - FUNCTION 3 brin_inclusion_consistent(internal, internal, internal) , - FUNCTION 4 brin_inclusion_union(internal, internal, internal) , - STORAGE gidx; - -ALTER OPERATOR FAMILY brin_geography_inclusion_ops USING brin ADD - OPERATOR 3 &&(gidx, geography), - - OPERATOR 3 &&(geography, gidx), - - OPERATOR 3 &&(gidx, gidx); - ---------------------------------------------------------------- --- END ---------------------------------------------------------------- -#endif +-- moved to separate file cause its invovled +#include "geography_brin.sql.in" -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- B-Tree Functions diff --git a/postgis/geography_brin.sql.in b/postgis/geography_brin.sql.in new file mode 100644 index 0000000..d6503d8 --- /dev/null +++ b/postgis/geography_brin.sql.in @@ -0,0 +1,104 @@ +#if POSTGIS_PGSQL_VERSION > 94 +-------------------------------------------------------------------- +-- BRIN support for geographies -- +-------------------------------------------------------------------- + +-------------------------------- +-- the needed cross-operators -- +-------------------------------- + +-- Availability: 2.3.0 +CREATE OR REPLACE FUNCTION overlaps_geog(gidx, geography) +RETURNS boolean +AS 'MODULE_PATHNAME','gserialized_gidx_geog_overlaps' +LANGUAGE 'c' IMMUTABLE STRICT; + +-- Availability: 2.3.0 +CREATE OR REPLACE FUNCTION overlaps_geog(gidx, gidx) +RETURNS boolean +AS 'MODULE_PATHNAME','gserialized_gidx_gidx_overlaps' +LANGUAGE 'c' IMMUTABLE STRICT; + + +-- logic to create missing brin operators +-- note we can't use CREATE IF NOT EXISTS since not currently supported for operators or families +-- an earlier 2.3+ might miss this if doing upgrade from < 9.5 to 9.5+ +-- so we need to include this always for 9.5+ +-- Intentionally not indenting DDL cause our uninstall process can't pick it up +-- also not dollar quoting functions inside DO since gets tripped up by perl upgrade script parser +DO language 'plpgsql' $$ +BEGIN + -- add geography brin ops if missing and are running a newer than 9.4 -- + -- use wildcard since if schema postgis is installed is not in search path, will have schema name in front + IF NOT EXISTS(SELECT 1 from pg_operator WHERE oprname = '&&' AND + oprleft::regtype::text LIKE '%gidx' AND oprright::regtype::text LIKE '%geography' ) THEN +-- Availability: 2.3.0 +CREATE OPERATOR && ( + LEFTARG = gidx, + RIGHTARG = geography, + PROCEDURE = overlaps_geog, + COMMUTATOR = && +); + +-- Availability: 2.3.0 +CREATE OR REPLACE FUNCTION overlaps_geog(geography, gidx) +RETURNS boolean +AS + 'SELECT $2 OPERATOR(@extschema@.&&) $1;' + LANGUAGE SQL IMMUTABLE STRICT; + +-- Availability: 2.3.0 +CREATE OPERATOR && ( + LEFTARG = geography, + RIGHTARG = gidx, + PROCEDURE = overlaps_geog, + COMMUTATOR = && +); + +-- Availability: 2.3.0 +CREATE OPERATOR && ( + LEFTARG = gidx, + RIGHTARG = gidx, + PROCEDURE = overlaps_geog, + COMMUTATOR = && +); + +-------------------------------- +-- the OpFamily -- +-------------------------------- + +-- Availability: 2.3.0 +CREATE OPERATOR FAMILY brin_geography_inclusion_ops USING brin; + +-- Availability: 2.3.0 +CREATE OR REPLACE FUNCTION geog_brin_inclusion_add_value(internal, internal, internal, internal) RETURNS boolean + AS 'MODULE_PATHNAME','geog_brin_inclusion_add_value' + LANGUAGE 'c'; + +-- Availability: 2.3.0 +CREATE OPERATOR CLASS brin_geography_inclusion_ops + DEFAULT FOR TYPE geography + USING brin + FAMILY brin_geography_inclusion_ops AS + OPERATOR 3 &&(geography, geography), + FUNCTION 1 brin_inclusion_opcinfo(internal) , + FUNCTION 2 geog_brin_inclusion_add_value(internal, internal, internal, internal) , + FUNCTION 3 brin_inclusion_consistent(internal, internal, internal) , + FUNCTION 4 brin_inclusion_union(internal, internal, internal) , + STORAGE gidx; + +ALTER OPERATOR FAMILY brin_geography_inclusion_ops USING brin ADD + OPERATOR 3 &&(gidx, geography), + + OPERATOR 3 &&(geography, gidx), + + OPERATOR 3 &&(gidx, gidx); + + END IF; + +END; +$$; +--------------------------------------------------------------- +-- END +--------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/postgis/gserialized_gist_2d.c b/postgis/gserialized_gist_2d.c index 6c38249..d83bfc8 100644 --- a/postgis/gserialized_gist_2d.c +++ b/postgis/gserialized_gist_2d.c @@ -396,7 +396,6 @@ static bool box2df_overabove(const BOX2DF *a, const BOX2DF *b) /** * Calculate the centroid->centroid distance between the boxes. -* We return the square distance to avoid a call to sqrt. */ static double box2df_distance_leaf_centroid(const BOX2DF *a, const BOX2DF *b) { @@ -407,7 +406,6 @@ static double box2df_distance_leaf_centroid(const BOX2DF *a, const BOX2DF *b) double b_y = (b->ymax + b->ymin) / 2.0; /* This "distance" is only used for comparisons, */ - /* so for speed we drop contants and skip the sqrt step. */ return sqrt((a_x - b_x) * (a_x - b_x) + (a_y - b_y) * (a_y - b_y)); } @@ -499,27 +497,27 @@ static inline double pt_distance(double ax, double ay, double bx, double by) */ static double box2df_distance(const BOX2DF *a, const BOX2DF *b) { - /* Check for overlap */ - if ( box2df_overlaps(a, b) ) - return 0.0; + /* Check for overlap */ + if ( box2df_overlaps(a, b) ) + return 0.0; - if ( box2df_left(a, b) ) - { - if ( box2df_above(a, b) ) + if ( box2df_left(a, b) ) + { + if ( box2df_above(a, b) ) return pt_distance(a->xmax, a->ymin, b->xmin, b->ymax); if ( box2df_below(a, b) ) return pt_distance(a->xmax, a->ymax, b->xmin, b->ymin); else - return b->xmin - a->xmax; + return (double)b->xmin - (double)a->xmax; } if ( box2df_right(a, b) ) { - if ( box2df_above(a, b) ) + if ( box2df_above(a, b) ) return pt_distance(a->xmin, a->ymin, b->xmax, b->ymax); if ( box2df_below(a, b) ) return pt_distance(a->xmin, a->ymax, b->xmax, b->ymin); else - return a->xmin - b->xmax; + return (double)a->xmin - (double)b->xmax; } if ( box2df_above(a, b) ) { @@ -528,7 +526,7 @@ static double box2df_distance(const BOX2DF *a, const BOX2DF *b) if ( box2df_right(a, b) ) return pt_distance(a->xmin, a->ymin, b->xmax, b->ymax); else - return a->ymin - b->ymax; + return (double)a->ymin - (double)b->ymax; } if ( box2df_below(a, b) ) { @@ -537,9 +535,9 @@ static double box2df_distance(const BOX2DF *a, const BOX2DF *b) if ( box2df_right(a, b) ) return pt_distance(a->xmin, a->ymax, b->xmax, b->ymin); else - return b->ymin - a->ymax; + return (double)b->ymin - (double)a->ymax; } - + return FLT_MAX; } @@ -1202,7 +1200,7 @@ Datum gserialized_gist_distance_2d(PG_FUNCTION_ARGS) /* Box-style distance test */ if ( strategy == 14 ) /* operator <#> */ { - distance = (double)box2df_distance(entry_box, &query_box); + distance = box2df_distance(entry_box, &query_box); } /* True distance test (formerly centroid distance) */ else if ( strategy == 13 ) /* operator <-> */ @@ -1210,7 +1208,7 @@ Datum gserialized_gist_distance_2d(PG_FUNCTION_ARGS) /* In all cases, since we only have keys (boxes) we'll return */ /* the minimum possible distance, which is the box2df_distance */ /* and let the recheck sort things out in the case of leaves */ - distance = (double)box2df_distance(entry_box, &query_box); + distance = box2df_distance(entry_box, &query_box); if (GIST_LEAF(entry)) *recheck = true; diff --git a/postgis/postgis.sql.in b/postgis/postgis.sql.in index 3df912e..61114ff 100644 --- a/postgis/postgis.sql.in +++ b/postgis/postgis.sql.in @@ -1291,7 +1291,7 @@ CREATE OR REPLACE FUNCTION ST_Force2D(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_2d' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 5; + COST 1; -- reset cost, see #3675 -- Availability: 1.2.2 -- Deprecation in 2.1.0 @@ -1307,7 +1307,7 @@ CREATE OR REPLACE FUNCTION ST_Force3DZ(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_3dz' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 25; + COST 1; -- reset cost, see #3675 -- Availability: 1.2.2 -- Deprecation in 2.1.0 @@ -1323,7 +1323,7 @@ CREATE OR REPLACE FUNCTION ST_Force3D(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_3dz' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 25; + COST 1; -- reset cost, see #3675 -- Availability: 1.2.2 -- Deprecation in 2.1.0 @@ -1339,7 +1339,7 @@ CREATE OR REPLACE FUNCTION ST_Force3DM(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_3dm' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 25; + COST 1; -- reset cost, see #3675 -- Availability: 1.2.2 -- Deprecation in 2.1.0 @@ -1355,7 +1355,7 @@ CREATE OR REPLACE FUNCTION ST_Force4D(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_4d' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 25; + COST 1; -- reset cost, see #3675 -- Availability: 1.2.2 -- Deprecation in 2.1.0 @@ -1371,7 +1371,7 @@ CREATE OR REPLACE FUNCTION ST_ForceCollection(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_collection' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 10; + COST 1; -- reset cost, see #3675 -- Availability: 1.2.2 -- Deprecation in 2.1.0 @@ -1399,7 +1399,7 @@ CREATE OR REPLACE FUNCTION ST_Multi(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_multi' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 10; + COST 1; -- reset cost, see #3675 -- Availability: 2.2.0 CREATE OR REPLACE FUNCTION ST_ForceCurve(geometry) @@ -1418,42 +1418,42 @@ CREATE OR REPLACE FUNCTION ST_ForceSFS(geometry, version text) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_sfs' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 10; + COST 1; -- reset cost, see #3675 -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Expand(box3d,float8) RETURNS box3d AS 'MODULE_PATHNAME', 'BOX3D_expand' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 25; + COST 1; -- reset cost, see #3675 -- Availability: 2.3.0 CREATE OR REPLACE FUNCTION ST_Expand(box box3d, dx float8, dy float8, dz float8 DEFAULT 0) RETURNS box3d AS 'MODULE_PATHNAME', 'BOX3D_expand' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 25; + COST 1; -- reset cost, see #3675 -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Expand(geometry,float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_expand' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 25; + COST 1; -- reset cost, see #3675 -- Availability: 2.3.0 CREATE OR REPLACE FUNCTION ST_Expand(geom geometry, dx float8, dy float8, dz float8 DEFAULT 0, dm float8 DEFAULT 0) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_expand' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 25; + COST 1; -- reset cost, see #3675 -- PostGIS equivalent function: envelope(geometry) CREATE OR REPLACE FUNCTION ST_Envelope(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_envelope' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 25; + COST 1; -- reset cost, see #3675 -- Availability: 2.2.0 CREATE OR REPLACE FUNCTION ST_BoundingDiagonal(geom geometry, fits boolean DEFAULT false) @@ -1466,14 +1466,14 @@ CREATE OR REPLACE FUNCTION ST_Reverse(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_reverse' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 10; + COST 1; -- reset cost, see #3675 -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_ForceRHR(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_clockwise_poly' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 15; + COST 1; -- reset cost, see #3675 -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION postgis_noop(geometry) @@ -1487,7 +1487,7 @@ CREATE OR REPLACE FUNCTION ST_Normalize(geom geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_Normalize' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 20; -- 20 as it delegates to GEOS + COST 1; -- reset cost, see #3675 -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION ST_zmflag(geometry) @@ -1692,14 +1692,14 @@ CREATE OR REPLACE FUNCTION ST_BuildArea(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_BuildArea' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 100; + COST 1; -- reset cost, see #3675 -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION ST_Polygonize (geometry[]) RETURNS geometry AS 'MODULE_PATHNAME', 'polygonize_garray' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 100; + COST 1; -- reset cost, see #3675 -- Availability: 2.2 CREATE OR REPLACE FUNCTION ST_ClusterIntersecting(geometry[]) @@ -1724,7 +1724,7 @@ CREATE OR REPLACE FUNCTION ST_LineMerge(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'linemerge' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 100; + COST 1; -- reset cost, see #3675 ----------------------------------------------------------------------------- -- Affine transforms @@ -1735,7 +1735,7 @@ CREATE OR REPLACE FUNCTION ST_Affine(geometry,float8,float8,float8,float8,float8 RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_affine' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 25; + COST 1; -- reset cost, see #3675 -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Affine(geometry,float8,float8,float8,float8,float8,float8) @@ -2746,7 +2746,7 @@ CREATE OR REPLACE FUNCTION ST_SetSRID(geometry,int4) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_set_srid' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 10; + COST 1; CREATE OR REPLACE FUNCTION ST_SRID(geometry) RETURNS int4 @@ -2764,7 +2764,7 @@ CREATE OR REPLACE FUNCTION ST_Transform(geometry,integer) RETURNS geometry AS 'MODULE_PATHNAME','transform' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 100; + COST 1; -- reset cost, see #3675 -- Availability: 2.3.0 CREATE OR REPLACE FUNCTION ST_Transform(geom geometry, to_proj text) @@ -3095,28 +3095,28 @@ CREATE OR REPLACE FUNCTION ST_Simplify(geometry, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_simplify2d' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 50; + COST 1; -- reset cost, see #3675 -- Availability: 2.2.0 CREATE OR REPLACE FUNCTION ST_Simplify(geometry, float8, boolean) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_simplify2d' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 50; -- COST guessed from ST_Simplify(geometry, float8) + COST 1; -- reset cost, see #3675 -- Availability: 2.2.0 CREATE OR REPLACE FUNCTION ST_SimplifyVW(geometry, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_SetEffectiveArea' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 50; -- COST guessed from ST_Simplify(geometry, float8) + COST 1; -- reset cost, see #3675 -- Availability: 2.2.0 CREATE OR REPLACE FUNCTION ST_SetEffectiveArea(geometry, float8 default -1, integer default 1) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_SetEffectiveArea' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 50; -- COST guessed from ST_Simplify(geometry, float8) + COST 1; -- reset cost, see #3675 -- ST_SnapToGrid(input, xoff, yoff, xsize, ysize) -- Availability: 1.2.2 @@ -3124,7 +3124,7 @@ CREATE OR REPLACE FUNCTION ST_SnapToGrid(geometry, float8, float8, float8, float RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_snaptogrid' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 25; + COST 1; -- reset cost, see #3675 -- ST_SnapToGrid(input, xsize, ysize) # offsets=0 -- Availability: 1.2.2 @@ -3132,7 +3132,7 @@ CREATE OR REPLACE FUNCTION ST_SnapToGrid(geometry, float8, float8) RETURNS geometry AS 'SELECT @[email protected]_SnapToGrid($1, 0, 0, $2, $3)' LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL - COST 25; + COST 1; -- reset cost, see #3675 -- ST_SnapToGrid(input, size) # xsize=ysize=size, offsets=0 -- Availability: 1.2.2 @@ -3147,14 +3147,14 @@ CREATE OR REPLACE FUNCTION ST_SnapToGrid(geom1 geometry, geom2 geometry, float8, RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_snaptogrid_pointoff' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 25; -- COST from ST_SnapToGrid(input, xoff, yoff, xsize, ysize) + COST 1; -- reset cost, see #3675 -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Segmentize(geometry, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_segmentize2d' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 25; + COST 1; -- reset cost, see #3675 --------------------------------------------------------------- -- LRS @@ -3264,21 +3264,21 @@ CREATE OR REPLACE FUNCTION ST_Intersection(geom1 geometry, geom2 geometry) RETURNS geometry AS 'MODULE_PATHNAME','intersection' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 100; -- Guessed cost + COST 1; -- reset cost, see #3675 -- PostGIS equivalent function: buffer(geometry,float8) CREATE OR REPLACE FUNCTION ST_Buffer(geometry,float8) RETURNS geometry AS 'MODULE_PATHNAME','buffer' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 5000; + COST 1; -- reset cost, see #3675 -- Availability: 1.5.0 - requires GEOS-3.2 or higher CREATE OR REPLACE FUNCTION _ST_Buffer(geometry,float8,cstring) RETURNS geometry AS 'MODULE_PATHNAME','buffer' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 5000; + COST 1; -- reset cost, see #3675 -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Buffer(geometry,float8,integer) @@ -3314,21 +3314,21 @@ CREATE OR REPLACE FUNCTION ST_OffsetCurve(line geometry, distance float8, params RETURNS geometry AS 'MODULE_PATHNAME','ST_OffsetCurve' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 100; -- Guessed cost + COST 1; -- reset cost, see #3675 -- Availability: 2.3.0 CREATE OR REPLACE FUNCTION ST_GeneratePoints(area geometry, npoints numeric) RETURNS geometry AS 'MODULE_PATHNAME','ST_GeneratePoints' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 400; -- Guessed cost + COST 1; -- reset cost, see #3675 -- PostGIS equivalent function: convexhull(geometry) CREATE OR REPLACE FUNCTION ST_ConvexHull(geometry) RETURNS geometry AS 'MODULE_PATHNAME','convexhull' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 250; + COST 1; -- reset cost, see #3675 -- Only accepts LINESTRING as parameters. -- Availability: 1.4.0 @@ -3350,7 +3350,7 @@ CREATE OR REPLACE FUNCTION ST_SimplifyPreserveTopology(geometry, float8) RETURNS geometry AS 'MODULE_PATHNAME','topologypreservesimplify' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 2000; + COST 1; -- reset cost, see #3675 -- Requires GEOS >= 3.1.0 -- Availability: 1.4.0 @@ -3474,7 +3474,7 @@ CREATE OR REPLACE FUNCTION ST_RemoveRepeatedPoints(geom geometry, tolerance floa RETURNS geometry AS 'MODULE_PATHNAME', 'ST_RemoveRepeatedPoints' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 25; + COST 1; -- reset cost, see #3675 -- Requires GEOS >= 3.5.0 -- Availability: 2.2.0 @@ -3510,7 +3510,7 @@ CREATE OR REPLACE FUNCTION ST_MakeValid(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_MakeValid' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 1000; + COST 1; -- reset cost, see #3675 -- ST_CleanGeometry(in geometry) -- @@ -3531,7 +3531,7 @@ CREATE OR REPLACE FUNCTION ST_CleanGeometry(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_CleanGeometry' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 1000; + COST 1; -- reset cost, see #3675 -------------------------------------------------------------------------------- -- ST_Split @@ -3551,7 +3551,7 @@ CREATE OR REPLACE FUNCTION ST_Split(geom1 geometry, geom2 geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_Split' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 100; -- Guessed cost + COST 1; -- reset cost, see #3675 -------------------------------------------------------------------------------- -- ST_SharedPaths @@ -3574,7 +3574,7 @@ CREATE OR REPLACE FUNCTION ST_SharedPaths(geom1 geometry, geom2 geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_SharedPaths' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 100; -- Guessed cost + COST 1; -- reset cost, see #3675 -------------------------------------------------------------------------------- -- ST_Snap @@ -3591,7 +3591,7 @@ CREATE OR REPLACE FUNCTION ST_Snap(geom1 geometry, geom2 geometry, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_Snap' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 100; -- Guessed cost + COST 1; -- reset cost, see #3675 -------------------------------------------------------------------------------- -- ST_RelateMatch @@ -3627,7 +3627,7 @@ CREATE OR REPLACE FUNCTION ST_Node(g geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_Node' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 100; -- Guessed cost + COST 1; -- reset cost, see #3675 -------------------------------------------------------------------------------- -- ST_DelaunayTriangles @@ -3651,7 +3651,7 @@ CREATE OR REPLACE FUNCTION ST_DelaunayTriangles(g1 geometry, tolerance float8 DE RETURNS geometry AS 'MODULE_PATHNAME', 'ST_DelaunayTriangles' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 25000; + COST 1; -- reset cost, see #3675 -------------------------------------------------------------------------------- @@ -3683,20 +3683,20 @@ CREATE OR REPLACE FUNCTION _ST_Voronoi(g1 geometry, clip geometry DEFAULT NULL, RETURNS geometry AS 'MODULE_PATHNAME', 'ST_Voronoi' LANGUAGE 'c' IMMUTABLE _PARALLEL - COST 25000; -- Guessed cost + COST 1; -- reset cost, see #3675 CREATE OR REPLACE FUNCTION ST_VoronoiPolygons(g1 geometry, tolerance float8 DEFAULT 0.0, extend_to geometry DEFAULT NULL) RETURNS geometry AS $$ SELECT @extschema@._ST_Voronoi(g1, extend_to, tolerance, true) $$ LANGUAGE SQL IMMUTABLE _PARALLEL - COST 25000; -- Guessed cost + COST 1; -- reset cost, see #3675 CREATE OR REPLACE FUNCTION ST_VoronoiLines(g1 geometry, tolerance float8 DEFAULT 0.0, extend_to geometry DEFAULT NULL) RETURNS geometry AS $$ SELECT @extschema@._ST_Voronoi(g1, extend_to, tolerance, false) $$ LANGUAGE SQL IMMUTABLE _PARALLEL - COST 25000; -- Guessed cost + COST 1; -- reset cost, see #3675 -------------------------------------------------------------------------------- -- Aggregates and their supporting functions @@ -4144,7 +4144,7 @@ CREATE OR REPLACE FUNCTION ST_Centroid(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'centroid' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 100; + COST 1; -- reset cost, see #3675 -- Availability: 2.3.0 @@ -4164,7 +4164,7 @@ CREATE OR REPLACE FUNCTION ST_PointOnSurface(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'pointonsurface' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 2500; --this looks suspicious, should not be this high + COST 1; -- reset cost, see #3675 -- PostGIS equivalent function: IsSimple(geometry) CREATE OR REPLACE FUNCTION ST_IsSimple(geometry) @@ -5065,7 +5065,7 @@ CREATE OR REPLACE FUNCTION ST_SwapOrdinates(geom geometry, ords cstring) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_SwapOrdinates' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 25; -- COST guessed from ST_FlipCoordinates(geometry) + COST 1; -- reset cost, see #3675 -- NOTE: same as ST_SwapOrdinates(geometry, 'xy') -- but slightly faster in that it doesn't need to parse ordinate @@ -5074,7 +5074,7 @@ CREATE OR REPLACE FUNCTION ST_FlipCoordinates(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_FlipCoordinates' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL - COST 25; + COST 1; -- reset cost, see #3675 -- -- SFSQL 1.1 @@ -5407,19 +5407,19 @@ CREATE OR REPLACE FUNCTION ST_3DClosestPoint(geom1 geometry, geom2 geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_closestpoint3d' LANGUAGE 'c' IMMUTABLE STRICT - COST 100; + COST 1; -- reset cost, see #3675 CREATE OR REPLACE FUNCTION ST_3DShortestLine(geom1 geometry, geom2 geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_shortestline3d' LANGUAGE 'c' IMMUTABLE STRICT - COST 100; + COST 1; -- reset cost, see #3675 CREATE OR REPLACE FUNCTION ST_3DLongestLine(geom1 geometry, geom2 geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_longestline3d' LANGUAGE 'c' IMMUTABLE STRICT - COST 100; + COST 1; -- reset cost, see #3675 CREATE OR REPLACE FUNCTION _ST_3DDWithin(geom1 geometry, geom2 geometry,float8) RETURNS boolean @@ -5569,300 +5569,8 @@ CREATE OR REPLACE FUNCTION ST_InterpolatePoint(Line geometry, Point geometry) AS 'MODULE_PATHNAME', 'ST_InterpolatePoint' LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL; -#if POSTGIS_PGSQL_VERSION > 94 --------------------------------------------------------------------- --- BRIN support -- --------------------------------------------------------------------- - ---------------------------------- --- 2d operators -- ---------------------------------- - --- Availability: 2.3.0 -CREATE OR REPLACE FUNCTION contains_2d(box2df, geometry) -RETURNS boolean -AS 'MODULE_PATHNAME','gserialized_contains_box2df_geom_2d' -LANGUAGE 'c' IMMUTABLE STRICT; - --- Availability: 2.3.0 -CREATE OR REPLACE FUNCTION is_contained_2d(box2df, geometry) -RETURNS boolean -AS 'MODULE_PATHNAME','gserialized_within_box2df_geom_2d' -LANGUAGE 'c' IMMUTABLE STRICT; - --- Availability: 2.3.0 -CREATE OR REPLACE FUNCTION overlaps_2d(box2df, geometry) -RETURNS boolean -AS 'MODULE_PATHNAME','gserialized_overlaps_box2df_geom_2d' -LANGUAGE 'c' IMMUTABLE STRICT; - --- Availability: 2.3.0 -CREATE OR REPLACE FUNCTION overlaps_2d(box2df, box2df) -RETURNS boolean -AS 'MODULE_PATHNAME','gserialized_contains_box2df_box2df_2d' -LANGUAGE 'c' IMMUTABLE STRICT; - --- Availability: 2.3.0 -CREATE OR REPLACE FUNCTION contains_2d(box2df, box2df) -RETURNS boolean -AS 'MODULE_PATHNAME','gserialized_contains_box2df_box2df_2d' -LANGUAGE 'c' IMMUTABLE STRICT; - --- Availability: 2.3.0 -CREATE OR REPLACE FUNCTION is_contained_2d(box2df, box2df) -RETURNS boolean -AS 'MODULE_PATHNAME','gserialized_contains_box2df_box2df_2d' -LANGUAGE 'c' IMMUTABLE STRICT; - --- Availability: 2.3.0 -CREATE OPERATOR ~ ( - LEFTARG = box2df, - RIGHTARG = geometry, - PROCEDURE = contains_2d, - COMMUTATOR = @ -); - --- Availability: 2.3.0 -CREATE OPERATOR @ ( - LEFTARG = box2df, - RIGHTARG = geometry, - PROCEDURE = is_contained_2d, - COMMUTATOR = ~ -); - --- Availability: 2.3.0 -CREATE OPERATOR && ( - LEFTARG = box2df, - RIGHTARG = geometry, - PROCEDURE = overlaps_2d, - COMMUTATOR = && -); - --- Availability: 2.3.0 -CREATE OR REPLACE FUNCTION contains_2d(geometry, box2df) -RETURNS boolean -AS $$ - SELECT $2 @ $1; -$$ LANGUAGE SQL IMMUTABLE STRICT; - --- Availability: 2.3.0 -CREATE OR REPLACE FUNCTION is_contained_2d(geometry, box2df) -RETURNS boolean -AS $$ - SELECT $2 ~ $1; -$$ LANGUAGE SQL IMMUTABLE STRICT; - --- Availability: 2.3.0 -CREATE OR REPLACE FUNCTION overlaps_2d(geometry, box2df) -RETURNS boolean -AS $$ - SELECT $2 OPERATOR(@extschema@.&&) $1; -$$ LANGUAGE SQL IMMUTABLE STRICT; - --- Availability: 2.3.0 -CREATE OPERATOR ~ ( - LEFTARG = geometry, - RIGHTARG = box2df, - COMMUTATOR = @, - PROCEDURE = contains_2d -); - --- Availability: 2.3.0 -CREATE OPERATOR @ ( - LEFTARG = geometry, - RIGHTARG = box2df, - COMMUTATOR = ~, - PROCEDURE = is_contained_2d -); - --- Availability: 2.3.0 -CREATE OPERATOR && ( - LEFTARG = geometry, - RIGHTARG = box2df, - PROCEDURE = overlaps_2d, - COMMUTATOR = && -); - --- Availability: 2.3.0 -CREATE OPERATOR && ( - LEFTARG = box2df, - RIGHTARG = box2df, - PROCEDURE = overlaps_2d, - COMMUTATOR = && -); - --- Availability: 2.3.0 -CREATE OPERATOR @ ( - LEFTARG = box2df, - RIGHTARG = box2df, - PROCEDURE = is_contained_2d, - COMMUTATOR = ~ -); - --- Availability: 2.3.0 -CREATE OPERATOR ~ ( - LEFTARG = box2df, - RIGHTARG = box2df, - PROCEDURE = contains_2d, - COMMUTATOR = @ -); - ----------------------------- --- nd operators -- ----------------------------- - --- Availability: 2.3.0 -CREATE OR REPLACE FUNCTION overlaps_nd(gidx, geometry) -RETURNS boolean -AS 'MODULE_PATHNAME','gserialized_gidx_geom_overlaps' -LANGUAGE 'c' IMMUTABLE STRICT; - --- Availability: 2.3.0 -CREATE OR REPLACE FUNCTION overlaps_nd(gidx, gidx) -RETURNS boolean -AS 'MODULE_PATHNAME','gserialized_gidx_gidx_overlaps' -LANGUAGE 'c' IMMUTABLE STRICT; - --- Availability: 2.3.0 -CREATE OPERATOR &&& ( - LEFTARG = gidx, - RIGHTARG = geometry, - PROCEDURE = overlaps_nd, - COMMUTATOR = &&& -); - --- Availability: 2.3.0 -CREATE OR REPLACE FUNCTION overlaps_nd(geometry, gidx) -RETURNS boolean -AS $$ - SELECT $2 OPERATOR(@extschema@.&&&) $1; -$$ LANGUAGE SQL IMMUTABLE STRICT; - --- Availability: 2.3.0 -CREATE OPERATOR &&& ( - LEFTARG = geometry, - RIGHTARG = gidx, - PROCEDURE = overlaps_nd, - COMMUTATOR = &&& -); - --- Availability: 2.3.0 -CREATE OPERATOR &&& ( - LEFTARG = gidx, - RIGHTARG = gidx, - PROCEDURE = overlaps_nd, - COMMUTATOR = &&& -); - ------------------------------- --- Create operator families -- ------------------------------- - -------------- --- 2D case -- -------------- - --- Availability: 2.3.0 -CREATE OPERATOR FAMILY brin_geometry_inclusion_ops_2d USING brin; - --- Availability: 2.3.0 -CREATE OR REPLACE FUNCTION geom2d_brin_inclusion_add_value(internal, internal, internal, internal) RETURNS boolean - AS 'MODULE_PATHNAME','geom2d_brin_inclusion_add_value' - LANGUAGE 'c'; - --- Availability: 2.3.0 -CREATE OR REPLACE FUNCTION geom3d_brin_inclusion_add_value(internal, internal, internal, internal) RETURNS boolean - AS 'MODULE_PATHNAME','geom3d_brin_inclusion_add_value' - LANGUAGE 'c'; - --- Availability: 2.3.0 -CREATE OR REPLACE FUNCTION geom4d_brin_inclusion_add_value(internal, internal, internal, internal) RETURNS boolean - AS 'MODULE_PATHNAME','geom4d_brin_inclusion_add_value' - LANGUAGE 'c'; - --- Availability: 2.3.0 -CREATE OPERATOR CLASS brin_geometry_inclusion_ops_2d - DEFAULT FOR TYPE geometry - USING brin - FAMILY brin_geometry_inclusion_ops_2d AS - OPERATOR 3 &&(geometry, geometry), - OPERATOR 7 ~(geometry, geometry), - OPERATOR 8 @(geometry, geometry), - FUNCTION 1 brin_inclusion_opcinfo(internal) , - FUNCTION 2 geom2d_brin_inclusion_add_value(internal, internal, internal, internal) , - FUNCTION 3 brin_inclusion_consistent(internal, internal, internal) , - FUNCTION 4 brin_inclusion_union(internal, internal, internal) , - STORAGE box2df; - -ALTER OPERATOR FAMILY brin_geometry_inclusion_ops_2d USING brin ADD - OPERATOR 3 &&(box2df, geometry), - OPERATOR 7 ~(box2df, geometry), - OPERATOR 8 @(box2df, geometry), - - OPERATOR 3 &&(geometry, box2df), - OPERATOR 7 ~(geometry, box2df), - OPERATOR 8 @(geometry, box2df), - - OPERATOR 3 &&(box2df, box2df), - OPERATOR 7 ~(box2df, box2df), - OPERATOR 8 @(box2df, box2df); - -------------- --- 3D case -- -------------- - --- Availability: 2.3.0 -CREATE OPERATOR FAMILY brin_geometry_inclusion_ops_3d USING brin; - --- Availability: 2.3.0 -CREATE OPERATOR CLASS brin_geometry_inclusion_ops_3d - FOR TYPE geometry - USING brin - FAMILY brin_geometry_inclusion_ops_3d AS - OPERATOR 3 &&&(geometry, geometry), - FUNCTION 1 brin_inclusion_opcinfo(internal) , - FUNCTION 2 geom3d_brin_inclusion_add_value(internal, internal, internal, internal) , - FUNCTION 3 brin_inclusion_consistent(internal, internal, internal) , - FUNCTION 4 brin_inclusion_union(internal, internal, internal) , - STORAGE gidx; - -ALTER OPERATOR FAMILY brin_geometry_inclusion_ops_3d USING brin ADD - OPERATOR 3 &&&(gidx, geometry), - - OPERATOR 3 &&&(geometry, gidx), - - OPERATOR 3 &&&(gidx, gidx); - -------------- --- 4D case -- -------------- - --- Availability: 2.3.0 -CREATE OPERATOR FAMILY brin_geometry_inclusion_ops_4d USING brin; - --- Availability: 2.3.0 -CREATE OPERATOR CLASS brin_geometry_inclusion_ops_4d - FOR TYPE geometry - USING brin - FAMILY brin_geometry_inclusion_ops_4d AS - OPERATOR 3 &&&(geometry, geometry), - FUNCTION 1 brin_inclusion_opcinfo(internal) , - FUNCTION 2 geom4d_brin_inclusion_add_value(internal, internal, internal, internal) , - FUNCTION 3 brin_inclusion_consistent(internal, internal, internal) , - FUNCTION 4 brin_inclusion_union(internal, internal, internal) , - STORAGE gidx; - -ALTER OPERATOR FAMILY brin_geometry_inclusion_ops_4d USING brin ADD - OPERATOR 3 &&&(gidx, geometry), - - OPERATOR 3 &&&(geometry, gidx), - - OPERATOR 3 &&&(gidx, gidx); - ---------------------------------------------------------------- --- END ---------------------------------------------------------------- -#endif +-- moved to separate file cause its invovled +#include "postgis_brin.sql.in" --------------------------------------------------------------- -- USER CONTRIBUTED diff --git a/postgis/postgis_brin.sql.in b/postgis/postgis_brin.sql.in new file mode 100644 index 0000000..d3dd983 --- /dev/null +++ b/postgis/postgis_brin.sql.in @@ -0,0 +1,336 @@ +#include "sqldefines.h" +#if POSTGIS_PGSQL_VERSION > 94 +-------------------------------------------------------------------- +-- BRIN support start -- +-------------------------------------------------------------------- + +--------------------------------- +-- 2d operators -- +--------------------------------- + +-- Availability: 2.3.0 +CREATE OR REPLACE FUNCTION contains_2d(box2df, geometry) +RETURNS boolean +AS 'MODULE_PATHNAME','gserialized_contains_box2df_geom_2d' +LANGUAGE 'c' IMMUTABLE STRICT; + +-- Availability: 2.3.0 +CREATE OR REPLACE FUNCTION is_contained_2d(box2df, geometry) +RETURNS boolean +AS 'MODULE_PATHNAME','gserialized_within_box2df_geom_2d' +LANGUAGE 'c' IMMUTABLE STRICT; + +-- Availability: 2.3.0 +CREATE OR REPLACE FUNCTION overlaps_2d(box2df, geometry) +RETURNS boolean +AS 'MODULE_PATHNAME','gserialized_overlaps_box2df_geom_2d' +LANGUAGE 'c' IMMUTABLE STRICT; + +-- Availability: 2.3.0 +CREATE OR REPLACE FUNCTION overlaps_2d(box2df, box2df) +RETURNS boolean +AS 'MODULE_PATHNAME','gserialized_contains_box2df_box2df_2d' +LANGUAGE 'c' IMMUTABLE STRICT; + +-- Availability: 2.3.0 +CREATE OR REPLACE FUNCTION contains_2d(box2df, box2df) +RETURNS boolean +AS 'MODULE_PATHNAME','gserialized_contains_box2df_box2df_2d' +LANGUAGE 'c' IMMUTABLE STRICT; + +-- Availability: 2.3.0 +CREATE OR REPLACE FUNCTION is_contained_2d(box2df, box2df) +RETURNS boolean +AS 'MODULE_PATHNAME','gserialized_contains_box2df_box2df_2d' +LANGUAGE 'c' IMMUTABLE STRICT; + +-- logic to create missing brin operators +-- note we can't use CREATE IF NOT EXISTS since not currently supported for operators or families +-- an earlier 2.3+ might miss this if doing upgrade from < 9.5 to 9.5+ +-- so we need to include this always for 9.5+ +-- Intentionally not indenting DDL cause our uninstall process can't pick it up +DO language 'plpgsql' $$ +BEGIN + -- add geometry brin ops if missing and are running a newer than 9.4 -- + -- use wildcard since if schema postgis is installed in is not in search path, will have schema name in front + IF NOT EXISTS(SELECT 1 from pg_operator WHERE oprname = '~' AND + oprleft::regtype::text LIKE '%box2df' AND oprright::regtype::text LIKE '%geometry' ) THEN +-- Availability: 2.3.0 +CREATE OPERATOR ~ ( + LEFTARG = box2df, + RIGHTARG = geometry, + PROCEDURE = contains_2d, + COMMUTATOR = @ +); + END IF; + + IF NOT EXISTS(SELECT 1 from pg_operator WHERE oprname = '@' AND + oprleft::regtype::text LIKE '%box2df' AND oprright::regtype::text LIKE '%geometry' ) THEN + +-- Availability: 2.3.0 +CREATE OPERATOR @ ( + LEFTARG = box2df, + RIGHTARG = geometry, + PROCEDURE = is_contained_2d, + COMMUTATOR = ~ +); + +-- Availability: 2.3.0 +CREATE OPERATOR && ( + LEFTARG = box2df, + RIGHTARG = geometry, + PROCEDURE = overlaps_2d, + COMMUTATOR = && +); + +-- Availability: 2.3.0 +CREATE OR REPLACE FUNCTION contains_2d(geometry, box2df) +RETURNS boolean +AS + 'SELECT $2 OPERATOR(@extschema@.@) $1;' +LANGUAGE SQL IMMUTABLE STRICT; + +-- Availability: 2.3.0 +CREATE OR REPLACE FUNCTION is_contained_2d(geometry, box2df) +RETURNS boolean +AS + 'SELECT $2 OPERATOR(@extschema@.~) $1;' +LANGUAGE SQL IMMUTABLE STRICT; + +-- Availability: 2.3.0 +CREATE OR REPLACE FUNCTION overlaps_2d(geometry, box2df) +RETURNS boolean +AS + 'SELECT $2 OPERATOR(@extschema@.&&) $1;' +LANGUAGE SQL IMMUTABLE STRICT; + + +-- Availability: 2.3.0 +CREATE OPERATOR ~ ( + LEFTARG = geometry, + RIGHTARG = box2df, + COMMUTATOR = @, + PROCEDURE = contains_2d +); +-- Availability: 2.3.0 +CREATE OPERATOR @ ( + LEFTARG = geometry, + RIGHTARG = box2df, + COMMUTATOR = ~, + PROCEDURE = is_contained_2d +); +-- Availability: 2.3.0 +CREATE OPERATOR && ( + LEFTARG = geometry, + RIGHTARG = box2df, + PROCEDURE = overlaps_2d, + COMMUTATOR = && +); +-- Availability: 2.3.0 +CREATE OPERATOR && ( + LEFTARG = box2df, + RIGHTARG = box2df, + PROCEDURE = overlaps_2d, + COMMUTATOR = && +); +-- Availability: 2.3.0 +CREATE OPERATOR @ ( + LEFTARG = box2df, + RIGHTARG = box2df, + PROCEDURE = is_contained_2d, + COMMUTATOR = ~ +); +-- Availability: 2.3.0 +CREATE OPERATOR ~ ( + LEFTARG = box2df, + RIGHTARG = box2df, + PROCEDURE = contains_2d, + COMMUTATOR = @ +); + END IF; + +---------------------------- +-- nd operators -- +---------------------------- + +-- Availability: 2.3.0 +CREATE OR REPLACE FUNCTION overlaps_nd(gidx, geometry) +RETURNS boolean +AS 'MODULE_PATHNAME','gserialized_gidx_geom_overlaps' +LANGUAGE 'c' IMMUTABLE STRICT; + +-- Availability: 2.3.0 +CREATE OR REPLACE FUNCTION overlaps_nd(gidx, gidx) +RETURNS boolean +AS 'MODULE_PATHNAME','gserialized_gidx_gidx_overlaps' +LANGUAGE 'c' IMMUTABLE STRICT; + + IF NOT EXISTS(SELECT 1 from pg_operator WHERE oprname = '&&&' AND + oprleft::regtype::text LIKE '%gidx' AND oprright::regtype::text LIKE '%geometry' ) THEN + +-- Availability: 2.3.0 +CREATE OPERATOR &&& ( + LEFTARG = gidx, + RIGHTARG = geometry, + PROCEDURE = overlaps_nd, + COMMUTATOR = &&& +); + +-- Availability: 2.3.0 +CREATE OR REPLACE FUNCTION overlaps_nd(geometry, gidx) +RETURNS boolean +AS + 'SELECT $2 OPERATOR(@extschema@.&&&) $1;' +LANGUAGE SQL IMMUTABLE STRICT; + + +-- Availability: 2.3.0 +CREATE OPERATOR &&& ( + LEFTARG = geometry, + RIGHTARG = gidx, + PROCEDURE = overlaps_nd, + COMMUTATOR = &&& +); + + +-- Availability: 2.3.0 +CREATE OPERATOR &&& ( + LEFTARG = gidx, + RIGHTARG = gidx, + PROCEDURE = overlaps_nd, + COMMUTATOR = &&& +); + + END IF; + + ------------------------------ + -- Create operator families -- + ------------------------------ + + ------------- + -- 2D case -- + ------------- + IF NOT EXISTS(SELECT 1 FROM pg_opfamily WHERE opfname = 'brin_geometry_inclusion_ops_2d') THEN + +CREATE OPERATOR FAMILY brin_geometry_inclusion_ops_2d USING brin; + + END IF; + +-- Availability: 2.3.0 +CREATE OR REPLACE FUNCTION geom2d_brin_inclusion_add_value(internal, internal, internal, internal) RETURNS boolean + AS 'MODULE_PATHNAME','geom2d_brin_inclusion_add_value' + LANGUAGE 'c'; + +-- Availability: 2.3.0 +CREATE OR REPLACE FUNCTION geom3d_brin_inclusion_add_value(internal, internal, internal, internal) RETURNS boolean + AS 'MODULE_PATHNAME','geom3d_brin_inclusion_add_value' + LANGUAGE 'c'; + +-- Availability: 2.3.0 +CREATE OR REPLACE FUNCTION geom4d_brin_inclusion_add_value(internal, internal, internal, internal) RETURNS boolean + AS 'MODULE_PATHNAME','geom4d_brin_inclusion_add_value' + LANGUAGE 'c'; + + IF NOT EXISTS(SELECT 1 FROM pg_opclass WHERE opcname = 'brin_geometry_inclusion_ops_2d') THEN + +-- Availability: 2.3.0 +CREATE OPERATOR CLASS brin_geometry_inclusion_ops_2d + DEFAULT FOR TYPE geometry + USING brin + FAMILY brin_geometry_inclusion_ops_2d AS + OPERATOR 3 &&(geometry, geometry), + OPERATOR 7 ~(geometry, geometry), + OPERATOR 8 @(geometry, geometry), + FUNCTION 1 brin_inclusion_opcinfo(internal) , + FUNCTION 2 geom2d_brin_inclusion_add_value(internal, internal, internal, internal) , + FUNCTION 3 brin_inclusion_consistent(internal, internal, internal) , + FUNCTION 4 brin_inclusion_union(internal, internal, internal) , + STORAGE box2df; + +ALTER OPERATOR FAMILY brin_geometry_inclusion_ops_2d USING brin ADD + OPERATOR 3 &&(box2df, geometry), + OPERATOR 7 ~(box2df, geometry), + OPERATOR 8 @(box2df, geometry), + + OPERATOR 3 &&(geometry, box2df), + OPERATOR 7 ~(geometry, box2df), + OPERATOR 8 @(geometry, box2df), + + OPERATOR 3 &&(box2df, box2df), + OPERATOR 7 ~(box2df, box2df), + OPERATOR 8 @(box2df, box2df); + + END IF; + + ------------- + -- 3D case -- + ------------- + IF NOT EXISTS(SELECT 1 FROM pg_opfamily WHERE opfname = 'brin_geometry_inclusion_ops_3d') THEN +-- Availability: 2.3.0 +CREATE OPERATOR FAMILY brin_geometry_inclusion_ops_3d USING brin; + + END IF; + + IF NOT EXISTS(SELECT 1 FROM pg_opclass WHERE opcname = 'brin_geometry_inclusion_ops_3d') THEN + +-- Availability: 2.3.0 +CREATE OPERATOR CLASS brin_geometry_inclusion_ops_3d + FOR TYPE geometry + USING brin + FAMILY brin_geometry_inclusion_ops_3d AS + OPERATOR 3 &&&(geometry, geometry), + FUNCTION 1 brin_inclusion_opcinfo(internal) , + FUNCTION 2 geom3d_brin_inclusion_add_value(internal, internal, internal, internal) , + FUNCTION 3 brin_inclusion_consistent(internal, internal, internal) , + FUNCTION 4 brin_inclusion_union(internal, internal, internal) , + STORAGE gidx; + +ALTER OPERATOR FAMILY brin_geometry_inclusion_ops_3d USING brin ADD + OPERATOR 3 &&&(gidx, geometry), + + OPERATOR 3 &&&(geometry, gidx), + + OPERATOR 3 &&&(gidx, gidx); + + END IF; + + + ------------- + -- 4D case -- + ------------- + IF NOT EXISTS(SELECT 1 FROM pg_opfamily WHERE opfname = 'brin_geometry_inclusion_ops_4d') THEN + +-- Availability: 2.3.0 +CREATE OPERATOR FAMILY brin_geometry_inclusion_ops_4d USING brin; + +-- Availability: 2.3.0 +CREATE OPERATOR CLASS brin_geometry_inclusion_ops_4d + FOR TYPE geometry + USING brin + FAMILY brin_geometry_inclusion_ops_4d AS + OPERATOR 3 &&&(geometry, geometry), + FUNCTION 1 brin_inclusion_opcinfo(internal) , + FUNCTION 2 geom4d_brin_inclusion_add_value(internal, internal, internal, internal) , + FUNCTION 3 brin_inclusion_consistent(internal, internal, internal) , + FUNCTION 4 brin_inclusion_union(internal, internal, internal) , + STORAGE gidx; + +ALTER OPERATOR FAMILY brin_geometry_inclusion_ops_4d USING brin ADD + OPERATOR 3 &&&(gidx, geometry), + + OPERATOR 3 &&&(geometry, gidx), + + OPERATOR 3 &&&(gidx, gidx); + + END IF; + +--------------------------------------------------------------- +-- END +--------------------------------------------------------------- +END; +$$; + +----------------------- +-- BRIN support end +----------------------- +#endif \ No newline at end of file diff --git a/postgis/sqldefines.h b/postgis/sqldefines.h index c0d2834..8932293 100644 --- a/postgis/sqldefines.h +++ b/postgis/sqldefines.h @@ -7,9 +7,9 @@ * Define just the version numbers; otherwise we get some strange substitutions in postgis.sql.in */ #define POSTGIS_PGSQL_VERSION 96 -#define POSTGIS_GEOS_VERSION 36 +#define POSTGIS_GEOS_VERSION 37 #define POSTGIS_PROJ_VERSION 49 -#define POSTGIS_LIB_VERSION '2.3.1' +#define POSTGIS_LIB_VERSION '2.3.2' #define POSTGIS_LIBXML2_VERSION 2.9.4 #define POSTGIS_SFCGAL_VERSION 13 @@ -25,12 +25,12 @@ * won't substitute within apostrophes) */ #define _POSTGIS_SQL_SELECT_POSTGIS_VERSION 'SELECT ''2.3 USE_GEOS=1 USE_PROJ=1 USE_STATS=1''::text AS version' -#define _POSTGIS_SQL_SELECT_POSTGIS_BUILD_DATE 'SELECT ''2016-11-28 15:14:03''::text AS version' +#define _POSTGIS_SQL_SELECT_POSTGIS_BUILD_DATE 'SELECT ''2017-01-31 06:00:14''::text AS version' #if POSTGIS_SVN_REVISION -#define _POSTGIS_SQL_SELECT_POSTGIS_SCRIPTS_VERSION $$ SELECT '2.3.1'::text || ' r' || POSTGIS_SVN_REVISION::text AS version $$ +#define _POSTGIS_SQL_SELECT_POSTGIS_SCRIPTS_VERSION $$ SELECT '2.3.2'::text || ' r' || POSTGIS_SVN_REVISION::text AS version $$ #else -#define _POSTGIS_SQL_SELECT_POSTGIS_SCRIPTS_VERSION $$ SELECT '2.3.1'::text AS version $$ +#define _POSTGIS_SQL_SELECT_POSTGIS_SCRIPTS_VERSION $$ SELECT '2.3.2'::text AS version $$ #endif #define SRID_USR_MAX 998999 diff --git a/postgis_svn_revision.h b/postgis_svn_revision.h index 747ef71..c680fe9 100644 --- a/postgis_svn_revision.h +++ b/postgis_svn_revision.h @@ -1 +1 @@ -#define POSTGIS_SVN_REVISION 15264 +#define POSTGIS_SVN_REVISION 15302 diff --git a/regress/knn_recheck.sql b/regress/knn_recheck.sql index 1475c72..c216ead 100644 --- a/regress/knn_recheck.sql +++ b/regress/knn_recheck.sql @@ -223,3 +223,16 @@ DROP TABLE knn_recheck_geom_nd; -- #3573 SELECT '#3573', 'POINT M (0 0 13)'::geometry <<->> 'LINESTRING M (0 0 5, 0 1 6)'::geometry; +-- #3418 +CREATE TABLE test_wo (geo geometry); +INSERT INTO test_wo VALUES + ('0101000020E61000007D91D0967329E4BF6631B1F9B8D64A40'::geometry), + ('0101000020E6100000E2AFC91AF510C1BFCDCCCCCCCCAC4A40'::geometry); +CREATE INDEX ON TEST_WO USING GIST (GEO); +analyze test_wo; +SET enable_seqscan = false; +SELECT '#3418' As ticket, '0101000020E610000092054CE0D6DDE5BFCDCCCCCCCCAC4A40'::geometry <-> geo, ST_Distance('0101000020E610000092054CE0D6DDE5BFCDCCCCCCCCAC4A40'::geometry, geo) +FROM test_wo ORDER BY geo <-> +('0101000020E610000092054CE0D6DDE5BFCDCCCCCCCCAC4A40'::geometry); +DROP TABLE test_wo; +set enable_seqscan to default; diff --git a/regress/knn_recheck_expected b/regress/knn_recheck_expected index b81bb72..9c37f23 100644 --- a/regress/knn_recheck_expected +++ b/regress/knn_recheck_expected @@ -125,3 +125,5 @@ #3nd-3|600001|9749|54.5453|54.5453 #3nd-3|600001|10041|54.6233|54.6233 #3573|8 +#3418|0.331823813642119|0.331823813642119 +#3418|0.55|0.55 diff --git a/utils/postgis_proc_upgrade.pl b/utils/postgis_proc_upgrade.pl index 0425b01..ebf7cf6 100755 --- a/utils/postgis_proc_upgrade.pl +++ b/utils/postgis_proc_upgrade.pl @@ -378,6 +378,17 @@ EOF last if /\;\s*$/; } } + + # Always output grant permissions (see ticket #3680) + if ( /^grant select\s+(\S+)\s*/i ) + { + print; + while(<INPUT>) + { + print; + last if /\;\s*$/; + } + } # Always output create ore replace rule if ( /^create or replace rule\s+(\S+)\s*/i ) -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/postgis.git _______________________________________________ Pkg-grass-devel mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel

