From b8c79d055762e927da147d08fb375cd11d303868 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Weslley=20Ara=C3=BAjo?= <46850407+wellwelwel@users.noreply.github.com> Date: Thu, 11 May 2023 10:44:29 -0300 Subject: [PATCH] fix: Missing types in "mysql" import (#1995) * fix: `execute` types in `Connection` * fix: `promise` options don't appears * fix: missing `execute` method in `Pool` * fix: missing `getConnection()` in `.promise()` * fix: patterning `execute` overloads in mysql import * fix: `promise` method types in `createConnection` * fix: `promise` method types in `createPool` * add: TypeScript build tests for mysql `createPool` and `createConnection` * add: TypeScript build tests for mysql/promise `createPool` and `createConnection` * add: description for further contributions in TypeScript build tests * fix: call methods in createConnection tsc-build --- index.d.ts | 3 +- promise.d.ts | 4 +- test/tsc-build/index.ts | 13 ++++ test/tsc-build/mysql/baseConnection.ts | 17 +++++ .../createConnection/callbacks/execute.ts | 31 ++++++++ .../mysql/createConnection/callbacks/query.ts | 31 ++++++++ .../mysql/createConnection/promise/execute.ts | 38 ++++++++++ .../mysql/createConnection/promise/query.ts | 38 ++++++++++ .../mysql/createPool/callbacks/execute.ts | 61 +++++++++++++++ .../mysql/createPool/callbacks/query.ts | 61 +++++++++++++++ .../mysql/createPool/promise/execute.ts | 75 +++++++++++++++++++ .../mysql/createPool/promise/query.ts | 75 +++++++++++++++++++ test/tsc-build/promise/baseConnection.ts | 17 +++++ .../promise/createConnection/execute.ts | 38 ++++++++++ .../promise/createConnection/query.ts | 38 ++++++++++ test/tsc-build/promise/createPool/execute.ts | 75 +++++++++++++++++++ test/tsc-build/promise/createPool/query.ts | 75 +++++++++++++++++++ test/tsc-build/tsconfig.json | 32 ++++---- typings/mysql/index.d.ts | 4 +- typings/mysql/lib/Connection.d.ts | 6 +- typings/mysql/lib/Pool.d.ts | 8 +- 21 files changed, 715 insertions(+), 25 deletions(-) create mode 100644 test/tsc-build/mysql/baseConnection.ts create mode 100644 test/tsc-build/mysql/createConnection/callbacks/execute.ts create mode 100644 test/tsc-build/mysql/createConnection/callbacks/query.ts create mode 100644 test/tsc-build/mysql/createConnection/promise/execute.ts create mode 100644 test/tsc-build/mysql/createConnection/promise/query.ts create mode 100644 test/tsc-build/mysql/createPool/callbacks/execute.ts create mode 100644 test/tsc-build/mysql/createPool/callbacks/query.ts create mode 100644 test/tsc-build/mysql/createPool/promise/execute.ts create mode 100644 test/tsc-build/mysql/createPool/promise/query.ts create mode 100644 test/tsc-build/promise/baseConnection.ts create mode 100644 test/tsc-build/promise/createConnection/execute.ts create mode 100644 test/tsc-build/promise/createConnection/query.ts create mode 100644 test/tsc-build/promise/createPool/execute.ts create mode 100644 test/tsc-build/promise/createPool/query.ts diff --git a/index.d.ts b/index.d.ts index 716e5d161b..f63883c112 100644 --- a/index.d.ts +++ b/index.d.ts @@ -78,6 +78,7 @@ export interface Connection extends mysql.Connection { writeEof(warnings?: number, statusFlags?: number): void; writeTextResult(rows?: Array, columns?: Array): void; writePacket(packet: any): void; + promise(promiseImpl?: PromiseConstructor): PromiseConnection; sequenceId: number; } @@ -157,7 +158,7 @@ export interface Pool extends mysql.Connection { on(event: 'enqueue', listener: () => any): this; unprepare(sql: string): mysql.PrepareStatementInfo; prepare(sql: string, callback?: (err: mysql.QueryError | null, statement: mysql.PrepareStatementInfo) => any): mysql.Prepare; - + promise(promiseImpl?: PromiseConstructor): PromisePoolConnection; config: mysql.PoolOptions; } diff --git a/promise.d.ts b/promise.d.ts index b5441aba61..5fad9bacdf 100644 --- a/promise.d.ts +++ b/promise.d.ts @@ -84,6 +84,7 @@ export interface Connection extends EventEmitter { export interface PoolConnection extends Connection { connection: Connection; + getConnection(): Promise; release(): void; } @@ -153,6 +154,3 @@ export interface PreparedStatementInfo { execute(parameters: any[]): Promise<[RowDataPacket[][] | RowDataPacket[] | OkPacket | OkPacket[] | ResultSetHeader, FieldPacket[]]>; } -export interface PromisePoolConnection extends Connection { - destroy(): any; -} diff --git a/test/tsc-build/index.ts b/test/tsc-build/index.ts index 1956ed7467..18681fe078 100644 --- a/test/tsc-build/index.ts +++ b/test/tsc-build/index.ts @@ -1,3 +1,16 @@ +/** + * This tests doesn't execute the scripts or connect in any database. + * It only compiles all typings in the project and ensures that the compilation will be successful. + * To test it, run: npm run test:tsc-build + * + * The purpose of this test is to prevent changes that break the typings in new PRs + * + * Contributions: + * + * For mysql build tests: './mysql/...' + * For mysql/promise build tests: './promise/...' + */ + import mysql from '../../index'; import mysqlp from '../../promise'; diff --git a/test/tsc-build/mysql/baseConnection.ts b/test/tsc-build/mysql/baseConnection.ts new file mode 100644 index 0000000000..ecb16e44be --- /dev/null +++ b/test/tsc-build/mysql/baseConnection.ts @@ -0,0 +1,17 @@ +import { mysql } from '../index'; + +export const access: mysql.ConnectionOptions = { + host: '', + user: '', + password: '', + database: '', +}; + +/** The SQL for the query */ +export const sql = 'SELECT * FROM `table`'; + +/** The SQL for the query with prepared statements */ +export const sqlPS = 'SELECT * FROM `table` WHERE `id` = ?'; + +/** The values for the query with prepared statements */ +export const values = [1]; diff --git a/test/tsc-build/mysql/createConnection/callbacks/execute.ts b/test/tsc-build/mysql/createConnection/callbacks/execute.ts new file mode 100644 index 0000000000..0e916943d7 --- /dev/null +++ b/test/tsc-build/mysql/createConnection/callbacks/execute.ts @@ -0,0 +1,31 @@ +import { mysql } from '../../../index'; +import { access, sql, sqlPS, values } from '../../baseConnection'; + +{ + const db = mysql.createConnection(access); + + /** Overload: execute(sql, () => {}}) */ + db.execute(sql, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: execute(sql, values, () => {}}) */ + db.execute(sqlPS, values, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: execute(QueryOptions, () => {}}) I */ + db.execute({ sql }, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: execute(QueryOptions, () => {}}) II */ + db.execute({ sql: sqlPS, values }, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: execute(QueryOptions, values, () => {}}) */ + db.execute({ sql: sqlPS }, values, (err, result, fields) => { + console.log(err, result, fields); + }); +} diff --git a/test/tsc-build/mysql/createConnection/callbacks/query.ts b/test/tsc-build/mysql/createConnection/callbacks/query.ts new file mode 100644 index 0000000000..4b41605420 --- /dev/null +++ b/test/tsc-build/mysql/createConnection/callbacks/query.ts @@ -0,0 +1,31 @@ +import { mysql } from '../../../index'; +import { access, sql, sqlPS, values } from '../../baseConnection'; + +{ + const db = mysql.createConnection(access); + + /** Overload: query(sql, () => {}}) */ + db.query(sql, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: query(sql, values, () => {}}) */ + db.query(sqlPS, values, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: query(QueryOptions, () => {}}) I */ + db.query({ sql }, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: query(QueryOptions, () => {}}) II */ + db.query({ sql: sqlPS, values }, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: query(QueryOptions, values, () => {}}) */ + db.query({ sql: sqlPS }, values, (err, result, fields) => { + console.log(err, result, fields); + }); +} diff --git a/test/tsc-build/mysql/createConnection/promise/execute.ts b/test/tsc-build/mysql/createConnection/promise/execute.ts new file mode 100644 index 0000000000..100e4ef4a6 --- /dev/null +++ b/test/tsc-build/mysql/createConnection/promise/execute.ts @@ -0,0 +1,38 @@ +import { mysql } from '../../../index'; +import { access, sql, sqlPS, values } from '../../baseConnection'; + +(async () => { + const db = mysql.createConnection(access).promise(); + + { + /** Overload: execute(sql) */ + const [results, fields] = await db.execute(sql); + console.log(results, fields); + } + + { + /** Overload: execute(sql, values) */ + const [results, fields] = await db.execute(sqlPS, values); + console.log(results, fields); + } + + { + /** Overload: execute(QueryOptions) I */ + const [results, fields] = await db.execute({ sql }); + console.log(results, fields); + } + + { + /** Overload: execute(QueryOptions) II */ + const [results, fields] = await db.execute({ sql: sqlPS, values }); + console.log(results, fields); + } + + { + /** Overload: execute(QueryOptions, values) */ + const [results, fields] = await db.execute({ sql: sqlPS }, values); + console.log(results, fields); + } + + await db.end(); +})(); diff --git a/test/tsc-build/mysql/createConnection/promise/query.ts b/test/tsc-build/mysql/createConnection/promise/query.ts new file mode 100644 index 0000000000..03ce0f6734 --- /dev/null +++ b/test/tsc-build/mysql/createConnection/promise/query.ts @@ -0,0 +1,38 @@ +import { mysql } from '../../../index'; +import { access, sql, sqlPS, values } from '../../baseConnection'; + +(async () => { + const db = mysql.createConnection(access).promise(); + + { + /** Overload: query(sql) */ + const [results, fields] = await db.query(sql); + console.log(results, fields); + } + + { + /** Overload: query(sql, values) */ + const [results, fields] = await db.query(sqlPS, values); + console.log(results, fields); + } + + { + /** Overload: query(QueryOptions) I */ + const [results, fields] = await db.query({ sql }); + console.log(results, fields); + } + + { + /** Overload: query(QueryOptions) II */ + const [results, fields] = await db.query({ sql: sqlPS, values }); + console.log(results, fields); + } + + { + /** Overload: query(QueryOptions, values) */ + const [results, fields] = await db.query({ sql: sqlPS }, values); + console.log(results, fields); + } + + await db.end(); +})(); diff --git a/test/tsc-build/mysql/createPool/callbacks/execute.ts b/test/tsc-build/mysql/createPool/callbacks/execute.ts new file mode 100644 index 0000000000..8be6bf606a --- /dev/null +++ b/test/tsc-build/mysql/createPool/callbacks/execute.ts @@ -0,0 +1,61 @@ +import { mysql } from '../../../index'; +import { access, sql, sqlPS, values } from '../../baseConnection'; + +{ + const db = mysql.createPool(access); + + /** Overload: execute(sql, () => {}}) */ + db.execute(sql, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: execute(sql, values, () => {}}) */ + db.execute(sqlPS, values, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: execute(QueryOptions, () => {}}) I */ + db.execute({ sql }, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: execute(QueryOptions, () => {}}) II */ + db.execute({ sql: sqlPS, values }, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: execute(QueryOptions, values, () => {}}) */ + db.execute({ sql: sqlPS }, values, (err, result, fields) => { + console.log(err, result, fields); + }); +} + +/** getConnection and query */ +{ + mysql.createPool(access).getConnection((err, connection) => { + /** Overload: execute(sql, () => {}}) */ + connection.execute(sql, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: execute(sql, values, () => {}}) */ + connection.execute(sqlPS, values, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: execute(QueryOptions, () => {}}) I */ + connection.execute({ sql }, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: execute(QueryOptions, () => {}}) II */ + connection.execute({ sql: sqlPS, values }, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: execute(QueryOptions, values, () => {}}) */ + connection.execute({ sql: sqlPS }, values, (err, result, fields) => { + console.log(err, result, fields); + }); + }); +} diff --git a/test/tsc-build/mysql/createPool/callbacks/query.ts b/test/tsc-build/mysql/createPool/callbacks/query.ts new file mode 100644 index 0000000000..6e6c34780c --- /dev/null +++ b/test/tsc-build/mysql/createPool/callbacks/query.ts @@ -0,0 +1,61 @@ +import { mysql } from '../../../index'; +import { access, sql, sqlPS, values } from '../../baseConnection'; + +{ + const db = mysql.createPool(access); + + /** Overload: query(sql, () => {}}) */ + db.query(sql, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: query(sql, values, () => {}}) */ + db.query(sqlPS, values, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: query(QueryOptions, () => {}}) I */ + db.query({ sql }, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: query(QueryOptions, () => {}}) II */ + db.query({ sql: sqlPS, values }, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: query(QueryOptions, values, () => {}}) */ + db.query({ sql: sqlPS }, values, (err, result, fields) => { + console.log(err, result, fields); + }); +} + +/** getConnection */ +{ + mysql.createPool(access).getConnection((err, connection) => { + /** Overload: query(sql, () => {}}) */ + connection.query(sql, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: query(sql, values, () => {}}) */ + connection.query(sqlPS, values, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: query(QueryOptions, () => {}}) I */ + connection.query({ sql }, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: query(QueryOptions, () => {}}) II */ + connection.query({ sql: sqlPS, values }, (err, result, fields) => { + console.log(err, result, fields); + }); + + /** Overload: query(QueryOptions, values, () => {}}) */ + connection.query({ sql: sqlPS }, values, (err, result, fields) => { + console.log(err, result, fields); + }); + }); +} diff --git a/test/tsc-build/mysql/createPool/promise/execute.ts b/test/tsc-build/mysql/createPool/promise/execute.ts new file mode 100644 index 0000000000..995185a9c1 --- /dev/null +++ b/test/tsc-build/mysql/createPool/promise/execute.ts @@ -0,0 +1,75 @@ +import { mysql } from '../../../index'; +import { access, sql, sqlPS, values } from '../../baseConnection'; + +(async () => { + const db = mysql.createPool(access).promise(); + + { + /** Overload: execute(sql) */ + const [results, fields] = await db.execute(sql); + console.log(results, fields); + } + + { + /** Overload: execute(sql, values) */ + const [results, fields] = await db.execute(sqlPS, values); + console.log(results, fields); + } + + { + /** Overload: execute(QueryOptions) I */ + const [results, fields] = await db.execute({ sql }); + console.log(results, fields); + } + + { + /** Overload: execute(QueryOptions) II */ + const [results, fields] = await db.execute({ sql: sqlPS, values }); + console.log(results, fields); + } + + { + /** Overload: execute(QueryOptions, values) */ + const [results, fields] = await db.execute({ sql: sqlPS }, values); + console.log(results, fields); + } + + await db.end(); +})(); + +/** getConnection */ +(async () => { + const db = await mysql.createPool(access).promise().getConnection(); + + { + /** Overload: execute(sql) */ + const [results, fields] = await db.execute(sql); + console.log(results, fields); + } + + { + /** Overload: execute(sql, values) */ + const [results, fields] = await db.execute(sqlPS, values); + console.log(results, fields); + } + + { + /** Overload: execute(QueryOptions) I */ + const [results, fields] = await db.execute({ sql }); + console.log(results, fields); + } + + { + /** Overload: execute(QueryOptions) II */ + const [results, fields] = await db.execute({ sql: sqlPS, values }); + console.log(results, fields); + } + + { + /** Overload: execute(QueryOptions, values) */ + const [results, fields] = await db.execute({ sql: sqlPS }, values); + console.log(results, fields); + } + + await db.end(); +})(); diff --git a/test/tsc-build/mysql/createPool/promise/query.ts b/test/tsc-build/mysql/createPool/promise/query.ts new file mode 100644 index 0000000000..38090fe0c6 --- /dev/null +++ b/test/tsc-build/mysql/createPool/promise/query.ts @@ -0,0 +1,75 @@ +import { mysql } from '../../../index'; +import { access, sql, sqlPS, values } from '../../baseConnection'; + +(async () => { + const db = mysql.createPool(access).promise(); + + { + /** Overload: query(sql) */ + const [results, fields] = await db.query(sql); + console.log(results, fields); + } + + { + /** Overload: query(sql, values) */ + const [results, fields] = await db.query(sqlPS, values); + console.log(results, fields); + } + + { + /** Overload: query(QueryOptions) I */ + const [results, fields] = await db.query({ sql }); + console.log(results, fields); + } + + { + /** Overload: query(QueryOptions) II */ + const [results, fields] = await db.query({ sql: sqlPS, values }); + console.log(results, fields); + } + + { + /** Overload: query(QueryOptions, values) */ + const [results, fields] = await db.query({ sql: sqlPS }, values); + console.log(results, fields); + } + + await db.end(); +})(); + +/** getConnection and query */ +(async () => { + const db = await mysql.createPool(access).promise().getConnection(); + + { + /** Overload: query(sql) */ + const [results, fields] = await db.query(sql); + console.log(results, fields); + } + + { + /** Overload: query(sql, values) */ + const [results, fields] = await db.query(sqlPS, values); + console.log(results, fields); + } + + { + /** Overload: query(QueryOptions) I */ + const [results, fields] = await db.query({ sql }); + console.log(results, fields); + } + + { + /** Overload: query(QueryOptions) II */ + const [results, fields] = await db.query({ sql: sqlPS, values }); + console.log(results, fields); + } + + { + /** Overload: query(QueryOptions, values) */ + const [results, fields] = await db.query({ sql: sqlPS }, values); + console.log(results, fields); + } + + await db.end(); +})(); diff --git a/test/tsc-build/promise/baseConnection.ts b/test/tsc-build/promise/baseConnection.ts new file mode 100644 index 0000000000..8723efdd20 --- /dev/null +++ b/test/tsc-build/promise/baseConnection.ts @@ -0,0 +1,17 @@ +import { mysqlp as mysql } from '../index'; + +export const access: mysql.ConnectionOptions = { + host: '', + user: '', + password: '', + database: '', +}; + +/** The SQL for the query */ +export const sql = 'SELECT * FROM `table`'; + +/** The SQL for the query with prepared statements */ +export const sqlPS = 'SELECT * FROM `table` WHERE `id` = ?'; + +/** The values for the query with prepared statements */ +export const values = [1]; diff --git a/test/tsc-build/promise/createConnection/execute.ts b/test/tsc-build/promise/createConnection/execute.ts new file mode 100644 index 0000000000..bf7ed8729a --- /dev/null +++ b/test/tsc-build/promise/createConnection/execute.ts @@ -0,0 +1,38 @@ +import { mysqlp as mysql } from '../../index'; +import { access, sql, sqlPS, values } from '../baseConnection'; + +(async () => { + const db = await mysql.createConnection(access); + + { + /** Overload: execute(sql) */ + const [results, fields] = await db.execute(sql); + console.log(results, fields); + } + + { + /** Overload: execute(sql, values) */ + const [results, fields] = await db.execute(sqlPS, values); + console.log(results, fields); + } + + { + /** Overload: execute(QueryOptions) I */ + const [results, fields] = await db.execute({ sql }); + console.log(results, fields); + } + + { + /** Overload: execute(QueryOptions) II */ + const [results, fields] = await db.execute({ sql: sqlPS, values }); + console.log(results, fields); + } + + { + /** Overload: execute(QueryOptions, values) */ + const [results, fields] = await db.execute({ sql: sqlPS }, values); + console.log(results, fields); + } + + await db.end(); +})(); diff --git a/test/tsc-build/promise/createConnection/query.ts b/test/tsc-build/promise/createConnection/query.ts new file mode 100644 index 0000000000..79a14ca046 --- /dev/null +++ b/test/tsc-build/promise/createConnection/query.ts @@ -0,0 +1,38 @@ +import { mysqlp as mysql } from '../../index'; +import { access, sql, sqlPS, values } from '../baseConnection'; + +(async () => { + const db = await mysql.createConnection(access); + + { + /** Overload: query(sql) */ + const [results, fields] = await db.query(sql); + console.log(results, fields); + } + + { + /** Overload: query(sql, values) */ + const [results, fields] = await db.query(sqlPS, values); + console.log(results, fields); + } + + { + /** Overload: query(QueryOptions) I */ + const [results, fields] = await db.query({ sql }); + console.log(results, fields); + } + + { + /** Overload: query(QueryOptions) II */ + const [results, fields] = await db.query({ sql: sqlPS, values }); + console.log(results, fields); + } + + { + /** Overload: query(QueryOptions, values) */ + const [results, fields] = await db.query({ sql: sqlPS }, values); + console.log(results, fields); + } + + await db.end(); +})(); diff --git a/test/tsc-build/promise/createPool/execute.ts b/test/tsc-build/promise/createPool/execute.ts new file mode 100644 index 0000000000..ed3fc2806a --- /dev/null +++ b/test/tsc-build/promise/createPool/execute.ts @@ -0,0 +1,75 @@ +import { mysqlp as mysql } from '../../index'; +import { access, sql, sqlPS, values } from '../baseConnection'; + +(async () => { + const db = mysql.createPool(access); + + { + /** Overload: execute(sql) */ + const [results, fields] = await db.execute(sql); + console.log(results, fields); + } + + { + /** Overload: execute(sql, values) */ + const [results, fields] = await db.execute(sqlPS, values); + console.log(results, fields); + } + + { + /** Overload: execute(QueryOptions) I */ + const [results, fields] = await db.execute({ sql }); + console.log(results, fields); + } + + { + /** Overload: execute(QueryOptions) II */ + const [results, fields] = await db.execute({ sql: sqlPS, values }); + console.log(results, fields); + } + + { + /** Overload: execute(QueryOptions, values) */ + const [results, fields] = await db.execute({ sql: sqlPS }, values); + console.log(results, fields); + } + + await db.end(); +})(); + +/** getConnection */ +(async () => { + const db = await mysql.createPool(access).getConnection(); + + { + /** Overload: execute(sql) */ + const [results, fields] = await db.execute(sql); + console.log(results, fields); + } + + { + /** Overload: execute(sql, values) */ + const [results, fields] = await db.execute(sqlPS, values); + console.log(results, fields); + } + + { + /** Overload: execute(QueryOptions) I */ + const [results, fields] = await db.execute({ sql }); + console.log(results, fields); + } + + { + /** Overload: execute(QueryOptions) II */ + const [results, fields] = await db.execute({ sql: sqlPS, values }); + console.log(results, fields); + } + + { + /** Overload: execute(QueryOptions, values) */ + const [results, fields] = await db.execute({ sql: sqlPS }, values); + console.log(results, fields); + } + + await db.end(); +})(); diff --git a/test/tsc-build/promise/createPool/query.ts b/test/tsc-build/promise/createPool/query.ts new file mode 100644 index 0000000000..b77c0d6027 --- /dev/null +++ b/test/tsc-build/promise/createPool/query.ts @@ -0,0 +1,75 @@ +import { mysqlp as mysql } from '../../index'; +import { access, sql, sqlPS, values } from '../baseConnection'; + +(async () => { + const db = mysql.createPool(access); + + { + /** Overload: query(sql) */ + const [results, fields] = await db.query(sql); + console.log(results, fields); + } + + { + /** Overload: query(sql, values) */ + const [results, fields] = await db.query(sqlPS, values); + console.log(results, fields); + } + + { + /** Overload: query(QueryOptions) I */ + const [results, fields] = await db.query({ sql }); + console.log(results, fields); + } + + { + /** Overload: query(QueryOptions) II */ + const [results, fields] = await db.query({ sql: sqlPS, values }); + console.log(results, fields); + } + + { + /** Overload: query(QueryOptions, values) */ + const [results, fields] = await db.query({ sql: sqlPS }, values); + console.log(results, fields); + } + + await db.end(); +})(); + +/** getConnection and query */ +(async () => { + const db = await mysql.createPool(access).getConnection(); + + { + /** Overload: query(sql) */ + const [results, fields] = await db.query(sql); + console.log(results, fields); + } + + { + /** Overload: query(sql, values) */ + const [results, fields] = await db.query(sqlPS, values); + console.log(results, fields); + } + + { + /** Overload: query(QueryOptions) I */ + const [results, fields] = await db.query({ sql }); + console.log(results, fields); + } + + { + /** Overload: query(QueryOptions) II */ + const [results, fields] = await db.query({ sql: sqlPS, values }); + console.log(results, fields); + } + + { + /** Overload: query(QueryOptions, values) */ + const [results, fields] = await db.query({ sql: sqlPS }, values); + console.log(results, fields); + } + + await db.end(); +})(); diff --git a/test/tsc-build/tsconfig.json b/test/tsc-build/tsconfig.json index 6f7c8c0b7c..dd47203cac 100644 --- a/test/tsc-build/tsconfig.json +++ b/test/tsc-build/tsconfig.json @@ -1,18 +1,18 @@ { - "include": ["index.ts"], - "compilerOptions": { - "target": "ES2016", - "module": "CommonJS", - "moduleResolution": "Node", - "isolatedModules": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "alwaysStrict": true, - "noImplicitAny": true, - "strictFunctionTypes": false, - "skipLibCheck": false, - "noEmitOnError": true, - "noEmit": true - } + "include": ["index.ts", "mysql", "promise"], + "compilerOptions": { + "target": "ES2016", + "module": "CommonJS", + "moduleResolution": "Node", + "isolatedModules": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "alwaysStrict": true, + "noImplicitAny": true, + "strictFunctionTypes": false, + "skipLibCheck": false, + "noEmitOnError": true, + "noEmit": true + } } diff --git a/typings/mysql/index.d.ts b/typings/mysql/index.d.ts index c25edb89f9..75761e871e 100644 --- a/typings/mysql/index.d.ts +++ b/typings/mysql/index.d.ts @@ -12,7 +12,7 @@ import BasePrepare = require('./lib/protocol/sequences/Prepare'); import {QueryOptions, StreamOptions, QueryError} from './lib/protocol/sequences/Query'; import {PrepareStatementInfo} from './lib/protocol/sequences/Prepare'; import Server = require('./lib/Server'); -import { Pool as PromisePool } from '../../promise'; +import { Pool as PromisePool, Connection as PromiseConnection } from '../../promise'; export function createConnection(connectionUri: string): Connection; export function createConnection(config: BaseConnection.ConnectionOptions): Connection; @@ -41,7 +41,7 @@ export * from './lib/protocol/packets/index'; // Expose class interfaces export interface Connection extends BaseConnection { - promise(promiseImpl?: PromiseConstructor): PromisePool; + promise(promiseImpl?: PromiseConstructor): PromiseConnection; } export interface PoolConnection extends BasePoolConnection {} export interface Pool extends BasePool {} diff --git a/typings/mysql/lib/Connection.d.ts b/typings/mysql/lib/Connection.d.ts index 41c37183f0..4a82f31d31 100644 --- a/typings/mysql/lib/Connection.d.ts +++ b/typings/mysql/lib/Connection.d.ts @@ -289,9 +289,11 @@ declare class Connection extends EventEmitter { rollback(callback: (err: Query.QueryError | null) => void): void; - execute(sql: string, callback?: (err: any, rows: Array, fields: Array) => any): any; + execute(sql: string, callback?: (err: Query.QueryError | null, result: T, fields: FieldPacket[]) => any): Query; + execute(sql: string, values: any | any[] | { [param: string]: any }, callback?: (err: Query.QueryError | null, result: T, fields: FieldPacket[]) => any): Query; + execute(options: Query.QueryOptions, callback?: (err: Query.QueryError | null, result: T, fields?: FieldPacket[]) => any): Query; + execute(options: Query.QueryOptions, values: any | any[] | { [param: string]: any }, callback?: (err: Query.QueryError | null, result: T, fields: FieldPacket[]) => any): Query; - execute(sql: string, values: any | any[] | { [param: string]: any }, callback?: (err: any, rows: Array, fields: Array) => any): any; unprepare(sql: string): any; diff --git a/typings/mysql/lib/Pool.d.ts b/typings/mysql/lib/Pool.d.ts index 4d7ac68bb8..1bace502db 100644 --- a/typings/mysql/lib/Pool.d.ts +++ b/typings/mysql/lib/Pool.d.ts @@ -4,6 +4,7 @@ import {OkPacket, RowDataPacket, FieldPacket, ResultSetHeader} from './protocol/ import Connection = require('./Connection'); import PoolConnection = require('./PoolConnection'); import {EventEmitter} from 'events'; +import {PoolConnection as PromisePoolConnection} from '../../../promise'; declare namespace Pool { @@ -66,12 +67,17 @@ declare class Pool extends EventEmitter { query(options: Query.QueryOptions, callback?: (err: Query.QueryError | null, result: T, fields?: FieldPacket[]) => any): Query; query(options: Query.QueryOptions, values: any | any[] | { [param: string]: any }, callback?: (err: Query.QueryError | null, result: T, fields: FieldPacket[]) => any): Query; + execute(sql: string, callback?: (err: Query.QueryError | null, result: T, fields: FieldPacket[]) => any): Query; + execute(sql: string, values: any | any[] | { [param: string]: any }, callback?: (err: Query.QueryError | null, result: T, fields: FieldPacket[]) => any): Query; + execute(options: Query.QueryOptions, callback?: (err: Query.QueryError | null, result: T, fields?: FieldPacket[]) => any): Query; + execute(options: Query.QueryOptions, values: any | any[] | { [param: string]: any }, callback?: (err: Query.QueryError | null, result: T, fields: FieldPacket[]) => any): Query; + end(callback?: (err: NodeJS.ErrnoException | null, ...args: any[]) => any): void; on(event: string, listener: Function): this; on(event: 'connection', listener: (connection: PoolConnection) => any): this; - promise(promiseImpl?: any): any; + promise(promiseImpl?: PromiseConstructor): PromisePoolConnection; } export = Pool;