26
26
27
27
const oracledb = require ( 'oracledb' ) ;
28
28
const should = require ( 'should' ) ;
29
+ const events = require ( 'events' ) ;
29
30
const dbconfig = require ( './dbconfig.js' ) ;
30
31
const testsUtil = require ( './testsUtil.js' ) ;
31
32
@@ -85,15 +86,16 @@ describe('224. cqn01.js', function() {
85
86
}
86
87
} ) ; // after()
87
88
88
- it ( '224.1' , async ( ) => {
89
+ it ( '224.1 client initiated CQN ' , async ( ) => {
89
90
try {
90
- const TABLE = 'nodb_tab_cqn_01 ' ;
91
+ const TABLE = 'nodb_tab_cqn_001 ' ;
91
92
let sql =
92
93
`CREATE TABLE ${ TABLE } (
93
94
k NUMBER
94
95
)` ;
95
96
let plsql = testsUtil . sqlCreateTable ( TABLE , sql ) ;
96
97
await conn . execute ( plsql ) ;
98
+ const eventEmitter = new events . EventEmitter ( ) ;
97
99
98
100
const myCallback = function ( message ) {
99
101
// should.strictEqual(message.type, oracledb.SUBSCR_EVENT_TYPE_QUERY_CHANGE);
@@ -103,6 +105,7 @@ describe('224. cqn01.js', function() {
103
105
// should.strictEqual(table.name, tableName);
104
106
// should.strictEqual(table.operation, oracledb.CQN_OPCODE_INSERT);
105
107
console . log ( message ) ;
108
+ eventEmitter . emit ( "received" ) ;
106
109
} ;
107
110
108
111
const options = {
@@ -114,14 +117,32 @@ describe('224. cqn01.js', function() {
114
117
clientInitiated : true
115
118
} ;
116
119
117
- await conn . subscribe ( 'nodb_sub_01' , options ) ;
120
+ console . log ( "Message 1:" ) ;
121
+ await conn . subscribe ( 'nodb_sub_001' , options ) ;
118
122
119
123
sql = `INSERT INTO ${ TABLE } VALUES (101)` ;
120
124
await conn . execute ( sql ) ;
121
125
126
+ sql = `INSERT INTO ${ TABLE } VALUES (99)` ;
127
+ await conn . execute ( sql ) ;
128
+
129
+ sql = `INSERT INTO ${ TABLE } VALUES (102)` ;
130
+ await conn . execute ( sql ) ;
131
+
122
132
await conn . commit ( ) ;
123
133
124
- await conn . unsubscribe ( 'nodb_sub_01' ) ;
134
+ await new Promise ( function ( resolve , reject ) {
135
+ const timeout = setTimeout ( function ( ) {
136
+ reject ( new Error ( "Timed out!" ) ) ;
137
+ } , 25000 ) ;
138
+ eventEmitter . on ( "received" , function ( ) {
139
+ console . log ( "Received message!" ) ;
140
+ clearTimeout ( timeout ) ;
141
+ resolve ( )
142
+ } ) ;
143
+ } ) ;
144
+
145
+ await conn . unsubscribe ( 'nodb_sub_001' ) ;
125
146
126
147
sql = `DROP TABLE ${ TABLE } PURGE` ;
127
148
await conn . execute ( sql ) ;
@@ -130,4 +151,71 @@ describe('224. cqn01.js', function() {
130
151
}
131
152
132
153
} ) ; // 224.1
154
+
155
+ it ( '224.2 previous CQN' , async ( ) => {
156
+ try {
157
+ const TABLE = 'nodb_tab_cqn_002' ;
158
+ let sql =
159
+ `CREATE TABLE ${ TABLE } (
160
+ k NUMBER
161
+ )` ;
162
+ let plsql = testsUtil . sqlCreateTable ( TABLE , sql ) ;
163
+ await conn . execute ( plsql ) ;
164
+
165
+ const eventEmitter = new events . EventEmitter ( ) ;
166
+
167
+ const myCallback = function ( message ) {
168
+ // should.strictEqual(message.type, oracledb.SUBSCR_EVENT_TYPE_QUERY_CHANGE);
169
+ // should.strictEqual(message.registered, true);
170
+ // const table = message.queries[0].tables[0];
171
+ // const tableName = dbconfig.user.toUpperCase() + '.' + TABLE.toUpperCase();
172
+ // should.strictEqual(table.name, tableName);
173
+ // should.strictEqual(table.operation, oracledb.CQN_OPCODE_INSERT);
174
+ console . log ( message ) ;
175
+ eventEmitter . emit ( "received" ) ;
176
+ } ;
177
+
178
+ const options = {
179
+ callback : myCallback ,
180
+ sql : `SELECT * FROM ${ TABLE } WHERE k > :bv` ,
181
+ binds : { bv : 100 } ,
182
+ timeout : 20 ,
183
+ qos : oracledb . SUBSCR_QOS_QUERY | oracledb . SUBSCR_QOS_ROWIDS
184
+ } ;
185
+
186
+ console . log ( "Message 2:" ) ;
187
+ await conn . subscribe ( 'nodb_sub_002' , options ) ;
188
+
189
+ await testsUtil . sleep ( ) ;
190
+
191
+ sql = `INSERT INTO ${ TABLE } VALUES (101)` ;
192
+ await conn . execute ( sql ) ;
193
+
194
+ sql = `INSERT INTO ${ TABLE } VALUES (99)` ;
195
+ await conn . execute ( sql ) ;
196
+
197
+ sql = `INSERT INTO ${ TABLE } VALUES (102)` ;
198
+ await conn . execute ( sql ) ;
199
+
200
+ await conn . commit ( ) ;
201
+
202
+ await new Promise ( function ( resolve , reject ) {
203
+ const timeout = setTimeout ( function ( ) {
204
+ reject ( new Error ( "Timed out!" ) ) ;
205
+ } , 25000 ) ;
206
+ eventEmitter . on ( "received" , function ( ) {
207
+ console . log ( "Received message!" ) ;
208
+ clearTimeout ( timeout ) ;
209
+ resolve ( )
210
+ } ) ;
211
+ } ) ;
212
+
213
+ await conn . unsubscribe ( 'nodb_sub_002' ) ;
214
+
215
+ sql = `DROP TABLE ${ TABLE } PURGE` ;
216
+ await conn . execute ( sql ) ;
217
+ } catch ( err ) {
218
+ should . not . exist ( err ) ;
219
+ }
220
+ } ) ; // 224.2
133
221
} ) ;
0 commit comments