tauri-sql-tab es la solución definitiva para integrar la potencia de dbtabla y tabla-model en aplicaciones de escritorio creadas con Tauri. Permite interactuar con bases de datos SQL (SQLite, MySQL, PostgreSQL) de forma nativa a través del plugin oficial de Tauri, manteniendo una interfaz de alto nivel orientada a objetos (Active Record).
- Integración Nativa con Tauri: Diseñado específicamente para trabajar sobre
@tauri-apps/plugin-sql. - Zero Logic en Rust: Toda tu lógica de base de datos permanece en JavaScript/TypeScript.
- Patrón Active Record: Los resultados son objetos inteligentes (
dbRow) con métodos.update()y.delete(). - Gestión de Esquemas: Sincronización automática de tablas basada en modelos de
tabla-model. - Fluent Query Builder: Motor de selección polimórfico con soporte para Joins dinámicos y búsquedas inteligentes.
- Portabilidad: API 100% compatible con
sqlite3-tabymysql-tab.
Este paquete forma parte de un ecosistema modular. También puedes utilizar:
- tabla-model: El motor de definición de esquemas.
- dbtabla: El núcleo de la librería.
- sqlite3-tab: Para aplicaciones Node.js puras con SQLite.
Para que este paquete funcione, debes tener configurado el plugin de SQL en tu proyecto Tauri.
Añade el plugin a tu archivo de configuración de Rust:
[dependencies]
tauri-plugin-sql = "2.0.0" # Usa la versión compatible con tu TauriRegistra el plugin en el constructor de tu aplicación:
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_sql::Builder::default().build()) // <--- Añadir esto
.run(tauri::generate_context!())
.expect("error while running tauri application");
}Asegúrate de conceder permisos en src-tauri/capabilities/default.json:
{
"permissions": [
"sql:default",
"sql:allow-load",
"sql:allow-execute",
"sql:allow-select"
]
}npm install tauri-sql-tabPrimero carga la base de datos usando el plugin de Tauri y luego envuélvela con tauri-sql-tab.
import Database from '@tauri-apps/plugin-sql';
import { tauriSqlTab } from 'tauri-sql-tab';
// Carga la base de datos (SQLite en este ejemplo)
const dbTauri = await Database.load('sqlite:notas.db');
// Inicializa el conector de dbtabla
const db = new tauriSqlTab(dbTauri);import Model from 'tabla-model';
const UsuarioModel = new Model('usuarios', {
colums: [
{ name: 'id', type: 'integer', primary: true, autoincrement: true },
{ name: 'nombre', type: 'varchar(100)' },
{ name: 'email', type: 'varchar(100)', unique: true }
]
});
db.addModel(UsuarioModel);const usuarios = db.tabla('usuarios');await usuarios.insert({ nombre: 'Antigravity', email: 'anti@example.com' });// Búsqueda simple
const lista = await usuarios.select("id > 0");
// Búsqueda con objeto (Where avanzado)
// Sufijos: % (LIKE), ! (!=), > (>), < (<)
const resultados = await usuarios.select(null, null, {
"nombre%": "Anti%",
"||email!": "test@test.com"
});
// Búsqueda por ID
const user = await usuarios.selectById(1);await usuarios.update({ nombre: 'Nuevo Nombre' }, { id: 1 });
await usuarios.delete({ id: 1 });Los resultados devueltos por select son instancias de dbRow:
const user = await usuarios.selectById(1);
if (user) {
user.nombre = "Editado";
await user.update(); // Sincroniza con la DB automáticamente
}El paquete incluye una suite de pruebas que utiliza un Mock de SQLite para entorno Node.js:
npm testEste proyecto incluye una AI Skill diseñada para que asistentes de IA (como ChatGPT, Claude o Copilot) puedan entender y utilizar esta librería de forma óptima.
Puedes encontrarla en: SKILL.md
MIT