Skip to content

asg017/sqlite-package-manager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

sqlite-package-manager

Warning

spm is in active development! Also consider Anton Zhiyanov's sqlpkg.

sqlite-package-manager, or spm for short, will be an npm-like tool for downloading and manage SQLite extensions. Unlike the pip/npm/gem bindings I described above, spm will be a language-agnostic tool, distributed as a single-binary CLI.

It's similar to npm, pip, gem, and cargo, but with a few key differences. You'll start a spm project like so:

spm init

Which creates an spm.toml file in your current directory, similar to a requirements.txt, package.json, Gemfile, or Cargo.toml file. It contains a list of "dependencies" (SQLite extensions) that you can edit by hand or with the spm CLI, like with the "spm add" command:

spm add github.com/asg017/sqlite-http
spm add github.com/asg017/sqlite-html
spm add github.com/asg017/sqlite-vss

Which would generate the following config in your spm.toml:

[extensions]
"https://github.com/asg017/sqlite-http" = "v0.1.0-alpha.7"
"https://github.com/asg017/sqlite-html" = "v0.1.2-alpha.7"
"https://github.com/asg017/sqlite-vss" = "v0.1.1-alpha.19"

Additionally, an spm.lock file will be generated alongside your spm.toml file, which contains detailed checksums and URLs of the downloaded SQLite extensions (similar to package-lock.json, yarn.lock, Pipfile.lock, Gemfile.lock, Cargo.lock).

You'll find these downloaded pre-compiled extensions in the new sqlite_extensions/ directory alongside your project! Think of this like a node_modules/, site-packages, or target/ directory, which contains the downloaded code of your dependencies. The extensions that are downloaded are for your current operating system and CPU architecture - in this case, the MacOS x86_64 .dylib files for my computer.

$ tree .
.
├── spm.lock
├── spm.toml
└── sqlite_extensions
    ├── html0.dylib
    ├── http0.dylib
    ├── vector0.dylib
    └── vss0.dylib

1 directory, 6 files

To use these extensions, you could load them manually from the sqlite_extensions/ directory, like .load ./sqlite_extensions/html0.

Alternatively, use the spm run command and reference the extensions you want by name, without the sqlite_extensions/ prefix. for example, for the following build.sql file:

.load html0
.load http0

create table foo(bar text);

insert into foo
values(html_extract(http_get('https://...')));

You can run the above with the sqilte3 CLI like so:

spm run -- sqlite3 data.db '.read build.sql'

The .load html0 statement will automatically load in from your spm environment.

You can additionally use spm activate/deactivate to create a light "spm environment" in your current shell.

$(spm activate)
sqlite3 data.db '.read build.sql'
$(spm deactivate)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages