Skip to content

Commit 004e06f

Browse files
Simplify code.
1 parent 916ca5d commit 004e06f

File tree

1 file changed

+25
-21
lines changed

1 file changed

+25
-21
lines changed

src/oracledb/impl/thin/messages/base.pyx

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,28 @@ cdef class Message:
216216
if not buf._caps.supports_end_of_response:
217217
self.end_of_response = True
218218

219+
cdef int _process_keyword_value_pairs(self, ReadBuffer buf,
220+
uint16_t num_pairs) except -1:
221+
"""
222+
Processes the keyword/value pairs returned by the server.
223+
"""
224+
cdef:
225+
uint16_t i, num_bytes, keyword_num
226+
bytes text_value, binary_value
227+
for i in range(num_pairs):
228+
text_value = binary_value = None
229+
buf.read_ub2(&num_bytes) # text value
230+
if num_bytes > 0:
231+
text_value = buf.read_bytes()
232+
buf.read_ub2(&num_bytes) # binary value
233+
if num_bytes > 0:
234+
binary_value = buf.read_bytes()
235+
buf.read_ub2(&keyword_num) # keyword num
236+
if keyword_num == TNS_KEYWORD_NUM_CURRENT_SCHEMA:
237+
self.conn_impl._current_schema = text_value.decode()
238+
elif keyword_num == TNS_KEYWORD_NUM_EDITION:
239+
self.conn_impl._edition = text_value.decode()
240+
219241
cdef int _process_message(self, ReadBuffer buf,
220242
uint8_t message_type) except -1:
221243
cdef uint64_t token_num
@@ -342,14 +364,7 @@ cdef class Message:
342364
buf.skip_ub1() # skip length of DTYs
343365
buf.read_ub2(&num_elements)
344366
buf.skip_ub1() # skip length
345-
for i in range(num_elements):
346-
buf.read_ub2(&temp16)
347-
if temp16 > 0: # skip key
348-
buf.skip_raw_bytes_chunked()
349-
buf.read_ub2(&temp16)
350-
if temp16 > 0: # skip value
351-
buf.skip_raw_bytes_chunked()
352-
buf.skip_ub2() # skip flags
367+
self._process_keyword_value_pairs(buf, num_elements)
353368
buf.skip_ub4() # skip overall flags
354369
elif opcode == TNS_SERVER_PIGGYBACK_EXT_SYNC:
355370
buf.skip_ub2() # skip number of DTYs
@@ -1172,7 +1187,7 @@ cdef class MessageWithData(Message):
11721187

11731188
cdef int _process_return_parameters(self, ReadBuffer buf) except -1:
11741189
cdef:
1175-
uint16_t keyword_num, num_params, num_bytes
1190+
uint16_t num_params, num_bytes
11761191
uint32_t num_rows, i
11771192
uint64_t rowcount
11781193
bytes key_value
@@ -1184,18 +1199,7 @@ cdef class MessageWithData(Message):
11841199
if num_bytes > 0:
11851200
buf.skip_raw_bytes(num_bytes)
11861201
buf.read_ub2(&num_params) # num key/value pairs
1187-
for i in range(num_params):
1188-
buf.read_ub2(&num_bytes) # key
1189-
if num_bytes > 0:
1190-
key_value = buf.read_bytes()
1191-
buf.read_ub2(&num_bytes) # value
1192-
if num_bytes > 0:
1193-
buf.skip_raw_bytes_chunked()
1194-
buf.read_ub2(&keyword_num) # keyword num
1195-
if keyword_num == TNS_KEYWORD_NUM_CURRENT_SCHEMA:
1196-
self.conn_impl._current_schema = key_value.decode()
1197-
elif keyword_num == TNS_KEYWORD_NUM_EDITION:
1198-
self.conn_impl._edition = key_value.decode()
1202+
self._process_keyword_value_pairs(buf, num_params)
11991203
buf.read_ub2(&num_bytes) # registration
12001204
if num_bytes > 0:
12011205
buf.skip_raw_bytes(num_bytes)

0 commit comments

Comments
 (0)