Spaces:
Paused
Paused
| ; | |
| const EventEmitter = require('events').EventEmitter; | |
| const Timers = require('timers'); | |
| class Command extends EventEmitter { | |
| constructor() { | |
| super(); | |
| this.next = null; | |
| } | |
| // slow. debug only | |
| stateName() { | |
| const state = this.next; | |
| for (const i in this) { | |
| if (this[i] === state && i !== 'next') { | |
| return i; | |
| } | |
| } | |
| return 'unknown name'; | |
| } | |
| execute(packet, connection) { | |
| if (!this.next) { | |
| this.next = this.start; | |
| connection._resetSequenceId(); | |
| } | |
| if (packet && packet.isError()) { | |
| const err = packet.asError(connection.clientEncoding); | |
| err.sql = this.sql || this.query; | |
| if (this.queryTimeout) { | |
| Timers.clearTimeout(this.queryTimeout); | |
| this.queryTimeout = null; | |
| } | |
| if (this.onResult) { | |
| this.onResult(err); | |
| this.emit('end'); | |
| } else { | |
| this.emit('error', err); | |
| this.emit('end'); | |
| } | |
| return true; | |
| } | |
| // TODO: don't return anything from execute, it's ugly and error-prone. Listen for 'end' event in connection | |
| this.next = this.next(packet, connection); | |
| if (this.next) { | |
| return false; | |
| } | |
| this.emit('end'); | |
| return true; | |
| } | |
| } | |
| module.exports = Command; | |