oracledb 6.1.0 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/README.md +2 -2
  2. package/build/Release/oracledb-6.3.0-darwin-x64.node +0 -0
  3. package/build/Release/oracledb-6.3.0-darwin-x64.node-buildinfo.txt +1 -0
  4. package/build/Release/oracledb-6.3.0-js-buildinfo.txt +1 -0
  5. package/build/Release/oracledb-6.3.0-linux-arm64.node +0 -0
  6. package/build/Release/oracledb-6.3.0-linux-arm64.node-buildinfo.txt +1 -0
  7. package/build/Release/oracledb-6.3.0-linux-x64.node +0 -0
  8. package/build/Release/oracledb-6.3.0-linux-x64.node-buildinfo.txt +1 -0
  9. package/build/Release/oracledb-6.3.0-win32-x64.node +0 -0
  10. package/build/Release/oracledb-6.3.0-win32-x64.node-buildinfo.txt +1 -0
  11. package/examples/README.md +26 -8
  12. package/examples/dbconfig.js +57 -40
  13. package/examples/example.js +6 -4
  14. package/lib/connection.js +67 -1
  15. package/lib/dbObject.js +9 -0
  16. package/lib/errors.js +25 -7
  17. package/lib/future.js +53 -0
  18. package/lib/impl/connection.js +56 -0
  19. package/lib/impl/pool.js +5 -3
  20. package/lib/impl/resultset.js +48 -11
  21. package/lib/oracledb.js +34 -14
  22. package/lib/pool.js +10 -0
  23. package/lib/sodaCollection.js +11 -0
  24. package/lib/sodaOperation.js +16 -0
  25. package/lib/thin/connection.js +184 -155
  26. package/lib/thin/dbObject.js +49 -2
  27. package/lib/thin/index.js +1 -1
  28. package/lib/thin/pool.js +3 -2
  29. package/lib/thin/protocol/buffer.js +79 -70
  30. package/lib/thin/protocol/capabilities.js +3 -1
  31. package/lib/thin/protocol/constants.js +31 -14
  32. package/lib/thin/protocol/messages/auth.js +6 -2
  33. package/lib/thin/protocol/messages/base.js +36 -14
  34. package/lib/thin/protocol/messages/dataType.js +8 -5
  35. package/lib/thin/protocol/messages/lobOp.js +7 -8
  36. package/lib/thin/protocol/messages/withData.js +62 -22
  37. package/lib/thin/protocol/oson.js +13 -10
  38. package/lib/thin/protocol/packet.js +6 -5
  39. package/lib/thin/protocol/utils.js +2 -2
  40. package/lib/thin/sqlnet/connStrategy.js +8 -4
  41. package/lib/thin/sqlnet/constants.js +138 -138
  42. package/lib/thin/sqlnet/ezConnectResolver.js +10 -43
  43. package/lib/thin/sqlnet/navNodes.js +7 -7
  44. package/lib/thin/sqlnet/networkSession.js +22 -21
  45. package/lib/thin/sqlnet/ntTcp.js +7 -7
  46. package/lib/thin/sqlnet/packet.js +1 -1
  47. package/lib/thin/statement.js +345 -113
  48. package/lib/thin/util.js +35 -86
  49. package/lib/types.js +6 -1
  50. package/lib/util.js +12 -0
  51. package/lib/version.js +1 -1
  52. package/package.json +1 -1
  53. package/build/Release/oracledb-6.1.0-darwin-x64.node +0 -0
  54. package/build/Release/oracledb-6.1.0-darwin-x64.node-buildinfo.txt +0 -1
  55. package/build/Release/oracledb-6.1.0-js-buildinfo.txt +0 -1
  56. package/build/Release/oracledb-6.1.0-linux-arm64.node +0 -0
  57. package/build/Release/oracledb-6.1.0-linux-arm64.node-buildinfo.txt +0 -1
  58. package/build/Release/oracledb-6.1.0-linux-x64.node +0 -0
  59. package/build/Release/oracledb-6.1.0-linux-x64.node-buildinfo.txt +0 -1
  60. package/build/Release/oracledb-6.1.0-win32-x64.node +0 -0
  61. package/build/Release/oracledb-6.1.0-win32-x64.node-buildinfo.txt +0 -1
@@ -81,7 +81,7 @@ const dataTypes = [
81
81
  [constants.TNS_DATA_TYPE_LONG_RAW, constants.TNS_DATA_TYPE_LONG_RAW, constants.TNS_TYPE_REP_UNIVERSAL],
82
82
  [constants.TNS_DATA_TYPE_UB2, constants.TNS_DATA_TYPE_UB2, constants.TNS_TYPE_REP_UNIVERSAL],
83
83
  [constants.TNS_DATA_TYPE_UB4, constants.TNS_DATA_TYPE_UB4, constants.TNS_TYPE_REP_UNIVERSAL],
84
- [constants.TNS_DATA_TYPE_SB1, constants.TNS_DATA_TYPE_SB1, constants.TNS_TYPE_REP_UNIVERSAL],
84
+ [constants.TNS_DATA_TYPE_SB1, constants.TNS_DATA_TYPE_SB1, constants.TNS_TYPE_REP_ORACLE],
85
85
  [constants.TNS_DATA_TYPE_SB2, constants.TNS_DATA_TYPE_SB2, constants.TNS_TYPE_REP_UNIVERSAL],
86
86
  [constants.TNS_DATA_TYPE_SB4, constants.TNS_DATA_TYPE_SB4, constants.TNS_TYPE_REP_UNIVERSAL],
87
87
  [constants.TNS_DATA_TYPE_SWORD, constants.TNS_DATA_TYPE_SWORD, constants.TNS_TYPE_REP_UNIVERSAL],
@@ -93,7 +93,7 @@ const dataTypes = [
93
93
  [constants.TNS_DATA_TYPE_AMS, constants.TNS_DATA_TYPE_AMS, constants.TNS_TYPE_REP_UNIVERSAL],
94
94
  [constants.TNS_DATA_TYPE_BRN, constants.TNS_DATA_TYPE_BRN, constants.TNS_TYPE_REP_UNIVERSAL],
95
95
  [constants.TNS_DATA_TYPE_CWD, constants.TNS_DATA_TYPE_CWD, constants.TNS_TYPE_REP_UNIVERSAL],
96
- [constants.TNS_DATA_TYPE_NEW_OAC, constants.TNS_DATA_TYPE_NEW_OAC, constants.TNS_TYPE_REP_UNIVERSAL],
96
+ [constants.TNS_DATA_TYPE_OAC122, constants.TNS_DATA_TYPE_OAC122, constants.TNS_TYPE_REP_UNIVERSAL],
97
97
  [constants.TNS_DATA_TYPE_OER8, constants.TNS_DATA_TYPE_OER8, constants.TNS_TYPE_REP_UNIVERSAL],
98
98
  [constants.TNS_DATA_TYPE_FUN, constants.TNS_DATA_TYPE_FUN, constants.TNS_TYPE_REP_UNIVERSAL],
99
99
  [constants.TNS_DATA_TYPE_AUA, constants.TNS_DATA_TYPE_AUA, constants.TNS_TYPE_REP_UNIVERSAL],
@@ -294,7 +294,7 @@ const dataTypes = [
294
294
  [constants.TNS_DATA_TYPE_PDN, constants.TNS_DATA_TYPE_NUMBER, constants.TNS_TYPE_REP_ORACLE],
295
295
  [constants.TNS_DATA_TYPE_VCS, constants.TNS_DATA_TYPE_VARCHAR, constants.TNS_TYPE_REP_UNIVERSAL],
296
296
  [constants.TNS_DATA_TYPE_VBI, constants.TNS_DATA_TYPE_VARCHAR, constants.TNS_TYPE_REP_UNIVERSAL],
297
- [constants.TNS_DATA_TYPE_OAC, constants.TNS_DATA_TYPE_NEW_OAC, constants.TNS_TYPE_REP_UNIVERSAL],
297
+ [constants.TNS_DATA_TYPE_OAC9, constants.TNS_DATA_TYPE_OAC9, constants.TNS_TYPE_REP_UNIVERSAL],
298
298
  [constants.TNS_DATA_TYPE_UIN, constants.TNS_DATA_TYPE_NUMBER, constants.TNS_TYPE_REP_ORACLE],
299
299
  [constants.TNS_DATA_TYPE_SLS, constants.TNS_DATA_TYPE_NUMBER, constants.TNS_TYPE_REP_ORACLE],
300
300
  [constants.TNS_DATA_TYPE_LVC, constants.TNS_DATA_TYPE_VARCHAR, constants.TNS_TYPE_REP_UNIVERSAL],
@@ -360,7 +360,7 @@ const dataTypes = [
360
360
  [constants.TNS_DATA_TYPE_AC_REPLAY, constants.TNS_DATA_TYPE_AC_REPLAY, constants.TNS_TYPE_REP_UNIVERSAL],
361
361
  [constants.TNS_DATA_TYPE_AC_CONT, constants.TNS_DATA_TYPE_AC_CONT, constants.TNS_TYPE_REP_UNIVERSAL],
362
362
  [constants.TNS_DATA_TYPE_IMPLRES, constants.TNS_DATA_TYPE_IMPLRES, constants.TNS_TYPE_REP_UNIVERSAL],
363
- [constants.TNS_DATA_TYPE_OER, constants.TNS_DATA_TYPE_OER, constants.TNS_TYPE_REP_UNIVERSAL],
363
+ [constants.TNS_DATA_TYPE_OER19, constants.TNS_DATA_TYPE_OER19, constants.TNS_TYPE_REP_UNIVERSAL],
364
364
  [constants.TNS_DATA_TYPE_TXT, constants.TNS_DATA_TYPE_TXT, constants.TNS_TYPE_REP_UNIVERSAL],
365
365
  [constants.TNS_DATA_TYPE_XSSESSNS, constants.TNS_DATA_TYPE_XSSESSNS, constants.TNS_TYPE_REP_UNIVERSAL],
366
366
  [constants.TNS_DATA_TYPE_XSATTOP, constants.TNS_DATA_TYPE_XSATTOP, constants.TNS_TYPE_REP_UNIVERSAL],
@@ -388,8 +388,11 @@ const dataTypes = [
388
388
  [constants.TNS_DATA_TYPE_SCN, constants.TNS_DATA_TYPE_SCN, constants.TNS_TYPE_REP_UNIVERSAL],
389
389
  [constants.TNS_DATA_TYPE_SCN8, constants.TNS_DATA_TYPE_SCN8, constants.TNS_TYPE_REP_UNIVERSAL],
390
390
  [constants.TNS_DATA_TYPE_CHUNKINFO, constants.TNS_DATA_TYPE_CHUNKINFO, constants.TNS_TYPE_REP_UNIVERSAL],
391
+ [constants.TNS_DATA_TYPE_UD21, constants.TNS_DATA_TYPE_UD21, constants.TNS_TYPE_REP_UNIVERSAL],
391
392
  [constants.TNS_DATA_TYPE_UDS, constants.TNS_DATA_TYPE_UDS, constants.TNS_TYPE_REP_UNIVERSAL],
392
- [constants.TNS_DATA_TYPE_TNP, constants.TNS_DATA_TYPE_TNP, constants.TNS_TYPE_REP_UNIVERSAL]
393
+ [constants.TNS_DATA_TYPE_TNP, constants.TNS_DATA_TYPE_TNP, constants.TNS_TYPE_REP_UNIVERSAL],
394
+ [constants.TNS_DATA_TYPE_OER, constants.TNS_DATA_TYPE_OER, constants.TNS_TYPE_REP_UNIVERSAL],
395
+ [constants.TNS_DATA_TYPE_OAC, constants.TNS_DATA_TYPE_OAC, constants.TNS_TYPE_REP_UNIVERSAL]
393
396
  ];
394
397
 
395
398
  module.exports = DataTypeMessage;
@@ -169,7 +169,7 @@ class LobOpMessage extends Message {
169
169
  processReturnParameter(buf) {
170
170
  let lobArray;
171
171
  let locator;
172
- let temp16;
172
+ let temp8;
173
173
  let numBytes;
174
174
  if (this.sourceLobImpl !== null) {
175
175
  numBytes = this.sourceLobImpl._locator.length;
@@ -184,15 +184,14 @@ class LobOpMessage extends Message {
184
184
  locator.copy(this.destLobImpl._locator);
185
185
  }
186
186
  if (this.operation === constants.TNS_LOB_OP_CREATE_TEMP) {
187
- buf.skipUB2();
188
- }
189
- if (this.sendAmount) {
187
+ buf.skipUB2(); // skip character set
188
+ buf.skipBytes(3); // skip trailing flags, amount
189
+ } else if (this.sendAmount) {
190
190
  this.amount = buf.readSB8();
191
191
  }
192
- if (this.operation === constants.TNS_LOB_OP_CREATE_TEMP
193
- || this.operation === constants.TNS_LOB_OP_IS_OPEN) {
194
- temp16 = buf.readUB2();
195
- this.boolFlag = temp16 > 0;
192
+ if (this.operation === constants.TNS_LOB_OP_IS_OPEN) {
193
+ temp8 = buf.readUB1();
194
+ this.boolFlag = temp8 > 0;
196
195
  }
197
196
  }
198
197
 
@@ -30,7 +30,7 @@ const { Buffer } = require('buffer');
30
30
  const utils = require("../utils");
31
31
  const constants = require("../constants.js");
32
32
  const Message = require("./base.js");
33
- const ThinDbObjectImpl = require("../../dbObject.js");
33
+ const { ThinDbObjectImpl, readXML } = require("../../dbObject.js");
34
34
  const ThinLobImpl = require("../../lob.js");
35
35
  const errors = require('../../../errors');
36
36
  const types = require('../../../types.js');
@@ -57,6 +57,7 @@ class MessageWithData extends Message {
57
57
  this.inFetch = false;
58
58
  this.parseOnly = false;
59
59
  this.resultSetsToSetup = [];
60
+ this.deferredErr = null;
60
61
  }
61
62
 
62
63
  /**
@@ -116,8 +117,8 @@ class MessageWithData extends Message {
116
117
  this.errorOccurred = false;
117
118
  this.statement.moreRowsToFetch = false;
118
119
  } else if (this.errorInfo.num !== 0 && this.errorInfo.cursorId !== 0) {
119
- this.connection._addCursorToClose(this.statement.cursorId);
120
120
  this.connection.statementCache.delete(this.statement.sql);
121
+ this.statement.returnToCache = false;
121
122
  }
122
123
  if (this.errorInfo.batchErrors) {
123
124
  this.errorOccurred = false;
@@ -176,19 +177,10 @@ class MessageWithData extends Message {
176
177
  const dataType = buf.readUInt8();
177
178
  buf.skipUB1(); // flags
178
179
  const precision = buf.readInt8();
179
- let scale;
180
- if (dataType === constants.TNS_DATA_TYPE_NUMBER ||
181
- dataType === constants.TNS_DATA_TYPE_INTERVAL_DS ||
182
- dataType === constants.TNS_DATA_TYPE_TIMESTAMP ||
183
- dataType === constants.TNS_DATA_TYPE_TIMESTAMP_LTZ ||
184
- dataType === constants.TNS_DATA_TYPE_TIMESTAMP_TZ) {
185
- scale = buf.readSB2();
186
- } else {
187
- scale = buf.readInt8();
188
- }
180
+ const scale = buf.readInt8();
189
181
  const maxSize = buf.readUB4();
190
182
  buf.skipUB4(); // max number of array elements
191
- buf.skipUB4(); // cont flags
183
+ buf.skipUB8(); // cont flags
192
184
  let oid;
193
185
  let numBytes = buf.readUB4(); // OID
194
186
  if (numBytes > 0) {
@@ -222,7 +214,7 @@ class MessageWithData extends Message {
222
214
  typeName = buf.readStr(constants.CSFRM_IMPLICIT);
223
215
  }
224
216
  buf.skipUB2(); // column position
225
- buf.skipUB4(); // uds flag
217
+ const udsFlags = buf.readUB4(); // uds flag
226
218
 
227
219
  // build metadata
228
220
  const fetchInfo = {
@@ -230,6 +222,39 @@ class MessageWithData extends Message {
230
222
  dbType: types.getTypeByOraTypeNum(dataType, csfrm),
231
223
  nullable: nullable
232
224
  };
225
+ fetchInfo.isJson = Boolean(udsFlags & constants.TNS_UDS_FLAGS_IS_JSON);
226
+ if (buf.caps.ttcFieldVersion >= constants.TNS_CCAP_FIELD_VERSION_23_1) {
227
+ numBytes = buf.readUB4();
228
+ if (numBytes > 0) {
229
+ fetchInfo.domainSchema = buf.readStr(constants.CSFRM_IMPLICIT);
230
+ }
231
+ numBytes = buf.readUB4();
232
+ if (numBytes > 0) {
233
+ fetchInfo.domainName = buf.readStr(constants.CSFRM_IMPLICIT);
234
+ }
235
+ }
236
+ if (buf.caps.ttcFieldVersion >= constants.TNS_CCAP_FIELD_VERSION_23_1_EXT_3) {
237
+ if (buf.readUB4() > 0) {
238
+ fetchInfo.annotations = {};
239
+ buf.skipUB1();
240
+ const numAnnotations = buf.readUB4();
241
+ buf.skipUB1();
242
+ let key, value;
243
+ for (let i = 0; i < numAnnotations; i++) {
244
+ buf.skipUB4();
245
+ value = "";
246
+ key = buf.readStr(constants.CSFRM_IMPLICIT);
247
+ numBytes = buf.readUB4();
248
+ if (numBytes > 0) {
249
+ value = buf.readStr(constants.CSFRM_IMPLICIT);
250
+ }
251
+ fetchInfo.annotations[key] = value;
252
+ buf.skipUB4(); // flags
253
+ }
254
+ buf.skipUB4(); // flags
255
+ }
256
+ }
257
+
233
258
  switch (fetchInfo.dbType) {
234
259
  case types.DB_TYPE_VARCHAR:
235
260
  case types.DB_TYPE_NVARCHAR:
@@ -252,6 +277,9 @@ class MessageWithData extends Message {
252
277
  if (fetchInfo.dbTypeClass.partial) {
253
278
  this.connection._partialDbObjectTypes.push(fetchInfo.dbTypeClass);
254
279
  }
280
+ if (fetchInfo.dbTypeClass.isXmlType) {
281
+ fetchInfo.dbType = types.DB_TYPE_XMLTYPE;
282
+ }
255
283
  break;
256
284
  default:
257
285
  break;
@@ -458,9 +486,14 @@ class MessageWithData extends Message {
458
486
  if (obj.packedData) {
459
487
  const objType = (variable.fetchInfo) ? variable.fetchInfo.dbTypeClass :
460
488
  variable.typeClass;
461
- colValue = new ThinDbObjectImpl(objType, obj.packedData);
462
- colValue.toid = obj.toid;
463
- colValue.oid = obj.oid;
489
+
490
+ if (variable.type === types.DB_TYPE_XMLTYPE) {
491
+ colValue = readXML(this.connection, obj.packedData);
492
+ } else {
493
+ colValue = new ThinDbObjectImpl(objType, obj.packedData);
494
+ colValue.toid = obj.toid;
495
+ colValue.oid = obj.oid;
496
+ }
464
497
  }
465
498
  } else {
466
499
  errors.throwErr(errors.ERR_UNSUPPORTED_DATA_TYPE, dbType.num,
@@ -471,8 +504,11 @@ class MessageWithData extends Message {
471
504
  const actualNumBytes = buf.readSB4();
472
505
  if (actualNumBytes < 0 && oraTypeNum === constants.TNS_DATA_TYPE_BOOLEAN) {
473
506
  colValue = null;
474
- } else if (actualNumBytes !== 0 && colValue !== null) {
475
- errors.throwErr(errors.ERR_INSUFFICIENT_BUFFER_FOR_BINDS);
507
+
508
+ // For objects, maxsize validation is skipped
509
+ } else if (actualNumBytes !== 0 && colValue !== null &&
510
+ oraTypeNum !== constants.TNS_DATA_TYPE_INT_NAMED) {
511
+ this.saveDeferredErr(errors.ERR_INSUFFICIENT_BUFFER_FOR_BINDS);
476
512
  }
477
513
  } else if (oraTypeNum === constants.TNS_DATA_TYPE_LONG || oraTypeNum === constants.TNS_DATA_TYPE_LONG_RAW || variable.maxSize > buf.caps.maxStringSize) {
478
514
  buf.skipSB4(); // null indicator
@@ -525,11 +561,15 @@ class MessageWithData extends Message {
525
561
  }
526
562
 
527
563
  async postProcess() {
564
+ if (this.deferredErr) {
565
+ throw this.deferredErr;
566
+ }
567
+
528
568
  if (this.outVariables) {
529
569
  for (const variable of this.outVariables) {
530
570
  if (variable.isArray) {
531
- for (let pos = 0; pos < variable.numElementsInArray; pos++) {
532
- if (variable.outConverter) {
571
+ if (variable.outConverter) {
572
+ for (let pos = 0; pos < variable.numElementsInArray; pos++) {
533
573
  variable.values[0][pos] = await variable.outConverter(variable.values[0][pos]);
534
574
  }
535
575
  }
@@ -689,7 +729,7 @@ class MessageWithData extends Message {
689
729
  this.writeBindParamsColumn(buf, variable, variable.values[i]);
690
730
  }
691
731
  } else {
692
- if (variable.maxSize > buf.caps.maxStringSize) {
732
+ if ((!this.statement.isPlSql) && variable.maxSize > buf.caps.maxStringSize) {
693
733
  foundLong = true;
694
734
  } else {
695
735
  this.writeBindParamsColumn(buf, variable,
@@ -416,10 +416,11 @@ class OsonTreeSegment extends GrowableBuffer {
416
416
  //---------------------------------------------------------------------------
417
417
  _encodeArray(value, fnamesSeg) {
418
418
  this._encodeContainer(constants.TNS_JSON_TYPE_ARRAY, value.length);
419
- let offsetsBufPos = 0;
420
- const offsetsBuf = this.reserveBytes(value.length * 4);
419
+ const len = value.length * 4;
420
+ const pos = this.reserveBytes(len);
421
+ let offsetsBufPos = pos;
421
422
  for (const element of value) {
422
- offsetsBuf.writeUInt32BE(this.pos, offsetsBufPos);
423
+ this.buf.writeUInt32BE(this.pos, offsetsBufPos);
423
424
  offsetsBufPos += 4;
424
425
  this.encodeNode(element, fnamesSeg);
425
426
  }
@@ -456,19 +457,21 @@ class OsonTreeSegment extends GrowableBuffer {
456
457
  _encodeObject(value, fnamesSeg) {
457
458
  const numChildren = value.values.length;
458
459
  this._encodeContainer(constants.TNS_JSON_TYPE_OBJECT, numChildren);
459
- let fieldIdOffset = 0;
460
- let valueOffset = numChildren * fnamesSeg.fieldIdSize;
461
- const buf = this.reserveBytes(numChildren * (fnamesSeg.fieldIdSize + 4));
460
+ const len = numChildren * (fnamesSeg.fieldIdSize + 4);
461
+ const pos = this.reserveBytes(len);
462
+ let fieldIdOffset = pos;
463
+ let valueOffset = pos + (numChildren * fnamesSeg.fieldIdSize);
464
+
462
465
  for (let i = 0; i < value.fields.length; i++) {
463
466
  const fieldName = fnamesSeg.fieldNamesMap.get(value.fields[i]);
464
467
  if (fnamesSeg.fieldIdSize == 1) {
465
- buf[fieldIdOffset] = fieldName.fieldId;
468
+ this.buf[fieldIdOffset] = fieldName.fieldId;
466
469
  } else if (fnamesSeg.fieldIdSize == 2) {
467
- buf.writeUInt16BE(fieldName.fieldId, fieldIdOffset);
470
+ this.buf.writeUInt16BE(fieldName.fieldId, fieldIdOffset);
468
471
  } else {
469
- buf.writeUInt32BE(fieldName.fieldId, fieldIdOffset);
472
+ this.buf.writeUInt32BE(fieldName.fieldId, fieldIdOffset);
470
473
  }
471
- buf.writeUInt32BE(this.pos, valueOffset);
474
+ this.buf.writeUInt32BE(this.pos, valueOffset);
472
475
  fieldIdOffset += fnamesSeg.fieldIdSize;
473
476
  valueOffset += 4;
474
477
  this.encodeNode(value.values[i], fnamesSeg);
@@ -35,7 +35,6 @@ const errors = require("../../errors.js");
35
35
 
36
36
  const TNS_BASE64_ALPHABET_ARRAY = Buffer.from("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", 'utf8');
37
37
 
38
-
39
38
  /**
40
39
  * Class used for byte chunks used in the ChunkedBytesBuffer.
41
40
  */
@@ -52,7 +51,7 @@ class BytesChunk {
52
51
  if (remainder > 0) {
53
52
  this.allocLen += (constants.CHUNKED_BYTES_CHUNK_SIZE - remainder);
54
53
  }
55
- this.buf = Buffer.alloc(this.allocLen);
54
+ this.buf = Buffer.allocUnsafe(this.allocLen);
56
55
  this.actualLen = 0;
57
56
  }
58
57
 
@@ -133,6 +132,7 @@ class ChunkedBytesBuffer {
133
132
  *
134
133
  * @class ReadPacket
135
134
  */
135
+
136
136
  class ReadPacket extends BaseBuffer {
137
137
 
138
138
  /**
@@ -140,8 +140,9 @@ class ReadPacket extends BaseBuffer {
140
140
  * @param {Object} adapter used for sending/receiving data
141
141
  * @param {Object} capabilities
142
142
  */
143
+
143
144
  constructor(nsi, caps) {
144
- super(nsi.sAtts.sdu);
145
+ super();
145
146
  this.nsi = nsi;
146
147
  this.caps = caps;
147
148
  this.chunkedBytesBuf = new ChunkedBytesBuffer();
@@ -228,7 +229,7 @@ class ReadPacket extends BaseBuffer {
228
229
  if (inChunkedRead) {
229
230
  buf = this.chunkedBytesBuf.getBuf(numBytes);
230
231
  } else {
231
- buf = Buffer.alloc(numBytes);
232
+ buf = Buffer.allocUnsafe(numBytes);
232
233
  }
233
234
 
234
235
  // copy the bytes to the buffer from the remainder of this packet
@@ -341,7 +342,7 @@ class ReadPacket extends BaseBuffer {
341
342
  outputLen += 3;
342
343
  }
343
344
 
344
- const outputValue = Buffer.alloc(outputLen);
345
+ const outputValue = Buffer.allocUnsafe(outputLen);
345
346
  inputLen -= 1;
346
347
  outputValue[0] = 42;
347
348
  outputOffset += 1;
@@ -43,7 +43,7 @@ function _convertBase64(result, value, size, offset) {
43
43
  function encodeRowID(rowID) {
44
44
  let offset = 0;
45
45
  if (rowID.rba !== 0 || rowID.partitionID !== 0 || rowID.blockNum !== 0 || rowID.slotNum != 0) {
46
- const result = Buffer.alloc(constants.TNS_MAX_ROWID_LENGTH);
46
+ const result = Buffer.allocUnsafe(constants.TNS_MAX_ROWID_LENGTH);
47
47
  offset = _convertBase64(result, rowID.rba, 6, offset);
48
48
  offset = _convertBase64(result, rowID.partitionID, 3, offset);
49
49
  offset = _convertBase64(result, rowID.blockNum, 6, offset);
@@ -64,7 +64,7 @@ function setObfuscatedValue(value) {
64
64
  arr.push(buf[i] ^ bytes[i]);
65
65
  }
66
66
  bytes.fill(0);
67
- return {obfuscatedValue : buf, value : arr};
67
+ return {obfuscatedValue: buf, value: arr};
68
68
  }
69
69
 
70
70
  // returns the Deobfuscated value, after removing the obfuscation
@@ -53,16 +53,20 @@ class ConnectDescription {
53
53
  */
54
54
  class ConnStrategy {
55
55
  constructor() {
56
- this.nextOptToTry = 0;
57
- this.reorderDescriptionList = 0;
56
+ this.reset();
58
57
  this.retryCount = 0;
59
- this.lastRetryCounter = 0;
60
- this.lastRetryConnectDescription = 0;
61
58
  this.currentDescription = null;
62
59
  this.descriptionList = new Array();
63
60
  this.sBuf = new Array();
64
61
  }
65
62
 
63
+ reset() {
64
+ this.nextOptToTry = 0;
65
+ this.lastRetryCounter = 0;
66
+ this.lastRetryConnectDescription = 0;
67
+ this.reorderDescriptionList = 0;
68
+ }
69
+
66
70
  hasMoreOptions() {
67
71
  let cOptsSize = 0;
68
72