Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,12 @@ milestone for 4.0.0
* pgr_trsp(text,integer,integer,boolean,boolean,text)
* pgr_trsp(text,integer,double precision,integer,double precision,boolean,boolean,text)

* [#2888](https://github.com/pgRouting/pgrouting/issues/2888):
pgr_findCloseEdges

* pgr_findcloseedges(text,geometry,double precision,integer,boolean,boolean)
* pgr_findcloseedges(text,geometry[],double precision,integer,boolean,boolean)

**Removal of SQL deprecated functions**

* [#2681](https://github.com/pgRouting/pgrouting/issues/2681):
Expand Down
2 changes: 2 additions & 0 deletions doc/conf.py.in
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,8 @@ linkcheck_ignore = [
r'https://github.com/pgRouting/pgrouting/issues/*', # limit only pgrouting
r'https://github.com/pgRouting/pgrouting/archive/*',
r'https://docs.pgrouting.org/3.8/*',
# Currently has a problem
'https://www.boost.org/doc/libs/1_78_0/libs/graph/doc/hawick_circuits.html'
r'https://www.overpass-api.de/*'
]

Expand Down
6 changes: 6 additions & 0 deletions doc/src/release_notes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,12 @@ milestone for 4.0.0
* pgr_trsp(text,integer,integer,boolean,boolean,text)
* pgr_trsp(text,integer,double precision,integer,double precision,boolean,boolean,text)

* `#2888 <https://github.com/pgRouting/pgrouting/issues/2888>`__:
pgr_findCloseEdges

* pgr_findcloseedges(text,geometry,double precision,integer,boolean,boolean)
* pgr_findcloseedges(text,geometry[],double precision,integer,boolean,boolean)

.. rubric:: Removal of SQL deprecated functions

* `#2681 <https://github.com/pgRouting/pgrouting/issues/2681>`__:
Expand Down
15 changes: 14 additions & 1 deletion locale/en/LC_MESSAGES/pgrouting_doc_strings.po
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pgRouting v3.8\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-05-19 19:25+0000\n"
"POT-Creation-Date: 2025-05-21 14:59+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <[email protected]>\n"
Expand Down Expand Up @@ -4009,6 +4009,19 @@ msgid ""
"precision,boolean,boolean,text)"
msgstr ""

msgid ""
"`#2888 <https://github.com/pgRouting/pgrouting/issues/2888>`__: "
"pgr_findCloseEdges"
msgstr ""

msgid "pgr_findcloseedges(text,geometry,double precision,integer,boolean,boolean)"
msgstr ""

msgid ""
"pgr_findcloseedges(text,geometry[],double "
"precision,integer,boolean,boolean)"
msgstr ""

msgid "Removal of SQL deprecated functions"
msgstr ""

Expand Down
11 changes: 10 additions & 1 deletion locale/pot/pgrouting_doc_strings.pot
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pgRouting v4.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-05-19 19:25+0000\n"
"POT-Creation-Date: 2025-05-21 14:59+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <[email protected]>\n"
Expand Down Expand Up @@ -3604,6 +3604,15 @@ msgstr ""
msgid "pgr_trsp(text,integer,double precision,integer,double precision,boolean,boolean,text)"
msgstr ""

msgid "`#2888 <https://github.com/pgRouting/pgrouting/issues/2888>`__: pgr_findCloseEdges"
msgstr ""

msgid "pgr_findcloseedges(text,geometry,double precision,integer,boolean,boolean)"
msgstr ""

msgid "pgr_findcloseedges(text,geometry[],double precision,integer,boolean,boolean)"
msgstr ""

msgid "Removal of SQL deprecated functions"
msgstr ""

Expand Down
90 changes: 4 additions & 86 deletions pgtap/utilities/findCloseEdges/edge_cases.pg
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

/*PGR-GNU*****************************************************************

Copyright (c) 2018 pgRouting developers
Expand All @@ -20,18 +19,15 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
BEGIN;

UPDATE edges SET cost = sign(cost), reverse_cost = sign(reverse_cost);
SELECT CASE WHEN min_version('4.0.0') THEN plan(17) WHEN min_version('3.8.0') THEN plan(33) WHEN min_version('3.4.0') THEN plan(34) ELSE plan(1) END;
SET client_min_messages TO 'WARNING';

SELECT CASE WHEN min_version('3.8.0') THEN plan(16) ELSE plan(1) END;

CREATE OR REPLACE FUNCTION edge_cases()
RETURNS SETOF TEXT AS
$BODY$
DECLARE
the_q TEXT;
BEGIN
IF NOT min_version('3.4.0') THEN
RETURN QUERY SELECT skip(1, 'Function added on 3.4.0');

IF NOT min_version('3.8.0') THEN
RETURN QUERY SELECT skip(1, 'pgr_findcloseedges testing only valid signatures from 4.0.0');
RETURN;
END IF;

Expand Down Expand Up @@ -97,84 +93,6 @@ BEGIN
'SELECT id, geom FROM edges', (SELECT array_agg(geom) FROM bar), 0.5)$$,
'42P01', 'relation "bar" does not exist');

IF min_version('4.0.0') THEN
RETURN QUERY SELECT skip(1, 'Signatures with partial flag is removed on 4.0.0');
RETURN;
END IF;

-- Test with partial flag
RETURN QUERY SELECT is_empty($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT geom FROM pointsOfInterest WHERE pid = 5), 0.5, 1, true, true)$$, 'One geom: partial,dryrun = true,true');
RETURN QUERY SELECT isnt_empty($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT geom FROM pointsOfInterest WHERE pid = 5), 0.5, 1, true, false)$$, 'One geom: partial,dryrun = true,false');
RETURN QUERY SELECT is_empty($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT geom FROM pointsOfInterest WHERE pid = 5), 0.5, 1, false, true)$$, 'One geom: partial,dryrun = false,true');
RETURN QUERY SELECT isnt_empty($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT geom FROM pointsOfInterest WHERE pid = 5), 0.5, 1, false, false)$$, 'One geom: partial,dryrun = false,false');

RETURN QUERY SELECT is_empty($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT array_agg(geom) FROM pointsOfInterest), 0.5, 1, true, true)$$, 'Many geom: partial,dryrun = true,true');
RETURN QUERY SELECT isnt_empty($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT array_agg(geom) FROM pointsOfInterest), 0.5, 1, true, false)$$, 'Many geom: partial,dryrun = true,false');
RETURN QUERY SELECT is_empty($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT array_agg(geom) FROM pointsOfInterest), 0.5, 1, false, true)$$, 'Many geom: partial,dryrun = false,true');
RETURN QUERY SELECT isnt_empty($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT array_agg(geom) FROM pointsOfInterest), 0.5, 1, false, false)$$, 'Many geom: partial,dryrun = false,false');

RETURN QUERY SELECT
CASE WHEN min_version('3.8.0') THEN
collect_tap(
throws_ok($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT geom FROM pointsOfInterest WHERE pid = 5), 0.5, 1, partial => true) WHERE distance IS NOT NULL$$,
'42883','function pgr_findcloseedges(unknown, geometry, numeric, integer, partial => boolean) does not exist', 'throws: One geom, with cap value, naming partial => true'),
throws_ok($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT geom FROM pointsOfInterest WHERE pid = 5), 0.5, partial => true) WHERE distance IS NOT NULL$$,
'42883','function pgr_findcloseedges(unknown, geometry, numeric, partial => boolean) does not exist', 'throws: One geom, without cap value naming partial => true'),
isnt_empty($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT geom FROM pointsOfInterest WHERE pid = 5), 0.5, 1, true, false) WHERE distance IS NOT NULL$$, 'partial, One geom: isnt_empty distance'),
isnt_empty($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT geom FROM pointsOfInterest WHERE pid = 5), 0.5, 1, true, false) WHERE geom IS NOT NULL$$, 'partial, One geom: isnt_empty geom'),
isnt_empty($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT geom FROM pointsOfInterest WHERE pid = 5), 0.5, 1, true, false) WHERE edge IS NOT NULL$$, 'partial, One geom: isnt_empty edge'),

throws_ok($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT array_agg(geom) FROM pointsOfInterest), 0.5, 1, partial => true) WHERE distance IS NOT NULL$$,
'42883','function pgr_findcloseedges(unknown, geometry[], numeric, integer, partial => boolean) does not exist', 'throws: Many geom, with cap value, naming partial => true'),
throws_ok($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT array_agg(geom) FROM pointsOfInterest), 0.5, partial => true) WHERE distance IS NOT NULL$$,
'42883','function pgr_findcloseedges(unknown, geometry[], numeric, partial => boolean) does not exist', 'throws: Many geom, without cap value naming partial => true'),
isnt_empty($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT array_agg(geom) FROM pointsOfInterest), 0.5, 1, true, false) WHERE distance IS NOT NULL$$, 'partial, Many geom: isnt_empty distance'),
isnt_empty($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT array_agg(geom) FROM pointsOfInterest), 0.5, 1, true, false) WHERE edge IS NOT NULL$$, 'partial, Many geom: isnt_empty edge')
)

ELSE
collect_tap(
lives_ok($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT geom FROM pointsOfInterest WHERE pid = 5), 0.5, 1, partial => true) WHERE distance IS NOT NULL$$, 'One geom, with cap value, naming partial => true'),
lives_ok($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT geom FROM pointsOfInterest WHERE pid = 5), 0.5, partial => true) WHERE distance IS NOT NULL$$, 'One geom, without cap value, naming partial => true'),
is_empty($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT geom FROM pointsOfInterest WHERE pid = 5), 0.5, 1, true, false) WHERE distance IS NOT NULL$$, 'partial, One geom: is_empty distance'),
is_empty($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT geom FROM pointsOfInterest WHERE pid = 5), 0.5, 1, true, false) WHERE geom IS NOT NULL$$, 'partial, One geom: is_empty geom'),
is_empty($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT geom FROM pointsOfInterest WHERE pid = 5), 0.5, 1, true, false) WHERE edge IS NOT NULL$$, 'partial, One geom: is_empty edge'),

lives_ok($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT array_agg(geom) FROM pointsOfInterest), 0.5, 1, partial => true) WHERE distance IS NOT NULL$$, 'Many geom, with cap value, naming partial => true'),
lives_ok($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT array_agg(geom) FROM pointsOfInterest), 0.5, partial => true) WHERE distance IS NOT NULL$$, 'Many geom, without cap value, naming partial => true'),
isnt_empty($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT array_agg(geom) FROM pointsOfInterest), 0.5, 1, true, false) WHERE distance IS NOT NULL$$, 'partial, Many geom: isnt_empty distance'),
isnt_empty($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT array_agg(geom) FROM pointsOfInterest), 0.5, 1, true, false) WHERE geom IS NOT NULL$$, 'partial, Many geom: isnt_empty geom'),
is_empty($$SELECT * FROM pgr_findCloseEdges(
'SELECT id, geom FROM edges', (SELECT array_agg(geom) FROM pointsOfInterest), 0.5, 1, true, false) WHERE edge IS NOT NULL$$, 'partial, Many geom: is_empty edge')
)
END;

END;
$BODY$
LANGUAGE plpgsql;
Expand Down
14 changes: 7 additions & 7 deletions pgtap/utilities/findCloseEdges/inner_query.pg
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

/*PGR-GNU*****************************************************************

Copyright (c) 2018 pgRouting developers
Expand All @@ -20,15 +19,16 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
BEGIN;

UPDATE edges SET cost = sign(cost), reverse_cost = sign(reverse_cost);
SELECT CASE WHEN min_version('3.4.0') THEN plan(12) ELSE plan(2) END;
SELECT CASE WHEN min_version('3.8.0') THEN plan(12) ELSE plan(2) END;


CREATE OR REPLACE FUNCTION chk_edges_sql(fn TEXT, rest_sql TEXT)
CREATE OR REPLACE FUNCTION inner_query(fn TEXT, rest_sql TEXT)
RETURNS SETOF TEXT AS
$BODY$
BEGIN
IF NOT min_version('3.4.0') THEN
RETURN QUERY SELECT skip(1, 'Function added on 3.4.0');

IF NOT min_version('3.8.0') THEN
RETURN QUERY SELECT skip(1, 'pgr_findcloseedges testing only valid signatures from 4.0.0');
RETURN;
END IF;

Expand All @@ -41,8 +41,8 @@ $BODY$
LANGUAGE plpgsql;


SELECT chk_edges_sql('pgr_findCloseEdges(', ', (SELECT geom FROM pointsOfInterest limit 1), 3);');
SELECT chk_edges_sql('pgr_findCloseEdges(', ', (SELECT array_agg(geom) FROM pointsOfInterest), 3);');
SELECT inner_query('pgr_findCloseEdges(', ', (SELECT geom FROM pointsOfInterest limit 1), 3);');
SELECT inner_query('pgr_findCloseEdges(', ', (SELECT array_agg(geom) FROM pointsOfInterest), 3);');

SELECT finish();
ROLLBACK;
12 changes: 4 additions & 8 deletions pgtap/utilities/findCloseEdges/no_crash_test.pg
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

/*PGR-GNU*****************************************************************

Copyright (c) 2018 pgRouting developers
Expand All @@ -20,23 +19,21 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
BEGIN;

UPDATE edges SET cost = sign(cost), reverse_cost = sign(reverse_cost);
SELECT CASE WHEN min_version('3.4.0') THEN plan(33) ELSE plan(2) END;
SELECT CASE WHEN min_version('3.8.0') THEN plan(32) ELSE plan(1) END;

PREPARE edges AS
SELECT id, geom FROM edges;

SELECT isnt_empty('edges', 'Should be not empty to tests be meaningful');


CREATE OR REPLACE FUNCTION no_crash()
RETURNS SETOF TEXT AS
$BODY$
DECLARE
params TEXT[];
subs TEXT[];
BEGIN
IF NOT min_version('3.4.0') THEN
RETURN QUERY SELECT skip(1, 'Function added on 3.4.0');

IF NOT min_version('3.8.0') THEN
RETURN QUERY SELECT skip(1, 'pgr_findcloseedges testing only valid signatures from 4.0.0');
RETURN;
END IF;

Expand Down Expand Up @@ -68,7 +65,6 @@ END
$BODY$
LANGUAGE plpgsql VOLATILE;


SELECT * FROM no_crash();

SELECT finish();
Expand Down
62 changes: 19 additions & 43 deletions pgtap/utilities/findCloseEdges/types_check.pg
Original file line number Diff line number Diff line change
Expand Up @@ -19,66 +19,42 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
********************************************************************PGR-GNU*/
BEGIN;

SELECT CASE WHEN min_version('3.4.0') THEN plan(7) ELSE plan(1) END;
SELECT CASE WHEN min_version('4.0.0') THEN plan(7) ELSE plan(1) END;

CREATE OR REPLACE FUNCTION types_check() RETURNS SETOF TEXT AS
$BODY$
BEGIN
IF NOT min_version('3.4.0') THEN
RETURN QUERY SELECT skip(1, 'Function added on 3.4.0');
IF NOT min_version('4.0.0') THEN
RETURN QUERY SELECT skip(1, 'pgr_findcloseedges some signatures removed on 4.0.0');
RETURN;
END IF;

RETURN QUERY
SELECT has_function('pgr_findcloseedges');
RETURN QUERY
SELECT has_function('pgr_findcloseedges', ARRAY['text', 'geometry','double precision','integer','boolean','boolean']);
SELECT has_function('pgr_findcloseedges', ARRAY['text', 'geometry','double precision','integer','boolean']);
RETURN QUERY
SELECT has_function('pgr_findcloseedges', ARRAY['text', 'geometry[]','double precision','integer','boolean','boolean']);
SELECT has_function('pgr_findcloseedges', ARRAY['text', 'geometry[]','double precision','integer','boolean']);
RETURN QUERY
SELECT function_returns('pgr_findcloseedges',
ARRAY['text', 'geometry','double precision','integer','boolean','boolean'],'setof record');
ARRAY['text', 'geometry','double precision','integer','boolean'],'setof record');
RETURN QUERY
SELECT function_returns('pgr_findcloseedges',
ARRAY['text', 'geometry[]','double precision','integer','boolean','boolean'],'setof record');
ARRAY['text', 'geometry[]','double precision','integer','boolean'],'setof record');

IF min_version('3.8.0') THEN

RETURN QUERY
SELECT function_args_eq('pgr_findcloseedges',
$$VALUES
('{"","","","cap","dryrun","edge_id","fraction","side","distance","geom","edge"}'::TEXT[]),
('{"","","","cap","dryrun","edge_id","fraction","side","distance","geom","edge"}'::TEXT[]),
('{"","","","cap","partial","dryrun","edge_id","fraction","side","distance","geom","edge"}'::TEXT[]),
('{"","","","cap","partial","dryrun","edge_id","fraction","side","distance","geom","edge"}'::TEXT[])
$$);

RETURN QUERY
SELECT function_types_eq('pgr_findcloseedges',
$$ VALUES
('{text,_geometry,float8,int4,bool,int8,float8,bpchar,float8,geometry,geometry}'::TEXT[]),
('{text,geometry,float8,int4,bool,int8,float8,bpchar,float8,geometry,geometry}'::TEXT[]),
('{text,geometry,float8,int4,bool,bool,int8,float8,bpchar,float8,geometry,geometry}'::TEXT[]),
('{text,_geometry,float8,int4,bool,bool,int8,float8,bpchar,float8,geometry,geometry}'::TEXT[])
$$);

ELSE

RETURN QUERY
SELECT function_args_eq('pgr_findcloseedges',
$$VALUES
('{"","","","cap","partial","dryrun","edge_id","fraction","side","distance","geom","edge"}'::TEXT[]),
('{"","","","cap","partial","dryrun","edge_id","fraction","side","distance","geom","edge"}'::TEXT[])
$$);

RETURN QUERY
SELECT function_types_eq('pgr_findcloseedges',
$$ VALUES
('{text,geometry,float8,int4,bool,bool,int8,float8,bpchar,float8,geometry,geometry}'::TEXT[]),
('{text,_geometry,float8,int4,bool,bool,int8,float8,bpchar,float8,geometry,geometry}'::TEXT[])
$$);
RETURN QUERY
SELECT function_args_eq('pgr_findcloseedges',
$$VALUES
('{"","","",cap,dryrun,edge_id,fraction,side,distance,geom,edge}'::TEXT[]),
('{"","","",cap,dryrun,edge_id,fraction,side,distance,geom,edge}')
$$);

END IF;
RETURN QUERY
SELECT function_types_eq('pgr_findcloseedges',
$$ VALUES
('{text,geometry,float8,int4,bool,int8,float8,bpchar,float8,geometry,geometry}'::TEXT[]),
('{text,_geometry,float8,int4,bool,int8,float8,bpchar,float8,geometry,geometry}'::TEXT[])
$$);

END
$BODY$
Expand Down
7 changes: 0 additions & 7 deletions sql/scripts/build-extension-update-files.pl
Original file line number Diff line number Diff line change
Expand Up @@ -269,13 +269,6 @@ sub generate_upgrade_script {
push @commands, drop_special_case_function("pgr_kruskaldd(text,anyarray,numeric)");
push @commands, drop_special_case_function("pgr_kruskaldd(text,anyarray,double precision)");
}

# updating to 3.7+
if ($old_minor >= 3.4 && $old_minor < 3.8) {
push @commands, drop_special_case_function("pgr_findcloseedges(text,geometry,double precision,integer,boolean,boolean)");
push @commands, drop_special_case_function("pgr_findcloseedges(text,geometry[],double precision,integer,boolean,boolean)");
}

}

#------------------------------------
Expand Down
2 changes: 0 additions & 2 deletions sql/sigs/pgrouting--4.0.sig
Original file line number Diff line number Diff line change
Expand Up @@ -151,8 +151,6 @@ pgr_edwardmoore(text,text,boolean)
pgr_extractvertices(text,boolean)
pgr_findcloseedges(text,geometry,double precision,integer,boolean)
pgr_findcloseedges(text,geometry[],double precision,integer,boolean)
pgr_findcloseedges(text,geometry,double precision,integer,boolean,boolean)
pgr_findcloseedges(text,geometry[],double precision,integer,boolean,boolean)
_pgr_floydwarshall(text,boolean)
pgr_floydwarshall(text,boolean)
pgr_full_version()
Expand Down
Loading