安装
NodeJS 版本 0.8.0+
npm install node-query
简介
它可以用于一些典型的场景:
- 作为 SQL 前端,进行语法检查和格式化。
- 作为 KV 数据库(如 HBase 或类似的东西)的 SQL 引擎。
- 为您的 HTTP/WEB 服务提供 SQL 接口。
- 在 Oracle、MySQL、HBase 等许多不同的数据源之间进行数据合并和集成。
演示和测试
要运行演示,请键入命令:
node demo/demo.js
对于测试,输入命令:
make
仔细阅读演示然后你可以编写自己的加载器/适配器,其中也有很多测试用例test/unit
,它们对你很有帮助。
用法
请阅读演示文件 demo/demo.js
对于 KV 存储引擎,您需要做的是提供如下查询接口:
singleQuery
,rangeQuery
,likeQuery
对于 SQL 存储引擎,您应该实现如下功能:
function query(str, function(err, data) { ... })
那么你可以像这样执行 SQL :(来自 的代码片段demo.js
)
var sqls = [ "SELECT * FROM kv.user WHERE id IN ('01', '03')", "SELECT * FROM kv.user WHERE id LIKE '1%'", "SELECT type, MAX(age), COUNT(id) FROM kv.user WHERE id BETWEEN '03' AND '10' GROUP BY type ORDER BY MAX(age) DESC", "SELECT * from mysql.shop where shop_id > 5" ] var concurrentJoinSQL = [ "$a := select * from kv.user where id BETWEEN '03' and '10'", "$b := select * from mysql.shop where shop_id > 5", "$c := select a.type , a.id ,b.name, b.title from $a INNER JOIN $b ON a.type = b.type WHERE a.id > '04'", "return $c" ] var sequentialJoinSQL = [ "$a := select * from kv.user where id BETWEEN '03' and '10'", //you could also use `unique` do filter firstly //"$type := UNIQUE($a.type)", //"$b := select * from mysql.shop where type = $type", "$b := select * from mysql.shop where type in $a.type", "$c := select a.type , a.id ,b.name, b.title from $a INNER JOIN $b ON a.type = b.type WHERE a.id > '04'", "return [$b, $c]" ]
如你所见,除了作为建立在 KV 存储引擎之上的 SQL 计算层之外,它现在还可以在 kv 数据源、sql 源、HTTP 服务之间进行 join 操作
nSQL 定义
在“有点怪” SQL正如你看到的上面,nSQL实现SQL92的一个子集,它也有一些程序的功能,它支持变量,所以就将此类型var
/ array
/ table
,也关键字return
,获取详细信息,请参阅规范的peg/nquery.pgejs
。
任务调度
正如你在中看到的concurrentJoinSQL
,我们知道任务$a
,$b
没有关系,所以 nQuery 会并发地做它们,但是对于sequentialJoinSQL
, $b
是依赖的过程$a
,所以任务$b
会在时间$a
完成后执行
关键词 return
在传统 SQL 中,查询结果是一个二维表,但是在 nSQL 中,我们添加了array
/类型 table
,因此现在您可以返回复杂的结果,例如
return [$b, $c, 'hello', [1, 2]]