### What? adding checkpoint result returning number of pages in wal and num pages checkpointed. Part of #696 ### Context SQLite returns in checkpoint result of calling `pragma wal_checkpoint;` `0|3|3` while limbo returns `0|0|0`. https://sqlite.org/pragma.html#pragma_wal_checkpoint - 1st col: 1 (checkpoint SQLITE_BUSY) or 0 (not busy). - 2nd col: # modified pages written to wal file - 3rd col: # pages moved to db after checkpoint This PR aims to add 2nd and 3rd column to the checkpoint result. SQLite ``` sqlite3 test.db sqlite> pragma journal_mode=wal; wal sqlite> pragma journal_mode; wal sqlite> create table t1 (id text); sqlite> insert into t1(id) values (1),(2); sqlite> select * from t1; 1 2 sqlite> pragma wal_checkpoint; 0|3|3 ``` Limbo ``` ./target/debug/limbo test.db Limbo v0.0.13 Enter ".help" for usage hints. limbo> pragma journal_mode; wal limbo> create table t1(id text); limbo> insert into t1(id) values (1),(2); limbo> select * from t1; 1 2 # current the 2nd and 3rd columns are hard coded in limbo to 0 limbo> pragma wal_checkpoint; 0|0|0 ``` Closes #827
Limbo
Limbo is a work-in-progress, in-process OLTP database management system, compatible with SQLite.
Features
Limbo is an in-process OLTP database engine library that has:
- Asynchronous I/O support on Linux with
io_uring - SQLite compatibility [doc] for SQL dialect, file formats, and the C API
- Language bindings for JavaScript/WebAssembly, Rust, Go, Python, and Java
- OS support for Linux, macOS, and Windows
Getting Started
💻 Command Line
You can install the latest limbo release with:
curl --proto '=https' --tlsv1.2 -LsSf \
https://github.com/tursodatabase/limbo/releases/latest/download/limbo-installer.sh | sh
Then launch the shell to execute SQL statements:
Limbo
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database
limbo> CREATE TABLE users (id INT PRIMARY KEY, username TEXT);
limbo> INSERT INTO users VALUES (1, 'alice');
limbo> INSERT INTO users VALUES (2, 'bob');
limbo> SELECT * FROM users;
1|alice
2|bob
You can also build and run the latest development version with:
cargo run
✨ JavaScript (wip)
Installation:
npm i limbo-wasm
Example usage:
import { Database } from 'limbo-wasm';
const db = new Database('sqlite.db');
const stmt = db.prepare('SELECT * FROM users');
const users = stmt.all();
console.log(users);
🐍 Python (wip)
pip install pylimbo
Example usage:
import limbo
con = limbo.connect("sqlite.db")
cur = con.cursor()
res = cur.execute("SELECT * FROM users")
print(res.fetchone())
Contributing
We'd love to have you contribute to Limbo! Please check out the contribution guide to get started.
FAQ
How is Limbo different from libSQL?
Limbo is a research project to build a SQLite compatible in-process database in Rust with native async support. The libSQL project, on the other hand, is an open source, open contribution fork of SQLite, with focus on production features such as replication, backups, encryption, and so on. There is no hard dependency between the two projects. Of course, if Limbo becomes widely successful, we might consider merging with libSQL, but that is something that will be decided in the future.
Publications
- Pekka Enberg, Sasu Tarkoma, Jon Crowcroft Ashwin Rao (2024). Serverless Runtime / Database Co-Design With Asynchronous I/O. In EdgeSys ‘24. [PDF]
- Pekka Enberg, Sasu Tarkoma, and Ashwin Rao (2023). Towards Database and Serverless Runtime Co-Design. In CoNEXT-SW ’23. [PDF] [Slides]
License
This project is licensed under the MIT license.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Limbo by you, shall be licensed as MIT, without any additional terms or conditions.
