Ë
    ÌiR+  ã                   óö   — d dl 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mZ d dlmZ d dlmZmZ d dlmZmZmZ d dlmZ d d	lmZmZ d d
lmZ dZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)erd dl*Z* G d„ de«      Z+y)é    )ÚAnyÚListÚOptionalÚTupleÚTypeÚTYPE_CHECKING)Ú
fire_event)Úrecord_function)ÚBaseAdapterÚBaseRelationÚ	available)Ú_make_ref_key_dict)ÚAdapterResponseÚ
Connection)ÚColTypeChangeÚSchemaCreationÚ
SchemaDrop)ÚRelationTypeNullError)ÚAdapterTestSqlRecordÚAdapterAddQueryRecord)ÚSQLConnectionManagerÚlist_relations_without_cachingÚget_columns_in_relationÚlist_schemasÚcheck_schema_existsÚcreate_schemaÚdrop_schemaÚrename_relationÚtruncate_relationÚdrop_relationÚalter_column_typeÚvalidate_sqlNc                   óf  — e Zd ZU dZee   ed<   eed<    ej                  d„ «       e	e
ddd¬«      	 	 	 d,d	ed
edee   dedeeef   f
d„«       «       Zedddedefd„«       Zedddedefd„«       Zedddedefd„«       Zedddedefd„«       Zedddedefd„«       Zedddedefd„«       Zedddedefd„«       Zedefd„«       Zd„ Zd-d„Zd„ Zd„ Zd„ Z d„ Z!d e"ddfd!„Z#d e"ddfd"„Z$d#e"de%e"   fd$„Z&ed%„ «       Z'd&ede%e   fd'„Z(d&ed(edefd)„Z)d	ede*fd*„Z+e e	e,ddd¬«      d+„ «       «       Z-y).Ú
SQLAdaptera%  The default adapter with the common agate conversions and some SQL
    methods was implemented. This adapter has a different much shorter list of
    methods to implement, but some more macros that must be implemented.

    To implement a macro, implement "${adapter_type}__${macro_name}". in the
    adapter's internal project.

    Methods to implement:
        - date_function

    Macros to implement:
        - get_catalog
        - list_relations_without_caching
        - get_columns_in_relation
        - get_catalog_for_single_relation
    ÚConnectionManagerÚconnectionsc                   ó   — y)N)NN© )ÚaÚks     úV/var/www/html/strategist-ai/venv/lib/python3.12/site-packages/dbt/adapters/sql/impl.pyú<lambda>zSQLAdapter.<lambda>3   s   � ó    TÚ	thread_id)ÚmethodÚindex_on_thread_idÚid_field_nameNÚsqlÚ
auto_beginÚbindingsÚabridge_sql_logÚreturnc                 ó>   — | j                   j                  ||||«      S )a¡  Add a query to the current transaction. A thin wrapper around
        ConnectionManager.add_query.

        :param sql: The SQL query to add
        :param auto_begin: If set and there is no transaction in progress,
            begin a new one.
        :param bindings: An optional list of bindings for the query.
        :param abridge_sql_log: If set, limit the raw sql logged to 512
            characters
        )r&   Ú	add_query)Úselfr2   r3   r4   r5   s        r+   r8   zSQLAdapter.add_query3   s!   € ð* ×Ñ×)Ñ)¨#¨z¸8À_ÓUÐUr-   Úagate_tablezagate.TableÚcol_idxc                  ó   — y)NÚtextr(   ©Úclsr:   r;   s      r+   Úconvert_text_typezSQLAdapter.convert_text_typeJ   ó   € àr-   c                 óX   — dd l }|j                   |j                  |«      «      }|rdS dS )Nr   Úfloat8Úinteger)ÚagateÚ	aggregateÚMaxPrecision)r?   r:   r;   rE   Údecimalss        r+   Úconvert_number_typezSQLAdapter.convert_number_typeN   s2   € ãð ×(Ñ(Ð);¨×);Ñ);¸GÓ)DÓEˆÙ#ˆxÐ2¨Ð2r-   c                  ó   — y)NrD   r(   r>   s      r+   Úconvert_integer_typezSQLAdapter.convert_integer_typeV   ó   € àr-   c                  ó   — y)NÚbooleanr(   r>   s      r+   Úconvert_boolean_typezSQLAdapter.convert_boolean_typeZ   rL   r-   c                  ó   — y)Nztimestamp without time zoner(   r>   s      r+   Úconvert_datetime_typez SQLAdapter.convert_datetime_type^   s   € à,r-   c                  ó   — y)NÚdater(   r>   s      r+   Úconvert_date_typezSQLAdapter.convert_date_typeb   rA   r-   c                  ó   — y)NÚtimer(   r>   s      r+   Úconvert_time_typezSQLAdapter.convert_time_typef   rA   r-   c                  ó   — y)NTr(   )r?   s    r+   Úis_cancelablezSQLAdapter.is_cancelablej   s   € àr-   c           
      ó  — | j                  |«      D �ci c]  }|j                  |“Œ }}| j                  |«      D �ci c]  }|j                  |“Œ }}|j                  «       D ]“  \  }}|j                  |«      }|€Œ|j	                  |«      sŒ,|j                  «       }	| j                  j                  |	«      }
t        t        |j                  |
t        |«      ¬«      «       | j                  |||
«       Œ• y c c}w c c}w )N)Ú	orig_typeÚnew_typeÚtable)r   ÚnameÚitemsÚgetÚcan_expand_toÚstring_sizeÚColumnÚstring_typer	   r   Ú	data_typer   r!   )r9   ÚgoalÚcurrentÚcÚreference_columnsÚtarget_columnsÚcolumn_nameÚreference_columnÚtarget_columnÚcol_string_sizer\   s              r+   Úexpand_column_typeszSQLAdapter.expand_column_typesn   sö   € Ø04×0LÑ0LÈTÓ0RÖS¨1˜QŸV™V Q™YÐSÐÐSà-1×-IÑ-IÈ'Ó-RÖS¨˜!Ÿ&™& !™)ÐSˆÐSà->×-DÑ-DÓ-Fò 	GÑ)ˆKÐ)Ø*×.Ñ.¨{Ó;ˆMàÑ(¨]×-HÑ-HÐIYÕ-ZØ"2×">Ñ">Ó"@�ØŸ;™;×2Ñ2°?ÓC�ÜÜ!Ø"/×"9Ñ"9Ø!)Ü0°Ó9ôôð ×&Ñ& w°¸XÕFñ	Gùò	 TùâSs
   ”C:½C?c                 ó>   — |||dœ}| j                  t        |¬«       y)zË
        1. Create a new column (w/ temp name and correct type)
        2. Copy data over to it
        3. Drop the existing column (cascade!)
        4. Rename the new column to existing column
        )Úrelationrk   Únew_column_type©ÚkwargsN)Úexecute_macroÚALTER_COLUMN_TYPE_MACRO_NAME)r9   rq   rk   rr   rt   s        r+   r!   zSQLAdapter.alter_column_typeƒ   s*   € ð !Ø&Ø.ñ
ˆð
 	×ÑÔ7ÀÐÕGr-   c                 ó†   — |j                   €t        |«      ‚| j                  |«       | j                  t        d|i¬«       y ©Nrq   rs   )Útyper   Úcache_droppedru   ÚDROP_RELATION_MACRO_NAME©r9   rq   s     r+   r    zSQLAdapter.drop_relation‘   s>   € Ø�=‰=Ð Ü'¨Ó1Ð1à×Ñ˜8Ô$Ø×ÑÔ3¸ZÈÐ<RÐÕSr-   c                 ó6   — | j                  t        d|i¬«       y rx   )ru   ÚTRUNCATE_RELATION_MACRO_NAMEr|   s     r+   r   zSQLAdapter.truncate_relation˜   s   € Ø×ÑÔ7ÀÈXÐ@VÐÕWr-   c                 ó`   — | j                  ||«       ||dœ}| j                  t        |¬«       y )N)Úfrom_relationÚto_relationrs   )Úcache_renamedru   ÚRENAME_RELATION_MACRO_NAME)r9   r€   r�   rt   s       r+   r   zSQLAdapter.rename_relation›   s0   € Ø×Ñ˜=¨+Ô6à#0ÀÑMˆØ×ÑÔ5¸fÐÕEr-   c                 ó4   — | j                  t        d|i¬«      S rx   )ru   Ú"GET_COLUMNS_IN_RELATION_MACRO_NAMEr|   s     r+   r   z"SQLAdapter.get_columns_in_relation¡   s$   € Ø×!Ñ!Ü.¸
ÀHÐ7Mð "ó 
ð 	
r-   rq   c                 ó¶   — |j                  «       }t        t        t        |«      ¬«      «       d|i}| j	                  t
        |¬«       | j                  «        y ©N)rq   rq   rs   )Úwithout_identifierr	   r   r   ru   ÚCREATE_SCHEMA_MACRO_NAMEÚcommit_if_has_connection©r9   rq   rt   s      r+   r   zSQLAdapter.create_schema¦   sQ   € Ø×.Ñ.Ó0ˆÜ”>Ô+=¸hÓ+GÔHÔIà˜ð
ˆð 	×ÑÔ3¸FÐÔCØ×%Ñ%Õ'r-   c                 ó  — |j                  «       }t        t        t        |«      ¬«      «       d|i}| j	                  t
        |¬«       | j                  «        | j                  j                  |j                  |j                  «       y r‡   )rˆ   r	   r   r   ru   ÚDROP_SCHEMA_MACRO_NAMErŠ   Úcacher   ÚdatabaseÚschemar‹   s      r+   r   zSQLAdapter.drop_schema±   so   € Ø×.Ñ.Ó0ˆÜ”:Ô'9¸(Ó'CÔDÔEà˜ð
ˆð 	×ÑÔ1¸&ÐÔAØ×%Ñ%Ô'à�
‰
×Ñ˜x×0Ñ0°(·/±/ÕBr-   Úschema_relationc           
      óD  — d|i}| j                  t        |¬«      }g }ddddœ}|D ]R  \  }}}}		 | j                  j                  |	«      }	|j                  | j                  j                  |||||	¬«      «       ŒT |S # t        $ r | j                  j
                  }	Y ŒTw xY w)Nr‘   rs   T)r�   r�   Ú
identifier)r�   r�   r“   Úquote_policyry   )ru   ÚLIST_RELATIONS_MACRO_NAMEÚRelationÚget_relation_typeÚ
ValueErrorÚExternalÚappendÚcreate)
r9   r‘   rt   ÚresultsÚ	relationsr”   Ú	_databaser^   Ú_schemaÚ_types
             r+   r   z)SQLAdapter.list_relations_without_caching¼   sÄ   € ð $ _Ð5ˆØ×$Ñ$Ô%>ÀvÐ$ÓNˆàˆ	Ø$(°DÈÑMˆØ/6ò 	Ñ+ˆI�t˜W eð/ØŸ™×7Ñ7¸Ó>�ð ×ÑØ—‘×$Ñ$Ø&Ø"Ø#Ø!-Øð %ó õð	ð Ðøô ò /ØŸ™×.Ñ.’ð/ús   ¯A=Á=BÂBc                 ó$   — dj                  |«      S )Nz"{}")Úformat)r9   r“   s     r+   ÚquotezSQLAdapter.quoteÕ   s   € à�}‰}˜ZÓ(Ð(r-   r�   c                 ód   — | j                  t        d|i¬«      }|D �cg c]  }|d   ‘Œ	 c}S c c}w )Nr�   rs   r   )ru   ÚLIST_SCHEMAS_MACRO_NAME)r9   r�   rœ   Úrows       r+   r   zSQLAdapter.list_schemasÙ   s6   € Ø×$Ñ$Ô%<ÀjÐRZÐE[Ð$Ó\ˆà")Ö*˜3��A“Ò*Ð*ùÒ*s   ž-r�   c                 óÒ   — | j                   j                  ||d| j                  j                  ¬«      j	                  «       }||dœ}| j                  t        |¬«      }|d   d   dkD  S )NÚINFORMATION_SCHEMA)r�   r�   r“   r”   )Úinformation_schemar�   rs   r   )r–   r›   ÚconfigÚquotingr©   ru   ÚCHECK_SCHEMA_EXISTS_MACRO_NAME)r9   r�   r�   r©   rt   rœ   s         r+   r   zSQLAdapter.check_schema_existsÞ   st   € Ø!Ÿ]™]×1Ñ1ØØØ+ØŸ™×,Ñ,ð	 2ó 
÷
 Ñ
Ó
ð 	ð );ÀfÑMˆØ×$Ñ$Ô%CÈFÐ$ÓSˆØ�q‰z˜!‰}˜qÑ Ð r-   c                 óœ   — d|i}| j                  t        |¬«      }|j                  }t        |t        «      sJ dt        |«      › d�«       ‚|S )aj  Submit the given SQL to the engine for validation, but not execution.

        By default we simply prefix the query with the explain keyword and allow the
        exceptions thrown by the underlying engine on invalid SQL inputs to bubble up
        to the exception handler. For adjustments to the explain statement - such as
        for adapters that have different mechanisms for hinting at query validation
        or dry-run - callers may be able to override the validate_sql_query macro with
        the addition of an <adapter>__validate_sql implementation.

        :param sql str: The sql to validate
        r2   rs   z@Expected AdapterResponse from validate_sql macro execution, got ú.)ru   ÚVALIDATE_SQL_MACRO_NAMEÚresponseÚ
isinstancer   ry   )r9   r2   rt   ÚresultÚadapter_responses        r+   r"   zSQLAdapter.validate_sqlê   sl   € ð �3ð
ˆð ×#Ñ#Ô$;ÀFÐ#ÓKˆð "Ÿ?™?ÐÜÐ*¬OÔ<ð 	
ðÜÐ(Ó)Ð*¨!ð-ó	
Ð<ð  Ðr-   c                 ó  — |j                   j                  «       }	 |j                  |«       t        |j                   d«      r|j                   j	                  «        |dk(  r|j                  «       d|_        S |dk(  r|j                  «       d|_        S 	 d|_        y # t        $ rY}|j                   r1t        |j                   dd«      s|j                   j                  «        t        |«       t        |«       ‚ d }~ww xY w# d|_        w xY w)NÚcommitÚoneFÚallÚclosedT)ÚhandleÚcursorÚexecuteÚhasattrrµ   ÚfetchoneÚtransaction_openÚfetchallÚBaseExceptionÚgetattrÚrollbackÚprint)r9   r2   ÚfetchÚconnrº   Úes         r+   Úrun_sql_for_testszSQLAdapter.run_sql_for_tests  sà   € ð
 —‘×#Ñ#Ó%ˆð	*Ø�N‰N˜3ÔÜ�t—{‘{ HÔ-Ø—‘×"Ñ"Ô$Ø˜Š~Ø—‘Ó(ð %*ˆDÕ!ð ˜%’Ø—‘Ó(ð %*ˆDÕ!ð ð %*ˆDÕ!øô ò 	Ø�{Š{¤7¨4¯;©;¸À$Ô#GØ—‘×$Ñ$Ô&Ü�#ŒJÜ�!ŒHØûð	ûð %*ˆDÕ!ús+   œAB Á9B Â	D Â'AC;Ã;D Ä D Ä	D)TNF)r6   N).Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__annotations__r   Úparser
   r   ÚstrÚboolr   r   r   r   r8   ÚclassmethodÚintr@   rI   rK   rO   rQ   rT   rW   rY   ro   r!   r    r   r   r   r   r   r   r   r   r£   r   r   r   r"   r   rÇ   r(   r-   r+   r$   r$      sÅ  … ñð" Ð0Ñ1Ó1Ø%Ó%à€Y‡_�_Ñ1Ó2ÙØ d¸tÐS^ôð  Ø"&Ø %ñVàðVð ðVð ˜3‘-ð	Vð
 ðVð 
ˆz˜3ˆÑ	òVóó 3ðVð& ð¨Mð ÀCð ÈCò ó ðð ð3¨mð 3Àcð 3Ècò 3ó ð3ð ð¨}ð Àsð Èsò ó ðð ð¨}ð Àsð Èsò ó ðð ð-°ð -Èð -ÐPSò -ó ð-ð ð¨Mð ÀCð ÈCò ó ðð ð¨Mð ÀCð ÈCò ó ðð ð˜dò ó ðòGó*HòTòXòFò
ð
( lð (°tó (ð	C Lð 	C°Tó 	Cðà%ðð 
ˆlÑ	óð2 ñ)ó ð)ð+ Sð +¨T°#©Yó +ð

!¨Cð 
!¸ð 
!Àó 
!ð  ð  ¨ó  ð: ÙØ T¸dÐR]ôñ*óó ñ*r-   r$   ),Útypingr   r   r   r   r   r   Údbt_common.events.functionsr	   Údbt_common.recordr
   Údbt.adapters.baser   r   r   Údbt.adapters.cacher   Ú!dbt.adapters.contracts.connectionr   r   Údbt.adapters.events.typesr   r   r   Údbt.adapters.exceptionsr   Údbt.adapters.record.baser   r   Údbt.adapters.sql.connectionsr   r•   r…   r¥   r¬   r‰   r�   rƒ   r~   r{   rv   r¯   rE   r$   r(   r-   r+   ú<module>rÜ      s‚   ðß B× Bå 2Ý -ç BÑ BÝ 1ß Iß OÑ OÝ 9ß PÝ =à<Ð Ø%>Ð "Ø(Ð Ø!6Ð Ø*Ð Ø&Ð Ø.Ð Ø2Ð Ø*Ð Ø2Ð Ø(Ð áÛô@*�õ @*r-   