La sección SQL proporciona una base de datos SQLite dedicada para cada proyecto. Puedes crear tablas, índices y vistas, editar datos manualmente, escribir cualquier consulta y acceder a la base de datos directamente desde tu flujo de trabajo. Es SQLite completo con sintaxis sin restricciones: todo lo que admite SQLite también funciona aquí.

La base de datos SQL se almacena por separado de las tablas en la sección Tablas. Los cambios realizados en una no afectan a la otra.

Cómo abrirla

Proyecto → Tablas → haz clic en SQL a la derecha de Agregar tabla.

Para volver a la lista de tablas, haz clic en la flecha en el encabezado de la página.

La sección SQL está disponible para los miembros del equipo con permiso para editar tablas. Los usuarios con acceso de solo lectura pueden ver la estructura de la base de datos, pero no pueden acceder a sus datos ni a sus consultas.

Estructura de la base de datos

El árbol de la base de datos se muestra a la derecha. Contiene tablas con sus columnas e índices, seguidas de vistas. Cada columna muestra su tipo de datos, las columnas de clave primaria están marcadas con un icono de llave, y los índices muestran el atributo UNIQUE y sus columnas asociadas.

Todas las acciones relacionadas con la estructura están disponibles en el menú del nodo: haz clic derecho en un nodo, haz clic en el icono que aparece al pasar el cursor, o usa el botón + sobre el árbol.

Nodo Acciones
Base de datos crear tabla, crear vista, actualizar, descargar base de datos
Tabla abrir, agregar columna, agregar índice, renombrar, DDL, actualizar, eliminar
Columna renombrar, eliminar
Índice DDL, eliminar
Vista abrir, DDL, eliminar

Crear una tabla. Especifica el nombre de la tabla y las columnas: nombre, tipo, valor predeterminado, PK y NOT NULL. Puedes seleccionar un tipo de datos de las sugerencias o ingresar el tuyo propio. Si marcas varias columnas como PK, formarán una clave primaria compuesta.

DDL muestra la declaración CREATE del objeto en la consola. Esto es útil para copiar su estructura o recrearla en otro proyecto.

Los botones sobre el árbol te permiten crear objetos, actualizar la base de datos, mostrar u ocultar la consola, ver el DDL de la tabla seleccionada, descargar la base de datos o limpiarla.

Datos de la tabla

Haz clic en una tabla en el árbol de la base de datos para abrir sus datos. La cuadrícula funciona de manera similar a una hoja en la sección Tablas:

  • Editar una celda haciendo doble clic en ella. Presiona Enter para guardar o Esc para cancelar. El valor se escribe en la base de datos inmediatamente.
  • Filas. Haz clic en + para agregar una fila vacía o en para eliminar las filas seleccionadas. Haz clic en un número de fila en la primera columna para seleccionarla. Usa Shift o Cmd/Ctrl para seleccionar varias filas.
  • Los valores NULL se muestran como NULL. Limpiar una celda escribe una cadena vacía en la base de datos. Para escribir un valor NULL, usa una consulta.
  • Los campos WHERE y ORDER BY sobre la cuadrícula aceptan condiciones SQL y expresiones de ordenamiento. Ingresa una expresión y presiona Enter. El campo ORDER BY tiene prioridad sobre el ordenamiento aplicado a través del menú de columna.
  • Menú de columna (el icono en el encabezado de la columna): ordenar ascendente o descendente, o filtrar por subcadena.
  • Los datos se cargan mientras te desplazas, en lotes de 100 filas. El contador a la derecha muestra el rango actual y el número total de filas.
  • Las vistas son de solo lectura.

Consola

Haz clic en el botón </> sobre el árbol de la base de datos para abrir la consola, que incluye un editor de consultas con resaltado de sintaxis y resultados de consultas.

  • Ejecuta una consulta usando el botón o Ctrl+Enter (Cmd+Enter en Mac).
  • Puedes ejecutar varias consultas separadas por ;. El resultado muestra las filas devueltas por la última consulta que produjo datos, junto con el número total de filas afectadas.
  • Los errores de SQLite se muestran tal cual. Al ejecutar varias consultas, se agrega el número de consulta al mensaje de error: [2] no such table: ....
  • Favoritos. Haz clic en Agregar a favoritos para guardar la consulta actual con un nombre. Las consultas guardadas aparecen como chips sobre el editor: haz clic en uno para cargar la consulta o haz clic en la cruz para eliminarla. Los favoritos se almacenan en tu navegador por separado para cada proyecto.
  • El texto de tu última consulta se conserva entre sesiones.

Descargar y limpiar la base de datos

Descargar base de datos descarga toda la base de datos como project_<id>_sql.sqlite3. Puedes abrirla con cualquier aplicación compatible con SQLite, transferirla a otro proyecto o usarla fuera de Mavibot.

Limpiar base de datos elimina todas las tablas y datos de la sección SQL. Esta acción no se puede deshacer y requiere que ingreses una palabra de confirmación. Las tablas en la sección Tablas no se ven afectadas.

Funciones de calculadora

Dos funciones de calculadora te permiten acceder a la base de datos SQL desde tu flujo de trabajo. Ambas están disponibles en las sugerencias del editor y son reconocidas por el asistente.

sql(query, params=null, strict=true)

Ejecuta una consulta.

Consulta Valor de retorno
Consulta con resultado (SELECT, RETURNING, PRAGMA) Lista JSON de filas, con cada fila representada como un objeto: [{"id": 1, "name": "Anna"}, ...]
Consulta sin resultado (INSERT, UPDATE, DELETE) número de filas afectadas
CREATE, DROP y otros cambios de esquema 0
Error cadena ERROR: <mensaje de error de SQLite>

Ejemplo:

rows = sql("SELECT name, phone FROM clients WHERE city = ?", [city])
n = sql("UPDATE clients SET status = :s WHERE id = :id", {"s": "vip", "id": client_id})

sql_value(query, params=null, strict=true)

Funciona como sql, pero devuelve un solo valor: la primera columna de la primera fila del resultado.

Si no hay filas, no hay resultado o el valor es NULL, devuelve una cadena vacía.

total = sql_value("SELECT count(*) FROM clients")
name = sql_value("SELECT name FROM clients WHERE id = ?", [client_id])

Parámetros

params pasa valores a la consulta por separado del texto de la consulta: usa una matriz JSON para los marcadores de posición ? o un objeto JSON para los marcadores de posición :name. Dentro de [...] y {...}, las variables se escriben como nombres de variables simples:

[client_id], no [#{client_id}].

Pasa cualquier valor recibido de un cliente a través de params, como su nombre, número de teléfono o texto del mensaje. Un valor concatenado directamente en el texto de la consulta podría modificar la consulta misma.

Modo estricto

Por defecto, strict=true: la función acepta exactamente una consulta y no permite comentarios en el texto de la consulta. Esto evita que un valor recibido de un mensaje de cliente agregue una segunda consulta o trunque el resto de la consulta original.

Establece strict=false para eliminar esta restricción, por ejemplo, al ejecutar varias consultas separadas por ;.

Límites

Límite Valor
Tiempo de ejecución para una sola consulta o lote de consultas 5 segundos
Filas devueltas hasta 1,000; las filas adicionales no se devuelven
Longitud del texto de la consulta 64 KB
Tamaño de la base de datos 200 MB; una vez superado, solo están disponibles la lectura y eliminación de datos

Los únicos comandos prohibidos son aquellos que acceden a recursos fuera de la base de datos del proyecto: ATTACH con una ruta de archivo y VACUUM INTO.

Todo lo demás, incluidos VACUUM, PRAGMA y transacciones estándar, está soportado.