-
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. UseObject.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.
-
Added support for querying and binding Oracle Database Objects and Collections.
-
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
.
-
-
Added support for Implicit Results, allowing query results to be returned from PL/SQL without needing parameters or bind variables.
-
Added asynchronous method
lob.getData()
to return all data from a Lob readable stream. -
Added a new
dbTypeName
attribute toextendedMetaData
output. It contains the name of the type the column has in the database, such as "VARCHAR2". -
Enhanced BIND_IN of PL/SQL Collection Associative Arrays (Index-by) so a bind definition object can be omitted (see #1039).
-
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).
-
-
Added
connection.currentSchema
for setting the schema qualifier to be used when a qualifier is omitted in SQL statements. This is an efficient alternative toALTER SESSION SET CURRENT_SCHEMA
. -
Renumbered node-oracledb Type Constants and Oracle Database Type Constants to allow for future enhancements.
-
Introduced Query
outFormat
Constantsoracledb.OUT_FORMAT_ARRAY
andoracledb.OUT_FORMAT_OBJECT
. The previous constantsoracledb.ARRAY
andoracledb.OBJECT
are deprecated but still usable. -
Improved the performance of
oracledb.outFormat
modeoracledb.OUT_FORMAT_OBJECT
. -
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).
-
Change the
events
default to true. -
Updated the JavaScript syntax in class implementations.
-
Class methods are now configurable. For example via
Object.defineProperty
. -
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.
-
-
SODA changes:
-
Added SODA bulk insert methods
sodaCollection.insertMany()
andsodaCollection.insertManyAndGet()
. -
Document that the general SODA API is out of Preview status when using Oracle Client 18.5 or Oracle Client 19.3, or later. The new node-oracledb 4.0 methods
sodaCollection.insertMany()
andsodaCollection.insertManyAndGet()
are in Preview status and should not be used in production. -
Corrected the type of
sodaCollection.metaData
. It is now an Object, as was documented. -
Corrected processing of the
force
option in SODAsodaCollection.dropIndex()
. -
Corrected the error message parameter number for SODA
sodaDatabase.getCollectionNames()
.
-
-
Fixed writing of multi-byte characters to CLOBs when multiple writes are required.
-
Fixed a crash occurring when draining the connection pool (ODPI-C change).
-
Corrected
pool.status
to be read-only, as was documented. -
Updated documentation.
-
Added new tests.
-
Added new examples. Updated existing examples to the Node.js 8 Async/Await style of programming.
-
Fixed a bug causing CQN crashes when multiple queries are registered (ODPI-C change).
-
Fixed a CQN race condition to prevent a crash when a multiple
connection.unsubscribe()
calls are made on the same subscription. -
Improved validation of
executeMany()
arguments to prevent a crash. -
Standardized error message for SODA
createCollection()
with invalid metadata. -
Corrected the DPI-1050 error text displayed when the Oracle Client libraries are too old (ODPI-C change).
-
Allow
npm run buildbinary
to succeed even ifgit
is not available. -
Use a relative URL for the ODPI-C submodule to make cloning from oss.oracle.com also use ODPI-C from oss.oracle.com
- Rebuild npm package to resolve Linux binary build issue.
-
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. -
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.
-
Support explicit dropping of connections from connection pools.
-
Support passing parameters in
oracledb.getConnection()
(such aspoolAlias
,tag
and proxy authentication credentials) for use with the pool cache. -
Support the combination of a user proxy and external authentication with standalone connections (ODPI-C change).
-
Defer initialization of the Oracle Client libraries until the first use of
oracledb.getConnection()
,oracledb.createPool()
,oracledb.oracleClientVersion
, ororacledb.oracleClientVersionString
.If the Oracle Client cannot be loaded,
getConnection()
andcreatePool()
will return an error via the callback. Accessingoracledb.oracleClientVersion
ororacledb.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 needing Oracle Client 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.
-
Support fetching XMLTYPE columns in queries. They will return as String limited to the VARCHAR2 length.
-
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 onenode_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.
-
Fixed a crash with high frequency notifications from CQN (#1009).
-
Fixed
poolPingInterval
with Oracle client libraries 12.2 or later (ODPI-C change). -
Fixed an issue with
poolPingInterval
that could cause usable pooled connections to be unnecessarily dropped byconnection.close()
. (ODPI-C change). -
Fixed a memory leak under certain cirumstances when pooled connections are released back to the pool. (ODPI-C change)
-
Display correct error message for SODA
createIndex()
when no parameter is passed. -
Fixed some SODA stability issues (node-oracledb and ODPI-C changes).
-
Improved the statement error white list to avoid unnecessarily dropping statements from the statement cache (ODPI-C change).
-
Made internal changes to fix V8 deprecation compilation warnings with Node.js 10.12, and fixed other static analysis warnings.
-
Improve validation for SODA
createDocument()
arguments. -
Stated compatibility is now for Node.js 6, 8, 10, and 11.
-
Upgraded NAN dependency from 2.10 to 2.11.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.
-
Added a
drainTime
argument topool.close()
, allowing pools to be force-closed after a specified number of seconds. PR #950 (Danilo Silva). -
Added a
connection.callTimeout
property to interrupt long running database calls, available when using Oracle client libraries version 18.1, or later. -
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. -
Added binary installer basic proxy authentication support. Reuse
npm config
proxy. PR #919 (Cemre Mengu). -
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 (e.g. ORA-02396), or are explicitly closed by DBAs (e.g. ORA-00028). (ODPI-C change). -
Removed the connection pool
queueRequests
property. Nowpool.getConnection()
calls are always queued if the pool is fully in use. -
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 preventspool.getConnection()
returning ORA-24418 when the connection pool needs to grow and Oracle client 18 libraries are being used. -
Unused properties in objects such as the
execute()
result are no longer set. Previously some were set toundefined
. -
On Windows, Oracle Client libraries in
node_modules\oracledb\build\Release
adjacent to the oracledb.node binary will now be used in preference to those in PATH. (ODPI-C change). -
Change the binary package filename format from '...-node-vXX...' to to '...-node-abiXX...' to reduce Node version and ABI confusion.
-
Eliminated a memory leak when fetching LOBs and more than one internal fetch occurs.
-
Test updates.
-
Documentation updates, including an attribute type correction from PR #970 (Cemre Mengu)
-
Examples were added and updated.
-
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.
-
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.
-
Added support for Oracle Database Continuous Query Notifications (CQN), allowing JavaScript methods to be called when database changes are committed.
-
Added support to
fetchAsString
andfetchInfo
for fetching RAW columns as STRING (hex-encoded). -
Added Windows support for building binary packages for self-hosting on internal networks. PR #891 (Danilo Silva).
-
Eliminated a memory leak when binding LOBs as
oracledb.BIND_INOUT
. -
Added an error message indicating that
batchErrors
anddmlRowCounts
can only be used with INSERT, UPDATE, DELETE and MERGE statements. -
Fixed a bug that caused
queryStream()
to emit multiple close events in Node.js 10. -
Fixed a crash when getting the list of names for an undefined object with Node.js 6.
-
Remove deprecated
Buffer()
function in tests in order to eliminate a deprecation warning with Node.js 10. -
Upgraded NAN dependency from 2.8 to 2.10.
-
Made some internal changes to fix NAN 2.10 deprecations: Replaced
v8::String::Utf8Value
withNan::Uft8String
. ReplacedMakeCallback()
withrunInAsyncScope()
. -
Mention that
queueRequests
is deprecated and will be removed in a future version; connection pool queuing will always be enabled in that future version.
-
Added
oracledb.oracleClientVersionString
andconnection.oracleServerVersionString
to complement the existing numeric properties. -
Added
oracledb.edition
to support Edition-Based Redefinition. This removes the need to use anALTER SESSION
command orORA_EDITION
environment variable. -
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 anoraaccess.xml
file to enable event handling. -
Added
connection.changePassword()
for changing passwords, and also added support for changing the password duringoracledb.getConnection()
. -
Added
connection.executeMany()
for efficient batch DML (e.g. INSERT, UPDATE and DELETE) and PL/SQL execution with multiple records. -
Added
connection.getStatementInfo()
to find information about a SQL statement without executing it. -
Added
connection.ping()
to support system health checks. -
Added support for binding RAW types into Buffers in DML RETURNING statements.
-
Created GitHub 'pages' for hosting documentation. See:
-
Simplified the binary installer messages to reduce user uncertainty.
-
Improved the text for the NJS-045 runtime loader failure error.
-
Made the implementations of
connection.close()
andpool.close()
the primary code paths in place of their respective aliasesconnection.release()
andpool.terminate()
. -
An empty object for
fetchInfo
no longer produces an error. -
Updated database abstraction layer to ODPI-C 2.3
-
Fixed compilation warnings on Windows.
-
Updated the node-oracledb implementation to replace V8 deprecations.
-
Fixed regression with end-to-end tracing attributes not being set.
-
Fix binary installer proxy 403 (Bruno Jouhier)
- Fixed regression with
queryStream()
in Node 4 & 6 (#847).
-
Added support for privileged standalone connections: SYSDBA, SYSOPER, SYSASM, SYSBACKUP, SYSDG, SYSKM, and SYSRAC
-
Improved the Error object with new
errorNum
andoffset
properties for Oracle errors. -
Added new
versionString
andversionSuffix
attributes to aid showing node-oracledb version and release status. -
Added
connectionString
as an alias forconnectString
inoracledb.createPool()
andoracledb.getConnection()
(Sagie Gur-Ari). -
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.
-
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.
-
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.
-
-
Simplified query direct fetch implementation and improved performance by reusing ResultSet code.
-
Exceptions are no longer raised when accessing attributes on closed Connections, Pools, Lobs or ResultSets.
-
ResultSets are now closed on error to free resources earlier.
-
Improved NJS-010 message content by adding the position and invalid data type number.
-
Fixed support for integers that are larger than Node.js's 32-bit integer is capable of handling.
-
Updated INSTALL to mention:
- The yum.oracle.com Node.js RPM Packages for Oracle Linux
- The Oracle mirror of github.com/oracle.
-
Correct the error message text when attempting to set
oracledb.oracleClientVersion
.
-
Release testing is now done for Node.js 4, 6, 8 and 9.
-
Node-oracledb now uses the ODPI-C database abstraction library.
-
Upgraded NAN build dependency to 2.8.
-
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
andOCI_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 setLD_LIBRARY_PATH
or use ldconfig - the previous RPATH linking option is not available. Other Linux users should continue to useLD_LIBRARY_PATH
or ldconfig. Windows users should continue to put Oracle client libraries inPATH
. -
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 add 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'.
-
-
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 propertyfetchArraySize
. This affects direct fetches, ResultSetgetRow()
andqueryStream()
. -
getRows(numRows,...)
internal fetch buffering is now only tuned by thenumRows
value. -
Implemented
getRow()
in JavaScript for better performance.
-
-
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.
-
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.
-
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.
-
Added support for ROWID data type. Data is fetched as a String.
-
Added support for UROWID data type. Data is fetched as a String.
-
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.
-
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.
-
Removed node-oracledb size restrictions on LOB
fetchAsString
andfetchAsBuffer
queries, and also on LOB binds. Node.js memory restrictions will still prevent large LOBs being manipulated in single chunks. -
In LOB binds, the bind
val
can now be a String whentype
is CLOB, andval
can now be a Buffer whentype
is BLOB. -
Improved validation for invalid attribute and parameter values.
-
The error parameter of function callbacks is now always null if no error occurred.
-
Database error messages no longer have an extra newline.
-
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.
-
Prevent use of NaN with Oracle numbers to avoid data corruption.
-
For LOB streaming, make sure 'close' is the very last event, and doesn't occur before an 'error' event.
-
Fix duplicate 'close' event for error conditions when streaming LOBs in Node 8.
-
connection.createLob()
now uses Oracle Call Interface's (OCI) underlying 'cache' mode. -
Lob.close()
now marks LOBs invalid immediately rather than during the asynchronous portion of theclose()
method, so that all other attempts are no-ops. -
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 theCLIENT_DRIVER
value inV$SESSION_CONNECT_INFO
will not be set in this case. The recommendation is still to use a session pool when using DRCP. -
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.
-
Empty arrays can now be used in PL/SQL Collection Associative Array (Index-by) binds.
-
Some NJS and DPI error messages and numbers have changed. This is particularly true of DPI errors due to the use of ODPI-C.
-
Many new tests have been created.
-
Updated examples for new functionality.
-
Documentation has been updated and improved.
-
The stated compatibility is now for Node.js 4, 6, 8 and 9.
-
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 propertyfetchArraySize
. This affects direct fetches, ResultSetgetRow()
andqueryStream()
. -
getRows(numRows,...)
internal fetch buffering is now only tuned by thenumRows
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.
-
-
Fixed proxy support in the binary installer.
-
Ensured the callback error parameter is null, not undefined, when no error occurred.
-
Improvements were made to
require('oracledb')
failure messages to help users resolve installation and usage problems. -
Fixed compiler deprecation warnings regarding
Nan::ForceSet
.
-
Added infrastructure to /package for creating binary installs. Updated INSTALL.md.
-
Improved validation for invalid attribute and parameter values.
-
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.
-
Changed binding.gyp message prefix from 'node-oracledb' to 'oracledb'.
-
Fix compiler warning with va_start
-
Eliminate memory leak when processing result sets containing LOBs that require more than one fetch operation (regression from v1).
-
Move fetch buffer allocation to reduce memory use for Result Sets (regression from v1).
-
Upgraded NAN dependency from 2.5 to 2.8.
-
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, e.g. 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.
-
Updated examples to avoid "DPI-1054: connection cannot be closed when open statements or LOBs exist" and to avoid duplicate callbacks on stream errors.
-
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.
-
Added code to handle invalid object properties.
-
Make sure 'close' is the very last event, and doesn't occur before an 'error' event. Also emit 'close' after 'error' event for
queryStream()
-
Changed default sample connect string to
"localhost/orclpdb"
which is the Oracle Database 12.2 default for pluggable databases. -
Moved NJS code from
/src/njs/src
to/src
to remove obsolete directory nesting. -
Perform error cleanup as soon as possible in order to avoid possible race conditions when errors take place.
-
Move operations on REF CURSORS out of the main thread in order to improve performance and memory usage.
-
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 theCLIENT_DRIVER
value inV$SESSION_CONNECT_INFO
will not be set in this case. The recommendation is still to use a session pool when using DRCP. -
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.
-
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.
-
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. -
Updated ODPI-C submodule: various changes including improved initialization error messages, and runtime-enabled debug tracing.
-
Fix duplicate 'close' event for error conditions when streaming Lobs in Node 8.
-
Fix LOB streaming 'close' and 'end' event order (regression from v1).
-
Fixed crash with LOB out binds in DML RETURNING statements when the number of rows returned exceeds the number of rows originally allocated internally.
-
Improve handling of invalid
externalAuth
,fetchAsString
, andfetchAsBuffer
attribute values. -
Fix support for
connectionClass
(regression from v1).
-
Node-oracledb now uses the ODPI-C database abstraction library.
-
Installation instructions have changed. Refer to INSTALL. Distribution is still via source code.
Oracle header files are no longer needed. The
OCI_LIB_DIR
andOCI_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) orLD_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 setLD_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.
-
Lob.close()
now marks LOBs invalid immediately rather than during the asynchronous portion of theclose()
method, so that all other attempts are no-ops. -
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.
-
Some NJS and DPI error messages and numbers have changed. This is particularly true of DPI errors due to the use of ODPI-C.
-
Stated compatibility is now for Node.js 4, 6 and 8.
-
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.
-
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.
-
Added support for ROWID data type. Data is fetched as a String.
-
Added support for UROWID data type. Data is fetched as a String.
-
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.
-
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.
-
Removed node-oracledb size restrictions on LOB
fetchAsString
andfetchAsBuffer
queries, and also on LOB binds. Node.js and V8 memory restrictions will still prevent large LOBs being manipulated in single chunks. -
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.
-
Empty arrays can now be used in PL/SQL Collection Associative Array (Index-by) binds.
-
connection.createLob()
now uses OCI's underlying 'cache' mode. -
Database errors no longer have an extra newline.
-
Upgraded NAN dependency from 2.5 to 2.6.
- Fix regression with NULL values to PL/SQL procedures with multiple parameters.
-
Added support for fetching BLOBs as Buffers, using
fetchAsBuffer
andfetchInfo
. -
Improved PL/SQL Index-by array binding error messages based on PR #470 (Hariprasad Kulkarni).
-
Fixed several crashes and a memory leak using CLOBs with
fetchAsString
. -
Fixed several issues including a crash using NULLs and empty strings for LOB
BIND_INOUT
binds. -
Automatically clean up sessions in the connection pool when they become unusable after an ORA-56600 occurs.
-
Updated NAN dependency from 2.4 to 2.5.
- Fix memory allocation with Oracle 11g client libraries when querying CLOBs using
fetchAsString
andfetchInfo
.
-
Added support for fetching CLOBs as Strings, using
fetchAsString
andfetchInfo
. -
Added
BIND_INOUT
support for temporary LOBs.
-
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
orBUFFER
to LOB database types - Writeable LOB Streams now conclude with a 'close' event
- Added
-
Added a connection pool 'ping' feature controlled with
oracledb.poolPingInterval
and a correspondingcreatePool()
option. This validates pooled connections when they are returned from agetConnection()
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.
- zero: always ping for every pooled
-
Upgraded NAN dependency from 2.3 to 2.4.
-
Stated compatibility is now for Node.js 0.12, 4, 6 and 7.
-
Fixed return value of the DATE type bound as
BIND_INOUT
. -
Fixed passing NULL values bound as
BIND_INOUT
for several data types. -
Fixed compilation warnings with newer Node.js versions due to V8 deprecations.
-
Fixed some Windows and OS X compilation warnings.
-
Linted JavaScript files, standardizing code, example and test files.
-
Updated various examples and created new ones.
-
Updated README.md and api.md introductory examples, based on a patch proposed by Leigh Schrandt.
-
Updated README.md thanks to Nick Heiner.
-
Updated documentation links to point to the Oracle Database 12.2 documentation.
-
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.
-
Added a connection pool cache feature allowing pools to have aliases and be more easily used.
-
Improved the bootstrap error message when the node-oracledb binary cannot be loaded.
-
Fixed memory leaks with
DATE
andTIMESTAMP
bind values. -
Fixed external authentication which broke in 1.10.
-
Fixed metadata
scale
andprecision
values on AIX. -
Made an internal change to replace
std::string.data()
withstd::string.c_str()
. -
Made an internal change to remove an unused parameter from the
NJS_SET_EXCEPTION
macro.
-
Fixed a bug that prevented a null value being passed from JavaScript into an IN OUT bind.
-
Fixed a memory leak introduced in 1.10 with REF CURSORs.
-
Fixed a memory leak in error handling paths when using REF CURSORs.
-
Made an internal change for queries selecting unsupported column types allowing them to report an error earlier.
-
Made an internal change to use
std::string&
for string lengths. -
Fixed a compilation warning on Windows.
-
Added a mocha configuration file for the test suite.
-
Enhanced query and REF CURSOR metadata is available when a new
oracledb.extendedMetaData
orexecute()
optionextendedMetaData
property istrue
. (Leonardo Olmi). -
Fixed an issue preventing the garbage collector cleaning up when a query with LOBs is executed but LOB data isn't actually streamed.
-
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.
-
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 togetRows()
. The public method would have thrown an error had the QueryStream instance been created from a ResultSet instance via thetoQueryStream()
method. Now the underlying C++ layer'sclose()
method is invoked directly. -
Updated
Pool._logStats()
to throw an error instead of printing to the console if the pool is not valid. -
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.
-
Added GitHub Issue and Pull Request templates.
-
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)
- Allow
- Fix error with
OCI_ERROR_MAXMSG_SIZE2
when building with Oracle client 11.2.0.1 and 11.2.0.2.
- Fix
results.metaData
for queries with{resultSet: true}
.
-
Upgraded to NAN 2.3 for Node 6 support.
-
Added a persistent reference to JavaScript objects during Async operations to prevent crashes due to premature garbage collection.
-
Added a persistent reference to the internal Lob buffer to prevent premature garbage collection.
-
Fixed memory leaks when using ResultSets.
-
Fixed memory leak with the Pool queue timer map.
-
Fixed memory release logic when querying LOBs and an error occurs.
-
Improved some null pointer checking.
-
Altered some node-oracledb NJS-xyz error message text for consistency.
-
Improved validation for
fetchInfo
usage. -
Increased the internal buffer size for Oracle Database error messages.
-
Call
pause()
internally when closing a query Stream with_close()
. -
Fixed a symbol redefinition warning for
DATA_BLOB
when compiling on Windows. -
The test suite is no longer installed with
npm install oracledb
. The tests remain available in GitHub.
-
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.
-
Added a
toQueryStream()
method for ResultSets, letting REF CURSORS be transformed into Readable Streams. -
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. -
Added aliases
pool.close()
andconnection.close()
forpool.terminate()
andconnection.release()
respectively. -
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.
-
Removed an extra call to
getRows()
made byqueryStream()
at end-of-fetch. -
Some random crashes caused by connections being garbage collected while still in use should no longer occur.
-
Regularized NJS error message capitalization.
-
Added
connection.queryStream()
for returning query results using a Node Readable Stream (Sagie Gur-Ari). -
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()
. -
Set the internal driver name to
node-oracledb : 1.8.0
. This is visible to DBAs, for example inV$SESSION_CONNECT_INFO
. -
Added up-time to pool queue statistics.
-
Fixed creation of Windows debug builds.
-
Bumped NAN dependency to NAN 2.2.
-
Added .editorconfig file (Sagie Gur-Ari).
-
Improved test date and time checks (Antonio Bustos).
-
Improved some parameter checks for
maxArraySize
andmaxSize
.
- Made public methods over-writable in the new JavaScript layer
-
Added a JavaScript wrapper around the C++ API to allow for easier extension.
-
Added a connection pool queue configured with
queueRequests
andqueueTimeout
attributes. The queue is enabled by default. -
Added connection pool option attribute
_enableStats
and methodpool._logStats()
to display pool and queue statistics. Note: these may change in future. -
Added "bind by position" syntax for PL/SQL Index-by array binds (Dieter Oberkofler).
-
Allowed node-oracledb class instances to be tested with 'instanceof'.
-
Fixed some bind issues when bind values are not set by the database.
-
Replaced internal usage of
info.This()
withinfo.Holder()
for Node.js 0.10. -
Fixed some compilation warnings with some Windows compilers.
-
Added support for binding PL/SQL Collection Associative Array (Index-by) types containing numbers and strings (Dieter Oberkofler).
-
Fixed a LOB problem causing an uncaught error to be generated.
-
Removed the 'close' event that was incorrectly emitted for LOB Writable Streams. The Node.js Streams documentation specifies it only for Readable Streams.
-
Updated the LOB examples to show connection release.
-
Updated README so first-time users see pre-requisites earlier.
-
Extended the OS X install instructions with a way to install that doesn't need root access for Instant Client 11.2 on El Capitan.
-
Added RPATH link option when building on OS X in preparation for future client.
-
README updates (Kevin Sheedy)
-
Treat Oracle Database 'Success With Info' warnings as success (Francisco Trevino).
-
Extend rollback-on-connection-release with 11g Oracle Clients to occur for all non-query executions. (Not needed with 12c clients).
-
Updated OS X install instructions to work on El Capitan.
-
Display an error and prevent connection release while database calls are in progress.
-
Fixed intermittent crash while selecting data from CLOB column.
-
Fixed crash when trying to set invalid values for connection properties.
-
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.
-
Fixed a cursor leak when statement execution fails.
-
Fixed a crash when accessing Pool properties on Windows.
-
Added a run-script 'testWindows' target for Windows testing. See test/README.md
-
Fixed compilation warnings with recent compilers.
-
Added a
oracledb.oracleClientVersion
property giving the version of the Oracle client library, and aconnection.oracleServerVersion
property giving the Oracle Database version. -
Fixed
result.outBinds
corruption after PL/SQL execution. -
Fixed null output from DML RETURNING with Oracle Database 11.2 when the string is of size 4000.
-
Fixed default bind direction to be
BIND_IN
.
-
Added support for RAW data type (Bruno Jouhier).
-
Added a
type
property to the Lob class to distinguish CLOB and BLOB types. -
Changed write-only attributes of Connection objects to work with
console.log()
. Note the attribute values will show asnull
. Refer to the documentation. -
Added a check to make sure
maxRows
is greater than zero for non-ResultSet queries. -
Improved installer messages for Oracle client header and library detection on Linux, OS X and Solaris.
-
Optimized CLOB memory allocation to account for different database-to-client character set expansions.
-
Fixed a crash while reading a LOB from a closed connection.
-
Fixed a crash when selecting multiple rows with LOB values (Bruno Jouhier).
-
Corrected the order of Stream 'end' and 'close' events when reading a LOB (Bruno Jouhier).
-
Fixed AIX-specific REF CURSOR related failures.
-
Fixed intermittent crash while setting
fetchAsString
, and incorrect output while reading the value. -
Added a check to return an NJS error when an invalid DML RETURN statement does not give an ORA error.
-
Removed non-portable memory allocation for queries that return NULL.
-
Fixed encoding issues with several files that caused compilation warnings in some Windows environments.
-
Made installation halt sooner for Node.js versions currently known to be unusable.
-
Fixed a typo in
examples/dbmsoutputgetline.js
-
Windows install instruction updates (Bill Christo)
-
Enhanced pool.release() to drop the session if it is known to be unusable, allowing a new session to be created.
-
Optimized query memory allocation to account for different database-to-client character set expansions.
-
Fixed build warnings on Windows with VS 2015.
-
Fixed truncation issue while fetching numbers as strings.
-
Fixed AIX-specific failures with queries and RETURNING INTO clauses.
-
Fixed a crash with NULL or uninitialized REF CURSOR OUT bind variables.
-
Fixed potential memory leak when connecting throws an error.
-
Added a check to throw an error sooner when a CURSOR type is used for IN or IN OUT binds. (Support is pending).
-
Temporarily disabling setting lobPrefetchSize
-
Implemented Stream interface for CLOB and BLOB types, adding support for LOB queries, inserts, and PL/SQL LOB bind variables
-
Added
fetchAsString
andexecute()
optionfetchInfo
properties to allow numbers, dates and ROWIDs to be fetched as strings. -
Added support for binding DATE, TIMESTAMP and TIMESTAMP WITH LOCAL TIME ZONE as
DATE
to DML RETURNING (aka RETURNING INTO)type
. -
The internal Oracle client character set is now always set to AL32UTF8.
-
The test suite and example scripts database credentials can now be set via environment variables.
-
Fixed issues with database-to-client character set conversion by allocating extra memory to allow for character expansion.
-
Fixed a crash with
ResultSet
and unsupported column data types. -
Fixed a crash allocating memory for large
maxRows
values. -
Fixed a bug preventing closing of a
ResultSet
whengetRow()
orgetRows()
returned an error. -
Fixed date precision issues affecting insert and query.
-
Fixed
BIND_OUT
bindtype
not defaulting toSTRING
. -
Fixed INSERT of a date when the SQL has a RETURNING INTO clause and the bind style is array format.
-
Improved RETURNING INTO handling of unsupported types and sizes.
-
Correctly throw an error when array and named bind syntaxes are mixed together.
-
Added result set support for fetching large data sets.
-
Added REF CURSOR support for returning query results from PL/SQL.
-
Added row prefetching support.
-
Added a test suite.
-
Fixed error handling for SQL statements using RETURNING INTO.
-
Fixed INSERT of a date when the SQL has a RETURNING INTO clause.
-
Renumbered the values used by the Oracledb Constants.
-
Node-oracledb now builds with Node.js 0.10, Node.js 0.12 and io.js (Richard Natal).
-
Fixed naming of
autoCommit
in examples.
-
Changed the
isAutoCommit
attribute name toautoCommit
. -
Changed the
isExternalAuth
attribute name toexternalAuth
. -
Fixed
outBinds
array counting to not give empty array entries for IN binds. -
Added support for DML RETURNING bind variables.
-
Rectified the error message for invalid type properties.
-
node-oracledb is now officially installable from https://www.npmjs.com/package/oracledb (Tim Branyen)
-
Added metadata support. Query column names are now provided in the
execute()
callback result object. -
Require a more recent version of Node.js 0.10.
-
Changed the default Instant Client directory on AIX from /opt/oracle/instantclient_12_1 to /opt/oracle/instantclient.
-
Added support for External Authentication.
-
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 tocommit()
would add. -
Added AIX build support to package.json (Hannes Prirschl).
-
Improved errors messages when setting out of range property values.
-
Fixed a bug: When
terminate()
of a connection pool fails because connections have not yet been closed, subsequent use ofrelease()
to close those connections no longer gives an error "ORA-24550: Signal Received". -
Some code refactoring (Krishna Narasimhan).
-
Added Windows build configuration (Rinie Kervel).
-
Added Database Resident Connection Pooling (DRCP) support.
-
Made an explicit connection
release()
do a rollback, to be consistent with the implicit release behavior. -
Made install on Linux look for Oracle libraries in a search order.
-
Added RPATH support on Linux.
-
Changed default Oracle Instant client paths to /opt/oracle/instantclient and C:\oracle\instantclient
-
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.
-
Fixed setting the
isAutoCommit
property. -
Fixed a crash using pooled connections on Windows.
-
Fixed a crash querying object types.
-
Fixed a crash doing a release after a failed terminate. (The Pool is still unusable - this will be fixed later)
Initial Features include:
-
SQL and PL/SQL Execution
-
Binding using JavaScript objects or arrays
-
Query results as JavaScript objects or array
-
Conversion between JavaScript and Oracle types
-
Transaction Management
-
Connection Pooling
-
Statement Caching
-
Client Result Caching
-
End-to-end tracing
-
High Availability Features
-
Fast Application Notification (FAN)
-
Runtime Load Balancing (RLB)
-
Transparent Application Failover (TAF)
-