211 lines
5.7 KiB
JavaScript
211 lines
5.7 KiB
JavaScript
/* Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. */
|
|
|
|
/******************************************************************************
|
|
*
|
|
* You may not use the identified files except in compliance with the Apache
|
|
* License, Version 2.0 (the "License.")
|
|
*
|
|
* You may obtain a copy of the License at
|
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
*
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
* NAME
|
|
* 192. implicitResults.js
|
|
*
|
|
* DESCRIPTION
|
|
* Test the Implicit Results feauture.
|
|
*
|
|
*****************************************************************************/
|
|
'use strict';
|
|
|
|
const oracledb = require('oracledb');
|
|
const should = require('should');
|
|
const dbconfig = require('./dbconfig.js');
|
|
const testsUtil = require('./testsUtil.js');
|
|
|
|
describe('192. implicitResults.js', function() {
|
|
|
|
let isRunnable = false;
|
|
|
|
const tab1 = 'nodb_tab_impres1';
|
|
const tab2 = 'nodb_tab_impres2';
|
|
const queryImpres = `
|
|
declare
|
|
c1 sys_refcursor;
|
|
c2 sys_refcursor;
|
|
begin
|
|
open c1 for
|
|
select * from ${tab1};
|
|
|
|
dbms_sql.return_result(c1);
|
|
|
|
open c2 for
|
|
select * from ${tab2};
|
|
|
|
dbms_sql.return_result(c2);
|
|
end;`;
|
|
|
|
before(async function() {
|
|
isRunnable = await testsUtil.checkPrerequisites();
|
|
|
|
if (!isRunnable) {
|
|
this.skip();
|
|
return;
|
|
} else {
|
|
try {
|
|
const conn = await oracledb.getConnection(dbconfig);
|
|
|
|
let sql =
|
|
`create table ${tab1} (
|
|
id number(9) not null,
|
|
value varchar2(100) not null
|
|
)`;
|
|
let plsql = testsUtil.sqlCreateTable(tab1, sql);
|
|
await conn.execute(plsql);
|
|
|
|
let sqlInsertValues =
|
|
`DECLARE \n` +
|
|
` x NUMBER := 0; \n` +
|
|
` n VARCHAR2(100); \n` +
|
|
`BEGIN \n` +
|
|
` FOR i IN 1..23 LOOP \n` +
|
|
` x := x + 1; \n` +
|
|
` n := 'Staff ' || x; \n` +
|
|
` INSERT INTO ${tab1} VALUES (x, n); \n` +
|
|
` END LOOP; \n` +
|
|
`END; `;
|
|
await conn.execute(sqlInsertValues);
|
|
|
|
sql = `create table ${tab2} (
|
|
id number(9) not null,
|
|
tsval timestamp not null
|
|
)`;
|
|
plsql = testsUtil.sqlCreateTable(tab2, sql);
|
|
await conn.execute(plsql);
|
|
|
|
sqlInsertValues =
|
|
`DECLARE \n` +
|
|
` x NUMBER := 0; \n` +
|
|
` n TIMESTAMP; \n` +
|
|
`BEGIN \n` +
|
|
` FOR i IN 1..5 LOOP \n` +
|
|
` x := x + 1; \n` +
|
|
` n := systimestamp + (i / 10); \n` +
|
|
` INSERT INTO ${tab2} VALUES (x, n); \n` +
|
|
` END LOOP; \n` +
|
|
`END; `;
|
|
await conn.execute(sqlInsertValues);
|
|
|
|
await conn.commit();
|
|
await conn.close();
|
|
} catch(err) {
|
|
should.not.exist(err);
|
|
}
|
|
}
|
|
|
|
}); // before()
|
|
|
|
after(async function() {
|
|
|
|
if (!isRunnable) {
|
|
return;
|
|
} else {
|
|
try {
|
|
const conn = await oracledb.getConnection(dbconfig);
|
|
|
|
let sql = `DROP TABLE ${tab1} PURGE`;
|
|
await conn.execute(sql);
|
|
|
|
sql = `DROP TABLE ${tab2} PURGE`;
|
|
await conn.execute(sql);
|
|
|
|
await conn.close();
|
|
} catch(err) {
|
|
should.not.exist(err);
|
|
}
|
|
}
|
|
|
|
}); // after()
|
|
|
|
it('192.1 implicit results with rows fetched', async () => {
|
|
try {
|
|
const conn = await oracledb.getConnection(dbconfig);
|
|
const results = await conn.execute(queryImpres);
|
|
|
|
let rows = results.implicitResults[0];
|
|
for ( let j = 0; j < rows.length; j++) {
|
|
should.strictEqual(rows[j][1], `Staff ${j+1}`);
|
|
}
|
|
|
|
rows = results.implicitResults[1];
|
|
const tab2Len = 5;
|
|
should.strictEqual(rows.length, tab2Len);
|
|
|
|
await conn.close();
|
|
} catch(err) {
|
|
should.not.exist(err);
|
|
}
|
|
}); // 192.1
|
|
|
|
it('192.2 implicit Results with Result Sets', async () => {
|
|
try {
|
|
const conn = await oracledb.getConnection(dbconfig);
|
|
const results = await conn.execute(queryImpres, [], { resultSet: true });
|
|
|
|
// Assert the content of table 1
|
|
let rs = await results.implicitResults[0].getRows(100);
|
|
for ( let j = 0; j < rs.length; j++) {
|
|
should.strictEqual(rs[j][1], `Staff ${j+1}`);
|
|
}
|
|
|
|
// Assert the content of table 2
|
|
rs = await results.implicitResults[1];
|
|
let row, len = 0;
|
|
while ( (row = await rs.getRow()) ) {
|
|
(row[1]).should.be.a.Date();
|
|
len++;
|
|
}
|
|
const tab2Len = 5;
|
|
should.strictEqual(len, tab2Len);
|
|
|
|
await rs.close();
|
|
await conn.close();
|
|
} catch(err) {
|
|
should.not.exist(err);
|
|
}
|
|
}); // 192.2
|
|
|
|
it('192.3 multiple options, outFormat is OUT_FORMAT_OBJECT', async () => {
|
|
try {
|
|
const conn = await oracledb.getConnection(dbconfig);
|
|
let opts = { resultSet: true, outFormat: oracledb.OUT_FORMAT_OBJECT };
|
|
const results = await conn.execute( queryImpres, [], opts );
|
|
|
|
let rs = await results.implicitResults[0].getRows(100);
|
|
for ( let j = 0; j < rs.length; j++) {
|
|
should.strictEqual(rs[j].VALUE, `Staff ${j+1}`);
|
|
}
|
|
|
|
rs = await results.implicitResults[1];
|
|
let row, len = 0;
|
|
while ( (row = await rs.getRow()) ) {
|
|
(row.TSVAL).should.be.a.Date();
|
|
len++;
|
|
}
|
|
const tab2Len = 5;
|
|
should.strictEqual(len, tab2Len);
|
|
|
|
await rs.close();
|
|
await conn.close();
|
|
} catch(err) {
|
|
should.not.exist(err);
|
|
}
|
|
}); // 192.3
|
|
});
|