var Operation = require('./operation'); var Value = require('./value'); /** * The equivalent of a SQL filter expression. It allows to automatically build * SQL filters based on lot parameters. */ module.exports = new Class({ Extends: Operation ,Tag: 'sql-filter' /** * Checks if any of filters childs are ready. */ ,isReady(params) { var exprs = this.exprs; for (var i = exprs.length; i--;) if (exprs[i].isReady(params)) return true; return false; } /** * Renders the filter as an SQL expression. If any of its childs isn't * ready is ommitted from the expression. If all of its childs aren't ready * renders the TRUE expression. */ ,render(params) { var newOp; var newExprs = []; this.exprs.forEach(function(expr) { if (expr.isReady(params)) newExprs.push(expr); }) if (newExprs.length > 0) newOp = new Operation({ type: this.type, exprs: newExprs }); else newOp = new Value({value: true}); return newOp.render(params); } });