GlueSQL is a SQL database library written in Rust. It provides a parser (sqlparser-rs), execution layer, and optional storage (sled) packaged into a single library. Developers can choose to use GlueSQL to build their own SQL database, or as an embedded SQL database using the default storage engine.
You can use GlueSQL as an embedded SQL database. GlueSQL provides sled as a default storage engine.
In your Cargo.toml
:
[dependencies]
gluesql = "0.6"
use gluesql::{parse, Glue, SledStorage};
fn main() {
let storage = SledStorage::new("data.db").unwrap();
let mut glue = Glue::new(storage);
let sqls = "
CREATE TABLE Glue (id INTEGER);
INSERT INTO Glue VALUES (100);
INSERT INTO Glue VALUES (200);
SELECT * FROM Glue WHERE id > 100;
DROP TABLE Glue;
";
for query in parse(sqls).unwrap() {
glue.execute(&query).unwrap();
}
}
sled-storage
is optional. So in Cargo.toml
:
[dependencies]
gluesql = { version = "0.6", default-features = false, features = ["alter-table"] }
# alter-table is optional.
# If your DB does not have plan to support ALTER TABLE, then use this below.
gluesql = { version = "0.6", default-features = false }
There are two required 2 traits for using GlueSQL: Store
and StoreMut
.
In src/store/mod.rs
,
pub trait Store<T: Debug> {
async fn fetch_schema(..) -> ..;
async fn scan_data(..) -> ..;
}
pub trait StoreMut<T: Debug> where Self: Sized {
async fn insert_schema(..) -> ..;
async fn delete_schema(..) -> ..;
async fn insert_data(..) -> ..;
async fn update_data(..) -> ..;
async fn delete_data(..) -> ..;
}
.. there is also a single, optional trait:
In src/store/alter_table.rs
,
pub trait AlterTable where Self: Sized {
async fn rename_schema(..) -> ..;
async fn rename_column(..) -> ..;
async fn add_column(..) -> ..;
async fn drop_column(..) -> ..;
}
https://github.com/gluesql/gluesql-js
Use SQL in web browsers!
GlueSQL-js provides 3 storage options,
- in-memory
- localStorage
- sessionStorage
https://sheets.gluesql.com
Turn Google Sheets into a SQL database!
It uses Google Sheets as a storage.
Data is stored and updated from Google Sheets.
- Add SQL layer to NoSQL databases: Redis, CouchDB...
- Build new SQL database management system
GlueSQL currently supports a limited subset of queries. It's being actively developed.
CREATE TABLE
with 8 types:INTEGER
,FLOAT
,BOOLEAN
,TEXT
,DATE
,TIMESTAMP
,TIME
andINTERVAL
.ALTER TABLE
with 4 operations:ADD COLUMN
,DROP COLUMN
,RENAME COLUMN
andRENAME TO
.INSERT
,UPDATE
,DELETE
,SELECT
,DROP TABLE
GROUP BY
,HAVING
- Nested select, join, aggregations ...
You can see tests for the currently supported queries in src/tests/*.
There are a few simple rules to follow.
- No
mut
keywords insrc/executor
andsrc/data
. - Iterator should not be evaluated in the middle of execution layer.
- Every error must have corresponding integration test cases to generate.
(except forUnreachable-
andConflict-
error types)