UNPKG

tg-knex-query-resolver

Version:

TeselaGen's Knex based query resolver

89 lines (75 loc) 2.65 kB
var knex = require('knex')({ client: 'pg' }); var parse = require('node-sqlparser').parse; var qry = knex.select("id", "name").from("user"); var log = require('./log'); var qry2 = knex.where({ id: 1}); console.log(qry2.toString()); // var filter = [ // { op: "where", args: ["name", "like", "%adam%"]} // ]; // var filter = [ // { op: "where", args: ["name", "like", "%adam%"]}, // { op: "andWhere", args: [{id:3}]} // ]; // var filter = [ // { op: "where", args: ["name", "like", "%adam%"]}, // { op: "orWhere", grp: [ // { op: "where", args:[{ role: "admin" }]}, // { op: "andWhere", args: [{ id: 2}]} // ]} // ]; // var filter = [ // { op: "where", args: ["name", "like", "%adam%"]}, // { op: "orWhere", grp: [ // { op: "where", args:[{ role: "admin" }]}, // { op: "andWhereIn", args: ['id', [1,2,3]]} // ]} // ]; // var qry3 = knex.select("id", "name").from("user") // .where("id",1).andWhereIn(function(){ // this.select("id").from("access_control").where({id:5}); // }); // console.log("QRY3: " + qry.toString()); var filter = [ { op: "where", args: ["name", "like", "%adam%"]}, { op: "orWhere", grp: [ { col: "id", op: "whereIn", subqry: [ { op: "select", args: ["id"]}, { op: "from", args: ["access_control"]}, { op: "where", args: [{id: 5}]} ]}, { col: "id", op: "between", subqry: [ { op: "select", args: ["id"]}, { op: "from", args: ["access_control"]}, { op: "where", args: [{id: 5}]} ]}, { op: "andWhere", args:[{ role: "admin" }]} ]} ]; resolveFilter(qry, filter); console.log(qry.toSQL()); var queryAsStr = qry.toString(); console.log(queryAsStr); log(parse(queryAsStr)); function resolveFilter(qb, filter){ filter.forEach((op) => { // log("\nQB========="); // log(qb); // log("\n"); // log("OP>>>>>>>>>>"); // log(op); if(isDefined(op, "args") && Array.isArray(op.args)){ qb = qb[op.op].apply(qb, op.args); }else if(isDefined(op, "grp") && Array.isArray(op.grp)){ qb = qb[op.op](function(){ resolveFilter(this, op.grp); }); }else if(isDefined(op, "subqry") && Array.isArray(op.subqry)){ qb = qb[op.op](op.col, function(){ resolveFilter(this, op.subqry); }); }else{ throw new Error("Unknown operation format: " + op); } //console.log(qry.toString()); }); function isDefined(obj, key){ return (typeof obj[key] !== 'undefined'); } }