Esta página describe Calíope 1.5, la versión que estamos construyendo ahora mismo. La 1.4 está terminada y en revisión de App Store, y la tienda sirve hoy la 1.3 en el Mac y la 1.2 en iPad. El changelog dice en qué versión llegó cada función.

Añade un botón «Abrir en Calíope» a cada tema. Sólo funciona con la app instalada.

Búsqueda global

Cuánto cuesta una búsqueda

Buscar texto dentro de una columna no puede usar índices: se lee toda la tabla, y Calíope te dice cuánto antes de empezar.

Buscar un texto dentro de una columna no puede aprovechar ningún índice. No es una limitación de Calíope: es cómo funcionan las bases de datos relacionales. Un índice sabe ordenar por el principio de un valor, no por lo que hay en medio.

Eso significa que cada búsqueda lee todas las filas de todas las tablas marcadas. Por eso, antes de empezar, verás un aviso con cuántas tablas se van a recorrer y cuánto ocupan.

Cómo hacerla más rápida

- Marca sólo las tablas donde tenga sentido buscar, en vez de todas.
- Empieza por las tablas pequeñas para confirmar que el texto es el correcto, y luego amplía.
- Si el servidor está al otro lado de un túnel SSH, cuenta con que la latencia se nota.

El tamaño que se muestra lo declara el catálogo del servidor, así que es una estimación: en tablas muy activas puede quedarse corto o largo.

Palabras clave: coste, lento, índices, rendimiento, tamaño, escaneo, tablas grandes

Por qué se encuentran más filas de las que se reemplazan

La búsqueda usa las reglas del servidor y no distingue mayúsculas; el reemplazo sí. Calíope te enseña la diferencia con su cifra exacta.

Es la trampa más importante de esta herramienta, y por eso Calíope la enseña en vez de esconderla.

Buscar y reemplazar no comparan igual. Quien decide si dos textos coinciden en una búsqueda es la collation de la columna, que en la mayoría de las bases no distingue mayúsculas de minúsculas: buscar foo encuentra también Foo y FOO. El reemplazo, en cambio, siempre distingue: sólo cambiaría foo.

El resultado, si nadie lo advierte, es un reemplazo que anuncia 300 filas y cambia 100, sin que nada falle y sin ningún mensaje de error. Los datos quedan a medio migrar.

Qué hace Calíope

- Cuenta las dos cosas por separado en la misma consulta y te enseña el aviso con las dos cifras.
- En cada columna, junto al total, aparece cuántas filas son reemplazables de verdad.
- La previsualización sólo muestra filas que van a cambiar.

Qué puedes hacer

- Marca Distinguir mayúsculas al buscar: entonces lo que encuentras es exactamente lo que se reemplazará, y el aviso desaparece.
- O haz varias pasadas, una por cada forma escrita (foo, Foo, FOO).

Palabras clave: mayúsculas, minúsculas, collation, desajuste, aviso, diferencia, sensible

Qué columnas se pueden reemplazar

Se busca en todas las de texto, pero algunas no se pueden escribir; Calíope dice cuáles y por qué.

Se busca en todas las columnas de texto: texto corto y largo, listas cerradas y documentos JSON.

No se reemplaza en cuatro casos, y en cada uno la columna aparece marcada con un candado y su motivo:

MotivoPor qué
El servidor calcula la columnaSu valor sale de otras columnas; escribirlo no tiene efecto
Sólo admite valores de una lista cerradaUn reemplazo puede dejar un valor fuera de la lista, y algunos servidores lo convierten en texto vacío sin avisar
Forma parte de la clave primariaCambiarla puede romper las relaciones con otras tablas
Tiene un índice únicoEl valor nuevo puede chocar con otro que ya existe

Las tablas sin clave primaria no se reemplazan, y se dice en la ventana de confirmación. Sin clave no hay forma de identificar cada fila, y una escritura que empareje de más tocaría registros que nadie ha visto.

Las vistas quedan fuera. Algunas admiten escritura, pero saber cuáles exige analizar su definición, y el riesgo no compensa.

Palabras clave: columnas, generada, calculada, enum, clave primaria, único, json, candado, bloqueada

Reemplazar sin sorpresas

El reemplazo pasa siempre por una previsualización calculada por el servidor, y puedes llevarte el SQL al editor en vez de ejecutarlo.

Un reemplazo global es una escritura masiva sobre datos que no has visto de uno en uno. Por eso no se puede lanzar sin pasar por la ventana de revisión.

Lo que ves antes de escribir

1. Qué tablas y columnas se van a tocar, y cuántas filas en cada una.
2. La previsualización antes → después, fila a fila.
3. Los avisos que apliquen: la diferencia entre lo encontrado y lo reemplazable, las columnas bloqueadas y las claves foráneas que dependen de lo que vas a cambiar.

La previsualización la calcula el servidor, con la misma operación que hará la escritura. No es una simulación de Calíope: así lo que ves es literalmente lo que se va a guardar, incluidos los recortes por longitud máxima que de otro modo descubrirías demasiado tarde.

Ver el guion te da el SQL completo para copiarlo y ejecutarlo tú, o guardarlo. Ese botón no escribe nada.

Dos frenos más

- Por encima de mil filas hay que teclear el número para confirmar.
- Cada tabla se escribe dentro de su propia transacción, y al terminar se comprueba que las filas cambiadas coinciden con las anunciadas. Si no cuadran, se dice.

No hay deshacer. Si vas a tocar datos que importan, haz antes un respaldo desde la herramienta de Respaldo.

Palabras clave: reemplazar, previsualización, confirmar, guion, sql, transacción, deshacer, respaldo