Skip to content

Commit 49e6938

Browse files
Internal changes to improve handling of protocol between database and
client.
1 parent d4e4b09 commit 49e6938

File tree

4 files changed

+34
-27
lines changed

4 files changed

+34
-27
lines changed

Diff for: doc/src/release_notes.rst

+3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ oracledb 2.0.0 (TBD)
1313
Thin Mode Changes
1414
+++++++++++++++++
1515

16+
#) Internal changes to improve handling of protocol between database and
17+
client.
18+
1619
Thick Mode Changes
1720
++++++++++++++++++
1821

Diff for: src/oracledb/impl/thin/constants.pxi

+5-3
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ cdef enum:
9191
TNS_DATA_TYPE_AUA = 36 + 256
9292
TNS_DATA_TYPE_RXH7 = 37 + 256
9393
TNS_DATA_TYPE_NA6 = 38 + 256
94-
TNS_DATA_TYPE_OAC = 39
94+
TNS_DATA_TYPE_OAC9 = 39
9595
TNS_DATA_TYPE_AMS = 40
9696
TNS_DATA_TYPE_BRN = 41
9797
TNS_DATA_TYPE_BRP = 42 + 256
@@ -165,7 +165,7 @@ cdef enum:
165165
TNS_DATA_TYPE_RSET = 116
166166
TNS_DATA_TYPE_CWD = 117
167167
TNS_DATA_TYPE_JSON = 119
168-
TNS_DATA_TYPE_NEW_OAC = 120
168+
TNS_DATA_TYPE_OAC122 = 120
169169
TNS_DATA_TYPE_UD12 = 124 + 256
170170
TNS_DATA_TYPE_AL8 = 125 + 256
171171
TNS_DATA_TYPE_LFOP = 126 + 256
@@ -352,7 +352,7 @@ cdef enum:
352352
TNS_DATA_TYPE_XSNSOP2 = 604
353353
TNS_DATA_TYPE_XSNS2 = 605
354354
TNS_DATA_TYPE_IMPLRES = 611
355-
TNS_DATA_TYPE_OER = 612
355+
TNS_DATA_TYPE_OER19 = 612
356356
TNS_DATA_TYPE_UB1ARRAY = 613
357357
TNS_DATA_TYPE_SESSSTATE = 614
358358
TNS_DATA_TYPE_AC_REPLAY = 615
@@ -373,6 +373,8 @@ cdef enum:
373373
TNS_DATA_TYPE_SCN8 = 638
374374
TNS_DATA_TYPE_UD21 = 639
375375
TNS_DATA_TYPE_TNP = 640
376+
TNS_DATA_TYPE_OAC = 646
377+
TNS_DATA_TYPE_OER = 652
376378
TNS_DATA_TYPE_UDS = 663
377379

378380
# data type representations

Diff for: src/oracledb/impl/thin/data_types.pyx

+7-5
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ ctypedef struct DataType:
3434
uint16_t conv_data_type
3535
uint16_t representation
3636

37-
cdef DataType[313] DATA_TYPES = [
37+
cdef DataType[315] DATA_TYPES = [
3838
[TNS_DATA_TYPE_VARCHAR, TNS_DATA_TYPE_VARCHAR, TNS_TYPE_REP_UNIVERSAL],
3939
[TNS_DATA_TYPE_NUMBER, TNS_DATA_TYPE_NUMBER, TNS_TYPE_REP_ORACLE],
4040
[TNS_DATA_TYPE_LONG, TNS_DATA_TYPE_LONG, TNS_TYPE_REP_UNIVERSAL],
@@ -43,7 +43,7 @@ cdef DataType[313] DATA_TYPES = [
4343
[TNS_DATA_TYPE_LONG_RAW, TNS_DATA_TYPE_LONG_RAW, TNS_TYPE_REP_UNIVERSAL],
4444
[TNS_DATA_TYPE_UB2, TNS_DATA_TYPE_UB2, TNS_TYPE_REP_UNIVERSAL],
4545
[TNS_DATA_TYPE_UB4, TNS_DATA_TYPE_UB4, TNS_TYPE_REP_UNIVERSAL],
46-
[TNS_DATA_TYPE_SB1, TNS_DATA_TYPE_SB1, TNS_TYPE_REP_UNIVERSAL],
46+
[TNS_DATA_TYPE_SB1, TNS_DATA_TYPE_SB1, TNS_TYPE_REP_ORACLE],
4747
[TNS_DATA_TYPE_SB2, TNS_DATA_TYPE_SB2, TNS_TYPE_REP_UNIVERSAL],
4848
[TNS_DATA_TYPE_SB4, TNS_DATA_TYPE_SB4, TNS_TYPE_REP_UNIVERSAL],
4949
[TNS_DATA_TYPE_SWORD, TNS_DATA_TYPE_SWORD, TNS_TYPE_REP_UNIVERSAL],
@@ -55,7 +55,7 @@ cdef DataType[313] DATA_TYPES = [
5555
[TNS_DATA_TYPE_AMS, TNS_DATA_TYPE_AMS, TNS_TYPE_REP_UNIVERSAL],
5656
[TNS_DATA_TYPE_BRN, TNS_DATA_TYPE_BRN, TNS_TYPE_REP_UNIVERSAL],
5757
[TNS_DATA_TYPE_CWD, TNS_DATA_TYPE_CWD, TNS_TYPE_REP_UNIVERSAL],
58-
[TNS_DATA_TYPE_NEW_OAC, TNS_DATA_TYPE_NEW_OAC, TNS_TYPE_REP_UNIVERSAL],
58+
[TNS_DATA_TYPE_OAC122, TNS_DATA_TYPE_OAC122, TNS_TYPE_REP_UNIVERSAL],
5959
[TNS_DATA_TYPE_OER8, TNS_DATA_TYPE_OER8, TNS_TYPE_REP_UNIVERSAL],
6060
[TNS_DATA_TYPE_FUN, TNS_DATA_TYPE_FUN, TNS_TYPE_REP_UNIVERSAL],
6161
[TNS_DATA_TYPE_AUA, TNS_DATA_TYPE_AUA, TNS_TYPE_REP_UNIVERSAL],
@@ -256,7 +256,7 @@ cdef DataType[313] DATA_TYPES = [
256256
[TNS_DATA_TYPE_PDN, TNS_DATA_TYPE_NUMBER, TNS_TYPE_REP_ORACLE],
257257
[TNS_DATA_TYPE_VCS, TNS_DATA_TYPE_VARCHAR, TNS_TYPE_REP_UNIVERSAL],
258258
[TNS_DATA_TYPE_VBI, TNS_DATA_TYPE_VARCHAR, TNS_TYPE_REP_UNIVERSAL],
259-
[TNS_DATA_TYPE_OAC, TNS_DATA_TYPE_NEW_OAC, TNS_TYPE_REP_UNIVERSAL],
259+
[TNS_DATA_TYPE_OAC9, TNS_DATA_TYPE_OAC9, TNS_TYPE_REP_UNIVERSAL],
260260
[TNS_DATA_TYPE_UIN, TNS_DATA_TYPE_NUMBER, TNS_TYPE_REP_ORACLE],
261261
[TNS_DATA_TYPE_SLS, TNS_DATA_TYPE_NUMBER, TNS_TYPE_REP_ORACLE],
262262
[TNS_DATA_TYPE_LVC, TNS_DATA_TYPE_VARCHAR, TNS_TYPE_REP_UNIVERSAL],
@@ -322,7 +322,7 @@ cdef DataType[313] DATA_TYPES = [
322322
[TNS_DATA_TYPE_AC_REPLAY, TNS_DATA_TYPE_AC_REPLAY, TNS_TYPE_REP_UNIVERSAL],
323323
[TNS_DATA_TYPE_AC_CONT, TNS_DATA_TYPE_AC_CONT, TNS_TYPE_REP_UNIVERSAL],
324324
[TNS_DATA_TYPE_IMPLRES, TNS_DATA_TYPE_IMPLRES, TNS_TYPE_REP_UNIVERSAL],
325-
[TNS_DATA_TYPE_OER, TNS_DATA_TYPE_OER, TNS_TYPE_REP_UNIVERSAL],
325+
[TNS_DATA_TYPE_OER19, TNS_DATA_TYPE_OER19, TNS_TYPE_REP_UNIVERSAL],
326326
[TNS_DATA_TYPE_TXT, TNS_DATA_TYPE_TXT, TNS_TYPE_REP_UNIVERSAL],
327327
[TNS_DATA_TYPE_XSSESSNS, TNS_DATA_TYPE_XSSESSNS, TNS_TYPE_REP_UNIVERSAL],
328328
[TNS_DATA_TYPE_XSATTOP, TNS_DATA_TYPE_XSATTOP, TNS_TYPE_REP_UNIVERSAL],
@@ -353,5 +353,7 @@ cdef DataType[313] DATA_TYPES = [
353353
[TNS_DATA_TYPE_UD21, TNS_DATA_TYPE_UD21, TNS_TYPE_REP_UNIVERSAL],
354354
[TNS_DATA_TYPE_UDS, TNS_DATA_TYPE_UDS, TNS_TYPE_REP_UNIVERSAL],
355355
[TNS_DATA_TYPE_TNP, TNS_DATA_TYPE_TNP, TNS_TYPE_REP_UNIVERSAL],
356+
[TNS_DATA_TYPE_OER, TNS_DATA_TYPE_OER, TNS_TYPE_REP_UNIVERSAL],
357+
[TNS_DATA_TYPE_OAC, TNS_DATA_TYPE_OAC, TNS_TYPE_REP_UNIVERSAL],
356358
[0, 0, 0]
357359
]

Diff for: src/oracledb/impl/thin/messages.pyx

+19-19
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,10 @@ cdef class Message:
103103
buf.skip_ub2() # array elem error
104104
buf.read_ub2(&info.cursor_id) # cursor id
105105
buf.read_ub2(&info.pos) # error position
106-
buf.skip_ub1() # sql type
106+
buf.skip_ub1() # sql type (19c and earlier)
107107
buf.skip_ub1() # fatal?
108-
buf.skip_ub2() # flags
109-
buf.skip_ub2() # user cursor options
108+
buf.skip_ub1() # flags
109+
buf.skip_ub1() # user cursor options
110110
buf.skip_ub1() # UPI parameter
111111
buf.skip_ub1() # warning flag
112112
buf.read_rowid(&info.rowid) # rowid
@@ -158,6 +158,13 @@ cdef class Message:
158158

159159
buf.read_ub4(&info.num) # error number (extended)
160160
buf.read_ub8(&info.rowcount) # row number (extended)
161+
162+
# fields added in Oracle Database 20c
163+
if buf._caps.ttc_field_version >= TNS_CCAP_FIELD_VERSION_20_1:
164+
buf.skip_ub4() # sql type
165+
buf.skip_ub4() # server checksum
166+
167+
# error message
161168
if info.num != 0:
162169
self.error_occurred = True
163170
info.message = buf.read_str(TNS_CS_IMPLICIT).rstrip()
@@ -647,18 +654,11 @@ cdef class MessageWithData(Message):
647654
buf.skip_ub1() # flags
648655
buf.read_sb1(&precision)
649656
fetch_info.precision = precision
650-
if data_type == TNS_DATA_TYPE_NUMBER \
651-
or data_type == TNS_DATA_TYPE_INTERVAL_DS \
652-
or data_type == TNS_DATA_TYPE_TIMESTAMP \
653-
or data_type == TNS_DATA_TYPE_TIMESTAMP_LTZ \
654-
or data_type == TNS_DATA_TYPE_TIMESTAMP_TZ:
655-
buf.read_sb2(&fetch_info.scale)
656-
else:
657-
buf.read_sb1(&scale)
658-
fetch_info.scale = scale
657+
buf.read_sb1(&scale)
658+
fetch_info.scale = scale
659659
buf.read_ub4(&fetch_info.buffer_size)
660660
buf.skip_ub4() # max number of array elements
661-
buf.skip_ub4() # cont flags
661+
buf.skip_ub8() # cont flags
662662
buf.read_ub4(&num_bytes) # OID
663663
if num_bytes > 0:
664664
oid = buf.read_bytes()
@@ -2160,7 +2160,7 @@ cdef class LobOpMessage(Message):
21602160
cdef:
21612161
cdef const char_type *ptr
21622162
ssize_t num_bytes
2163-
uint16_t temp16
2163+
uint8_t temp8
21642164
if self.source_lob_impl is not None:
21652165
num_bytes = len(self.source_lob_impl._locator)
21662166
ptr = buf.read_raw_bytes(num_bytes)
@@ -2171,12 +2171,12 @@ cdef class LobOpMessage(Message):
21712171
self.dest_lob_impl._locator = ptr[:num_bytes]
21722172
if self.operation == TNS_LOB_OP_CREATE_TEMP:
21732173
buf.skip_ub2() # skip character set
2174-
if self.send_amount:
2174+
buf.skip_raw_bytes(3) # skip trailing flags, amount
2175+
elif self.send_amount:
21752176
buf.read_sb8(&self.amount)
2176-
if self.operation == TNS_LOB_OP_CREATE_TEMP \
2177-
or self.operation == TNS_LOB_OP_IS_OPEN:
2178-
buf.read_ub2(&temp16) # flag
2179-
self.bool_flag = temp16 > 0
2177+
if self.operation == TNS_LOB_OP_IS_OPEN:
2178+
buf.read_ub1(&temp8)
2179+
self.bool_flag = temp8 > 0
21802180

21812181
cdef int _write_message(self, WriteBuffer buf) except -1:
21822182
cdef int i

0 commit comments

Comments
 (0)