hedera-web/js/db/query.js

95 lines
1.5 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(x) {
this._conn = x;
this.onChange();
}
,get() {
return this._conn;
}
},
/**
* The model query.
*/
query: {
type: String
,set(x) {
this._stmt = new Sql.String({query: x});
this.onChange();
}
,get() {
return this._stmt.render(null);
}
},
/**
* The model select statement.
*/
stmt: {
type: Sql.Stmt
,set(x) {
this._stmt = x;
this.onChange();
}
,get() {
return this._stmt;
}
},
/**
* The lot used to execute the statement.
*/
lot: {
type: Vn.LotIface
,set(x) {
this.link({_lot: x}, {'change': this.onChange});
this.onChange();
}
,get() {
return this._lot;
}
},
/**
* Wether to execute automatically de query que it's ready.
*/
autoLoad: {
type: Boolean,
value: false
}
}
,appendChild(child) {
if (child.nodeType === Node.TEXT_NODE)
this.query = child.textContent;
}
,loadXml(builder, node) {
Vn.Object.prototype.loadXml.call(this, builder, node);
var query = node.firstChild.nodeValue;
if (query)
this.query = query;
}
,async execute() {
const resultSet = await this._conn.execStmt(this._stmt, this._lot);
this.emit('ready', resultSet);
return resultSet;
}
,onChange() {
if (this.autoLoad && this._conn && this._stmt && this._lot)
this.execute();
}
});