
    N.h>                        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jN                  jP                  ejR                  fejN                  jT                  ejV                  fejN                  jX                  ejZ                  fejN                  j\                  ej^                  fejN                  j`                  e
jb                  fejN                  jd                  ej,                  fejN                  jf                  ejh                  fejN                  jj                  ejl                  fejN                  jn                  ejp                  fejN                  jr                  ejt                  fejN                  jv                  ejx                  fgZ=ddZ> G d de?      Z@ G d de?      ZAy)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_scalarc                 H    t        | t              r| S | j                  |      S N)
isinstancebytesencode)valueencodings     c/var/www/html/School_Mangement_New/src/backend/venv/lib/python3.12/site-packages/mysqlx/protocol.pyencode_to_bytesr"   @   s    ue,5H%,,x2HH    c                   *    e Zd Zd Zd Zd Zd Zd Zy)MessageReaderWriterc                      || _         d | _        y r   )_stream_msg)selfsocket_streams     r!   __init__zMessageReaderWriter.__init__E   s    $	r#   c                 @    | j                   t        d      || _         y )NzMessage push slot is full)r(   r   r)   msgs     r!   push_messagez MessageReaderWriter.push_messageI   s    99 "#>??	r#   c                 d    | j                   | j                   }d | _         |S | j                         S r   )r(   _read_message)r)   ms     r!   read_messagez MessageReaderWriter.read_messageN   s0    99 		ADIH!!##r#   c                 >   | j                   j                  d      }t        j                  d|      \  }}| j                   j                  |dz
        }t        D ])  }|d   |k(  s |d          }|j                  |       |c S  t        dj                  |            )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!   r1   z!MessageReaderWriter._read_messageU   s    ll""MM%5,,##GaK0) 	I|x'"iln##G,
		 077ABBr#   c                     |j                         }t        j                  dt        |      dz   |      }| j                  j                  dj                  ||g             y )Nr6   r   r#   )SerializeToStringr8   packlenr'   sendalljoin)r)   msg_idr.   msg_strheaders        r!   write_messagez!MessageReaderWriter.write_messageb   sK    '')UCL1$4f=SXXvw&789r#   N)__name__
__module____qualname__r+   r/   r3   r1   rL    r#   r!   r%   r%   D   s    
$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y)Protocolc                 .    || _         || _        d | _        y r   )_reader_writer_message)r)   reader_writers     r!   r+   zProtocol.__init__i   s    $$r#   c                     t        j                         }| j                  j                  t        j
                  j                  |       | j                  j                         S r   )	MySQLxConnectionCapabilitiesGetrU   rL   MySQLxClientMessagesCON_CAPABILITIES_GETrT   r3   r-   s     r!   get_capabiliteszProtocol.get_capabilitesn   sF    ..0""!!66	=||((**r#   c                 ~   t        j                         }|j                         D ]S  \  }}| j                  |      }t        j                  ||      }|j
                  j
                  j                  |g       U | j                  j                  t        j                  j                  |       | j                         S )N)namer   )rY   CapabilitiesSetitems_create_any
CapabilitycapabilitiesextendrU   rL   r[   r\   CON_CAPABILITIES_SETread_ok)r)   kwargsr.   keyr   
capabilitys         r!   set_capabilitieszProtocol.set_capabilitiest   s    ..0 ,,. 	?JC$$U+E)44#UKJ))00*>	?
 	""!!66	= ||~r#   c                     t        j                  |      }| j                  j                  t        j
                  j                  |       y )N)	mech_name)MySQLxSessionAuthenticateStartrU   rL   r[   r\   SESS_AUTHENTICATE_START)r)   methodr.   s      r!   send_auth_startzProtocol.send_auth_start   s6    --?""!!993	@r#   c                     | j                   j                         }t        |t        j                        st        d      |j                  S )Nz>Unexpected message encountered during authentication handshake)rT   r3   r   ro   AuthenticateContinuer   	auth_datar-   s     r!   read_auth_continuezProtocol.read_auth_continue   s@    ll'')#}AAB  "< = =}}r#   c                     t        j                  t        |            }| j                  j	                  t
        j                  j                  |       y )N)rv   )ro   ru   r"   rU   rL   r[   r\   SESS_AUTHENTICATE_CONTINUE)r)   datar.   s      r!   send_auth_continuezProtocol.send_auth_continue   s>    00%d+-""!!<<c	Cr#   c                     	 | j                   j                         }t        |t        j                        ry t        |t
        j                        rt        |j                        er   )	rT   r3   r   ro   AuthenticateOkr[   Errorr   r.   r-   s     r!   read_auth_okzProtocol.read_auth_ok   sL    ,,++-C#};;<#v||,$SWW-- r#   c                    t        |j                        }|d gz  }|j                  D ]a  }|d   }||j                  vrt        dj	                  |            |j                  |   }| j                  |d   |j                         ||<   c |S )Nr`   z-Unable to find placeholder for parameter: {0}r   )rF   _binding_map	_bindingsr   r=   arg_object_to_scalar
_doc_based)r)   	statementcountscalarsbindingr`   poss          r!   get_binding_scalarszProtocol.get_binding_scalars   s    I**+4&. ** 	OG6?D9111& (88>tF F((.C44WW5E9B9M9M5MOGCL	O r#   c                 ~   |j                   r%|j                  j                  |j                         |j                  r*|j
                  j                  | j                  |             |j                  r6|j                  |j                  _        |j                  |j                  _        |j                  r%|j                  j                  |j                          |j"                  r%|j$                  j                  |j&                         |j(                  r&|j*                  j                  |j,                         y y r   )
_has_wherecriteriaCopyFrom_where_expr_has_bindingsargsrf   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&;&;<""LL 8 8 CD&/&@&@GMM##,#:#:GMM MM  !5!56""##I$7$78  %%..y/@/@A !r#   c                    t        j                  |j                  rt         j                  nt         j                  t        j
                  |j                  j                  |j                  j                              }|j                  r%|j                  j                  |j                         | j                  ||       | j                  j                  t         j"                  j$                  |       y Nr`   schema
data_model
collection)
MySQLxCrudFindr   DOCUMENTTABLE
Collectiontargetr`   r   _has_projection
projectionrf   _projection_exprr   rU   rL   r[   r\   	CRUD_FIND)r)   stmtfinds      r!   	send_findzProtocol.send_find   s    ?? #++0:0@0@!,,$++2B2B48KK4D4DFG
 OO""4#8#894&""6#8#8#B#BDIr#   c                    t        j                  |j                  rt         j                  nt         j                  t        j
                  |j                  j                  |j                  j                              }| j                  ||       |j                  D ]  }t        j                  |j                  |j                        }|j                  @|j                  j                  | j!                  |j                  |j                                |j"                  j%                  |g        | j&                  j)                  t*        j,                  j.                  |       y )Nr   r   )	operationsource)r   Updater   r   r   r   r   r`   r   r   _update_opsUpdateOperationupdate_typer   r   r   arg_object_to_exprr   rf   rU   rL   r[   r\   CRUD_UPDATE)r)   r   update	update_opopexprs        r!   send_updatezProtocol.send_update   s   ""$// #++5?5E5E!,,)2B2B2G2G4=4D4D4I4IKL
 	69-".. 	.I//#//	8H8HJF*%%++!Y-A-A)ACD ##VH-	. 	""6#8#8#D#DfMr#   c                    t        j                  |j                  rt         j                  nt         j                  t        j
                  |j                  j                  |j                  j                              }| j                  ||       | j                  j                  t        j                  j                  |       y r   )r   Deleter   r   r   r   r   r`   r   r   rU   rL   r[   r\   CRUD_DELETE)r)   r   deletes      r!   send_deletezProtocol.send_delete   s    ""?? #++0:0@0@!,,$++2B2B48KK4D4DFG
 	64(""6#8#8#D#DfMr#   c                    t        j                  |t        |      d      }|D ]/  }| j                  |      }|j                  j                  |g       1 | j                  j                  t        j                  j                  |       y )NF)	namespacer   compact_metadata)	MySQLxSQLStmtExecuter"   rc   r   rf   rU   rL   r[   r\   SQL_STMT_EXECUTE)r)   r   r   r   argr   s         r!   send_execute_statementzProtocol.send_execute_statement   sy    $$y*9$*?6;=  	&C$$S)EIIeW%	& 	""6#8#8#I#I#'	)r#   c                    t        j                  |j                  rt         j                  nt         j                  t        j
                  |j                  j                  |j                  j                              }t        |d      rP|j                  D ]A  }|j                  j                  t        ||j                         j                         g       C |j                  D ]  }t         j                  j!                         }t#        |t$              rA|D ];  }| j'                  ||j                         }|j(                  j                  |g       = n9| j'                  ||j                         }|j(                  j                  |g       |j*                  j                  |g        | j,                  j/                  t0        j2                  j4                  |       y )Nr   r   _fields)r   Insertr   r   r   r   r   r`   r   hasattrr   r   rf   r   parse_table_insert_field_valuesTypedRowr   listr   fieldrowrU   rL   r[   r\   CRUD_INSERT)r)   r   insertr   r   r   valobjs           r!   send_insertzProtocol.send_insert   s   ""$// #++5?5E5E!,,)2B2B2G2G4=4D4D4I4IKL
 9i("** 2!!((u)*>*>&>?--/*1 22 && 
	%E##,,.C%&  ,C11!5!557CII$$cU+,
 --e9M9M5MN		  #'JJse$
	% 	""6#8#8#D#DfMr#   c                    t        |t              rWt        j                  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 y )N)r      )typev_stringr   )r   scalar)r   r   MySQLxDatatypesScalarStringr"   Anyboolr   r   r   )r)   r   r   r   s       r!   rc   zProtocol._create_any   s    c<(!((//oc6J/KC$++SAF"&&Af==T""&&A6G6LMMY'"&&A6Fs6KLLr#   c                 @    | j                  |      }|t        d      y )NzExpected to close the result)r1   r   r)   rsr.   s      r!   close_resultzProtocol.close_result	  s(      $?"#ABB r#   c                     | j                  |      }|y t        |t        j                        r|S | j                  j                  |       y r   )r1   r   MySQLxResultsetRowrT   r/   r   s      r!   read_rowzProtocol.read_row  sD      $;c?../J!!#&r#   c                    |j                   dk(  rtt        j                         }|j                  |j                         |j
                  j                  t        |j                  |j                  |j                               y |j                   dk(  r0t        j                         }|j                  |j                         y |j                   dk(  rt        j                         }|j                  |j                         |j                  t        j                  j                  k(  r|j                  j                  |_        y |j                  t        j                  j"                  k(  r|j                  j                  |_        y y y )Nr         )r   MySQLxNoticeWarningr;   rA   	_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  s    88q=%--/J&&s{{3LL
(8(8*//(2!8 9XX]%<<>J&&s{{3XX]';;=L((5!! 44BBC$0$6$6$E$E!## 44HHI#/#5#5#D#D I r#   c                    	 | j                   j                         }t        |t        j                        rt        |j                        t        |t        j                        r| j                  ||       nbt        |t        j                        ry t        |t        j                        rd|_        n%t        |t        j                        rd|_        n	 |S )NT)rT   r3   r   r[   r~   r   r.   r   Framer  r   StmtExecuteOkr   	FetchDone_closedFetchDoneMoreResultsets_has_more_resultsr   s      r!   r1   zProtocol._read_message*  s    ,,++-C#v||,&sww//C!3!34##C,C!8!89C!:!:;!
C!H!HI'+$
 r#   c                 0   g }	 | j                  |      }|	 |S t        |t        j                        r| j                  j                  |       	 |S t        |t        j                        st        d      t        |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                   |j"                  |j$                  |j&                        }|j)                  |       )NzUnexpected msg type)r1   r   r   r   rT   r/   r   r   r   catalogr   tableoriginal_tabler`   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23))#.  c?#A#AB$%:;; 3;;

CII!$!3!3SXX!$!2!2CJJ!$!6!6		!$!1!1	3C
 NN3 r#   c                 t   |7t        j                  t         j                  j                  t                     S t	        |t
              r8t        j                  t         j                  j                  t        |            S t	        |t              r8t        j                  t         j                  j                  t        |            S t	        |t              r8t        j                  t         j                  j                  t        |            S t	        |t              re	 t        ||      j                         }|j                         r8t        j                  t         j                  j                  t        |            S |S t	        |t               rAt        j                  t         j                  j                  t        t#        |                  S t%        dj'                  t)        |                  #  t        j                  t         j                  j                  t        |            cY S xY w)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"??
(?(?+<U+CE Ey)??
(?(?+;E+BD D'??
(?(?+>u+EG G|,K'/?@EEG
,,.%??
0G0G3Fu3MO O!! u%??
(?(?+>s5z+JL L4;;DKHIIK!JOO,C,C/B5/IK Ks   #A!G; G; ;:H7c                 :    | j                  ||      j                  S r   )r   r  )r)   r   r$  s      r!   r   zProtocol.arg_object_to_scalarj  s    &&u.>?GGGr#   c                     | j                   j                         }t        |t        j                        rt        |j                        t        |t        j                        st        d      y )NzUnexpected message encountered)rT   r3   r   r[   r~   r   r.   Okr-   s     r!   rh   zProtocol.read_okm  sP    ll'')c6<<( ))#vyy) !ABB *r#   c                     t        j                         }| j                  j                  t        j
                  j                  |       y r   )ro   CloserU   rL   r[   r\   
SESS_CLOSEr-   s     r!   
send_closezProtocol.send_closeu  s0    !!#""6#8#8#C#CSIr#   N)rM   rN   rO   r+   r^   rl   rs   rw   r{   r   r   r   r   r   r   r   r   rc   r   r   r  r1   r  r   r   rh   r,  rP   r#   r!   rR   rR   h   s    
+
@
C.B	JN"N)N0	C
E&"&J8HCJr#   rR   )zutf-8)B__doc__r8   protobufr   r[   r   ro   r   r   r   r   r   r   r	   r   r
   r   r   r  r   rY   resultr   compatr   r   dbdocr   errorsr   r   r   r!  r   r   r   r   r   r   ServerMessagesry   ru   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%   rR   rP   r#   r!   <module>r@     s  0 :  * 9 1 7 = = 3 3 ? " +  F FM M
 55'')//!!#..	0G0GH  &,,/!!<#5#5655##%((/*=*=>//1J1JK??,,.vyy),,.>.K.KL &I!:& !:HOJv OJr#   