Rust · embedded · dialetto SQLite 3.50

Parla SQLite.
Scrive in parallelo.

PrismDB è un motore relazionale embedded che risponde come SQLite 3.50: stesse righe, stessi errori, stesso EXPLAIN QUERY PLAN. Sotto c’è un motore suo, con concorrenza a livello di riga: scritture su righe diverse non si bloccano mai.

5.939.878
record di sqllogictest su 5.939.879
per riga
conflitti solo sulla stessa riga
AES-256
file cifrati a riposo (GCM)
2.0
JDBC, .NET, Node e plugin per gli IDE
Un prisma che scompone un raggio di luce bianca nello spettro

Recupero l’ultimo commit

Il motore

Il dialetto è di SQLite. Il resto no.

PrismDB non riusa il formato dei file né la macchina virtuale di SQLite: ha il suo B+tree, il suo WAL e il suo MVCC. Per questo può fare quello che SQLite non fa — tante transazioni di scrittura insieme sullo stesso file.

MVCC serializzabile

Si blocca solo chi tocca la stessa riga

Ogni transazione lavora su uno snapshot. Se un’altra ha già committato una riga che questa ha scritto, letto o scandito, la seconda riceve un Busy e riprova: mai un panic, mai un file rovinato, mai write skew.

WAL e group commit

Un fsync per tanti commit

I commit si accodano al log e condividono un solo fsync. Al crash una transazione è tutta dentro o tutta fuori: lo verifica un test di tortura che uccide il processo a metà scrittura.

Formato v3

Copy-on-write, apertura istantanea

B+tree copy-on-write con due slot di meta e free list. open non carica niente: in RAM restano solo le chiavi cambiate dall’ultimo checkpoint e una cache di 8 MiB.

Molti processi

Un file, tutti i processi

Il primo processo che apre il file lo possiede e lo serve agli altri in loopback: transazioni e sessioni da processi diversi girano insieme, con la stessa semantica serializzabile.

Cifratura

AES-256-GCM a riposo

Ogni pagina è cifrata e autenticata: una chiave sbagliata o un byte manomesso non passano. Backup, VACUUM INTO e WAL restano cifrati.

Gateway

Lo stesso database in rete

prismdb-gateway serve un file su TCP (con token, o TLS con prismdbs://): è la strada dei driver JDBC, .NET e Node e dei plugin per gli IDE.

Compatibilità

Misurata, non dichiarata.

L’obiettivo è SQLite 3.50 istruzione per istruzione: stesse righe, intestazioni di colonna, messaggi di errore, output dei PRAGMA e righe del piano. Ogni push passa questi controlli.

5.939.878 record su 5.939.879 del corpus sqllogictest di SQLite. L’ultimo precede l’errore integer overflow che SQLite stesso ha introdotto dopo.
6 fuzzer differenziali contro SQLite: SQL generale, date, JSON, piani di esecuzione, FTS e R-tree. Più i test registrati da SQLite.
~99% dei piani casuali di EXPLAIN QUERY PLAN coincidono con quelli di SQLite: il planner è un porting del suo, i numeri di riga sono i nostri.
  • window function
  • CTE ricorsive
  • UPSERT
  • RETURNING
  • row value
  • JSON e JSONB
  • FTS5
  • FTS3 / FTS4
  • R-tree
  • colonne generate
  • STRICT
  • WITHOUT ROWID
  • trigger e INSTEAD OF
  • viste
  • indici parziali e su espressioni
  • ATTACH
  • VACUUM INTO
  • ANALYZE
  • PRAGMA
  • date e ora
  • printf
  • generate_series
  • procedure: CREATE PROCEDURE / CALL
  • changeset

In viola le estensioni di PrismDB, che SQLite non ha. Una differenza voluta: PRAGMA foreign_keys è attivo di default.

Playground

Il motore vero, nel tuo browser.

Non è una simulazione: è PrismDB compilato in WebAssembly, lo stesso codice del motore nativo, su un database in memoria. Niente passa da un server; il database vive in questa scheda.

playground.sql da caricare

Ctrl+Invio esegue lo script, o solo la selezione. Lo script si ferma al primo errore, come la shell prism. Ricarichi la pagina? Il database si ricostruisce da quello che hai eseguito.

Ecosistema 2.0

Dal crate Rust al tuo IDE.

Lo stesso motore, embedded nel tuo processo o raggiunto dal gateway, con i driver e gli strumenti di tutti i giorni.

Rust, Go, Python...

Via FFI

Il motore dentro il tuo processo da qualsiasi linguaggio che chiama il C: la libreria prism_c del motore.

Shell

prism

La riga di comando di sqlite3: stessi comandi punto, modalità di output, .read, .import, parametri.

Java

JDBC 2.0

Driver jdbc:prismdb:// per Java e Kotlin, nato per DBeaver: tabelle, relazioni, lettura e scrittura.

.NET

ADO.NET ed Entity Framework Core

PrismDB.Ado e il provider EF Core, con PrismDb.Scaffold() che tiene aggiornate entità, DTO, viste e procedure.

Node

npm prismdb

Client con pool e transazioni, ORM tipizzato generato dallo schema, Kysely e Drizzle, integrazioni per Next e Vite.

C

API C

Una libreria con simboli prism_* e handle opachi, per ogni linguaggio che sa chiamare il C.

Visual Studio Code

Estensione PrismDB

Esplora schema, editor SQL con parametri e piano, risultati esportabili, editor dei dati con salvataggio in transazione.

JetBrains

Plugin per tutte le suite

IntelliJ IDEA, WebStorm, Rider, RustRover, PyCharm, DataGrip...: finestra PrismDB, console, editor dei dati e il driver in Database Tools.

Visual Studio

Estensione VSIX

PrismDB Explorer con albero, griglia modificabile ed editor SQL, e lo scaffold di Entity Framework nel progetto.

Download

Tutto quello che serve, versione 2.0.0.

Ogni file ha accanto la sua guida nella documentazione. Non sai da dove partire? Da dove partire ti dice cosa scaricare.

Motore e gateway

Shell e libreria C

Windows x64

La shell prism (come sqlite3), la libreria C prism_c e l'header prism.h.

prismdb-engine-2.0.0-windows-x64.zip · 8,6 MB

SHA-256 466e145b88b0726e05138d9492f62297f50a165e3f3d0d5622d40bba9a0abac9

Shell e libreria C

Linux x64

La shell prism (come sqlite3), la libreria C libprism_c.so e l'header prism.h. glibc 2.39+ per la shell.

prismdb-engine-2.0.0-linux-x64.zip · 9,2 MB

SHA-256 f77f10e64d948b87547102a2a1847f2bdb35a6fd5f087cb8bea9b4836ad7d3aa

prismdb-gateway

Windows x64

Serve un file .prismdb su TCP a JDBC, .NET, Node e IDE. Già incluso nel pacchetto Node e nelle estensioni.

prismdb-gateway.exe · 12,1 MB

SHA-256 00115587c4b50dd47ad60ff310cee87d546cca8574a4a64a18197ccbab48c967

prismdb-gateway

Linux x64

Serve un file .prismdb su TCP a JDBC, .NET, Node e IDE. glibc 2.34+; dopo il download: chmod +x.

prismdb-gateway · 13,6 MB

SHA-256 b59fd2558bc0abd874dabad015b4d9361fe0544392a41c863bfe16c3befacc38

Driver e librerie

Driver JDBC

Tutti

Un solo JAR senza dipendenze, Java 8+, per Java, Kotlin e DBeaver. Serve il gateway.

prismdb-jdbc-2.0.0.jar · 59 KB

SHA-256 8746791919bc626abcf09855f219ef31c6731bcbf2c291e689312a3d8b54544b

NuGet per .NET

Windows · Linux

PrismDB.Ado, PrismDB.EntityFrameworkCore (EF Core 8 e 10, PrismDb.Scaffold) e PrismDB.Scaffolding. Serve il gateway.

prismdb-dotnet-2.0.0-nuget.zip · 125 KB

SHA-256 09d45bedbc9972044eaf6d09e72a235a8de957c8f114eb96030ccc918f0e5a19

Pacchetto Node.js

Windows · Linux

Il pacchetto npm prismdb (Node 22.12+) e i gateway per Windows e Linux.

prismdb-node-2.0.0.zip · 9,3 MB

SHA-256 4d080f2cef11d30e1edcc9be0029b8206b3a570483f92508db73620051cfaa31

Estensioni per gli IDE

Visual Studio Code

Windows x64

Esplora schema, editor SQL, risultati, editor dei dati. Gateway incluso. VS Code 1.101+.

prismdb-vscode-win32-x64-2.0.0.vsix · 4,5 MB

SHA-256 0a68b56403c66f073d8757ff1aa297a004bf42fc10dd45f84149d108fc09b64c

Visual Studio Code

Linux x64

Esplora schema, editor SQL, risultati, editor dei dati. Gateway incluso. VS Code 1.101+.

prismdb-vscode-linux-x64-2.0.0.vsix · 4,8 MB

SHA-256 e101321adcffb3eb3aa010ba8ea0a26abacfc40841403aa09a43d0da2384562a

IDE JetBrains

Windows · Linux

IntelliJ IDEA, WebStorm, Rider, RustRover, PyCharm, DataGrip... 2025.2+. Si installa lo zip così com'è.

prismdb-jetbrains-2.0.0.zip · 9,3 MB

SHA-256 27842cd144a825f62463f6b69e5abd14b3e29e1b1f95f7f16b83d12b020c1326

Visual Studio

Windows

PrismDB Explorer, griglia, editor SQL e scaffold EF per Visual Studio 2022 e 2026.

PrismDB-2.0.0.vsix · 4,4 MB

SHA-256 964ec539bf004d6ab221aed3a4e16165cd76dd09d13806d5425f08c8e7739a86

Windows 10/11 x64 e Linux x86-64. I binari non sono firmati: Windows SmartScreen può chiedere conferma. Verifica un file con certutil -hashfile file SHA256 (Windows) o sha256sum file (Linux).

Workspace

Otto crate, un file .prismdb.

Pagine, log, versioni, albero, SQL, facade e protocolli: ogni livello sta in un crate con i suoi test.

prism-pagerPagine da 4096 byte con CRC32, cifratura AES-256-GCM, fsync.
prism-walLog delle transazioni append-only, group commit, replay al riavvio.
prism-mvccVersioni delle righe, snapshot, controllo dei conflitti in lettura e scrittura.
prism-btreeB+tree copy-on-write, catena delle foglie per le scansioni.
prism-sqlParser, esecuzione, planner di EXPLAIN, FTS, R-tree, JSON, date, PRAGMA.
prism-coreFacade Database, sessioni, recovery, molti processi sullo stesso file.
prism-serverServer di chat in-process e protocollo TCP JSON: l’esempio di tanti client su un solo file.
prism-cAPI C con handle opachi, sicura contro panic e puntatori nulli.

Dal repository

Cosa si muove su master.

I commit del motore, sincronizzati ogni 5 minuti. Ultimo: f479adc — Licenza: software proprietario (non più MIT OR Apache-2.0).

f479adc
Licenza: software proprietario (non più MIT OR Apache-2.0)
Lorenzo
b102020
fix: ? inside CASE branches counts as a bound parameter
Lorenzo
26070e7
feat: the engine in the browser (wasm32-wasip1), RETURNING aliases, PROCEDURE IF EXISTS
Lorenzo
00abe04
feat: VACUUM [schema] INTO expr as SQLite
Lorenzo
cf72341
feat: row values, LIMIT expressions, ATTACH expressions and DDL as SQLite
Lorenzo
495d676
fix: LIMIT/OFFSET binds, rowid in correlated subqueries, shell procedure bodies
Lorenzo
e59786d
feat: procedures as written, aliased DML targets, ADD COLUMN REFERENCES
Lorenzo
af15a00
fix: generated columns, circular views, printf reals and planner panics as SQLite 3.50
Lorenzo
b96ed15
fix: resolve main.x past a temp shadow
Lorenzo
90b3d6c
fix: close the remaining SQLite compatibility gaps
Lorenzo
Mostra tutti i 11 commit
f7efc69
feat: FTS custom tokenizers and auxiliary functions
Lorenzo