-
-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathoptimizeUpdateRaw.sql
More file actions
89 lines (72 loc) · 2.48 KB
/
optimizeUpdateRaw.sql
File metadata and controls
89 lines (72 loc) · 2.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/*PGR-GNU*****************************************************************
File: optimizeUpdateRaw.sql
Copyright (c) 2021 pgRouting developers
Mail: project@pgrouting.org
Function's developer:
Copyright (c) 2021 Celia Virginia Vergara Castillo
Copyright (c) 2021 Joseph Emile Honour Percival
------
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*/
CREATE OR REPLACE PROCEDURE vrp_optimizeUpdateRaw(
TEXT, -- orders sql (required)
TEXT, -- vehicles sql (required)
TEXT, -- time matrix sql (required)
TEXT, -- time dependencies SQL
vehicles_tbl REGCLASS, -- vehicles table to update
id_column TEXT DEFAULT 'id',
stops_column TEXT DEFAULT 'stops',
execution_date BIGINT DEFAULT 0,
factor FLOAT DEFAULT 1.0,
max_cycles INTEGER DEFAULT 1,
check_triangle_inequality BOOLEAN DEFAULT false,
subdivision_kind INTEGER DEFAULT '0'
)
AS
$BODY$
DECLARE
r RECORD;
old_v BIGINT = 0;
stops BIGINT[];
BEGIN
EXECUTE format($$
WITH
new_stops AS (
SELECT vehicle_id, array_agg(order_id ORDER BY seq) AS stops
FROM _vrp_optimize(
%1$L, %2$L, %3$L, %4$L,
%5$s, %6$s, %7$s,
%8$L, %9$s,
false)
GROUP BY vehicle_id
)
UPDATE %10$I AS v
SET %11$I = n.stops
FROM new_stops AS n WHERE v.%12$I = n.vehicle_id
$$,
_vrp_get_statement($1),
_vrp_get_statement($2),
_vrp_get_statement($3),
_vrp_get_statement($4),
factor, max_cycles, execution_date,
check_triangle_inequality, subdivision_kind,
vehicles_tbl, stops_column, id_column);
COMMIT;
END;
$BODY$
LANGUAGE plpgsql;
COMMENT ON PROCEDURE vrp_optimizeUpdateRaw(TEXT, TEXT, TEXT, TEXT, REGCLASS, TEXT, TEXT, BIGINT, FLOAT, INTEGER, BOOLEAN, INTEGER)
IS 'vrp_optimizeUpdateRaw
- Documentation:
- ${PROJECT_DOC_LINK}/vrp_optimizeUpdateRaw.html
';