[][src]Crate gluesql

GlueSQL

gluesql is a SQL database engine fully written in Rust. You can simply use gluesql as an embedded SQL database using default storage sled. Or you can make your own SQL database using gluesql, it provides parser & execution layer as a library.

gluesql uses sqlparser-rs as a parser, and has own implementation of execution layer. And the entire codes of execution layer are pure functional!

Examples

use gluesql::*;

#[cfg(feature = "sled-storage")]
fn main() {
    let storage = SledStorage::new("data/doc-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();
    }
}

#[cfg(not(feature = "sled-storage"))]
fn main() {}

Custom Storage

All you need to implement for gluesql is implementing 3 traits (2 for functions, 1 for running tests). There is also an optional trait (AlterTable), whether implementing it or not is all up to you.

Custom storage examples to see,

Tests

For making easy for developers to implement custom storages, gluesql also provides integration tests as a module.

So, in /tests/, it looks quite empty, but actual test cases exist in src/tests/.

Example code to see,

After you implement Tester trait, the only thing you need to do is calling generate_tests! macro.

Re-exports

pub use sqlparser as parser;
pub use data::*;
pub use result::*;
pub use store::*;
pub use sled;

Modules

data
result
store
tests

Macros

concat_with
concat_with_empty
generate_alter_table_tests
generate_tests
row
select
select_with_empty
test_case
try_into

Structs

Glue
Query
SledStorage

Enums

AggregateError
BlendError
EvaluateError
ExecuteError
FetchError
FilterError
GroupKey
JoinError
LimitError
ParserError
Payload
SelectError
UpdateError

Functions

execute
parse