node-oracledb Release Notes

For deprecated and desupported features, see Deprecations and desupported features.

node-oracledb v6.5.1 (23 May 2024)

Common Changes

  1. Test and documentation updates.

Thin Mode Changes

  1. Fixed issue that throws an ORA-00932 error, when the same SELECT SQL statement is run for the second time with a different bind type. See Issue #1669.

  2. Fixed exponent check condition for out-of-bounds number. See Issue #1659.

  3. Fixed bug that throws an ORA-28009 error when a pool is created with SYSDBA privilege. See Issue #1657.

  4. Added internal code change to improve network packet handling.

Thick Mode Changes

  1. Fixed bug that ignored the privilege parameter when it was passed in the pool.getConnection() call.

node-oracledb v6.5.0 (2 May 2024)

Common Changes

  1. Added comprehensive support for Oracle Database 23ai VECTOR data type.

  2. Incorporated changes to use end of data request flag set with data packets available in Oracle Database 23ai to improve handling of the async reads.

  3. Added class oracledb.JsonId to represent JSON ID values returned by SODA in Oracle Database 23.4 and later in the _id attribute of documents stored in native collections.

  4. Added support for an Oracle Database 23ai JSON feature allowing for field names with more than 255 UTF-8 encoded bytes.

  5. Added support for an Oracle Database 23ai JSON feature improving JSON storage usage.

  6. Updated error thrown during pool reconfiguration from ORA-24413 to NJS-007 when poolMax is 0.

  7. Error NJS-092 is now thrown during pool reconfiguration if the poolMin value is greater than the poolMax value.

  8. Added support for binding BigInt values. BigInts such as 123n can be passed to connection.execute() and connection.executeMany(). See PR #1572 (Slawomir Osoba).

  9. Test case improvements and additions for the supported Oracle Database 23ai features.

  10. Documentation updates and additions for the supported Oracle Database 23ai features.

Thin Mode Changes

  1. Updated ClientInfo terminal parameter to remove the hardcoded value. See Issue #1662.

  2. Fixed issue with connecting to Oracle Database, when the full path of the Node.js executable contains certain non-standard characters such as ‘(’ and ‘)’. See Issue #1664.

  3. Added support for easy connect string entries in tnsnames.ora. See Issue #1644.

  4. Added support for Oracle Database 23ai feature that can improve the performance of connection creation by reducing the number of round trips required for all connections created.

  5. Error NJS-149: the bind variable placeholder "%s" cannot be used both before and after the RETURNING clause in a DML RETURNING statement is now raised when the same bind variable placeholder name is used both before and after the RETURNING clause in a DML RETURNING statement. Previously, various internal errors were raised. See Issue #1652.

  6. Added support for pool reconfiguration.

  7. Added support for Oracle Database 23ai Implicit Connection Pooling in Database Resident Connection Pooling (DRCP) and Proxy Resident Connection Pooling (PRCP).

  8. Added support for usage with extension of Array.prototype methods. See Issue #1653.

  9. Fixed bug which threw an error due to the presence of duplicate cursors with DRCP.

Thick Mode Changes

  1. Fixed issue with privileges that prevented the oracledb.startup() method from bringing up the database.

  2. Tightened code to avoid possible unexpected runtime errors during token callback.

  3. Fixed issue that caused unexpected behavior with SODA functions in some platforms.

  4. Fixed bug which inserted the invalid value ~ into the database if an unacceptable out-of-bounds number is bound to a DML statement. Now, numbers such as 1.0e+128, -1e128, and so on will throw an error NJS-115: value cannot be represented as an Oracle Database number. Additionally, this fix resolves the issue related to JS numbers with precisions where 2.3 is returned as 2.300003. See Issue #1659.

  5. Fixed regression that caused deqOne() and deqMany() to return an invalid object in node-oracledb 6.4 instead of undefined, which was returned in the previous releases. See Issue #1656.

node-oracledb v6.4.0 (11 Mar 2024)

Common Changes

  1. Enhanced lob.getData() method to accept offset and amount arguments. See Issue #1643.

  2. Added support for fetching BLOB columns which have the IS JSON FORMAT OSON constraint enabled in the same way as columns of type JSON. In node-oracledb Thick mode, this requires Oracle Client 21c or later. Applications can get this new fetch behaviour by setting the oracledb property oracledb.future.oldJsonColumnAsObj to true. The default value for this property is false which retains the existing fetch behaviour. In a future version, the new fetch behaviour will become default and setting this property will no longer be needed.

  3. Added methods connection.decodeOSON() and connection.encodeOSON() to support fetching and inserting into columns that have the IS JSON FORMAT OSON check constraint enabled. See Using BLOB columns with OSON Storage Format in node-oracledb for more information.

  4. Connections to standby database opened MOUNTED return NAN for connection.maxOpenCursors. Fixed to return 0.

  5. Added toMap() method to DbObject Class which returns a map object. See Issue #1627.

  6. Added support to accept an object as an input parameter in the connection.execute() method. This object is returned from the third-party sql-template-tag module and exposes statement and values properties to retrieve SQL string and bind values. See Issue #1629.

  7. Added a new extended metadata information attribute isOson for a fetched column.

  8. Added oracledb.poolPingTimeout and pool.poolPingTimeout properties to limit the connection.ping() call time. Issue #1626.

  9. Added the warning property to the result object of connection.executeMany().

  10. The attribute and element values of DbObject Class objects that contain strings or bytes now have their maximum size constraints checked. Errors NJS-142 and NJS-143 are now raised when the size constraints are violated. Issue #1630.

  11. Added support for columns of type vector (currently requires access to a limited availability release of the database).

  12. Error NJS-003 is now raised when an attempt is made to perform an operation using a closed connection. Error NJS-108, which was earlier used to flag errors when LOB operations were attempted on a closed or invalid connection, is now removed.

Thin Mode Changes

  1. Fixed intermittent error NJS-103 which was seen while fetching large number of CLOB columns whose metadata is split across multiple packets. Issue #1642.

  2. Fixed potential cursor issues when using DRCP.

  3. Fixed bug in reading PLS_INTEGER type when used in PL/SQL records.

  4. Error NJS-141: errors in array DML exceed 65535 is now raised when the number of batch errors exceed 65535 when calling connection.executeMany() with the parameter batchErrors set to the value true. Note that in node-oracledb Thick mode, this error is not raised unless the number of batch errors is a multiple of 65536; instead, the number of batch errors returned is modulo 65536.

  5. Updated connection pool to scan and remove idle connections from the beginning of the free connection list. This will ensure removal of all idle connections present in the free connection list. Issue #1633.

  6. Fixed bug in identifying bind variables in SQL and PL/SQL statements containing a single line comment at the end of the statement.

Thick Mode Changes

  1. Added support for asynchronous iteration of SODA document cursors.

  2. Internal code and memory optimization changes for Advanced Queuing.

node-oracledb v6.3.0 (21 Dec 2023)

Common Changes

  1. Added a warning property to the result object for database warnings (such as PL/SQL compilation warnings) that are generated by calls to connection.execute().

  2. Added a connection.warning property for warnings (such as the password being in the grace period) that are generated during connection.

  3. VARCHAR2 and LOB columns which contain JSON, and have the “IS JSON” check constraint enabled, can now be fetched in the same way as columns of type JSON. In node-oracledb Thick mode this requires Oracle Client 19 or higher. Applications can get this new fetch behaviour by setting the new oracledb property oracledb.future.oldJsonColumnAsObj to true. The default value for this property is false which retains the existing fetch behaviour. In a future version, the new fetch behaviour will become default and setting this property will no longer be needed.

  4. Added constant oracledb.DB_TYPE_XMLTYPE to represent data of type SYS.XMLTYPE in metadata fetchType and dbType attributes. Previously the constant used was oracledb.DB_TYPE_LONG in Thick mode and oracledb.DB_TYPE_OBJECT in Thin mode.

  5. Added support for using the Azure and Oracle Cloud Infrastructure (OCI) Software Development Kits (SDKs) to generate authentication tokens.

  6. Added new connection properties connection.dbDomain, connection.dbName, connection.maxOpenCursors, connection.serviceName and connection.transactionInProgress that provide the database domain name, database instance name, maximum number of cursors that can be opened per connection, database service name and status of any ongoing transactions on the connection respectively.

  7. Added new extended metadata information attributes annotations, domainName, domainSchema and isJson for a fetched column.

  8. Added support for using an unformatted private key when the connection token callback is invoked due to expiry of an Identity Access Management (IAM) token after successful pool creation and connection establishment.

  9. Added new environment variable NODE_ORACLEDB_CLIENT_LIB_DIR to set an optional Oracle Client library path for the files in the examples directory on Windows and macOS Intel platforms, when using node-oracledb Thick mode.

  10. Added functionality to create and drop user schemas for Advanced Queuing (AQ) sample files in the examples directory. Users can now simply run the AQ samples using Node.js without requiring any external setup of the AQ user schema, queues and tables.

Thin Mode Changes

  1. Added support for fetching SYS.XMLTYPE data as strings. Note that unlike in Thick mode, fetching longer values does not require using XMLTYPE.GETCLOBVAL().

  2. Fixed bug in parsing SQL statements containing multi-line comments with multiple asterisks before the closing slash. Issue #1625.

  3. Fixed bug that caused an ‘ORA-03120’ exception to be thrown when a string whose size is greater than “database initialization parameter”, MAX_STRING_SIZE is bound to a PL/SQL function.

  4. Fixed bug that caused an ‘ORA-00600’ exception to be thrown with DbObject Class objects binding that have attributes whose values exceed 252 bytes in length. Issue #1616.

  5. Improved overall pool connection creation time by caching information during the first connection establishment.

  6. Internal changes to improve protocol handling between the database and the client.

Thick Mode Changes

  1. Fixed bug that causes an ‘NJS-136’ exception to be thrown when a proxy user is used for external authentication. Issue #1628.

  2. Fixed bug resulting in a segfault on some platforms when using two-phase commit. (ODPI-C change).

node-oracledb v6.2.0 (11 Oct 2023)

Common Changes

  1. Added packageName property to DbObject Class.

Thin Mode Changes

  1. Improved statement bind variable placeholder parser performance, handle statements which use the Alternative Quoting Mechanism (‘Q’ strings), and fix some issues identifying bind variable placeholders in embedded quotes and in JSON syntax. Issue #1605.

  2. Fixed bug that caused cursors to be leaked when calling connection.getStatementInfo().

  3. Fixed bug that caused an exception to be thrown unnecessarily when a connection was closed. Issue #1604.

  4. Fixed bug that prevented getting the value of a RAW attribute on a DbObject which is null.

  5. Fixed bug which caused a cursor leak while repeatedly executing a SQL statement that fails with an NJS-prefixed error.

  6. Ensure that the database port is passed as a number to the network connection. See Issue #1600 and PR #1601 (Daniel Rodrigues).

  7. Internal code refactoring to improve connection performance when using Easy Connect strings.

  8. Internal performance optimizations for network buffer and packet handling.

Thick Mode Changes

  1. Added new property binaryDir to the options passed to initOracleClient() which indicates the name of the directory that contains the node-oracledb Thick mode binary module. PR #1602 (Kwok Chun Man).

  2. Fixed segfault while populating a collection with a BLOB property. See node-oracledb public Slack channel.

  3. Added sodaCollection.listIndexes() method to fetch all the current indexes from a SODA collection.

  4. Added sodaOperation.lock() method to disable modification of SODA documents by other connections.

  5. Fixed bug causing an ORA-21525 error with DbObject Class objects that have a NUMBER attribute with a scale of 0 and precision less than, or equal, to 18. Issue #1594.

node-oracledb v6.1.0 (30 Aug 2023)

Common Changes

  1. Added support for both formatted and un-formatted private keys as input for IAM Token-Based Authentication.

  2. Added new property connection.instanceName which provides the Oracle Database instance name associated with a connection. This returns the same value as the SQL expression sys_context('userenv', 'instance_name').

  3. Minor code refactoring.

  4. Test case and Documentation updates and improvements.

Thin Mode Changes

  1. Added support for an Oracle Database 23ai feature that can improve the performance of connection creation by reducing the number of round trips required to create the second and subsequent connections to the same database.

  2. Added support for fetching RAW columns as strings using oracledb.fetchAsString = [ oracledb.DB_TYPE_RAW ]. Issue #1586.

  3. Added new sslAllowWeakDNMatch connection attribute in createPool() and getConnection() methods and support for SSL_WEAK_DN_MATCH (an Oracle Database 23ai feature). If set, this enables sslServerDNMatch / SSL_SERVER_DN_MATCH to check the database server certificate (but not the listener) and enables the service name to be used for partial DN matching. The search order is: the host name, then the Subject Alternative Name (SAN), and then the service name.

  4. Added support to include database error cause/action URLs (introduced from Oracle Database 23ai onwards) for ORA error messages.

  5. Added network connection optimization for multiple database hosts. If a host is found to be unreachable during connection, the host is added to a cache (marked as ‘down’). Subsequent requests to get a connection will reorder the list of available hosts so that the hosts marked as down are at the end of the list.

  6. Fixed bug that throws unexpected ORA-01002 and NJS-112 errors when LOB columns are fetched after table recreation. Issue #1565.

  7. Fixed bug with oracledb.oracleClientVersion and connection.oracleServerVersionString. These attributes now return ‘undefined’ in Thin mode instead of throwing an error. Issue #1582.

  8. Fixed bug throwing ‘Unexpected message type’ error during connection authentication. Issue #1589.

  9. Fixed bug in handling unexpected pool growth that exceeds pool max limit due to improper handling of parallel connection requests. Issue #1591.

  10. Fixed bug to return proper error when an invalid database service name is configured in the database listener.

  11. Fixed bug when sslServerDNMatch is set and the connect string is in Easy Connect syntax, but a value for SSL_SERVER_DN_MATCH is not set in that connect string.

  12. Fixed bug in DN matching when both a remote and a local listener use the same certificate.

  13. Fixed bug with duplicate data for queries that exceed 2016 columns (only possible with Oracle Database 23ai).

Thick Mode Changes

  1. Added msgId attribute in the message object passed onto the callback function registered during AQ subscription. The msgId attribute passed with the callback function can be compared with the msgId attribute returned by the dequeue function for proper validation of the returned message objects with message dequeue.

  2. Added support to return a message object from the queue.enqOne() and queue.enqMany() functions. This message object contains a msgId attribute identifying each message.

  3. Added support to enqueue and dequeue AQ messages as JSON.

node-oracledb v6.0.3 (12 Jul 2023)

Common Changes

  1. Fixed bug to consistently use the DRCP oracledb.connectionClass in effect when the pool was created.

  2. Added more test cases for datetime objects and other test improvements.

  3. Documentation improvements.

Thin Mode Changes

  1. Fixed bug that throws an NJS-111 internal error, on the second SELECT SQL statement issued after the first SELECT SQL statement call on an empty table with LOBs.

  2. Avoid throwing errors when calls to os.userInfo() fail. Issue #1564.

  3. Persist in-band notifications after calls to connection.isHealthy().

  4. Improved memory usage by removing an unused network buffer.

  5. Fixed bug to handle breaks that occur in the middle of processing a database response that spans multiple packets. This break could occur due to a server error, the session being killed or a call to breakExecution().

  6. Fixed bug where NJS-112 is thrown intermittently with some connections.

  7. Fixed bug where DRCP connections from the application-side connection pool cause the NUM_MISSES values to increase instead of the NUM_HITS values in the V$CPOOL_STATS view by default. This fix optimizes the use of DRCP connections.

  8. Fixed issue where dates with negative years are not inserted and fetched correctly.

  9. Error handling and message improvements:

    • Fixed error handling when invalid connect descriptor syntax is used.

    • Throws an error when https_proxy is given but the protocol is tcp.

    • Fixed bug to handle errors that occur while waiting for writes to drain on the network.

    • Improved the error message thrown when an internal error handler fails and a connection is no longer usable

    • Improved error message when an unsupported protocol is used in Easy Connect syntax.

    • Add packet number and position for network packets to provide improved diagnosability on some internal errors.

node-oracledb v6.0.2 (27 Jun 2023)

Common Changes

  1. Test improvements.

  2. Documentation improvements.

Thin Mode Changes

  1. Fixed bug connecting to databases with older 11g password verifiers.

  2. Fixed bug when the length of a chunk inside a chunked read spans packets. Issue #1576.

  3. Fixed bug when fetching rows containing data duplicated from a previous row that spans multiple network packets. Issue #1566 and Issue #1565.

  4. Fixed bug when fetching database objects with large embedded database objects.

  5. Fixed bug when fetching a large number of database objects.

  6. Display a better error when using BLOBs in DbObjects in Thin mode.

  7. Improved pool performance by optimizing deobfuscation logic for pool credentials.

  8. Added support for connecting with multiple network aliases for a single connect string entry in the tnsnames.ora file. For example, alias1, alias2, alias3=(description=…).

  9. Minor internal code cleanup.

Thick Mode Changes

  1. Fixed bug with getting the value of a LOB stored in a DbObject Issue #1571.

node-oracledb v6.0.1 (07 Jun 2023)

Common Changes

  1. Fixed bug with bind variables containing multi-byte characters. Issue #1554.

  2. The buffer and process modules are now imported consistently instead of relying on global variable definitions. PR #1559 (Sławomir Osoba).

  3. Test improvements.

  4. Documentation improvements.

Thin Mode Changes

  1. Improved the error message when an attempt is made to establish a connection to an unsupported database version.

  2. Improved binding support:

    • Fixed NULL BOOLEAN OUT binds.

    • Fixed issues with ordering of binds in SQL when the database version is 12.1 and the maxSize of a bind variable exceeds 4000 bytes.

  3. Fixed bug using colons in multiple single-line SQL comments in Thin mode. Issue #1561.

  4. Fixed bug which caused a cursor leak if an error was thrown while processing the execution of a query.

  5. Fixed several statement caching bugs.

  6. Fixed bug with small network SDU sizes.

  7. Internal implementation change:

    • Improved network packet handling.

node-oracledb v6.0.0 (24 May 2023)

  1. Node-oracledb is now a pure JavaScript ‘Thin’ driver by default that connects directly to Oracle Database. Optional use of Oracle Client libraries enables a ‘Thick’ mode with some additional functionality.

  2. Re-licensed to dual Apache 2.0 or UPL 1.0 licenses, see License.

  3. Bumped the minimum Node.js version required to 14.6 so Node-API version 6 and FinalizationRegistry can be used in the driver implementation.

  4. Added a new oracledb.fetchTypeHandler and equivalent execution option allowing a user function to be specified that can make custom alterations to SQL query data before it is returned to the application.

  5. Added a new error.code to fetch the error prefix and the error number, for example ORA-01017, DPI-1080, and NJS-500.

  6. Deprecated execution option attribute fetchInfo. Use the new Using Fetch Type Handlers functionality instead.

  7. Type and Metadata changes:

    • Query extended metadata is now always available. The oracledb.extendedMetaData and equivalent execution attribute values are ignored.

    • Query column metadata now always returns unique column names regardless of the value of the outFormat setting. Previously they were only unique when oracledb.OUT_FORMAT_OBJECT was used.

    • Changed oracledb.DB_TYPE_* constants to be DbType objects instead of numbers.

    • Added support for the Oracle Database 23ai BOOLEAN SQL type.

    • Fixed type used when fetching NCLOB as a string.

    • Fixed query metadata fetchType value.

  8. Package script changes:

    • Allow package/prunebinaries.js to optionally remove all the Thick mode binaries to enable a Thin-mode only installation.

    • Allow npm run buildpackage to create a package without Thick mode binaries.

  9. Code refactoring:

    • Standardized and improved function parameter validation.

    • Show NJS prefixed error messages instead of DPI or ORA prefixed messages in some error scenarios.

  10. Multiple calls to initOracleClient() no longer result in an error, as long as the same arguments are passed.

  11. Oracle Database DATE and TIMESTAMP types are now returned as JavaScript date types in the application’s timezone, and no longer fetched or bound as TIMESTAMP WITH LOCAL TIME ZONE. The connection session time zone no longer impacts these types. This behavior aligns with other Oracle Database tools and drivers. Handling of TIMESTAMP WITH TIMEZONE and TIMESTAMP WITH LOCAL TIMEZONE has not changed.

  12. The previously deprecated Token-Based Authentication accessTokenCallback attribute has been removed. Use accessToken instead.

  13. Test and documentation improvements.

node-oracledb v5.5.0 (7 Sep 2022)

  1. Token-based Authentication changes:

    • Added support for token-based authentication using Microsoft Azure Active Directory OAuth 2.0 tokens.

    • The accessToken attribute for connection and connection pool creation can now be a string, a callback function, or an object.

    • Fixed a bug that prevented async functions from being used in token callbacks.

    • Deprecated the connection pool creation attribute accessTokenCallback.

    • Deprecated pool.setAccessToken().

  2. ResultSets now implement the asyncIterator() symbol to support asynchronous iteration.

  3. Added support for Oracle Advanced Queuing (AQ) Recipient Lists.

  4. Fixed a regression that could cause a pool alias to be recorded in the internal list of aliases even if pool creation had failed.

node-oracledb v5.4.0 (9 Jun 2022)

  1. Stated compatibility is now for Node.js 14, 16 and 18. Older releases back to Node.js 10.16 should still work.

  2. Added support for token-based authentication when establishing pool based connections and standalone connections.

  3. Added code to capture the error stack. PR #1467 (Slawomir Osoba).

  4. Added code to keep the method name in internally bound functions. PR #1466 (Slawomir Osoba).

  5. Added a connection.isHealthy() function to perform a local connection health check.

  6. Added missing support for binding as oracledb.DB_TYPE_BINARY_INTEGER.

  7. Fixed a crash using multiple DbObject OUT binds Issue #1464.

  8. Fixed calling initOracleClient() with TypeScript 4.4 Issue 1462.

  9. Fixed the numeric suffix feature (for duplicate SELECT column names when using oracledb.OUT_FORMAT_OBJECT mode) when the column name is also a JavaScript property or method name.

  10. Fixed binding string or buffer data when explicitly specifying the type as oracledb.DB_TYPE_BLOB, oracledb.DB_TYPE_CLOB or oracledb.DB_TYPE_NCLOB.

  11. Fixed a crash when certain errors occur during binding. (ODPI-C change).

  12. Fixed a bug causing ORA-25263 when dequeuing a message with a specific message ID. (ODPI-C change).

node-oracledb v5.3.0 (22 Oct 2021)

  1. Added a keepInStmtCache option to execute(), executeMany(), and queryStream() to control whether executed statements are retained in the Statement Cache. Issue #182.

  2. Encapsulated the connection pool statistics in a PoolStatistics Class. Added a poolstatistics.logStatistics() function, equivalent to the existing pool.logStatistics() function. Exposed pool properties user, connectString, edition, events, externalAuth, and homogeneous on the Pool and PoolStatistics classes.

  3. Added Two-Phase Commit support.

  4. Fixed queryStream() logical error handling Issue 1391.

  5. Prevent intermingling of queryStream() streaming and getRow()/ getRows() calls.

  6. Made an internal change for TypeScript 4.4’s imported function behavior with ‘this’ Issue 1408.

node-oracledb v5.2.0 (7 Jun 2021)

  1. Connection pool changes:

    • Pool attributes can be changed during application runtime with pool.reconfigure(). This lets properties such as the pool size be changed dynamically instead of having to restart the application or create a new pool.

    • Formalized pool statistics with the addition of a pool creation attribute enableStatistics, and with the functions pool.getStatistics() and pool.logStatistics(). Pool statistics can be be enabled, disabled, or reset with pool.reconfigure(). The older _enableStats attribute and _logStats() function are aliases for the new functionality but will be removed in a future version of node-oracledb.

    • Added currentQueueLength and poolMaxPerShard to the pool statistics.

    • Fixed connection pool statistics “minimum time in queue” and “maximum time in queue” calculations.

    • Fixed the statement cache size set for the initial poolMin connections created by oracledb.createPool().

    • Fixed queueTimeout of 0 to allow pool connection requests to be queued indefinitely. See Issue 1338.

  2. Concurrent operations on a single connection are now queued in the JavaScript layer, which can help reduce thread usage for applications that are unable to do their own queuing. A new oracledb.errorOnConcurrentExecute property can be used during development to throw an error if concurrent operations are attempted on any single connection.

  3. Enhanced dead connection detection. If an Oracle Database error indicates that a connection is no longer usable, the error DPI-1080: connection was closed by ORA-%d is now returned. The %d will be the Oracle error causing the connection to be closed. Using the connection after this will give DPI-1010: not connected. This behavior also applies for oracle.callTimeout errors that result in an unusable connection. (ODPI-C change).

  4. Enhanced resultset.getRows() to be able to return all rows in one call.

  5. Added username as an alias for user in connection properties.

  6. Enhanced the numeric suffix feature (for duplicate SELECT column names when using oracledb.OUT_FORMAT_OBJECT mode) to also support nested cursors and REF CURSORS.

  7. Added support for caching the database version number in pooled connections with Oracle Client 19 and earlier (later Oracle Clients handle this caching internally). This optimization eliminates a round-trip previously often required when reusing a pooled connection. (ODPI-C change).

  8. SODA changes:

    • Added SODA metadata cache support to connection pools. This significantly improves the performance of opening collections. Caching is available when using Oracle Client version 21.3 (or later). It is also available in Oracle Client 19 from 19.11 onwards.

    • Added a SODA hint() SodaOperation method and equivalent hint option to sodaCollection.insertManyAndGet(), sodaCollection.insertOneAndGet(), and sodaCollection.saveAndGet() to allow monitoring and passing hints.

  9. Fixed crashes seen with Worker threads (ODPI-C change).

  10. Fixed a failure when using JavaScript functions on OUT bind variables from executeMany() that require the connection, for example accessing database objects or streaming LOBs.

  11. Fixed use of oracledb.NCLOB in fetchAsString. See Issue 1351.

  12. Test and documentation improvements.

node-oracledb v5.1.0 (8 Dec 2020)

  1. Added oracledb.dbObjectAsPojo and a connection.execute() option dbObjectAsPojo. These specify whether Oracle Database named objects or collections that are queried should be returned to the application as “plain old JavaScript objects” or kept as database-backed objects. This option also applies to output BIND_OUT bind variables.

  2. Enhanced JSON support to work with Oracle Database 21’s native JSON storage format. A new type oracledb.DB_TYPE_JSON was added.

  3. Numeric suffixes are now added to duplicate SELECT column names when using oracledb.OUT_FORMAT_OBJECT mode, allowing all columns to be represented in the JavaScript object.

  4. The value of prefetchRows set when getting a REF CURSOR as a BIND_OUT parameter is now used in the subsequent data retrieval from that cursor.

  5. Fixed a compatibility regression affecting SODA “get” operations using older Oracle Client releases.

  6. Fixed a memory leak getting attributes of objects or elements of collections that are themselves objects.

node-oracledb v5.0.0 (29 Jun 2020)

  1. Stated compatibility is now for Node.js 10.16+, 12 and 14.

  2. Installation Changes:

    • Added an oracledb.initOracleClient() function to specify the directories that the Oracle Client libraries and optional Oracle configuration files are in, and to specify other configuration values, see Initializing Node-oracledb.

    • macOS Instant Client installation instructions have necessarily changed to work with recent Node.js versions. Instant Client libraries in ~/lib will no longer be used. See installation instructions.

    • Fixed how the module binary is found when using Webpack.

      Webpack users should copy the node-oracledb binary into a sub-directory of the output directory. For example if the output directory is dist, then the binary should be in dist/node_modules/oracledb/build/Release/oracledb-5.0.0-linux-x64.node. A copy plugin in webpack.config.js can do this by copying node_modules/oracledb/build to a directory of that same name. See Issue 1156.

    • Updated Docker installation documentation for changes to the Node.js image Issue #1201.

    • Removed use of git in package/buildpackage.js making offline builds cleaner for self-hosting node-oracledb.

  3. Connection Pool changes:

    • Added oracledb.queueMax and equivalent createPool() option attribute queueMax to limit the number of pending pool.getConnection() calls in the pool queue Issue #514.

    • Made an internal change to use an Oracle Client 20 Session Pool feature allowing node-oracledb connection pools to shrink to poolMin even when there is no pool activity.

  4. Added oracledb.prefetchRows and equivalent execute() option attribute prefetchRows for query row fetch tuning to optimize round-trips, or disable prefetching altogether. See Tuning Fetch Performance.

  5. Added support for queries containing cursor expressions that return nested cursors.

  6. Added database instance startup and shutdown functions oracledb.startup(), oracledb.shutdown(), connection.startup(), and connection.shutdown().

  7. Added a new constant oracledb.SYSPRELIM to allow preliminary database connections, such as required when starting a database.

  8. Added support for ResultSet IN binds to PL/SQL REF CURSOR parameters.

  9. Added support for PL/SQL Collection Associative Arrays “index-by tables” of the following types: oracledb.DB_TYPE_NVARCHAR, oracledb.DB_TYPE_CHAR, oracledb.DB_TYPE_NCHAR, oracledb.DB_TYPE_BINARY_FLOAT, oracledb.DB_TYPE_BINARY_DOUBLE, oracledb.DB_TYPE_DATE, oracledb.DB_TYPE_TIMESTAMP, oracledb.DB_TYPE_TIMESTAMP_LTZ, oracledb.DB_TYPE_TIMESTAMP_TZ. and oracledb.DB_TYPE_RAW.

  10. Refactored the module’s JavaScript code layer to use async/await.

  11. Removed support for custom Promise libraries. Use the native Node.js Promise implementation instead. This change was necessitated by the refactored JavaScript implementation.

  12. NJS-005 and NJS-009 are now passed through the callback (if one is used).

  13. Fixed a segfault that occurred when binding a database object IN/OUT without providing the database object class.

  14. Fixed OUT binds of type oracledb.DB_TYPE_DATE, oracledb.DB_TYPE_TIMESTAMP and oracledb.DB_TYPE_TIMESTAMP_TZ to correctly return Dates.

  15. SODA changes:

  16. Lob Changes:

    • Fixed Lob class lob.type and metaData.fetchType when streaming NCLOB data. They are now oracledb.NCLOB instead of oracledb.CLOB.

    • Fixed Lob.destroy() so it does not call the old Lob.close() method, which emits a duplicate close event.

    • Lobs being streamed to are now correctly destroyed on error.

  17. Made an internal change to use an Oracle Client 20 feature to avoid a round-trip when accessing connection.oracleServerVersion or connection.oracleServerVersionString for the first time.

  18. Updated examples and documentation to make more use of Node.js 8’s Stream destroy() method, allowing resources to be freed early.

  19. Test and documentation improvements.

node-oracledb v4.2.0 (24 Jan 2020)

  1. Added support for binding using the node-oracledb Database Type Constants DB_TYPE_DATE, DB_TYPE_CHAR, DB_TYPE_NCHAR, DB_TYPE_NVARCHAR, DB_TYPE_NCLOB, DB_TYPE_BINARY_DOUBLE, DB_TYPE_BINARY_FLOAT, DB_TYPE_BINARY_INTEGER, DB_TYPE_TIMESTAMP, and DB_TYPE_TIMESTAMP_TZ.

  2. Added support for binding using DB_TYPE_BOOLEAN (Diego Arce).

  3. Added support for creating temporary NCLOBS with connection.createLob(oracledb.NCLOB).

  4. Added client initiated connection support for Continuous Query Notification (CQN) and other subscription based notifications.

  5. Added result.lastRowid to execute(). It contains the ROWID of the last row affected by an INSERT, UPDATE, DELETE or MERGE statement.

  6. Changed the Error object offset to be 32-bit, allowing the batchErrors mode of executeMany() to show row offset values up to (2^32)-1 (ODPI-C change).

  7. Avoid intermediate conversion from the database national character set to the database character set when querying NCLOB columns as String.

  8. Fixed various execution failures with Node.js 13.2 due to a Node.js NULL pointer behavior change (ODPI-C change).

  9. Fixed connection pooling so sharded pool.getConnection() requests respect queueTimeout when poolMaxPerShard has been reached.

  10. Added a directory to the binary module search to help Webpack use, though a copy plugin is still required, see here.

  11. Fixed some static code analysis warnings.

  12. Updated Lob streaming documentation and examples. Applications should use the end event (for readable streams) and finish event (for writeable streams) instead of the close event. The node-oracledb lob.close() method is now deprecated in favor of the more functional Node.js 8 Stream destroy() method.

  13. Test and documentation improvements.

node-oracledb v4.1.0 (26 Nov 2019)

  1. Added end-to-end tracing attributes connection.clientInfo and connection.dbOp.

  2. Added support for Oracle Sharding.

  3. Fixed a regression when binding dates with alternative JavaScript frameworks.

  4. Fixed “NJS-024: memory allocation failed” errors seen on AIX.

  5. Fixed a JavaScript memory leak when getting Oracle Database named type information, such as with getDbObjectClass().

  6. Corrected support for PLS_INTEGER and BINARY_INTEGER types when used in PL/SQL records (ODPI-C change).

  7. Corrected queryStream() documentation and examples to show the ‘close’ event should be received before closing connections. If connections are closed on the ‘end’ event, then significant C layer memory may be held open until the garbage collector frees the associated JavaScript resource.

  8. Reverted the events default back to pre-4.0 behavior due to connection creation timeouts in some environments. It is now false again.

  9. Error changes:

    • Ensured that queryStream() errors raised during close are emitted in the ‘error’ event.

    • Enforce only one of connectString or connectionString being used for connection.

    • Improved some error messages.

    • Refactored implementation of function argument checking.

  10. Test and documentation improvements.

node-oracledb v4.0.1 (19 Aug 2019)

  1. Fixed a regression causing a segfault when setting oracledb.connectionClass and not creating a pool (ODPI-C change).

  2. Fixed a regression when enumerable properties were added to Object.prototype. (#1129).

  3. Fixed a regression with missing metaData from connection.getStatementInfo().

  4. Fixed crashes with spurious subscription (e.g. CQN) notifications, and when unsubscribing an invalid subscription.

  5. A more meaningful error is returned when calling connection.subscribe() with SQL that is not a SELECT statement (ODPI-C change).

  6. Fixed passing DbObjects and JavaScript objects as the payload attribute for AQ message enqueues when using an object queue.

  7. Made the error message for AQ queue.deqMany(0) the same NJS-005 given when a negative number is used.

  8. Fixed a compilation warning seen on Windows.

  9. Improve portability of buildbinary.js, a package creation script (#1129).

node-oracledb v4.0.0 (25 Jul 2019)

  1. Refactored the node-oracledb implementation to use N-API in place of NAN.

    • Node-oracledb 4 requires Node.js 8.16 or Node.js 10.16, or higher. Node.js 8.16, 10.16, 11.12 and 12 contain an important N-API performance fix.

    • N-API allows node-oracledb binaries to be portable between Node.js versions on a given operating system, subject to N-API compatibility. Node-oracledb uses N-API version 4.

    • Oracle Client libraries are still required at runtime. These can be from Oracle Instant Client, the full Oracle Client, or an Oracle Database installation.

    • The string representation of classes has changed to [object Object] as a consequence of using N-API. Use Object.getPrototypeOf() to get class information.

    • The C compiler required for building from source code no longer needs C++11 compatibility. The node-oracledb source code is now pure C.

  2. Added support for querying and binding Oracle Database Objects and Collections.

  3. Added support for Oracle Advanced Queuing (AQ):

    • Added support for “RAW” queues, allowing String and Buffer messages to be used.

    • Added support for object queues, allowing Oracle Database object messages to be used.

    • Added support for notifications with oracledb.SUBSCR_NAMESPACE_AQ.

  4. Added support for Implicit Results, allowing query results to be returned from PL/SQL without needing parameters or bind variables.

  5. Added asynchronous method lob.getData() to return all data from a Lob readable stream.

  6. Added a new dbTypeName attribute to extendedMetaData output. It contains the name of the type the column has in the database, such as “VARCHAR2”.

  7. Enhanced BIND_IN of PL/SQL Collection Associative Arrays (Index-by) so a bind definition object can be omitted (see #1039).

  8. Continuous Query Notification (CQN) Improvements:

    • Added support for getting the registration id for CQN subscriptions.

    • Added support and message type constants for database startup and shutdown events.

    • Fixed a crash that occurred when unsubscribing from CQN while notifications were ongoing (ODPI-C change).

  9. Added connection.currentSchema for setting the schema qualifier to be used when a qualifier is omitted in SQL statements. This is an efficient alternative to ALTER SESSION SET CURRENT_SCHEMA.

  10. Renumbered node-oracledb Type Constants and Oracle Database Type Constants to allow for future enhancements.

  11. Introduced Query outFormat Constants oracledb.OUT_FORMAT_ARRAY and oracledb.OUT_FORMAT_OBJECT. The previous constants oracledb.ARRAY and oracledb.OBJECT are deprecated but still usable.

  12. Improved the performance of oracledb.outFormat mode oracledb.OUT_FORMAT_OBJECT.

  13. Improved the fetch performance of LOBs in some cases by reducing the number of round-trips required between node-oracledb and Oracle Database (ODPI-C change).

  14. Change the events default to true.

  15. Updated the JavaScript syntax in class implementations.

  16. Class methods are now configurable. For example via Object.defineProperty.

  17. Error handling changes:

    • Corrected the error message returned when invalid types are used for boolean options.

    • Standardized error messages for incorrect function parameters. Now NJS-005 and NJS-007 are used in place of NJS-006 and NJS-008, respectively.

    • Exceptions from user getters for parameter object attribute access are now passed through the error callback.

    • The NJS-014 error when setting a read-only property was replaced with a standard JavaScript message.

    • When passing 0 or a negative value for the number of iterations to connection.executeMany(), errors now occur through the error callback.

    • Some error numbers may have changed due to code refactoring. Some message text was updated.

  18. SODA changes:

  19. Fixed writing of multi-byte characters to CLOBs when multiple writes are required.

  20. Fixed a crash occurring when draining the connection pool (ODPI-C change).

  21. Corrected pool.status to be read-only, as was documented.

  22. Updated documentation.

  23. Added new tests.

  24. Added new examples. Updated existing examples to the Node.js 8 Async/Await style of programming.

node-oracledb v3.1.2 (22 Feb 2019)

  1. Fixed a bug causing CQN crashes when multiple queries are registered (ODPI-C change).

  2. Fixed a CQN race condition to prevent a crash when a multiple connection.unsubscribe() calls are made on the same subscription.

  3. Improved validation of executeMany() arguments to prevent a crash.

  4. Standardized error message for SODA createCollection() with invalid metadata.

  5. Corrected the DPI-1050 error text displayed when the Oracle Client libraries are too old (ODPI-C change).

  6. Allow npm run buildbinary to succeed even if git is not available.

  7. Use a relative URL for the ODPI-C submodule to make cloning from oss.oracle.com also use ODPI-C from oss.oracle.com

node-oracledb v3.1.1 (25 Jan 2019)

  1. Rebuild npm package to resolve Linux binary build issue.

node-oracledb v3.1.0 (22 Jan 2019)

  1. Support tagging of pooled connections when releasing them to the connection pool. When using Oracle Client libraries 12.2 or later, Oracle’s multi-property tagging is used, and a PL/SQL “session” state fix-up procedure can be called when a requested connection tag does not match the actual tag. This removes the need to reset connection session state after every pool.getConnection() call.

  2. Support a Node.js callback function for connection pools. It is called when a connection is newly created and has never been acquired from the pool before, or when a requested connection tag does not match the actual tag.

  3. Support explicit dropping of connections from connection pools.

  4. Support passing parameters in oracledb.getConnection() (such as poolAlias, tag and proxy authentication credentials) for use with the pool cache.

  5. Support the combination of a user proxy and external authentication with standalone connections (ODPI-C change).

  6. Defer initialization of the Oracle Client libraries until the first use of oracledb.getConnection(), oracledb.createPool(), oracledb.oracleClientVersion, or oracledb.oracleClientVersionString.

    If the Oracle Client cannot be loaded, getConnection() and createPool() will return an error via the callback. Accessing oracledb.oracleClientVersion or oracledb.oracleClientVersionString with throw an error.

    This change allows require(‘oracledb’) to always succeed, allowing node-oracledb constants and other attributes to be accessed even if the Oracle Client is not installed.

    This makes it easier to include node-oracledb in multi-database applications where not all users will be accessing Oracle Database.

    It allows code generation tools to access node-oracledb constants without requiring Oracle Client libraries to be installed (see #983).

    Applications now have more scope to alter Oracle environment variables referenced by the Oracle Client layer. Note it is still recommended that the environment be set before Node.js is executed due to potential for confusion or unexpected behavior due to order-of-execution issues.

  7. Support fetching XMLTYPE columns in queries. They will return as String limited to the VARCHAR2 length.

  8. Updated install processes by bundling all pre-built binaries into the https://www.npmjs.com/package/oracledb package, removing the need for a separate binary package download from GitHub. At runtime an appropriate binary is loaded by require(), if it exists, allowing one node_modules/oracledb install to be usable in different environments.

    Source code is no longer included in the npm package. It is still available from GitHub and oss.oracle.com.

    The steps for self-hosting a node-oracledb package have changed, see INSTALL.

  9. Fixed a crash with high frequency notifications from CQN (#1009).

  10. Fixed poolPingInterval with Oracle client libraries 12.2 or later (ODPI-C change).

  11. Fixed an issue with poolPingInterval that could cause usable pooled connections to be unnecessarily dropped by connection.close(). (ODPI-C change).

  12. Fixed a memory leak under certain cirumstances when pooled connections are released back to the pool. (ODPI-C change)

  13. Display correct error message for SODA createIndex() when no parameter is passed.

  14. Fixed some SODA stability issues (node-oracledb and ODPI-C changes).

  15. Improved the statement error Allow List to avoid unnecessarily dropping statements from the statement cache (ODPI-C change).

  16. Made internal changes to fix V8 deprecation compilation warnings with Node.js 10.12, and fixed other static analysis warnings.

node-oracledb v3.0.1 (15 Nov 2018)

  1. Improve validation for SODA createDocument() arguments.

  2. Stated compatibility is now for Node.js 6, 8, 10, and 11.

  3. Upgraded NAN dependency from 2.10 to 2.11.1.

node-oracledb v3.0.0 (1 Oct 2018)

  1. Added new APIs for Simple Oracle Document Access SODA, available when using Oracle Database 18.3 and Oracle Client libraries version 18.3, or later.

  2. Added a drainTime argument to pool.close(), allowing pools to be force-closed after a specified number of seconds. PR #950 (Danilo Silva).

  3. Added a connection.callTimeout property to interrupt long running database calls, available when using Oracle Client libraries version 18.1, or later.

  4. Added support for specifying the number of iterations to executeMany() instead of always requiring an input binds array. This is useful when there are no binds, or only OUT binds.

  5. Added binary installer basic proxy authentication support. Reuse npm config proxy. PR #919 (Cemre Mengu).

  6. Additionally enable poolPingInterval functionality when using Oracle Client libraries 12.2, or later, to aid silent pool connection re-establishment after connections exceed database session resource limits (for example, ORA-02396), or are explicitly closed by DBAs (for example, ORA-00028). (ODPI-C change).

  7. Removed the connection pool queueRequests property. Now pool.getConnection() calls are always queued if the pool is fully in use.

  8. Altered the internal pool.getConnection() logic to work better with Oracle Client 18 library pool changes and retain backward compatibility with older Oracle clients. This prevents pool.getConnection() returning ORA-24418 when the connection pool needs to grow and Oracle client 18 libraries are being used.

  9. Unused properties in objects such as the execute() result are no longer set. Previously some were set to undefined.

  10. On Windows, Oracle Client libraries in node_modulesoracledbbuildRelease adjacent to the oracledb.node binary will now be used in preference to those in PATH. (ODPI-C change).

  11. Change the binary package filename format from ‘…-node-vXX…’ to to ‘…-node-abiXX…’ to reduce Node version and ABI confusion.

  12. Eliminated a memory leak when fetching LOBs and more than one internal fetch occurs.

  13. Test updates.

  14. Documentation updates, including an attribute type correction from PR #970 (Cemre Mengu)

  15. Examples were added and updated.

node-oracledb v2.3.0 (7 Jun 2018)

  1. The stated compatibility is now for Node.js 6, 8, and 10 due to EOL of Node.js 4, and the release of Node 10.

  2. Added support for heterogeneous connection pooling and for proxy support in connection pools. This allows each connection in the pool to use different database credentials.

  3. Added support for Oracle Database Continuous Query Notifications (CQN), allowing JavaScript methods to be called when database changes are committed.

  4. Added support to fetchAsString and fetchInfo for fetching RAW columns as STRING (hex-encoded).

  5. Added Windows support for building binary packages for self-hosting on internal networks. PR #891 (Danilo Silva).

  6. Eliminated a memory leak when binding LOBs as oracledb.BIND_INOUT.

  7. Added an error message indicating that batchErrors and dmlRowCounts can only be used with INSERT, UPDATE, DELETE and MERGE statements.

  8. Fixed a bug that caused queryStream() to emit multiple close events in Node.js 10.

  9. Fixed a crash when getting the list of names for an undefined object with Node.js 6.

  10. Remove deprecated Buffer() function in tests in order to eliminate a deprecation warning with Node.js 10.

  11. Upgraded NAN dependency from 2.8 to 2.10.

  12. Made some internal changes to fix NAN 2.10 deprecations: Replaced v8::String::Utf8Value with Nan::Uft8String. Replaced MakeCallback() with runInAsyncScope().

  13. Mention that queueRequests is deprecated and will be removed in a future version; connection pool queuing will always be enabled in that future version.

node-oracledb v2.2.0 (3 Apr 2018)

  1. Added oracledb.oracleClientVersionString and connection.oracleServerVersionString to complement the existing numeric properties.

  2. Added oracledb.edition to support Edition-Based Redefinition. This removes the need to use an ALTER SESSION command or ORA_EDITION environment variable.

  3. Added oracledb.events to allow the Oracle Client library to receive Oracle Database service events, such as FAN and RLB events. This removes the need to use an oraaccess.xml file to enable event handling.

  4. Added connection.changePassword() for changing passwords, and also added support for changing the password during oracledb.getConnection().

  5. Added connection.executeMany() for efficient batch DML (for example, INSERT, UPDATE and DELETE) and PL/SQL execution with multiple records.

  6. Added connection.getStatementInfo() to find information about a SQL statement without executing it.

  7. Added connection.ping() to support system health checks.

  8. Added support for binding RAW types into Buffers in DML RETURNING statements.

  9. Created GitHub ‘pages’ for hosting documentation. See:

  10. Simplified the binary installer messages to reduce user uncertainty.

  11. Improved the text for the NJS-045 runtime loader failure error.

  12. Made the implementations of connection.close() and pool.close() the primary code paths in place of their respective aliases connection.release() and pool.terminate().

  13. An empty object for fetchInfo no longer produces an error.

  14. Updated database abstraction layer to ODPI-C 2.3

  15. Fixed compilation warnings on Windows.

  16. Updated the node-oracledb implementation to replace V8 deprecations.

node-oracledb v2.1.2 (21 Feb 2018)

  1. Fixed regression with end-to-end tracing attributes not being set.

  2. Fix binary installer proxy 403 (Bruno Jouhier)

node-oracledb v2.1.1 (16 Feb 2018)

  1. Fixed regression with queryStream() in Node 4 & 6 (#847).

node-oracledb v2.1.0 (15 Feb 2018)

  1. Added support for privileged standalone connections: SYSDBA, SYSOPER, SYSASM, SYSBACKUP, SYSDG, SYSKM, and SYSRAC

  2. Improved the Error object with new errorNum and offset properties for Oracle errors.

  3. Added new versionString and versionSuffix attributes to aid showing node-oracledb version and release status.

  4. Added connectionString as an alias for connectString in oracledb.createPool() and oracledb.getConnection() (Sagie Gur-Ari).

  5. Updated the ODPI-C layer:

    • Eliminate DPI-1054 errors, allowing connections to be closed when ResultSets and Lobs are open.

    • Avoid unnecessary roundtrips for rollbacks at connection close.

  6. Replaced obsolete NAN API calls in internal implementation and fixed other static analysis warnings. This means node-oracledb 2.1 no longer builds with Node.js 0.10 or Node.js 0.12.

  7. Improved queryStream() streaming:

    • Add support for the Stream destroy() method available with Node 8.

    • Simplified the internal implementation by reusing ResultSet.getRow().

    • Fixed some timing and race issues.

    • Made sure the ‘close’ event is emitted after the ‘end’ event.

  8. Simplified query direct fetch implementation and improved performance by reusing ResultSet code.

  9. Exceptions are no longer raised when accessing attributes on closed Connections, Pools, Lobs or ResultSets.

  10. ResultSets are now closed on error to free resources earlier.

  11. Improved NJS-010 message content by adding the position and invalid data type number.

  12. Fixed support for integers that are larger than Node.js’s 32-bit integer is capable of handling.

  13. Updated INSTALL to mention:

  14. Correct the error message text when attempting to set oracledb.oracleClientVersion.

node-oracledb v2.0.15 (15 Dec 2017) changes since node-oracledb version 1

  1. Release testing is now done for Node.js 4, 6, 8 and 9.

  2. Node-oracledb now uses the ODPI-C database abstraction library.

  3. Upgraded NAN build dependency to 2.8.

  4. Installation has significantly improved. Some pre-built binaries are available for convenience, or the add-on can be continue to built from source code. Refer to INSTALL.

    • Added utilities to /package for building binaries for distribution, and for installing them.

    • When building from source code:
      • Oracle header files are no longer needed.

      • The OCI_LIB_DIR and OCI_INC_DIR environment variables are not needed.

    • A single node-oracledb binary now works with any of the Oracle 11.2, 12.1 or 12.2 clients. This improves portability when the node-oracledb add-on is copied between machines. Applications should be tested with their target environment to make sure expected Oracle functionality is available.

    • At run time, users of macOS must put the Oracle client libraries in ~/lib or /usr/local/lib. Linux users of Instant Client RPMs must always set LD_LIBRARY_PATH or use ldconfig - the previous RPATH linking option is not available. Other Linux users should continue to use LD_LIBRARY_PATH or ldconfig. Windows users should continue to put Oracle client libraries in PATH.

    • On non-Windows platforms, if Oracle client libraries are not located in the system library search path (e.g. LD_LIBRARY_PATH), then node-oracledb attempts to use libraries in $ORACLE_HOME/lib.

    • A new Troubleshooting section was added to INSTALL.

    • Improvements were made to require(‘oracledb’) failure messages to help users resolve problems.

    • Changed the installation message prefix in binding.gyp from ‘node-oracledb’ to ‘oracledb’.

  5. Improved query handling:

    • Enhanced direct fetches to allow an unlimited number of rows to be fetched. This occurs when oracledb.maxRows = 0

    • Changed the default value of oracledb.maxRows to 0, meaning unlimited.

    • Replaced prefetchRows (used for internal fetch buffering and tuning) with a new property fetchArraySize. This affects direct fetches, ResultSet getRow() and queryStream().

    • getRows(numRows,...) internal fetch buffering is now only tuned by the numRows value.

    • Implemented getRow() in JavaScript for better performance.

  6. Tightened up checking on in-use ResultSets and Lobs to avoid leaks and threading issues by making sure the application has closed them before connections can be closed. The error DPI-1054 may now be seen if connections are attempted to be closed too early.

  7. Added support for fetching columns types LONG (as String) and LONG RAW (as Buffer). There is no support for streaming these types, so the value stored in the database may not be able to be completely fetched if Node.js and V8 memory limits are reached.

  8. Added support for TIMESTAMP WITH TIME ZONE date type. These are mapped to a Date object in node-oracledb using LOCAL TIME ZONE. The TIME ZONE component is not available in the Date object.

  9. Added support for ROWID data type. Data is fetched as a String.

  10. Added support for UROWID data type. Data is fetched as a String.

  11. Added query support for NCHAR and NVARCHAR2 columns. Note binding these types for DML may not insert data correctly, depending on the database character set and the database national character set.

  12. Added query support for NCLOB columns. NCLOB data can be streamed or fetched as String. Note binding NCLOB for DML may not insert data correctly, depending on the database character set and the database national character set.

  13. Removed node-oracledb size restrictions on LOB fetchAsString and fetchAsBuffer queries, and also on LOB binds. Node.js memory restrictions will still prevent large LOBs being manipulated in single chunks.

  14. In LOB binds, the bind val can now be a String when type is CLOB, and val can now be a Buffer when type is BLOB.

  15. Improved validation for invalid attribute and parameter values.

  16. The error parameter of function callbacks is now always null if no error occurred.

  17. Database error messages no longer have an extra newline.

  18. Statements that generate errors are now dropped from the statement cache. Applications running while table definitions change will no longer end up with unusable SQL statements due to stale cache entries. Note that Oracle best-practice is never to change table definitions while applications are executing.

  19. Prevent use of NaN with Oracle numbers to avoid data corruption.

  20. For LOB streaming, make sure ‘close’ is the very last event, and does not occur before an ‘error’ event.

  21. Fix duplicate ‘close’ event for error conditions when streaming LOBs in Node 8.

  22. connection.createLob() now uses Oracle Call Interface’s (OCI) underlying ‘cache’ mode.

  23. Lob.close() now marks LOBs invalid immediately rather than during the asynchronous portion of the close() method, so that all other attempts are no-ops.

  24. Relaxed the restriction preventing oracledb.connectionClass being used with dedicated connections; it previously gave ORA-56609. Now DRCP can now be used with dedicated connections but the CLIENT_DRIVER value in V$SESSION_CONNECT_INFO will not be set in this case. The recommendation is still to use a session pool when using DRCP.

  25. Fixed a crash with LOB out binds in DML RETURNING statements when the number of rows returned exceeds the number of rows originally allocated internally.

  26. Empty arrays can now be used in PL/SQL Collection Associative Array (Index-by) binds.

  27. Some NJS and DPI error messages and numbers have changed. This is particularly true of DPI errors due to the use of ODPI-C.

  28. Many new tests have been created.

  29. Updated examples for new functionality.

  30. Documentation has been updated and improved.

node-oracledb v2.0.15 (15 Dec 2017)

  1. The stated compatibility is now for Node.js 4, 6, 8 and 9.

  2. Improved query handling:

    • Enhanced direct fetches to allow an unlimited number of rows to be fetched. This occurs when oracledb.maxRows = 0.

    • Changed the default value of oracledb.maxRows to 0, meaning unlimited.

    • Replaced prefetchRows (used for internal fetch buffering and tuning) with a new property fetchArraySize. This affects direct fetches, ResultSet getRow() and queryStream().

    • getRows(numRows,...) internal fetch buffering is now only tuned by the numRows value.

    • Implemented getRow() in JavaScript for better performance.

    • Moved operations on REF CURSORS out of the main thread in order to improve performance and memory usage.

  3. Fixed proxy support in the binary installer.

  4. Ensured the callback error parameter is null, not undefined, when no error occurred.

  5. Improvements were made to require(‘oracledb’) failure messages to help users resolve installation and usage problems.

  6. Fixed compiler deprecation warnings regarding Nan::ForceSet.

node-oracledb v2.0.14 Development (20 Nov 2017)

  1. Added infrastructure to /package for creating binary installs. Updated INSTALL.md.

  2. Improved validation for invalid attribute and parameter values.

  3. In LOB binds, the bind “val” can now be a String when “type” is CLOB, and “val” can now be a Buffer when “type” is BLOB.

  4. Changed binding.gyp message prefix from ‘node-oracledb’ to ‘oracledb’.

  5. Fix compiler warning with va_start.

  6. Eliminate memory leak when processing result sets containing LOBs that require more than one fetch operation (regression from v1).

  7. Move fetch buffer allocation to reduce memory use for Result Sets (regression from v1).

  8. Upgraded NAN dependency from 2.5 to 2.8.

  9. Updated ODPI-C submodule:

    • Reinstate safe size limit for LOB bind to PL/SQL (node-oracledb regression from v1).

    • Fix valgrind byte overrun when loading libclntsh from $ORACLE_HOME.

    • Do not prevent connections from being explicitly closed when a fatal error has taken place.

    • Eliminate race condition on initialization. Add finalization code.

    • Eliminate use of OCI wrappers for use of mutexes, which improves performance (now uses native threading, for example, pthreads).

    • Prevent use of NaN with Oracle numbers to avoid data corruption.

    • Prevent ORA-1010 during connection ping to pre 10g Oracle Database.

    • Improve debug trace output format.

    • Prevent crash for DML RETURNING of variables that require dynamic binding.

  10. Updated examples to avoid “DPI-1054: connection cannot be closed when open statements or LOBs exist” and to avoid duplicate callbacks on stream errors.

  11. Check for JavaScript exceptions and if one is found, ensure that the error is passed correctly to the callback and is not raised when the C++ method has finished.

  12. Added code to handle invalid object properties.

  13. Make sure ‘close’ is the very last event, and doesn’t occur before an ‘error’ event. Also emit ‘close’ after ‘error’ event for queryStream().

  14. Changed default sample connect string to “localhost/orclpdb” which is the Oracle Database 12.2 default for pluggable databases.

  15. Moved NJS code from /src/njs/src to /src to remove obsolete directory nesting.

  16. Perform error cleanup as soon as possible in order to avoid possible race conditions when errors take place.

  17. Move operations on REF CURSORS out of the main thread in order to improve performance and memory usage.

  18. Relaxed the restriction preventing oracledb.connectionClass being used with dedicated connections; it previously gave ORA-56609. Now DRCP can now be used with dedicated connections but the CLIENT_DRIVER value in V$SESSION_CONNECT_INFO will not be set in this case. The recommendation is still to use a session pool when using DRCP.

  19. Tighten up checking on in-use ResultSets and Lobs to avoid leaks and threading issues by making sure the application has closed them before connections can be closed. The error DPI-1054 may now be seen if connections are attempted to be closed too early.

  20. On Windows, disable ODPI-C thread cleanup to resolve a thread timing issue, since Node.js creates all threads at startup and never terminates them.

  21. Added extra message text to NJS-045 to give potential causes for require(‘oracledb’) failures when the ODPI-C layer can’t detect the issue.

  22. Updated ODPI-C submodule: various changes including improved initialization error messages, and runtime-enabled debug tracing.

  23. Fix duplicate ‘close’ event for error conditions when streaming Lobs in Node 8.

  24. Fix LOB streaming ‘close’ and ‘end’ event order (regression from v1).

  25. Fixed crash with LOB out binds in DML RETURNING statements when the number of rows returned exceeds the number of rows originally allocated internally.

  26. Improve handling of invalid externalAuth, fetchAsString, and fetchAsBuffer attribute values.

  27. Fix support for connectionClass (regression from v1).

node-oracledb v2.0.13 Development (19 Jun 2017)

  1. Node-oracledb now uses the ODPI-C database abstraction library.

  2. Installation instructions have changed. Refer to INSTALL. Distribution is still via source code.

    Oracle header files are no longer needed. The OCI_LIB_DIR and OCI_INC_DIR environment variables are not needed.

    At run time, Oracle 11.2, 12.1 or 12.2 client libraries should still be in PATH (for Windows) or LD_LIBRARY_PATH (for Linux) or similar platform library loading path. Users of macOS must put the Oracle client libraries in ~/lib or /usr/local/lib. Linux users of Instant Client RPMs must always set LD_LIBRARY_PATH or use ldconfig - the previous RPATH linking option is not available.

    On non-Windows platforms, if Oracle client libraries are not located in the system library search path (e.g. LD_LIBRARY_PATH), then node-oracledb attempts to use libraries in $ORACLE_HOME/lib.

    A single node-oracledb binary now works with any of the Oracle client 11.2, 12.1 or 12.2 libraries. This improves portability when node-oracledb builds are copied between machines.

  3. Lob.close() now marks LOBs invalid immediately rather than during the asynchronous portion of the close() method, so that all other attempts are no-ops.

  4. Incorrect application logic in version 1 that attempted to close a connection while certain LOB, ResultSet or other database operations were still occurring gave an NJS-030, NJS-031 or NJS-032 “connection cannot be released” error. Now in version 2 the connection will be closed but any operation that relied on the connection being open will fail.

  5. Some NJS and DPI error messages and numbers have changed. This is particularly true of DPI errors due to the use of ODPI-C.

  6. Stated compatibility is now for Node.js 4, 6 and 8.

  7. Added support for fetching columns types LONG (as String) and LONG RAW (as Buffer). There is no support for streaming these types, so the value stored in the DB may not be able to be completely fetched if Node.js and V8 memory limits are reached.

  8. Added support for TIMESTAMP WITH TIME ZONE date type. These are mapped to a Date object in node-oracledb using LOCAL TIME ZONE. The TIME ZONE component is not available in the Date object.

  9. Added support for ROWID data type. Data is fetched as a String.

  10. Added support for UROWID data type. Data is fetched as a String.

  11. Added query support for NCHAR and NVARCHAR2 columns. Binding for DML may not insert data correctly, depending on the database character set and the database national character set.

  12. Added query support for NCLOB columns. NCLOB data can be streamed or fetched as String. Binding for DML may not insert data correctly, depending on the database character set and the database national character set.

  13. Removed node-oracledb size restrictions on LOB fetchAsString and fetchAsBuffer queries, and also on LOB binds. Node.js and V8 memory restrictions will still prevent large LOBs being manipulated in single chunks.

  14. Statements that generate errors are now dropped from the statement cache. Applications running while table definitions change will no longer end up with unusable SQL statements due to stale cache entries. Note that Oracle best-practice is never to change table definitions while applications are executing.

  15. Empty arrays can now be used in PL/SQL Collection Associative Array (Index-by) binds.

  16. connection.createLob() now uses OCI’s underlying ‘cache’ mode.

  17. Database errors no longer have an extra newline.

  18. Upgraded NAN dependency from 2.5 to 2.6.

node-oracledb v1.13.1 (12 Apr 2017)

  1. Fix regression with NULL values to PL/SQL procedures with multiple parameters.

node-oracledb v1.13.0 (15 Mar 2017)

  1. Added support for fetching BLOBs as Buffers, using fetchAsBuffer and fetchInfo.

  2. Improved PL/SQL Index-by array binding error messages based on PR #470 (Hariprasad Kulkarni).

  3. Fixed several crashes and a memory leak using CLOBs with fetchAsString.

  4. Fixed several issues including a crash using NULLs and empty strings for LOB BIND_INOUT binds.

  5. Automatically clean up sessions in the connection pool when they become unusable after an ORA-56600 occurs.

  6. Updated NAN dependency from 2.4 to 2.5.

node-oracledb v1.12.2 (21 Dec 2016)

  1. Fix memory allocation with Oracle 11g client libraries when querying CLOBs using fetchAsString and fetchInfo.

node-oracledb v1.12.1 Development (16 Dec 2016)

  1. Added support for fetching CLOBs as Strings, using fetchAsString and fetchInfo.

  2. Added BIND_INOUT support for temporary LOBs.

node-oracledb v1.12.0 Development (3 Dec 2016)

  1. Significantly enhanced LOB support:

    • Added BIND_IN support for DML

    • Added BIND_IN, BIND_OUT, BIND_INOUT support for PL/SQL

    • Added a connection.createLob() method to create temporary LOBs

    • Added a lob.close() method

    • Made enhancements to allow binding String or Buffer data as STRING or BUFFER to LOB database types

    • Writeable LOB Streams now conclude with a ‘close’ event

  2. Added a connection pool ‘ping’ feature controlled with oracledb.poolPingInterval and a corresponding createPool() option. This validates pooled connections when they are returned from a getConnection() call. Values are:

    • zero: always ping for every pooled getConnection()

    • negative: never ping

    • positive: time in seconds the connection must be idle in the pool before getConnection() does a ping. Default is 60 seconds

    The setting is a no-op when node-oracledb is built with Oracle Database 12.2 client libraries, where a new, lower-level OCI feature provides an always-on, lightweight connection check.

  3. Upgraded NAN dependency from 2.3 to 2.4.

  4. Stated compatibility is now for Node.js 0.12, 4, 6 and 7.

  5. Fixed return value of the DATE type bound as BIND_INOUT.

  6. Fixed passing NULL values bound as BIND_INOUT for several data types.

  7. Fixed compilation warnings with newer Node.js versions due to V8 deprecations.

  8. Fixed some Windows and OS X compilation warnings.

  9. Linted JavaScript files, standardizing code, example and test files.

  10. Updated various examples and created new ones.

  11. Updated README.md and api.md introductory examples, based on a patch proposed by Leigh Schrandt.

  12. Updated README.md thanks to Nick Heiner.

  13. Updated documentation links to point to the Oracle Database 12.2 documentation.

  14. Made some internal changes to the DPI layer to avoid name space collisions and fix session tagging. These are not visible/exposed through node-oracledb.

node-oracledb v1.11.0 (19 Aug 2016)

  1. Added a connection pool cache feature allowing pools to have aliases and be more easily used.

  2. Improved the bootstrap error message when the node-oracledb binary cannot be loaded.

  3. Fixed memory leaks with DATE and TIMESTAMP bind values.

  4. Fixed external authentication which broke in 1.10.

  5. Fixed metadata scale and precision values on AIX.

  6. Made an internal change to replace std::string.data() with std::string.c_str().

  7. Made an internal change to remove an unused parameter from the NJS_SET_EXCEPTION macro.

node-oracledb v1.10.1 (21 Jul 2016)

  1. Fixed a bug that prevented a null value being passed from JavaScript into an IN OUT bind.

  2. Fixed a memory leak introduced in 1.10 with REF CURSORs.

  3. Fixed a memory leak in error handling paths when using REF CURSORs.

  4. Made an internal change for queries selecting unsupported column types allowing them to report an error earlier.

  5. Made an internal change to use std::string& for string lengths.

  6. Fixed a compilation warning on Windows.

  7. Added a mocha configuration file for the test suite.

node-oracledb v1.10.0 (8 Jul 2016)

  1. Enhanced query and REF CURSOR metadata is available when a new oracledb.extendedMetaData or execute() option extendedMetaData property is true. (Leonardo Olmi).

  2. Fixed an issue preventing the garbage collector cleaning up when a query with LOBs is executed but LOB data isn’t actually streamed.

  3. Fixed a bug where an error event could have been emitted on a QueryStream instance prior to the underlying ResultSet having been closed. This would cause problems if the user tried to close the connection in the error event handler as the ResultSet could have prevented it.

  4. Fixed a bug where the public close() method was invoked on the ResultSet instance that underlies the QueryStream instance if an error occurred during a call to getRows(). The public method would have thrown an error had the QueryStream instance been created from a ResultSet instance via the toQueryStream() method. Now the underlying C++ layer’s close() method is invoked directly.

  5. Updated Pool._logStats() to throw an error instead of printing to the console if the pool is not valid.

  6. Report an error earlier when a named bind object is used in a bind-by-position context. A new error NJS-044 is returned. Previously errors like ORA-06502 were given.

  7. Added GitHub Issue and Pull Request templates.

  8. Some enhancements were made to the underlying DPI data access layer. These are not exposed to node-oracledb users.

    • Allow SYSDBA connections

    • Allow session tagging

    • Allow the character set and national character set to be specified via parameters to the DPI layer.

    • Support heterogeneous pools (in addition to existing homogeneous pools)

node-oracledb v1.9.3 (24 May 2016)

  1. Fix error with OCI_ERROR_MAXMSG_SIZE2 when building with Oracle Client 11.2.0.1 and 11.2.0.2.

node-oracledb v1.9.2) (23 May 2016)

  1. Fix results.metaData for queries with {resultSet: true}.

node-oracledb v1.9.1 (18 May 2016)

  1. Upgraded to NAN 2.3 for Node 6 support.

  2. Added a persistent reference to JavaScript objects during Async operations to prevent crashes due to premature garbage collection.

  3. Added a persistent reference to the internal Lob buffer to prevent premature garbage collection.

  4. Fixed memory leaks when using ResultSets.

  5. Fixed memory leak with the Pool queue timer map.

  6. Fixed memory release logic when querying LOBs and an error occurs.

  7. Improved some null pointer checking.

  8. Altered some node-oracledb NJS-xyz error message text for consistency.

  9. Improved validation for fetchInfo usage.

  10. Increased the internal buffer size for Oracle Database error messages.

  11. Call pause() internally when closing a query Stream with _close().

  12. Fixed a symbol redefinition warning for DATA_BLOB when compiling on Windows.

  13. The test suite is no longer installed with npm install oracledb. The tests remain available in GitHub.

node-oracledb v1.9.0 Development (19 Apr 2016)

  1. Added Promise support. All asynchronous functions can now return promises. By default the standard Promise library is used for Node 0.12, 4 and 5. This can be overridden.

  2. Added a toQueryStream() method for ResultSets, letting REF CURSORS be transformed into Readable Streams.

  3. Added an experimental query Stream _close() method. It allows query streams to be closed without needing to fetch all the data. It is not for production use.

  4. Added aliases pool.close() and connection.close() for pool.terminate() and connection.release() respectively.

  5. Some method parameter validation checks, such as the number or types of parameters, will now throw errors synchronously instead of returning errors via the callback.

  6. Removed an extra call to getRows() made by queryStream() at end-of-fetch.

  7. Some random crashes caused by connections being garbage collected while still in use should no longer occur.

  8. Regularized NJS error message capitalization.

node-oracledb v1.8.0 (24 Mar 2016)

  1. Added connection.queryStream() for returning query results using a Node Readable Stream (Sagie Gur-Ari).

  2. Connection strings requesting DRCP server can now only be used with a node-oracledb connection pool. They will give ORA-56609 when used with oracledb.getConnection().

  3. Set the internal driver name to node-oracledb : 1.8.0. This is visible to DBAs, for example in V$SESSION_CONNECT_INFO.

  4. Added up-time to pool queue statistics.

  5. Fixed creation of Windows debug builds.

  6. Bumped NAN dependency to NAN 2.2.

  7. Added .editorconfig file (Sagie Gur-Ari).

  8. Improved test date and time checks (Antonio Bustos).

  9. Improved some parameter checks for maxArraySize and maxSize.

node-oracledb v1.7.1 (1 Mar 2016)

  1. Made public methods over-writable in the new JavaScript layer.

node-oracledb v1.7.0 (29 Feb 2016)

  1. Added a JavaScript wrapper around the C++ API to allow for easier extension.

  2. Added a connection pool queue configured with queueRequests and queueTimeout attributes. The queue is enabled by default.

  3. Added connection pool option attribute _enableStats and method pool._logStats() to display pool and queue statistics. Note: these may change in future.

  4. Added “bind by position” syntax for PL/SQL Index-by array binds (Dieter Oberkofler).

  5. Allowed node-oracledb class instances to be tested with ‘instanceof’.

  6. Fixed some bind issues when bind values are not set by the database.

  7. Replaced internal usage of info.This() with info.Holder() for Node.js 0.10.

  8. Fixed some compilation warnings with some Windows compilers.

node-oracledb v1.6.0 (30 Jan 2016)

  1. Added support for binding PL/SQL Collection Associative Array (Index-by) types containing numbers and strings (Dieter Oberkofler).

  2. Fixed a LOB problem causing an uncaught error to be generated.

  3. Removed the ‘close’ event that was incorrectly emitted for LOB Writable Streams. The Node.js Streams documentation specifies it only for Readable Streams.

  4. Updated the LOB examples to show connection release.

  5. Updated README so first-time users see pre-requisites earlier.

  6. Extended the OS X install instructions with a way to install that does not need root access for Instant Client 11.2 on El Capitan.

  7. Added RPATH link option when building on OS X in preparation for future client.

  8. README updates (Kevin Sheedy).

node-oracledb v1.5.0 (21 Dec 2015)

  1. Treat Oracle Database ‘Success With Info’ warnings as success (Francisco Trevino).

  2. Extend rollback-on-connection-release with 11g Oracle Clients to occur for all non-query executions. (Not needed with 12c clients).

  3. Updated OS X install instructions to work on El Capitan.

  4. Display an error and prevent connection release while database calls are in progress.

  5. Fixed intermittent crash while selecting data from CLOB column.

  6. Fixed crash when trying to set invalid values for connection properties.

node-oracledb v1.4.0 (17 Nov 2015)

  1. Upgraded NAN dependency to version 2 allowing node-oracledb to build with Node 0.10, 0.12, 4 and 5 (Richard Natal). Note: a compiler supporting C++11 is required to build with Node 4 and 5.

  2. Fixed a cursor leak when statement execution fails.

  3. Fixed a crash when accessing Pool properties on Windows.

  4. Added a run-script ‘testWindows’ target for Windows testing. See test/README.md.

  5. Fixed compilation warnings with recent compilers.

node-oracledb v1.3.0 (15 Oct 2015)

  1. Added a oracledb.oracleClientVersion property giving the version of the Oracle Client library, and a connection.oracleServerVersion property giving the Oracle Database version.

  2. Fixed result.outBinds corruption after PL/SQL execution.

  3. Fixed null output from DML RETURNING with Oracle Database 11.2 when the string is of size 4000.

  4. Fixed default bind direction to be BIND_IN.

node-oracledb v1.2.0 (25 Sep 2015)

  1. Added support for RAW data type (Bruno Jouhier).

  2. Added a type property to the Lob class to distinguish CLOB and BLOB types.

  3. Changed write-only attributes of Connection objects to work with console.log(). Note the attribute values will show as null. Refer to the documentation.

  4. Added a check to make sure maxRows is greater than zero for non-ResultSet queries.

  5. Improved installer messages for Oracle client header and library detection on Linux, OS X and Solaris.

  6. Optimized CLOB memory allocation to account for different database-to-client character set expansions.

  7. Fixed a crash while reading a LOB from a closed connection.

  8. Fixed a crash when selecting multiple rows with LOB values (Bruno Jouhier).

  9. Corrected the order of Stream ‘end’ and ‘close’ events when reading a LOB (Bruno Jouhier).

  10. Fixed AIX-specific REF CURSOR related failures.

  11. Fixed intermittent crash while setting fetchAsString, and incorrect output while reading the value.

  12. Added a check to return an NJS error when an invalid DML RETURN statement does not give an ORA error.

  13. Removed non-portable memory allocation for queries that return NULL.

  14. Fixed encoding issues with several files that caused compilation warnings in some Windows environments.

  15. Made installation halt sooner for Node.js versions currently known to be unusable.

  16. Fixed a typo in examples/dbmsoutputgetline.js.

  17. Windows install instruction updates (Bill Christo).

node-oracledb v1.1.0 (3 Sep 2015)

  1. Enhanced pool.release() to drop the session if it is known to be unusable, allowing a new session to be created.

  2. Optimized query memory allocation to account for different database-to-client character set expansions.

  3. Fixed build warnings on Windows with VS 2015.

  4. Fixed truncation issue while fetching numbers as strings.

  5. Fixed AIX-specific failures with queries and RETURNING INTO clauses.

  6. Fixed a crash with NULL or uninitialized REF CURSOR OUT bind variables.

  7. Fixed potential memory leak when connecting throws an error.

  8. Added a check to throw an error sooner when a CURSOR type is used for IN or IN OUT binds. (Support is pending).

  9. Temporarily disabling setting lobPrefetchSize.

node-oracledb v1.0.0 (17 Aug 2015)

  1. Implemented Stream interface for CLOB and BLOB types, adding support for LOB queries, inserts, and PL/SQL LOB bind variables

  2. Added fetchAsString and execute() option fetchInfo properties to allow numbers, dates and ROWIDs to be fetched as strings.

  3. Added support for binding DATE, TIMESTAMP and TIMESTAMP WITH LOCAL TIME ZONE as DATE to DML RETURNING (aka RETURNING INTO) type.

  4. The internal Oracle client character set is now always set to AL32UTF8.

  5. The test suite and example scripts database credentials can now be set via environment variables.

  6. Fixed issues with database-to-client character set conversion by allocating extra memory to allow for character expansion.

  7. Fixed a crash with ResultSet and unsupported column data types.

  8. Fixed a crash allocating memory for large maxRows values.

  9. Fixed a bug preventing closing of a ResultSet when getRow() or getRows() returned an error.

  10. Fixed date precision issues affecting insert and query.

  11. Fixed BIND_OUT bind type not defaulting to STRING.

  12. Fixed INSERT of a date when the SQL has a RETURNING INTO clause and the bind style is array format.

  13. Improved RETURNING INTO handling of unsupported types and sizes.

  14. Correctly throw an error when array and named bind syntaxes are mixed together.

node-oracledb v0.7.0 (20 Jul 2015)

  1. Added result set support for fetching large data sets.

  2. Added REF CURSOR support for returning query results from PL/SQL.

  3. Added row prefetching support.

  4. Added a test suite.

  5. Fixed error handling for SQL statements using RETURNING INTO.

  6. Fixed INSERT of a date when the SQL has a RETURNING INTO clause.

  7. Renumbered the values used by the Oracledb Constants.

node-oracledb v0.6.0 (26 May 2015)

  1. Node-oracledb now builds with Node.js 0.10, Node.js 0.12 and io.js (Richard Natal).

  2. Fixed naming of autoCommit in examples.

node-oracledb v0.5.0 (5 May 2015)

  1. Changed the isAutoCommit attribute name to autoCommit.

  2. Changed the isExternalAuth attribute name to externalAuth.

  3. Fixed outBinds array counting to not give empty array entries for IN binds.

  4. Added support for DML RETURNING bind variables.

  5. Rectified the error message for invalid type properties.

node-oracledb v0.4.2 (28 Mar 2015)

  1. node-oracledb is now officially installable from https://www.npmjs.com/package/oracledb (Tim Branyen).

  2. Added metadata support. Query column names are now provided in the execute() callback result object.

  3. Require a more recent version of Node.js 0.10.

  4. Changed the default Instant Client directory on AIX from /opt/oracle/instantclient_12_1 to /opt/oracle/instantclient.

node-oracledb v0.4.1 (13 Mar 2015)

  1. Added support for External Authentication.

  2. The isAutoCommit flags now works with query execution. This is useful in cases where multiple DML statements are executed followed by a SELECT statement. This can be used to avoid a round trip to the database that an explicit call to commit() would add.

  3. Added AIX build support to package.json (Hannes Prirschl).

  4. Improved errors messages when setting out of range property values.

  5. Fixed a bug: When terminate() of a connection pool fails because connections have not yet been closed, subsequent use of release() to close those connections no longer gives an error ORA-24550: Signal Received.

  6. Some code refactoring (Krishna Narasimhan).

node-oracledb v0.3.1 (16 Feb 2015)

  1. Added Windows build configuration (Rinie Kervel).

  2. Added Database Resident Connection Pooling (DRCP) support.

  3. Made an explicit connection release() do a rollback, to be consistent with the implicit release behavior.

  4. Made install on Linux look for Oracle libraries in a search order.

  5. Added RPATH support on Linux.

  6. Changed default Oracle Instant client paths to /opt/oracle/instantclient and C:oracleinstantclient

  7. Added a compile error message “Oracle 11.2 or later client libraries are required for building” if attempting to build with older Oracle Client libraries.

  8. Fixed setting the isAutoCommit property.

  9. Fixed a crash using pooled connections on Windows.

  10. Fixed a crash querying object types.

  11. Fixed a crash doing a release after a failed terminate. (The Pool is still unusable - this will be fixed later)

node-oracledb v0.2.4 (20 Jan 2015 - initial release)

Initial Features include:

  1. SQL and PL/SQL Execution

  2. Binding using JavaScript objects or arrays

  3. Query results as JavaScript objects or array

  4. Conversion between JavaScript and Oracle types

  5. Transaction Management

  6. Connection Pooling

  7. Statement Caching

  8. Client Result Caching

  9. End-to-end tracing

  10. High Availability Features

    • Fast Application Notification (FAN)

    • Runtime Load Balancing (RLB)

    • Transparent Application Failover (TAF)