diff --git a/README.md b/README.md index c033b37..954ebc1 100644 --- a/README.md +++ b/README.md @@ -14,33 +14,29 @@ From here, you can create a new engine by running `schema build`. It will get th using zig that the CLI will then use to manipulate data. You then interact with the engine by using `run "My query go here"` or by directly using the engine binary. -## Why Zippon ? +### Why Zippon ? -I first started ZipponDB to learn, but I think that in order to learn, you need to build something real, so I chose to do a database -as I try to become an expert in it. - -Now for Zippon advantages: -- Open-source and 100% in Zig with 0 dependencies +- Open-source and written 100% in Zig with 0 dependency - Relational database - Small, fast and implementable everywhere # Declare a schema -ZipponDB need a schema to work. A schema is a way to define how your data will be store. Compared to SQL, you can see it as a -file where you declare all table name, columns name, data type and relationship. But here you declare struct. A struct have a name and -members. A member is one data or link and have a type associated. Here a simple example for a user: +ZipponDB need a schema to work. A schema is a way to define how your data will be store. + +Compared to SQL, you can see it as a file where you declare all table name, columns name, data type and relationship. + +But here you declare struct. A struct have a name and members. A member is one data or link and have a type associated. Here a simple example for a user: ``` User ( name: str, email: str, best_friend: User, - friends: []User, ) ``` -In this example each user have a name and email as a string. But also one best friend as a link. [] mean that there is a -list of this value. Note that all value can be null exept list, they can be empty. +In this example each user have a name and email as a string. But also one best friend as a link. Here a more advance example with multiple struct: ``` @@ -49,9 +45,9 @@ User { email: str, friends: []User, posts: []Post, - liked_post: []Post, + liked_posts: []Post, comments: []Comment, - liked_com: []Comment, + liked_coms: []Comment, } Post { @@ -72,13 +68,11 @@ Comment { } ``` -Note: data not yet implemented. +Note: [] are list of value. # ZipponQL -Zippon have it's own query language. Why ? Idk, I wanted to do it. - -The language itself is fairly easy in my opinion. Here the basic: +Zippon have it's own query language. Here the keys point to remember: - {} Are filters - [] Are how much; what data @@ -89,53 +83,52 @@ The language itself is fairly easy in my opinion. Here the basic: ### Some examples -`GRAB User` +`GRAB User` Get all users -`GRAB User { name = 'Adrien' }` +`GRAB User { name = 'Adrien' }` Get all user named Adrien -`GRAB User [1; email]` +`GRAB User [1; email]` Get one user email -`GRAB User | ASCENDING name |` +`GRAB User | ASCENDING name |` Get all users ordered by name -`GRAB User [name] { age > 10 AND name != 'Adrien' } | DECENDING age |` +`GRAB User [name] { age > 10 AND name != 'Adrien' } | DECENDING age |` Get just the name of all users that are more than 10 years old and not named Adrien -`GRAB User [1] { bestfriend = { name = 'Adrien' } }` +`GRAB User [1] { bestfriend = { name = 'Adrien' } }` Get one user that have a best friend named Adrien -`GRAB User [10; friends [1]] { age > 10 } | ASC name |` +`GRAB User [10; friends [1]] { age > 10 } | ASC name |` Get one friend of the 10 first user above 10 years old in ascending name. ### Not yet implemented -`GRAB Message [100; comments [ date ] ] { .writter = { name = 'Adrien' }.bestfriend }` +`GRAB Message [100; comments [ date ] ] { .writter = { name = 'Adrien' }.bestfriend }` Get the date of 100 comments written by the best friend of a user named Adrien -`GRAB User { IN Message { date > '12-01-2014' }.writter }` +`GRAB User { IN Message { date > '12-01-2014' }.writter }` Get all users that sended a message after the 12 january 2014 -`GRAB User { !IN Comment { }.writter }` +`GRAB User { !IN Comment { }.writter }` Get all user that didn't wrote a comment -`GRAB User { IN User { name = 'Adrien' }.friends }` +`GRAB User { IN User { name = 'Adrien' }.friends }` Get all user that are friends with an Adrien -`UPDATE User [1] { name = 'Adrien' } => ( email = 'new@email.com' )` +`UPDATE User [1] { name = 'Adrien' } => ( email = 'new@email.com' )` -`REMOVE User { id = '000-000' }` - -`ADD User ( name = 'Adrien', email = 'email', age = 40 )` +`REMOVE User { id = '000-000' }` +`ADD User ( name = 'Adrien', email = 'email', age = 40 )` # Integration For now there is only a python intregration, but because it is just 2-3 command, it is easy to implement with other language. -## Python +### Python ```python import zippondb as zdb @@ -152,12 +145,14 @@ for user in users: # Roadmap -[ ] Beta without link -[ ] Relationships/links -[ ] Multi threading -[ ] Transaction -[ ] Docker image -[ ] Migration of schema -[ ] Dump/Bump data -[ ] In memory option -[ ] Archives +[X] CLI +[ ] Beta without link +[ ] Relationships/links +[ ] Multi threading +[ ] Transaction +[ ] Docker image +[ ] Migration of schema +[ ] Dump/Bump data +[ ] In memory option +[ ] Archives +[ ] Date value type