https://blogs.oracle.com/opal/entry/node_oracledb_1_10_has
node-oracledb 1.10がご利用いただけるようになりました。変更点をご紹介します。
oracledb - Oracle Database driver by Oracle Corp
https://www.npmjs.com/package/oracledb
- Leonardoからのプルリクエストのおかげで、メタデータのクエリが機能強化されました。
extended metaData #386
我々が引き継いで実装を微調整することを親切にも許してくれました。
https://github.com/oracle/node-oracledb/pull/386
Leonardo
https://github.com/leolmi
新しいboolean型のoracledb.extendedMetaData
属性もしくは対応するexecute()
オプション属性のextendedMetaData
がtrueの場合、クエリのための追加のメタデータとREF CURSOR列がmetaDataオブジェクトで利用可能です。
extendedMetaData
例として、DEPARTMENTS表が以下のような場合を考えます。
https://github.com/oracle/node-oracledb/blob/master/doc/api.md#propdbextendedmetadata
extendedMetaData(execute() : Options)
https://github.com/oracle/node-oracledb/blob/master/doc/api.md#propexecextendedmetadata
このとき、node-oracledbでのクエリでは以下のような拡張メタデータを返します。SQL> desc departments
Name Null? Type
----------------------------------------- -------- ----------------------------
DEPARTMENT_ID NOT NULL NUMBER(4)
DEPARTMENT_NAME NOT NULL VARCHAR2(30)
MANAGER_ID NUMBER(6)
LOCATION_ID NUMBER(4)
利用可能な属性はデータベース型によって様々であることがわかります。属性の説明はmetaDataのドキュメントにあります。[ { name: 'DEPARTMENT_ID',
fetchType:
2002
,
dbType:
2
,
precision:
4
,
scale:
0
,
nullable:
false
},
{ name: 'DEPARTMENT_NAME',
fetchType:
2001
,
dbType:
1
,
byteSize:
30
,
nullable:
false
},
{ name: 'MANAGER_ID',
fetchType:
2002
,
dbType:
2
,
precision:
6
,
scale:
0
,
nullable:
true
},
{ name: 'LOCATION_ID',
fetchType:
2002
,
dbType:
2
,
precision:
4
,
scale:
0
,
nullable:
true
} ]
metaData
extendedMetaDataの値にかかわらず、よく使われる列名は常にmetaDataで利用できます。これは以前のバージョンから変わりません。
https://github.com/oracle/node-oracledb/blob/master/doc/api.md#execmetadata
メタデータのdbType
とfetchType
という属性値はそれぞれ、新たなDB_TYPE_* 定数と既存のnode-oracledb型定数で表現されます。
Oracle Database Type Constants
メタデータのタイプをチェックする際、みなさんのコードでこれらの定数を使っている必要があります。
https://github.com/oracle/node-oracledb/blob/master/doc/api.md#oracledbconstantsdbtype
Node-oracledb Type Constants
https://github.com/oracle/node-oracledb/blob/master/doc/api.md#oracledbconstantsnodbtype - 余分なメタデータをオプションにし、デフォルトでオフにしたり、データ型として文字列ではなく数字を利用したりしている理由は、一般的なユースケース、標準機能としてのエクスペリエンス、パフォーマンス、などについて議論を繰り返した結果です。 この機能強化の結果、みなさんのアプリケーションのメンテナンスが容易になり、より強力になると思っています。
- LOBを伴うクエリ時にLOBデータがストリーミングされない場合に、ガベージコレクタがクリーンアップできない問題を解決しました。
- 名前付きバインドオブジェクトを位置によるバインド(bind-by-position)コンテキストで使用した場合に、エラー(新しいエラーNJS-044)を返すようになりました。以前は、想定される属性が見つからず、バインド設定がデフォルトで最終的にデフォルトのままだったので、ORA-06502のようなエラーを返していました。引き続き、位置によるバインド(bind-by-position)で無名オブジェクトを使用することもできます。以下はその例です。
- 根底にあるResultSetがクローズされる前にQueryStreamインスタンスでエラーイベントが発生した場合の不具合を修正しました。ユーザがエラー・イベントハンドラで接続をクローズしようとした場合、ResultSetが接続クローズを妨げるため、問題が発生する可能性がありました。
- getRows呼び出し中にエラーが発生した場合、QueryStreamインスタンスの基礎となるResultSetインスタンスでパブリックなcloseメソッドを呼び出したとき不具合を修正しました。QueryStreamインスタンスがtoQueryStreamメソッドを使ってResultSetインスタンスから生成されると、このパブリックなメソッドはエラーを送出します。Cレイヤーのcloseメソッドの呼び出しは直接呼び出されます。
Pool._logStats
をアップデートし、プールが正しくない場合にコンソールへ表示するのではなく、エラーを送出するようにしました。
- GitHub Issue and Pull Requestテンプレートを追加しました。
GitHub Issue and PR templates
https://github.com/oracle/node-oracledb/tree/master/.github - 新しいInstant Client 12.1リリースに対応した、OS Xへのインストール手順を更新しました。
- AIX、Solaris x64に対応したインストール手順を追加しました。
- 基礎となるDPIデータアクセス層に対する機能強化を実施しました。
https://github.com/oracle/node-oracledb/tree/master/src/dpi
この機能強化はnode-oracledbを使っていないDPIの利用者とともに実施しました。この変更によって、潜在的な、ユーザーに見える、node-oracledbの機能強化のための基礎が築かれます。- SYSDBA接続を許可します
- セッションのタグ付けを許可します
- 文字セットと各国文字セットをDPI総へのパラメータを使って指定します
- (既存の均質なプールに加え)異種混在のプールをサポートします
var sql = "begin myproc(:1, :2, :3); end;" ; var binds = [ id, name , { type: oracledb.STRING, dir: oracledb.BIND_OUT } ]; |
Resources
node-oracledbに関する問題や質問があれば、GitHubに投稿してください。みなさまからの投稿がadd-onに対する作業のスケジューリングの助けになります。よろしくお願いします。node-oracledb : Issues
https://github.com/oracle/node-oracledb/issues
node-oracledbのインストール手順
https://github.com/oracle/node-oracledb/blob/master/INSTALL.md
node-oracledbのドキュメント
https://github.com/oracle/node-oracledb/blob/master/doc/api.md
0 件のコメント:
コメントを投稿