https://blogs.oracle.com/opal/entry/node_oracledb_1_9_1
新しいnode-oracledb 1.9.1では、Promiseのサポート、Node.js 6(もちろん以前のリリースも)のサポート、そして安定性の向上のための修正を含んでいます。
Promises in node-oracledbその他の機能については以下でご紹介します。1.9.0 developmentブランチに対してフィードバック下さった皆様に感謝します。みなさまのおかげでリリースできました。
https://github.com/oracle/node-oracledb/blob/master/doc/api.md#promiseoverview
node-oracledb 1.9.1はNPMからご利用頂けます。インストール、ドキュメントは以下のリンクからどうぞ。
oracledb - Oracle Database driver by Oracle Corp.
https://www.npmjs.com/package/oracledb
Installing node-oracledb
https://github.com/oracle/node-oracledb/blob/master/INSTALL.md
node-oracledb 1.9: Documentation for the Oracle Database Node.js Add-on
https://github.com/oracle/node-oracledb/blob/master/doc/api.md
node-oracledb 1.8から1.9.1での変更点
- Promiseのサポート
Promises in node-oracledb
全ての非同期関数はPromiseを返すことができます。非同期関数がコールバック関数パラメータを伴って渡されると、いつものコールバックフローを使いますが、コールバックパラメータを含めない場合、Promiseを返します。examplesディレクトリにサンプルがあります。promises.jsとwebapppromises.jsをご覧ください。
https://github.com/oracle/node-oracledb/blob/master/doc/api.md#promiseoverview
oracle/node-oracledb/examples
Node.jsの Promise を使うと、多くのNode.jsユーザーが快適なプログラミング・パラダイムを実現できます。node-oracledb用のPromiseラッパーを自作され、NPMで公開されていた方もいらっしゃいますが、公式に実装したのでPromiseを皆様が利用できるようになっています。PromiseのデフォルトライブラリをNode 0.12、4、5、6で使っていますが、ご自身の実装を取り込みたい場合には簡単にオーバーライドできます。これはネイティブ・ライブラリがないNode 0.10をお使いの場合に有用です。
https://github.com/oracle/node-oracledb/tree/master/examples
promises.js
https://github.com/oracle/node-oracledb/tree/master/examples/promises.js
webapppromises.js
https://github.com/oracle/node-oracledb/tree/master/examples/webapppromises.js - ResultSetの新しいメソッド
toQueryStream()
toQueryStream()
https://github.com/oracle/node-oracledb/blob/master/doc/api.md#toquerystream
refcursortoquerystream.js
トップレベルのクエリからResultSetsと一緒に使うこともできます。ResultSetsをストリームに変換します。しかし。既存のconnection.queryStream() メソッドのほうが、このシナリオではより使いやすいでしょう。
https://github.com/oracle/node-oracledb/tree/master/examples/refcursortoquerystream.js
connection#queryStream()
https://github.com/oracle/node-oracledb/blob/master/doc/api.md#querystream
pool.terminate()
、connection.release()
それぞれに対応するエイリアス:pool.close() と connection.close()
pool.close()
これを使うと、接続のリリース、接続の切断、ResultSetのクローズに使用するメソッドを覚えやすくなるでしょう。単にclose()を使えばよいのです。
https://github.com/oracle/node-oracledb/blob/master/doc/api.md#poolclose
connection.close()
https://github.com/oracle/node-oracledb/blob/master/doc/api.md#connectionclose
- 実験的なクエリ
querystream._close()
メソッドの追加
これを使うと全てのデータをフェッチせずにクエリストリームを閉じることができます。現在のNode Streams実装への割り込みの安全性について情報が少ないため、このメソッドは実験的(Experimental)とマークされています。
必要に応じて、_close()
を呼ぶとpause()
が呼ばれます。Node 0.10では、たとえ以前にストリームを一時停止したとしても、一時停止イベントを受け取る可能性があります。これはNode 0.10ではisPaused()
の呼び出しをサポートしていないためです。
- Node 6向けにNAN 2.3へアップデート
これにより、Node 6で発生しうるNAN 2.2以前で生成した非推奨の警告(deprecation warnings)が出なくなります。
Nodeの旧バージョンではもちろんまだNAN 2.2以前を利用することができます。
- JavaScriptオブジェクトのGCが早すぎた場合に発生する、迷惑かつ一見ランダムなクラッシュを軽減
多くのアプリケーションは、通常オブジェクトを使わなくなるまで関連するJavaScriptオブジェクトを保持するのですが、一部のアプリケーションではそうではありません。早くアプリケーションが終了したり、負荷がかかっていたりすると、時期尚早なGCが後者のようなアプリケーションのスクリプトに影響する可能性があります。
類似の変更をLOBインサート時の使われるLobバッファに対しても実施しました。
- メモリ利用の改善
- ResultSet利用時のメモリリークを修正しました
- Poolキュータイマーマップでのメモリリークを修正しました
- LOBのクエリとエラー発生時のメモリリリースロジックを修正しました
- end-of-fetch時のqueryStram()による余計なgetRows() の呼び出しを削除
- エラーの変更
- メソッドのパラメータ検証、例えばパラメータ個数やパラメータのデータ型のチェックで、コールバックを使ってエラーを返すのではなく、同汽笛にエラーを返すようにしました。
fetchInfo
利用時の検証を改善しました.- Oracle Databaseのエラーメッセージのための内部バッファサイズを増やしました
- node-oracledb NJS-xyz エラーメッセージテキストを変更しました
- テスト・スィートの手動インストール化
テスト・スィートは(今後も)ジョジョに大きなサイズになっていきますが、ほとんどのユーザーにとっては、使わないテストスィートの自動インストールは時間の無駄です。GitHubのクローンを使ってテストを実行することはこれまで通り可能です。アップデートされたテストのREADMEにこの手順が記載されています。
https://github.com/oracle/node-oracledb/blob/master/test/README.md
テストを移動し、どこでも実行できるようにするためには、パス接頭辞無しでテストのrequire('oracledb')
呼び出しを残し、READMEに記述の通り、NODE_PATH
を設定する必要があります。
DATA_BLOB
のシンボル名の再定義の警告を修正
Windowsでコンパイルする際の、DATA_BLOB
のシンボル名の再定義の警告を修正しました
What's Next?
ウィッシュリストにはnode-oracledbに対するエンハンスメントがまだたくさんあります。みなさんのプライオリティをお寄せ下さい。問題や質問はGitHubに投稿してください。みなさまからの情報がnode-oracledbの作業のスケジューリングを助けてくれます。お待ちしています。
Issues
https://github.com/oracle/node-oracledb/issues