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
|
DROP TABLE IF EXISTS edge_table_old;
SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost, reverse_cost
INTO edge_table_old
FROM edges;
CREATE OR REPLACE FUNCTION test_Integer(fn TEXT, rest_sql TEXT, params TEXT[], parameter TEXT)
RETURNS SETOF TEXT AS
$BODY$
DECLARE
start_sql TEXT;
end_sql TEXT;
query TEXT;
p TEXT;
BEGIN
start_sql = 'select * from ' || fn || '($$ SELECT ';
FOREACH p IN ARRAY params LOOP
IF p = parameter THEN CONTINUE;
END IF;
start_sql = start_sql || p || ', ';
END LOOP;
end_sql = ' FROM edge_table_old $$' || rest_sql;
query := start_sql || parameter || '::SMALLINT ' || end_sql;
RETURN query SELECT throws_ok(query);
query := start_sql || parameter || '::INTEGER ' || end_sql;
IF NOT min_version('3.3.0') THEN PERFORM todo(1, 'Bug fix on 3.3.0'); END IF;
RETURN query SELECT lives_ok(query);
query := start_sql || parameter || '::BIGINT ' || end_sql;
RETURN query SELECT throws_ok(query);
query := start_sql || parameter || '::REAL ' || end_sql;
RETURN query SELECT throws_ok(query);
query := start_sql || parameter || '::FLOAT8 ' || end_sql;
RETURN query SELECT throws_ok(query);
query := start_sql || parameter || '::NUMERIC ' || end_sql;
RETURN query SELECT throws_ok(query);
END;
$BODY$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION test_Float(fn TEXT, rest_sql TEXT, params TEXT[], parameter TEXT)
RETURNS SETOF TEXT AS
$BODY$
DECLARE
start_sql TEXT;
end_sql TEXT;
query TEXT;
p TEXT;
BEGIN
start_sql = 'select * from ' || fn || '($$ SELECT ';
FOREACH p IN ARRAY params LOOP
IF p = parameter THEN CONTINUE;
END IF;
start_sql = start_sql || p || ', ';
END LOOP;
end_sql = ' FROM edge_table_old $$' || rest_sql;
query := start_sql || parameter || '::SMALLINT ' || end_sql;
RETURN query SELECT throws_ok(query);
query := start_sql || parameter || '::INTEGER ' || end_sql;
RETURN query SELECT throws_ok(query);
query := start_sql || parameter || '::BIGINT ' || end_sql;
RETURN query SELECT throws_ok(query);
query := start_sql || parameter || '::REAL ' || end_sql;
RETURN query SELECT throws_ok(query);
query := start_sql || parameter || '::FLOAT8 ' || end_sql;
RETURN query SELECT lives_ok(query);
query := start_sql || parameter || '::NUMERIC ' || end_sql;
RETURN query SELECT throws_ok(query);
END;
$BODY$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION style_dijkstra_trsp(fn TEXT, rest_sql TEXT, withrev BOOLEAN)
RETURNS SETOF TEXT AS
$BODY$
BEGIN
IF withrev THEN
--with reverse cost
RETURN QUERY SELECT test_integer(fn, rest_sql,
ARRAY['id', 'source', 'target', 'cost', 'reverse_cost'],
'id');
RETURN QUERY SELECT test_integer(fn, rest_sql,
ARRAY['id', 'source', 'target', 'cost', 'reverse_cost'],
'source');
RETURN QUERY SELECT test_integer(fn, rest_sql,
ARRAY['id', 'source', 'target', 'cost', 'reverse_cost'],
'target');
RETURN QUERY SELECT test_float(fn, rest_sql,
ARRAY['id', 'source', 'target', 'cost', 'reverse_cost'],
'cost');
RETURN QUERY SELECT test_float(fn, rest_sql,
ARRAY['id', 'source', 'target', 'cost', 'reverse_cost'],
'reverse_cost');
ELSE
--without reverse cost
RETURN QUERY SELECT test_integer(fn, rest_sql,
ARRAY['id', 'source', 'target', 'cost'],
'id');
RETURN QUERY SELECT test_integer(fn, rest_sql,
ARRAY['id', 'source', 'target', 'cost'],
'source');
RETURN QUERY SELECT test_integer(fn, rest_sql,
ARRAY['id', 'source', 'target', 'cost'],
'target');
RETURN QUERY SELECT test_float(fn, rest_sql,
ARRAY['id', 'source', 'target', 'cost'],
'cost');
END IF;
END;
$BODY$
LANGUAGE plpgsql;
|