La section SQL fournit une base de données SQLite dédiée à chaque projet. Vous pouvez créer des tables, des index et des vues, modifier les données manuellement, écrire n'importe quelle requête et accéder à la base de données directement depuis votre workflow. C'est un SQLite complet avec une syntaxe sans restriction : tout ce qui est pris en charge par SQLite fonctionne également ici.
La base de données SQL est stockée séparément des tables de la section Tables. Les modifications apportées dans l'une n'affectent pas l'autre.
Comment l'ouvrir
Projet → Tables → cliquez sur SQL à droite de Ajouter une table.

Pour revenir à la liste des tables, cliquez sur la flèche dans l'en-tête de la page.
La section SQL est disponible pour les membres de l'équipe ayant la permission de modifier les tables. Les utilisateurs en lecture seule peuvent voir la structure de la base de données, mais ne peuvent pas accéder à ses données ni à ses requêtes.
Structure de la base de données
L'arborescence de la base de données est affichée à droite. Elle contient les tables avec leurs colonnes et index, suivies des vues. Chaque colonne affiche son type de données, les colonnes de clé primaire sont marquées avec une icône de clé, et les index affichent l'attribut UNIQUE et leurs colonnes associées.

Toutes les actions liées à la structure sont disponibles depuis le menu du nœud : cliquez avec le bouton droit sur un nœud, cliquez sur l'icône ⋮ qui apparaît au survol, ou utilisez le bouton + au-dessus de l'arborescence.
| Nœud | Actions |
|---|---|
| Base de données | créer une table, créer une vue, actualiser, télécharger la base de données |
| Table | ouvrir, ajouter une colonne, ajouter un index, renommer, DDL, actualiser, supprimer |
| Colonne | renommer, supprimer |
| Index | DDL, supprimer |
| Vue | ouvrir, DDL, supprimer |

Créer une table. Spécifiez le nom de la table et les colonnes : nom, type, valeur par défaut, PK et NOT NULL. Vous pouvez sélectionner un type de données dans les suggestions ou saisir le vôtre. Si vous marquez plusieurs colonnes comme PK, elles formeront une clé primaire composite.

DDL affiche l'instruction CREATE de l'objet dans la console. Cela est utile pour copier sa structure ou la recréer dans un autre projet.
Les boutons au-dessus de l'arborescence vous permettent de créer des objets, d'actualiser la base de données, d'afficher ou de masquer la console, de voir le DDL de la table sélectionnée, de télécharger la base de données ou de la vider.

Données de la table
Cliquez sur une table dans l'arborescence de la base de données pour ouvrir ses données. La grille fonctionne comme une feuille dans la section Tables :
- Modifier une cellule en double-cliquant dessus. Appuyez sur Entrée pour enregistrer ou sur Échap pour annuler. La valeur est écrite dans la base de données immédiatement.
- Lignes. Cliquez sur + pour ajouter une ligne vide ou sur − pour supprimer les lignes sélectionnées. Cliquez sur un numéro de ligne dans la première colonne pour la sélectionner. Utilisez Maj ou Cmd/Ctrl pour sélectionner plusieurs lignes.
- Les valeurs NULL sont affichées comme
NULL. Vider une cellule écrit une chaîne vide dans la base de données. Pour écrire une valeur NULL, utilisez une requête. - Les champs WHERE et ORDER BY au-dessus de la grille acceptent des conditions SQL et des expressions de tri. Saisissez une expression et appuyez sur Entrée. Le champ ORDER BY a priorité sur le tri appliqué via le menu de colonne.
- Menu de colonne (l'icône dans l'en-tête de colonne) : trier par ordre croissant ou décroissant, ou filtrer par sous-chaîne.
- Les données sont chargées au fur et à mesure du défilement, par lots de 100 lignes. Le compteur à droite affiche la plage actuelle et le nombre total de lignes.
- Les vues sont en lecture seule.
Console

Cliquez sur le bouton </> au-dessus de l'arborescence de la base de données pour ouvrir la console, qui comprend un éditeur de requêtes avec coloration syntaxique et les résultats des requêtes.
- Exécutez une requête avec le bouton ou Ctrl+Entrée (Cmd+Entrée sur Mac).
- Vous pouvez exécuter plusieurs requêtes séparées par
;. Le résultat affiche les lignes renvoyées par la dernière requête ayant produit des données, ainsi que le nombre total de lignes affectées. - Les erreurs SQLite sont affichées telles quelles. Lors de l'exécution de plusieurs requêtes, le numéro de la requête est ajouté au message d'erreur :
[2] no such table: .... - Favoris. Cliquez sur Ajouter aux favoris pour enregistrer la requête actuelle sous un nom. Les requêtes enregistrées apparaissent comme des puces au-dessus de l'éditeur : cliquez sur une puce pour charger la requête ou sur la croix pour la supprimer. Les favoris sont stockés dans votre navigateur séparément pour chaque projet.
- Le texte de votre dernière requête est conservé entre les sessions.
Téléchargement et vidage de la base de données
Télécharger la base de données télécharge l'intégralité de la base de données sous le nom project_<id>_sql.sqlite3. Vous pouvez l'ouvrir avec n'importe quelle application compatible SQLite, la transférer vers un autre projet ou l'utiliser en dehors de Mavibot.
Vider la base de données supprime toutes les tables et données de la section SQL. Cette action est irréversible et nécessite de saisir un mot de confirmation. Les tables de la section Tables ne sont pas affectées.
Fonctions de calcul
Deux fonctions de calcul vous permettent d'accéder à la base de données SQL depuis votre workflow. Les deux sont disponibles dans les suggestions de l'éditeur et sont reconnues par l'assistant.
sql(query, params=null, strict=true)
Exécute une requête.
| Requête | Valeur de retour |
|---|---|
| Requête avec résultat (SELECT, RETURNING, PRAGMA) | Liste JSON des lignes, chaque ligne représentée comme un objet : [{"id": 1, "name": "Anna"}, ...]
|
| Requête sans résultat (INSERT, UPDATE, DELETE) | nombre de lignes affectées |
| CREATE, DROP et autres modifications de schéma | 0 |
| Erreur | chaîne ERROR: <message d'erreur SQLite>
|
Exemple :
rows = sql("SELECT name, phone FROM clients WHERE city = ?", [city])
n = sql("UPDATE clients SET status = :s WHERE id = :id", {"s": "vip", "id": client_id})
sql_value(query, params=null, strict=true)
Fonctionne comme sql, mais renvoie une seule valeur : la première colonne de la première ligne du résultat.
S'il n'y a pas de lignes, pas de résultat, ou si la valeur est NULL, elle renvoie une chaîne vide.
total = sql_value("SELECT count(*) FROM clients")
name = sql_value("SELECT name FROM clients WHERE id = ?", [client_id])
Paramètres
params transmet des valeurs à la requête séparément du texte de la requête : utilisez un tableau JSON pour les placeholders ? ou un objet JSON pour les placeholders :name. Dans [...] et {...}, les variables sont écrites comme des noms de variables simples :
[client_id], pas [#{client_id}].
Transmettez toutes les valeurs reçues d'un client via params, comme son nom, son numéro de téléphone ou le texte de son message. Une valeur concaténée directement dans le texte de la requête pourrait modifier la requête elle-même.
Mode strict
Par défaut, strict=true : la fonction accepte exactement une requête et n'autorise pas les commentaires dans le texte de la requête. Cela empêche qu'une valeur reçue d'un message client n'ajoute une deuxième requête ou ne tronque le reste de la requête d'origine.
Définissez strict=false pour supprimer cette restriction, par exemple lors de l'exécution de plusieurs requêtes séparées par ;.
Limites
| Limite | Valeur |
|---|---|
| Temps d'exécution pour une requête ou un lot de requêtes | 5 secondes |
| Lignes renvoyées | jusqu'à 1 000 ; les lignes supplémentaires ne sont pas renvoyées |
| Longueur du texte de la requête | 64 Ko |
| Taille de la base de données | 200 Mo ; une fois dépassée, seules la lecture et la suppression des données sont disponibles |
Les seules commandes interdites sont celles qui accèdent à des ressources en dehors de la base de données du projet : ATTACH avec un chemin de fichier et VACUUM INTO.
Tout le reste, y compris les VACUUM, PRAGMA et transactions standard, est pris en charge.