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 lot used to execute the statement. */ lot: { type: Vn.LotIface ,set: function(x) { this.link({_lot: x}, {'change': this.onChange}); this.onChange(); } ,get: function() { return this._lot; } }, /** * Wether to execute automatically de query que it's ready. */ autoLoad: { type: Boolean, value: false } } ,appendChild: function(child) { if (child.nodeType === Node.TEXT_NODE) this.query = child.textContent; } ,loadXml: function(builder, node) { Vn.Object.prototype.loadXml.call(this, builder, node); var query = node.firstChild.nodeValue; if (query) this.query = query; } ,execute: function() { this._conn.execStmt(this._stmt, this.onQueryDone.bind(this), this._lot); } ,onQueryDone: function(resultSet) { this.emit('ready', resultSet); } ,onChange: function() { if (this.autoLoad && this._conn && this._stmt && this._lot) this.execute(); } });