[Tutoriel] Exploration SQL d'un fichier .grist (SQLite)

Préambule

Vous avez dit « Grist Document Database » ?

Le format de fichier .grist est le format d’export et de sauvegarde natif de document Grist. Mais il ne s’agit pas d’une simple archive compressée ou d’un format propriétaire opaque. Un fichier Grist est en réalité une base de données SQLite, pouvant être vu comme un sérialisé au format binaire qui regroupe à la fois les données utilisateur, la structure (tables, colonnes, types, formules), les vues et les métadonnées système, les autorisations d’accès (ACL) et même les pièces jointes du document.

Dans la pratique, un fichier .grist contient plusieurs catégories de tables :

  • Tables de données utilisateur : une table par « feuille » ou table logique du document. Ces tables contiennent les données métier ajouté par les utilisateurs.

  • Tables grist système : préfixées par gristsys et contenant métadonnées, définitions de colonnes, vues, formules et index.

  • Table des contrôles d’accès (ACL) : plusieurs tables grist système particulière responsable de la gestion des ACL. Dans Grist, une ACL permet de contrôler l’accès aux données à un niveau très fin : accès à tout le document, à une table, à une colonne, à une ligne (via des règles dynamiques de diffusion sélective d’information), à des actions (lecture, écriture, modification de structure)

  • Table des fichiers joints : table grist système particulière gristsys_Files responsable du stockage des fichiers joints (a.k.a. attachments) sous forme de BLOB (Binary Large Object) avec colonnes ident, data, storageId. Dans un fichier .grist, les pièces jointes ne sont pas stockés dans un dossier à côté de la base. Ils sont injectés directement dans le fichier SQLite.

Un fichier .grist est une solution pragmatique et robuste pour sérialiser un document Grist, basé sur le concept de « single-file database ». Il combine la portabilité et l’interopérabilité de SQLite avec la richesse d’un document structuré (données, vues, formules, attachments).

Vous avez dit « SQLite » ?

SQLite est une bibliothèque en langage C, open-source, qui fournit un système de gestion de base de données relationnelle (SGBDR), avec une particularité majeure qui réside dans son architecture serverless (sans serveur).

Au lieu d’avoir un moteur de base de données séparé (comme MySQL, PostgreSQL ou SQL Server), SQLite est une bibliothèque embarquée directement dans l’application. Les données sont stockées dans un simple fichier (sérialisé binaire) sur le disque de l’ordinateur hôte. Toute la base est contenue dans un unique fichier binaire.



Exploration via le terminal d’un fichier .grist

  1. Installer l’outil SQLite. Sur Windows, vous pouvez utiliser le gestionnaire de paquest Chocolatey pour simplifier son installation.

    > choco install sqlite
    
    > sqlite3 --version
    3.51.2 (64-bit)
    
  2. Télécharger le document complet depuis l’interface de Grist, et sauvegarder le fichier (MonDocument.grist) sur votre ordinateur.

  3. Pour lister les tables du document, on utilisera la commande suivante.

    > sqlite3 "MonDocument.grist" ".tables"
    
    ACTUALITES                     _grist_Pages
    ACTUALITES_summary             _grist_REPL_Hist
    CATEGORIES                     _grist_Shares
    CONFIGURATION                  _grist_TabBar
    DATA_PAGES_MARKDOWN            _grist_TabItems
    DESTINATAIRES                  _grist_TableViews
    EXPEDITEURS                    _grist_Tables
    LETTRES_HEBDO                  _grist_Tables_column
    LETTRES_HEBDO_summary_ref      _grist_Triggers
    _grist_ACLMemberships          _grist_Validations
    _grist_ACLPrincipals           _grist_Views
    _grist_ACLResources            _grist_Views_section
    _grist_ACLRules                _grist_Views_section_field
    _grist_Attachments             _gristsys_Action
    _grist_Cells                   _gristsys_ActionHistory
    _grist_DocInfo                 _gristsys_ActionHistoryBranch
    _grist_External_database       _gristsys_Action_step
    _grist_External_table          _gristsys_FileInfo
    _grist_Filters                 _gristsys_Files
    _grist_Imports                 _gristsys_PluginData
    
  4. Pour consulter le MPD complet, on utilisera la commande

    > sqlite3 "MonDocument.grist" ".schema"
    
    CREATE TABLE _gristsys_Files (
        id INTEGER PRIMARY KEY,
        ident TEXT UNIQUE,
        data BLOB,
        storageId TEXT);
    (...)
    CREATE INDEX _grist_Attachments_fileIdent ON _grist_Attachments(fileIdent);
    
  5. Pour afficher les 20 premières lignes d’une table

    > sqlite3 "MonDocument.grist" "SELECT * FROM 'NomDeTable' LIMIT 20;"
    


Inspection avancée d’un fichier .grist dans un IDE Jetbrains

Pour les développeurs qui utilisent des IDE JetBrains (IntelliJ IDEA, PyCharm, WebStorm, PHPStorm, etc.), l’inspection d’un fichier .grist, en tant que base SQLite, est extrêmement fluide grâce à l’outil Database intégré.

Il suffit de créer une nouvelle source de données (New > Data Source > SQLite). L’IDE vous proposera alors de télécharger les pilotes nécessaires si nécessaire.

Une fois connecté, vous bénéficiez d’une interface graphique puissante pour naviguer dans les tables système (préfixé avec grist) ainsi que de vos données métier.

Vous pouvez même exécuter des requêtes SQL avec autocomplétion. Ouvrez une console SQL (Ctrl+Maj+F10) et commencez à saisir votre requête SQL.

Compléments d’informations & sources

3 « J'aime »