
    vd>                        d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z
 ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZmZ ddlmZ ddlmZmZmZ ddl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& ej'        j(        ej)        fej'        j*        ej+        fej'        j,        ej-        fej'        j.        ej/        fej'        j0        e
j1        fej'        j2        ej        fej'        j3        ej4        fej'        j5        ej6        fej'        j7        ej8        fej'        j9        ej:        fej'        j;        ej<        fgZ=ddZ> G d de?          Z@ G d de?          ZAdS )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)InterfaceErrorOperationalErrorProgrammingError)
ExprParserbuild_null_scalarbuild_string_scalarbuild_bool_scalarbuild_double_scalarbuild_int_scalarutf-8c                 Z    t          | t                    r| n|                     |          S N)
isinstancebytesencode)valueencodings     K/var/www/html/t/fyr/venv311/lib/python3.11/site-packages/mysqlx/protocol.pyencode_to_bytesr#   @   s'    ue,,H55%,,x2H2HH    c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )MessageReaderWriterc                 "    || _         d | _        d S r   )_stream_msg)selfsocket_streams     r"   __init__zMessageReaderWriter.__init__E   s    $			r$   c                 @    | j         t          d          || _         d S )NzMessage push slot is full)r)   r   r*   msgs     r"   push_messagez MessageReaderWriter.push_messageI   s$    9 "#>???			r$   c                 X    | j         | j         }d | _         |S |                                 S r   )r)   _read_message)r*   ms     r"   read_messagez MessageReaderWriter.read_messageN   s/    9 	ADIH!!###r$   c                 b   | j                             d          }t          j        d|          \  }}| j                             |dz
            }t          D ]7}|d         |k    r) |d                     }|                    |           |c S 8t          d                    |                    )N   <LBr   r   zUnknown msg_type: {0})r(   readstructunpack_SERVER_MESSAGESParseFromString
ValueErrorformat)r*   hdrmsg_lenmsg_typepayload	msg_tupler/   s          r"   r2   z!MessageReaderWriter._read_messageU   s    l"""M%55,##GaK00) 	 	I|x''"ilnn##G,,,


 (
 077AABBBr$   c                     |                                 }t          j        dt          |          dz   |          }| j                            d                    ||g                     d S )Nr7   r   r$   )SerializeToStringr9   packlenr(   sendalljoin)r*   msg_idr/   msg_strheaders        r"   write_messagez!MessageReaderWriter.write_messageb   s^    ''))UCLL1$4f==SXXvw&78899999r$   N)__name__
__module____qualname__r,   r0   r4   r2   rM    r$   r"   r&   r&   D   sb            
$ $ $C C C: : : : :r$   r&   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )Protocolc                 0    || _         || _        d | _        d S r   )_reader_writer_message)r*   reader_writers     r"   r,   zProtocol.__init__i   s    $$r$   c                     t          j                    }| j                            t          j        j        |           | j                                        S r   )	MySQLxConnectionCapabilitiesGetrV   rM   MySQLxClientMessagesCON_CAPABILITIES_GETrU   r4   r.   s     r"   get_capabiliteszProtocol.get_capabilitesn   sI    .00""!6	= 	= 	=|((***r$   c                 n   t          j                    }|                                D ]P\  }}|                     |          }t          j        ||          }|j        j                            |g           Q| j                            t          j
        j        |           |                                 S )N)namer    )rZ   CapabilitiesSetitems_create_any
CapabilitycapabilitiesextendrV   rM   r\   r]   CON_CAPABILITIES_SETread_ok)r*   kwargsr/   keyr    
capabilitys         r"   set_capabilitieszProtocol.set_capabilitiest   s    .00 ,,.. 	? 	?JC$$U++E)4#UKKKJ)00*>>>>""!6	= 	= 	= ||~~r$   c                     t          j        |          }| j                            t          j        j        |           d S )N)	mech_name)MySQLxSessionAuthenticateStartrV   rM   r\   r]   SESS_AUTHENTICATE_START)r*   methodr/   s      r"   send_auth_startzProtocol.send_auth_start   sI    -???""!93	@ 	@ 	@ 	@ 	@r$   c                     | j                                         }t          |t          j                  st          d          |j        S )Nz>Unexpected message encountered during authentication handshake)rU   r4   r   rp   AuthenticateContinuer   	auth_datar.   s     r"   read_auth_continuezProtocol.read_auth_continue   sI    l''))#}ABB 	=  "< = = =}r$   c                     t          j        t          |                    }| j                            t
          j        j        |           d S )N)rw   )rp   rv   r#   rV   rM   r\   r]   SESS_AUTHENTICATE_CONTINUE)r*   datar/   s      r"   send_auth_continuezProtocol.send_auth_continue   sX    0%d++- - -""!<c	C 	C 	C 	C 	Cr$   c                     	 | j                                         }t          |t          j                  rd S t          |t
          j                  rt          |j                  dr   )	rU   r4   r   rp   AuthenticateOkr\   Errorr   r/   r.   s     r"   read_auth_okzProtocol.read_auth_ok   s]    	.,++--C#};<< #v|,, .$SW---	.r$   c                    t          |j                  }|d gz  }|j        D ]g}|d         }||j        vr"t          d                    |                    |j        |         }|                     |d         |j                   ||<   h|S )Nra   z-Unable to find placeholder for parameter: {0}r    )rG   _binding_map	_bindingsr   r>   arg_object_to_scalar
_doc_based)r*   	statementcountscalarsbindingra   poss          r"   get_binding_scalarszProtocol.get_binding_scalars   s    I*++4&. * 	O 	OG6?D9111& (88>tF F F(.C44WW5E9B9M5MO OGCLLr$   c                    |j         r|j                            |j                   |j        r-|j                            |                     |                     |j        r"|j	        |j
        _        |j        |j
        _        |j        r|j                            |j                   |j        r|j                            |j                   |j        r!|j                            |j                   d S d S r   )
_has_wherecriteriaCopyFrom_where_expr_has_bindingsargsrg   r   
_has_limit_limit_row_countlimit	row_count_limit_offsetoffset	_has_sortorder
_sort_expr_has_group_bygrouping	_grouping_has_havinggrouping_criteria_having)r*   messager   s      r"   _apply_filterzProtocol._apply_filter   s     	=%%i&;<<<" 	EL 8 8 C CDDD 	;&/&@GM##,#:GM  	7M  !5666" 	9##I$7888  	B%..y/@AAAAA	B 	Br$   c                    t          j        |j        rt           j        nt           j        t          j        |j        j        |j        j                            }|j	        r|j
                            |j                   |                     ||           | j                            t           j        j        |           d S Nra   schema
data_model
collection)
MySQLxCrudFindr   DOCUMENTTABLE
Collectiontargetra   r   _has_projection
projectionrg   _projection_exprr   rV   rM   r\   r]   	CRUD_FIND)r*   stmtfinds      r"   	send_findzProtocol.send_find   s    ?A
++0:0@!,$+2B48K4DF F FG G G
  	:O""4#89994&&&""6#8#BDIIIIIr$   c                 F   t          j        |j        rt           j        nt           j        t          j        |j        j        |j        j                            }| 	                    ||           |j
        D ]}}t          j        |j        |j                  }|j        9|j                            |                     |j        |j                              |j                            |g           ~| j                            t*          j        j        |           d S )Nr   r   )	operationsource)r   Updater   r   r   r   r   ra   r   r   _update_opsUpdateOperationupdate_typer   r    r   arg_object_to_exprr   rg   rV   rM   r\   r]   CRUD_UPDATE)r*   r   update	update_opopexprs        r"   send_updatezProtocol.send_update   s7   "$/F
++5?5E!,)2B2G4=4D4IK K KL L L
 	69---". 	. 	.I/#/	8HJ J JF*%%++!Y-A)AC CD D D ##VH----""6#8#DfMMMMMr$   c                 <   t          j        |j        rt           j        nt           j        t          j        |j        j        |j        j                            }| 	                    ||           | j
                            t          j        j        |           d S r   )r   Deleter   r   r   r   r   ra   r   r   rV   rM   r\   r]   CRUD_DELETE)r*   r   deletes      r"   send_deletezProtocol.send_delete   s    "?A
++0:0@!,$+2B48K4DF F FG G G
 	64(((""6#8#DfMMMMMr$   c                    t          j        |t          |          d          }|D ]2}|                     |          }|j                            |g           3| j                            t          j	        j
        |           d S )NF)	namespacer   compact_metadata)	MySQLxSQLStmtExecuter#   rd   r   rg   rV   rM   r\   r]   SQL_STMT_EXECUTE)r*   r   r   r   argr    s         r"   send_execute_statementzProtocol.send_execute_statement   s    $y*9$*?*?6;= = =  	& 	&C$$S))EIeW%%%%""6#8#I#'	) 	) 	) 	) 	)r$   c                 ^   t          j        |j        rt           j        nt           j        t          j        |j        j        |j        j                            }t          |d          rK|j
        D ]C}|j                            t          ||j                                                   g           D|j        D ]}t           j                                        }t#          |t$                    r=|D ]9}|                     ||j                   }|j                            |g           :n7|                     ||j                   }|j                            |g           |j                            |g           | j                            t0          j        j        |           d S )Nr   r   _fields)r   Insertr   r   r   r   r   ra   r   hasattrr   r   rg   r   parse_table_insert_field_valuesTypedRowr   listr   fieldrowrV   rM   r\   r]   CRUD_INSERT)r*   r   insertr   r    r   valobjs           r"   send_insertzProtocol.send_insert   s   "$/F
++5?5E!,)2B2G4=4D4IK K KL L L
 9i(( 	2"* 2 2!((u)*>&>??--//*1 2 2 2 2 & 
	% 
	%E#,,..C%&& (  , ,C11!557 7CI$$cU++++,
 --e9M5MNN	  #'''Jse$$$$""6#8#DfMMMMMr$   c                    t          |t                    rYt          j                            t          |                    }t          j        d|          }t          j        d|          S t          |t                    r#t          j        dt          |                    S t          |t                    r#t          j        dt          |                    S d S )N)r       )typev_stringr   )r   scalar)r   r   MySQLxDatatypesScalarStringr#   Anyboolr   r   r   )r*   r   r   r   s       r"   rd   zProtocol._create_any   s    c<(( 	M!(//oc6J6J/KKC$+SAAAF"&Af====T"" 	M"&A6G6L6LMMMMY'' 	M"&A6Fs6K6KLLLLtr$   c                 R    |                      |          }|t          d          d S )NzExpected to close the result)r2   r   r*   rsr/   s      r"   close_resultzProtocol.close_result	  s0      $$?"#ABBB ?r$   c                     |                      |          }|d S t          |t          j                  r|S | j                            |           d S r   )r2   r   MySQLxResultsetRowrU   r0   r   s      r"   read_rowzProtocol.read_row  sT      $$;4c?.// 	J!!#&&&tr$   c                    |j         dk    rgt          j                    }|                    |j                   |j                            t          |j        |j        |j	                             d S |j         dk    r/t          j
                    }|                    |j                   d S |j         dk    rt          j                    }|                    |j                   |j        t          j        j        k    r|j        j        |_        d S |j        t          j        j        k    r|j        j        |_        d S d S d S )Nr         )r   MySQLxNoticeWarningr<   rB   	_warningsappendlevelcoder/   SessionVariableChangedSessionStateChangedparamROWS_AFFECTEDr    v_unsigned_int_rows_affectedGENERATED_INSERT_ID_generated_id)r*   r/   r   
warningMsg
sessVarMsgsessStateMsgs         r"   _process_framezProtocol._process_frame  sD   8q==%-//J&&s{333L
(8*/(2!8 !8 9 9 9 9 9X]]%<>>J&&s{33333X]]';==L((555! 4BC C$0$6$E!!!# 4HI I#/#5#D    ]I Ir$   c                    	 | j                                         }t          |t          j                  rt          |j                  t          |t          j                  r| 	                    ||           nat          |t          j                  rd S t          |t          j                  rd|_        n#t          |t          j                  rd|_        nn|S )NT)rU   r4   r   r\   r   r   r/   r   Framer  r   StmtExecuteOkr   	FetchDone_closedFetchDoneMoreResultsets_has_more_resultsr   s      r"   r2   zProtocol._read_message*  s    	,++--C#v|,, &sw///C!344 	##C,,,,C!899 tC!:;; !

C!HII '+$$	 
r$   c                    g }	 |                      |          }|nt          |t          j                  r| j                            |           nt          |t          j                  st          d          t          |j        |j	        |j
        |j        |j        |j        |j        |j        |j        |j        |j        |j                  }|                    |           |S )NTzUnexpected msg type)r2   r   r   r   rU   r0   r   r   r   catalogr   tableoriginal_tablera   original_namelength	collationfractional_digitsflagscontent_typer   )r*   r   columnsr/   cols        r"   get_column_metadatazProtocol.get_column_metadata;  s    	 $$R((C{#233 ))#...c?#ABB <$%:;;; 3;
CI!$!3SX!$!2CJ!$!6	!$!1	3 3C
 NN3	  r$   c                    |1t          j        t           j        j        t                                S t	          |t
                    r2t          j        t           j        j        t          |                    S t	          |t                    r2t          j        t           j        j        t          |                    S t	          |t                    r2t          j        t           j        j        t          |                    S t	          |t                    r	 t          ||                                          }|                                r2t          j        t           j        j        t          |                    S |S #  t          j        t           j        j        t          |                    cY S xY wt	          |t                     r?t          j        t           j        j        t          t#          |                              S t%          d                    t)          |                              )N)r   literalzUnsupported type: {0})
MySQLxExprExprLITERALr   r   r   r   r   r   floatr   r   r   exprhas_identifierr   r   strr   r>   r   )r*   r    allow_relational
expressions       r"   r   zProtocol.arg_object_to_exprN  s)   =?
(?+<+>+>@ @ @ @eT"" 	L?
(?+<U+C+CE E E Ey)) 	L?
(?+;E+B+BD D D D'' 	L?
(?+>u+E+EG G G G|,, 	LK'/?@@EEGG
,,.. O%?
0G3Fu3M3MO O O O!!K!JO,C/B5/I/IK K K K K Ku%% 	L?
(?+>s5zz+J+JL L L L4;;DKKHHIIIs   A'F	 F	 	4F?c                 8    |                      ||          j        S r   )r   r  )r*   r    r%  s      r"   r   zProtocol.arg_object_to_scalarj  s    &&u.>??GGr$   c                     | j                                         }t          |t          j                  rt          |j                  t          |t          j                  st          d          d S )NzUnexpected message encountered)rU   r4   r   r\   r   r   r/   Okr.   s     r"   ri   zProtocol.read_okm  si    l''))c6<(( 	* )))#vy)) 	C !ABBB	C 	Cr$   c                     t          j                    }| j                            t          j        j        |           d S r   )rp   CloserV   rM   r\   r]   
SESS_CLOSEr.   s     r"   
send_closezProtocol.send_closeu  s4    !##""6#8#CSIIIIIr$   N)rN   rO   rP   r,   r_   rm   rt   rx   r|   r   r   r   r   r   r   r   r   rd   r   r   r  r2   r  r   r   ri   r-  rQ   r$   r"   rS   rS   h   s         
+ + +
 
 
@ @ @
  C C C. . .  B B B	J 	J 	JN N N"N N N) ) )N N N0	 	 	C C C
  E E E&  "  &J J J8H H HC C CJ J J J Jr$   rS   )r   )B__doc__r9   protobufr   r\   r   rp   r   r   r   r   r   r   r	   r   r
   r   r   r  r   rZ   resultr   compatr   r   dbdocr   errorsr   r   r   r"  r   r   r   r   r   r   ServerMessagesrz   rv   SESS_AUTHENTICATE_OKr~   SQL_STMT_EXECUTE_OKr
  ERRORr   NOTICEr	  RESULTSET_COLUMN_META_DATARESULTSET_ROWr   RESULTSET_FETCH_DONEr  $RESULTSET_FETCH_DONE_MORE_RESULTSETSr  OKr)  CONN_CAPABILITIESCapabilitiesr;   r#   objectr&   rS   rQ   r$   r"   <module>rA     s  0 : 9  * * * * * * 9 9 9 9 9 9 1 1 1 1 1 1 7 7 7 7 7 7 = = = = = = = = = = = = 3 3 3 3 3 3 3 3 3 3 3 3 ? ? ? ? ? ? " " " " " " + + + + + + + +       F F F F F F F F F FM M M M M M M M M M M M M M M M
 5')/!#.	0GH &,/!<#565#%(/*=>/1JK?,.vy),.>.KL &I I I I!: !: !: !: !:& !: !: !:HOJ OJ OJ OJ OJv OJ OJ OJ OJ OJr$   