Skip to content

Commit 4ac1d79

Browse files
committed
Update some maxRows tests
1 parent dfbc32a commit 4ac1d79

File tree

2 files changed

+118
-91
lines changed

2 files changed

+118
-91
lines changed

test/connection.js

+112-86
Original file line numberDiff line numberDiff line change
@@ -160,124 +160,149 @@ describe('1. connection.js', function(){
160160
});
161161
});
162162

163-
describe('1.2 limits the number of rows fetched', function(){
164-
var connection = false;
165-
var createTable =
166-
"BEGIN \
167-
DECLARE \
168-
e_table_missing EXCEPTION; \
169-
PRAGMA EXCEPTION_INIT(e_table_missing, -00942); \
170-
BEGIN \
171-
EXECUTE IMMEDIATE ('DROP TABLE nodb_conn_emp2 PURGE'); \
172-
EXCEPTION \
173-
WHEN e_table_missing \
174-
THEN NULL; \
175-
END; \
176-
EXECUTE IMMEDIATE (' \
177-
CREATE TABLE nodb_conn_emp2 ( \
178-
employee_id NUMBER, \
179-
employee_name VARCHAR2(20) \
180-
) \
181-
'); \
182-
END; ";
183-
184-
var insertRows =
185-
"DECLARE \
186-
x NUMBER := 0; \
187-
n VARCHAR2(20); \
188-
BEGIN \
189-
FOR i IN 1..107 LOOP \
190-
x := x + 1; \
191-
n := 'staff ' || x; \
192-
INSERT INTO nodb_conn_emp2 VALUES (x, n); \
193-
END LOOP; \
194-
END; ";
195-
var rowsAmount = 107;
163+
describe("1.2 'maxRows' property limits the number of fetched rows", function(){
164+
var connection = null;
165+
var totalAmount = 107;
196166

197167
before(function(done) {
198-
199-
oracledb.getConnection(
200-
credentials,
201-
function(err, conn) {
202-
should.not.exist(err);
203-
connection = conn;
204-
connection.execute(createTable, function(err) {
168+
async.series([
169+
function getConn(cb) {
170+
oracledb.getConnection(dbConfig, function(err, conn) {
205171
should.not.exist(err);
206-
connection.execute(insertRows, function(err) {
207-
should.not.exist(err);
208-
done();
209-
});
172+
connection = conn;
173+
cb();
210174
});
211-
}
212-
);
175+
},
176+
function createTab(cb) {
177+
var proc = "BEGIN \n" +
178+
" DECLARE \n" +
179+
" e_table_missing EXCEPTION; \n" +
180+
" PRAGMA EXCEPTION_INIT(e_table_missing, -00942); \n" +
181+
" BEGIN \n" +
182+
" EXECUTE IMMEDIATE('DROP TABLE nodb_tab_conn_emp2 PURGE'); \n" +
183+
" EXCEPTION \n" +
184+
" WHEN e_table_missing \n" +
185+
" THEN NULL; \n" +
186+
" END; \n" +
187+
" EXECUTE IMMEDIATE (' \n" +
188+
" CREATE TABLE nodb_tab_conn_emp2 ( \n" +
189+
" id NUMBER NOT NULL, \n" +
190+
" name VARCHAR2(20) \n" +
191+
" ) \n" +
192+
" '); \n" +
193+
"END; ";
213194

214-
}); // before
195+
connection.execute(
196+
proc,
197+
function(err) {
198+
should.not.exist(err);
199+
cb();
200+
}
201+
);
202+
},
203+
function insertData(cb) {
204+
var proc = "DECLARE \n" +
205+
" x NUMBER := 0; \n" +
206+
" n VARCHAR2(20); \n" +
207+
"BEGIN \n" +
208+
" FOR i IN 1..107 LOOP \n" +
209+
" x := x + 1; \n" +
210+
" n := 'staff ' || x; \n" +
211+
" INSERT INTO nodb_tab_conn_emp2 VALUES (x, n); \n" +
212+
" END LOOP; \n" +
213+
"END; ";
215214

216-
after(function(done){
217-
connection.execute(
218-
'DROP TABLE nodb_conn_emp2 PURGE',
219-
function(err){
220-
if(err) { console.error(err.message); return; }
221-
connection.release( function(err) {
222-
if(err) { console.error(err.message); return; }
223-
done();
215+
connection.execute(
216+
proc,
217+
function(err) {
218+
should.not.exist(err);
219+
cb();
220+
}
221+
);
222+
}
223+
], done);
224+
}); // before()
225+
226+
after(function(done) {
227+
async.series([
228+
function(cb) {
229+
connection.execute(
230+
"DROP TABLE nodb_tab_conn_emp2 PURGE",
231+
function(err) {
232+
should.not.exist(err);
233+
cb();
234+
}
235+
);
236+
},
237+
function(cb) {
238+
connection.close(function(err) {
239+
should.not.exist(err);
240+
cb();
224241
});
225242
}
226-
);
227-
});
243+
], done);
244+
}); // after()
228245

229-
it.skip('1.2.1 by default, the number is 100', function(done){
230-
var defaultLimit = oracledb.maxRows;
231-
defaultLimit.should.be.exactly(100);
246+
var verifyRows = function(rows, amount) {
247+
for (var i = 0; i < amount; i++) {
248+
should.strictEqual(rows[i][0], (i + 1));
249+
should.strictEqual(rows[i][1], ("staff " + String(i + 1)) );
250+
}
251+
};
252+
253+
var sqlQuery = "SELECT * FROM nodb_tab_conn_emp2 ORDER BY id";
254+
255+
it('1.2.1 Default maxRows == 0, which means unlimited', function(done){
256+
should.strictEqual(oracledb.maxRows, 0);
232257

233-
connection.should.be.ok();
234258
connection.execute(
235-
"SELECT * FROM nodb_conn_emp2 ORDER BY employee_id",
259+
sqlQuery,
236260
function(err, result){
237261
should.not.exist(err);
238262
should.exist(result);
239-
// Return 100 records although the table has 107 rows.
240-
(result.rows).should.have.length(100);
263+
should.strictEqual(result.rows.length, totalAmount);
264+
verifyRows(result.rows, totalAmount);
241265
done();
242266
}
243267
);
244268
});
245269

246-
it('1.2.2 can also specify for each execution', function(done){
247-
connection.should.be.ok();
270+
it('1.2.2 can be specified for at execution', function(done){
271+
var fetchAmount = 25;
248272
connection.execute(
249-
"SELECT * FROM nodb_conn_emp2 ORDER BY employee_id",
250-
{}, { maxRows: 25 },
273+
sqlQuery,
274+
{},
275+
{ maxRows: fetchAmount },
251276
function(err, result){
252277
should.not.exist(err);
253278
should.exist(result);
254-
// Return 25 records according to execution setting
255-
(result.rows).should.have.length(25);
279+
should.strictEqual(result.rows.length, fetchAmount);
280+
verifyRows(result.rows, fetchAmount);
256281
done();
257282
}
258283
);
259284
});
260285

261-
it.skip('1.2.3 can not set maxRows to be 0', function(done){
262-
connection.should.be.ok();
286+
it('1.2.3 maxRows == amount of rows) means unlimited', function(done){
263287
connection.execute(
264-
"SELECT * FROM nodb_conn_emp2 ORDER BY employee_id",
265-
{}, { maxRows: 0 },
288+
sqlQuery,
289+
{},
290+
{ maxRows: totalAmount },
266291
function(err, result){
267-
should.exist(err);
268-
(err.message).should.startWith('NJS-026:');
269-
// NJS-026: maxRows must be greater than zero
270-
should.not.exist(result);
292+
should.not.exist(err);
293+
should.exist(result);
294+
should.strictEqual(result.rows.length, totalAmount);
295+
verifyRows(result.rows, totalAmount);
271296
done();
272297
}
273298
);
274299
});
275300

276301
it('1.2.4 cannot set maxRows to be a negative number', function(done){
277-
connection.should.be.ok();
278302
connection.execute(
279-
"SELECT * FROM nodb_conn_emp2 ORDER BY employee_id",
280-
{}, {maxRows: -5},
303+
sqlQuery,
304+
{},
305+
{ maxRows: -5 },
281306
function(err, result){
282307
should.exist(err);
283308
(err.message).should.startWith('NJS-007:');
@@ -287,14 +312,15 @@ describe('1. connection.js', function(){
287312
);
288313
});
289314

290-
it('1.2.5 sets maxRows to be very large value', function(done) {
315+
it('1.2.5 sets maxRows to be large value', function(done) {
291316
connection.execute(
292-
"SELECT * FROM nodb_conn_emp2 ORDER BY employee_id",
317+
sqlQuery,
293318
{},
294-
{maxRows: 500000},
319+
{ maxRows: 500000 },
295320
function(err, result){
296321
should.not.exist(err);
297-
(result.rows.length).should.eql(rowsAmount);
322+
should.exist(result);
323+
verifyRows(result.rows, totalAmount);
298324
done();
299325
}
300326
);
@@ -305,7 +331,7 @@ describe('1. connection.js', function(){
305331

306332
var myoffset = 2; // number of rows to skip
307333
var mymaxnumrows = 6; // number of rows to fetch
308-
var sql = "SELECT employee_id, employee_name FROM nodb_conn_emp2 ORDER BY employee_id";
334+
var sql = "SELECT * FROM nodb_tab_conn_emp2 ORDER BY id";
309335

310336
if (connection.oracleServerVersion >= 1201000000) {
311337
// 12c row-limiting syntax

test/list.txt

+6-5
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@ Overview of node-oracledb functional tests
66
1.1.2 ARRAY format explicitly
77
1.1.3 OBJECT format
88
1.1.4 Negative test - invalid outFormat value
9-
1.2 limits the number of rows fetched
10-
1.2.1 by default, the number is 100
11-
1.2.2 can also specify for each execution
12-
1.2.3 can not set maxRows to be 0
9+
1.2 'maxRows' property limits the number of fetched rows
10+
1.2.1 Default maxRows == 0, which means unlimited
11+
1.2.2 can be specified for at execution
12+
1.2.3 maxRows == amount of rows) means unlimited
1313
1.2.4 cannot set maxRows to be a negative number
14-
1.2.5 sets maxRows to be very large value
14+
1.2.5 sets maxRows to be large value
15+
1.2.6 shows 12c new way to limit the number of records fetched by queries
1516
1.3 can call PL/SQL procedures
1617
1.3.1 bind parameters in various ways
1718
1.4 statementCacheSize controls statement caching

0 commit comments

Comments
 (0)