This is my solution in Go for the "Build Your Own SQLite" Challenge.
In this challenge, I have built a barebones SQLite implementation that supports basic SQL queries by reading the raw SQLite's file format, filtering using indexes and traversing the stored B-trees structure and more.
Final implementation passes all stages of sqlite-tester v47:
- Print page size
- Print number of tables
- Print table names
- Count rows in a table
- Read data from a single column
- Read data from multiple columns
- Filter data with a WHERE clause
- Retrieve data using a full-table scan
- Retrieve data using an index
To make it easy to test queries locally, we've added a sample database in the
root of this repository: sample.db
.
This contains two tables: apples
& oranges
. You can use this to test your
implementation for the first 6 stages.
You can explore this database by running queries against it like this:
$ sqlite3 sample.db "select id, name from apples"
1|Granny Smith
2|Fuji
3|Honeycrisp
4|Golden Delicious
There are two other databases that you can use:
superheroes.db
:- This is a small version of the test database used in the table-scan stage.
- It contains one table:
superheroes
. - It is ~1MB in size.
companies.db
:- This is a small version of the test database used in the index-scan stage.
- It contains one table:
companies
, and one index:idx_companies_country
- It is ~7MB in size.
These aren't included in the repository because they're large in size. You can download them by running this script:
./download_sample_databases.sh
If the script doesn't work for some reason, you can download the databases directly from codecrafters-io/sample-sqlite-databases.