27
27
*
28
28
*****************************************************************************/
29
29
30
+ var async = require ( 'async' ) ;
30
31
var oracledb = require ( 'oracledb' ) ;
31
32
var dbConfig = require ( './dbconfig.js' ) ;
32
33
var stream = require ( 'stream' ) ;
33
34
34
- oracledb . getConnection (
35
- {
36
- user : dbConfig . user ,
37
- password : dbConfig . password ,
38
- connectString : dbConfig . connectString
39
- } ,
40
- function ( err , connection )
41
- {
42
- if ( err ) { console . error ( err . message ) ; return ; }
35
+ var doconnect = function ( cb ) {
36
+ oracledb . getConnection ( dbConfig , cb ) ;
37
+ } ;
43
38
44
- if ( connection . oracleServerVersion < 1201000200 ) {
45
- console . error ( 'This example only works with Oracle Database 12.1.0.2 or greater' ) ;
46
- process . exit ( 1 ) ;
47
- }
48
-
49
- doInsert (
50
- connection ,
51
- JSON . stringify ( { "userId" : 2 , "userName" : "Bob" , "location" : "USA" } ) ,
52
- function ( err )
53
- {
54
- if ( err ) {
55
- console . error ( err . message ) ;
56
- doRelease ( connection ) ;
57
- return ;
58
- }
59
-
60
- doQuery (
61
- connection ,
62
- function ( err , result )
63
- {
64
- if ( err )
65
- console . error ( err . message ) ;
66
- else
67
- console . log ( 'Query results: ' , result ) ;
68
- doRelease ( connection ) ;
69
- } ) ;
70
- } ) ;
39
+ var dorelease = function ( conn ) {
40
+ conn . release ( function ( err ) {
41
+ if ( err )
42
+ console . error ( err . message ) ;
71
43
} ) ;
44
+ } ;
72
45
73
- function doInsert ( connection , data , cb )
74
- {
75
- connection . execute (
46
+ var checkver = function ( conn , cb ) {
47
+ if ( conn . oracleServerVersion < 1201000200 ) {
48
+ return cb ( new Error ( 'This example only works with Oracle Database 12.1.0.2 or greater' ) , conn ) ;
49
+ } else {
50
+ return cb ( null , conn ) ;
51
+ }
52
+ }
53
+
54
+ var doinsert = function ( conn , cb ) {
55
+ var data = { "userId" : 2 , "userName" : "Bob" , "location" : "USA" } ;
56
+ var s = JSON . stringify ( data ) ;
57
+ conn . execute (
76
58
"INSERT INTO j_purchaseorder_c (po_document) VALUES (EMPTY_CLOB()) RETURNING po_document INTO :lobbv" ,
77
59
{ lobbv : { type : oracledb . CLOB , dir : oracledb . BIND_OUT } } ,
78
60
{ autoCommit : false } , // a transaction needs to span the INSERT and pipe()
79
61
function ( err , result )
80
62
{
81
- if ( err ) { return cb ( err ) ; }
63
+ if ( err ) { return cb ( err , conn ) ; }
82
64
if ( result . rowsAffected != 1 || result . outBinds . lobbv . length != 1 ) {
83
- return cb ( new Error ( 'Error getting a LOB locator' ) ) ;
65
+ return cb ( new Error ( 'Error getting a LOB locator' ) , conn ) ;
84
66
}
85
-
86
67
var lob = result . outBinds . lobbv [ 0 ] ;
87
68
lob . on (
88
69
'error' ,
89
70
function ( err ) {
90
- return cb ( err ) ;
71
+ return cb ( err , conn ) ;
91
72
} ) ;
92
-
93
73
lob . on (
94
74
'finish' ,
95
75
function ( )
96
76
{
97
- connection . commit (
77
+ conn . commit (
98
78
function ( err )
99
79
{
100
80
if ( err )
101
- return cb ( err ) ;
81
+ return cb ( err , conn ) ;
102
82
else {
103
83
console . log ( "Data inserted successfully." ) ;
104
- return cb ( ) ;
84
+ return cb ( null , conn ) ;
105
85
}
106
86
} ) ;
107
87
} ) ;
108
88
109
89
var inStream = new stream . Readable ( ) ;
110
90
inStream . _read = function noop ( ) { } ;
111
- inStream . push ( data ) ;
91
+ inStream . push ( s ) ; // Data to insert
112
92
inStream . push ( null ) ;
113
93
114
94
inStream . on (
115
95
'error' ,
116
96
function ( err ) {
117
- return cb ( err ) ;
97
+ return cb ( err , conn ) ;
118
98
} ) ;
119
99
inStream . pipe ( lob ) ;
120
100
} ) ;
121
101
}
122
102
123
- function doQuery ( connection , cb )
124
- {
125
- connection . execute (
103
+ var dojsonquery = function ( conn , cb ) {
104
+ conn . execute (
126
105
"SELECT po_document FROM j_purchaseorder_c WHERE JSON_EXISTS (po_document, '$.location')" ,
127
106
function ( err , result )
128
107
{
129
- if ( err ) { return cb ( err ) ; }
130
- if ( result . rows . length === 0 ) { return cb ( new Error ( 'No results' ) ) ; }
108
+ if ( err ) { return cb ( err , conn ) ; }
109
+ if ( result . rows . length === 0 ) { return cb ( new Error ( 'No results' ) , conn ) ; }
131
110
132
111
var clob = '' ;
133
112
var lob = result . rows [ 0 ] [ 0 ] ; // just show first record
134
- if ( lob === null ) { return cb ( new Error ( 'CLOB was NULL' ) ) ; }
113
+ if ( lob === null ) { return cb ( new Error ( 'CLOB was NULL' ) , conn ) ; }
135
114
lob . setEncoding ( 'utf8' ) ; // set the encoding so we get a 'string' not a 'buffer'
136
115
lob . on ( 'data' ,
137
116
function ( chunk )
@@ -141,22 +120,42 @@ function doQuery(connection, cb)
141
120
lob . on ( 'close' ,
142
121
function ( )
143
122
{
144
- return cb ( null , JSON . parse ( clob ) ) ;
123
+ var js = JSON . parse ( clob ) ;
124
+ console . log ( 'Query results: ' , js ) ;
125
+ return cb ( null , conn ) ;
145
126
} ) ;
146
127
lob . on ( 'error' ,
147
128
function ( err )
148
129
{
149
- return cb ( err ) ;
130
+ return cb ( err , conn ) ;
150
131
} ) ;
151
132
} ) ;
152
133
}
153
134
154
- function doRelease ( connection )
155
- {
156
- connection . release (
157
- function ( err ) {
135
+ var dorelationalquery = function ( conn , cb ) {
136
+ conn . execute (
137
+ "SELECT JSON_VALUE(po_document, '$.location') FROM j_purchaseorder_c" ,
138
+ function ( err , result )
139
+ {
158
140
if ( err ) {
159
- console . error ( err . message ) ;
141
+ return cb ( err , conn ) ;
142
+ } else {
143
+ console . log ( 'Query results: ' , result . rows [ 0 ] [ 0 ] ) ; // just show first record
144
+ return cb ( null , conn ) ;
160
145
}
161
146
} ) ;
162
147
}
148
+
149
+ async . waterfall (
150
+ [
151
+ doconnect ,
152
+ checkver ,
153
+ doinsert ,
154
+ dojsonquery ,
155
+ dorelationalquery
156
+ ] ,
157
+ function ( err , conn ) {
158
+ if ( err ) { console . error ( "In waterfall error cb: ==>" , err , "<==" ) ; }
159
+ if ( conn )
160
+ dorelease ( conn ) ;
161
+ } ) ;
0 commit comments