Ë
    Ìi!  ã                   óÒ   — d dl Z d dlZd dlmZmZmZmZmZmZm	Z	m
Z
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 d dlmZmZmZ d d	lmZmZmZmZm Z  e
rd dl!Z! G d
„ de«      Z"y)é    N)	ÚAnyÚDictÚIterableÚIteratorÚListÚOptionalÚTupleÚTYPE_CHECKINGÚType)Úget_node_info)Ú
fire_event)ÚDbtInternalErrorÚNotImplementedError)Úcast_to_str)ÚBaseConnectionManager)ÚAdapterResponseÚ
ConnectionÚConnectionState)ÚConnectionUsedÚ	SQLCommitÚSQLQueryÚSQLQueryStatusÚAdapterEventDebugc                   ó¢  — e Zd ZdZej
                  defd„«       Zdee	   fd„Z
ddd e«       d	fd
e	dedee   dedeee   df   dedeeef   fd„Zeej
                  dedefd„«       «       Zedee	   dee   deee	ef      fd„«       Zededee   ddfd„«       Z	 	 	 d!d
e	dededee   deedf   f
d„Zd„ Zd„ Zd
e	deeef   fd„Zd„ Z d „ Z!y)"ÚSQLConnectionManagerz»The default connection manager with some common SQL methods implemented.

    Methods to implement:
        - exception_handler
        - cancel
        - get_response
        - open
    Ú
connectionc                 ó   — t        d«      ‚)zCancel the given connection.z-`cancel` is not implemented for this adapter!©r   ©Úselfr   s     ú]/var/www/html/strategist-ai/venv/lib/python3.12/site-packages/dbt/adapters/sql/connections.pyÚcancelzSQLConnectionManager.cancel0   s   € ô "Ð"QÓRÐRó    Úreturnc                 ó|  — g }| j                  «       }| j                  5  | j                  j                  «       D ]i  }||u rŒ|j                  �.|j
                  t        j                  k(  r| j                  |«       |j                  €ŒO|j                  |j                  «       Œk 	 d d d «       |S # 1 sw Y   |S xY w)N)Úget_if_existsÚlockÚthread_connectionsÚvaluesÚhandleÚstater   ÚOPENr"   ÚnameÚappend)r    ÚnamesÚthis_connectionr   s       r!   Úcancel_openz SQLConnectionManager.cancel_open5   sª   € ØˆØ×,Ñ,Ó.ˆØ�Y‰Yñ 
	2Ø"×5Ñ5×<Ñ<Ó>ò 	2�
Ø Ñ0Øð ×$Ñ$Ð0°Z×5EÑ5EÌ×I]ÑI]Ò5]Ø—K‘K 
Ô+Ø—?‘?Ñ.Ø—L‘L §¡Õ1ñ	2÷
	2ð ˆ÷
	2ð ˆús   ŸA)B1Â	B1Â1B;TNFé   ÚsqlÚ
auto_beginÚbindingsÚabridge_sql_logÚretryable_exceptions.Úretry_limitc                 ót  ‡— dt         dt        dt        t            dt        t        t
           df   dt        dt        fˆfd„Š| j                  «       }|r|j                  d	u r| j                  «        t        t        | j                  t        |j                  «      t        «       ¬
«      «       | j!                  |«      5  |rdj#                  |dd «      }n|}t        t%        t        |j                  «      |t        «       ¬«      «       t'        j(                  «       }	|j*                  j-                  «       }
 ‰|
||||d¬«       | j/                  |
«      }t        t1        t        |«      t'        j(                  «       |	z
  t        «       |j2                  ¬«      «       ||
fcddd«       S # 1 sw Y   yxY w)zÊ
        Retry function encapsulated here to avoid commitment to some
        user-facing interface. Right now, Redshift commits to a 1 second
        retry timeout so this serves as a default.
        Úcursorr3   r5   r7   .r8   Úattemptc                 óþ   •— 	 | j                  ||«       y# |$ ra}||k\  r|‚t        t        dt        |«      › d||z
  › d|› �¬«      «       t	        j
                  d«        ‰| |||||dz   ¬«      cY d}~S d}~ww xY w)z”
            A success sees the try exit cleanly and avoid any recursive
            retries. Failure begins a sleep and retry routine.
            zGot a retryable error z. z, retries left. Retrying in 1 second.
Error:
)Úbase_msgr2   ©r:   r3   r5   r7   r8   r;   N)Úexecuter   r   ÚtypeÚtimeÚsleep)r:   r3   r5   r7   r8   r;   ÚeÚ_execute_query_with_retrys          €r!   rD   zASQLConnectionManager.add_query.<locals>._execute_query_with_retryT   s›   ø€ ðØ—‘˜s HÕ-øØ'ò à˜kÒ)Ø�GäÜ%Ø#9¼$¸q»'¸À"À[ÐSZÑEZÐD[ð \:Ø:;¸ð">ôôô —
‘
˜1”á0Ø!ØØ%Ø)=Ø +Ø# a™Kôõ ûðús   ƒ –A<›AA7Á1A<Á7A<F)Ú	conn_typeÚ	conn_nameÚ	node_infoz{}...Ni   )rF   r3   rG   r2   r>   )ÚstatusÚelapsedrG   Úquery_id)r   Ústrr   r	   r   Ú	ExceptionÚintÚget_thread_connectionÚtransaction_openÚbeginr   r   ÚTYPEr   r-   r   Úexception_handlerÚformatr   rA   Úperf_counterr*   r:   Úget_responser   rJ   )r    r3   r4   r5   r6   r7   r8   r   Úlog_sqlÚprer:   ÚresultrD   s               @r!   Ú	add_queryzSQLConnectionManager.add_queryE   s˜  ø€ ð"	Üð"	äð"	ô œs‘mð"	ô #(¬¬Y©¸Ð(<Ñ"=ð	"	ô
 ð"	ô õ"	ðH ×/Ñ/Ó1ˆ
Ù˜*×5Ñ5¸Ñ>Ø�J‰JŒLÜÜØŸ)™)Ü% j§o¡oÓ6Ü'›/ôô	
ð ×#Ñ# CÓ(ñ %	&ÙØ!Ÿ.™.¨¨T¨c¨Ó3‘à�äÜÜ)¨*¯/©/Ó:ØÜ+›oôôô ×#Ñ#Ó%ˆCà×&Ñ&×-Ñ-Ó/ˆFÙ%ØØØ!Ø%9Ø'Øõð ×&Ñ& vÓ.ˆFäÜÜ˜v›;Ü ×-Ñ-Ó/°#Ñ5Ü+›oØ#Ÿ_™_ô	ôð ˜vÐ%÷K%	&÷ %	&ò %	&ús   Ã C$F.Æ.F7r:   c                 ó   — t        d«      ‚)zGet the status of the cursor.z3`get_response` is not implemented for this adapter!r   )Úclsr:   s     r!   rU   z!SQLConnectionManager.get_responseª   s   € ô "Ð"WÓXÐXr#   Úcolumn_namesÚrowsc              #   óæ   K  — t        «       }t        t        |«      «      D ].  }||   }||v r||xx   dz  cc<   |› d||   › �||<   Œ'd|||   <   Œ0 |D ]  }t        t        ||«      «      –— Œ y ­w)Nr2   Ú_)ÚdictÚrangeÚlenÚzip)r[   r\   r]   Úunique_col_namesÚidxÚcol_nameÚrows          r!   Úprocess_resultsz$SQLConnectionManager.process_results°   s›   è ø€ ô  ›6ÐÜœ˜\Ó*Ó+ò 	8ˆCØ# CÑ(ˆHØÐ+Ñ+Ø  Ó*¨aÑ/Ó*Ø'/ j°Ð2BÀ8Ñ2LÐ1MÐ$N�˜SÒ!à67Ð  ¨cÑ!2Ò3ð	8ð ò 	/ˆCÜ”s˜<¨Ó-Ó.Ó.ñ	/ùs   ‚A/A1Úlimitzagate.Tablec                 óî   — ddl m} g }g }|j                  �R|j                  D �cg c]  }|d   ‘Œ	 }}|r|j                  |«      }n|j	                  «       }| j                  ||«      } |||«      S c c}w )Nr   )Útable_from_data_flat)Údbt_common.clients.agate_helperrk   ÚdescriptionÚ	fetchmanyÚfetchallrh   )r[   r:   ri   rk   Údatar\   Úcolr]   s           r!   Úget_result_from_cursorz+SQLConnectionManager.get_result_from_cursorÀ   s|   € åHà ˆØ"$ˆà×ÑÐ)Ø.4×.@Ñ.@ÖA s˜C ›FÐAˆLÐAÙØ×'Ñ'¨Ó.‘à—‘Ó(�Ø×&Ñ& |°TÓ:ˆDá# D¨,Ó7Ð7ùò Bs   ¥A2Úfetchc                 óÂ   — ddl m} | j                  |«      }| j                  ||«      \  }}| j	                  |«      }|r| j                  ||«      }	||	fS  |«       }	||	fS )Nr   )Úempty_table)rl   ru   Ú_add_query_commentrY   rU   rr   )
r    r3   r4   rs   ri   ru   r_   r:   ÚresponseÚtables
             r!   r?   zSQLConnectionManager.executeÑ   sp   € õ 	@à×%Ñ% cÓ*ˆØ—N‘N 3¨
Ó3‰	ˆˆ6Ø×$Ñ$ VÓ,ˆÙØ×/Ñ/°¸Ó>ˆEð ˜ˆÐñ  “MˆEØ˜ˆÐr#   c                 ó(   — | j                  dd¬«      S )NÚBEGINF©r4   ©rY   ©r    s    r!   Úadd_begin_queryz$SQLConnectionManager.add_begin_queryã   s   € Ø�~‰~˜g°%ˆ~Ó8Ð8r#   c                 ó(   — | j                  dd¬«      S )NÚCOMMITFr{   r|   r}   s    r!   Úadd_commit_queryz%SQLConnectionManager.add_commit_queryæ   s   € Ø�~‰~˜h°5ˆ~Ó9Ð9r#   c                 óJ   — | j                  |«      }| j                  |d¬«      S )NFr{   )rv   rY   )r    r3   s     r!   Úadd_select_queryz%SQLConnectionManager.add_select_queryé   s%   € Ø×%Ñ% cÓ*ˆØ�~‰~˜c¨eˆ~Ó4Ð4r#   c                 ó¸   — | j                  «       }|j                  du r$t        dj                  |j                  «      «      ‚| j                  «        d|_        |S )NTzQTried to begin a new transaction on connection "{}", but it already had one open!)rN   rO   r   rS   r-   r~   r   s     r!   rP   zSQLConnectionManager.beginí   sZ   € Ø×/Ñ/Ó1ˆ
Ø×&Ñ&¨$Ñ.Ü"ð+ß+1©6°*·/±/Ó+Bóð ð
 	×ÑÔà&*ˆ
Ô#ØÐr#   c                 ó  — | j                  «       }|j                  du r$t        dj                  |j                  «      «      ‚t        t        |j                  t        «       ¬«      «       | j                  «        d|_        |S )NFzNTried to commit transaction on connection "{}", but it does not have one open!)rF   rG   )	rN   rO   r   rS   r-   r   r   r   r�   r   s     r!   ÚcommitzSQLConnectionManager.commitú   so   € Ø×/Ñ/Ó1ˆ
Ø×&Ñ&¨%Ñ/Ü"ð-ß-3©V°J·O±OÓ-Dóð ô
 	”9 z§¡Ä-Ã/ÔRÔSØ×ÑÔà&+ˆ
Ô#àÐr#   )FFN)"Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚabcÚabstractmethodr   r"   r   rK   r1   ÚtupleÚboolr   r   r	   r   rL   rM   rY   Úclassmethodr   rU   r   r   r   rh   rr   r?   r~   r�   rƒ   rP   r†   © r#   r!   r   r   &   sÛ  „ ñð 	×ÑðS ò Só ðSð˜T #™Yó ð&  Ø"&Ø %Ù<A»GØñc&àðc&ð ðc&ð ˜3‘-ð	c&ð
 ðc&ð $ D¨¡O°SÐ$8Ñ9ðc&ð ðc&ð 
ˆz˜3ˆÑ	óc&ðJ Ø×ÑðY #ð Y¨/ò Yó ó ðYð ð/Ø# C™=ð/Ø08¸±ð/à	�$�s˜C�x‘.Ñ	!ò/ó ð/ð ð8¨Cð 8¸À¹ð 8È-ò 8ó ð8ð& !ØØ#ñàðð ðð ð	ð
 ˜‰}ðð 
ˆ Ð-Ñ	.óò$9ò:ð5 Cð 5¨E°*¸c°/Ñ,Bó 5òór#   r   )#r‹   rA   Útypingr   r   r   r   r   r   r	   r
   r   Údbt_common.events.contextvarsr   Údbt_common.events.functionsr   Údbt_common.exceptionsr   r   Údbt_common.utilsr   Údbt.adapters.baser   Ú!dbt.adapters.contracts.connectionr   r   r   Údbt.adapters.events.typesr   r   r   r   r   Úagater   r�   r#   r!   ú<module>rš      sV   ðÛ 
Û ÷
÷ 
õ 
õ 8Ý 2ß GÝ (å 3÷ñ ÷
õ ñ ÛôaÐ0õ ar#   