File: spanningtree.sql

package info (click to toggle)
pgrouting 4.0.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 17,676 kB
  • sloc: cpp: 21,494; sql: 14,113; ansic: 9,896; perl: 1,144; sh: 848; javascript: 314; xml: 182; makefile: 29
file content (80 lines) | stat: -rw-r--r-- 2,870 bytes parent folder | download
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
CREATE OR REPLACE FUNCTION spanntree_types_check(fn TEXT)
RETURNS SETOF TEXT AS
$BODY$
BEGIN
  RETURN QUERY SELECT has_function(fn);
  RETURN QUERY SELECT has_function(fn,    ARRAY['text']);
  RETURN QUERY SELECT function_returns(fn, ARRAY['text'], 'setof record');

  RETURN QUERY SELECT function_args_eq(fn,
    $$SELECT '{"","edge","cost"}'::TEXT[] $$
  );

  RETURN QUERY SELECT function_types_eq(fn,
    $$VALUES ('{text,int8,float8}'::TEXT[])$$
  );

END;
$BODY$
LANGUAGE plpgsql VOLATILE;


CREATE OR REPLACE FUNCTION spanntree_dd_types_check(fn TEXT)
RETURNS SETOF TEXT AS
$BODY$
BEGIN

  RETURN QUERY SELECT has_function(fn);

  RETURN QUERY SELECT has_function(fn,  ARRAY['text','bigint','numeric']);
  RETURN QUERY SELECT has_function(fn,  ARRAY['text','anyarray','numeric']);
  RETURN QUERY SELECT has_function(fn,  ARRAY['text','bigint','double precision']);
  RETURN QUERY SELECT has_function(fn,  ARRAY['text','anyarray','double precision']);
  RETURN QUERY SELECT function_returns(fn,  ARRAY['text','bigint','numeric'],  'setof record');
  RETURN QUERY SELECT function_returns(fn,  ARRAY['text','anyarray','numeric'],  'setof record');
  RETURN QUERY SELECT function_returns(fn,  ARRAY['text','bigint','double precision'],  'setof record');
  RETURN QUERY SELECT function_returns(fn,  ARRAY['text','anyarray','double precision'],  'setof record');

  IF NOT min_version('3.7.0') THEN

  RETURN QUERY SELECT function_args_eq(fn,
    $$VALUES
    ('{"","","","seq","depth","start_vid","node","edge","cost","agg_cost"}'::TEXT[])
    $$
  );

  RETURN QUERY SELECT function_types_eq(fn,
    $$VALUES
    ('{text,int8,float8,int8,int8,int8,int8,int8,float8,float8}'::TEXT[]),
    ('{text,anyarray,float8,int8,int8,int8,int8,int8,float8,float8}'::TEXT[]),
    ('{text,int8,numeric,int8,int8,int8,int8,int8,float8,float8}'::TEXT[]),
    ('{text,anyarray,numeric,int8,int8,int8,int8,int8,float8,float8}'::TEXT[]),
    ('{text,int8,float8,int8,int8,int8,int8,int8,float8,float8}'::TEXT[]),
    ('{text,anyarray,float8,int8,int8,int8,int8,int8,float8,float8}'::TEXT[])
    $$
  );

  ELSE

  RETURN QUERY SELECT function_args_eq(fn,
    $$VALUES
    ('{"","","","seq","depth","start_vid","pred","node","edge","cost","agg_cost"}'::TEXT[])
    $$
  );

  RETURN QUERY SELECT function_types_eq(fn,
    $$VALUES
    ('{text,int8,float8,int8,int8,int8,int8,int8,int8,float8,float8}'::TEXT[]),
    ('{text,anyarray,float8,int8,int8,int8,int8,int8,int8,float8,float8}'::TEXT[]),
    ('{text,int8,numeric,int8,int8,int8,int8,int8,int8,float8,float8}'::TEXT[]),
    ('{text,anyarray,numeric,int8,int8,int8,int8,int8,int8,float8,float8}'::TEXT[]),
    ('{text,int8,float8,int8,int8,int8,int8,int8,int8,float8,float8}'::TEXT[]),
    ('{text,anyarray,float8,int8,int8,int8,int8,int8,int8,float8,float8}'::TEXT[])
    $$
  );

  END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;