@@ -43,6 +43,7 @@ const assert = require('assert');
43
43
const dbConfig = require ( './dbconfig.js' ) ;
44
44
const assist = require ( './dataTypeAssist.js' ) ;
45
45
const testsUtil = require ( './testsUtil.js' ) ;
46
+ const random = require ( './random.js' ) ;
46
47
47
48
const inFileName = 'test/clobexample.txt' ; // the file with text to be inserted into the database
48
49
const outFileName = 'test/clobstreamout.txt' ; // output file with the stream out data
@@ -164,6 +165,89 @@ describe('40. dataTypeClob.js', function() {
164
165
165
166
} ) ; // 40.1.2
166
167
168
+ it ( '40.1.3 CLOB getData(offset, len)' , async function ( ) {
169
+ const lenStr = 32768 ;
170
+ const specialStr = "40.1.3" ;
171
+ const largeStr = random . getRandomString ( lenStr , specialStr ) ;
172
+ const multiByteStr = 'aüÅæÖÆåøübcd' ;
173
+
174
+ const binds = [
175
+ [ 3 , largeStr ] ,
176
+ [ 4 , multiByteStr ]
177
+ ] ;
178
+ let result = await connection . executeMany (
179
+ `INSERT INTO nodb_myclobs (num, content) ` +
180
+ `VALUES (:1, :2)` ,
181
+ binds ,
182
+ [
183
+ { type : oracledb . NUMBER } ,
184
+ { type : oracledb . CLOB }
185
+ ] ) ;
186
+ assert . strictEqual ( result . rowsAffected , 2 ) ;
187
+
188
+ result = await connection . execute (
189
+ "SELECT content FROM nodb_myclobs WHERE num = :n" ,
190
+ { n : 3 } ) ;
191
+
192
+ let lob = result . rows [ 0 ] [ 0 ] ;
193
+ let clob = await lob . getData ( ) ;
194
+ assert . strictEqual ( largeStr , clob ) ;
195
+
196
+ let offset = 5 ;
197
+ let len = 10 ;
198
+ // starting from position 4 (largeStr[4]) to 10 characters.
199
+ clob = await lob . getData ( offset , len ) ;
200
+ assert . strictEqual ( largeStr . slice ( offset - 1 , offset + len - 1 ) , clob ) ;
201
+
202
+ // len not specified gives entire data starting from offset
203
+ offset = 5 ;
204
+ clob = await lob . getData ( offset ) ;
205
+ assert . strictEqual ( largeStr . slice ( offset - 1 ) , clob ) ;
206
+
207
+ // len specified as 0 gives error.
208
+ offset = 5 ;
209
+ len = 0 ;
210
+ await assert . rejects (
211
+ async ( ) => await lob . getData ( offset , len ) ,
212
+ / N J S - 0 0 5 : /
213
+ ) ;
214
+
215
+ // large number of characters starting from offset 5.
216
+ offset = 5 ;
217
+ len = 9999 ;
218
+ clob = await lob . getData ( offset , len ) ;
219
+ assert . strictEqual ( largeStr . slice ( offset - 1 , offset + len - 1 ) , clob ) ;
220
+
221
+ // len exceeding lob length is simply ignored and
222
+ // characters till end starting from offset is returned.
223
+ offset = 5 ;
224
+ len = 99999 ;
225
+ clob = await lob . getData ( offset , len ) ;
226
+ assert . strictEqual ( largeStr . slice ( offset - 1 ) , clob ) ;
227
+
228
+ // Invalid ofset, we get null.
229
+ offset = 99999 ;
230
+ len = 10 ;
231
+ clob = await lob . getData ( offset , len ) ;
232
+ assert . equal ( clob , null ) ;
233
+
234
+ result = await connection . execute (
235
+ "SELECT content FROM nodb_myclobs WHERE num = :n" ,
236
+ { n : 4 } ) ;
237
+
238
+ lob = result . rows [ 0 ] [ 0 ] ;
239
+
240
+ clob = await lob . getData ( ) ;
241
+ assert . strictEqual ( multiByteStr , clob ) ;
242
+
243
+ offset = 2 ;
244
+ len = 10 ;
245
+ // starting from position 1 (multiByteStr[1]) to 10 characters. "üÅæÖÆåøübc"
246
+ clob = await lob . getData ( offset , len ) ;
247
+ assert . strictEqual ( multiByteStr . slice ( offset - 1 , offset + len - 1 ) , clob ) ;
248
+
249
+ } ) ; // 40.1.3
250
+
167
251
} ) ; // 40.1
168
252
169
253
describe ( '40.2 stores null value correctly' , function ( ) {
0 commit comments