diff --git a/NEWS.md b/NEWS.md index a648eea1864..54453687d7d 100644 --- a/NEWS.md +++ b/NEWS.md @@ -41,15 +41,36 @@ milestone for 4.0.0 * pgr_maxFlow(Combinations) * pgr_pushRelabel(Combinations) +**code enhancements:** -**Removal of deprecated functions and signatures** +* Simplify C/C++ code for all overloads of -* ``pgr_trspviaedges(text,integer[],double precision[],boolean,boolean,text)`` -* ``pgr_trspviavertices(text,anyarray,boolean,boolean,text)`` -* ``pgr_trsp(text,integer,double precision,integer,double precision,boolean,boolean,text)`` -* ``pgr_trsp(text,integer,integer,boolean,boolean,text)`` + * pgr_dijkstra + +**Removal of SQL deprecated functions and signatures** + +* pgr_trspviaedges(text,integer[],double precision[],boolean,boolean,text) +* pgr_trspviavertices(text,anyarray,boolean,boolean,text) +* pgr_trsp(text,integer,double precision,integer,double precision,boolean,boolean,text) +* pgr_trsp(text,integer,integer,boolean,boolean,text) +* _pgr_dijkstranear(text,anyarray,anyarray,bigint,boolean) +* _pgr_dijkstranear(text,anyarray,bigint,bigint,boolean) +* _pgr_dijkstranear(text,bigint,anyarray,bigint,boolean) +* _pgr_dijkstra(text,anyarray,anyarray,boolean,boolean,boolean,bigint) +* _pgr_dijkstra(text,text,boolean,boolean,boolean) + +**Deprecation of internal C/C++ functions** + +* _pgr_dijkstra(text,anyarray,anyarray,boolean,boolean,boolean,bigint)`` +* _pgr_dijkstra(text,anyarray,anyarray,boolean,boolean,boolean,bigint,boolean)`` +* _pgr_dijkstra(text,text,boolean,boolean,bigint,boolean)`` +* _pgr_dijkstra(text,text,boolean,boolean,boolean)`` +**Internal C/C++ functions in legacy** +* _trsp(text,text,anyarray,anyarray,boolean)`` +* _v4trsp(text,text,anyarray,anyarray,boolean)`` +* _v4trsp(text,text,text,boolean)`` # pgRouting 3 diff --git a/doc/src/release_notes.rst b/doc/src/release_notes.rst index d67ab3fe1f9..2004ac9814d 100644 --- a/doc/src/release_notes.rst +++ b/doc/src/release_notes.rst @@ -72,15 +72,36 @@ milestone for 4.0.0 * pgr_maxFlow(Combinations) * pgr_pushRelabel(Combinations) +.. rubric:: code enhancements: -.. rubric:: Removal of deprecated functions and signatures +* Simplify C/C++ code for all overloads of -* ``pgr_trspviaedges(text,integer[],double precision[],boolean,boolean,text)`` -* ``pgr_trspviavertices(text,anyarray,boolean,boolean,text)`` -* ``pgr_trsp(text,integer,double precision,integer,double precision,boolean,boolean,text)`` -* ``pgr_trsp(text,integer,integer,boolean,boolean,text)`` + * pgr_dijkstra + +.. rubric:: Removal of SQL deprecated functions and signatures + +* pgr_trspviaedges(text,integer[],double precision[],boolean,boolean,text) +* pgr_trspviavertices(text,anyarray,boolean,boolean,text) +* pgr_trsp(text,integer,double precision,integer,double precision,boolean,boolean,text) +* pgr_trsp(text,integer,integer,boolean,boolean,text) +* _pgr_dijkstranear(text,anyarray,anyarray,bigint,boolean) +* _pgr_dijkstranear(text,anyarray,bigint,bigint,boolean) +* _pgr_dijkstranear(text,bigint,anyarray,bigint,boolean) +* _pgr_dijkstra(text,anyarray,anyarray,boolean,boolean,boolean,bigint) +* _pgr_dijkstra(text,text,boolean,boolean,boolean) + +.. rubric:: Deprecation of internal C/C++ functions + +* _pgr_dijkstra(text,anyarray,anyarray,boolean,boolean,boolean,bigint)`` +* _pgr_dijkstra(text,anyarray,anyarray,boolean,boolean,boolean,bigint,boolean)`` +* _pgr_dijkstra(text,text,boolean,boolean,bigint,boolean)`` +* _pgr_dijkstra(text,text,boolean,boolean,boolean)`` +.. rubric:: Internal C/C++ functions in legacy +* _trsp(text,text,anyarray,anyarray,boolean)`` +* _v4trsp(text,text,anyarray,anyarray,boolean)`` +* _v4trsp(text,text,text,boolean)`` pgRouting 3 ******************************************************************************* diff --git a/include/cpp_common/combinations.hpp b/include/cpp_common/combinations.hpp index a7e3a00165d..4c83f07ff7b 100644 --- a/include/cpp_common/combinations.hpp +++ b/include/cpp_common/combinations.hpp @@ -49,13 +49,6 @@ class Path; namespace utilities { -#if 1 -std::map> -get_combinations(const II_t_rt *, size_t); - -std::map> -get_combinations(int64_t*, size_t, int64_t*, size_t); -#endif std::map> get_combinations( diff --git a/include/dijkstra/dijkstraVia.hpp b/include/dijkstra/dijkstraVia.hpp index d135c942582..10ccc7df081 100644 --- a/include/dijkstra/dijkstraVia.hpp +++ b/include/dijkstra/dijkstraVia.hpp @@ -44,10 +44,10 @@ namespace pgrouting { template void -pgr_dijkstraVia( +dijkstraVia( G &graph, - const std::vector< int64_t > &via_vertices, - std::deque< Path > &paths, + const std::vector &via_vertices, + std::deque &paths, bool strict, bool U_turn_on_edge, std::ostringstream &log) { diff --git a/sql/dijkstra/CMakeLists.txt b/sql/dijkstra/CMakeLists.txt index 2d8700845ad..22806073bfe 100644 --- a/sql/dijkstra/CMakeLists.txt +++ b/sql/dijkstra/CMakeLists.txt @@ -6,7 +6,6 @@ SET(LOCAL_FILES dijkstraCostMatrix.sql _dijkstraVia.sql dijkstraVia.sql - _dijkstraNear.sql dijkstraNear.sql dijkstraNearCost.sql ) diff --git a/sql/dijkstra/_dijkstra.sql b/sql/dijkstra/_dijkstra.sql index 524cb99d718..0acb583e65b 100644 --- a/sql/dijkstra/_dijkstra.sql +++ b/sql/dijkstra/_dijkstra.sql @@ -28,15 +28,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ********************************************************************PGR-GNU*/ ---------------- ---------------- --- dijkstra ---------------- ---------------- - ---v3.2 -CREATE FUNCTION _pgr_dijkstra( +--v4.0 +CREATE FUNCTION _pgr_dijkstrav4( edges_sql TEXT, + combinations_sql TEXT, start_vids ANYARRAY, end_vids ANYARRAY, directed BOOLEAN, @@ -55,87 +50,6 @@ CREATE FUNCTION _pgr_dijkstra( OUT agg_cost FLOAT) RETURNS SETOF RECORD AS 'MODULE_PATHNAME' -LANGUAGE C VOLATILE STRICT; - - ---v3.2 -CREATE FUNCTION _pgr_dijkstra( - edges_sql TEXT, - combinations_sql TEXT, - directed BOOLEAN, - only_cost BOOLEAN, - n_goals BIGINT, - global BOOLEAN, - - OUT seq INTEGER, - OUT path_seq INTEGER, - OUT start_vid BIGINT, - OUT end_vid BIGINT, - OUT node BIGINT, - OUT edge BIGINT, - OUT cost FLOAT, - OUT agg_cost FLOAT) -RETURNS SETOF RECORD AS -'MODULE_PATHNAME' -LANGUAGE C VOLATILE STRICT; - --- COMMENTS - -COMMENT ON FUNCTION _pgr_dijkstra(TEXT, ANYARRAY, ANYARRAY, BOOLEAN, BOOLEAN, BOOLEAN, BIGINT, BOOLEAN) -IS 'pgRouting internal function'; - -COMMENT ON FUNCTION _pgr_dijkstra(TEXT, TEXT, BOOLEAN, BOOLEAN, BIGINT, BOOLEAN) -IS 'pgRouting internal function'; - - -/** The following are kept for backward compatibility on signatures **/ ---v3.0 -CREATE FUNCTION _pgr_dijkstra( - edges_sql TEXT, - start_vids ANYARRAY, - end_vids ANYARRAY, - directed BOOLEAN DEFAULT true, - only_cost BOOLEAN DEFAULT false, - normal BOOLEAN DEFAULT true, - n_goals BIGINT DEFAULT 0, - - OUT seq INTEGER, - OUT path_seq INTEGER, - OUT start_vid BIGINT, - OUT end_vid BIGINT, - OUT node BIGINT, - OUT edge BIGINT, - OUT cost FLOAT, - OUT agg_cost FLOAT) -RETURNS SETOF RECORD AS -'MODULE_PATHNAME' -LANGUAGE C VOLATILE STRICT; - - ---v3.1 -CREATE FUNCTION _pgr_dijkstra( - edges_sql TEXT, - combinations_sql TEXT, - directed BOOLEAN DEFAULT true, - only_cost BOOLEAN DEFAULT false, - normal BOOLEAN DEFAULT true, - - OUT seq INTEGER, - OUT path_seq INTEGER, - OUT start_vid BIGINT, - OUT end_vid BIGINT, - OUT node BIGINT, - OUT edge BIGINT, - OUT cost FLOAT, - OUT agg_cost FLOAT) -RETURNS SETOF RECORD AS -'MODULE_PATHNAME' -LANGUAGE C VOLATILE STRICT; - --- COMMENTS +LANGUAGE C VOLATILE; -COMMENT ON FUNCTION _pgr_dijkstra(TEXT, ANYARRAY, ANYARRAY, BOOLEAN, BOOLEAN, BOOLEAN, BIGINT) -IS 'pgRouting internal function'; -COMMENT ON FUNCTION _pgr_dijkstra(TEXT, TEXT, BOOLEAN, BOOLEAN, BOOLEAN) -IS 'pgRouting internal function'; diff --git a/sql/dijkstra/_dijkstraNear.sql b/sql/dijkstra/_dijkstraNear.sql deleted file mode 100644 index f84ec497c4e..00000000000 --- a/sql/dijkstra/_dijkstraNear.sql +++ /dev/null @@ -1,121 +0,0 @@ -/*PGR-GNU***************************************************************** - -Copyright (c) 2018 pgRouting developers -Mail: project@pgrouting.org - -Copyright (c) 2018 Celia Virginia Vergara Castillo -mail: vicky_vergara@hotmail.com - ------- - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - ********************************************************************PGR-GNU*/ - --------------------- --- _pgr_dijkstraNear --------------------- -/* this file is kept for backward compatibility */ - --- ONE to MANY ---v3.0 -CREATE FUNCTION _pgr_dijkstraNear( - TEXT, -- edges_sql (required) - BIGINT, -- from_vid (required) - ANYARRAY, -- to_vids (required) - BIGINT, -- stop_at (required) - - directed BOOLEAN DEFAULT true, - - OUT seq INTEGER, - OUT path_seq INTEGER, - OUT end_vid BIGINT, - OUT node BIGINT, - OUT edge BIGINT, - OUT cost FLOAT, - OUT agg_cost FLOAT) -RETURNS SETOF RECORD AS -$BODY$ - SELECT seq, path_seq, end_vid, node, edge, cost, agg_cost - FROM _pgr_dijkstra(_pgr_get_statement($1), ARRAY[$2]::BIGINT[], $3::BIGINT[], $5, false, true, $4); -$BODY$ -LANGUAGE sql VOLATILE -COST 100 -ROWS 1000; - - --- MANY to ONE ---v3.0 -CREATE FUNCTION _pgr_dijkstraNear( - TEXT, -- edges_sql (required) - ANYARRAY, -- from_vids (required) - BIGINT, -- to_vid (required) - BIGINT, -- stop_at (required) - - directed BOOLEAN DEFAULT true, - - OUT seq INTEGER, - OUT path_seq INTEGER, - OUT start_vid BIGINT, - OUT node BIGINT, - OUT edge BIGINT, - OUT cost FLOAT, - OUT agg_cost FLOAT) -RETURNS SETOF RECORD AS -$BODY$ - SELECT seq, path_seq, start_vid, node, edge, cost, agg_cost - FROM _pgr_dijkstra(_pgr_get_statement($1), $2::BIGINT[], ARRAY[$3]::BIGINT[], $5, false, false, $4); -$BODY$ -LANGUAGE sql VOLATILE -COST 100 -ROWS 1000; - --- MANY to MANY ---v3.0 -CREATE FUNCTION _pgr_dijkstraNear( - TEXT, -- edges_sql (required) - ANYARRAY, -- from_vids (required) - ANYARRAY, -- to_vids (required) - BIGINT, -- stop_at (required) - - directed BOOLEAN DEFAULT true, - - OUT seq INTEGER, - OUT path_seq INTEGER, - OUT end_vid BIGINT, - OUT start_vid BIGINT, - OUT node BIGINT, - OUT edge BIGINT, - OUT cost FLOAT, - OUT agg_cost FLOAT) -RETURNS SETOF RECORD AS -$BODY$ - SELECT seq, path_seq, start_vid, end_vid, node, edge, cost, agg_cost - FROM _pgr_dijkstra(_pgr_get_statement($1), ARRAY[$2]::BIGINT[], ARRAY[$3]::BIGINT[], $5, false, false, $4); -$BODY$ -LANGUAGE sql VOLATILE -COST 100 -ROWS 1000; - --- COMMENTS - -COMMENT ON FUNCTION _pgr_dijkstraNear(TEXT, BIGINT, ANYARRAY, BIGINT, BOOLEAN) -IS 'pgRouting internal function'; - -COMMENT ON FUNCTION _pgr_dijkstraNear(TEXT, ANYARRAY, BIGINT, BIGINT, BOOLEAN) -IS 'pgRouting internal function'; - -COMMENT ON FUNCTION _pgr_dijkstraNear(TEXT, ANYARRAY, ANYARRAY, BIGINT, BOOLEAN) -IS 'pgRouting internal function'; diff --git a/sql/dijkstra/dijkstra.sql b/sql/dijkstra/dijkstra.sql index d2c4595e786..8acc7ed9cc7 100644 --- a/sql/dijkstra/dijkstra.sql +++ b/sql/dijkstra/dijkstra.sql @@ -53,7 +53,7 @@ CREATE FUNCTION pgr_dijkstra( RETURNS SETOF RECORD AS $BODY$ SELECT seq, path_seq, start_vid, end_vid, node, edge, cost, agg_cost - FROM _pgr_dijkstra(_pgr_get_statement($1), ARRAY[$2]::BIGINT[], ARRAY[$3]::BIGINT[], $4, false, true); + FROM _pgr_dijkstrav4(_pgr_get_statement($1), NULL::TEXT, ARRAY[$2]::BIGINT[], ARRAY[$3]::BIGINT[], $4, false, true, 0, false); $BODY$ LANGUAGE sql VOLATILE STRICT COST 100 @@ -79,7 +79,7 @@ CREATE FUNCTION pgr_dijkstra( RETURNS SETOF RECORD AS $BODY$ SELECT seq, path_seq, start_vid, end_vid, node, edge, cost, agg_cost - FROM _pgr_dijkstra(_pgr_get_statement($1), ARRAY[$2]::BIGINT[], $3::BIGINT[], $4, false, true); + FROM _pgr_dijkstrav4(_pgr_get_statement($1), NULL::TEXT, ARRAY[$2]::BIGINT[], $3::BIGINT[], $4, false, true, 0, false); $BODY$ LANGUAGE sql VOLATILE STRICT COST 100 @@ -105,7 +105,7 @@ CREATE FUNCTION pgr_dijkstra( RETURNS SETOF RECORD AS $BODY$ SELECT seq, path_seq, start_vid, end_vid, node, edge, cost, agg_cost - FROM _pgr_dijkstra(_pgr_get_statement($1), $2::BIGINT[], ARRAY[$3]::BIGINT[], $4, false, false); + FROM _pgr_dijkstrav4(_pgr_get_statement($1), NULL::TEXT, $2::BIGINT[], ARRAY[$3]::BIGINT[], $4, false, false, 0, false); $BODY$ LANGUAGE sql VOLATILE STRICT COST 100 @@ -131,7 +131,7 @@ CREATE FUNCTION pgr_dijkstra( RETURNS SETOF RECORD AS $BODY$ SELECT seq, path_seq, start_vid, end_vid, node, edge, cost, agg_cost - FROM _pgr_dijkstra(_pgr_get_statement($1), $2::BIGINT[], $3::BIGINT[], $4, false, true); + FROM _pgr_dijkstrav4(_pgr_get_statement($1), NULL::TEXT, $2::BIGINT[], $3::BIGINT[], $4, false, true, 0, false); $BODY$ LANGUAGE sql VOLATILE STRICT COST 100 @@ -156,7 +156,7 @@ CREATE FUNCTION pgr_dijkstra( RETURNS SETOF RECORD AS $BODY$ SELECT seq, path_seq, start_vid, end_vid, node, edge, cost, agg_cost - FROM _pgr_dijkstra(_pgr_get_statement($1), _pgr_get_statement($2), $3, false, true); + FROM _pgr_dijkstrav4(_pgr_get_statement($1), _pgr_get_statement($2), NULL::BIGINT[], NULL::BIGINT[], $3, false, true, 0, false); $BODY$ LANGUAGE sql VOLATILE STRICT COST 100 diff --git a/sql/dijkstra/dijkstraCost.sql b/sql/dijkstra/dijkstraCost.sql index f3f3612d61b..64f7bf8307a 100644 --- a/sql/dijkstra/dijkstraCost.sql +++ b/sql/dijkstra/dijkstraCost.sql @@ -43,7 +43,7 @@ CREATE FUNCTION pgr_dijkstraCost( RETURNS SETOF RECORD AS $BODY$ SELECT start_vid, end_vid, agg_cost - FROM _pgr_dijkstra(_pgr_get_statement($1), ARRAY[$2]::BIGINT[], ARRAY[$3]::BIGINT[], $4, true); + FROM _pgr_dijkstrav4(_pgr_get_statement($1), NULL::TEXT, ARRAY[$2]::BIGINT[], ARRAY[$3]::BIGINT[], $4, true, true, 0, false); $BODY$ LANGUAGE sql VOLATILE STRICT COST 100 @@ -66,7 +66,7 @@ CREATE FUNCTION pgr_dijkstraCost( RETURNS SETOF RECORD AS $BODY$ SELECT start_vid, end_vid, agg_cost - FROM _pgr_dijkstra(_pgr_get_statement($1), ARRAY[$2]::BIGINT[], $3::BIGINT[], $4, true); + FROM _pgr_dijkstrav4(_pgr_get_statement($1), NULL::TEXT, ARRAY[$2]::BIGINT[], $3::BIGINT[], $4, true, true, 0, false); $BODY$ LANGUAGE sql VOLATILE STRICT COST 100 @@ -90,7 +90,7 @@ CREATE FUNCTION pgr_dijkstraCost( RETURNS SETOF RECORD AS $BODY$ SELECT start_vid, end_vid, agg_cost - FROM _pgr_dijkstra(_pgr_get_statement($1), $2::BIGINT[], ARRAY[$3]::BIGINT[], $4, true); + FROM _pgr_dijkstrav4(_pgr_get_statement($1), NULL::TEXT, $2::BIGINT[], ARRAY[$3]::BIGINT[], $4, true, false, 0, false); $BODY$ LANGUAGE sql VOLATILE STRICT COST 100 @@ -114,7 +114,7 @@ CREATE FUNCTION pgr_dijkstraCost( RETURNS SETOF RECORD AS $BODY$ SELECT start_vid, end_vid, agg_cost - FROM _pgr_dijkstra(_pgr_get_statement($1), $2::BIGINT[], $3::BIGINT[], $4, true); + FROM _pgr_dijkstrav4(_pgr_get_statement($1), NULL::TEXT, $2::BIGINT[], $3::BIGINT[], $4, true, true, 0, false); $BODY$ LANGUAGE sql VOLATILE STRICT COST 100 @@ -134,7 +134,7 @@ CREATE FUNCTION pgr_dijkstraCost( RETURNS SETOF RECORD AS $BODY$ SELECT start_vid, end_vid, agg_cost - FROM _pgr_dijkstra(_pgr_get_statement($1), _pgr_get_statement($2), $3, true, true); + FROM _pgr_dijkstrav4(_pgr_get_statement($1), _pgr_get_statement($2), NULL::BIGINT[], NULL::BIGINT[], $3, true, true, 0, false); $BODY$ LANGUAGE sql VOLATILE STRICT COST 100 diff --git a/sql/dijkstra/dijkstraCostMatrix.sql b/sql/dijkstra/dijkstraCostMatrix.sql index 44629ff9cd3..55fa462df33 100644 --- a/sql/dijkstra/dijkstraCostMatrix.sql +++ b/sql/dijkstra/dijkstraCostMatrix.sql @@ -42,7 +42,7 @@ CREATE FUNCTION pgr_dijkstraCostMatrix( RETURNS SETOF RECORD AS $BODY$ SELECT a.start_vid, a.end_vid, a.agg_cost - FROM _pgr_dijkstra(_pgr_get_statement($1), $2, $2, $3, TRUE) a; + FROM _pgr_dijkstrav4(_pgr_get_statement($1), NULL::TEXT, $2, $2, $3, true, true, 0, false) a; $BODY$ LANGUAGE SQL VOLATILE STRICT COST 100 diff --git a/sql/dijkstra/dijkstraNear.sql b/sql/dijkstra/dijkstraNear.sql index e0c8256285e..3ff95dc3cb6 100644 --- a/sql/dijkstra/dijkstraNear.sql +++ b/sql/dijkstra/dijkstraNear.sql @@ -49,7 +49,7 @@ CREATE FUNCTION pgr_dijkstraNear( RETURNS SETOF RECORD AS $BODY$ SELECT seq, path_seq, start_vid, end_vid, node, edge, cost, agg_cost - FROM _pgr_dijkstra(_pgr_get_statement($1), ARRAY[$2]::BIGINT[], $3::BIGINT[], directed, false, true, cap); + FROM _pgr_dijkstrav4(_pgr_get_statement($1), NULL::TEXT, ARRAY[$2]::BIGINT[], $3::BIGINT[], directed, false, true, cap, false); $BODY$ LANGUAGE sql VOLATILE STRICT COST 100 @@ -76,7 +76,7 @@ CREATE FUNCTION pgr_dijkstraNear( RETURNS SETOF RECORD AS $BODY$ SELECT seq, path_seq, start_vid, end_vid, node, edge, cost, agg_cost - FROM _pgr_dijkstra(_pgr_get_statement($1), $2::BIGINT[], ARRAY[$3]::BIGINT[], directed, false, false, cap); + FROM _pgr_dijkstrav4(_pgr_get_statement($1), NULL::TEXT, $2::BIGINT[], ARRAY[$3]::BIGINT[], directed, false, false, cap, false); $BODY$ LANGUAGE sql VOLATILE STRICT COST 100 @@ -104,7 +104,7 @@ CREATE FUNCTION pgr_dijkstraNear( RETURNS SETOF RECORD AS $BODY$ SELECT seq, path_seq, start_vid, end_vid, node, edge, cost, agg_cost - FROM _pgr_dijkstra(_pgr_get_statement($1), $2::BIGINT[], $3::BIGINT[], directed, false, true, cap, global); + FROM _pgr_dijkstrav4(_pgr_get_statement($1), NULL::TEXT, $2::BIGINT[], $3::BIGINT[], directed, false, true, cap, global); $BODY$ LANGUAGE sql VOLATILE STRICT COST 100 @@ -131,7 +131,7 @@ CREATE FUNCTION pgr_dijkstraNear( RETURNS SETOF RECORD AS $BODY$ SELECT seq, path_seq, start_vid, end_vid, node, edge, cost, agg_cost - FROM _pgr_dijkstra(_pgr_get_statement($1), _pgr_get_statement($2), directed, false, cap, global); + FROM _pgr_dijkstrav4(_pgr_get_statement($1), _pgr_get_statement($2), NULL::BIGINT[], NULL::BIGINT[], directed, false, true, cap, global); $BODY$ LANGUAGE sql VOLATILE STRICT COST 100 diff --git a/sql/dijkstra/dijkstraNearCost.sql b/sql/dijkstra/dijkstraNearCost.sql index 3d0d253c339..354d9b7bb93 100644 --- a/sql/dijkstra/dijkstraNearCost.sql +++ b/sql/dijkstra/dijkstraNearCost.sql @@ -44,7 +44,7 @@ CREATE FUNCTION pgr_dijkstraNearCost( RETURNS SETOF RECORD AS $BODY$ SELECT start_vid, end_vid, agg_cost - FROM _pgr_dijkstra(_pgr_get_statement($1), ARRAY[$2]::BIGINT[], $3::BIGINT[], directed, true, true, cap, true); + FROM _pgr_dijkstrav4(_pgr_get_statement($1), NULL::TEXT, ARRAY[$2]::BIGINT[], $3::BIGINT[], directed, true, true, cap, true); $BODY$ LANGUAGE sql VOLATILE STRICT COST 100 @@ -66,7 +66,7 @@ CREATE FUNCTION pgr_dijkstraNearCost( RETURNS SETOF RECORD AS $BODY$ SELECT start_vid, end_vid, agg_cost - FROM _pgr_dijkstra(_pgr_get_statement($1), $2::BIGINT[], ARRAY[$3]::BIGINT[], directed, true, false, cap, true); + FROM _pgr_dijkstrav4(_pgr_get_statement($1), NULL::TEXT, $2::BIGINT[], ARRAY[$3]::BIGINT[], directed, true, false, cap, true); $BODY$ LANGUAGE sql VOLATILE STRICT COST 100 @@ -89,7 +89,7 @@ CREATE FUNCTION pgr_dijkstraNearCost( RETURNS SETOF RECORD AS $BODY$ SELECT start_vid, end_vid, agg_cost - FROM _pgr_dijkstra(_pgr_get_statement($1), $2::BIGINT[], $3::BIGINT[], directed, true, true, cap, global); + FROM _pgr_dijkstrav4(_pgr_get_statement($1), NULL::TEXT, $2::BIGINT[], $3::BIGINT[], directed, true, true, cap, global); $BODY$ LANGUAGE sql VOLATILE STRICT COST 100 @@ -111,7 +111,7 @@ CREATE FUNCTION pgr_dijkstraNearCost( RETURNS SETOF RECORD AS $BODY$ SELECT start_vid, end_vid, agg_cost - FROM _pgr_dijkstra(_pgr_get_statement($1), _pgr_get_statement($2), directed, true, cap, global); + FROM _pgr_dijkstrav4(_pgr_get_statement($1), _pgr_get_statement($2), NULL::BIGINT[], NULL::BIGINT[], directed, true, true, cap, global); $BODY$ LANGUAGE sql VOLATILE STRICT COST 100 diff --git a/sql/sigs/pgrouting--4.0.sig b/sql/sigs/pgrouting--4.0.sig index 1b15732c3dc..5c8022230a7 100644 --- a/sql/sigs/pgrouting--4.0.sig +++ b/sql/sigs/pgrouting--4.0.sig @@ -115,22 +115,16 @@ pgr_dijkstranearcost(text,anyarray,anyarray,boolean,bigint,boolean) pgr_dijkstranearcost(text,anyarray,bigint,boolean,bigint) pgr_dijkstranearcost(text,bigint,anyarray,boolean,bigint) pgr_dijkstranearcost(text,text,boolean,bigint,boolean) -_pgr_dijkstranear(text,anyarray,anyarray,bigint,boolean) pgr_dijkstranear(text,anyarray,anyarray,boolean,bigint,boolean) -_pgr_dijkstranear(text,anyarray,bigint,bigint,boolean) pgr_dijkstranear(text,anyarray,bigint,boolean,bigint) -_pgr_dijkstranear(text,bigint,anyarray,bigint,boolean) pgr_dijkstranear(text,bigint,anyarray,boolean,bigint) pgr_dijkstranear(text,text,boolean,bigint,boolean) pgr_dijkstra(text,anyarray,anyarray,boolean) -_pgr_dijkstra(text,anyarray,anyarray,boolean,boolean,boolean,bigint) -_pgr_dijkstra(text,anyarray,anyarray,boolean,boolean,boolean,bigint,boolean) pgr_dijkstra(text,anyarray,bigint,boolean) pgr_dijkstra(text,bigint,anyarray,boolean) pgr_dijkstra(text,bigint,bigint,boolean) pgr_dijkstra(text,text,boolean) -_pgr_dijkstra(text,text,boolean,boolean,bigint,boolean) -_pgr_dijkstra(text,text,boolean,boolean,boolean) +_pgr_dijkstrav4(text,text,anyarray,anyarray,boolean,boolean,boolean,bigint,boolean) _pgr_dijkstravia(text,anyarray,boolean,boolean,boolean) pgr_dijkstravia(text,anyarray,boolean,boolean,boolean) _pgr_drivingdistance(text,anyarray,double precision,boolean,boolean) diff --git a/src/cpp_common/combinations.cpp b/src/cpp_common/combinations.cpp index 739685c449d..5b58922c952 100644 --- a/src/cpp_common/combinations.cpp +++ b/src/cpp_common/combinations.cpp @@ -37,35 +37,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. namespace pgrouting { namespace utilities { -#if 1 -std::map> -get_combinations(const II_t_rt *combinations, size_t total) { - std::map> result; - - /* TODO(vicky) maybe use std::for_each */ - for (size_t i = 0; i < total; i++) { - auto row = combinations[i]; - result[row.d1.source].insert(row.d2.target); - } - return result; -} - -std::map> -get_combinations( - int64_t *start_arr, - size_t size_start_arr, - int64_t *end_arr, - size_t size_end_arr) { - std::map> result; - - for (size_t i = 0; i < size_start_arr; ++i) { - for (size_t j = 0; j < size_end_arr; ++j) { - result[start_arr[i]].insert(end_arr[j]); - } - } - return result; -} -#endif std::map> get_combinations( diff --git a/src/dijkstra/dijkstra.c b/src/dijkstra/dijkstra.c index 0e47f3a6414..473aa334260 100644 --- a/src/dijkstra/dijkstra.c +++ b/src/dijkstra/dijkstra.c @@ -43,6 +43,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. PG_MODULE_MAGIC; +PGDLLEXPORT Datum _pgr_dijkstrav4(PG_FUNCTION_ARGS); +PG_FUNCTION_INFO_V1(_pgr_dijkstrav4); + PGDLLEXPORT Datum _pgr_dijkstra(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(_pgr_dijkstra); @@ -112,6 +115,91 @@ process( pgr_SPI_finish(); } +PGDLLEXPORT Datum +_pgr_dijkstrav4(PG_FUNCTION_ARGS) { + FuncCallContext *funcctx; + TupleDesc tuple_desc; + + Path_rt *result_tuples = NULL; + size_t result_count = 0; + + if (SRF_IS_FIRSTCALL()) { + MemoryContext oldcontext; + funcctx = SRF_FIRSTCALL_INIT(); + oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); + + if (PG_ARGISNULL(1)) PGR_DBG("is null"); + process( + text_to_cstring(PG_GETARG_TEXT_P(0)), + PG_ARGISNULL(1)? NULL : text_to_cstring(PG_GETARG_TEXT_P(1)), + PG_ARGISNULL(2)? NULL : PG_GETARG_ARRAYTYPE_P(2), + PG_ARGISNULL(3)? NULL : PG_GETARG_ARRAYTYPE_P(3), + PG_GETARG_BOOL(4), + PG_GETARG_BOOL(5), + PG_GETARG_BOOL(6), + PG_GETARG_INT64(7), + PG_GETARG_BOOL(8), + &result_tuples, + &result_count); + + funcctx->max_calls = result_count; + funcctx->user_fctx = result_tuples; + if (get_call_result_type(fcinfo, NULL, &tuple_desc) + != TYPEFUNC_COMPOSITE) { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("function returning record called in context " + "that cannot accept type record"))); + } + + funcctx->tuple_desc = tuple_desc; + MemoryContextSwitchTo(oldcontext); + } + + funcctx = SRF_PERCALL_SETUP(); + tuple_desc = funcctx->tuple_desc; + result_tuples = (Path_rt*) funcctx->user_fctx; + + if (funcctx->call_cntr < funcctx->max_calls) { + HeapTuple tuple; + Datum result; + Datum *values; + bool* nulls; + size_t call_cntr = funcctx->call_cntr; + + size_t numb = 8; + values = palloc(numb * sizeof(Datum)); + nulls = palloc(numb * sizeof(bool)); + + size_t i; + for (i = 0; i < numb; ++i) { + nulls[i] = false; + } + + int64_t seq = call_cntr == 0? 1 : result_tuples[call_cntr - 1].start_id; + + values[0] = Int32GetDatum((int32_t)call_cntr + 1); + values[1] = Int32GetDatum((int32_t)seq); + values[2] = Int64GetDatum(result_tuples[call_cntr].start_id); + values[3] = Int64GetDatum(result_tuples[call_cntr].end_id); + values[4] = Int64GetDatum(result_tuples[call_cntr].node); + values[5] = Int64GetDatum(result_tuples[call_cntr].edge); + values[6] = Float8GetDatum(result_tuples[call_cntr].cost); + values[7] = Float8GetDatum(result_tuples[call_cntr].agg_cost); + + result_tuples[call_cntr].start_id = result_tuples[call_cntr].edge < 0? 1 : seq + 1; + + tuple = heap_form_tuple(tuple_desc, values, nulls); + result = HeapTupleGetDatum(tuple); + SRF_RETURN_NEXT(funcctx, result); + } else { + SRF_RETURN_DONE(funcctx); + } +} + + +/* kept for backwards compatibility + * TODO remove on 5.0.0 */ PGDLLEXPORT Datum _pgr_dijkstra(PG_FUNCTION_ARGS) { FuncCallContext *funcctx; @@ -126,8 +214,6 @@ _pgr_dijkstra(PG_FUNCTION_ARGS) { oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); if (PG_NARGS() == 7) { - /* kept for backwards compatibility - * TODO remove on 4.0.0 */ process( text_to_cstring(PG_GETARG_TEXT_P(0)), NULL, @@ -142,8 +228,6 @@ _pgr_dijkstra(PG_FUNCTION_ARGS) { &result_count); } else if (PG_NARGS() == 5) { - /* kept for backwards compatibility - * TODO remove on 4.0.0 */ process( text_to_cstring(PG_GETARG_TEXT_P(0)), text_to_cstring(PG_GETARG_TEXT_P(1)), diff --git a/src/dijkstra/dijkstraVia_driver.cpp b/src/dijkstra/dijkstraVia_driver.cpp index 3713d0e7e0e..f417f637439 100644 --- a/src/dijkstra/dijkstraVia_driver.cpp +++ b/src/dijkstra/dijkstraVia_driver.cpp @@ -138,7 +138,7 @@ pgr_do_dijkstraVia( if (directed) { pgrouting::DirectedGraph digraph; digraph.insert_edges(edges); - pgrouting::pgr_dijkstraVia( + pgrouting::dijkstraVia( digraph, via, paths, @@ -148,7 +148,7 @@ pgr_do_dijkstraVia( } else { pgrouting::UndirectedGraph undigraph; undigraph.insert_edges(edges); - pgrouting::pgr_dijkstraVia( + pgrouting::dijkstraVia( undigraph, via, paths, diff --git a/src/trsp/trspVia_driver.cpp b/src/trsp/trspVia_driver.cpp index 1ac8825a02e..aa026c90493 100644 --- a/src/trsp/trspVia_driver.cpp +++ b/src/trsp/trspVia_driver.cpp @@ -184,7 +184,7 @@ pgr_do_trspVia( if (directed) { pgrouting::DirectedGraph digraph; digraph.insert_edges(edges); - pgrouting::pgr_dijkstraVia( + pgrouting::dijkstraVia( digraph, via, paths, @@ -194,7 +194,7 @@ pgr_do_trspVia( } else { pgrouting::UndirectedGraph undigraph; undigraph.insert_edges(edges); - pgrouting::pgr_dijkstraVia( + pgrouting::dijkstraVia( undigraph, via, paths, diff --git a/src/trsp/trspVia_withPoints_driver.cpp b/src/trsp/trspVia_withPoints_driver.cpp index 2068fa9dfa1..ed48655a043 100644 --- a/src/trsp/trspVia_withPoints_driver.cpp +++ b/src/trsp/trspVia_withPoints_driver.cpp @@ -212,7 +212,7 @@ pgr_do_trspVia_withPoints( pgrouting::DirectedGraph digraph; digraph.insert_edges(edges); digraph.insert_edges(pg_graph.new_edges()); - pgrouting::pgr_dijkstraVia( + pgrouting::dijkstraVia( digraph, via, paths, @@ -223,7 +223,7 @@ pgr_do_trspVia_withPoints( pgrouting::UndirectedGraph undigraph; undigraph.insert_edges(edges); undigraph.insert_edges(pg_graph.new_edges()); - pgrouting::pgr_dijkstraVia( + pgrouting::dijkstraVia( undigraph, via, paths, diff --git a/src/withPoints/withPointsVia_driver.cpp b/src/withPoints/withPointsVia_driver.cpp index 515abe4196c..aecb576890d 100644 --- a/src/withPoints/withPointsVia_driver.cpp +++ b/src/withPoints/withPointsVia_driver.cpp @@ -172,7 +172,7 @@ pgr_do_withPointsVia( pgrouting::DirectedGraph digraph(vertices); digraph.insert_edges(edges); digraph.insert_edges(pg_graph.new_edges()); - pgrouting::pgr_dijkstraVia( + pgrouting::dijkstraVia( digraph, via_vertices, paths, @@ -183,7 +183,7 @@ pgr_do_withPointsVia( pgrouting::UndirectedGraph undigraph(vertices); undigraph.insert_edges(edges); undigraph.insert_edges(pg_graph.new_edges()); - pgrouting::pgr_dijkstraVia( + pgrouting::dijkstraVia( undigraph, via_vertices, paths,