1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
//! # 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](https://crates.io/crates/sled). //! Or you can make your own SQL database using `gluesql`, it provides parser & execution layer as //! a library. //! //! `gluesql` uses [sqlparser-rs](https://crates.io/crates/sqlparser) 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. //! //! * [Store](store/trait.Store.html) //! * [StoreMut](store/trait.StoreMut.html) //! * [AlterTable - optional](store/trait.AlterTable.html) //! * [Tester](tests/trait.Tester.html) //! //! Custom storage examples to see, //! * [GlueSQL-js](https://github.com/gluesql/gluesql-js) //! //! ## 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, //! * [tests/sled_storage.rs](https://github.com/gluesql/gluesql/blob/main/tests/sled_storage.rs) //! //! After you implement `Tester` trait, the only thing you need to do is calling `generate_tests!` macro. // re-export pub use sqlparser as parser; mod executor; mod glue; mod parse; mod storages; mod utils; pub mod data; pub mod result; pub mod store; pub mod tests; pub use data::*; pub use executor::*; pub use parse::*; pub use result::*; pub use store::*; #[cfg(feature = "sled-storage")] pub use glue::Glue; #[cfg(feature = "sled-storage")] pub use sled; #[cfg(feature = "sled-storage")] pub use storages::*;