diff --git a/types/oracledb/index.d.ts b/types/oracledb/index.d.ts index a3c6b561f906ed..c2fa4cb95a70e9 100644 --- a/types/oracledb/index.d.ts +++ b/types/oracledb/index.d.ts @@ -1305,7 +1305,7 @@ declare namespace OracleDB { beginSessionlessTransaction( opts: SessionlessTransactionOpts, ): Promise; - beginSessionlessTransaction(opts: SessionlessTransactionOpts, callback: (error: DBError) => void): void; + beginSessionlessTransaction(opts: SessionlessTransactionOpts, callback: (error: DBError | null) => void): void; /** * Stops the currently running operation on the connection. * @@ -1320,7 +1320,7 @@ declare namespace OracleDB { * @see https://node-oracledb.readthedocs.io/en/latest/user_guide/initialization.html#tnsadmin */ break(): Promise; - break(callback: (error: DBError) => void): void; + break(callback: (error: DBError | null) => void): void; /** * Changes the password of the specified user. @@ -1339,7 +1339,7 @@ declare namespace OracleDB { user: string, oldPassword: string, newPassword: string, - callback: (error: DBError) => void, + callback: (error: DBError | null) => void, ): void; /** @@ -1361,14 +1361,14 @@ declare namespace OracleDB { */ close(options: CloseConnectionOptions): Promise; close(): Promise; - close(options: CloseConnectionOptions, callback: (error: DBError) => void): void; - close(callback: (error: DBError) => void): void; + close(options: CloseConnectionOptions, callback: (error: DBError | null) => void): void; + close(callback: (error: DBError | null) => void): void; /** * This call commits the current transaction in progress on the connection. */ commit(): Promise; - commit(callback: (error: DBError) => void): void; + commit(callback: (error: DBError | null) => void): void; /** * Creates a Lob as an Oracle temporary LOB. The LOB is initially empty. Data can be streamed to the LOB, @@ -1387,7 +1387,7 @@ declare namespace OracleDB { * @see https://node-oracledb.readthedocs.io/en/latest/user_guide/bind.html#lobbinds */ createLob(type: DbType): Promise; - createLob(type: DbType, callback: (error: DBError, lob: Lob) => void): void; + createLob(type: DbType, callback: ResultCallback): void; /** * This synchronous method decodes an OSON Buffer and returns a Javascript value. This method is useful for fetching BLOB columns that have the check constraint IS JSON FORMAT OSON enabled. * The parameters of the connection.decodeOSON() are: buf; Buffer; The OSON buffer that is to be decoded. @@ -1424,7 +1424,7 @@ declare namespace OracleDB { sql: string, bindParams: BindParameters, options: ExecuteOptions, - callback: (error: DBError, result: Result) => void, + callback: ResultCallback>, ): void; /** @@ -1442,7 +1442,7 @@ declare namespace OracleDB { execute( sql: string, bindParams: BindParameters, - callback: (error: DBError, result: Result) => void, + callback: ResultCallback>, ): void; /** @@ -1454,7 +1454,7 @@ declare namespace OracleDB { * @see https://node-oracledb.readthedocs.io/en/latest/api_manual/connection.html#connection.queryStream for an alternative */ execute(sql: string): Promise>; - execute(sql: string, callback: (error: DBError, result: Result) => void): void; + execute(sql: string, callback: ResultCallback>): void; /** * This call executes a single SQL or PL/SQL statement. * @@ -1468,12 +1468,12 @@ declare namespace OracleDB { * @see https://github.com/oracle/node-oracledb/issues/1629 */ execute(sql: object): Promise>; - execute(sql: object, callback: (error: DBError, result: Result) => void): void; + execute(sql: object, callback: ResultCallback>): void; execute(sql: object, options: ExecuteOptions): Promise>; execute( sql: object, options: ExecuteOptions, - callback: (error: DBError, result: Result) => void, + callback: ResultCallback>, ): void; /** * This method allows sets of data values to be bound to one DML or PL/SQL statement for execution. @@ -1519,14 +1519,14 @@ declare namespace OracleDB { sql: string, binds: BindParameters[], options: ExecuteManyOptions, - callback: (error: DBError, result: Results) => void, + callback: ResultCallback>, ): void; executeMany(sql: string, binds: BindParameters[]): Promise>; executeMany( sql: string, binds: BindParameters[], - callback: (error: DBError, result: Results) => void, + callback: ResultCallback>, ): void; /** @@ -1550,11 +1550,15 @@ declare namespace OracleDB { sql: string, iterations: number, options: ExecuteManyOptions, - callback: (error: DBError, result: Results) => void, + callback: ResultCallback>, ): void; executeMany(sql: string, iterations: number): Promise>; - executeMany(sql: string, iterations: number, callback: (error: DBError, result: Results) => void): void; + executeMany( + sql: string, + iterations: number, + callback: ResultCallback>, + ): void; /** * Returns a DbObject prototype object representing the named Oracle Database object or collection. @@ -1570,14 +1574,17 @@ declare namespace OracleDB { * @since 4.0 */ getDbObjectClass(className: string): Promise>; - getDbObjectClass(className: string, callback: (error: DBError, dbObject: DBObjectClass) => void): void; + getDbObjectClass( + className: string, + callback: ResultCallback>, + ): void; getQueue(name: string, options?: GetAdvancedQueueOptions): Promise>; - getQueue(name: string, callback: (error: DBError, queue: AdvancedQueue) => void): void; + getQueue(name: string, callback: ResultCallback>): void; getQueue( name: string, options: GetAdvancedQueueOptions, - callback: (error: DBError, queue: AdvancedQueue) => void, + callback: ResultCallback>, ): void; /** @@ -1604,7 +1611,7 @@ declare namespace OracleDB { * @since 2.2 */ getStatementInfo(sql: string): Promise; - getStatementInfo(sql: string, callback: (error: DBError, info: StatementInfo) => void): void; + getStatementInfo(sql: string, callback: ResultCallback): void; /** * This synchronous function returns a boolean indicating the health status of a connection. * Connections may become unusable in several cases, such as if the network socket is broken, if an Oracle error indicates the connection is unusable or after receiving a planned down notification from the database. @@ -1628,7 +1635,7 @@ declare namespace OracleDB { * @since 2.2 */ ping(): Promise; - ping(callback: (error: DBError) => void): void; + ping(callback: (error: DBError | null) => void): void; /** * This function provides query streaming support. The parameters are the same as execute() except @@ -1671,8 +1678,8 @@ declare namespace OracleDB { */ release(options: CloseConnectionOptions): Promise; release(): Promise; - release(options: CloseConnectionOptions, callback: (error: DBError) => void): void; - release(callback: (error: DBError) => void): void; + release(options: CloseConnectionOptions, callback: (error: DBError | null) => void): void; + release(callback: (error: DBError | null) => void): void; /** * Resumes an existing sessionless transaction using the specified transaction identifier. @@ -1684,12 +1691,12 @@ declare namespace OracleDB { transactionId: SessionlessTransactionOpts["transactionId"], resTxnOpts?: ResumeSessionlessTxnOpts, ): Promise; - resumeSessionlessTransaction(callback: (error: DBError) => void): void; + resumeSessionlessTransaction(callback: (error: DBError | null) => void): void; /** * Rolls back the current transaction in progress on the connection. */ rollback(): Promise; - rollback(callback: (error: DBError) => void): void; + rollback(callback: (error: DBError | null) => void): void; /** * Used to shut down a database instance. This is the flexible version of oracledb.shutdown(), allowing more control over behavior. @@ -1751,7 +1758,7 @@ declare namespace OracleDB { subscribe( name: string, options: SubscribeOptions, - callback: (error: DBError, result: Subscription) => void, + callback: ResultCallback, ): void; /** @@ -1763,7 +1770,7 @@ declare namespace OracleDB { * @since 6.9 */ suspendSessionlessTransaction(): Promise; - suspendSessionlessTransaction(callback: (error: DBError) => void): void; + suspendSessionlessTransaction(callback: (error: DBError | null) => void): void; /** * Unregister a Continuous Query Notification (CQN) subscription previously created with connection.subscribe(). * No further notifications will be sent. The notification callback does not receive a notification of the @@ -1778,7 +1785,7 @@ declare namespace OracleDB { * @param name Name of the subscription used in connection.subscribe(). */ unsubscribe(name: string): Promise; - unsubscribe(name: string, callback: (error: DBError) => void): void; + unsubscribe(name: string, callback: (error: DBError | null) => void): void; } /** @@ -2340,6 +2347,9 @@ declare namespace OracleDB { stack?: string; } + // eslint-disable-next-line @definitelytyped/no-single-element-tuple-type + type ResultCallback = (...args: [DBError] | [null, T]) => void; + /** * Used to control statement execution. */ @@ -2609,7 +2619,7 @@ declare namespace OracleDB { * @see https://node-oracledb.readthedocs.io/en/latest/user_guide/lob_data.html#closinglobs */ close(): Promise; - close(callback: (error: DBError) => void): void; + close(callback: (error: DBError | null) => void): void; /** * Return all the LOB data. CLOBs and NCLOBs will be returned as strings. BLOBs will be returned as a Buffer. @@ -2629,7 +2639,7 @@ declare namespace OracleDB { * @since 4.0 */ getData(): Promise; - getData(callback: (error: DBError, data: string | Buffer) => void): void; + getData(callback: ResultCallback): void; /** * Returns a portion (or all) of the data in the LOB object. Note that @@ -2652,9 +2662,13 @@ declare namespace OracleDB { * @param amount The number of bytes(BLOB) or characters(CLOB) returned starting from offset. */ getData(offset: number): Promise; - getData(offset: number, callback: (error: DBError, data: string | Buffer) => void): void; + getData(offset: number, callback: ResultCallback): void; getData(offset: number, amount: number): Promise; - getData(offset: number, amount: number, callback: (error: DBError, data: string | Buffer) => void): void; + getData( + offset: number, + amount: number, + callback: ResultCallback, + ): void; } /** @@ -2871,8 +2885,8 @@ declare namespace OracleDB { * @since 1.9 */ close(drainTime?: number): Promise; - close(drainTime: number, callback: (error: DBError) => void): void; - close(callback: (error: DBError) => void): void; + close(drainTime: number, callback: (error: DBError | null) => void): void; + close(callback: (error: DBError | null) => void): void; /** * This method obtains a connection from the connection pool. @@ -2912,9 +2926,9 @@ declare namespace OracleDB { getConnection(poolAttributes?: GetPooledConnectionOptions): Promise; getConnection( poolAttributes: GetPooledConnectionOptions, - callback: (error: DBError, connection: Connection) => void, + callback: ResultCallback, ): void; - getConnection(callback: (error: DBError, connection: Connection) => void): void; + getConnection(callback: ResultCallback): void; /** * This call closes connections in the pool and terminates the connection pool. * @@ -2943,8 +2957,8 @@ declare namespace OracleDB { * @alias close */ terminate(drainTime?: number): Promise; - terminate(drainTime: number, callback: (error: DBError) => void): void; - terminate(callback: (error: DBError) => void): void; + terminate(drainTime: number, callback: (error: DBError | null) => void): void; + terminate(callback: (error: DBError | null) => void): void; /** * If enableStatistics is true, this method can be used to output statistics to the console. @@ -2965,7 +2979,7 @@ declare namespace OracleDB { * If an error such as an invalid value occurs when changing one property, then an error will be thrown but any already changed properties will retain their new values. */ reconfigure(poolAttrs: PoolAttributes): Promise; - reconfigure(poolAttrs: PoolAttributes, callback: (error: DBError) => void): void; + reconfigure(poolAttrs: PoolAttributes, callback: (error: DBError | null) => void): void; } /** @@ -3470,14 +3484,14 @@ declare namespace OracleDB { deqMany(maxMessages: number): Promise>>; deqMany( maxMessages: number, - callback: (error: DBError, messages: Array>) => void, + callback: ResultCallback>>, ): void; /** * Dequeues a single message. Depending on the dequeue options, the message may also be returned as undefined if no message is available. */ deqOne(): Promise | undefined>; - deqOne(callback: (error: DBError, message?: AdvancedQueueMessage) => void): void; + deqOne(callback: ResultCallback | undefined>): void; /** * Enqueues multiple messages. @@ -3492,7 +3506,7 @@ declare namespace OracleDB { enqMany(messages: Array>): Promise>; enqMany( messages: Array>, - callback: (error: DBError) => AdvancedQueueMessage, + callback: (error: DBError | null) => AdvancedQueueMessage, ): AdvancedQueueMessage; /** @@ -3505,7 +3519,7 @@ declare namespace OracleDB { enqOne(message: EnqueueMessage): Promise>; enqOne( message: EnqueueMessage, - callback: (error: DBError) => AdvancedQueueMessage, + callback: (error: DBError | null) => AdvancedQueueMessage, ): AdvancedQueueMessage; } @@ -3917,7 +3931,7 @@ declare namespace OracleDB { * It should also be called if no rows are ever going to be fetched from the ResultSet. */ close(): Promise; - close(callback: (error: DBError) => void): void; + close(callback: (error: DBError | null) => void): void; /** * This call fetches one row of the ResultSet as an object or an array of column values, @@ -3929,7 +3943,7 @@ declare namespace OracleDB { * the execute() option fetchArraySize. */ getRow(): Promise; - getRow(callback: (error: DBError, row: T) => void): void; + getRow(callback: ResultCallback): void; /** * This call fetches numRows rows of the ResultSet as an object or an array of column values, @@ -3943,8 +3957,8 @@ declare namespace OracleDB { * @param numRows The number of rows to fetch */ getRows(numRows?: number): Promise; - getRows(callback: (error: DBError, rows: T[]) => void): void; - getRows(numRows: number, callback: (error: DBError, rows: T[]) => void): void; + getRows(callback: ResultCallback): void; + getRows(numRows: number, callback: ResultCallback): void; /** * This synchronous method converts a ResultSet into a stream. @@ -4003,9 +4017,12 @@ declare namespace OracleDB { createCollection( collectionName: string, options: SodaCollectionOptions, - callback: (error: DBError, collection: SodaCollection) => void, + callback: ResultCallback, + ): void; + createCollection( + collectionName: string, + callback: ResultCallback, ): void; - createCollection(collectionName: string, callback: (error: DBError, collection: SodaCollection) => void): void; /** * A synchronous method that constructs a proto SodaDocument object usable for SODA insert and replace methods. @@ -4032,9 +4049,9 @@ declare namespace OracleDB { getCollectionNames(options?: SodaCollectionNamesOptions): string[]; getCollectionNames( options: SodaCollectionNamesOptions, - callback: (error: DBError, names: string[]) => void, + callback: ResultCallback, ): void; - getCollectionNames(callback: (error: DBError, names: string[]) => void): void; + getCollectionNames(callback: ResultCallback): void; /** * Opens an existing SodaCollection of the given name. The collection can then be used to access documents. @@ -4050,7 +4067,10 @@ declare namespace OracleDB { * @since 3.0 */ openCollection(collectionName: string): Promise; - openCollection(collectionName: string, callback: (error: DBError, collection?: SodaCollection) => void): void; + openCollection( + collectionName: string, + callback: ResultCallback, + ): void; } /** @@ -4114,7 +4134,10 @@ declare namespace OracleDB { * @see https://www.oracle.com/pls/topic/lookup?ctx=dblatest&id=GUID-4848E6A0-58A7-44FD-8D6D-A033D0CCF9CB */ createIndex(indexSpec: BTreeIndex | SpatialIndex | SearchIndex): Promise; - createIndex(indexSpec: BTreeIndex | SpatialIndex | SearchIndex, callback: (error: DBError) => void): void; + createIndex( + indexSpec: BTreeIndex | SpatialIndex | SearchIndex, + callback: (error: DBError | null) => void, + ): void; /** * Drops the current collection. @@ -4140,7 +4163,7 @@ declare namespace OracleDB { * @since 3.0 */ drop(): Promise; - drop(callback: (error: DBError, result: DropCollectionResult) => void): void; + drop(callback: ResultCallback): void; /** * Drops the specified index. @@ -4157,7 +4180,7 @@ declare namespace OracleDB { dropIndex( indexName: string, options: DropIndexOptions, - callback: (error: DBError, result: DropCollectionResult) => void, + callback: ResultCallback, ): void; /** @@ -4187,7 +4210,7 @@ declare namespace OracleDB { * @since 3.0 */ getDataGuide(): Promise; - getDataGuide(callback: (error: DBError, document: SodaDocument) => void): void; + getDataGuide(callback: ResultCallback): void; /** * Inserts a given document to the collection. The input document can be either a JavaScript object representing @@ -4206,7 +4229,7 @@ declare namespace OracleDB { * @since 3.0 */ insertOne(newDocument: SodaDocument | Record): Promise; - insertOne(newDocument: SodaDocument | Record, callback: (error: DBError) => void): void; + insertOne(newDocument: SodaDocument | Record, callback: (error: DBError | null) => void): void; /** * Similar to sodaCollection.insertOne() but also returns the inserted document so system managed properties, @@ -4234,7 +4257,7 @@ declare namespace OracleDB { insertOneAndGet( newDocument: SodaDocument | Record, - callback: (error: DBError, document: SodaDocument) => void, + callback: ResultCallback, options?: { hint: string }, ): void; @@ -4253,7 +4276,10 @@ declare namespace OracleDB { * @since 4.0 */ insertMany(documents: Array>): Promise; - insertMany(documents: Array>, callback: (error: DBError) => void): void; + insertMany( + documents: Array>, + callback: (error: DBError | null) => void, + ): void; /** * Similar to sodaCollection.insertMany() but also returns an array of the inserted documents so system managed properties, @@ -4274,7 +4300,7 @@ declare namespace OracleDB { ): Promise; insertManyAndGet( documents: Array>, - callback: (error: DBError, documents: SodaDocument[]) => void, + callback: ResultCallback, options?: { hint: string }, ): void; @@ -4386,7 +4412,7 @@ declare namespace OracleDB { * @since 3.0 */ close(): Promise; - close(callback: (error: DBError) => void): void; + close(callback: (error: DBError | null) => void): void; /** * This method returns the next SodaDocument in the cursor returned by a find() terminal method read operation. @@ -4396,7 +4422,7 @@ declare namespace OracleDB { * @since 3.0 */ getNext(): Promise; - getNext(callback: (error: DBError, document?: SodaDocument) => void): void; + getNext(callback: ResultCallback): void; } /** @@ -4533,7 +4559,7 @@ declare namespace OracleDB { * connection is committed. */ count(): Promise; - count(callback: (error: DBError, result: SodaCountResult) => void): void; + count(callback: ResultCallback): void; /** * Returns a SodaDocumentCursor for documents that match the SodaOperation query criteria. * The cursor can be iterated over with sodaDocumentCursor.getNext() to access each SodaDocument. @@ -4547,7 +4573,7 @@ declare namespace OracleDB { * @since 3.0 */ getCursor(): Promise; - getCursor(callback: (error: DBError, cursor: SodaDocumentCursor) => void): void; + getCursor(callback: ResultCallback): void; /** * Gets an array of SodaDocuments matching the SodaOperation query criteria. An empty array will be * returned when no documents match. @@ -4561,7 +4587,7 @@ declare namespace OracleDB { * @since 3.0 */ getDocuments(): Promise; - getDocuments(callback: (error: DBError, documents: SodaDocument[]) => void): void; + getDocuments(callback: ResultCallback): void; /** * Obtains one document matching the SodaOperation query criteria. If the criteria match more * than one document, then only the first is returned. @@ -4574,7 +4600,7 @@ declare namespace OracleDB { * @since 3.0 */ getOne(): Promise; - getOne(callback: (error: DBError, document?: SodaDocument) => void): void; + getOne(callback: ResultCallback): void; /** * Removes a set of documents matching the SodaOperation query criteria. * @@ -4586,7 +4612,7 @@ declare namespace OracleDB { * @since 3.0 */ remove(): Promise; - remove(callback: (error: DBError, result: SodaRemoveResult) => void): void; + remove(callback: ResultCallback): void; /** * Replaces a document in a collection. The input document can be either a JavaScript object representing the * data content, or it can be an existing SodaDocument. @@ -4610,7 +4636,10 @@ declare namespace OracleDB { * @since 3.0 */ replaceOne(newDocument: SodaDocument): Promise; - replaceOne(newDocument: SodaDocument, callback: (error: DBError, result: SodaReplaceOneResult) => void): void; + replaceOne( + newDocument: SodaDocument, + callback: ResultCallback, + ): void; /** * Replaces a document in a collection. The input document can be either a JavaScript object representing the * data content, or it can be an existing SodaDocument. @@ -4636,7 +4665,7 @@ declare namespace OracleDB { replaceOne(newDocumentContent: Record): Promise; replaceOne( newDocumentContent: Record, - callback: (error: DBError, result: SodaReplaceOneResult) => void, + callback: ResultCallback, ): void; /** * Replaces a document in a collection. This is similar to replaceOne(), but also returns the result document, @@ -4652,7 +4681,10 @@ declare namespace OracleDB { * @since 3.0 */ replaceOneAndGet(newDocument: SodaDocument): Promise; - replaceOneAndGet(newDocument: SodaDocument, callback: (error: DBError, document?: SodaDocument) => void): void; + replaceOneAndGet( + newDocument: SodaDocument, + callback: ResultCallback, + ): void; /** * Replaces a document in a collection. This is similar to replaceOne(), but also returns the result document, * which contains all SodaDocument components (key, version, etc.) except for content. @@ -4669,7 +4701,7 @@ declare namespace OracleDB { replaceOneAndGet(newDocumentContent: Record): Promise; replaceOneAndGet( newDocumentContent: Record, - callback: (error: DBError, document: SodaDocument) => void, + callback: ResultCallback, ): void; } @@ -4981,7 +5013,7 @@ declare namespace OracleDB { * @param poolAttributes Provides connection credentials and pool-specific configuration properties, overriding the defualt pooling properties of the Oracledb object. */ function createPool(poolAttributes: PoolAttributes): Promise; - function createPool(poolAttributes: PoolAttributes, callback: (error: DBError, pool: Pool) => void): void; + function createPool(poolAttributes: PoolAttributes, callback: ResultCallback): void; /** * Obtains a connection from a pool in the connection pool cache. @@ -4992,7 +5024,7 @@ declare namespace OracleDB { * @param poolAlias Specifies which previously created pool in the connection pool cache to use to obtain the connection. */ function getConnection(poolAlias: string): Promise; - function getConnection(poolAlias: string, callback: (error: DBError, connection: Connection) => void): void; + function getConnection(poolAlias: string, callback: ResultCallback): void; /** * Obtains a connection from the default pool. @@ -5001,7 +5033,7 @@ declare namespace OracleDB { * However, in most cases, Oracle recommends getting connections from a connection pool. */ function getConnection(): Promise; - function getConnection(callback: (error: DBError, connection: Connection) => void): void; + function getConnection(callback: ResultCallback): void; /** * Creates a new, standalone, non-pooled connection. @@ -5014,7 +5046,7 @@ declare namespace OracleDB { function getConnection(connectionAttributes: ConnectionAttributes): Promise; function getConnection( connectionAttributes: ConnectionAttributes, - callback: (error: DBError, connection: Connection) => void, + callback: ResultCallback, ): void; /** diff --git a/types/oracledb/oracledb-tests.ts b/types/oracledb/oracledb-tests.ts index 05d88303cefff1..a84d75544dd064 100644 --- a/types/oracledb/oracledb-tests.ts +++ b/types/oracledb/oracledb-tests.ts @@ -3,6 +3,10 @@ import * as oracledb from "oracledb"; import assert from "assert"; import defaultOracledb from "oracledb"; +/* eslint-disable @definitelytyped/no-single-element-tuple-type */ + +const expectType = (value: T): T => value; + /* TABLE SETUP FOR TESTING: @@ -24,8 +28,32 @@ const { DB_USER, } = process.env; +const typeCheckConnection = {} as oracledb.Connection; + +oracledb.createPool({} as oracledb.PoolAttributes, (...args) => { + expectType<[oracledb.DBError] | [null, oracledb.Pool]>(args); +}); + +typeCheckConnection.createLob(oracledb.CLOB, (...args) => { + expectType<[oracledb.DBError] | [null, oracledb.Lob]>(args); +}); + +typeCheckConnection.execute("SELECT 1 FROM dual", (...args) => { + expectType<[oracledb.DBError] | [null, oracledb.Result]>(args); +}); + +typeCheckConnection.commit(error => { + expectType(error); +}); + const initSession = (connection: oracledb.Connection, requestedTag: string, callback: (e: unknown) => void): void => { - connection.execute(`alter session set nls_date_format = 'YYYY-MM-DD' nls_language = AMERICAN`, callback); + connection.execute( + `alter session set nls_date_format = 'YYYY-MM-DD' nls_language = AMERICAN`, + ((...args) => { + const [error] = args; + callback(error); + }) as oracledb.ResultCallback>, + ); }; const testBreak = (connection: oracledb.Connection): Promise => @@ -38,7 +66,10 @@ const testBreak = (connection: oracledb.Connection): Promise => END; `, [2], - (error: oracledb.DBError): void => { + (error: oracledb.DBError | null, _result?: oracledb.Result): void => { + if (!error) { + throw new Error("Expected error from dbms_lock.sleep"); + } // ORA-01013: user requested cancel of current operation assert(error.message.includes("ORA-01013"), "message not defined for DB error"); assert(error.errorNum !== undefined, "errorNum not defined for DB error");