oracledb 6.2.0 → 6.4.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.
- package/LICENSE.txt +1 -1
- package/NOTICE.txt +1 -1
- package/README.md +3 -3
- package/build/Release/oracledb-6.4.0-darwin-x64.node +0 -0
- package/build/Release/oracledb-6.4.0-darwin-x64.node-buildinfo.txt +1 -0
- package/build/Release/oracledb-6.4.0-js-buildinfo.txt +1 -0
- package/build/Release/oracledb-6.4.0-linux-arm64.node +0 -0
- package/build/Release/oracledb-6.4.0-linux-arm64.node-buildinfo.txt +1 -0
- package/build/Release/oracledb-6.4.0-linux-x64.node +0 -0
- package/build/Release/oracledb-6.4.0-linux-x64.node-buildinfo.txt +1 -0
- package/build/Release/oracledb-6.4.0-win32-x64.node +0 -0
- package/build/Release/oracledb-6.4.0-win32-x64.node-buildinfo.txt +1 -0
- package/examples/README.md +29 -8
- package/examples/dbconfig.js +50 -26
- package/examples/example.js +6 -4
- package/lib/aqQueue.js +8 -8
- package/lib/connection.js +121 -9
- package/lib/constants.js +7 -1
- package/lib/dbObject.js +72 -1
- package/lib/errors.js +45 -8
- package/lib/future.js +53 -0
- package/lib/impl/connection.js +56 -0
- package/lib/{thin/protocol → impl/datahandlers}/buffer.js +51 -39
- package/lib/impl/datahandlers/constants.js +105 -0
- package/lib/{thin/protocol → impl/datahandlers}/oson.js +19 -1
- package/lib/impl/datahandlers/vector.js +156 -0
- package/lib/impl/pool.js +14 -3
- package/lib/impl/resultset.js +65 -11
- package/lib/lob.js +22 -6
- package/lib/oracledb.js +47 -8
- package/lib/pool.js +20 -1
- package/lib/poolStatistics.js +3 -1
- package/lib/settings.js +30 -6
- package/lib/sodaDocCursor.js +14 -1
- package/lib/thin/connection.js +146 -146
- package/lib/thin/dbObject.js +49 -3
- package/lib/thin/index.js +1 -1
- package/lib/thin/lob.js +6 -6
- package/lib/thin/pool.js +25 -6
- package/lib/thin/protocol/capabilities.js +6 -2
- package/lib/thin/protocol/constants.js +50 -65
- package/lib/thin/protocol/messages/auth.js +6 -2
- package/lib/thin/protocol/messages/base.js +50 -32
- package/lib/thin/protocol/messages/dataType.js +10 -6
- package/lib/thin/protocol/messages/lobOp.js +7 -8
- package/lib/thin/protocol/messages/withData.js +91 -24
- package/lib/thin/protocol/packet.js +58 -4
- package/lib/thin/protocol/utils.js +1 -1
- package/lib/thin/sqlnet/connStrategy.js +8 -4
- package/lib/thin/sqlnet/constants.js +138 -138
- package/lib/thin/sqlnet/navNodes.js +5 -5
- package/lib/thin/sqlnet/networkSession.js +22 -3
- package/lib/thin/sqlnet/ntTcp.js +7 -7
- package/lib/thin/statement.js +8 -8
- package/lib/thin/statementCache.js +167 -0
- package/lib/thin/util.js +15 -4
- package/lib/transformer.js +13 -4
- package/lib/types.js +17 -2
- package/lib/util.js +37 -0
- package/lib/version.js +2 -2
- package/package.json +1 -1
- package/build/Release/oracledb-6.2.0-darwin-x64.node +0 -0
- package/build/Release/oracledb-6.2.0-darwin-x64.node-buildinfo.txt +0 -1
- package/build/Release/oracledb-6.2.0-js-buildinfo.txt +0 -1
- package/build/Release/oracledb-6.2.0-linux-arm64.node +0 -0
- package/build/Release/oracledb-6.2.0-linux-arm64.node-buildinfo.txt +0 -1
- package/build/Release/oracledb-6.2.0-linux-x64.node +0 -0
- package/build/Release/oracledb-6.2.0-linux-x64.node-buildinfo.txt +0 -1
- package/build/Release/oracledb-6.2.0-win32-x64.node +0 -0
- package/build/Release/oracledb-6.2.0-win32-x64.node-buildinfo.txt +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright (c) 2022,
|
|
1
|
+
// Copyright (c) 2022, 2024, Oracle and/or its affiliates.
|
|
2
2
|
|
|
3
3
|
//-----------------------------------------------------------------------------
|
|
4
4
|
//
|
|
@@ -89,7 +89,9 @@ class Capabilities {
|
|
|
89
89
|
this.compileCaps[constants.TNS_CCAP_DBF_VERSION] =
|
|
90
90
|
constants.TNS_CCAP_DBF_VERSION_MAX;
|
|
91
91
|
this.compileCaps[constants.TNS_CCAP_LOB] =
|
|
92
|
-
constants.TNS_CCAP_LOB_UB8_SIZE | constants.TNS_CCAP_LOB_ENCS
|
|
92
|
+
constants.TNS_CCAP_LOB_UB8_SIZE | constants.TNS_CCAP_LOB_ENCS
|
|
93
|
+
| constants.TNS_CCAP_LOB_PREFETCH | constants.TNS_CCAP_LOB_TEMP_SIZE
|
|
94
|
+
| constants.TNS_CCAP_LOB_12C | constants.TNS_CCAP_LOB_PREFETCH_DATA;
|
|
93
95
|
this.compileCaps[constants.TNS_CCAP_UB2_DTY] = 1;
|
|
94
96
|
this.compileCaps[constants.TNS_CCAP_LOB2] =
|
|
95
97
|
constants.TNS_CCAP_LOB2_QUASI | constants.TNS_CCAP_LOB2_2GB_PREFETCH;
|
|
@@ -102,6 +104,8 @@ class Capabilities {
|
|
|
102
104
|
constants.TNS_CCAP_CLIENT_FN_MAX;
|
|
103
105
|
this.compileCaps[constants.TNS_CCAP_TTC4] =
|
|
104
106
|
constants.TNS_CCAP_INBAND_NOTIFICATION;
|
|
107
|
+
this.compileCaps[constants.TNS_CCAP_TTC5] =
|
|
108
|
+
constants.TNS_CCAP_VECTOR_SUPPORT;
|
|
105
109
|
}
|
|
106
110
|
|
|
107
111
|
initRuntimeCaps() {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright (c) 2022,
|
|
1
|
+
// Copyright (c) 2022, 2024, Oracle and/or its affiliates.
|
|
2
2
|
|
|
3
3
|
//-----------------------------------------------------------------------------
|
|
4
4
|
//
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
|
|
29
29
|
const { Buffer } = require('buffer');
|
|
30
30
|
const constants = require('../../constants.js');
|
|
31
|
+
const dataHandlerConstants = require('../../impl/datahandlers/constants.js');
|
|
31
32
|
|
|
32
33
|
module.exports = {
|
|
33
34
|
|
|
@@ -56,14 +57,14 @@ module.exports = {
|
|
|
56
57
|
|
|
57
58
|
// authentication modes
|
|
58
59
|
AUTH_MODE_DEFAULT: 0,
|
|
59
|
-
AUTH_MODE_PRELIM
|
|
60
|
-
AUTH_MODE_SYSASM
|
|
61
|
-
AUTH_MODE_SYSBKP
|
|
62
|
-
AUTH_MODE_SYSDBA
|
|
63
|
-
AUTH_MODE_SYSDGD
|
|
64
|
-
AUTH_MODE_SYSKMT
|
|
65
|
-
AUTH_MODE_SYSOPER:
|
|
66
|
-
AUTH_MODE_SYSRAC
|
|
60
|
+
AUTH_MODE_PRELIM: 0x00000008,
|
|
61
|
+
AUTH_MODE_SYSASM: 0x00008000,
|
|
62
|
+
AUTH_MODE_SYSBKP: 0x00020000,
|
|
63
|
+
AUTH_MODE_SYSDBA: 0x00000002,
|
|
64
|
+
AUTH_MODE_SYSDGD: 0x00040000,
|
|
65
|
+
AUTH_MODE_SYSKMT: 0x00080000,
|
|
66
|
+
AUTH_MODE_SYSOPER: 0x00000004,
|
|
67
|
+
AUTH_MODE_SYSRAC: 0x00100000,
|
|
67
68
|
|
|
68
69
|
// TTC authentication modes
|
|
69
70
|
TNS_AUTH_MODE_LOGON: 0x00000001,
|
|
@@ -120,7 +121,7 @@ module.exports = {
|
|
|
120
121
|
TNS_DATA_TYPE_AUA: 36 + 256,
|
|
121
122
|
TNS_DATA_TYPE_RXH7: 37 + 256,
|
|
122
123
|
TNS_DATA_TYPE_NA6: 38 + 256,
|
|
123
|
-
|
|
124
|
+
TNS_DATA_TYPE_OAC9: 39,
|
|
124
125
|
TNS_DATA_TYPE_AMS: 40,
|
|
125
126
|
TNS_DATA_TYPE_BRN: 41,
|
|
126
127
|
TNS_DATA_TYPE_BRP: 42 + 256,
|
|
@@ -194,10 +195,11 @@ module.exports = {
|
|
|
194
195
|
TNS_DATA_TYPE_RSET: 116,
|
|
195
196
|
TNS_DATA_TYPE_CWD: 117,
|
|
196
197
|
TNS_DATA_TYPE_JSON: 119,
|
|
197
|
-
|
|
198
|
+
TNS_DATA_TYPE_OAC122: 120,
|
|
198
199
|
TNS_DATA_TYPE_UD12: 124 + 256,
|
|
199
200
|
TNS_DATA_TYPE_AL8: 125 + 256,
|
|
200
201
|
TNS_DATA_TYPE_LFOP: 126 + 256,
|
|
202
|
+
TNS_DATA_TYPE_VECTOR: 127,
|
|
201
203
|
TNS_DATA_TYPE_FCRT: 127 + 256,
|
|
202
204
|
TNS_DATA_TYPE_DNY: 128 + 256,
|
|
203
205
|
TNS_DATA_TYPE_OPR: 129 + 256,
|
|
@@ -381,7 +383,7 @@ module.exports = {
|
|
|
381
383
|
TNS_DATA_TYPE_XSNSOP2: 604,
|
|
382
384
|
TNS_DATA_TYPE_XSNS2: 605,
|
|
383
385
|
TNS_DATA_TYPE_IMPLRES: 611,
|
|
384
|
-
|
|
386
|
+
TNS_DATA_TYPE_OER19: 612,
|
|
385
387
|
TNS_DATA_TYPE_UB1ARRAY: 613,
|
|
386
388
|
TNS_DATA_TYPE_SESSSTATE: 614,
|
|
387
389
|
TNS_DATA_TYPE_AC_REPLAY: 615,
|
|
@@ -400,8 +402,11 @@ module.exports = {
|
|
|
400
402
|
TNS_DATA_TYPE_CHUNKINFO: 636,
|
|
401
403
|
TNS_DATA_TYPE_SCN: 637,
|
|
402
404
|
TNS_DATA_TYPE_SCN8: 638,
|
|
403
|
-
|
|
405
|
+
TNS_DATA_TYPE_UD21: 639,
|
|
404
406
|
TNS_DATA_TYPE_TNP: 640,
|
|
407
|
+
TNS_DATA_TYPE_OAC: 646,
|
|
408
|
+
TNS_DATA_TYPE_OER: 652,
|
|
409
|
+
TNS_DATA_TYPE_UDS: 663,
|
|
405
410
|
|
|
406
411
|
// data type representations
|
|
407
412
|
TNS_TYPE_REP_NATIVE: 0,
|
|
@@ -510,42 +515,6 @@ module.exports = {
|
|
|
510
515
|
|
|
511
516
|
// base JSON constants
|
|
512
517
|
TNS_JSON_MAX_LENGTH: 32 * 1024 * 1024,
|
|
513
|
-
TNS_JSON_MAGIC_BYTE_1: 0xff,
|
|
514
|
-
TNS_JSON_MAGIC_BYTE_2: 0x4a, // 'J'
|
|
515
|
-
TNS_JSON_MAGIC_BYTE_3: 0x5a, // 'Z'
|
|
516
|
-
TNS_JSON_VERSION: 1,
|
|
517
|
-
TNS_JSON_FLAG_HASH_ID_UINT8: 0x0100,
|
|
518
|
-
TNS_JSON_FLAG_HASH_ID_UINT16: 0x0200,
|
|
519
|
-
TNS_JSON_FLAG_NUM_FNAMES_UINT16: 0x0400,
|
|
520
|
-
TNS_JSON_FLAG_FNAMES_SEG_UINT32: 0x0800,
|
|
521
|
-
TNS_JSON_FLAG_TINY_NODES_STAT: 0x2000,
|
|
522
|
-
TNS_JSON_FLAG_TREE_SEG_UINT32: 0x1000,
|
|
523
|
-
TNS_JSON_FLAG_REL_OFFSET_MODE: 0x01,
|
|
524
|
-
TNS_JSON_FLAG_INLINE_LEAF: 0x02,
|
|
525
|
-
TNS_JSON_FLAG_LEN_IN_PCODE: 0x04,
|
|
526
|
-
TNS_JSON_FLAG_NUM_FNAMES_UINT32: 0x08,
|
|
527
|
-
TNS_JSON_FLAG_IS_SCALAR: 0x10,
|
|
528
|
-
|
|
529
|
-
// JSON data types
|
|
530
|
-
TNS_JSON_TYPE_NULL: 0x30,
|
|
531
|
-
TNS_JSON_TYPE_TRUE: 0x31,
|
|
532
|
-
TNS_JSON_TYPE_FALSE: 0x32,
|
|
533
|
-
TNS_JSON_TYPE_STRING_LENGTH_UINT8: 0x33,
|
|
534
|
-
TNS_JSON_TYPE_NUMBER_LENGTH_UINT8: 0x34,
|
|
535
|
-
TNS_JSON_TYPE_BINARY_DOUBLE: 0x36,
|
|
536
|
-
TNS_JSON_TYPE_STRING_LENGTH_UINT16: 0x37,
|
|
537
|
-
TNS_JSON_TYPE_STRING_LENGTH_UINT32: 0x38,
|
|
538
|
-
TNS_JSON_TYPE_TIMESTAMP: 0x39,
|
|
539
|
-
TNS_JSON_TYPE_BINARY_LENGTH_UINT16: 0x3a,
|
|
540
|
-
TNS_JSON_TYPE_BINARY_LENGTH_UINT32: 0x3b,
|
|
541
|
-
TNS_JSON_TYPE_DATE: 0x3c,
|
|
542
|
-
TNS_JSON_TYPE_INTERVAL_YM: 0x3d,
|
|
543
|
-
TNS_JSON_TYPE_INTERVAL_DS: 0x3e,
|
|
544
|
-
TNS_JSON_TYPE_TIMESTAMP_TZ: 0x7c,
|
|
545
|
-
TNS_JSON_TYPE_TIMESTAMP7: 0x7d,
|
|
546
|
-
TNS_JSON_TYPE_BINARY_FLOAT: 0x7f,
|
|
547
|
-
TNS_JSON_TYPE_OBJECT: 0x84,
|
|
548
|
-
TNS_JSON_TYPE_ARRAY: 0xc0,
|
|
549
518
|
|
|
550
519
|
// end-to-end metrics
|
|
551
520
|
TNS_END_TO_END_ACTION: 0x0010,
|
|
@@ -605,7 +574,8 @@ module.exports = {
|
|
|
605
574
|
TNS_CCAP_TTC3: 37,
|
|
606
575
|
TNS_CCAP_TTC4: 40,
|
|
607
576
|
TNS_CCAP_LOB2: 42,
|
|
608
|
-
|
|
577
|
+
TNS_CCAP_TTC5: 44,
|
|
578
|
+
TNS_CCAP_MAX: 51,
|
|
609
579
|
|
|
610
580
|
// compile time capability values
|
|
611
581
|
TNS_CCAP_SQL_VERSION_MAX: 6,
|
|
@@ -622,7 +592,13 @@ module.exports = {
|
|
|
622
592
|
TNS_CCAP_FIELD_VERSION_21_1: 16,
|
|
623
593
|
TNS_CCAP_FIELD_VERSION_23_1: 17,
|
|
624
594
|
TNS_CCAP_FIELD_VERSION_23_1_EXT_1: 18,
|
|
625
|
-
|
|
595
|
+
TNS_CCAP_FIELD_VERSION_23_1_EXT_2: 19,
|
|
596
|
+
TNS_CCAP_FIELD_VERSION_23_1_EXT_3: 20,
|
|
597
|
+
TNS_CCAP_FIELD_VERSION_23_1_EXT_4: 21,
|
|
598
|
+
TNS_CCAP_FIELD_VERSION_23_1_EXT_5: 22,
|
|
599
|
+
TNS_CCAP_FIELD_VERSION_23_1_EXT_6: 23,
|
|
600
|
+
TNS_CCAP_FIELD_VERSION_23_4: 24,
|
|
601
|
+
TNS_CCAP_FIELD_VERSION_MAX: 24,
|
|
626
602
|
TNS_CCAP_O5LOGON: 8,
|
|
627
603
|
TNS_CCAP_O5LOGON_NP: 2,
|
|
628
604
|
TNS_CCAP_O7LOGON: 32,
|
|
@@ -642,13 +618,17 @@ module.exports = {
|
|
|
642
618
|
TNS_CCAP_KEEP_OUT_ORDER: 0x80,
|
|
643
619
|
TNS_CCAP_LOB_UB8_SIZE: 0x01,
|
|
644
620
|
TNS_CCAP_LOB_ENCS: 0x02,
|
|
621
|
+
TNS_CCAP_LOB_PREFETCH_DATA: 0x04,
|
|
622
|
+
TNS_CCAP_LOB_TEMP_SIZE: 0x08,
|
|
645
623
|
TNS_CCAP_LOB_PREFETCH: 0x40,
|
|
624
|
+
TNS_CCAP_LOB_12C: 0x80,
|
|
646
625
|
TNS_CCAP_DRCP: 0x10,
|
|
647
626
|
TNS_CCAP_ZLNP: 0x04,
|
|
648
627
|
TNS_CCAP_INBAND_NOTIFICATION: 0x04,
|
|
649
628
|
TNS_CCAP_CLIENT_FN_MAX: 12,
|
|
650
629
|
TNS_CCAP_LOB2_QUASI: 0x01,
|
|
651
630
|
TNS_CCAP_LOB2_2GB_PREFETCH: 0x04,
|
|
631
|
+
TNS_CCAP_VECTOR_SUPPORT: 0x08,
|
|
652
632
|
|
|
653
633
|
// runtime capability indices
|
|
654
634
|
TNS_RCAP_COMPAT: 0,
|
|
@@ -667,27 +647,22 @@ module.exports = {
|
|
|
667
647
|
/** MultiRound SHA-512. */
|
|
668
648
|
TNS_VERIFIER_TYPE_12C: 0x4815,
|
|
669
649
|
|
|
650
|
+
// UDS flags
|
|
651
|
+
TNS_UDS_FLAGS_IS_JSON: 0x00000100,
|
|
652
|
+
TNS_UDS_FLAGS_IS_OSON: 0x00000800,
|
|
653
|
+
|
|
670
654
|
// other constants
|
|
671
|
-
TNS_MAX_SHORT_LENGTH: 252,
|
|
672
655
|
TNS_ESCAPE_CHAR: 253,
|
|
673
|
-
TNS_LONG_LENGTH_INDICATOR:
|
|
674
|
-
TNS_NULL_LENGTH_INDICATOR:
|
|
656
|
+
TNS_LONG_LENGTH_INDICATOR: dataHandlerConstants.TNS_LONG_LENGTH_INDICATOR,
|
|
657
|
+
TNS_NULL_LENGTH_INDICATOR: dataHandlerConstants.TNS_NULL_LENGTH_INDICATOR,
|
|
675
658
|
TNS_MAX_ROWID_LENGTH: 18,
|
|
676
|
-
TNS_DURATION_MID: 0x80000000,
|
|
677
|
-
TNS_DURATION_OFFSET: 60,
|
|
678
659
|
TNS_DURATION_SESSION: 10,
|
|
679
660
|
TNS_MAX_LONG_LENGTH: 0x7fffffff,
|
|
680
661
|
TNS_SDU: 8192,
|
|
681
662
|
TNS_TDU: 65535,
|
|
682
663
|
TNS_TXN_IN_PROGRESS: 0x00000002,
|
|
683
664
|
TNS_MAX_CONNECT_DATA: 230,
|
|
684
|
-
TNS_CHUNK_SIZE: 32767,
|
|
685
665
|
TNS_MAX_UROWID_LENGTH: 3950,
|
|
686
|
-
TNS_HAS_REGION_ID: 0x80,
|
|
687
|
-
|
|
688
|
-
// timezone offsets
|
|
689
|
-
TZ_HOUR_OFFSET: 20,
|
|
690
|
-
TZ_MINUTE_OFFSET: 60,
|
|
691
666
|
|
|
692
667
|
// drcp release mode
|
|
693
668
|
DRCP_DEAUTHENTICATE: 0x00000002,
|
|
@@ -728,6 +703,10 @@ module.exports = {
|
|
|
728
703
|
TNS_OBJ_TDS_TYPE_BLOB: 30,
|
|
729
704
|
TNS_OBJ_TDS_TYPE_TIMESTAMP_LTZ: 33,
|
|
730
705
|
TNS_OBJ_TDS_TYPE_BINARY_FLOAT: 37,
|
|
706
|
+
TNS_OBJ_TDS_TYPE_START_EMBED_ADT: 39,
|
|
707
|
+
TNS_OBJ_TDS_TYPE_END_EMBED_ADT: 40,
|
|
708
|
+
TNS_OBJ_TDS_TYPE_SUBTYPE_MARKER: 43,
|
|
709
|
+
TNS_OBJ_TDS_TYPE_EMBED_ADT_INFO: 44,
|
|
731
710
|
TNS_OBJ_TDS_TYPE_BINARY_DOUBLE: 45,
|
|
732
711
|
|
|
733
712
|
// xml type constants
|
|
@@ -743,13 +722,19 @@ module.exports = {
|
|
|
743
722
|
TNS_ERR_NO_DATA_FOUND: 1403,
|
|
744
723
|
TNS_ERR_SESSION_SHUTDOWN: 12572,
|
|
745
724
|
|
|
725
|
+
// warnings
|
|
726
|
+
TNS_WARN_COMPILATION_CREATE: 0x20,
|
|
727
|
+
|
|
728
|
+
// vector constants
|
|
729
|
+
TNS_VECTOR_MAX_LENGTH: 1048576,
|
|
730
|
+
VECTOR_FORMAT_FLEX: 0,
|
|
731
|
+
VECTOR_META_FLAG_FLEXIBLE_DIM: 1,
|
|
732
|
+
|
|
746
733
|
// other constants
|
|
747
734
|
PACKET_HEADER_SIZE: 8,
|
|
748
735
|
NUMBER_AS_TEXT_CHARS: 172,
|
|
749
|
-
NUMBER_MAX_DIGITS: 40,
|
|
750
|
-
BUFFER_CHUNK_SIZE: 65536,
|
|
751
736
|
CHUNKED_BYTES_CHUNK_SIZE: 65536,
|
|
752
737
|
|
|
753
|
-
TNS_BASE64_ALPHABET_ARRAY:
|
|
738
|
+
TNS_BASE64_ALPHABET_ARRAY: Buffer.from('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'),
|
|
754
739
|
TNS_EXTENT_OID: Buffer.from('00000000000000000000000000010001', 'hex')
|
|
755
740
|
};
|
|
@@ -98,8 +98,7 @@ class AuthMessage extends Message {
|
|
|
98
98
|
this.functionCode = constants.TNS_FUNC_AUTH_PHASE_TWO;
|
|
99
99
|
this.privateKey = config.privateKey;
|
|
100
100
|
if (this.privateKey) {
|
|
101
|
-
this.privateKey =
|
|
102
|
-
this.privateKey = this.privateKey + '\n' + '-----END PRIVATE KEY-----';
|
|
101
|
+
this.privateKey = util.normalizePrivateKey(this.privateKey);
|
|
103
102
|
}
|
|
104
103
|
this.serviceName = this.conn.serviceName;
|
|
105
104
|
this.remoteAddress = this.conn.remoteAddress;
|
|
@@ -321,9 +320,14 @@ class AuthMessage extends Message {
|
|
|
321
320
|
let portReleaseNum;
|
|
322
321
|
let portUpdateNum;
|
|
323
322
|
|
|
323
|
+
this.conn.dbDomain = this.sessionData['AUTH_SC_DB_DOMAIN'];
|
|
324
|
+
this.conn.dbName = this.sessionData['AUTH_SC_DBUNIQUE_NAME'];
|
|
325
|
+
this.conn.maxOpenCursors = Number(this.sessionData['AUTH_MAX_OPEN_CURSORS'] || 0);
|
|
326
|
+
this.conn.serviceName = this.sessionData['AUTH_SC_SERVICE_NAME'];
|
|
324
327
|
this.conn.instanceName = this.sessionData['AUTH_INSTANCENAME'];
|
|
325
328
|
const fullVersionNum = Number(this.sessionData['AUTH_VERSION_NO']);
|
|
326
329
|
const versionNum = (fullVersionNum >> 24) & 0xFF;
|
|
330
|
+
this.conn.warning = this.warning;
|
|
327
331
|
if (buf.caps.ttcFieldVersion >= constants.TNS_CCAP_FIELD_VERSION_18_1_EXT_1) {
|
|
328
332
|
releaseNum = (fullVersionNum >> 16) & 0xFF;
|
|
329
333
|
updateNum = (fullVersionNum >> 12) & 0x0F;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright (c) 2022,
|
|
1
|
+
// Copyright (c) 2022, 2024, Oracle and/or its affiliates.
|
|
2
2
|
|
|
3
3
|
//-----------------------------------------------------------------------------
|
|
4
4
|
//
|
|
@@ -44,9 +44,9 @@ class Message {
|
|
|
44
44
|
this.flushOutBinds = false;
|
|
45
45
|
this.endToEndSeqNum = 0;
|
|
46
46
|
this.errorOccurred = false;
|
|
47
|
-
this.isWarning = false;
|
|
48
47
|
this.flushOutBinds = false;
|
|
49
48
|
this.processedError = false;
|
|
49
|
+
this.warning = undefined;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
preProcess() { }
|
|
@@ -69,13 +69,16 @@ class Message {
|
|
|
69
69
|
buf.skipUB2(); // array elem error
|
|
70
70
|
buf.skipUB2(); // array elem error
|
|
71
71
|
this.errorInfo.cursorId = buf.readUB2(); // cursor id
|
|
72
|
-
|
|
73
|
-
buf.skipUB1(); // sql type
|
|
72
|
+
const errorPos = buf.readSB2(); // error position
|
|
73
|
+
buf.skipUB1(); // sql type (19c and earlier)
|
|
74
74
|
buf.skipUB1(); // fatal ?
|
|
75
|
-
buf.
|
|
76
|
-
buf.
|
|
75
|
+
buf.skipUB1(); // flags
|
|
76
|
+
buf.skipUB1(); // user cursor options
|
|
77
77
|
buf.skipUB1(); // UPI parameter
|
|
78
|
-
buf.
|
|
78
|
+
const warnFlag = buf.readUInt8(); // warning flag
|
|
79
|
+
if (warnFlag & constants.TNS_WARN_COMPILATION_CREATE) {
|
|
80
|
+
this.warning = errors.getErr(errors.WRN_COMPILATION_CREATE);
|
|
81
|
+
}
|
|
79
82
|
this.errorInfo.rowID = buf.readRowID(); // rowid
|
|
80
83
|
buf.skipUB4(); // OS error
|
|
81
84
|
buf.skipUB1(); // statement error
|
|
@@ -87,11 +90,11 @@ class Message {
|
|
|
87
90
|
buf.skipBytesChunked();
|
|
88
91
|
}
|
|
89
92
|
// batch error codes
|
|
90
|
-
|
|
91
|
-
if (
|
|
93
|
+
const numErrors = buf.readUB2(); // batch error codes array
|
|
94
|
+
if (numErrors > 0) {
|
|
92
95
|
this.errorInfo.batchErrors = [];
|
|
93
96
|
const firstByte = buf.readUInt8();
|
|
94
|
-
for (let i = 0; i <
|
|
97
|
+
for (let i = 0; i < numErrors; i++) {
|
|
95
98
|
if (firstByte === constants.TNS_LONG_LENGTH_INDICATOR) {
|
|
96
99
|
buf.skipUB4(); // chunk length ignored
|
|
97
100
|
}
|
|
@@ -104,14 +107,21 @@ class Message {
|
|
|
104
107
|
}
|
|
105
108
|
|
|
106
109
|
// batch error offset
|
|
107
|
-
|
|
108
|
-
if (
|
|
110
|
+
const numOffsets = buf.readUB4(); // batch error row offset array
|
|
111
|
+
if (numOffsets > 0) {
|
|
112
|
+
if (numOffsets > 65535) {
|
|
113
|
+
errors.throwErr(errors.ERR_TOO_MANY_BATCH_ERRORS);
|
|
114
|
+
}
|
|
109
115
|
const firstByte = buf.readUInt8();
|
|
110
|
-
|
|
116
|
+
let offset;
|
|
117
|
+
for (let i = 0; i < numOffsets; i++) {
|
|
111
118
|
if (firstByte === constants.TNS_LONG_LENGTH_INDICATOR) {
|
|
112
119
|
buf.skipUB4(); // chunk length ignored
|
|
113
120
|
}
|
|
114
|
-
|
|
121
|
+
offset = buf.readUB4();
|
|
122
|
+
if (i < numErrors) {
|
|
123
|
+
this.errorInfo.batchErrors[i].offset = offset;
|
|
124
|
+
}
|
|
115
125
|
}
|
|
116
126
|
if (firstByte === constants.TNS_LONG_LENGTH_INDICATOR) {
|
|
117
127
|
buf.skipBytes(1); // ignore end marker
|
|
@@ -119,10 +129,10 @@ class Message {
|
|
|
119
129
|
}
|
|
120
130
|
|
|
121
131
|
// batch error messages
|
|
122
|
-
|
|
123
|
-
if (
|
|
132
|
+
const errMsgArr = buf.readUB2(); // batch error messages array
|
|
133
|
+
if (errMsgArr > 0) {
|
|
124
134
|
buf.skipBytes(1); // ignore packed size
|
|
125
|
-
for (let i = 0; i <
|
|
135
|
+
for (let i = 0; i < errMsgArr; i++) {
|
|
126
136
|
buf.skipUB2(); // skip chunk length
|
|
127
137
|
|
|
128
138
|
this.errorInfo.batchErrors[i].message = buf.readStr(constants.CSFRM_IMPLICIT);
|
|
@@ -132,28 +142,40 @@ class Message {
|
|
|
132
142
|
|
|
133
143
|
this.errorInfo.num = buf.readUB4(); // error number (extended)
|
|
134
144
|
this.errorInfo.rowCount = buf.readUB8(); // row number (extended)
|
|
145
|
+
|
|
146
|
+
// fields added in Oracle Database 20c
|
|
147
|
+
if (buf.caps.ttcFieldVersion >= constants.TNS_CCAP_FIELD_VERSION_20_1) {
|
|
148
|
+
buf.skipUB4(); // sql type
|
|
149
|
+
buf.skipUB4(); // server checksum
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// error message
|
|
135
153
|
if (this.errorInfo.num !== 0) {
|
|
136
154
|
this.errorOccurred = true;
|
|
155
|
+
if (errorPos >= 0) {
|
|
156
|
+
this.errorInfo.pos = errorPos;
|
|
157
|
+
}
|
|
137
158
|
this.errorInfo.message = buf.readStr(constants.CSFRM_IMPLICIT);
|
|
138
159
|
/*
|
|
139
160
|
* Remove ending newline from ORA error message
|
|
140
161
|
*/
|
|
141
|
-
this.errorInfo.message = this.errorInfo.message.
|
|
162
|
+
this.errorInfo.message = this.errorInfo.message.trim();
|
|
142
163
|
}
|
|
143
|
-
this.errorInfo.isWarning = false;
|
|
144
164
|
this.processedError = true;
|
|
145
165
|
}
|
|
146
166
|
|
|
147
167
|
processReturnParameter() { }
|
|
148
168
|
|
|
149
169
|
processWarningInfo(buf) {
|
|
150
|
-
|
|
151
|
-
const numBytes = buf.readUB2();
|
|
152
|
-
buf.skipUB2();
|
|
153
|
-
if (
|
|
154
|
-
|
|
170
|
+
const errNum = buf.readUB2(); // warning number
|
|
171
|
+
const numBytes = buf.readUB2(); // length of warning message
|
|
172
|
+
buf.skipUB2(); // flags
|
|
173
|
+
if (errNum != 0 && numBytes > 0) {
|
|
174
|
+
// get message string and remove the ending newline.
|
|
175
|
+
const message = buf.readStr(constants.CSFRM_IMPLICIT).trim();
|
|
176
|
+
this.warning = new Error(message);
|
|
177
|
+
this.warning.errorNum = errNum;
|
|
155
178
|
}
|
|
156
|
-
this.errorInfo.isWarning = true;
|
|
157
179
|
}
|
|
158
180
|
|
|
159
181
|
hasMoreData(buf) {
|
|
@@ -260,7 +282,7 @@ class Message {
|
|
|
260
282
|
const flags = buf.readUB4(); // session flags
|
|
261
283
|
if (flags & constants.TNS_SESSGET_SESSION_CHANGED) {
|
|
262
284
|
if (this.connection._drcpEstablishSession) {
|
|
263
|
-
this.connection.
|
|
285
|
+
this.connection.statementCache.clearOpenCursors();
|
|
264
286
|
}
|
|
265
287
|
}
|
|
266
288
|
this.connection._drcpEstablishSession = false;
|
|
@@ -275,7 +297,7 @@ class Message {
|
|
|
275
297
|
if (this.connection._currentSchemaModified) {
|
|
276
298
|
this._writeCurrentSchemaPiggyback(buf);
|
|
277
299
|
}
|
|
278
|
-
if (this.connection._cursorsToClose.size > 0 && !this.connection._drcpEstablishSession) {
|
|
300
|
+
if (this.connection.statementCache._cursorsToClose.size > 0 && !this.connection._drcpEstablishSession) {
|
|
279
301
|
this.writeCloseCursorsPiggyBack(buf);
|
|
280
302
|
}
|
|
281
303
|
if (
|
|
@@ -304,11 +326,7 @@ class Message {
|
|
|
304
326
|
writeCloseCursorsPiggyBack(buf) {
|
|
305
327
|
this.writePiggybackHeader(buf, constants.TNS_FUNC_CLOSE_CURSORS);
|
|
306
328
|
buf.writeUInt8(1);
|
|
307
|
-
|
|
308
|
-
for (const cursorNum of this.connection._cursorsToClose.keys()) {
|
|
309
|
-
buf.writeUB4(cursorNum);
|
|
310
|
-
}
|
|
311
|
-
this.connection._cursorsToClose.clear();
|
|
329
|
+
this.connection.statementCache.writeCursorsToClose(buf);
|
|
312
330
|
}
|
|
313
331
|
|
|
314
332
|
writeCloseTempLobsPiggyback(buf) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright (c) 2022,
|
|
1
|
+
// Copyright (c) 2022, 2024, Oracle and/or its affiliates.
|
|
2
2
|
|
|
3
3
|
//-----------------------------------------------------------------------------
|
|
4
4
|
//
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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,12 @@ 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],
|
|
396
|
+
[constants.TNS_DATA_TYPE_VECTOR, constants.TNS_DATA_TYPE_VECTOR, constants.TNS_TYPE_REP_UNIVERSAL]
|
|
393
397
|
];
|
|
394
398
|
|
|
395
399
|
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
|
|
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.
|
|
193
|
-
|
|
194
|
-
|
|
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
|
|