#sqlite #reader

bin+lib sqlite-rs

SQLite reader in pure Rust

13 releases

0.3.7 Jan 17, 2024
0.3.6 Jan 17, 2024
0.2.1 Jan 13, 2024
0.1.8 Sep 17, 2023
0.1.5 Aug 30, 2023

#296 in Database interfaces

23 downloads per month

MIT license

105KB
2.5K SLoC

sqlite-rs

SQLite library in pure Rust and no dependencies (Under Development)

Getting Started via sqlite-rs CLI

Installation

cargo install sqlite-rs

Running from terminal

In memory

sqlite-rs

File (Read Only mode)

sqlite-rs --database-file=mydb.db?mode=ro

File (Read Write mode) - default

sqlite-rs --database-file=mydb.db?mode=rw

Or

sqlite-rs --database-file=mydb.db

File (Read Write and Create mode)

sqlite-rs --database-file=mydb.db?mode=rwc
sqlite-rs v0.3.3 - 1705457528
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite-rs> .dbinfo
database page size:  4096
write format:        1
read format:         1
reserved bytes:      0
file change counter: 0
database page count: 1
freelist page count: 0
schema cookie:       0
schema format:       4
default cache size:  0
autovacuum top root: 0
incremental vacuum:  0
text encoding:       1 (utf8)
user version:        0
application id:      0
software version:    303

Running from pipe

echo '.dbinfo' | sqlite-rs
database page size:  4096
write format:        1
read format:         1
reserved bytes:      0
file change counter: 0
database page count: 1
freelist page count: 0
schema cookie:       0
schema format:       4
default cache size:  0
autovacuum top root: 0
incremental vacuum:  0
text encoding:       1 (utf8)
user version:        0
application id:      0
software version:    303

Running with custom log level TRACE

RUST_LOG="trace" sqlite-rs

Or

echo '.dbinfo' | RUST_LOG="trace" sqlite-rs
1705457633.7426755 TRACE sqlite_rs: Openning SQliteIo [:memory:]...
1705457633.7427387 TRACE sqlite_rs: SQliteIo started: [SqliteIo { mode: InMemory }].
1705457633.7427547 TRACE sqlite_rs: Connecting SqlitePager...
1705457633.7427745 TRACE sqlite_rs::pager: [0] Bytes read from [InMemory]
1705457633.7427909 TRACE sqlite_rs: SQliteIo started: [SqlitePager { io: SqliteIo { mode: InMemory }, page_size: L4096, reserved_bytes_per_page: ReservedBytesPerPage(0) }].
1705457633.7428088 TRACE sqlite_rs: Starting SqliteRuntime...
1705457633.7428281 TRACE sqlite_rs: SqliteRuntime started: [SqliteRuntime { pager: SqlitePager { io: SqliteIo { mode: InMemory }, page_size: L4096, reserved_bytes_per_page: ReservedBytesPerPage(0) }, header: SqliteHeader { magic_header_string: MagicHeaderString, page_size: L4096, file_format_version_numbers: FileFormatVersionNumbers { write_version: Legacy, read_version: Legacy }, reserved_bytes_per_page: ReservedBytesPerPage(0), payload_fractions: PayloadFractions { maximum: MaximumEmbeddedPayloadFraction(64), minimum: MinimumEmbeddedPayloadFraction(32), leaf: LeafPayloadFraction(32) }, file_change_counter: FileChangeCounter(0), db_filesize_in_pages: DatabaseFileSizeInPages(1), freelist_pages: FreeListPages { first: FreeListPagesFirstTrunkPage(0), total: FreeListPagesTotalPages(0) }, schema_cookie: SchemaCookie(0), schema_format: Format4, suggested_cache_size: SuggestedCacheSize(0), incremental_vacuum_settings: IncrementalVacuumSettings { largest_root_btree_page: LargestRootBtreePage(0), incremental_vacuum_mode: False }, database_text_encoding: Utf8, user_version: UserVersion(0), application_id: ApplicationId(0), reserved_for_expansion: ReservedForExpansion, version_valid_for: VersionValidFor(303), write_library_version: WriteLibraryVersion(303) }, btree: SqliteBtree(()) }].
database page size:  4096
write format:        1
read format:         1
reserved bytes:      0
file change counter: 0
database page count: 1
freelist page count: 0
schema cookie:       0
schema format:       4
default cache size:  0
autovacuum top root: 0
incremental vacuum:  0
text encoding:       1 (utf8)
user version:        0
application id:      0
software version:    303

Run test sqlite-rs tool

git clone https://github.com/afsec/sqlite-rs
RUST_LOG="trace" cargo run -- --database-file=./data/flights-initial.db

Run tests

RUST_LOG="trace" cargo test -- --nocapture --test-threads=1

Run example sqlite_info

RUST_LOG="trace" cargo run --release --target=$(arch)-unknown-linux-musl --example sqlite_info

Live sessions

Roadmap

  • SQLite Header parsing
  • Log using RUST_LOG env var
  • sqlite-rs cli tool
  • Pager
  • Read tables
  • Read table schema
  • Read table rows
  • TBD

No runtime deps