Esta página describe Calíope 1.5, la versión que estoy construyendo ahora mismo. La 1.4 ya está en la App Store para Mac, iPad, iPhone, Apple Watch, Apple TV y Apple Vision Pro. 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.
Abre y edita archivos SQLite locales sin servidor.
Dónde está: Espacio de Trabajo › Herramientas › Editor SQLite
El Editor SQLite es una herramienta autónoma para archivos locales .sqlite/.db, al estilo de DB Browser for SQLite. Tiene cuatro secciones: Estructura, Datos, Ejecutar SQL y Pragmas, y funciona incluso sin conexión a un servidor.
Calíope abre bases SQLite sin cifrar (SQLCipher no es compatible).
Palabras clave: sqlite, db, local, base de datos, archivo
Abre un archivo SQLite existente o crea uno nuevo.
Dónde está: Espacio de Trabajo › Herramientas › Editor SQLite
Usa Abrir… para elegir un archivo .sqlite/.db existente, o Nueva base… para crear uno vacío. Los archivos recientes aparecen en la pantalla inicial. Una insignia Solo lectura aparece cuando un archivo no se puede modificar.
Navega tablas, vistas, índices y triggers, y créalos.
La sección Estructura muestra el árbol del esquema con las columnas y el DDL de cada objeto. Usa Nuevo para crear tablas, índices o vistas, Añadir columna o Renombrar tabla sobre la tabla seleccionada, y Eliminar para borrar un objeto.
La sección Datos muestra las filas de una tabla por páginas, con el contador y las flechas a la derecha de la barra. Cuántas filas trae una página lo eliges tú en Preferencias › Editor de texto › Resultados › Filas por página —Ajustes, en el iPad—: es la misma preferencia que usan la rejilla de Ejecutar SQL y la del Editor SQL. Ordena pulsando la cabecera de una columna —púlsala otra vez para invertir el orden—, acota columna a columna con Filtros, o escribe en el campo de búsqueda para mirar en todas a la vez; en los dos casos el filtro se aplica al pulsar Intro. El selector Tabla lista las tablas del archivo, y no todas se editan: sobre una tabla WITHOUT ROWID, o sobre cualquiera si el archivo se abrió en solo lectura, la barra dice que el objeto no se puede editar en lugar de ofrecer los botones.
Editar una celda
macOS: doble clic sobre ella. iPad: un solo toque.
El valor se escribe en la propia rejilla. Intro confirma, y salir de la celda —pulsar otra, o que el campo pierda el foco— confirma también; Esc cancela y deja el valor que había (en iPad, con un teclado conectado).
El editor avanzado
Lo que no cabe en una línea se escribe en una hoja aparte. Se abre con el botón ⋯ de la celda —macOS: al pasar el puntero por encima; iPad: en las celdas de la fila seleccionada, que se marca tocando su número— o con Editor avanzado… en el menú contextual (clic derecho en macOS, mantener pulsado en iPad). Ahí el mismo valor se escribe como texto, como JSON —con un botón que lo formatea, y sin dejar aplicar uno inválido—, en hexadecimal, o se ve como imagen cuando los bytes lo son —y esa imagen se acerca, del 100 % al 800 %, con el pellizco, con la rueda o con los botones del pie—; y esos bytes se importan de un archivo y se exportan a otro. Una celda que ya contiene datos binarios abre esta hoja directamente, sin pasar por el campo de la rejilla.
Dejar una celda en NULL
En el menú contextual de la celda, Fijar a NULL, sin abrir nada más; dentro del editor avanzado está también como interruptor. Una celda sin valor se dibuja como NULL en cursiva. Ojo: borrar el contenido en la rejilla y confirmar escribe la cadena vacía, que no es lo mismo que NULL.
Añadir y eliminar filas
Añadir fila abre un formulario con un renglón por columna, su tipo y si es obligatoria. Las columnas que la tabla sabe rellenar sola —las que declaran un valor por omisión, y la clave primaria INTEGER— nacen marcadas para que las escriba el motor: desmarca la casilla si prefieres poner el valor tú. Un campo que se deja vacío se guarda como NULL, y Insertar sigue apagado mientras una columna obligatoria no tenga valor —el aviso de al lado dice cuál—. Al aceptar se emite una sola sentencia INSERT, que nombra solo las columnas con valor. Para eliminar, selecciona la fila por su número y usa Eliminar fila, o el menú contextual de cualquiera de sus celdas.
Nada de esto toca el archivo hasta que pulsas Guardar cambios: lo editado queda en una transacción pendiente que Revertir cambios deshace entera.
Resaltado, autocompletado y una rejilla de resultados con techo de filas.
La sección Ejecutar SQL usa el mismo campo de texto y la misma rejilla de resultados que el Editor SQL de servidor, pero sobre el archivo abierto y sin ninguna conexión de por medio.
Escribir y ejecutar
El texto va resaltado: palabras clave, cadenas, números y comentarios, cada uno con su color. Pulsa Ejecutar, o ⌘↩ desde dentro del texto, y se ejecuta el script entero. Lo que se dibuja abajo es el resultado de la última sentencia que devolvió filas; si ninguna devolvió, se dice cuántas quedaron afectadas. Un error detiene el script en esa sentencia y se enseña el mensaje del motor tal cual.
Lo que escriba en el archivo —un INSERT, un UPDATE, un CREATE TABLE— queda pendiente, igual que una edición hecha en Datos: no toca el archivo hasta Guardar cambios, y Revertir cambios lo deshace entero.
Autocompletado
El panel de sugerencias trae las palabras clave SQL y las tablas del archivo abierto con sus columnas —todas, no sólo las de la tabla seleccionada en Estructura—, y se pone al día tras cada cambio de esquema.
Se abre a mano, y no aparece solo mientras escribes. En macOS, con ⌥Esc y con al menos el principio de la palabra escrito: la lista sale de ese prefijo, con las palabras clave delante y los nombres del archivo detrás, y el nombre se inserta tal cual. En iPad, con el botón Autocompletar de la cabecera de la sección, que abre el panel en cualquier momento y no necesita teclado; ahí, aceptar una tabla o una columna la escribe entre acentos graves —`mi_tabla`—, que SQLite acepta igual que las comillas dobles.
Las palabras clave y la ayuda de funciones son las del SQL general de Calíope, no las de SQLite: funciones propias como julianday() o printf() se ejecutan sin problema, pero no salen sugeridas.
La rejilla de resultados
Las filas van por páginas, y cuántas caben en una lo eliges en Preferencias › Editor de texto › Resultados › Filas por página —Ajustes, en el iPad—: la misma preferencia que usan la sección Datos y el Editor SQL.
En macOS puedes ordenar pulsando la cabecera de una columna —el orden es del cliente y alcanza a todas las filas traídas, no sólo a la página que tienes delante—, cambiar el ancho de una columna arrastrando su borde, esconder o reordenar columnas desde la cabecera, elegir varias filas con ⇧ o ⌘ y copiarlas con ⌘C, que las deja en TSV con los nombres de las columnas delante. En iPad se pasa de página con los botones del pie y las columnas se miden solas.
En las dos, arrastrar una fila fuera de la app la lleva a otra como tabla, y el menú contextual de una celda —clic derecho en macOS, mantener pulsado en iPad— copia su valor, lo enseña entero y exporta la fila a CSV.
Lo que se ve aquí no se edita: para cambiar un dato está la sección Datos.
El techo de filas
Un SELECT grande no se trae entero: se corta en Preferencias › Editor de texto › Resultados › Techo de filas, el mismo tope que usa el Editor SQL. Cuando corta, la rejilla lo dice debajo de las filas y ofrece Traer todas, que vuelve a ejecutar la consulta sin tope. Con el techo en cero no se corta nunca.
Fichas de funciones
Al pasar el puntero sobre una función en macOS, o al poner el cursor de texto en ella en el iPad, sale su ficha, la de SQLite: sintaxis, retorno, parámetros y un ejemplo. Lo explica el tema Ayuda contextual de funciones SQL.
Los cambios quedan pendientes hasta que los guardas.
Las ediciones se agrupan en una transacción pendiente. Un punto ámbar indica cambios sin guardar. Usa Guardar cambios para confirmarlos o Revertir cambios para descartarlos. Al cerrar con cambios pendientes se pide confirmación.
Desde Importar / Exportar puedes importar un archivo CSV —se convierte en una tabla con el nombre del archivo y columnas de texto, o sus filas se añaden si esa tabla ya existe—, exportar la tabla abierta en Datos a CSV o JSON, o exportar toda la base a un volcado SQL (esquema y datos). Una importación queda pendiente, como cualquier edición, hasta Guardar cambios.
Cambia los pragmas del archivo, compruébalo y compáctalo.
La sección Pragmas enseña los ajustes del archivo. Los de Editables —Claves foráneas, Auto-vacuum y los demás— cambian en el acto, y los numéricos con Aplicar. Actúan enseguida, fuera de la transacción pendiente, así que se apagan mientras haya cambios sin guardar: guarda o revierte antes. Algunos, como el auto-vacuum, sólo surten efecto tras un VACUUM.
Mantenimiento comprueba el archivo —Verificar integridad, Verificar claves foráneas— o lo ordena —VACUUM, ANALYZE, REINDEX—, y la respuesta del motor aparece debajo de los botones. El resto de pragmas se listan en Solo lectura con su valor actual.