Play Redis as a rational store via SQL
- 1st Rule: Redis is just Redis
- 2nd Rule: See the 1st Rule
- 3rd Rule: As fast as possible
- How to build:
lein uberjar
or
boot build --pro
- Run test:
boot test
- General parser:
java -jar <redisql.jar> -e"aaaabbbb" -b@sample.bnf
- Redisql CLI mode:
java -jar <redisql.jar> -s"select * from t1;"
- Redisql REPL mode:
java -jar <redisql.jar>
- Implement a set of basic sql semantics
- Models: single node or master-slave
- Naming: _{*}_
- Versioning: think about it in future
- Clustering: ok, think about it in future
- row: use Hash reprensents the row
- column: just as Hash's field
- cell: the intersect of a row and a column, identified by Hash's field and value pair
- primary key: one Table one primary key, which identifies a row, use Zset/Set represents it
- constraints: integrity check, such as not null or default
It's awesome to create table into Redis, and so easy
create table t1 (
id number(2,0) primary key,
last_name varchar2(30) not null,
salary number(4,2) default 0.0);
Somethimes the Identity column is required, so Redisql supports it.
create table t2 (
id number(2,0) identity,
last_name varchar2(30) not null,
salary number(4,2) default 0.0);
How to view the schema, it's a problem, so
describe;
describe t1;
describe t2;
Just go:
insert into t1(id, last_name, salary) values (101, 'Anny', 1200);
insert into t2(last_name, salary) values('Ben', 1200.50);
It's a hard job, so I start it with level zero.
- supports single compare expression
select * from t1 where id=101;
select * from t2 where id >= 101;
select * from t3 where id <= 'aaa';
- select all
select * from t1;