tg-knex-query-resolver
Version:
TeselaGen's Knex based query resolver
78 lines (62 loc) • 2.16 kB
JavaScript
//Client Side
const QueryBuilder = require('tg-client-query-builder');
const fse = require('fs-extra');
const path = require('path');
//Server Side
const parseQuery = require('../query-parser');
const resolveQuery = require('../query-resolver');
const sqlFormatter = require('sql-formatter');
const log = require('../log');
var qb = new QueryBuilder();
var qry = qb.filter('Author')
.whereAll({
firstName: "Adam",
lastName: "Thomas"
}, {
city: "Carmel"
}, {
id: qb.related("Post.Author_id")
.whereAll({
likes: qb.greaterThan(10)
}),
Group_id: qb.related("Group.id")
.whereAll({
groupType: qb.inList(['admin', 'supervisor'])
})
},
{
id: qb.related("AuthorRole.Author_id")
.whereAll({
Role_id: qb.related("Role.id")
.whereAll({
name: 'Super-Author'
})
})
},
{
AuthorType_code: qb.notRelated("AuthorType.code")
.whereAll({
name: 'Retired'
}, {
name: 'Deceased'
})
})
.andWhereAny({
state: 'IN',
country: 'USA'
}, {
zipCode: '46032'
}, {
age: qb.greaterThan(30)
});
var qryJson = qry.toJSON();
log(qryJson);
var parsedQuery = parseQuery(qryJson);
log(parsedQuery);
var knex = require('knex')({ client: 'pg' });
var qb = resolveQuery(knex, parsedQuery);
var sql = qb.toSQL();
log(sql);
var sqlStr = qb.toString();
log(sqlFormatter.format(sqlStr));
fse.outputFileSync(path.join(__dirname, 'example1.txt'), sqlStr);