aboutsummaryrefslogtreecommitdiff
path: root/node_modules/mysql2/lib/commands/command.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/mysql2/lib/commands/command.js')
-rw-r--r--node_modules/mysql2/lib/commands/command.js55
1 files changed, 55 insertions, 0 deletions
diff --git a/node_modules/mysql2/lib/commands/command.js b/node_modules/mysql2/lib/commands/command.js
new file mode 100644
index 0000000..659086f
--- /dev/null
+++ b/node_modules/mysql2/lib/commands/command.js
@@ -0,0 +1,55 @@
+'use strict';
+
+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;