OdoQL is an extendible, composable and modular JSON query language.
This module (odoql) can build JSON queries with no additional dependencies. Use odoql-exe and other providers to execute queries. Or build additional execution environments in languages other than javascript.
- OdoQL Examples contain some good examples of the OdoQL syntax.
- Odo.js Handbook is a good example of how OdoQL can be used in a web framework.
Define a query
var ql = require('odoql');
ql = ql
.use('csv')
.use('http');
var query = ql('http://samplecsvs.s3.amazonaws.com/Sacramentorealestatetransactions.csv')
.http()
.csv({
header: true,
skipEmptyLines: true
})
.assign({
sq__ft: ql.asFloat(ql.ref('sq__ft'))
})
.filter(ql.gt(ql.ref('sq__ft'), 1000))
.shape({
street: true
})
.query();
console.log(JSON.stringify(query, null, 2));
Raw JSON format can be sent to a server or saved.
{
"__q": "shape",
"__p": {
"street": true
},
"__s": {
"__q": "filter",
"__p": {
"__q": "gt",
"__l": {
"__q": "ref",
"__s": "sq__ft"
},
"__r": 1000
},
"__s": {
"__q": "assign",
"__p": {
"sq__ft": {
"__q": "asFloat",
"__s": {
"__q": "ref",
"__s": "sq__ft"
}
}
},
"__s": {
"__q": "csv",
"__p": {
"header": true,
"skipEmptyLines": true
},
"__s": {
"__q": "http",
"__s": "http://samplecsvs.s3.amazonaws.com/Sacramentorealestatetransactions.csv"
}
}
}
}
}
Execute a JSON query:
var exe = require('odoql-exe');
exe = exe()
.use(require('odoql-csv'))
.use(require('odoql-http'));
var run = exe.build(query);
run(function(err, results) {
console.log(results);
});
This is just the start, see OdoQL Exe source for other components including caching, dynamic queries and parrallel queries. See Odo Relay to integrate OdoQL into Odo.js