GlueSQL is a SQL database library written in Rust which provides parser (sqlparser-rs), execution layer, and an optional storage (sled).
Developers can use GlueSQL to build their own SQL databases or they can simply use GlueSQL as an embedded SQL database using default storage.
You can simply use GlueSQL as an embedded SQL database, GlueSQL provides sled as a default storage engine.
In your Cargo.toml
[dependencies]
gluesql = "0.3"
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();
}
}
Now you don't need to include sled-storage
. So in Cargo.toml
,
[dependencies]
gluesql = { version = "0.3", 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.3", default-features = false }
All you only need to do is implementing 2 traits: 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(..) -> ..;
}
And a single optional trait, whether implementing this is all up to you!
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(..) -> ..;
}
Examples - GlueSQL-js
Use SQL in web browsers!
GlueSQL-js provides 3 storage options,
- in-memory
- localStorage
- sessionStorage.
GlueSQL currently supports limited queries, it's in very early stage.
CREATE
with 4 types:INTEGER
,FLOAT
,BOOLEAN
,TEXT
with an optionalNULL
attribute.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 current query supports in src/tests/*.
- Run SQL in web browsers - gluesql-js
It would be cool to make state management library using
gluesql-js
. - Add SQL layer to NoSQL databases: Redis, CouchDB...
- Build new SQL database management system
It's very early stage, please feel free to do whatever you want to.
Only the thing you need to be aware of is...
- Except for
src/glue.rs
,src/tests/
andsrc/utils/
, there is no place to usemut
keyword.