117 lines
1.7 KiB
JavaScript
117 lines
1.7 KiB
JavaScript
|
|
var Connection = require ('./connection');
|
|
|
|
module.exports = new Class
|
|
({
|
|
Extends: Vn.Object
|
|
,Tag: 'db-query'
|
|
,Properties:
|
|
{
|
|
/**
|
|
* The connection used to execute the statement.
|
|
**/
|
|
conn:
|
|
{
|
|
type: Connection
|
|
,set: function (x)
|
|
{
|
|
this._conn = x;
|
|
this.onChange ();
|
|
}
|
|
,get: function ()
|
|
{
|
|
return this._conn;
|
|
}
|
|
},
|
|
/**
|
|
* The model query.
|
|
**/
|
|
query:
|
|
{
|
|
type: String
|
|
,set: function (x)
|
|
{
|
|
this._stmt = new Sql.String ({query: x});
|
|
this.onChange ();
|
|
}
|
|
,get: function ()
|
|
{
|
|
return this._stmt.render (null);
|
|
}
|
|
},
|
|
/**
|
|
* The model select statement.
|
|
**/
|
|
stmt:
|
|
{
|
|
type: Sql.Stmt
|
|
,set: function (x)
|
|
{
|
|
this._stmt = x;
|
|
this.onChange ();
|
|
}
|
|
,get: function ()
|
|
{
|
|
return this._stmt;
|
|
}
|
|
},
|
|
/**
|
|
* The batch used to execute the statement.
|
|
**/
|
|
batch:
|
|
{
|
|
type: Sql.Batch
|
|
,set: function (x)
|
|
{
|
|
this.link ({_batch: x}, {'changed': this.onChange});
|
|
this.onChange ();
|
|
}
|
|
,get: function ()
|
|
{
|
|
return this._batch;
|
|
}
|
|
},
|
|
/**
|
|
* Wether to execute automatically de query que it's ready.
|
|
**/
|
|
autoLoad:
|
|
{
|
|
type: Boolean,
|
|
value: false
|
|
}
|
|
}
|
|
|
|
,initialize: function (props)
|
|
{
|
|
this.parent (props);
|
|
}
|
|
|
|
,loadXml: function (builder, node)
|
|
{
|
|
this.parent (builder, node);
|
|
|
|
var query = node.firstChild.nodeValue;
|
|
|
|
if (query)
|
|
this.query = query;
|
|
}
|
|
|
|
,execute: function ()
|
|
{
|
|
this._conn.execStmt (this._stmt,
|
|
this.onQueryDone.bind (this), this._batch);
|
|
}
|
|
|
|
,onQueryDone: function (resultSet)
|
|
{
|
|
this.signalEmit ('ready', resultSet);
|
|
}
|
|
|
|
,onChange: function ()
|
|
{
|
|
if (this.autoLoad && this._conn && this._stmt && this._batch)
|
|
this.execute ();
|
|
}
|
|
});
|
|
|