
    IiXp                        S SK r S SKrS SKrS SKJr  S SKJr  S SKJr  S SK	J	r	  S SK
Jr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ r   SSK!J"r"J#r#J$r$  SSK%J&r&  SSK'J(r(J)r)  SSK*J+r+  SSK,J-r-J.r.  SSK/J0r0J1r1  SSK2J3r3  SSK4J5r5  SSK6J7r7J8r8  SSK9J:r:  \ Rv                  " \<5      r= " S S\>5      r? " S S \>5      r@ " S! S"\>5      rAg)#    N)deque)contextmanager)platform)time)urlparse   )defines)errors)RowOrientedBlock)BlockStreamProfileInfo)BufferedSocketReader)BufferedSocketWriter)
ClientInfo)get_compressor_cls)Context)	log_block)Progress)CompressionClientPacketTypesServerPacketTypes)QueryProcessingStage)read_binary_strread_binary_uint64)read_exception)write_settingsSettingsFlags)BlockInputStreamBlockOutputStream)	threading)escape_params)write_varintread_varint)write_binary_strc                   (   ^  \ rS rSrU 4S jrSrU =r$ )Packet#   c                 ~   > S U l         S U l        S U l        S U l        S U l        S U l        [        [        U ]#  5         g N)	typeblock	exceptionprogressprofile_infomultistring_messagesuperr%   __init__)self	__class__s    B/venv/lib/python3.13/site-packages/clickhouse_driver/connection.pyr0   Packet.__init__$   s<    	
 #' fd$&    )r*   r+   r.   r-   r,   r)   )__name__
__module____qualname____firstlineno__r0   __static_attributes____classcell__r2   s   @r3   r%   r%   #   s    ' 'r5   r%   c                   :   ^  \ rS rSrU 4S jrS rS rS rSrU =r	$ )
ServerInfo/   c	                    > Xl         X l        X0l        X@l        XPl        X`l        S U l        Xpl        Xl        [        [        U ]/  5         g r(   )nameversion_majorversion_minorversion_patchrevisiontimezonesession_timezonedisplay_nameused_revisionr/   r>   r0   )
r1   rA   rB   rC   rD   rE   rF   rH   rI   r2   s
            r3   r0   ServerInfo.__init__0   sE    	***   $(*j$(*r5   c                 @    U R                   =(       d    U R                  $ r(   )rG   rF   r1   s    r3   get_timezoneServerInfo.get_timezone>   s    $$55r5   c                 H    U R                   U R                  U R                  4$ r(   )rB   rC   rD   rL   s    r3   version_tupleServerInfo.version_tupleA   s!    !!4#5#5t7I7IIIr5   c                    U R                   < SU R                  < SU R                  < 3nSU R                  4SU4SU R                  4SU R
                  4SU R                  4SU R                  4/nSR                  S	 U 5       5      nS
U-  $ )N.rA   versionrE   zused revisionrF   rH   z, c              3   H   #    U  H  u  pS R                  X5      v   M     g7f)z{}={}N)format).0keyvalues      r3   	<genexpr>&ServerInfo.__repr__.<locals>.<genexpr>Q   s     N*#7>>#55s    "z<ServerInfo(%s)>)	rB   rC   rD   rA   rE   rI   rF   rH   join)r1   rT   itemsparamss       r3   __repr__ServerInfo.__repr__D   s     2 2D4F4F
 TYY 'd001'T../
 NNN!V,,r5   )	rH   rA   rE   rG   rF   rI   rB   rC   rD   )
r6   r7   r8   r9   r0   rM   rP   r_   r:   r;   r<   s   @r3   r>   r>   /   s    +6J- -r5   r>   c                     ^  \ rS rSrSrS\R                  \R                  \R                  \R                  \R                  \R                  \R                  \R                  SSSSSSSSSSSSS4U 4S jjrS rS rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S&S jr!S r"S r#S r$S r%S'S jr&S(S jr'S  r(S)S! jr)\*S" 5       r+S# r,S$ r-S%r.U =r/$ )*
ConnectionU   a{  
Represents connection between client and ClickHouse server.

:param host: host with running ClickHouse server.
:param port: port ClickHouse server is bound to.
             Defaults to ``9000`` if connection is not secured and
             to ``9440`` if connection is secured.
:param database: database connect to. Defaults to ``'default'``.
:param user: database user. Defaults to ``'default'``.
:param password: user's password. Defaults to ``''`` (no password).
:param client_name: this name will appear in server logs.
                    Defaults to ``'python-driver'``.
:param connect_timeout: timeout for establishing connection.
                        Defaults to ``10`` seconds.
:param send_receive_timeout: timeout for sending and receiving data.
                             Defaults to ``300`` seconds.
:param sync_request_timeout: timeout for server ping.
                             Defaults to ``5`` seconds.
:param compress_block_size: size of compressed block to send.
                            Defaults to ``1048576``.
:param compression: specifies whether or not use compression.
                    Defaults to ``False``. Possible choices:

                        * ``True`` is equivalent to ``'lz4'``.
                        * ``'lz4'``.
                        * ``'lz4hc'`` high-compression variant of
                          ``'lz4'``.
                        * ``'zstd'``.

:param secure: establish secure connection. Defaults to ``False``.
:param verify: specifies whether a certificate is required and whether it
               will be validated after connection.
               Defaults to ``True``.
:param ssl_version: see :func:`ssl.wrap_socket` docs.
:param ca_certs: see :func:`ssl.wrap_socket` docs.
:param ciphers: see :func:`ssl.wrap_socket` docs.
:param keyfile: see :func:`ssl.wrap_socket` docs.
:param certfile: see :func:`ssl.wrap_socket` docs.
:param server_hostname: Hostname to use in SSL Wrapper construction.
                        Defaults to `None` which will send the passed
                        host param during SSL initialization. This param
                        may be used when connecting over an SSH tunnel
                        to correctly identify the desired server via SNI.
:param alt_hosts: list of alternative hosts for connection.
                  Example: alt_hosts=host1:port1,host2:port2.
:param settings_is_important: ``False`` means unknown settings will be
                              ignored, ``True`` means that the query will
                              fail with UNKNOWN_SETTING error.
                              Defaults to ``False``.
:param tcp_keepalive: enables `TCP keepalive <https://tldp.org/HOWTO/
                      TCP-Keepalive-HOWTO/overview.html>`_ on established
                      connection. If is set to ``True``` system keepalive
                      settings are used. You can also specify custom
                      keepalive setting with tuple:
                      ``(idle_time_sec, interval_sec, probes)``.
                      Defaults to ``False``.
:param client_revision: can be used for client version downgrading.
                      Defaults to ``None``.
NFTc                   > U(       a  [         R                  nO[         R                  n[        X=(       d    U4/5      U l        U(       a`  UR                  S5       HK  n[        SU-   5      nU R                  R                  UR                  UR                  =(       d    U45        MM     X0l
        X@l        XPl        [         R                  S-   U-   U l        Xpl        Xl        Xl        UU l        UU l        [)        U=(       d    [         R*                  [         R*                  5      U l        Xl        Xl        0 nUb  UUS'   Ub  UUS'   Ub  UUS'   Ub  UUS'   Ub  UUS'   UU l        UU l        US	L a  S
nUSL a$  [6        R8                  U l        S U l        S U l        O+[6        R@                  U l        [C        U5      U l        Xl        S U l"        S U l#        S U l$        SU l%        S U l&        S U l'        [Q        5       U l)        S U l*        S U l+        S U l,        [Z        R\                  " 5       U l/        SU l0        [b        [d        U ]  5         g )N,zclickhouse:// ssl_versionca_certscipherskeyfilecertfileTlz4F)4r	   DEFAULT_SECURE_PORTDEFAULT_PORTr   hostssplitr   appendhostnameportdatabaseuserpassword	DBMS_NAMEclient_nameconnect_timeoutsend_receive_timeoutsync_request_timeoutsettings_is_importanttcp_keepaliveminCLIENT_REVISIONclient_revisionsecure_socketverify_certssl_optionsserver_hostnamer   DISABLEDcompressioncompressor_clscompress_block_sizeENABLEDr   socketfinfout	connectedclient_trace_contextserver_infor   contextblock_in	block_outblock_in_rawr   Lock_lockis_query_executingr/   rb   r0   )r1   hostrs   rt   ru   rv   rx   ry   rz   r{   r   r   secureverifyrg   rh   ri   rj   rk   r   	alt_hostsr|   r}   r   default_porturlr   r2   s                              r3   r0   Connection.__init__   s%   ( "66L"//LT#7<89:
!,56

!!3<<1I\"JK - !	 ",,s2[@.$8!$8!%:"*"6w668O8O 
 $!")4K&&.K
#%,K	"%,K	"&.K
#&. $K%*33D"&D'+D$*22D"4["AD':$	$(!y  ^^%
"'j$(*r5   c           	          U R                   (       aP  U R                  (       a  SOS< SU R                  < SU R                  < SU R                  < SU R
                  < 3	OSnSU< S	U R                  < S
3$ )Nclickhouses
clickhousez://z:***@:/z(not connected)z<Connection(dsn=z, compression=z)>)r   r   ru   r   rs   rt   r   )r1   dsns     r3   r_   Connection.__repr__   sX     ^^ "//M\AIItyy$))T]]
 "3 	
 :=d>N>NOOr5   c                 N    SR                  U R                  U R                  5      $ )Nz{}:{})rV   r   rs   rL   s    r3   get_descriptionConnection.get_description   s    ~~dii33r5   c                     U R                  5         U R                  (       d  U R                  5         g U R                  5       (       d&  [        R                  S5        U R                  5         g g )Nz$Connection was closed, reconnecting.)check_query_executionr   connectpingloggerwarningrL   s    r3   force_connectConnection.force_connect   sD    ""$~~LLNNNABLLN r5   c                    0 nU R                   (       aP  U R                  (       a  [        R                  nO[        R                  nU R
                  R                  5       nXCS'   Sn[        R                  " XS[        R                  5       H  nUu  pxpnSn [        R                  " XxU	5      nUR                  U R                  5        U R                   (       a3  U R                  U5      nUR                  XR                  =(       d    US9nUR                  U5        Us  $    Ub  Ue[        R                   " S5      e! [        R                    a&  nUnUb  UR#                  5          SnAM   SnAM  SnAff = f)zX
Acts like socket.create_connection, but wraps socket with SSL
if connection is secure.
	cert_reqsNr   )r   z!getaddrinfo returns an empty list)r   r   sslCERT_REQUIRED	CERT_NONEr   copyr   getaddrinfoSOCK_STREAM
settimeoutry   _create_ssl_contextwrap_socketr   r   errorclose)r1   r   rs   r   r   errresafsocktypeproto	canonnamesasockssl_context_s                  r3   _create_socketConnection._create_socket  sE   
 --	MM	**//1K'0$%%d!V5G5GHC14.B%BD!}}R59 4 45%%"&":":;"GK&22.B.B.Jd 3 LD R  I( ?I,,BCC << !#JJLL $!s   BE  E:E55E:c                    [         R                  R                  nUR                  S[         R                  5      n[         R
                  " U5      nU R                  Ul        SU;   a  UR                  US   5        O4UR                  S5      [         R                  :w  a  UR                  U5        SU;   a  UR                  US   5        SU;   a
  US   Ul        SU;   a$  UR                  S5      nUR                  US   US9  U$ )Nrg   rh   r   ri   rk   rj   )rj   )r   PurposeSERVER_AUTHgetPROTOCOL_TLS_CLIENT
SSLContextr   check_hostnameload_verify_locationsr   load_default_certsset_ciphersverify_modeload_cert_chain)r1   r   purposerT   r   rj   s         r3   r   Connection._create_ssl_context1  s    ++))//-1H1HI..)!%!1!1$))+j*AB__[)S]]:&&w/#I 67+%"-k":G$!ooi0G##K
$;W#Mr5   c                 N   U R                  X5      U l        SU l        XsU l        U l        U R                  R                  U R                  5        U R                  R                  [        R                  [        R                  S5        U R                  (       a  U R                  5         [        U R                  [        R                  5      U l        [!        U R                  [        R                  5      U l        U R%                  5         U R'                  5         U R(                  R*                  nU[        R,                  :  a  U R/                  5         U R1                  5       U l        [5        U R                  U R6                  5      U l        U R;                  5       U l        g )NTr   )r   r   r   r   rs   r   rz   
setsockoptIPPROTO_TCPTCP_NODELAYr}   _set_keepaliver   r	   BUFFER_SIZEr   r   r   
send_helloreceive_hellor   rI   'DBMS_MIN_PROTOCOL_VERSION_WITH_ADDENDUMsend_addendumget_block_in_streamr   r   r   r   get_block_out_streamr   )r1   r   rs   rE   s       r3   _init_connectionConnection._init_connectionH  s"   ))$5#	49t889 	v1163E3EqI!'W5H5HI(g6I6IJ	##11wFFF 002,TXXt||D224r5   c                    U R                   R                  [         R                  [         R                  S5        [	        U R
                  [        5      (       d  g U R
                  u  pn[        S:X  d
  [        S:X  a  U R                   R                  [         R                  [         R                  U5        U R                   R                  [         R                  [         R                  U5        U R                   R                  [         R                  [         R                  U5        g [        S:X  a-  SnU R                   R                  [         R                  XB5        g g )Nr   linuxwin32darwin   )r   r   
SOL_SOCKETSO_KEEPALIVE
isinstancer}   tupler   r   TCP_KEEPIDLETCP_KEEPINTVLTCP_KEEPCNT)r1   idle_time_secinterval_secprobesTCP_KEEPALIVEs        r3   r   Connection._set_keepalivea  s    v00&2E2EqI$,,e44.2.@.@+Vw(g"5 KK""""F$7$7 KK""""F$8$8, KK""""F$6$6 ! MKK""""M "r5   c                 n    UR                   (       a  UR                   S-   OSnUSR                  X#5      -   $ )Nrf    z({}:{}))strerrorrV   )r1   er   rs   r   s        r3   _format_connection_error#Connection._format_connection_error}  s.    $%JJqzzCBY%%d111r5   c           	      P   U R                   (       a  U R                  5         [        R                  SU R                  U R
                  5        S n[        [        U R                  5      5       H<  nU R                  S   u  p4[        R                  SX45         U R                  X45      s  $    Ub  Ueg ! [        R                   aW  nU R                  5         [        R                  SX4SS9  U R                  XSU5      n[        R                  " U5      n S nAOqS nAf[        R                    aW  nU R                  5         [        R                  SX4SS9  U R                  XSU5      n[        R"                  " U5      n S nAOS nAff = fU R                  R%                  S5        GM;  )Nz"Connecting. Database: %s. User: %sr   zConnecting to %s:%szFailed to connect to %s:%sT)exc_info)r   
disconnectr   debugrt   ru   rangelenro   r   r   timeoutr   r   r
   SocketTimeoutErrorr   NetworkErrorrotate)r1   r   ir   rs   r   err_strs          r3   r   Connection.connect  sT   >>OO0$--	
 s4::'AAJDLL.;3,,T88 (2 ?I % >> 9!0$t   77F//8<< 3!0$t   77F))'23 JJb!s&   B33FADF0AFFc                     S U l         S U l        S U l        S U l        S U l        SU l        S U l        S U l        S U l        S U l	        S U l
        SU l        g )NF)r   rs   r   r   r   r   r   r   r   r   r   r   rL   s    r3   reset_stateConnection.reset_state  sZ    			$(! "'r5   c                    U R                   (       aE   U R                  R                  [        R                  5        U R                  R                  5         O+U R                  (       a  U R                  R                  5         U R                  5         g! [        R                   a   n[
        R                  SU5         SnANSnAff = f)zS
Closes connection between server and client.
Frees resources: e.g. closes socket.
zError on socket shutdown: %sN)	r   r   shutdown	SHUT_RDWRr   r   r   r   r  )r1   r   s     r3   r   Connection.disconnect  s     >>B$$V%5%56
 KK [[KK << B=qAABs   )B C'CCc                 P   [        [        R                  U R                  5        [	        U R
                  U R                  5        [        [        R                  U R                  5        [        [        R                  U R                  5        [        U R                  U R                  5        [	        U R                  U R                  5        [	        U R                  U R                  5        [	        U R                  U R                  5        U R                  R                  5         g r(   )r!   r   HELLOr   r#   rx   r	   CLIENT_VERSION_MAJORCLIENT_VERSION_MINORr   rt   ru   rv   flushrL   s    r3   r   Connection.send_hello  s    &,,dii8))4995W11499=W11499= 	T))4995		2DII.		2		r5   c           
         [        U R                  5      nU[        R                  :X  Ga  [	        U R                  5      n[        U R                  5      n[        U R                  5      n[        U R                  5      n[        U R                  U5      nS nU[        R                  :  a  [	        U R                  5      nSnU[        R                  :  a  [	        U R                  5      nUn	U[        R                  :  a  [        U R                  5      n	U[        R                  :  aQ  [        U R                  5      n
[        U
5       H-  n[	        U R                  5        [	        U R                  5        M/     U[        R                  :  a  [        U R                  5        [        X#UXXxU5      U l        U R                   U R"                  l        [$        R'                  SX#UX5        g U[        R(                  :X  a  U R+                  5       eU R-                  SU5      nU R/                  5         [0        R2                  " U5      e)Nr   z5Connected to %s server version %s.%s.%s, revision: %szHello or Exception)r"   r   r   r  r   r~   r   r	   &DBMS_MIN_REVISION_WITH_SERVER_TIMEZONE*DBMS_MIN_REVISION_WITH_SERVER_DISPLAY_NAME$DBMS_MIN_REVISION_WITH_VERSION_PATCH8DBMS_MIN_PROTOCOL_VERSION_WITH_PASSWORD_COMPLEXITY_RULESr  ,DBMS_MIN_REVISION_WITH_INTERSERVER_SECRET_V2r   r>   r   r   r   r   	EXCEPTIONreceive_exceptionunexpected_packet_messager   r
   UnexpectedPacketFromServerError)r1   packet_typeserver_nameserver_version_majorserver_version_minorserver_revisionrI   server_timezoneserver_display_nameserver_version_patch
rules_size_imessages                r3   r   Connection.receive_hello  s   !$((++111)$((3K#.txx#8 #.txx#8 )$((3O 4 4oFM"OBBC"1$((";"$FFG&5dhh&?##2 @@A'2488'<$LLM(2

+B#DHH-#DHH- , @@A"488,)3G$m D
 (,'7'7DLL$LLG3G$ -777((** 445I5@BGOO88AAr5   c                     U R                   R                  nU[        R                  :  a.  [	        U R
                  R                  S   U R                  5        g g )N	quota_key)r   rI   r	   (DBMS_MIN_PROTOCOL_VERSION_WITH_QUOTA_KEYr#   r   client_settingsr   )r1   rE   s     r3   r   Connection.send_addendum  sG    ##11wGGG,,[9499 Hr5   c                    U R                   nU R                  U5          [        [        R                  U R
                  5        U R
                  R                  5         [        U R                  5      nU[        R                  :X  a;  U R                  5         [        U R                  5      nU[        R                  :X  a  M;  U[        R                  :w  a(  U R                  SU5      n[        R                  " U5      e S S S 5        g! [        R                    a    e ["        R$                  [&        4 a7  n[(        R+                  SU R-                  5       U5         S nAS S S 5        gS nAff = f! , (       d  f       g= f)NPongzError on %s ping: %sFT)r{   timeout_setterr!   r   PINGr   r  r"   r   r   PROGRESSreceive_progressPONGr  r
   r   Errorr   r   EOFErrorr   r   r   )r1   r  r!  msgr   s        r3   r   Connection.ping   s1   ++  ).33TYY?		!)$((3!%6%?%??))+"-dhh"7K "%6%?%?? "3"8"8888MC @@EE 9 *2  << LL(+  *D,@,@,BA / *)"# *)2 s5   E0B D<D.E-6%E(E0(E--E00
E>c                    [        5       n[        U R                  5      =Ul        nU[        R
                  :X  a  U R                  SS9Ul        U$ U[        R                  :X  a  U R                  5       Ul
        U$ U[        R                  :X  a  U R                  5       Ul        U$ U[        R                  :X  a  U R                  5       Ul        U$ U[        R"                  :X  a  U R                  5       Ul        U$ U[        R$                  :X  a  U R                  5       Ul        U$ U[        R&                  :X  a+  U R                  SS9Ul        [)        UR                  5        U$ U[        R*                  :X  a
  SU l         U$ U[        R.                  :X  a  U R1                  U5      Ul        U$ U[        R4                  :X  a  U R                  5       Ul        U$ U[        R6                  :X  a  U R                  5       Ul        U$ U[        R8                  :X  a  U R                  SS9Ul        U$ U[        R:                  :X  aD  [=        U R                  5      nU(       a&  [>        RA                  SU5        X0RB                  l"        U$ SRG                  X RI                  5       5      nU RK                  5         [L        RN                  " U5      e)NT)may_be_use_numpyF)may_be_compressedzServer timezone changed to %sz Unknown packet {} from server {})(r%   r"   r   r)   r   DATAreceive_datar*   r  r  r+   r6  r7  r,   PROFILE_INFOreceive_profile_infor-   TOTALSEXTREMESLOGr   END_OF_STREAMr   TABLE_COLUMNSreceive_multistring_messager.   
PART_UUIDSREAD_TASK_REQUESTPROFILE_EVENTSTIMEZONE_UPDATEr   r   infor   rG   rV   r   r   r
   UnknownPacketFromServerError)r1   packetr!  rF   r+  s        r3   receive_packetConnection.receive_packet>  s   $/$99k+000,,d,CFLh e -777#557Fb _ -666"335FO\ Y -:::"&";";"=FV S -444,,.FLP M -666,,.FLJ G -111,,u,EFLfll#B ? -;;;&+D#: 7 -;;;)-)I)I*F&4 - -888,,.FL* ' -???,,.FL$ ! -<<<,,u,EFL  -===&txx0H;XF4<  1  9??113G OO55g>>r5   c                     U R                   (       a#  SSKJn  U" U R                  U R                  5      $ [        U R                  U R                  5      $ )Nr   )CompressedBlockInputStream)r   streams.compressedrT  r   r   r   )r1   rT  s     r3   r   Connection.get_block_in_streamz  s8    F-dhhEE#DHHdll;;r5   c                     U R                   (       a9  SSKJn  U" U R                  U R                  U R
                  U R                  5      $ [        U R
                  U R                  5      $ )Nr   )CompressedBlockOutputStream)r   rU  rX  r   r   r   r   r   )r1   rX  s     r3   r   Connection.get_block_out_stream  sP    G.##T%=%=		4<< 
 %TYY==r5   c                     U R                   R                  nU[        R                  :  a  [	        U R
                  5        U(       a  U R                  OU R                  nU(       d  SOS nUR                  US9$ )NF)	use_numpy)	r   rI   r	   'DBMS_MIN_REVISION_WITH_TEMPORARY_TABLESr   r   r   r   read)r1   r?  r>  rE   readerr[  s         r3   rA  Connection.receive_data  sZ    ##11wFFFDHH%"39J9J!1Et	{{Y{//r5   c                 ,    [        U R                  5      $ r(   )r   r   rL   s    r3   r  Connection.receive_exception  s    dhh''r5   c                 f    [        5       nUR                  U R                  U R                  5        U$ r(   )r   r]  r   r   )r1   r,   s     r3   r7  Connection.receive_progress  s&    :d&&1r5   c                 P    [        5       nUR                  U R                  5        U$ r(   )r   r]  r   )r1   r-   s     r3   rC  Connection.receive_profile_info  s"    -/$((#r5   c                     [         R                  " U5      n[        U5       Vs/ s H  n[        U R                  5      PM     sn$ s  snf r(   )r   strings_in_messager  r   r   )r1   r!  numr*  s       r3   rI  &Connection.receive_multistring_message  s7    22;?49#J?Jb)J???s   Ac                 X   [        5       n[        [        R                  U R                  5        U R
                  R                  nU[        R                  :  a  [        X R                  5        U R                  R                  U5        [        R                  SU[        5       U-
  5        g )NzBlock "%s" send time: %f)r   r!   r   r@  r   r   rI   r	   r\  r#   r   writer   r   )r1   r*   
table_namestartrE   s        r3   	send_dataConnection.send_data  sr    &++TYY7##11wFFFZ3U#/TVe^Lr5   c                    U R                   (       d  U R                  5         [        [        R                  U R
                  5        [        U=(       d    SU R
                  5        U R                  R                  nU[        R                  :  ac  [        U R                  U R                  U R                  S9n[        R                  R                   Ul        UR%                  X@R
                  5        U[        R&                  :  nSnU R(                  (       a  U[*        R,                  -  n[/        U R                  R0                  U R
                  UU5        U[        R2                  :  a  [        SU R
                  5        [        [4        R6                  U R
                  5        [        U R8                  U R
                  5        [        XR
                  5        U[        R:                  :  ad  U R                  R<                  S   (       a  [?        U=(       d    0 U R                  SS9nO0 n[/        XR
                  S[*        R@                  5        [B        RE                  SU5        U R
                  RG                  5         g )Nr   )r   r   server_side_paramsT)
for_serverz	Query: %s)$r   r   r!   r   QUERYr   r#   r   rI   r	   "DBMS_MIN_REVISION_WITH_CLIENT_INFOr   rx   r   r   	QueryKindINITIAL_QUERY
query_kindrk  5DBMS_MIN_REVISION_WITH_SETTINGS_SERIALIZED_AS_STRINGSr|   r   	IMPORTANTr   settings)DBMS_MIN_REVISION_WITH_INTERSERVER_SECRETr   COMPLETEr   )DBMS_MIN_PROTOCOL_VERSION_WITH_PARAMETERSr0  r    CUSTOMr   r   r  )	r1   queryquery_idr^   rE   client_infosettings_as_stringssettings_flagsescapeds	            r3   
send_queryConnection.send_query  s   ~~LLN&,,dii8R3##11wAAA$T%5%5t||595I5IKK%/%9%9%G%GK"h		2 BBC 	 %%m555Nt||,,dii9L%	' wHHHR+)22DII>T%%tyy1		*wHHH||++,@A'Lb$,,4 7IIt]5I5IJ[%(		r5   c                     [        [        R                  U R                  5        U R                  R	                  5         g r(   )r!   r   CANCELr   r  rL   s    r3   send_cancelConnection.send_cancel  s%    &--tyy9		r5   c                    U=(       d    /  H  nUS   (       d  [        SR                  US   5      5      eUS   n[        nU R                  R                  S   (       a=  SSKJn  US    Vs/ s H  owS   PM	     nnU V	s/ s H  oU	   R                  PM     nn	UnU" US   UUS	9n
U R                  XS   S
9  M     U R                  [        5       5        g s  snf s  sn	f )N	structurezEmpty table "{}" structurerA   datar[  r   )NumpyColumnOrientedBlockr   )types_check)rl  )	
ValueErrorrV   r   r   r0  numpy.blockr  valuesrn  )r1   tablesr  tabler  	block_clsr  xcolumnscolumnr*   s              r3   send_external_tablesConnection.send_external_tables  s    \r\E% 077fF  =D(I||++K8A).{);<);AQ4);<:AB'V++'B4	eK0$*57ENN56]N;' ", 	')* =Bs   ,C Cc              #      #    U R                   R                  5       nU R                   R                  U5        S v   U R                   R                  U5        g 7fr(   )r   
gettimeoutr   )r1   new_timeoutold_timeouts      r3   r4  Connection.timeout_setter  s>     kk,,.{+{+s   AAc                 n    [         R                  " U5      nSR                  U R                  5       X5      $ )Nz6Unexpected packet from server {} (expected {}, got {}))r   to_strrV   r   )r1   expectedr!  s      r3   r  $Connection.unexpected_packet_message
  s2    '..{; EVD((*HB	
r5   c                     U R                   R                  SS9  U R                  (       a  [        R                  " 5       eSU l        U R                   R                  5         g )NF)blockingT)r   acquirer   r
   PartiallyConsumedQueryErrorreleaserL   s    r3   r    Connection.check_query_execution  sG    

E*""4466"&

r5   ) r   r   r   r   rx   r   r   r   r   r   ry   r   r   rt   r   r   r   ro   r   rv   rs   r   rz   r   r   r|   r   r   r{   r}   ru   r   )TF)r   )NN)F)0r6   r7   r8   r9   __doc__r	   DEFAULT_DATABASEDEFAULT_USERDEFAULT_PASSWORDCLIENT_NAME DBMS_DEFAULT_CONNECT_TIMEOUT_SECDBMS_DEFAULT_TIMEOUT_SEC%DBMS_DEFAULT_SYNC_REQUEST_TIMEOUT_SECDEFAULT_COMPRESS_BLOCK_SIZEr0   r_   r   r   r   r   r   r   r   r   r  r   r   r   r   r   rQ  r   r   rA  r  r7  rC  rI  rn  r  r  r  r   r4  r  r   r:   r;   r<   s   @r3   rb   rb   U   s3   :z "--%%0H0H++#DD!(!A!A!(!N!N ' C CTD$4 "' %_+BP4'DR.5282#J($.9Bv<:x<	>0(

@	M.`
+2 , ,
 r5   rb   )Bloggingr   r   collectionsr   
contextlibr   sysr   r   urllib.parser   r   r	   r
   r*   r   blockstreamprofileinfor   bufferedreaderr   bufferedwriterr   
clientinfor   r   r   r   r   logr   r,   r   protocolr   r   r   queryprocessingstager   r^  r   r   readhelpersr   settings.writerr   r   streams.nativer   r   util.compatr   util.escaper    varintr!   r"   writerr#   	getLoggerr6   r   objectr%   r>   rb    r5   r3   <module>r     s      
  %   !   # : 0 0 " +    G G 6 7 ' : ? " & - $			8	$	'V 	'#- #-LD Dr5   