Cette page décrit Calíope 1.5, la version que nous construisons en ce moment. La 1.4 est sur l'App Store pour iPad, iPhone, Apple Watch, Apple TV et Apple Vision Pro, et sur le Mac la boutique propose aujourd'hui la 1.3 pendant que la 1.4 est en cours d'examen par Apple. Le changelog indique dans quelle version chaque fonction est arrivée.

Ajoute un bouton « Ouvrir dans Calíope » à chaque sujet. Ne fonctionne qu'avec l'app installée.

Éditeur DuckDB

Éditeur DuckDB

Ouvrez et interrogez des bases DuckDB locales, sans serveur.

Où le trouver : Espace de travail › Outils › Éditeur DuckDB

L'Éditeur DuckDB est un outil autonome pour les fichiers .duckdb locaux, avec la même disposition que l'Éditeur SQLite : Structure, Données, Exécuter du SQL et Réglages, et il fonctionne sans connexion à aucun serveur.

Il peut aussi ouvrir une base en mémoire — sans fichier — depuis Interroger un fichier de données…, pour travailler sur un CSV, un JSON ou un Parquet sans rien créer sur le disque.

Ce que Calíope ne fait pas avec DuckDB. Il ne télécharge pas d'extensions — INSTALL, LOAD et UPDATE EXTENSIONS sont rejetées avant de toucher le moteur —, seules les quatre fournies avec l'app sont là. Pour la même raison, il n'y a pas de secrets d'accès distant (CREATE SECRET), et on ne peut pas faire d'ATTACH d'un fichier SQLite ou Postgres, qui nécessitent une extension non intégrée. La configuration du moteur est verrouillée dès l'ouverture : aucun SET autre que threads/memory_limit depuis les Réglages ne fonctionne, et même pas ceux-là en SQL direct. Et IMPORT DATABASE ainsi que COPY FROM DATABASE ne fonctionnent pas non plus : en interne, ils modifient une option de configuration que cette même règle garde verrouillée.

Mots-clés : duckdb, fichier, local, base de données, analytique

Ouvrir ou créer une base

Ouvrez un fichier .duckdb existant ou créez-en un nouveau.

Où le trouver : Archivo

Utilisez Ouvrir… pour choisir un fichier .duckdb existant, ou Nouvelle base… pour en créer un vide. Les fichiers récents apparaissent sur l'écran initial. Un badge Lecture seule apparaît quand un fichier ne peut pas être modifié.

Si le fichier est en dehors du dossier propre de Calíope, la première ouverture demande l'accès à son dossier : DuckDB doit écrire un fichier .wal à côté du .duckdb, et le bac à sable de l'app ne l'autorise qu'à l'intérieur d'un dossier choisi par l'utilisateur. C'est mémorisé pour la prochaine ouverture d'un fichier du même dossier. Aucun fichier DuckDB sous la main ? Dans l'état vide, Télécharger la base d'exemple ouvre la page du site où se trouve l'exemple public — une boutique avec 50 000 commandes, faite avec Calíope. L'app ne télécharge rien : elle ouvre la page et c'est vous qui décidez.

Mots-clés : ouvrir, créer, nouvelle, récents, fichier, dossier, wal

Explorer et concevoir la structure

Parcourez tables, vues et index, et créez-les.

La section Structure affiche l'arborescence du schéma avec les colonnes et le DDL de chaque objet. DuckDB n'a pas de déclencheurs, l'arbre montre donc les tables, vues, index, séquences, types, macros et macros de table. Séquences, types et macros se créent depuis Exécuter SQLCREATE SEQUENCE, CREATE TYPE, CREATE MACRO, CREATE MACRO … AS TABLE— ; ici on les voit et on les supprime. Si le fichier a plusieurs schémas, chaque groupe est préfixé par le nom du sien, et le commentaire d'un objet (COMMENT ON) s'affiche au survol. Utilisez Nouveau pour créer des tables, index ou vues, Ajouter une colonne ou Renommer la table sur la table sélectionnée, et Supprimer pour retirer un objet.

Les vues créées par Interroger un fichier de données… portent une icône différente — un trombone — et leur infobulle affiche le chemin du fichier source.

Attacher une base… ouvre une autre base DuckDB à côté de la vôtre ; son contenu apparaît dans l'arborescence précédé du nom de la base et se consulte avec base.schéma.table. C'est toujours en lecture seule —y écrire supposerait créer son fichier .wal à côté, ce que le bac à sable interdit— et Détacher la retire. Un fichier SQLite ne peut pas être attaché ici : ce sont deux moteurs différents, et c'est à cela que sert l'Éditeur SQLite.

Mots-clés : structure, table, index, vue, créer, ddl, schéma

Parcourir et modifier les données

Affichez, filtrez, triez et modifiez les lignes.

La section Données affiche les lignes d'une table par pages, avec le compteur et les flèches à droite de la barre. Le nombre de lignes par page se choisit dans Préférences › Éditeur de texte › Résultats › Lignes par pageRéglages, sur iPad. Triez en appuyant sur l'en-tête d'une colonne, affinez colonne par colonne avec Filtres, ou tapez dans le champ de recherche pour chercher dans toutes à la fois.

Modifier une cellule

macOS : double-cliquez dessus. iPad : un seul appui. Entrée valide ; Échap annule.

Ajouter et supprimer des lignes

Ajouter une ligne ouvre un formulaire avec une ligne par colonne. Contrairement à SQLite, DuckDB n'assigne pas automatiquement toute la clé primaire : chaque colonne obligatoire a besoin de sa propre valeur, clé comprise. Pour supprimer, sélectionnez la ligne par son numéro et utilisez Supprimer la ligne.

Rien de tout cela ne touche le fichier avant d'appuyer sur Enregistrer les modifications : ce qui est modifié reste dans une transaction en attente que Annuler les modifications défait entièrement.

Mots-clés : données, lignes, modifier, filtrer, trier, rechercher, cellule, insérer, nouvelle ligne, supprimer

Écrire et exécuter du SQL

Coloration syntaxique et autocomplétion, avec un plafond de lignes et un bouton Arrêter.

La section Exécuter du SQL utilise le même champ de texte et la même grille de résultats que l'Éditeur SQL de serveur, sur le fichier ouvert et sans aucune connexion.

Le texte est coloré. Appuyez sur Exécuter, ou sur ⌘↩, pour exécuter tout le script ; ce qui s'affiche est le résultat de la dernière instruction qui a renvoyé des lignes. Un SELECT volumineux n'est pas récupéré en entier : il est coupé au Préférences › Éditeur de texte › Résultats › Plafond de lignes — le même plafond qu'utilise l'Éditeur SQL —, et la grille indique combien de lignes sur combien ont été récupérées.

Pendant qu'une requête s'exécute, un bouton Arrêter l'interrompt pour de bon : le moteur la coupe en plein milieu, sans attendre la fin.

INSTALL et LOAD sont rejetées : Calíope ne télécharge pas d'extensions DuckDB, donc une requête qui en aurait besoin ne s'exécute pas, avec le motif expliqué dans le message.

Ce qui est écrit dans le fichier reste en attente, comme une modification dans Données : le fichier n'est pas touché avant Enregistrer les modifications.

Mots-clés : exécuter, sql, coloration, autocomplétion, grille, résultats, plafond, lignes, arrêter, interrompre

Enregistrer et annuler les modifications

Les modifications restent en attente jusqu'à leur enregistrement.

Les modifications sont regroupées dans une transaction en attente, comme dans l'Éditeur SQLite. Un point ambre indique des modifications non enregistrées. Utilisez Enregistrer les modifications pour valider ou Annuler les modifications pour les abandonner. La fermeture avec des modifications en attente demande confirmation.

DuckDB écrit d'abord dans un fichier .wal à côté du .duckdb ; le report vers le fichier principal (CHECKPOINT) est asynchrone, donc le .wal peut mettre quelques secondes à disparaître après l'enregistrement et la fermeture — la donnée est déjà en sécurité, même si ce fichier annexe reste là un moment.

Mots-clés : enregistrer, annuler, valider, transaction, modifications, wal, checkpoint

Importer et exporter

Importez du CSV et exportez en CSV, JSON ou SQL.

Depuis Importer / Exporter, vous pouvez importer un fichier CSV dans une nouvelle table de colonnes texte, exporter une table en CSV ou JSON, ou exporter toute la base en un vidage SQL (schéma et données).

C'est différent de Interroger un fichier de données… : ici le CSV est copié dans le fichier .duckdb sous forme de nouvelle table ; là, le fichier reste où il est et n'est qu'interrogé via une vue.

Avec DuckDB, le CSV est lu par le moteur lui-même (COPY … AUTO_DETECT) : chaque colonne arrive donc avec son type et non comme du texte. Et Base entière exporte toute la base vers un dossier de votre choix —en CSV ou en Parquet, avec le schéma à côté— ou lit dans la base ouverte ce qu'une autre exportation a laissé. Si la base est en mémoire, Enregistrer sous… l'écrit entièrement dans un fichier .duckdb et continue sur celui-ci.

Les trois exigent qu'il n'y ait aucune modification non enregistrée : le moteur ne les exécute pas dans une transaction ouverte.

Mots-clés : importer, exporter, csv, json, sql, vidage

Interroger un fichier de données…

Interrogez un CSV, JSON ou Parquet comme une table, sans le copier.

Le bouton Interroger un fichier de données… crée, pour chaque fichier choisi, une vue dessus — read_csv_auto, read_json_auto ou read_parquet selon l'extension : le fichier reste où il est et se lit à la volée à chaque interrogation de la vue, sans copier ses données dans la base.

Le nom de la vue vient du nom du fichier, sans son extension ; si deux fichiers donneraient le même nom, le deuxième reçoit _2, le troisième _3, et ainsi de suite. Dans Structure, ces vues portent une icône différente — un trombone — et leur infobulle affiche le chemin du fichier source.

Si aucune base n'est ouverte, le bouton ouvre d'abord une base en mémoire : aucun fichier .duckdb n'existe sur le disque, donc Enregistrer sous… — qui ne fait encore rien — est le seul moyen de ne pas perdre le travail à la fermeture. Cette base en mémoire n'est plus perdue : Enregistrer sous… l'écrit entièrement dans un fichier .duckdb et l'éditeur continue sur ce fichier.

Mots-clés : csv, json, parquet, interroger, vue, attacher, en mémoire