
    dh}                    ^    S SK Jr  S SKJrJrJrJrJrJr  S SK	J
r
  S SKJr   " S S\5      rg)    )annotations)AnyDictIteratorListOptionalTuple)Document)
BaseLoaderc                  |    \ rS rSrSr   S	                     S
S jjrSS jr    SS jrSS jrSr	g)SnowflakeLoader
   a?  Load from `Snowflake` API.

Each document represents one row of the result. The `page_content_columns`
are written into the `page_content` of the document. The `metadata_columns`
are written into the `metadata` of the document. By default, all columns
are written into the `page_content` and none into the `metadata`.

Nc                    Xl         X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl        U
b  U
OS/U l	        Ub  Xl
        g/ U l
        g)a  Initialize Snowflake document loader.

Args:
    query: The query to run in Snowflake.
    user: Snowflake user.
    password: Snowflake password.
    account: Snowflake account.
    warehouse: Snowflake warehouse.
    role: Snowflake role.
    database: Snowflake database
    schema: Snowflake schema
    parameters: Optional. Parameters to pass to the query.
    page_content_columns: Optional. Columns written to Document `page_content`.
    metadata_columns: Optional. Columns written to Document `metadata`.
N*)queryuserpasswordaccount	warehouseroledatabaseschema
parameterspage_content_columnsmetadata_columns)selfr   r   r   r   r   r   r   r   r   r   r   s               m/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/document_loaders/snowflake_loader.py__init__SnowflakeLoader.__init__   s]    : 
	 "	 $$8$D 3% 	! 5E4P 0VX    c                ^    SS K nUR                  R                  U R                  U R
                  U R                  U R                  U R                  U R                  U R                  U R                  S9n UR                  5       nUR                  SU R                  -   5        UR                  SU R                  -   5        UR                  U R                  U R                  5        UR                  5       nUR                    Vs/ sH  ofS   PM	     nnU Vs/ sH  n[#        [%        Xx5      5      PM     nnWR+                  5         U$ ! [         a  n[        S5      UeS nAff = fs  snf s  snf ! [&         a  n	[)        SU	 35        / n S n	A	NYS n	A	ff = f! WR+                  5         f = f)Nr   zuCould not import snowflake-connector-python package. Please install it with `pip install snowflake-connector-python`.)r   r   r   r   r   r   r   r   zUSE DATABASE zUSE SCHEMA zAn error occurred: )snowflake.connectorImportError	connectorconnectr   r   r   r   r   r   r   r   cursorexecuter   fetchalldescriptiondictzip	Exceptionprintclose)
r   	snowflakeexconncurquery_resultcolumncolumn_namesrowes
             r   _execute_querySnowflakeLoader._execute_query?   sf   	& ""**]]LLnn]];; + 	
	++-CKK$--78KK34KK

DOO4<<>L47OODO&1IOLDDPQLSD\!78LLQ
 IIK;  	S 	, EQ 	's+,L	 IIKs`   E 7BE3 E)E3 E.7E3 
E&E!!E&)
E3 3
F=FF FF F,c                    U R                   (       a  U R                   O/ nU R                  (       a  U R                  O/ nUc#  U(       a  [        US   R                  5       5      nUc  / nU=(       d    / U4$ )Nr   )r   r   listkeys)r   r3   r   r   s       r   _get_columnsSnowflakeLoader._get_columnsa   sq     *.)B)BD%% 	 594I4I400r'L#'Q(<(<(>#? #!#)r+;;;r    c              #    ^	#    U R                  5       n[        U[        5      (       a  [        SU 35        / $ U R	                  U5      u  m	nST	;   a  [        US   R                  5       5      m	U Hc  nSR                  U	4S jUR                  5        5       5      nUR                  5        VVs0 sH  u  pVXR;   d  M  XV_M     nnn[        XGS9nUv   Me     g s  snnf 7f)Nz$An error occurred during the query: r   r   
c              3  D   >#    U H  u  pUT;   d  M  U S U 3v   M     g7f)z: N ).0kvr   s      r   	<genexpr>,SnowflakeLoader.lazy_load.<locals>.<genexpr>w   s*      %(3q<P7P1#Rss     )page_contentmetadata)
r8   
isinstancer,   r-   r=   r;   r<   joinitemsr
   )
r   r3   r   r6   rH   rD   rE   rI   docr   s
            @r   	lazy_loadSnowflakeLoader.lazy_loadn   s     **,lI..8GHI151B1B<1P..&&#'Q(<(<(>#? C99 %(+		% L *-N8MHNHCI   Os   B-C0
C>CC)r   r   r   r   r   r   r   r   r   r   r   )NNN)r   strr   rP   r   rP   r   rP   r   rP   r   rP   r   rP   r   rP   r   zOptional[Dict[str, Any]]r   Optional[List[str]]r   rQ   )returnList[Dict[str, Any]])r3   rS   rR   zTuple[List[str], List[str]])rR   zIterator[Document])
__name__
__module____qualname____firstlineno____doc__r   r8   r=   rN   __static_attributes__rB   r    r   r   r   
   s    & 044804)Y)Y )Y 	)Y
 )Y )Y )Y )Y )Y -)Y 2)Y .)YV D<0<	$<r    r   N)
__future__r   typingr   r   r   r   r   r	   langchain_core.documentsr
   )langchain_community.document_loaders.baser   r   rB   r    r   <module>r^      s"    " = = - @rj rr    