Skip to content

Commit 90428a4

Browse files
committed
Allow specifying DB_TYPE_RAW for getQueue AQ API
1 parent 727fa21 commit 90428a4

File tree

3 files changed

+103
-4
lines changed

3 files changed

+103
-4
lines changed

lib/aqQueue.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,11 @@ class AqQueue {
136136
this._isJson = true;
137137
this._payloadType = types.DB_TYPE_JSON;
138138
this._payloadTypeName = "JSON";
139-
} else if (options.payloadType) {
139+
} else if (options.payloadType === undefined ||
140+
options.payloadType === types.DB_TYPE_RAW) {
141+
this._payloadType = types.DB_TYPE_RAW;
142+
this._payloadTypeName = "RAW";
143+
} else {
140144
if (typeof options.payloadType === 'string') {
141145
// DB Object type
142146
const cls = await conn._getDbObjectClassForName(options.payloadType);
@@ -149,9 +153,6 @@ class AqQueue {
149153
}
150154
this._payloadType = types.DB_TYPE_OBJECT;
151155
this._payloadTypeName = this._payloadTypeClass.prototype.name;
152-
} else {
153-
this._payloadType = types.DB_TYPE_RAW;
154-
this._payloadTypeName = "RAW";
155156
}
156157
this._name = name;
157158
this._impl = await conn._impl.getQueue(name, this._payloadTypeClass,

test/dataTypeRaw.js

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ const assert = require('assert');
3636
const assist = require('./dataTypeAssist.js');
3737
const dbConfig = require('./dbconfig.js');
3838
const random = require('./random.js');
39+
const testsUtil = require('./testsUtil.js');
3940

4041
describe('42. dataTypeRaw.js', function() {
4142

@@ -497,4 +498,98 @@ describe('42. dataTypeRaw.js', function() {
497498
const result = await connection.execute(sql);
498499
assert.deepStrictEqual(result.rows[0][0], expected);
499500
};
501+
502+
describe ('42.7 DB_TYPE_RAW in Advanced Queue (AQ)', function () {
503+
let isRunnable = true;
504+
let conn;
505+
const AQ_USER = 'NODB_SCHEMA_AQTEST8';
506+
const AQ_USER_PWD = testsUtil.generateRandomPassword();
507+
const rawQueueName = "NODB_RAW_QUEUE8";
508+
const RAW_TABLE = "NODB_RAW_QUEUE_TAB";
509+
510+
before(async function () {
511+
if (!dbConfig.test.DBA_PRIVILEGE || oracledb.thin) {
512+
isRunnable = false;
513+
}
514+
if (!isRunnable) {
515+
this.skip();
516+
} else {
517+
await testsUtil.createAQtestUser(AQ_USER, AQ_USER_PWD);
518+
const credential = {
519+
user: AQ_USER,
520+
password: AQ_USER_PWD,
521+
connectionString: dbConfig.connectString
522+
};
523+
conn = await oracledb.getConnection(credential);
524+
525+
const plsql = `
526+
BEGIN
527+
DBMS_AQADM.CREATE_QUEUE_TABLE(
528+
QUEUE_TABLE => '${AQ_USER}.${RAW_TABLE}',
529+
QUEUE_PAYLOAD_TYPE => 'RAW'
530+
);
531+
DBMS_AQADM.CREATE_QUEUE(
532+
QUEUE_NAME => '${AQ_USER}.${rawQueueName}',
533+
QUEUE_TABLE => '${AQ_USER}.${RAW_TABLE}'
534+
);
535+
DBMS_AQADM.START_QUEUE(
536+
QUEUE_NAME => '${AQ_USER}.${rawQueueName}'
537+
);
538+
END;
539+
`;
540+
await conn.execute(plsql);
541+
}
542+
}); //before
543+
544+
after (async function () {
545+
if (!isRunnable) {
546+
return;
547+
} else {
548+
await conn.close ();
549+
await testsUtil.dropAQtestUser(AQ_USER);
550+
}
551+
}); // after
552+
553+
it('42.7.1 enqOne/deqOne with DB_TYPE_RAW specified', async() => {
554+
const queue1 = await conn.getQueue(rawQueueName,
555+
{ payloadType: oracledb.DB_TYPE_RAW });
556+
const messageString = 'This is my message';
557+
const msgBuf = Buffer.from(messageString, 'utf8');
558+
await queue1.enqOne(msgBuf);
559+
await conn.commit();
560+
561+
//Dequeue
562+
const queue2 = await conn.getQueue(rawQueueName);
563+
const msg = await queue2.deqOne();
564+
assert(msg);
565+
assert.strictEqual(msg.payload.toString(), messageString);
566+
}); // 42.7.1
567+
568+
it('42.7.2 enqMany/deqMany with DB_TYPE_RAW specified', async () => {
569+
const queue1 = await conn.getQueue(rawQueueName,
570+
{payloadType: oracledb.DB_TYPE_RAW});
571+
const messages1 = [
572+
"Message 1",
573+
Buffer.from ("Message 2", "utf-8"),
574+
Buffer.from ("Message 3", "utf-8"),
575+
"Message 4"
576+
];
577+
await queue1.enqMany(messages1);
578+
await conn.commit ();
579+
580+
/*Dequeue */
581+
const queue2 = await conn.getQueue(rawQueueName);
582+
const messages2 = await queue2.deqMany(5);
583+
await conn.commit ();
584+
assert.strictEqual(messages2.length, messages1.length);
585+
assert.strictEqual(messages2[0].payload.toString(), messages1[0]);
586+
assert.strictEqual(messages2[1].payload.toString(),
587+
messages1[1].toString());
588+
assert.strictEqual(messages2[2].payload.toString(),
589+
messages1[2].toString());
590+
assert.strictEqual(messages2[3].payload.toString(), messages1[3]);
591+
});
592+
593+
});
594+
500595
});

test/list.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,9 @@ Overview of node-oracledb functional tests
682682
42.6.1 works with data size 100
683683
42.6.2 works with data size 2000
684684
42.6.3 works with default type/dir
685+
42.7 DB_TYPE_RAW in Advanced Queue (AQ)
686+
42.7.1 enqOne/deqOne with DB_TYPE_RAW specified.
687+
42.7.2 enqMany/deqMany with DB_TYPE_RAW specified.
685688

686689
43. plsqlBindIndexedTable1.js
687690
43.1 binding PL/SQL indexed table

0 commit comments

Comments
 (0)