Add tests for Implicit Results
This commit is contained in:
parent
cf339bbb85
commit
cd7ff4edcf
|
@ -1545,64 +1545,6 @@ describe('84. fetchClobAsString1.js', function() {
|
||||||
], done);
|
], done);
|
||||||
}); // 84.3.11
|
}); // 84.3.11
|
||||||
|
|
||||||
it.skip('84.3.12 works with REF CURSOR', function(done) {
|
|
||||||
var id = insertID++;
|
|
||||||
var specialStr = '84.3.12';
|
|
||||||
var contentLength = 100;
|
|
||||||
var content = random.getRandomString(contentLength, specialStr);
|
|
||||||
|
|
||||||
async.series([
|
|
||||||
function(cb) {
|
|
||||||
insertIntoClobTable1(id, content, cb);
|
|
||||||
},
|
|
||||||
function(cb) {
|
|
||||||
var ref_proc = "CREATE OR REPLACE PROCEDURE nodb_ref(clob_cursor OUT SYS_REFCURSOR)\n" +
|
|
||||||
"AS \n" +
|
|
||||||
"BEGIN \n" +
|
|
||||||
" OPEN clob_cursor FOR \n" +
|
|
||||||
" SELECT C from nodb_clob1 WHERE ID = " + id + "; \n" +
|
|
||||||
"END;";
|
|
||||||
connection.execute(
|
|
||||||
ref_proc,
|
|
||||||
function(err){
|
|
||||||
should.not.exist(err);
|
|
||||||
cb();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
},
|
|
||||||
function(cb) {
|
|
||||||
var sql = "BEGIN nodb_ref(:c); END;";
|
|
||||||
var bindVar = {
|
|
||||||
c: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
|
|
||||||
};
|
|
||||||
connection.execute(
|
|
||||||
sql,
|
|
||||||
bindVar,
|
|
||||||
{
|
|
||||||
outFormat : oracledb.OBJECT,
|
|
||||||
resultSet : true
|
|
||||||
},
|
|
||||||
function(err) {
|
|
||||||
// NJS-019: ResultSet cannot be returned for non-query statements
|
|
||||||
should.exist(err);
|
|
||||||
(err.message).should.startWith("NJS-019:");
|
|
||||||
cb();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
},
|
|
||||||
function(cb) {
|
|
||||||
var ref_proc_drop = "DROP PROCEDURE nodb_ref";
|
|
||||||
connection.execute(
|
|
||||||
ref_proc_drop,
|
|
||||||
function(err){
|
|
||||||
should.not.exist(err);
|
|
||||||
cb();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
], done);
|
|
||||||
}); // 84.3.12
|
|
||||||
|
|
||||||
it('84.3.13 fetch CLOB with stream', function(done) {
|
it('84.3.13 fetch CLOB with stream', function(done) {
|
||||||
var id = insertID++;
|
var id = insertID++;
|
||||||
var specialStr = '84.3.13';
|
var specialStr = '84.3.13';
|
||||||
|
@ -2553,64 +2495,6 @@ describe('84. fetchClobAsString1.js', function() {
|
||||||
], done);
|
], done);
|
||||||
}); // 84.5.11
|
}); // 84.5.11
|
||||||
|
|
||||||
it.skip('84.5.12 works with REF CURSOR', function(done) {
|
|
||||||
var id = insertID++;
|
|
||||||
var specialStr = '84.5.12';
|
|
||||||
var contentLength = 100;
|
|
||||||
var content = random.getRandomString(contentLength, specialStr);
|
|
||||||
|
|
||||||
async.series([
|
|
||||||
function(cb) {
|
|
||||||
insertIntoClobTable1(id, content, cb);
|
|
||||||
},
|
|
||||||
function(cb) {
|
|
||||||
var ref_proc = "CREATE OR REPLACE PROCEDURE nodb_ref(clob_cursor OUT SYS_REFCURSOR)\n" +
|
|
||||||
"AS \n" +
|
|
||||||
"BEGIN \n" +
|
|
||||||
" OPEN clob_cursor FOR \n" +
|
|
||||||
" SELECT C from nodb_clob1 WHERE ID = " + id + "; \n" +
|
|
||||||
"END;";
|
|
||||||
connection.execute(
|
|
||||||
ref_proc,
|
|
||||||
function(err){
|
|
||||||
should.not.exist(err);
|
|
||||||
cb();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
},
|
|
||||||
function(cb) {
|
|
||||||
var sql = "BEGIN nodb_ref(:c); END;";
|
|
||||||
var bindVar = {
|
|
||||||
c: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
|
|
||||||
};
|
|
||||||
connection.execute(
|
|
||||||
sql,
|
|
||||||
bindVar,
|
|
||||||
{
|
|
||||||
outFormat : oracledb.ARRAY,
|
|
||||||
resultSet : true
|
|
||||||
},
|
|
||||||
function(err) {
|
|
||||||
// NJS-019: ResultSet cannot be returned for non-query statements
|
|
||||||
should.exist(err);
|
|
||||||
(err.message).should.startWith("NJS-019:");
|
|
||||||
cb();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
},
|
|
||||||
function(cb) {
|
|
||||||
var ref_proc_drop = "DROP PROCEDURE nodb_ref";
|
|
||||||
connection.execute(
|
|
||||||
ref_proc_drop,
|
|
||||||
function(err){
|
|
||||||
should.not.exist(err);
|
|
||||||
cb();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
], done);
|
|
||||||
}); // 84.5.12
|
|
||||||
|
|
||||||
it('84.5.13 fetch CLOB with stream', function(done) {
|
it('84.5.13 fetch CLOB with stream', function(done) {
|
||||||
var id = insertID++;
|
var id = insertID++;
|
||||||
var specialStr = '84.5.13';
|
var specialStr = '84.5.13';
|
||||||
|
|
|
@ -1492,65 +1492,6 @@ describe('85. fetchClobAsString2.js', function() {
|
||||||
], done);
|
], done);
|
||||||
}); // 85.3.13
|
}); // 85.3.13
|
||||||
|
|
||||||
it.skip('85.3.14 works with REF CURSOR', function(done) {
|
|
||||||
var id = insertID++;
|
|
||||||
var specialStr = '85.3.14';
|
|
||||||
var contentLength = 100;
|
|
||||||
var content = random.getRandomString(contentLength, specialStr);
|
|
||||||
|
|
||||||
async.series([
|
|
||||||
function(cb) {
|
|
||||||
insertIntoClobTable1(id, content, cb);
|
|
||||||
},
|
|
||||||
function(cb) {
|
|
||||||
var ref_proc = "CREATE OR REPLACE PROCEDURE nodb_ref(clob_cursor OUT SYS_REFCURSOR)\n" +
|
|
||||||
"AS \n" +
|
|
||||||
"BEGIN \n" +
|
|
||||||
" OPEN clob_cursor FOR \n" +
|
|
||||||
" SELECT C from nodb_clob1 WHERE ID = " + id + "; \n" +
|
|
||||||
"END;";
|
|
||||||
connection.execute(
|
|
||||||
ref_proc,
|
|
||||||
function(err){
|
|
||||||
should.not.exist(err);
|
|
||||||
cb();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
},
|
|
||||||
function(cb) {
|
|
||||||
var sql = "BEGIN nodb_ref(:c); END;";
|
|
||||||
var bindVar = {
|
|
||||||
c: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
|
|
||||||
};
|
|
||||||
connection.execute(
|
|
||||||
sql,
|
|
||||||
bindVar,
|
|
||||||
{
|
|
||||||
outFormat : oracledb.OBJECT,
|
|
||||||
fetchInfo : { C : { type : oracledb.STRING } },
|
|
||||||
resultSet : true
|
|
||||||
},
|
|
||||||
function(err) {
|
|
||||||
// NJS-019: ResultSet cannot be returned for non-query statements
|
|
||||||
should.exist(err);
|
|
||||||
(err.message).should.startWith("NJS-019:");
|
|
||||||
cb();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
},
|
|
||||||
function(cb) {
|
|
||||||
var ref_proc_drop = "DROP PROCEDURE nodb_ref";
|
|
||||||
connection.execute(
|
|
||||||
ref_proc_drop,
|
|
||||||
function(err){
|
|
||||||
should.not.exist(err);
|
|
||||||
cb();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
], done);
|
|
||||||
});
|
|
||||||
|
|
||||||
}); // 85.3
|
}); // 85.3
|
||||||
|
|
||||||
describe('85.4 fetch CLOB columns by setting fetchInfo option and outFormat = oracledb.ARRAY', function() {
|
describe('85.4 fetch CLOB columns by setting fetchInfo option and outFormat = oracledb.ARRAY', function() {
|
||||||
|
@ -2338,64 +2279,5 @@ describe('85. fetchClobAsString2.js', function() {
|
||||||
], done);
|
], done);
|
||||||
}); // 85.5.13
|
}); // 85.5.13
|
||||||
|
|
||||||
it.skip('85.5.14 works with REF CURSOR', function(done) {
|
|
||||||
var id = insertID++;
|
|
||||||
var specialStr = '85.5.14';
|
|
||||||
var contentLength = 100;
|
|
||||||
var content = random.getRandomString(contentLength, specialStr);
|
|
||||||
|
|
||||||
async.series([
|
|
||||||
function(cb) {
|
|
||||||
insertIntoClobTable1(id, content, cb);
|
|
||||||
},
|
|
||||||
function(cb) {
|
|
||||||
var ref_proc = "CREATE OR REPLACE PROCEDURE nodb_ref(clob_cursor OUT SYS_REFCURSOR)\n" +
|
|
||||||
"AS \n" +
|
|
||||||
"BEGIN \n" +
|
|
||||||
" OPEN clob_cursor FOR \n" +
|
|
||||||
" SELECT C from nodb_clob1 WHERE ID = " + id + "; \n" +
|
|
||||||
"END;";
|
|
||||||
connection.execute(
|
|
||||||
ref_proc,
|
|
||||||
function(err){
|
|
||||||
should.not.exist(err);
|
|
||||||
cb();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
},
|
|
||||||
function(cb) {
|
|
||||||
var sql = "BEGIN nodb_ref(:c); END;";
|
|
||||||
var bindVar = {
|
|
||||||
c: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
|
|
||||||
};
|
|
||||||
connection.execute(
|
|
||||||
sql,
|
|
||||||
bindVar,
|
|
||||||
{
|
|
||||||
outFormat : oracledb.ARRAY,
|
|
||||||
fetchInfo : { C : { type : oracledb.STRING } },
|
|
||||||
resultSet : true
|
|
||||||
},
|
|
||||||
function(err) {
|
|
||||||
// NJS-019: ResultSet cannot be returned for non-query statements
|
|
||||||
should.exist(err);
|
|
||||||
(err.message).should.startWith("NJS-019:");
|
|
||||||
cb();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
},
|
|
||||||
function(cb) {
|
|
||||||
var ref_proc_drop = "DROP PROCEDURE nodb_ref";
|
|
||||||
connection.execute(
|
|
||||||
ref_proc_drop,
|
|
||||||
function(err){
|
|
||||||
should.not.exist(err);
|
|
||||||
cb();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
], done);
|
|
||||||
});
|
|
||||||
|
|
||||||
}); // 85.5
|
}); // 85.5
|
||||||
});
|
});
|
||||||
|
|
|
@ -0,0 +1,195 @@
|
||||||
|
/* 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', () => {
|
||||||
|
|
||||||
|
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 () => {
|
||||||
|
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 () => {
|
||||||
|
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 OBJECT', async () => {
|
||||||
|
try {
|
||||||
|
const conn = await oracledb.getConnection(dbconfig);
|
||||||
|
let opts = { resultSet: true, outFormat: oracledb.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
|
||||||
|
});
|
|
@ -283,11 +283,6 @@ Overview of node-oracledb functional tests
|
||||||
12.7 Testing maxRows
|
12.7 Testing maxRows
|
||||||
12.7.1 maxRows option is ignored when resultSet option is true
|
12.7.1 maxRows option is ignored when resultSet option is true
|
||||||
12.7.2 maxRows option is ignored with REF Cursor
|
12.7.2 maxRows option is ignored with REF Cursor
|
||||||
12.8 Testing errInvalidResultSet
|
|
||||||
12.8.1 Negative: UPDATE BIND out with oracledb.CURSOR - bind by name
|
|
||||||
12.8.2 Negative: UPDATE BIND out with oracledb.CURSOR - bind by position
|
|
||||||
12.8.3 Negative: INSERT BIND out with oracledb.CURSOR - bind by name
|
|
||||||
12.8.4 Negative: INSERT BIND out with oracledb.CURSOR - bind by position
|
|
||||||
|
|
||||||
13. stream1.js
|
13. stream1.js
|
||||||
13.1 Testing QueryStream
|
13.1 Testing QueryStream
|
||||||
|
@ -324,13 +319,10 @@ Overview of node-oracledb functional tests
|
||||||
14.5 explicitly setting resultSet option to be false takes no effect
|
14.5 explicitly setting resultSet option to be false takes no effect
|
||||||
14.6 maxRows option is ignored as expect
|
14.6 maxRows option is ignored as expect
|
||||||
14.7 Negative - queryStream() has no parameters
|
14.7 Negative - queryStream() has no parameters
|
||||||
14.8 Negative - give invalid SQL as first parameter
|
|
||||||
14.9 Negatvie - give non-query SQL
|
|
||||||
14.10 metadata event - single column
|
14.10 metadata event - single column
|
||||||
14.11 metadata event - multiple columns
|
14.11 metadata event - multiple columns
|
||||||
14.12 metadata event - all column names occurring
|
14.12 metadata event - all column names occurring
|
||||||
14.13 metadata event - no return rows
|
14.13 metadata event - no return rows
|
||||||
14.14 metadata event - negative: non-query SQL
|
|
||||||
14.15 metadata event - case sensitive columns
|
14.15 metadata event - case sensitive columns
|
||||||
14.16 metadata event - large number of columns
|
14.16 metadata event - large number of columns
|
||||||
14.17 metadata event - single character column
|
14.17 metadata event - single character column
|
||||||
|
@ -853,8 +845,6 @@ Overview of node-oracledb functional tests
|
||||||
55.7 getting multiple resultSets
|
55.7 getting multiple resultSets
|
||||||
55.7.1 can access multiple resultSet on one connection
|
55.7.1 can access multiple resultSet on one connection
|
||||||
55.7.2 can access multiple REF Cursor
|
55.7.2 can access multiple REF Cursor
|
||||||
55.8 Negative - resultSet is only for query statement
|
|
||||||
55.8.1 resultSet cannot be returned for non-query statements
|
|
||||||
55.9 test querying a PL/SQL function
|
55.9 test querying a PL/SQL function
|
||||||
55.9.1
|
55.9.1
|
||||||
55.10 calls getRows() once and then close RS before getting more rows
|
55.10 calls getRows() once and then close RS before getting more rows
|
||||||
|
@ -1788,7 +1778,6 @@ Overview of node-oracledb functional tests
|
||||||
84.3.9 fetch multiple CLOB rows as String
|
84.3.9 fetch multiple CLOB rows as String
|
||||||
84.3.10 fetch the same CLOB column multiple times
|
84.3.10 fetch the same CLOB column multiple times
|
||||||
84.3.11 works with update statement
|
84.3.11 works with update statement
|
||||||
84.3.12 works with REF CURSOR
|
|
||||||
84.3.13 fetch CLOB with stream
|
84.3.13 fetch CLOB with stream
|
||||||
84.3.14 works with setting oracledb.maxRows < actual number of rows in the table
|
84.3.14 works with setting oracledb.maxRows < actual number of rows in the table
|
||||||
84.3.15 works with setting oracledb.maxRows > actual number of rows in the table
|
84.3.15 works with setting oracledb.maxRows > actual number of rows in the table
|
||||||
|
@ -1822,7 +1811,6 @@ Overview of node-oracledb functional tests
|
||||||
84.5.9 fetch multiple CLOB rows as String
|
84.5.9 fetch multiple CLOB rows as String
|
||||||
84.5.10 fetch the same CLOB column multiple times
|
84.5.10 fetch the same CLOB column multiple times
|
||||||
84.5.11 works with update statement
|
84.5.11 works with update statement
|
||||||
84.5.12 works with REF CURSOR
|
|
||||||
84.5.13 fetch CLOB with stream
|
84.5.13 fetch CLOB with stream
|
||||||
84.5.14 works with setting oracledb.maxRows < actual number of rows in the table
|
84.5.14 works with setting oracledb.maxRows < actual number of rows in the table
|
||||||
84.5.15 works with setting oracledb.maxRows > actual number of rows in the table
|
84.5.15 works with setting oracledb.maxRows > actual number of rows in the table
|
||||||
|
@ -1877,7 +1865,6 @@ Overview of node-oracledb functional tests
|
||||||
85.3.11 works with update statement
|
85.3.11 works with update statement
|
||||||
85.3.12 works with setting oracledb.maxRows < actual number of rows in the table
|
85.3.12 works with setting oracledb.maxRows < actual number of rows in the table
|
||||||
85.3.13 works with setting oracledb.maxRows > actual number of rows in the table
|
85.3.13 works with setting oracledb.maxRows > actual number of rows in the table
|
||||||
85.3.14 works with REF CURSOR
|
|
||||||
85.4 fetch CLOB columns by setting fetchInfo option and outFormat = oracledb.ARRAY
|
85.4 fetch CLOB columns by setting fetchInfo option and outFormat = oracledb.ARRAY
|
||||||
85.4.1 works with NULL value
|
85.4.1 works with NULL value
|
||||||
85.4.2 works with empty String
|
85.4.2 works with empty String
|
||||||
|
@ -1907,7 +1894,6 @@ Overview of node-oracledb functional tests
|
||||||
85.5.11 works with update statement
|
85.5.11 works with update statement
|
||||||
85.5.12 works with setting oracledb.maxRows < actual number of rows in the table
|
85.5.12 works with setting oracledb.maxRows < actual number of rows in the table
|
||||||
85.5.13 works with setting oracledb.maxRows > actual number of rows in the table
|
85.5.13 works with setting oracledb.maxRows > actual number of rows in the table
|
||||||
85.5.14 works with REF CURSOR
|
|
||||||
|
|
||||||
86. fetchClobAsString3.js
|
86. fetchClobAsString3.js
|
||||||
86.1 fetch multiple CLOBs
|
86.1 fetch multiple CLOBs
|
||||||
|
@ -4481,4 +4467,9 @@ Overview of node-oracledb functional tests
|
||||||
191. currentSchema.js
|
191. currentSchema.js
|
||||||
191.1 the value will be empty until it has been explicitly set
|
191.1 the value will be empty until it has been explicitly set
|
||||||
191.2 SQL alternative
|
191.2 SQL alternative
|
||||||
191.3 Negative - can not set inexistent schema
|
191.3 Negative - can not set inexistent schema
|
||||||
|
|
||||||
|
192. implicitResults.js
|
||||||
|
192.1 implicit results with rows fetched
|
||||||
|
192.2 implicit Results with Result Sets
|
||||||
|
192.3 multiple options, outFormat is OBJECT
|
|
@ -216,4 +216,6 @@ test/plsqlBindList.js
|
||||||
test/fetchRawAsString.js
|
test/fetchRawAsString.js
|
||||||
test/writableProperties2.js
|
test/writableProperties2.js
|
||||||
test/fetchBinaryTypesAsString.js
|
test/fetchBinaryTypesAsString.js
|
||||||
test/currentSchema.js
|
test/currentSchema.js
|
||||||
|
|
||||||
|
test/implicitResults.js
|
|
@ -140,7 +140,7 @@ describe("73. poolPing.js", function() {
|
||||||
pool.poolPingInterval = newInterval;
|
pool.poolPingInterval = newInterval;
|
||||||
} catch(err) {
|
} catch(err) {
|
||||||
should.exist(err);
|
should.exist(err);
|
||||||
(err.message).should.equal("Cannot assign to read only property 'poolPingInterval' of object '#<Pool>'")
|
(err.message).should.equal("Cannot assign to read only property 'poolPingInterval' of object '#<Pool>'");
|
||||||
}
|
}
|
||||||
cb();
|
cb();
|
||||||
|
|
||||||
|
|
|
@ -60,7 +60,7 @@ random.getRandomInt = function(min, max) {
|
||||||
min = Math.ceil(min);
|
min = Math.ceil(min);
|
||||||
max = Math.floor(max);
|
max = Math.floor(max);
|
||||||
return Math.floor(Math.random() * (max - min)) + min;
|
return Math.floor(Math.random() * (max - min)) + min;
|
||||||
}
|
};
|
||||||
|
|
||||||
random.getIntArray = function(N) {
|
random.getIntArray = function(N) {
|
||||||
var arr = Array.apply(null, Array(N));
|
var arr = Array.apply(null, Array(N));
|
||||||
|
|
|
@ -1388,75 +1388,6 @@ describe('12. resultSet1.js', function() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
}); // 12.7
|
||||||
describe.skip('12.8 Testing errInvalidResultSet', function() {
|
|
||||||
it('12.8.1 Negative: UPDATE BIND out with oracledb.CURSOR - bind by name', function(done) {
|
|
||||||
var sql = "update nodb_rs1_emp set employees_name = 'abc' where employees_id = 1 RETURNING employees_name INTO :name";
|
|
||||||
connection.execute(
|
|
||||||
sql,
|
|
||||||
{ name: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } },
|
|
||||||
{ resultSet: true},
|
|
||||||
function(err) {
|
|
||||||
should.strictEqual(
|
|
||||||
err.message,
|
|
||||||
'NJS-019: ResultSet cannot be returned for non-query statements'
|
|
||||||
);
|
|
||||||
done();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('12.8.2 Negative: UPDATE BIND out with oracledb.CURSOR - bind by position', function(done) {
|
|
||||||
var sql = "update nodb_rs1_emp set employees_name = 'abc' where employees_id = 1 RETURNING employees_name INTO :name";
|
|
||||||
connection.execute(
|
|
||||||
sql,
|
|
||||||
[ { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } ],
|
|
||||||
{ resultSet: true},
|
|
||||||
function(err) {
|
|
||||||
should.strictEqual(
|
|
||||||
err.message,
|
|
||||||
'NJS-019: ResultSet cannot be returned for non-query statements'
|
|
||||||
);
|
|
||||||
done();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('12.8.3 Negative: INSERT BIND out with oracledb.CURSOR - bind by name', function(done) {
|
|
||||||
var sql = "insert into nodb_rs1_emp (:id, :name) RETURNING employees_name INTO :out";
|
|
||||||
connection.execute(
|
|
||||||
sql,
|
|
||||||
{
|
|
||||||
id: { val:1000, type: oracledb.CURSOR, dir: oracledb.BIND_OUT },
|
|
||||||
name: { val:'hello', type: oracledb.STRING, dir: oracledb.BIND_IN },
|
|
||||||
out: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
|
|
||||||
},
|
|
||||||
{ resultSet: true},
|
|
||||||
function(err) {
|
|
||||||
should.strictEqual(
|
|
||||||
err.message,
|
|
||||||
'NJS-019: ResultSet cannot be returned for non-query statements'
|
|
||||||
);
|
|
||||||
done();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('12.8.4 Negative: INSERT BIND out with oracledb.CURSOR - bind by position', function(done) {
|
|
||||||
var sql = "insert into nodb_rs1_emp (:id, :name) RETURNING employees_name INTO :out";
|
|
||||||
connection.execute(
|
|
||||||
sql,
|
|
||||||
[ 1001, 'hello', { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } ],
|
|
||||||
{ resultSet: true},
|
|
||||||
function(err) {
|
|
||||||
should.strictEqual(
|
|
||||||
err.message,
|
|
||||||
'NJS-019: ResultSet cannot be returned for non-query statements'
|
|
||||||
);
|
|
||||||
done();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -600,32 +600,6 @@ describe('55. resultSet2.js', function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe.skip('55.8 Negative - resultSet is only for query statement', function() {
|
|
||||||
before(function(done){
|
|
||||||
setUp(connection, tableName, done);
|
|
||||||
});
|
|
||||||
|
|
||||||
after(function(done) {
|
|
||||||
clearUp(connection, tableName, done);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('55.8.1 resultSet cannot be returned for non-query statements', function(done) {
|
|
||||||
connection.should.be.ok();
|
|
||||||
connection.execute(
|
|
||||||
"UPDATE nodb_rs2_emp SET employees_name = 'Alan' WHERE employees_id = 100",
|
|
||||||
[],
|
|
||||||
{ resultSet: true },
|
|
||||||
function(err) {
|
|
||||||
should.exist(err);
|
|
||||||
// console.log(err);
|
|
||||||
err.message.should.startWith('NJS-019:');
|
|
||||||
done();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('55.9 test querying a PL/SQL function', function() {
|
describe('55.9 test querying a PL/SQL function', function() {
|
||||||
before(function(done){
|
before(function(done){
|
||||||
setUp(connection, tableName, done);
|
setUp(connection, tableName, done);
|
||||||
|
|
|
@ -230,41 +230,6 @@ describe('14. stream2.js', function() {
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
|
||||||
it.skip('14.8 Negative - give invalid SQL as first parameter', function(done) {
|
|
||||||
var stream = connection.queryStream('foobar');
|
|
||||||
|
|
||||||
stream.on('error', function(err) {
|
|
||||||
should.exist(err);
|
|
||||||
should.strictEqual(
|
|
||||||
err.message,
|
|
||||||
"NJS-019: ResultSet cannot be returned for non-query statements"
|
|
||||||
);
|
|
||||||
done();
|
|
||||||
});
|
|
||||||
|
|
||||||
stream.on('data', function(data) {
|
|
||||||
should.not.exist(data);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it.skip('14.9 Negatvie - give non-query SQL', function(done) {
|
|
||||||
var sql = "INSERT INTO nodb_stream2 VALUES (300, 'staff 300', EMPTY_CLOB())";
|
|
||||||
var stream = connection.queryStream(sql);
|
|
||||||
|
|
||||||
stream.on('error', function(err) {
|
|
||||||
should.exist(err);
|
|
||||||
should.strictEqual(
|
|
||||||
err.message,
|
|
||||||
"NJS-019: ResultSet cannot be returned for non-query statements"
|
|
||||||
);
|
|
||||||
done();
|
|
||||||
});
|
|
||||||
|
|
||||||
stream.on('data', function(data) {
|
|
||||||
should.not.exist(data);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('14.10 metadata event - single column', function(done) {
|
it('14.10 metadata event - single column', function(done) {
|
||||||
var sql = 'SELECT employee_name FROM nodb_stream2 WHERE employee_id = :id';
|
var sql = 'SELECT employee_name FROM nodb_stream2 WHERE employee_id = :id';
|
||||||
var stream = connection.queryStream(sql, { id: 40 });
|
var stream = connection.queryStream(sql, { id: 40 });
|
||||||
|
@ -370,30 +335,6 @@ describe('14. stream2.js', function() {
|
||||||
stream.on('end', done);
|
stream.on('end', done);
|
||||||
});
|
});
|
||||||
|
|
||||||
it.skip('14.14 metadata event - negative: non-query SQL', function(done) {
|
|
||||||
var sql = "INSERT INTO nodb_stream2 VALUES (300, 'staff 300', EMPTY_CLOB())";
|
|
||||||
var stream = connection.queryStream(sql);
|
|
||||||
|
|
||||||
var metaDataRead = false;
|
|
||||||
stream.on('metadata', function() {
|
|
||||||
metaDataRead = true;
|
|
||||||
});
|
|
||||||
|
|
||||||
stream.on('error', function(err) {
|
|
||||||
should.exist(err);
|
|
||||||
should.strictEqual(
|
|
||||||
err.message,
|
|
||||||
"NJS-019: ResultSet cannot be returned for non-query statements"
|
|
||||||
);
|
|
||||||
should.strictEqual(metaDataRead, false);
|
|
||||||
done();
|
|
||||||
});
|
|
||||||
|
|
||||||
stream.on('data', function(data) {
|
|
||||||
should.not.exist(data);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('14.15 metadata event - case sensitive columns', function(done) {
|
it('14.15 metadata event - case sensitive columns', function(done) {
|
||||||
async.series([
|
async.series([
|
||||||
function(cb) {
|
function(cb) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. */
|
/* Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. */
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
*
|
*
|
||||||
|
@ -47,7 +47,7 @@ testsUtil.assertThrowsAsync = async function(fn, RegExp) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
testsUtil.createTable = async function(tableName, sql) {
|
testsUtil.sqlCreateTable = function(tableName, sql) {
|
||||||
let sqlCreateTab =
|
let sqlCreateTab =
|
||||||
`BEGIN \n` +
|
`BEGIN \n` +
|
||||||
` DECLARE \n` +
|
` DECLARE \n` +
|
||||||
|
@ -61,10 +61,25 @@ testsUtil.createTable = async function(tableName, sql) {
|
||||||
` END; \n` +
|
` END; \n` +
|
||||||
` EXECUTE IMMEDIATE (' ${sql} '); \n` +
|
` EXECUTE IMMEDIATE (' ${sql} '); \n` +
|
||||||
`END; `;
|
`END; `;
|
||||||
|
return sqlCreateTab;
|
||||||
|
};
|
||||||
|
|
||||||
|
testsUtil.createTable = async function(tableName, sql) {
|
||||||
|
let plsql = testsUtil.sqlCreateTable(tableName, sql);
|
||||||
try {
|
try {
|
||||||
const conn = await oracledb.getConnection(dbconfig);
|
const conn = await oracledb.getConnection(dbconfig);
|
||||||
await conn.execute(sqlCreateTab);
|
await conn.execute(plsql);
|
||||||
|
await conn.close();
|
||||||
|
} catch(err) {
|
||||||
|
console.log('Error in creating table:\n', err);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
testsUtil.dropTable = async function(tableName) {
|
||||||
|
let sql = `DROP TABLE ${tableName} PURGE`;
|
||||||
|
try {
|
||||||
|
const conn = await oracledb.getConnection(dbconfig);
|
||||||
|
await conn.execute(sql);
|
||||||
await conn.close();
|
await conn.close();
|
||||||
} catch(err) {
|
} catch(err) {
|
||||||
console.log('Error in creating table:\n', err);
|
console.log('Error in creating table:\n', err);
|
||||||
|
|
|
@ -76,7 +76,7 @@ describe('189. writableProperties2.js', function() {
|
||||||
should.not.exist(err);
|
should.not.exist(err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
|
|
||||||
it('189.1 Allows overwriting of public methods on SodaDatabase instance', async function() {
|
it('189.1 Allows overwriting of public methods on SodaDatabase instance', async function() {
|
||||||
try {
|
try {
|
||||||
|
|
Loading…
Reference in New Issue