hedera-web/js/sql/operation.js

80 lines
1.1 KiB
JavaScript

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