Skip to content

Commit 84a01ed

Browse files
committed
Add DML Returning tests for DATEs and Timestamps
1 parent 557db1e commit 84a01ed

File tree

1 file changed

+199
-2
lines changed

1 file changed

+199
-2
lines changed

test/dmlReturning.js

Lines changed: 199 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ var oracledb = require('oracledb');
3636
var should = require('should');
3737
var async = require('async');
3838
var dbConfig = require('./dbConfig.js');
39+
var assist = require('./dataTypeAssist.js');
3940

4041
describe('6. dmlReturning.js', function(){
4142

@@ -47,7 +48,7 @@ describe('6. dmlReturning.js', function(){
4748

4849
describe('6.1 NUMBER & STRING driver data type', function() {
4950

50-
var connection = false;
51+
var connection = null;
5152
beforeEach('get connection and prepare table', function(done) {
5253
var makeTable =
5354
"BEGIN \
@@ -362,5 +363,201 @@ describe('6. dmlReturning.js', function(){
362363
);
363364
})
364365

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
366563
})

0 commit comments

Comments
 (0)