Skip to content

Commit 523d296

Browse files
committed
Fixed a regression in AQ that caused the deq functions to return an invalid object in 6.4 instead of undefined, which was returned in earlier releases (See Issue #1656)
1 parent 29cbe3c commit 523d296

File tree

5 files changed

+26
-1
lines changed

5 files changed

+26
-1
lines changed

doc/src/release_notes.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ Thick Mode Changes
3838
Additionally, this fix resolves the issue related to JS numbers with
3939
precisions where `2.3` is returned as `2.300003`.
4040

41+
#) Fixed a regression that caused ``deqOne()``and ``deqMany()`` to return an
42+
invalid object in 6.4 instead of undefined, which was returned in the
43+
previous releases.
44+
See `Issue #1656 <https://github.com/oracle/node-oracledb/issues/1656>`__.
45+
4146
node-oracledb `v6.4.0 <https://github.com/oracle/node-oracledb/compare/v6.3.0...v6.4.0>`__ (11 Mar 2024)
4247
--------------------------------------------------------------------------------------------------------
4348

lib/aqQueue.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ class AqQueue {
181181
async deqOne() {
182182
errors.assertArgCount(arguments, 0, 0);
183183
const msgImpls = await this._impl.deq(1);
184-
if (msgImpls)
184+
if (msgImpls.length > 0)
185185
return this._makeMessage(msgImpls[0]);
186186
}
187187

src/njsAqQueue.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,10 @@ static bool njsAqQueue_deqAsync(njsBaton* baton)
357357
if (baton->numMsgProps == 1) {
358358
if (dpiQueue_deqOne(queue->handle, &baton->msgProps[0]) < 0)
359359
return njsBaton_setErrorDPI(baton);
360+
361+
// Handle the case when message queue is empty
362+
if (baton->msgProps[0] == NULL)
363+
baton->numMsgProps = 0;
360364
} else {
361365
// deqMany case
362366
if (dpiQueue_deqMany(queue->handle, &baton->numMsgProps,

test/aq1.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,4 +190,18 @@ describe('217. aq1.js', function() {
190190
}
191191
}); // 217.4
192192

193+
it('217.5 deqOne on empty queue', async () => {
194+
const queue2 = await conn.getQueue(rawQueueName);
195+
queue2.deqOptions.wait = oracledb.AQ_DEQ_NO_WAIT;
196+
const message = await queue2.deqOne();
197+
assert.strictEqual(message, undefined);
198+
});
199+
200+
it('217.6 deqMany on empty queue', async () => {
201+
const queue2 = await conn.getQueue(rawQueueName);
202+
queue2.deqOptions.wait = oracledb.AQ_DEQ_NO_WAIT;
203+
const messages = await queue2.deqMany(1);
204+
assert.deepStrictEqual(messages, []);
205+
});
206+
193207
});

test/list.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4634,6 +4634,8 @@ oracledb.OUT_FORMAT_OBJECT and resultSet = true
46344634
217.2 examples/aqoptions.js
46354635
217.3 examples/aqmulti.js
46364636
217.4 one message in enqMany/deqMany
4637+
217.5 deqOne on empty queue
4638+
217.6 deqMany on empty queue
46374639

46384640
218. aq2.js
46394641
218.1 examples/aqobject.js

0 commit comments

Comments
 (0)