U e> @sdZddlZddlmZddlmZddlmZddlm Z ddlm Z dd lm Zdd lmZdd lmZdd lmZdd lmZddlmZmZddlmZddlmZmZmZddl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&ej'j(ej)fej'j*ej+fej'j,ej-fej'j.ej/fej'j0e j1fej'j2ejfej'j3ej4fej'j5ej6fej'j7ej8fej'j9ej:fej'j;ejGddde?Z@Gddde?ZAdS)z3Implementation of the X protocol for MySQL servers.N) mysqlx_pb2)mysqlx_session_pb2)mysqlx_sql_pb2)mysqlx_notice_pb2)mysqlx_datatypes_pb2)mysqlx_resultset_pb2)mysqlx_crud_pb2)mysqlx_expr_pb2)mysqlx_connection_pb2)ColumnMetaData) STRING_TYPES INT_TYPES)DbDoc)InterfaceErrorOperationalErrorProgrammingError) ExprParserbuild_null_scalarbuild_string_scalarbuild_bool_scalarbuild_double_scalarbuild_int_scalarutf-8cCst|tr|S||SN) isinstancebytesencode)valueencodingr d/opt/hc_python/lib64/python3.8/site-packages/../../../lib/python3.8/site-packages/mysqlx/protocol.pyencode_to_bytes@sr"c@s4eZdZddZddZddZddZd d Zd S) MessageReaderWritercCs||_d|_dSr)_stream_msg)selfZ socket_streamr r r!__init__EszMessageReaderWriter.__init__cCs|jdk rtd||_dS)NzMessage push slot is full)r%rr&msgr r r! push_messageIs z MessageReaderWriter.push_messagecCs"|jdk r|j}d|_|S|Sr)r% _read_message)r&mr r r! read_messageNs  z MessageReaderWriter.read_messagecCsp|jd}td|\}}|j|d}tD],}|d|kr0|d}|||Sq0td|dS)NUnexpected message encountered during authentication handshake)rEr-rrTAuthenticateContinuer auth_datar(r r r!read_auth_continues  zProtocol.read_auth_continuecCs&tjt|d}|jtjj|dS)N)rX)rTrWr"rFr@rIrJSESS_AUTHENTICATE_CONTINUE)r&datar)r r r!send_auth_continueszProtocol.send_auth_continuecCs4|j}t|tjrq0t|tjrt|jqdSr) rEr-rrTAuthenticateOkrIErrorrr)r(r r r! read_auth_oks    zProtocol.read_auth_okcCsft|j}|dg}|jD]F}|d}||jkr>td||j|}||d|j ||<q|S)NrLz-Unable to find placeholder for parameter: {0}r)r<Z _binding_mapZ _bindingsrr6arg_object_to_scalar _doc_based)r& statementcountZscalarsZbindingrLposr r r!get_binding_scalarss       zProtocol.get_binding_scalarscCs|jr|j|j|jr,|j|||jrF|j |j _ |j |j _ |jrZ|j|j|jrn|j|j|jr|j|jdSr)Z _has_wherecriteriaCopyFromZ _where_exprZ _has_bindingsargsrOreZ _has_limitZ_limit_row_countlimit row_countZ _limit_offsetoffsetZ _has_sortorderZ _sort_exprZ _has_group_bygroupingZ _groupingZ _has_havingZgrouping_criteriaZ_having)r&messagerbr r r! _apply_filters  zProtocol._apply_filtercCsdtj|jrtjntjtj|jj|jjdd}|j rB|j |j | |||jtjj|dSNrLschemaZ data_modelZ collection) MySQLxCrudZFindraDOCUMENTTABLE CollectiontargetrLrrZ_has_projection projectionrOZ_projection_exprrorFr@rIrJZ CRUD_FIND)r&stmtfindr r r! send_finds  zProtocol.send_findcCstj|jrtjntjtj|jj|jjdd}| |||j D]H}tj |j |j d}|jdk rz|j||j|j |j|gq@|jtjj|dS)Nrqrs) operationsource)rtZUpdaterarurvrwrxrLrrroZ _update_opsZUpdateOperationZ update_typer~rrgarg_object_to_exprr}rOrFr@rIrJZ CRUD_UPDATE)r&rbupdateZ update_opZopexprr r r! send_updates.    zProtocol.send_updatecCsPtj|jrtjntjtj|jj|jjdd}| |||j t j j|dSrp)rtDeleterarurvrwrxrLrrrorFr@rIrJZ CRUD_DELETE)r&rzdeleter r r! send_deletes  zProtocol.send_deletecCsLtj|t|dd}|D]}||}|j|gq|jtj j |dS)NF) namespacerzZcompact_metadata) MySQLxSQLZ StmtExecuter"rNrhrOrFr@rIrJZSQL_STMT_EXECUTE)r&rrzrhargrr r r!send_execute_statements  zProtocol.send_execute_statementcCstj|jrtjntjtj|jj|jjdd}t |dr`|j D] }|j t ||j gq>|jD]n}tj}t|tr|D]"}|||j }|j |gqn|||j }|j |g|j |gqf|jtjj|dS)Nrqrs_fields)rtZInsertrarurvrwrxrLrrhasattrrryrOrZparse_table_insert_fieldZ_valuesZTypedRowrlistrfieldrowrFr@rIrJZ CRUD_INSERT)r&rbinsertrrrvalobjr r r! send_inserts4      zProtocol.send_insertcCstt|tr8tjjt|d}tjd|d}tjd|dSt|trTtjdt|dSt|t rptjdt |dSdS)N)r)typeZv_stringr)rscalar) rr MySQLxDatatypesZScalarStringr"Anyboolrrr)r&rrrr r r!rNs   zProtocol._create_anycCs||}|dk rtddS)NzExpected to close the result)r+rr&rsr)r r r! close_result s zProtocol.close_resultcCs6||}|dkrdSt|tjr&|S|j|dSr)r+rMySQLxResultsetRowrEr*rr r r!read_rows   zProtocol.read_rowcCs|jdkr:t}||j|jt|j|j|j np|jdkrZt }||jnP|jdkrt }||j|j tj j kr|jj|_n|j tj jkr|jj|_dS)Nr)r MySQLxNoticeWarningr4r9 _warningsappendlevelcoder)ZSessionVariableChangedZSessionStateChangedparamZ ROWS_AFFECTEDrZv_unsigned_intZ_rows_affectedZGENERATED_INSERT_IDZ _generated_id)r&r)rZ warningMsgZ sessVarMsgZ sessStateMsgr r r!_process_frames(      zProtocol._process_framecCs||j}t|tjr"t|jqt|tjr<| ||qt|t j rLdSt|t j r`d|_qt|t jrxd|_qqxq|S)NT)rEr-rrIr^rr)rFramerr StmtExecuteOkr FetchDone_closedFetchDoneMoreResultsetsZ_has_more_resultsrr r r!r+*s       zProtocol._read_messagec Csg}||}|dkrqt|tjr2|j|qt|tjsFtdt|j|j |j |j |j |j |j|j|j|j|j|j }||q|S)NzUnexpected msg type)r+rrrrEr*r rrcatalogrrtableZoriginal_tablerL original_namelengthZ collationZfractional_digitsflags content_typer)r&rcolumnsr)colr r r!get_column_metadata;s*     zProtocol.get_column_metadatacCs|dkrtjtjjtdSt|trsL                    $