/** * 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 **/ Sql.Operation = new Class ().extend ({ Type: { EQUAL : 0 ,LIKE : 1 ,AND : 2 ,OR : 3 ,REGEXP : 4 } ,Operators: [ '=' ,'LIKE' ,'AND' ,'OR' ,'REGEXP' ] }); Sql.Operation.implement ({ Extends: Sql.Expr ,Tag: 'sql-operation' ,Properties: { type: { enumType: Sql.Operation.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 = ' '+ Sql.Operation.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; } });