hedera-web/js/sql/operation.js

79 lines
1.2 KiB
JavaScript

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;
}
});