Diskuse:PgRouting: Porovnání verzí

Z GeoWikiCZ
Založena nová stránka: == Poznámky == === Funkce assign_vertex_id() pro non-public schéma === Funkce <tt>assign_vertex_id()</tt> předpokládá, že tabulka se kterou pracuje se nachází …
 
m Stránka vyprázdněna
 
Řádek 1: Řádek 1:
== Poznámky ==


=== Funkce assign_vertex_id() pro non-public schéma ===
Funkce <tt>assign_vertex_id()</tt> předpokládá, že tabulka se kterou pracuje se nachází ve schématu 'public'. Následující patch přidá do této funkce nových argument pro definici pracovního schématu.
<source lang=diff>
--- pgrouting/routing_topology.sql 2012-05-02 11:41:50.000000000 +0200
+++ routing_topology.sql 2012-05-02 15:32:46.000000000 +0200
@@ -8,7 +8,7 @@
-- Last changes: 16.04.2008
-- Author: Christian Gonzalez
-----------------------------------------------------------------------
-CREATE OR REPLACE FUNCTION point_to_id(p geometry, tolerance double precision)
+CREATE OR REPLACE FUNCTION point_to_id(schema_name varchar, p geometry, tolerance double precision)
RETURNS BIGINT
AS
$$
@@ -20,7 +20,7 @@
BEGIN
-    _srid := Find_SRID('public', 'vertices_tmp', 'the_geom');
+    _srid := Find_SRID(quote_ident(schema_name), 'vertices_tmp', 'the_geom');
    SELECT
@@ -52,8 +52,8 @@
-- Last changes: 16.04.2008
-- Author: Christian Gonzalez
-----------------------------------------------------------------------
-
-CREATE OR REPLACE FUNCTION assign_vertex_id(geom_table varchar, tolerance double precision, geo_cname varchar, gid_cname varchar)
+CREATE OR REPLACE FUNCTION assign_vertex_id(schema_name varchar, geom_table varchar,
+    tolerance double precision, geo_cname varchar, gid_cname varchar)
RETURNS VARCHAR AS
$$
DECLARE
@@ -69,9 +69,9 @@
    WHEN UNDEFINED_TABLE THEN
    END;
-    EXECUTE 'CREATE TABLE vertices_tmp (id serial)';
+    EXECUTE 'CREATE TABLE '||quote_ident(schema_name)||'.vertices_tmp (id serial)';
-    srid := Find_SRID('public', quote_ident(geom_table), quote_ident(geo_cname));
+    srid := Find_SRID(quote_ident(schema_name), quote_ident(geom_table), quote_ident(geo_cname));
    EXECUTE 'SELECT addGeometryColumn(''vertices_tmp'', ''the_geom'', '||srid||', ''POINT'', 2)';
@@ -80,13 +80,14 @@
    FOR _r IN EXECUTE 'SELECT ' || quote_ident(gid_cname) || ' AS id,'
    || ' ST_StartPoint('|| quote_ident(geo_cname) ||') AS source,'
            || ' ST_EndPoint('|| quote_ident(geo_cname) ||') as target'
-     || ' FROM ' || quote_ident(geom_table) || ' WHERE ' || quote_ident(geo_cname) || ' IS NOT NULL '
+     || ' FROM ' || quote_ident(schema_name) || '.' || quote_ident(geom_table)
+        || ' WHERE ' || quote_ident(geo_cname) || ' IS NOT NULL '
    LOOP
       
-        source_id := point_to_id(_r.source, tolerance);
- target_id := point_to_id(_r.target, tolerance);
+        source_id := point_to_id(schema_name, _r.source, tolerance);
+ target_id := point_to_id(schema_name, _r.target, tolerance);
- EXECUTE 'update ' || quote_ident(geom_table) ||
+ EXECUTE 'update ' || quote_ident(schema_name) || '.' || quote_ident(geom_table) ||
' SET source = ' || source_id ||
', target = ' || target_id ||
' WHERE ' || quote_ident(gid_cname) || ' =  ' || _r.id;
@@ -98,3 +99,11 @@
$$
LANGUAGE 'plpgsql' VOLATILE STRICT;
+
+-- Overloaded for backward compatibility
+CREATE OR REPLACE FUNCTION assign_vertex_id(geom_table varchar, tolerance double precision, geo_cname varchar, gid_cname varchar)
+RETURNS VARCHAR AS
+$$
+  SELECT assign_vertex_id('public', $1, $2, $3, $4);
+$$
+LANGUAGE 'SQL' VOLATILE STRICT;
</source>

Aktuální verze z 11. 5. 2013, 18:04