1
- // Copyright (c) 2019, 2023 , Oracle and/or its affiliates.
1
+ // Copyright (c) 2019, 2024 , Oracle and/or its affiliates.
2
2
3
3
//-----------------------------------------------------------------------------
4
4
//
33
33
#include "njsModule.h"
34
34
35
35
// class methods
36
- NJS_NAPI_METHOD_DECL_ASYNC (njsAqQueue_deqMany );
37
- NJS_NAPI_METHOD_DECL_ASYNC (njsAqQueue_deqOne );
38
- NJS_NAPI_METHOD_DECL_ASYNC (njsAqQueue_enqMany );
39
- NJS_NAPI_METHOD_DECL_ASYNC (njsAqQueue_enqOne );
36
+ NJS_NAPI_METHOD_DECL_ASYNC (njsAqQueue_deq );
37
+ NJS_NAPI_METHOD_DECL_ASYNC (njsAqQueue_enq );
40
38
41
39
// asynchronous methods
42
- static NJS_ASYNC_METHOD (njsAqQueue_deqManyAsync );
43
- static NJS_ASYNC_METHOD (njsAqQueue_deqOneAsync );
44
- static NJS_ASYNC_METHOD (njsAqQueue_enqManyAsync );
45
- static NJS_ASYNC_METHOD (njsAqQueue_enqOneAsync );
40
+ static NJS_ASYNC_METHOD (njsAqQueue_deqAsync );
41
+ static NJS_ASYNC_METHOD (njsAqQueue_enqAsync );
46
42
47
43
// post asynchronous methods
48
- static NJS_ASYNC_POST_METHOD (njsAqQueue_deqManyPostAsync );
49
- static NJS_ASYNC_POST_METHOD (njsAqQueue_deqOnePostAsync );
50
- static NJS_ASYNC_POST_METHOD (njsAqQueue_enqManyPostAsync );
51
- static NJS_ASYNC_POST_METHOD (njsAqQueue_enqOnePostAsync );
44
+ static NJS_ASYNC_POST_METHOD (njsAqQueue_deqPostAsync );
45
+ static NJS_ASYNC_POST_METHOD (njsAqQueue_enqPostAsync );
46
+
52
47
53
48
// finalize
54
49
static NJS_NAPI_FINALIZE (njsAqQueue_finalize );
55
50
56
51
// properties defined by the class
57
52
static const napi_property_descriptor njsClassProperties [] = {
58
- { "deqMany" , NULL , njsAqQueue_deqMany , NULL , NULL , NULL , napi_default ,
59
- NULL },
60
- { "deqOne" , NULL , njsAqQueue_deqOne , NULL , NULL , NULL , napi_default ,
61
- NULL },
62
- { "enqMany" , NULL , njsAqQueue_enqMany , NULL , NULL , NULL , napi_default ,
53
+ { "deq" , NULL , njsAqQueue_deq , NULL , NULL , NULL , napi_default ,
63
54
NULL },
64
- { "enqOne " , NULL , njsAqQueue_enqOne , NULL , NULL , NULL , napi_default ,
55
+ { "enq " , NULL , njsAqQueue_enq , NULL , NULL , NULL , napi_default ,
65
56
NULL },
66
57
{ NULL , NULL , NULL , NULL , NULL , NULL , napi_default , NULL }
67
58
};
@@ -337,45 +328,50 @@ bool njsAqQueue_createFromHandle(njsBaton *baton, napi_env env,
337
328
338
329
339
330
//-----------------------------------------------------------------------------
340
- // njsAqQueue_deqMany ()
341
- // Dequeue multiple messages from an AQ queue.
331
+ // njsAqQueue_deq ()
332
+ // Dequeue messages from an AQ queue.
342
333
//
343
334
// PARAMETERS
344
- // - number specifying the maximum number of messages to dequeue
335
+ // - an array of one or more messages to dequeue
345
336
//-----------------------------------------------------------------------------
346
- NJS_NAPI_METHOD_IMPL_ASYNC (njsAqQueue_deqMany , 1 , NULL )
337
+ NJS_NAPI_METHOD_IMPL_ASYNC (njsAqQueue_deq , 1 , NULL )
347
338
{
348
339
NJS_CHECK_NAPI (env , napi_get_value_uint32 (env , args [0 ],
349
340
& baton -> numMsgProps ))
350
- return njsBaton_queueWork (baton , env , "DeqMany " , njsAqQueue_deqManyAsync ,
351
- njsAqQueue_deqManyPostAsync , returnValue );
341
+ return njsBaton_queueWork (baton , env , "Deq " , njsAqQueue_deqAsync ,
342
+ njsAqQueue_deqPostAsync , returnValue );
352
343
}
353
344
354
345
355
346
//-----------------------------------------------------------------------------
356
- // njsAqQueue_deqManyAsync ()
357
- // Worker function for njsAqQueue_deqMany().
347
+ // njsAqQueue_deqAsync ()
348
+ // Worker function for njsAqQueue_deqOne() & njsAqueue_deqMany()
358
349
//-----------------------------------------------------------------------------
359
- static bool njsAqQueue_deqManyAsync (njsBaton * baton )
350
+ static bool njsAqQueue_deqAsync (njsBaton * baton )
360
351
{
361
352
njsAqQueue * queue = (njsAqQueue * ) baton -> callingInstance ;
362
353
363
354
baton -> msgProps = calloc (baton -> numMsgProps , sizeof (dpiMsgProps * ));
364
355
if (!baton -> msgProps )
365
356
return njsBaton_setErrorInsufficientMemory (baton );
366
- if (dpiQueue_deqMany (queue -> handle , & baton -> numMsgProps ,
367
- baton -> msgProps ) < 0 )
368
- return njsBaton_setErrorDPI (baton );
369
-
357
+ if (baton -> numMsgProps == 1 ) {
358
+ if (dpiQueue_deqOne (queue -> handle , & baton -> msgProps [0 ]) < 0 )
359
+ return njsBaton_setErrorDPI (baton );
360
+ } else {
361
+ // deqMany case
362
+ if (dpiQueue_deqMany (queue -> handle , & baton -> numMsgProps ,
363
+ baton -> msgProps ) < 0 )
364
+ return njsBaton_setErrorDPI (baton );
365
+ }
370
366
return true;
371
367
}
372
368
373
369
374
370
//-----------------------------------------------------------------------------
375
- // njsAqQueue_deqManyPostAsync ()
371
+ // njsAqQueue_deqPostAsync ()
376
372
// Defines the value returned to JS.
377
373
//-----------------------------------------------------------------------------
378
- static bool njsAqQueue_deqManyPostAsync (njsBaton * baton , napi_env env ,
374
+ static bool njsAqQueue_deqPostAsync (njsBaton * baton , napi_env env ,
379
375
napi_value * result )
380
376
{
381
377
njsAqQueue * queue = (njsAqQueue * ) baton -> callingInstance ;
@@ -396,60 +392,13 @@ static bool njsAqQueue_deqManyPostAsync(njsBaton *baton, napi_env env,
396
392
397
393
398
394
//-----------------------------------------------------------------------------
399
- // njsAqQueue_deqOne()
400
- // Dequeue a message from an AQ queue.
401
- //
402
- // PARAMETERS - NONE
403
- //-----------------------------------------------------------------------------
404
- NJS_NAPI_METHOD_IMPL_ASYNC (njsAqQueue_deqOne , 0 , NULL )
405
- {
406
- return njsBaton_queueWork (baton , env , "DeqOne" , njsAqQueue_deqOneAsync ,
407
- njsAqQueue_deqOnePostAsync , returnValue );
408
- }
409
-
410
-
411
- //-----------------------------------------------------------------------------
412
- // njsAqQueue_deqOneAsync()
413
- // Worker function for njsAqQueue_deqOne().
414
- //-----------------------------------------------------------------------------
415
- static bool njsAqQueue_deqOneAsync (njsBaton * baton )
416
- {
417
- njsAqQueue * queue = (njsAqQueue * ) baton -> callingInstance ;
418
-
419
- if (dpiQueue_deqOne (queue -> handle , & baton -> dpiMsgPropsHandle ) < 0 )
420
- return njsBaton_setErrorDPI (baton );
421
-
422
- return true;
423
- }
424
-
425
-
426
- //-----------------------------------------------------------------------------
427
- // njsAqQueue_deqOnePostAsync()
428
- // Defines the value returned to JS.
429
- //-----------------------------------------------------------------------------
430
- static bool njsAqQueue_deqOnePostAsync (njsBaton * baton , napi_env env ,
431
- napi_value * result )
432
- {
433
- njsAqQueue * queue = (njsAqQueue * ) baton -> callingInstance ;
434
-
435
- if (baton -> dpiMsgPropsHandle ) {
436
- if (!njsAqMessage_createFromHandle (baton , baton -> dpiMsgPropsHandle ,
437
- env , queue , result ))
438
- return false;
439
- baton -> dpiMsgPropsHandle = NULL ;
440
- }
441
- return true;
442
- }
443
-
444
-
445
- //-----------------------------------------------------------------------------
446
- // njsAqQueue_enqMany()
447
- // Enqueue multiple message into an AQ queue.
395
+ // njsAqQueue_enq()
396
+ // Enqueue message(s) into an AQ queue.
448
397
//
449
398
// PARAMETERS
450
- // - array of objects containing payload and options
399
+ // - array of one or more messages to enqueue
451
400
//-----------------------------------------------------------------------------
452
- NJS_NAPI_METHOD_IMPL_ASYNC (njsAqQueue_enqMany , 1 , NULL )
401
+ NJS_NAPI_METHOD_IMPL_ASYNC (njsAqQueue_enq , 1 , NULL )
453
402
{
454
403
njsAqQueue * queue = (njsAqQueue * ) baton -> callingInstance ;
455
404
napi_value message ;
@@ -466,33 +415,39 @@ NJS_NAPI_METHOD_IMPL_ASYNC(njsAqQueue_enqMany, 1, NULL)
466
415
& baton -> msgProps [i ]))
467
416
return false;
468
417
}
469
- return njsBaton_queueWork (baton , env , "EnqMany " , njsAqQueue_enqManyAsync ,
470
- njsAqQueue_enqManyPostAsync , returnValue );
418
+ return njsBaton_queueWork (baton , env , "Enq " , njsAqQueue_enqAsync ,
419
+ njsAqQueue_enqPostAsync , returnValue );
471
420
}
472
421
473
422
474
423
//-----------------------------------------------------------------------------
475
- // njsAqQueue_enqManyAsync()
476
- // Worker function for njsAqQueue_enqMany().
424
+ // njsAqQueue_enqAsync()
425
+ //
426
+ // Worker thread function for njsAqQueue_enqOne() & njsAqQueue_enqMany()
477
427
//-----------------------------------------------------------------------------
478
- static bool njsAqQueue_enqManyAsync (njsBaton * baton )
428
+ static bool njsAqQueue_enqAsync (njsBaton * baton )
479
429
{
480
430
njsAqQueue * queue = (njsAqQueue * ) baton -> callingInstance ;
481
431
482
- if (dpiQueue_enqMany (queue -> handle , baton -> numMsgProps ,
483
- baton -> msgProps ) < 0 )
484
- return njsBaton_setErrorDPI (baton );
485
-
432
+ if (baton -> numMsgProps == 1 ) {
433
+ // enqOne case
434
+ if (dpiQueue_enqOne (queue -> handle , baton -> msgProps [0 ]) < 0 )
435
+ return njsBaton_setErrorDPI (baton );
436
+ } else {
437
+ // enqMany case
438
+ if (dpiQueue_enqMany (queue -> handle , baton -> numMsgProps ,
439
+ baton -> msgProps ) < 0 )
440
+ return njsBaton_setErrorDPI (baton );
441
+ }
486
442
return true;
487
443
}
488
444
489
445
490
446
//-----------------------------------------------------------------------------
491
- // njsAqQueue_enqManyPostAsync()
492
- // returns the value to JS.
493
- //
447
+ // njsAqQueue_enqOnePostAsync()
448
+ // Defines the value returned to JS.
494
449
//-----------------------------------------------------------------------------
495
- static bool njsAqQueue_enqManyPostAsync (njsBaton * baton , napi_env env ,
450
+ static bool njsAqQueue_enqPostAsync (njsBaton * baton , napi_env env ,
496
451
napi_value * result )
497
452
{
498
453
njsAqQueue * queue = (njsAqQueue * ) baton -> callingInstance ;
@@ -501,6 +456,7 @@ static bool njsAqQueue_enqManyPostAsync(njsBaton *baton, napi_env env,
501
456
502
457
NJS_CHECK_NAPI (env , napi_create_array_with_length (env , baton -> numMsgProps ,
503
458
result ))
459
+
504
460
for (i = 0 ; i < baton -> numMsgProps ; i ++ ) {
505
461
if (!njsAqMessage_createFromHandle (baton , baton -> msgProps [i ], env ,
506
462
queue , & temp ))
@@ -511,57 +467,6 @@ static bool njsAqQueue_enqManyPostAsync(njsBaton *baton, napi_env env,
511
467
return true;
512
468
}
513
469
514
-
515
- //-----------------------------------------------------------------------------
516
- // njsAqQueue_enqOne()
517
- // Enqueue a message into an AQ queue.
518
- //
519
- // PARAMETERS
520
- // - object containing payload and message properties
521
- //-----------------------------------------------------------------------------
522
- NJS_NAPI_METHOD_IMPL_ASYNC (njsAqQueue_enqOne , 1 , NULL )
523
- {
524
- njsAqQueue * queue = (njsAqQueue * ) baton -> callingInstance ;
525
-
526
- if (!njsAqQueue_createMessage (baton , queue , env , args [0 ],
527
- & baton -> dpiMsgPropsHandle ))
528
- return false;
529
- return njsBaton_queueWork (baton , env , "EnqOne" , njsAqQueue_enqOneAsync ,
530
- njsAqQueue_enqOnePostAsync , returnValue );
531
- }
532
-
533
-
534
- //-----------------------------------------------------------------------------
535
- // njsAqQueue_enqOneAsync()
536
- // Worker function for njsAqQueue_enqOne().
537
- //-----------------------------------------------------------------------------
538
- static bool njsAqQueue_enqOneAsync (njsBaton * baton )
539
- {
540
- njsAqQueue * queue = (njsAqQueue * ) baton -> callingInstance ;
541
-
542
- if (dpiQueue_enqOne (queue -> handle , baton -> dpiMsgPropsHandle ) < 0 )
543
- return njsBaton_setErrorDPI (baton );
544
-
545
- return true;
546
- }
547
-
548
-
549
-
550
- //-----------------------------------------------------------------------------
551
- // njsAqQueue_enqOnePostAsync()
552
- // Defines the value returned to JS.
553
- //-----------------------------------------------------------------------------
554
- static bool njsAqQueue_enqOnePostAsync (njsBaton * baton , napi_env env ,
555
- napi_value * result )
556
- {
557
- njsAqQueue * queue = (njsAqQueue * )baton -> callingInstance ;
558
- if (!njsAqMessage_createFromHandle (baton , baton -> dpiMsgPropsHandle ,
559
- env , queue , result ))
560
- return false;
561
- baton -> dpiMsgPropsHandle = NULL ;
562
- return true;
563
- }
564
-
565
470
//-----------------------------------------------------------------------------
566
471
// njsAqQueue_finalize()
567
472
// Invoked when the njsAqQueue object is garbage collected.
0 commit comments