Skip to content

Commit 1718c22

Browse files
committed
Test collection of Date, named Oracle type binds
1 parent 92550be commit 1718c22

File tree

4 files changed

+158
-3
lines changed

4 files changed

+158
-3
lines changed

test/dbObject15.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,4 +135,4 @@ describe('214. dbObject15.js', () => {
135135
/OCI-22164/
136136
);
137137
}); // 214.4
138-
});
138+
});

test/dbObject16.js

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
/* Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. */
2+
3+
/******************************************************************************
4+
*
5+
* You may not use the identified files except in compliance with the Apache
6+
* License, Version 2.0 (the "License.")
7+
*
8+
* You may obtain a copy of the License at
9+
* http://www.apache.org/licenses/LICENSE-2.0.
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
*
15+
* See the License for the specific language governing permissions and
16+
* limitations under the License.
17+
*
18+
* NAME
19+
* 215. dbObject16.js
20+
*
21+
* DESCRIPTION
22+
* Test DB Object collection methods.
23+
*
24+
*****************************************************************************/
25+
'use strict';
26+
27+
const oracledb = require('oracledb');
28+
const should = require('should');
29+
const dbconfig = require('./dbconfig.js');
30+
const testsUtil = require('./testsUtil.js');
31+
32+
describe('215. dbObject16.js', () => {
33+
34+
let conn;
35+
36+
const TABLE = 'NODB_TAB_SPORTS';
37+
const PLAYER_T = 'NODB_TYP_PLAYERTYPE';
38+
const TEAM_T = 'NODB_TYP_TEAMTYPE';
39+
40+
before(async () => {
41+
try {
42+
conn = await oracledb.getConnection(dbconfig);
43+
44+
let plsql =`
45+
CREATE OR REPLACE TYPE ${PLAYER_T} AS OBJECT (
46+
shirtnumber NUMBER,
47+
name VARCHAR2(20),
48+
draft DATE
49+
);
50+
`;
51+
await conn.execute(plsql);
52+
53+
plsql =`
54+
CREATE OR REPLACE TYPE ${TEAM_T} AS VARRAY(10) OF ${PLAYER_T};
55+
`;
56+
await conn.execute(plsql);
57+
58+
let sql =`
59+
CREATE TABLE ${TABLE} (sportname VARCHAR2(20), team ${TEAM_T})
60+
`;
61+
plsql = testsUtil.sqlCreateTable(TABLE, sql);
62+
await conn.execute(plsql);
63+
64+
} catch(err) {
65+
should.not.exist(err);
66+
}
67+
}); // before()
68+
69+
after(async () => {
70+
try {
71+
72+
let sql = `DROP TABLE ${TABLE} PURGE`;
73+
await conn.execute(sql);
74+
75+
sql = `DROP TYPE ${TEAM_T} FORCE`;
76+
await conn.execute(sql);
77+
78+
sql = `DROP TYPE ${PLAYER_T} FORCE`;
79+
await conn.execute(sql);
80+
81+
await conn.close();
82+
} catch(err) {
83+
should.not.exist(err);
84+
}
85+
}); // after()
86+
87+
it('215.1 Collection of DATE, named Oracle type binds', async () => {
88+
try {
89+
const TeamTypeClass = await conn.getDbObjectClass(TEAM_T);
90+
91+
// Insert with explicit constructor
92+
const FrisbeePlayers = [
93+
{ SHIRTNUMBER: 11, NAME: 'Elizabeth', DRAFT: new Date(2008, 11, 17) },
94+
{ SHIRTNUMBER: 22, NAME: 'Frank', DRAFT: new Date(2011, 2, 4) },
95+
{ SHIRTNUMBER: 30, NAME: 'Charlie', DRAFT: new Date(2010, 9, 1) }
96+
];
97+
const FrisbeeTeam = new TeamTypeClass(FrisbeePlayers);
98+
99+
let sql = `INSERT INTO ${TABLE} VALUES (:sn, :t)`;
100+
let binds = { sn: "Frisbee", t: FrisbeeTeam };
101+
const result1 = await conn.execute(sql, binds);
102+
should.strictEqual(result1.rowsAffected, 1);
103+
104+
// Insert with direct binding
105+
const hockeyPlayers = [
106+
{ SHIRTNUMBER: 11, NAME: 'Elizabeth', DRAFT: new Date(1997, 3, 25) },
107+
{ SHIRTNUMBER: 22, NAME: 'Frank', DRAFT: new Date(1999, 7, 8)},
108+
];
109+
binds = { sn: "Hockey", t: { type: TeamTypeClass, val: hockeyPlayers } };
110+
const result2 = await conn.execute(sql, binds);
111+
should.strictEqual(result2.rowsAffected, 1);
112+
113+
// Use the Oracle type name
114+
const TennisPlayers = [
115+
{ SHIRTNUMBER: 21, NAME: 'John', DRAFT: new Date(1995, 2, 5) },
116+
{ SHIRTNUMBER: 23, NAME: 'Michael', DRAFT: new Date(2000, 6, 6) }
117+
];
118+
binds = { sn: "Tennis", t: { type: TEAM_T, val: TennisPlayers } };
119+
const result3 = await conn.execute(sql, binds);
120+
should.strictEqual(result3.rowsAffected, 1);
121+
122+
sql = `SELECT * FROM ${TABLE}`;
123+
const result4 = await conn.execute(sql, [], { outFormat:oracledb.OUT_FORMAT_OBJECT });
124+
should.strictEqual(result4.rows[0].SPORTNAME, 'Frisbee');
125+
should.strictEqual(result4.rows[1].SPORTNAME, 'Hockey');
126+
127+
for (let i = 0; i < result4.rows[0].TEAM.length; i++) {
128+
should.strictEqual(result4.rows[0].TEAM[i].SHIRTNUMBER, FrisbeePlayers[i].SHIRTNUMBER);
129+
should.strictEqual(result4.rows[0].TEAM[i].NAME, FrisbeePlayers[i].NAME);
130+
should.strictEqual(result4.rows[0].TEAM[i].DRAFT.getTime(), FrisbeePlayers[i].DRAFT.getTime());
131+
}
132+
133+
for (let i = 0; i < result4.rows[1].TEAM.length; i++) {
134+
should.strictEqual(result4.rows[1].TEAM[i].SHIRTNUMBER, hockeyPlayers[i].SHIRTNUMBER);
135+
should.strictEqual(result4.rows[1].TEAM[i].NAME, hockeyPlayers[i].NAME);
136+
should.strictEqual(result4.rows[1].TEAM[i].DRAFT.getTime(), hockeyPlayers[i].DRAFT.getTime());
137+
}
138+
139+
for (let i = 0; i < result4.rows[2].TEAM.length; i++) {
140+
should.strictEqual(result4.rows[2].TEAM[i].SHIRTNUMBER, TennisPlayers[i].SHIRTNUMBER);
141+
should.strictEqual(result4.rows[2].TEAM[i].NAME, TennisPlayers[i].NAME);
142+
should.strictEqual(result4.rows[2].TEAM[i].DRAFT.getTime(), TennisPlayers[i].DRAFT.getTime());
143+
}
144+
145+
} catch (err) {
146+
should.not.exist(err);
147+
}
148+
149+
}); // 215.1
150+
151+
});

test/list.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4577,4 +4577,7 @@ oracledb.OUT_FORMAT_OBJECT and resultSet = true
45774577
214.1 Getter() - access collection elements directly
45784578
214.2 Setter() - access collection element directly
45794579
214.3 Negative - delete the collection element directly
4580-
214.4 Negative - collection.deleteElement()
4580+
214.4 Negative - collection.deleteElement()
4581+
4582+
215. dbObject16.js
4583+
215.1 Collection of DATE, named Oracle type binds

test/opts/mocha.opts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,4 +238,5 @@ test/dbObject11.js
238238
test/dbObject12.js
239239
test/dbObject13.js
240240
test/dbObject14.js
241-
test/dbObject15.js
241+
test/dbObject15.js
242+
test/dbObject16.js

0 commit comments

Comments
 (0)