Aller au contenu

Langage de requête

--where filtre les enregistrements touchés par read, update et delete. C’est un petit langage d’expression, pas du SQL : pas de jointures, pas de sous-requêtes, pas de parenthèses, pas d’agrégation. Tout est une expression booléenne sur les colonnes d’un seul fichier GTFS.

expression := filter | filter " OR " expression
filter := term | term " AND " filter
term := champ opérateur valeur
opérateur := "=" | "!=" | ">" | ">=" | "<" | "<=" | " LIKE "

AND est prioritaire sur OR. Aucun moyen de surcharger la précédence — les parenthèses ne sont pas supportées.

OpérateurSensExemple
=Égalstop_id=S01
!=Différentroute_type!=3
>Supérieur (comparaison chaîne)stop_sequence>10
>=Supérieur ou égalarrival_time>=06:00:00
<Inférieurdate<20260101
<=Inférieur ou égalroute_type<=4
LIKEMatch style SQLstop_name LIKE Gare%

Les opérateurs de comparaison font une comparaison de chaînes. Pour les champs numériques (comme stop_sequence ou route_type), cela correspond à l’ordre intuitif à condition que les valeurs soient paddées ou non signées ; vérifiez vos données avant d’utiliser < / > sur un champ libre.

LIKE matche un pattern où :

  • % représente n’importe quelle séquence de caractères (y compris vide).
  • _ représente exactement un caractère.
PatternMatche
Gare%Gare Centrale, Gare du Nord, Gare
%NordGare du Nord, Nord
%bus%Toute valeur contenant bus
stop___stop001, stopABC — exactement 4+3 = 7 chars

Les espaces autour des opérateurs sont optionnels et n’affectent pas le sens :

stop_id=S01
stop_id = S01
stop_id = S01

Quand une valeur contient AND, OR, ou des espaces qu’on pourrait confondre avec des mots-clés, entourez-la de backticks :

stop_name=`Gare du Nord AND Est`
route_long_name=`Express 747 OR 748`

Dans les backticks, le contenu est pris tel quel. Les backticks ne sont pas requis pour les valeurs simples.

AND et OR permettent de composer. AND est prioritaire, donc

a=1 AND b=2 OR c=3

se parse en (a=1 AND b=2) OR c=3.

Comme les parenthèses ne sont pas supportées, exprimez a=1 AND (b=2 OR c=3) en découpant en plusieurs commandes, ou en passant par un OR de AND équivalent :

a=1 AND b=2 OR a=1 AND c=3
Fenêtre de terminal
gapline read stops --where "stop_id=S01"
gapline read routes --where "route_type!=3"
Fenêtre de terminal
gapline read stop-times --where "stop_sequence>10 AND stop_sequence<20"
Fenêtre de terminal
gapline read stops --where "stop_name LIKE Gare%"
gapline read stops --where "stop_name LIKE %Nord"
Fenêtre de terminal
gapline read routes --where "route_type=3 OR route_type=1"
Fenêtre de terminal
gapline read stops --where 'stop_name=`Gare du Nord AND Est`'

Les guillemets simples autour de l’expression complète (côté shell) protègent les backticks de l’expansion d’historique ou de la substitution de commandes propre à votre shell.

Erreurs fréquentes du parser et leur cause :

ErreurCause
invalid expression: ''--where "". Passez une expression ou retirez le flag.
unexpected logical operator without expressionsAND …, … OR, ou un … AND AND … ballant.
empty field name=value. Le côté gauche d’un opérateur est manquant.
empty value for field 'stop_id'stop_id=. Le côté droit d’un opérateur est manquant.
unknown operator in '…'Faute de frappe type stop_id == S01 ou stop_id LIKES Gare%.
unknown field 'stop_naem'Le nom de champ n’est pas une colonne du fichier cible. L’erreur liste les noms valides.