var Expr = require ('./expr'); /** * The equivalent of a SQL operation between exprs. * * @param {Array#Sql.Expr} expr Array with the exprs * @param {Sql..Operation.Type} type The type of the operation **/ var Operation = new Class (); module.exports = Operation; var Type = { EQUAL : 0 ,LIKE : 1 ,AND : 2 ,OR : 3 ,REGEXP : 4 }; var Operators = [ '=' ,'LIKE' ,'AND' ,'OR' ,'REGEXP' ]; Operation.extend ({ Type: Type ,Operators: Operators }); Operation.implement ({ Extends: Expr ,Tag: 'sql-operation' ,Properties: { type: { enumType: Type ,value: -1 } } ,initialize: function (props) { this.parent (props); this.link ({exprs: new Sql.List ()}, {'changed': this.onListChange}); } ,appendChild: function (child) { this.exprs.add (child); } ,onListChange: function () { this.signalEmit ('changed'); } ,isReady: function () { return this.exprs.isReady (); } ,render: function (batch) { var sql = '('; var operator = ' '+ Operators[this.type] +' '; var e = this.exprs.getArray (); for (var i = 0; i < e.length; i++) { if (i > 0) sql += operator; sql += e[i].render (batch); } sql += ')'; return sql; } });