Requêtes — vue d'ensemble
Une requête dans Liberty est une instruction SQL nommée rattachée à un connecteur (lui-même rattaché à un pool, c'est-à-dire à une base de données). Les écrans, tableaux de bord, graphiques, recherches et séquences du dictionnaire et l'assistant IA consomment tous des requêtes — ajouter une requête est donc la modification la plus fréquente dans l'interface Paramètres.
La page qui gère les requêtes est Paramètres → Connecteurs. Cette vue d'ensemble en dresse la carte ; les pages suivantes détaillent chaque chemin d'ajout.
La page Connecteurs en un coup d'œil
Trois zones :
| Zone | Contenu |
|---|---|
| Barre d'outils haute | Actions globales — + Connecteur, Annuler, Enregistrer. Le bouton Enregistrer écrit le fichier connecteur et déclenche un rechargement à chaud — aucun redémarrage de processus n'est nécessaire. |
| Navigation gauche | Deux groupes : Applications (connecteurs dotés d'un menu — ce sont les applications visibles dans le sélecteur du haut) et Sources de données (connecteurs qui alimentent en données mais n'apparaissent pas dans le sélecteur). Cliquer sur un nom l'ouvre à droite. |
| Volet droit | L'éditeur du connecteur sélectionné. Une barre de modes en haut permet de choisir l'une des cinq vues — Paramètres, Tables, Non classées, Séquences, Recherches. |
Les quatre types de requêtes
Chaque requête porte un type qui indique à la page à quel onglet elle appartient :
| Onglet | type | Contenu |
|---|---|---|
| Tables | table | Requêtes qui suivent la convention de nommage CRUD — <base>_get, <base>_put, <base>_post, <base>_delete. La page les regroupe par nom de base et affiche une ligne par table avec quatre badges d'emplacement (GET / PUT / POS / DEL). |
| Non classées | custom | Requêtes isolées non liées à un jeu CRUD de table — opérations en masse, requêtes métier, rapports. Exemple : monthly_revenue, purge_old_logs. |
| Séquences | sequence | Requêtes qui génèrent la valeur suivante pour une règle [sequences.*] du dictionnaire. Corps typique : SELECT COALESCE(MAX(<col>), 0) + 1 FROM <table>. |
| Recherches | lookup | Requêtes qui fournissent des paires valeur + libellé pour une règle [lookups.*] du dictionnaire. Corps typique : SELECT <value>, <label> FROM <table>. |
L'onglet dans lequel tombe la requête est déterminé par son type — pas par son nom. Une requête nommée customer_balance typée custom se trouve dans Non classées ; la même nommée typée lookup se trouve dans Recherches.
Les boutons d'ajout — un par onglet
L'ajout est propre à chaque onglet, car chaque type suit son propre flux de création.
| Onglet | Bouton d'ajout | Ce qui s'ouvre |
|---|---|---|
| Tables | + Ajouter une table | Une fenêtre de choix : Générer depuis la base (l'Assistant CRUD — il introspecte le pool et génère les quatre requêtes) ou Modèle vide (demande un nom de base et crée un modèle <base>_get vide). |
| Non classées | + Ajouter une requête | Une saisie de nom — crée une requête custom vide à compléter à la main. |
| Séquences | + Ajouter une séquence | La fenêtre Scaffold — sélectionnez une table, sélectionnez une colonne clé, obtenez un aperçu SQL en direct, enregistrez (écrit la requête et l'entrée correspondante du dictionnaire). |
| Recherches | + Ajouter une recherche | La fenêtre Scaffold — sélectionnez une table, sélectionnez une colonne valeur et une colonne libellé, filtre WHERE optionnel, enregistrez (écrit la requête et l'entrée du dictionnaire). |
Les pages suivantes détaillent chaque chemin.
Ce que porte une requête
Le formulaire d'éditeur (onglets Non classées / Séquences / Recherches) reflète la forme de QueryDef :
| Champ | Requis | Rôle |
|---|---|---|
name | Oui | Unique au sein du connecteur. La chaîne de permission de cette requête est sql:<connector>:<name>. En lecture seule dans l'éditeur — passez par le bouton Renommer (renommage multi-fichiers). |
type | Non | table / custom / sequence / lookup — détermine l'onglet où apparaît la requête. Vide, le système retombe sur une déduction à partir du nom. |
sql | Oui | L'instruction SQL avec ses paramètres :placeholder. Peut être une chaîne unique ou une map par dialecte { default = "…", oracle = "…" }. La variante default est obligatoire dans une map. |
writable | Non (défaut false) | Quand false, seul SELECT est autorisé. Passer à true pour INSERT / UPDATE / DELETE / CALL. |
params | Non | Liste des paramètres déclarés (name, label, default) — donne à chaque :placeholder un champ de formulaire. |
label | Non | Nom court affiché dans les listes déroulantes et les listages. |
description | Non | Texte plus long — affiché dans la liste Tables sous le nom de base. Sert à expliquer ce que la requête retourne. |
Enregistrer et recharger — ce que fait un clic
L'enregistrement de cette page est atomique sur deux fichiers quand c'est nécessaire :
| Action effectuée | Ce qui est écrit |
|---|---|
| Création ou édition d'une requête sous Tables / Non classées | Le fichier connecteur. |
| Utilisation du Scaffold pour une séquence ou une recherche | Le fichier connecteur et le fichier dictionnaire (nouvelle entrée sous [connectors.<name>.sequences] ou [connectors.<name>.lookups]). |
| Duplication d'un connecteur (application entière) | Une écriture multi-fichiers qui copie le surcouche du dictionnaire, les écrans, le menu, les graphiques et les tableaux de bord sous le nouveau nom. Passe par un endpoint dédié. |
| Renommage d'un connecteur, d'une requête ou d'une table | Une mise à jour multi-fichiers qui touche chaque référence (écrans, menus, dictionnaire, graphiques, tableaux de bord). Refuse de s'exécuter quand des modifications locales ne sont pas enregistrées. |
Après chaque enregistrement, le framework lance automatiquement un rechargement à chaud. La nouvelle requête est appelable immédiatement — pas de redémarrage, pas de déconnexion.
Ce que vous faites concrètement — carte rapide
| Objectif | À lire |
|---|---|
| Générer les quatre requêtes CRUD à partir d'une table réelle de la base. | Créer depuis une table de base — le parcours par assistant, recommandé quand la table existe. |
| Écrire une requête personnalisée (isolée, manuelle). | Créer une requête personnalisée. |
| Faire une copie d'une requête existante ou de toute une application. | Dupliquer une requête ou un connecteur. |
| Ajouter une séquence (prochain id) ou une recherche (source de liste déroulante). | Séquences et recherches. |
Passer des valeurs à une requête — littérales ou liées (#LOGIN_USER#, colonnes source…). | Liaison de paramètres. |
| Livrer un SQL différent pour Postgres et Oracle. | Variantes SQL par dialecte. |
Et ensuite
- Créer depuis une table de base — à lire en premier quand la table existe déjà dans la base.
- Concepts → Connecteurs — la référence détaillée derrière cette page (types de connecteurs, pools, cycle de vie d'une requête).