feat(nix): update queries, schemas and sqlc config

This commit is contained in:
etwas 2025-04-15 21:39:19 +02:00
parent 6f8e3baabd
commit 42ccbb5008
Signed by: etwas
SSH key fingerprint: SHA256:bHhIeAdn/2k9jmOs6+u6ox98VYmoHUN3HfnpV2w8Ws0
3 changed files with 65 additions and 35 deletions

View file

@ -1,34 +1,38 @@
-- name: GetStationsByName :many
SELECT s.id,
s.name,
sl.latitude,
sl.longitude,
bus,
taxi,
tram,
ferry,
subway,
national,
regional,
suburban,
regionalexp,
nationalexp
SELECT s.id as "id",
s.name as "name",
sl.latitude as "latitude",
sl.longitude as "longitude",
bus as "bus",
taxi as "taxi",
tram as "tram",
ferry as "ferry",
subway as "subway",
national as "national",
regional as "regional",
suburban as "suburban",
regionalexp as "regionalexp",
nationalexp as "nationalexp"
FROM stops s
JOIN public.stat_locations sl
on sl.id = s.location_id
JOIN public.stat_services ss
on ss.id = s.service_id
JOIN public.station_rank sr
on sr.stop = s.id
WHERE s.id
in (SELECT id
FROM stops s2
WHERE s2.name LIKE $1
);
WHERE s2.name ILIKE ALL (@search_params::text[])
)
AND CASE WHEN sqlc.narg(long_distance)::bool THEN (ss.national = sqlc.narg(long_distance)::bool OR ss.nationalexp = sqlc.narg(long_distance)::bool) ELSE TRUE END
ORDER BY sr.count DESC;
-- name: GetStationById :one
SELECT s.id,
s.name,
sl.latitude,
sl.longitude,
SELECT s.id as "id",
s.name as "name",
sl.latitude as "latitude",
sl.longitude as "longitude",
bus,
taxi,
tram,
@ -44,31 +48,48 @@ FROM stops s
on sl.id = s.location_id
JOIN public.stat_services ss
on ss.id = s.service_id
WHERE s.id = $1;
WHERE s.id = @stop_id;
-- name: GetDeparturesById :many
SELECT DISTINCT (t.id) as "id",
t.line_name as "lineName",
t.line_productname as "lineProductName",
so.departuredelay as "departureDelay",
sd.id as "directionId",
sd.name as "directionName",
jsonb_build_object('id', sd.id, 'name', sd.name) as "direction",
ARRAY((SELECT jsonb_build_object('stop', row('id', sd.id, 'name', sd.name),
'arrival', so2.arrival,
'plannedArrival', so2.plannedarrival,
'arrivalDelay', so2.arrivaldelay,
'arrivalPlatform', so2.arrivalplatform,
'plannedArrivalPlatform', so2.plannedarrivalplatform,
'cancelled', so2.cancelled)
FROM stopovers so2
JOIN public.stops s2
ON so2.stop = s2.id
WHERE so2.id = t.id
AND so2.plannedarrival > so.planneddeparture
AND (so2.stop, so2.realtimedataupdatedat) IN (SELECT DISTINCT (stop), max(realtimedataupdatedat)
FROM stopovers so3
WHERE (so3.id = t.id
AND so3.realtimedataupdatedat <= @rt_updated_at)
GROUP BY so3.stop)))
AS "stopovers",
so.departure as "departure",
so.planneddeparture as "plannedDeparture",
so.departureplatform as "departurePlattform",
so.planneddepartureplatform as "plannedDeparturePlattform",
so.departureplatform as "departurePlatform",
so.planneddepartureplatform as "plannedDeparturePlatform",
so.cancelled as "cancelled",
so.realtimedataupdatedat as "realtimeDataUpdatedAt"
FROM stopovers so
JOIN trips t ON so.id = t.id
JOIN public.trip_meta tm on t.id = tm.id
JOIN public.stops sd on t.destination = sd.id
WHERE so.stop = $1
WHERE so.stop = @stop_id
AND (so.id, so.realtimedataupdatedat) IN (SELECT DISTINCT (id), max(realtimedataupdatedat)
FROM stopovers so2
WHERE so2.stop = $1
AND (so2.departure > $2)
AND (so2.departure < $3)
AND (so2.realtimedataupdatedat <= $4)
GROUP BY so2.id
LIMIT 50)
FROM stopovers so3
WHERE so3.stop = @stop_id
AND (so3.departure > @departure_from)
AND (so3.departure < @departure_to)
AND (so3.realtimedataupdatedat <= @rt_updated_at)
GROUP BY so3.id)
ORDER BY so.departure ASC;

View file

@ -372,4 +372,12 @@ alter table hash_hafas_tid
grant select on hash_hafas_tid to grafana;
SELECT * FROM trips WHERE line_name LIKE 'RE%' ORDER BY realtimedataupdatedat ASC LIMIT 100;
create table public.station_rank
(
stop text not null
constraint station_rank_pk
primary key
constraint station_rank_stops_id_fk
references public.stops,
count bigint
);

View file

@ -8,3 +8,4 @@ sql:
package: "bahndb_rest"
out: "queries"
sql_package: "pgx/v5"
emit_json_tags: true