Cette page décrit Calíope 1.5, la version que nous construisons en ce moment. La 1.4 est terminée et en cours d'examen par Apple, et la boutique propose aujourd'hui la 1.3 sur le Mac et la 1.2 sur iPad. 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.

Recherche globale

Ce que coûte une recherche

Chercher à l’intérieur d’une colonne ne peut pas utiliser d’index : tout est lu, et Calíope vous dit combien avant de commencer.

Rechercher un texte à l’intérieur d’une colonne ne peut tirer parti d’aucun index. Ce n’est pas une limite de Calíope : c’est le fonctionnement des bases relationnelles. Un index sait trier par le début d’une valeur, pas par ce qui se trouve au milieu.

Chaque recherche lit donc toutes les lignes de toutes les tables sélectionnées. D’où l’avertissement, avant de commencer, indiquant combien de tables seront parcourues et quelle place elles occupent.

Pour accélérer

- Ne sélectionnez que les tables où la recherche a du sens.
- Commencez par les petites tables pour valider le texte, puis élargissez.
- Si le serveur est derrière un tunnel SSH, la latence se fera sentir.

La taille affichée provient du catalogue du serveur : c’est une estimation, qui peut être imprécise sur des tables très actives.

Mots-clés : coût, lent, index, performance, taille, parcours, grandes tables

Pourquoi on trouve plus de lignes qu’on n’en remplace

La recherche suit les règles du serveur et ignore la casse ; le remplacement non. Calíope affiche l’écart exact.

C’est le piège le plus important de cet outil, et c’est pourquoi Calíope l’affiche au lieu de le cacher.

Rechercher et remplacer ne comparent pas de la même façon. Ce qui décide si deux textes correspondent lors d’une recherche, c’est la collation de la colonne, qui dans la plupart des bases ignore la casse : chercher foo trouve aussi Foo et FOO. Le remplacement, lui, distingue toujours : il ne changerait que foo.

Sans avertissement, le résultat est un remplacement qui annonce 300 lignes et en change 100, sans échec ni message d’erreur. Les données restent à moitié migrées.

Ce que fait Calíope

- Il compte les deux séparément dans la même requête et affiche l’avertissement avec les deux chiffres.
- À côté du total de chaque colonne figure le nombre de lignes réellement remplaçables.
- L’aperçu ne montre que les lignes qui vont changer.

Ce que vous pouvez faire

- Activez Respecter la casse : ce que vous trouvez est alors exactement ce qui sera remplacé, et l’avertissement disparaît.
- Ou faites plusieurs passes, une par forme écrite (foo, Foo, FOO).

Mots-clés : casse, majuscules, minuscules, collation, écart, avertissement, différence

Quelles colonnes peuvent être remplacées

Toutes les colonnes de texte sont parcourues, mais certaines ne peuvent pas être écrites ; Calíope dit lesquelles et pourquoi.

La recherche couvre toutes les colonnes de texte : texte court et long, listes fermées et documents JSON.

Le remplacement n’est pas proposé dans quatre cas, et la colonne porte alors un cadenas avec son motif :

MotifPourquoi
Le serveur calcule la colonneSa valeur vient d’autres colonnes ; l’écrire n’a aucun effet
N’accepte que les valeurs d’une liste ferméeUn remplacement peut sortir de la liste, et certains serveurs le transforment en texte vide sans prévenir
Fait partie de la clé primaireLa modifier peut casser les relations avec d’autres tables
Possède un index uniqueLa nouvelle valeur peut entrer en collision avec une valeur existante

Les tables sans clé primaire ne sont pas remplacées, et c’est indiqué dans la fenêtre de confirmation. Sans clé, impossible d’identifier chaque ligne, et une écriture trop large toucherait des enregistrements que personne n’a vus.

Les vues sont exclues. Certaines acceptent l’écriture, mais déterminer lesquelles suppose d’analyser leur définition, et le risque n’en vaut pas la peine.

Mots-clés : colonnes, générée, calculée, enum, clé primaire, unique, json, cadenas, bloquée

Remplacer sans surprise

Le remplacement passe toujours par un aperçu calculé par le serveur, et vous pouvez emporter le SQL dans l’éditeur au lieu de l’exécuter.

Un remplacement global est une écriture massive sur des données que vous n’avez pas vues une à une. C’est pourquoi il ne peut pas être lancé sans passer par la fenêtre de vérification.

Ce que vous voyez avant toute écriture

1. Les tables et colonnes concernées, et le nombre de lignes de chacune.
2. L’aperçu avant → après, ligne par ligne.
3. Les avertissements applicables : l’écart entre le trouvé et le remplaçable, les colonnes bloquées et les clés étrangères qui dépendent de ce que vous allez modifier.

L’aperçu est calculé par le serveur, avec l’opération même qui effectuera l’écriture. Ce n’est pas une simulation : ce que vous voyez est littéralement ce qui sera enregistré, y compris les troncatures par longueur maximale que vous découvririez sinon trop tard.

Voir le script vous donne le SQL complet à copier et exécuter vous-même, ou à conserver. Ce bouton n’écrit rien.

Deux garde-fous supplémentaires

- Au-delà de mille lignes, il faut saisir le nombre pour confirmer.
- Chaque table est écrite dans sa propre transaction, puis les lignes modifiées sont comparées aux lignes annoncées. En cas d’écart, vous en êtes informé.

Il n’y a pas d’annulation. Si les données comptent, faites d’abord une sauvegarde depuis l’outil Sauvegarde.

Mots-clés : remplacer, aperçu, confirmer, script, sql, transaction, annuler, sauvegarde