File: innerQuery.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 (154 lines) | stat: -rw-r--r-- 5,416 bytes parent folder | download | duplicates (2)
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154

CREATE OR REPLACE FUNCTION test_anyInteger(
  begin_sql TEXT,
  rest_sql TEXT,
  params TEXT[], parameter TEXT,
  tbl TEXT DEFAULT 'edges')
RETURNS SETOF TEXT AS
$BODY$
DECLARE
start_sql TEXT;
end_sql TEXT;
query TEXT;
p TEXT;
code TEXT = 'XX000';
msg TEXT = $$Unexpected Column '$$ || parameter || $$' type. Expected ANY-INTEGER$$;
BEGIN
  start_sql = 'SELECT * FROM ' || begin_sql || '$$ SELECT ';
  FOREACH  p IN ARRAY params LOOP
      IF p = parameter THEN CONTINUE;
      END IF;
      start_sql = start_sql || p || ', ';
  END LOOP;
  end_sql = ' FROM ' || tbl || ' $$' || rest_sql;

  IF begin_sql LIKE 'pgr_extractVertices(%'
    OR begin_sql LIKE 'pgr_degree(%'
    OR begin_sql LIKE 'pgr_findCloseEdges(%'
  THEN
    code = 'P0001';
    msg = 'Expected type of column "'|| parameter|| '" is ANY-INTEGER';
  END IF;

  IF (tbl = 'vrp_vehicles') THEN
    IF (parameter = 'vehicle_id') THEN
      msg = $$Unexpected Column 'id' type. Expected ANY-INTEGER$$;
    END IF;
  END IF;
  IF (tbl = 'vrp_distance') THEN
    IF (parameter = 'src_id') THEN
      msg = $$Unexpected Column 'start_vid' type. Expected ANY-INTEGER$$;
    ELSIF (parameter = 'dest_id') THEN
      msg = $$Unexpected Column 'end_vid' type. Expected ANY-INTEGER$$;
    END IF;
  END IF;


  query := start_sql || parameter || '::SMALLINT ' || end_sql;
  RETURN query SELECT lives_ok(query, 'TEST '|| parameter || ' with SMALLINT: ' || query);

  query := start_sql || parameter || '::INTEGER ' || end_sql;
  RETURN query SELECT lives_ok(query, 'TEST '|| parameter || ' with INTEGER: ' || query);

  query := start_sql || parameter || '::BIGINT ' || end_sql;
  RETURN query SELECT lives_ok(query, 'TEST '|| parameter || ' with BIGINT: ' || query);

  query := start_sql || parameter || '::REAL ' || end_sql;
  RETURN query SELECT throws_ok(query, code, msg, 'TEST '|| parameter || ' with REAL: ' || query);

  query := start_sql || parameter || '::FLOAT8 ' || end_sql;
  RETURN query SELECT throws_ok(query, code, msg, 'TEST '|| parameter || ' with FLOAT8: ' || query);

  query := start_sql || parameter || '::NUMERIC ' || end_sql;
  RETURN query SELECT throws_ok(query, code, msg, 'TEST '|| parameter || ' with NUMERIC: ' || query);
END;
$BODY$ LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION test_anyNumerical(
begin_sql TEXT,
rest_sql TEXT,
params TEXT[], parameter TEXT,
tbl TEXT DEFAULT 'edges')
RETURNS SETOF TEXT AS
$BODY$
DECLARE
start_sql TEXT;
end_sql TEXT;
query TEXT;
p TEXT;
BEGIN
  start_sql = 'SELECT * FROM ' || begin_sql || '$$ SELECT ';
  FOREACH  p IN ARRAY params LOOP
      IF p = parameter THEN CONTINUE;
      END IF;
      start_sql = start_sql || p || ', ';
  END LOOP;
  end_sql = ' FROM ' || tbl || ' $$' || rest_sql;

  query := start_sql || parameter || '::SMALLINT ' || end_sql;
  RETURN query SELECT lives_ok(query, 'TEST '|| parameter || ' with SMALLINT: ' || query);

  query := start_sql || parameter || '::INTEGER ' || end_sql;
  RETURN query SELECT lives_ok(query, 'TEST '|| parameter || ' with INTEGER: ' || query);

  query := start_sql || parameter || '::BIGINT ' || end_sql;
  RETURN query SELECT lives_ok(query, 'TEST '|| parameter || ' with BIGINT: ' || query);

  query := start_sql || parameter || '::REAL ' || end_sql;
  RETURN query SELECT lives_ok(query, 'TEST '|| parameter || ' with REAL: ' || query);

  query := start_sql || parameter || '::FLOAT8 ' || end_sql;
  RETURN query SELECT lives_ok(query, 'TEST '|| parameter || ' with FLOAT8: ' || query);

  query := start_sql || parameter || '::NUMERIC ' || end_sql;
  RETURN query SELECT lives_ok(query, 'TEST '|| parameter || ' with NUMERIC: ' || query);
END;
$BODY$ LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION test_anyIntegerArr(
  begin_sql TEXT,
  rest_sql TEXT,
  params TEXT[], parameter TEXT,
  tbl TEXT DEFAULT 'vertex_table')
RETURNS SETOF TEXT AS
$BODY$
DECLARE
start_sql TEXT;
end_sql TEXT;
query TEXT;
p TEXT;
code TEXT = 'XX000';
msg TEXT = $$Unexpected Column '$$ || parameter || $$' type. Expected ANY-INTEGER-ARRAY$$;
BEGIN
  start_sql = 'SELECT * FROM ' || begin_sql || '$$ SELECT ';
  FOREACH  p IN ARRAY params LOOP
      IF p = parameter THEN CONTINUE;
      END IF;
      start_sql = start_sql || p || ', ';
  END LOOP;
  end_sql = ' FROM ' || tbl || ' $$' || rest_sql;

  IF begin_sql LIKE 'pgr_degree(%' THEN
    code = 'P0001';
    msg = 'Expected type of column "'|| parameter|| '" is ANY-INTEGER-ARRAY';
  END IF;

  query := start_sql || parameter || '::SMALLINT[] ' || end_sql;
  RETURN query SELECT lives_ok(query, 'TEST '|| parameter || ' with SMALLINT[]: ' || query);

  query := start_sql || parameter || '::INTEGER[] ' || end_sql;
  RETURN query SELECT lives_ok(query, 'TEST '|| parameter || ' with INTEGER[]: ' || query);

  query := start_sql || parameter || '::BIGINT[] ' || end_sql;
  RETURN query SELECT lives_ok(query, 'TEST '|| parameter || ' with BIGINT[]: ' || query);

  query := start_sql || parameter || '::REAL[] ' || end_sql;
  RETURN query SELECT throws_ok(query, code, msg, 'TEST '|| parameter || ' with REAL[]: ' || query);

  query := start_sql || parameter || '::FLOAT8[] ' || end_sql;
  RETURN query SELECT throws_ok(query, code, msg, 'TEST '|| parameter || ' with FLOAT8[]: ' || query);

  query := start_sql || parameter || '::NUMERIC[] ' || end_sql;
  RETURN query SELECT throws_ok(query, code, msg, 'TEST '|| parameter || ' with NUMERIC[]: ' || query);
END;
$BODY$ LANGUAGE plpgsql;