@@ -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