@@ -36,6 +36,7 @@ var oracledb = require('oracledb');
36
36
var should = require ( 'should' ) ;
37
37
var async = require ( 'async' ) ;
38
38
var dbConfig = require ( './dbConfig.js' ) ;
39
+ var assist = require ( './dataTypeAssist.js' ) ;
39
40
40
41
describe ( '6. dmlReturning.js' , function ( ) {
41
42
@@ -47,7 +48,7 @@ describe('6. dmlReturning.js', function(){
47
48
48
49
describe ( '6.1 NUMBER & STRING driver data type' , function ( ) {
49
50
50
- var connection = false ;
51
+ var connection = null ;
51
52
beforeEach ( 'get connection and prepare table' , function ( done ) {
52
53
var makeTable =
53
54
"BEGIN \
@@ -362,5 +363,201 @@ describe('6. dmlReturning.js', function(){
362
363
) ;
363
364
} )
364
365
365
- } )
366
+ } ) // 6.1
367
+
368
+ describe ( '6.2 DATE and TIMESTAMP data' , function ( ) {
369
+
370
+ var connection = null ;
371
+ var tableName = "oracledb_date" ;
372
+ var dates = assist . DATE_STRINGS ;
373
+
374
+ beforeEach ( 'get connection, prepare table' , function ( done ) {
375
+ async . series ( [
376
+ function ( callback ) {
377
+ oracledb . getConnection ( credential , function ( err , conn ) {
378
+ should . not . exist ( err ) ;
379
+ connection = conn ;
380
+ callback ( ) ;
381
+ } ) ;
382
+ } ,
383
+ function ( callback ) {
384
+ assist . setUp4sql ( connection , tableName , dates , callback ) ;
385
+ }
386
+ ] , done ) ;
387
+ } ) // before
388
+
389
+ afterEach ( 'drop table, release connection' , function ( done ) {
390
+ async . series ( [
391
+ function ( callback ) {
392
+ connection . execute (
393
+ "DROP table " + tableName ,
394
+ function ( err ) {
395
+ should . not . exist ( err ) ;
396
+ callback ( ) ;
397
+ }
398
+ ) ;
399
+ } ,
400
+ function ( callback ) {
401
+ connection . release ( function ( err ) {
402
+ should . not . exist ( err ) ;
403
+ callback ( ) ;
404
+ } ) ;
405
+ }
406
+ ] , done ) ;
407
+ } )
408
+
409
+ function runSQL ( sql , bindVar , isSingleMatch , callback )
410
+ {
411
+ var beAffectedRows = ( isSingleMatch ? 1 : dates . length ) ;
412
+
413
+ connection . execute (
414
+ sql ,
415
+ bindVar ,
416
+ function ( err , result ) {
417
+ should . not . exist ( err ) ;
418
+ result . rowsAffected . should . be . exactly ( beAffectedRows ) ;
419
+ // console.log(result);
420
+ callback ( ) ;
421
+ }
422
+ ) ;
423
+ }
424
+
425
+ it ( '6.2.1 INSERT statement, single row matched, Object binding, no bind in data' , function ( done ) {
426
+ var sql = "INSERT INTO " + tableName + " VALUES (50, TO_DATE('2015-01-11','YYYY-DD-MM')) RETURNING num, content INTO :rnum, :rcontent" ;
427
+ var bindVar =
428
+ {
429
+ rnum : { type : oracledb . NUMBER , dir : oracledb . BIND_OUT } ,
430
+ rcontent : { type : oracledb . DATE , dir : oracledb . BIND_OUT }
431
+ } ;
432
+ var isSingleMatch = true ;
433
+
434
+ runSQL ( sql , bindVar , isSingleMatch , done ) ;
435
+
436
+ } )
437
+
438
+ it ( '6.2.2 INSERT statement with JavaScript date bind in ' , function ( done ) {
439
+ var sql = "INSERT INTO " + tableName + " VALUES (:no, :c) RETURNING num, content INTO :rnum, :rcontent" ;
440
+ var bindVar =
441
+ {
442
+ no : 51 ,
443
+ c : new Date ( 2003 , 09 , 23 , 11 , 50 , 30 , 123 ) ,
444
+ rnum : { type : oracledb . NUMBER , dir : oracledb . BIND_OUT } ,
445
+ rcontent : { type : oracledb . DATE , dir : oracledb . BIND_OUT }
446
+ } ;
447
+ var isSingleMatch = true ;
448
+
449
+ runSQL ( sql , bindVar , isSingleMatch , done ) ;
450
+
451
+ } )
452
+
453
+ it ( '6.2.3 INSERT statement with Array binding' , function ( done ) {
454
+ var sql = "INSERT INTO " + tableName + " VALUES (50, TO_TIMESTAMP_TZ('1999-12-01 11:00:00.123456 -8:00', 'YYYY-MM-DD HH:MI:SS.FF TZH:TZM')) RETURNING num, content INTO :rnum, :rcontent" ;
455
+ var bindVar =
456
+ [
457
+ { type : oracledb . NUMBER , dir : oracledb . BIND_OUT } ,
458
+ { type : oracledb . DATE , dir : oracledb . BIND_OUT }
459
+ ] ;
460
+ var isSingleMatch = true ;
461
+
462
+ runSQL ( sql , bindVar , isSingleMatch , done ) ;
463
+
464
+ } )
465
+
466
+ it ( '6.2.4 UPDATE statement with single row matched' , function ( done ) {
467
+ var sql = "UPDATE " + tableName + " SET content = :c WHERE num = :n RETURNING num, content INTO :rnum, :rcontent" ;
468
+ var bindVar =
469
+ {
470
+ c : { type : oracledb . DATE , dir : oracledb . BIND_IN , val : new Date ( 2003 , 09 , 23 , 11 , 50 , 30 , 123 ) } ,
471
+ n : 0 ,
472
+ rnum : { type : oracledb . NUMBER , dir : oracledb . BIND_OUT } ,
473
+ rcontent : { type : oracledb . DATE , dir : oracledb . BIND_OUT }
474
+ } ;
475
+ var isSingleMatch = true ;
476
+
477
+ runSQL ( sql , bindVar , isSingleMatch , done ) ;
478
+
479
+ } )
480
+
481
+ it ( '6.2.5 UPDATE statements with multiple rows matched, ARRAY binding format' , function ( done ) {
482
+ var sql = "UPDATE " + tableName + " SET content = :c WHERE num < :n RETURNING num, content INTO :rnum, :rcontent" ;
483
+ var bindVar =
484
+ [
485
+ { type : oracledb . DATE , dir : oracledb . BIND_IN , val : new Date ( 2003 , 09 , 23 , 11 , 50 , 30 , 123 ) } ,
486
+ 100 ,
487
+ { type : oracledb . NUMBER , dir : oracledb . BIND_OUT } ,
488
+ { type : oracledb . DATE , dir : oracledb . BIND_OUT }
489
+ ] ;
490
+ var isSingleMatch = false ;
491
+
492
+ runSQL ( sql , bindVar , isSingleMatch , done ) ;
493
+
494
+ } )
495
+
496
+ it ( '6.2.6 UPDATE statements, multiple rows, TIMESTAMP data' , function ( done ) {
497
+ var sql = "UPDATE " + tableName + " SET content = TO_TIMESTAMP_TZ('1999-12-01 11:00:00.123456 -8:00', 'YYYY-MM-DD HH:MI:SS.FF TZH:TZM') " +
498
+ " WHERE num < :n RETURNING num, content INTO :rnum, :rcontent" ;
499
+ var bindVar =
500
+ {
501
+ n : 100 ,
502
+ rnum : { type : oracledb . NUMBER , dir : oracledb . BIND_OUT } ,
503
+ rcontent : { type : oracledb . DATE , dir : oracledb . BIND_OUT }
504
+ }
505
+ var isSingleMatch = false ;
506
+
507
+ runSQL ( sql , bindVar , isSingleMatch , done ) ;
508
+
509
+ } )
510
+
511
+ it ( '6.2.7 DELETE statement, single row matched, Object binding format' , function ( done ) {
512
+ var sql = "DELETE FROM " + tableName + " WHERE num = :n RETURNING num, content INTO :rnum, :rcontent" ;
513
+ var bindVar =
514
+ {
515
+ n : 0 ,
516
+ rnum : { type : oracledb . NUMBER , dir : oracledb . BIND_OUT } ,
517
+ rcontent : { type : oracledb . DATE , dir : oracledb . BIND_OUT }
518
+ } ;
519
+ var isSingleMatch = true ;
520
+
521
+ runSQL ( sql , bindVar , isSingleMatch , done ) ;
522
+
523
+ } )
524
+
525
+ it ( '6.2.8 DELETE statement, multiple rows matched, Array binding format' , function ( done ) {
526
+ var sql = "DELETE FROM " + tableName + " WHERE num >= :n RETURNING num, content INTO :rnum, :rcontent" ;
527
+ var bindVar =
528
+ [
529
+ 0 ,
530
+ { type : oracledb . NUMBER , dir : oracledb . BIND_OUT } ,
531
+ { type : oracledb . DATE , dir : oracledb . BIND_OUT }
532
+ ] ;
533
+ var isSingleMatch = false ;
534
+
535
+ runSQL ( sql , bindVar , isSingleMatch , done ) ;
536
+ } )
537
+
538
+ it ( '6.2.9 Negative test - bind value and type mismatch' , function ( done ) {
539
+ var wrongSQL = "UPDATE " + tableName + " SET content = :c WHERE num = :n RETURNING num, content INTO :rnum, :rcontent" ;
540
+ var bindVar =
541
+ {
542
+ n : 0 ,
543
+ c : { type : oracledb . STRING , dir : oracledb . BIND_IN , val : new Date ( 2003 , 09 , 23 , 11 , 50 , 30 , 123 ) } ,
544
+ rnum : { type : oracledb . NUMBER , dir : oracledb . BIND_OUT } ,
545
+ rcontent : { type : oracledb . DATE , dir : oracledb . BIND_OUT }
546
+ } ;
547
+
548
+ connection . execute (
549
+ wrongSQL ,
550
+ bindVar ,
551
+ function ( err , result ) {
552
+ should . exist ( err ) ;
553
+ // console.log(err.message);
554
+ // NJS-011: encountered bind value and type mismatch
555
+ ( err . message ) . should . startWith ( 'NJS-011:' ) ;
556
+ done ( ) ;
557
+ }
558
+ ) ;
559
+
560
+ } )
561
+
562
+ } ) // 6.2
366
563
} )
0 commit comments