orange-orm
Version:
Object Relational Mapper
63 lines (52 loc) • 2.24 kB
JavaScript
const negotiateRawSqlFilter = require('../column/negotiateRawSqlFilter');
let subFilter = require('./subFilter');
let isShallow = true;
function newAny(newRelatedTable, relations, depth) {
function any(context, fn) {
let relatedTable = newRelatedTable(relations, isShallow, depth + 1);
let arg = typeof fn === 'function' ? fn(relatedTable) : fn;
let filter = negotiateRawSqlFilter(context, arg);
let sub = subFilter(context, relations, filter, depth);
return sub;
}
return any;
}
module.exports = newAny;
//
// let newRelatedTable = _newRelatedTable;
// let negotiateRawSqlFilter = require('../column/negotiateRawSqlFilter');
// let newSelect = require('./selectSql');
// let newJoin = require('./joinSql');
// let newWhere = require('./whereSql');
// let subFilter = require('./subFilter');
// let isShallow = true;
// function newAny(relations, depth) {
// function any(fn) {
// let relationCount = relations.length;
// let alias = 'x' + (depth);
// // let alias = 'x' + relationCount;
// let table = relations[relationCount - 1].childTable;
// let exists = newSelect(table, alias).prepend('EXISTS (');
// let join = newJoin(relations, depth);
// let relatedTable = newRelatedTable(relations.slice(-1), isShallow, depth+1);
// let arg = typeof fn === 'function' ? fn(relatedTable) : fn; //we need inner joins from here
// let filter = negotiateRawSqlFilter(arg);
// let where = newWhere(relations[0],filter, depth);
// return exists.append(join).append(where).append(')');
// // let innerJoin = newJoinSql(relations);
// // let relatedTable = newRelatedTable(relations.slice(-1), isShallow);
// // //relations is missing anything below any(..)
// // let arg = typeof fn === 'function' ? fn(relatedTable) : fn; //we need inner joins from here
// // let filter = negotiateRawSqlFilter(arg);
// // let sqlFilter = filter.sql();
// // //_3.id is not null
// // return subFilter(relations.slice(-1), filter);
// }
// return any;
// // db.order.lines.any(x => x.order.deliveryAddress.id.notEqual(null));
// }
// function _newRelatedTable() {
// newRelatedTable = require('../newRelatedTable');
// return newRelatedTable.apply(null, arguments);
// }
// module.exports = newAny;