Qubry DB · v0.14 · pré-lançamento

O banco de dados embutido, reescrito do zero em Rust.

Inspirado no SQLite, com JOINs, agregação, subconsultas, transações que sobrevivem a quedas de energia e modo WAL. Um único arquivo, sem servidor.

Grátis · ~700 KB · antes chamado EDSQLite

$ edsqlite loja.db
edsqlite> SELECT p.nome, sum(v.qtd) AS vendidos
     ...>   FROM produtos AS p
     ...>   JOIN vendas AS v ON v.produto = p.nome
     ...>   GROUP BY p.nome ORDER BY vendidos DESC;
caneta|15
mochila|1
edsqlite> EXPLAIN QUERY PLAN SELECT * FROM vendas
     ...>   WHERE produto = 'caneta';
QUERY PLAN
`--SEARCH vendas USING INDEX v_produto (produto=?)
edsqlite> ▍

Recursos

Comparado com o SQLite de verdade, resultado por resultado.

SQL com os tipos do SQLite

Afinidade por coluna, as cinco classes de valor, LIKE, IN, BETWEEN e as mesmas conversões.

JOINs e agregação

JOIN, CROSS JOIN, count, sum, avg, min, max, group_concat, GROUP BY, HAVING e DISTINCT.

Subconsultas

Escalares, IN (SELECT …) e EXISTS, correlacionadas ou não.

Índices e planner

Índices B-tree simples, compostos e UNIQUE, com EXPLAIN QUERY PLAN.

Transações duráveis

BEGIN, COMMIT e ROLLBACK com rollback journal: um crash deixa o banco como estava.

Concorrência e WAL

Várias conexões com busy_timeout. No WAL, quem lê não bloqueia quem escreve.

Comandos preparados

prepare, bind e step, com parâmetros ?, ?N e :nome.

API C

No formato da API C do SQLite, com header para C e C++.

Driver JDBC

Abre bancos no DBeaver como um SQLite, sem Java instalado.

Testes

Como sabemos que ele dá os mesmos resultados do SQLite?

SQL gerado ao acaso roda no Qubry DB e no SQLite real, e as respostas precisam ser idênticas, valor por valor e tipo por tipo.

Diferencial contra o SQLite

Expressões, índices, JOINs, agregação e subconsultas em milhões de rodadas geradas ao acaso.

sqllogictest do SQLite

6106 consultas do corpus oficial de conformidade, com as respostas do próprio SQLite.

Crash em cada operação de I/O

Uma falha simulada em cada escrita e cada fsync, e kill -9 no meio de commits.

Fuzzing todas as noites

SQL arbitrário e arquivos corrompidos: nunca um panic, só erros.

Instale em dois minutos.

Baixe o binário da última versão para o seu sistema, abra um banco e rode o primeiro SELECT.

  • macOS Apple Silicon e Intel
  • Linux x86_64 e arm64, binário estático
# baixe edsqlite-0.14.0-macos-arm64.tar.gz e então:
tar xzf edsqlite-0.14.0-macos-arm64.tar.gz
sudo mv edsqlite /usr/local/bin/
# o binário não é assinado pela Apple:
xattr -d com.apple.quarantine /usr/local/bin/edsqlite
edsqlite --version

Experimente o Qubry DB.

Encontrou algo estranho? Abra uma issue: é assim que a v1.0 fica mais sólida.