0
1
Fork 0
hedera-web-mindshore/js/sql/value.js

113 lines
1.7 KiB
JavaScript

var Expr = require ('./expr');
/**
* The equivalent of a SQL value.
*/
module.exports = new Class
({
Extends: Expr
,Tag: 'sql-value'
,Properties:
{
/**
* The master param.
*/
param:
{
type: Vn.Param
,set: function (x)
{
this.link ({_param: x}, {'changed': this.onParamChange});
this.onParamChange ();
}
,get: function ()
{
return this._param;
}
},
/**
* The value.
*/
value:
{
type: String
,set: function (x)
{
if (Vn.Value.compare (x, this._value))
return;
if (x instanceof Date)
x = x.clone ();
this._value = x;
if (this._param && !this.paramLock)
{
this.paramLock = true;
this._param.value = x;
this.paramLock = false;
}
this.signalEmit ('changed');
}
,get: function ()
{
return this._value;
}
}
}
,_value: undefined
,_param: null
,regexp: new RegExp ('(\\\\)|\'', 'g')
,paramLock: false
,onParamChange: function ()
{
if (this.paramLock || !this._param)
return;
this.paramLock = true;
this.value = this._param.value;
this.paramLock = false;
}
,isReady: function ()
{
return this._value !== undefined;
}
,replaceFunc: function (token)
{
switch (token)
{
case '\\': return '\\\\';
case '\'': return '\\\'';
}
return token;
}
,render: function (batch)
{
var v = this._value;
switch (typeof v)
{
case 'number':
return v;
case 'boolean':
return (v) ? 'TRUE' : 'FALSE';
case 'string':
return "'" + v.replace (this.regexp, this.replaceFunc) + "'";
case 'object':
if (v instanceof Date)
return Vn.Date.strftime (v, '\'%Y-%m-%d\'');
default:
return 'NULL';
}
}
});