forked from verdnatura/hedera-web
73 lines
1.0 KiB
JavaScript
73 lines
1.0 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
|
||
|
}
|
||
|
,Operators:
|
||
|
[
|
||
|
'='
|
||
|
,'LIKE'
|
||
|
,'AND'
|
||
|
,'OR'
|
||
|
]
|
||
|
});
|
||
|
|
||
|
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});
|
||
|
}
|
||
|
|
||
|
,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;
|
||
|
}
|
||
|
});
|