rendered paste body---- Route lookup
SELECT
route, rid, did, description, country, cinit, cinc, pinit, pinc, rate, cost, capacity
INTO
dest
FROM
routes
WHERE
rid = ANY((SELECT routes FROM groups WHERE gid = client.gid AND active)::varchar[]) AND
((route = SUBSTR(client.dialed, 1, 1) AND LENGTH(route) = 1) OR
(route = SUBSTR(client.dialed, 1, 2) AND LENGTH(route) = 2) OR
(route = SUBSTR(client.dialed, 1, 3) AND LENGTH(route) = 3) OR
(LENGTH(route) >= 4 AND SUBSTR(route, 1, 4) = SUBSTR(client.dialed, 1, 4) AND (client.dialed LIKE (route || '%')))) AND
active
ORDER BY
route DESC, cost ASC LIMIT 1;
Table "public.routes"
Column | Type | Modifiers
-------------+-------------------+-----------
route | character varying |
lata | character varying |
ocn | character varying |
rate | double precision |
cost | double precision |
cinit | integer |
cinc | integer |
pinit | integer |
pinc | integer |
city | character varying |
state | character varying |
country | character varying |
description | character varying |
rid | character varying |
did | integer |
capacity | integer |
active | boolean |
Indexes:
"routes_idx1" btree (substr(route::text, 1, 1)) WHERE length(route::text) = 1
"routes_idx2" btree (substr(route::text, 1, 2)) WHERE length(route::text) = 2
"routes_idx3" btree (substr(route::text, 1, 3)) WHERE length(route::text) = 3
"routes_idx4" btree (substr(route::text, 1, 4)) WHERE length(route::text) >= 4