diff --git a/example.js b/example.js index f82d1fb..de692e0 100644 --- a/example.js +++ b/example.js @@ -105,6 +105,16 @@ connection.query( } ); +connection.query( + { + sql: 'SELECT * FROM _Language where LanguageId > ?', + values: [2], + }, + (err, results) => { + console.dir({ query: results }); + } +); + connection.queryRow( 'SELECT * FROM _Language where LanguageId = ?', [3], @@ -113,6 +123,17 @@ connection.queryRow( } ); +connection.queryRow( + { + sql: 'SELECT * FROM _Language where LanguageId = ?', + values: [3], + timeout: 2000, + }, + (err, row) => { + console.dir({ queryRow: row }); + } +); + connection.queryValue( 'SELECT LanguageName FROM _Language where LanguageId = ?', [8], @@ -121,6 +142,16 @@ connection.queryValue( } ); +connection.queryValue( + { + sql: 'SELECT LanguageName FROM _Language where LanguageId = ?', + values: [8], + }, + (err, name) => { + console.dir({ queryValue: name }); + } +); + connection.queryHash( 'SELECT LanguageSign, LanguageId, LanguageName, Caption, LanguageISO ' + 'FROM _Language', @@ -130,10 +161,32 @@ connection.queryHash( } ); +connection.queryHash( + { + sql: + 'SELECT LanguageSign, LanguageId, LanguageName, Caption, LanguageISO ' + + 'FROM _Language', + values: [], + }, + (err, arr) => { + console.dir({ queryHash: arr }); + } +); + connection.queryCol('SELECT LanguageSign FROM _Language', [], (err, arr) => { console.dir({ queryCol: arr }); }); +connection.queryCol( + { + sql: 'SELECT LanguageSign FROM _Language', + values: [], + }, + (err, arr) => { + console.dir({ queryCol: arr }); + } +); + connection.queryKeyValue( 'SELECT LanguageISO, LanguageName FROM _Language', [], @@ -142,6 +195,17 @@ connection.queryKeyValue( } ); +connection.queryKeyValue( + { + sql: 'SELECT LanguageISO, LanguageName FROM _Language', + values: [], + timeout: 1000, + }, + (err, keyValue) => { + console.dir({ queryKeyValue: keyValue }); + } +); + connection.count('_Language', { LanguageId: '>3' }, (err, count) => { console.dir({ count }); }); diff --git a/package-lock.json b/package-lock.json index feb28eb..129fb7c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -176,7 +176,8 @@ "bignumber.js": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", - "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==" + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==", + "dev": true }, "brace-expansion": { "version": "1.1.11", @@ -277,9 +278,10 @@ "dev": true }, "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true }, "cross-spawn": { "version": "7.0.3", @@ -853,7 +855,8 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "is-arrayish": { "version": "0.2.1", @@ -958,7 +961,8 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "isexe": { "version": "2.0.0", @@ -1093,6 +1097,7 @@ "version": "2.18.1", "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz", "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==", + "dev": true, "requires": { "bignumber.js": "9.0.0", "readable-stream": "2.3.7", @@ -1308,7 +1313,8 @@ "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true }, "progress": { "version": "2.0.3", @@ -1347,6 +1353,7 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -1397,7 +1404,8 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "semver": { "version": "7.3.5", @@ -1501,7 +1509,8 @@ "sqlstring": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", - "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" + "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=", + "dev": true }, "string-width": { "version": "4.2.2", @@ -1538,6 +1547,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -1662,7 +1672,8 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true }, "v8-compile-cache": { "version": "2.3.0", diff --git a/package.json b/package.json index f1b1fef..a7ea031 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "engines": { "node": ">= 6.0.0" }, - "dependencies": { + "peerDependencies": { "mysql": "^2.18.1" }, "devDependencies": { @@ -34,6 +34,7 @@ "eslint-config-prettier": "^8.3.0", "eslint-plugin-import": "^2.23.4", "eslint-plugin-prettier": "^3.4.0", - "prettier": "^2.3.2" + "prettier": "^2.3.2", + "mysql": "^2.18.1" } } diff --git a/utilities.js b/utilities.js index 9a836b1..4f1a594 100644 --- a/utilities.js +++ b/utilities.js @@ -1,4 +1,7 @@ 'use strict'; +/* eslint-disable no-use-before-define */ + +const { createQuery } = require('mysql'); const identifierRegexp = /^[0-9,a-z,A-Z_.]*$/; @@ -51,20 +54,24 @@ const upgrade = connection => { values, callback ) { + const queryOptions = createQuery(sql, values, callback); + const userCallback = queryOptions._callback; + const startTime = new Date().getTime(); - if (typeof values === 'function') { - callback = values; - values = []; - } - const query = this.inherited(sql, values, (err, res, fields) => { + + const callbackWrapper = (err, res, fields) => { const endTime = new Date().getTime(); const executionTime = endTime - startTime; connection.emit('query', err, res, fields, query); if (connection.slowTime && executionTime >= connection.slowTime) { connection.emit('slow', err, res, fields, query, executionTime); } - if (callback) callback(err, res, fields); - }); + if (userCallback) userCallback(err, res, fields); + }; + + queryOptions._callback = callbackWrapper; + + const query = this.inherited(queryOptions); return query; }); @@ -120,40 +127,45 @@ const upgrade = connection => { // Returns single row as associative array of fields // connection.queryRow = function (sql, values, callback) { - if (typeof values === 'function') { - callback = values; - values = []; - } - return this.query(sql, values, (err, res, fields) => { - if (err) return callback(err); + const queryOptions = createQuery(sql, values, callback); + const userCallback = queryOptions._callback; + + const callbackWrapper = (err, res, fields) => { + if (err) return userCallback(err); res = res[0] ? res[0] : false; - callback(err, res, fields); - }); + userCallback(err, res, fields); + }; + + queryOptions._callback = callbackWrapper; + + return this.query(queryOptions); }; // Returns single value (scalar) // connection.queryValue = function (sql, values, callback) { - if (typeof values === 'function') { - callback = values; - values = []; - } - return this.queryRow(sql, values, (err, res, fields) => { - if (err) return callback(err); + const queryOptions = createQuery(sql, values, callback); + const userCallback = queryOptions._callback; + + const callbackWrapper = (err, res, fields) => { + if (err) return userCallback(err); const value = res[Object.keys(res)[0]]; - callback(err, value, fields); - }); + userCallback(err, value, fields); + }; + + queryOptions._callback = callbackWrapper; + + return this.queryRow(queryOptions); }; // Query returning array of column field values // connection.queryCol = function (sql, values, callback) { - if (typeof values === 'function') { - callback = values; - values = []; - } - return this.query(sql, values, (err, res, fields) => { - if (err) return callback(err); + const queryOptions = createQuery(sql, values, callback); + const userCallback = queryOptions._callback; + + const callbackWrapper = (err, res, fields) => { + if (err) return userCallback(err); const result = []; let i, row, keys; for (i in res) { @@ -161,19 +173,22 @@ const upgrade = connection => { keys = Object.keys(row); result.push(row[keys[0]]); } - callback(err, result, fields); - }); + userCallback(err, result, fields); + }; + + queryOptions._callback = callbackWrapper; + + return this.query(queryOptions); }; // Query returning hash (associative array), first field will be array key // connection.queryHash = function (sql, values, callback) { - if (typeof values === 'function') { - callback = values; - values = []; - } - return this.query(sql, values, (err, res, fields) => { - if (err) return callback(err); + const queryOptions = createQuery(sql, values, callback); + const userCallback = queryOptions._callback; + + const callbackWrapper = (err, res, fields) => { + if (err) return userCallback(err); const result = {}; let i, row, keys; for (i in res) { @@ -181,20 +196,23 @@ const upgrade = connection => { keys = Object.keys(row); result[row[keys[0]]] = row; } - callback(err, result, fields); - }); + userCallback(err, result, fields); + }; + + queryOptions._callback = callbackWrapper; + + return this.query(queryOptions); }; // Query returning key-value array, // first field of query will be key and second will be value // connection.queryKeyValue = function (sql, values, callback) { - if (typeof values === 'function') { - callback = values; - values = []; - } - return this.query(sql, values, (err, res, fields) => { - if (err) return callback(err); + const queryOptions = createQuery(sql, values, callback); + const userCallback = queryOptions._callback; + + const callbackWrapper = (err, res, fields) => { + if (err) return userCallback(err); const result = {}; let i, row, keys; for (i in res) { @@ -202,8 +220,12 @@ const upgrade = connection => { keys = Object.keys(row); result[row[keys[0]]] = row[keys[1]]; } - callback(err, result, fields); - }); + userCallback(err, result, fields); + }; + + queryOptions._callback = callbackWrapper; + + return this.query(queryOptions); }; // SELECT SQL statement generator