
    hhQ                     V    d dl mZmZmZmZmZ d dlmZ d dlm	Z	  G d de	          Z
dS )    )AnyDictListOptionalUnion)Document)
BaseLoaderc                       e Zd ZdZddddddddddedededee         dee         d	ee         d
ee         dee         dee         deee                  deeee	e
f                  fdZddZdeeeef                  fdZdee         fdZdS )OracleAutonomousDatabaseLoadera  
    Load from oracle adb

    Autonomous Database connection can be made by either connection_string
    or tns name. wallet_location and wallet_password are required
    for TLS connection.
    Each document will represent one row of the query result.
    Columns are written into the `page_content` and 'metadata' in
    constructor is written into 'metadata' of document,
    by default, the 'metadata' is None.
    N)schematns_name
config_dirwallet_locationwallet_passwordconnection_stringmetadata
parametersqueryuserpasswordr   r   r   r   r   r   r   r   c                    || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        || _
        |  |                                  dS )aZ  
        init method
        :param query: sql query to execute
        :param user: username
        :param password: user password
        :param schema: schema to run in database
        :param tns_name: tns name in tnsname.ora
        :param config_dir: directory of config files(tnsname.ora, wallet)
        :param wallet_location: location of wallet
        :param wallet_password: password of wallet
        :param connection_string: connection string to connect to adb instance
        :param metadata: metadata used in document
        :param parameters: bind variable to use in query
        N)r   r   r   r   r   r   r   r   r   r   r   _set_dsn)selfr   r   r   r   r   r   r   r   r   r   r   s               r/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/langchain_community/document_loaders/oracleadb_loader.py__init__z'OracleAutonomousDatabaseLoader.__init__   sy    < 
	   !$  /. "3 ! % 	    returnc                 Z    | j         r| j         | _        d S | j        r| j        | _        d S d S )N)r   dsnr   )r   s    r   r   z'OracleAutonomousDatabaseLoader._set_dsnO   s<    ! 	%-DHHH] 	%}DHHH	% 	%r   c                    	 dd l n"# t          $ r}t          d          |d }~ww xY w| j        | j        | j        d}| j        | j        k    r
| j        |d<   | j        r| j        r| j        |d<   | j        |d<   	  j	        di |}|
                                }| j        r|                    d| j                    | j        r!|                    | j        | j                   n|                    | j                   d |j        D             |                                }fd	|D             }n8# j        $ r+}t%          d
t'          |          z              g }Y d }~nd }~ww xY w|                                 |                                 n-# |                                 |                                 w xY w|S )Nr   zECould not import oracledb, please install with 'pip install oracledb')r   r   r   r   r   r   z!alter session set current_schema=c                     g | ]
}|d          S )r    ).0cols     r   
<listcomp>z=OracleAutonomousDatabaseLoader._run_query.<locals>.<listcomp>l   s    <<<#s1v<<<r   c                 H    g | ]}fd t          |          D             S )c                 n    i | ]1\  }}|t          |j                  s|n|                                2S r"   )
isinstanceLOBread)r#   ijoracledbs      r   
<dictcomp>zHOracleAutonomousDatabaseLoader._run_query.<locals>.<listcomp>.<dictcomp>o   sL       1 Ax|!<!<J!&&((  r   )zip)r#   rowcolumnsr-   s     r   r%   z=OracleAutonomousDatabaseLoader._run_query.<locals>.<listcomp>n   sV       
 	    #GS 1 1    r   zGot error while connecting: r"   )r-   ImportErrorr   r   r   r   r   r   r   connectcursorr   executer   r   descriptionfetchallDatabaseErrorprintstrclose)r   econnect_param
connectionr4   datar1   r-   s         @@r   
_run_queryz)OracleAutonomousDatabaseLoader._run_queryU   s3   	OOOO 	 	 	W 	 "&dhWW8t}$$*./M,' 	DD$8 	D/3/CM+,/3/CM+,	))::M::J&&((F{ RP4;PPQQQ +tz4?;;;;tz***<<);<<<G??$$D    
    DD % 	 	 	03q669:::DDDDDD	 LLNNN LLNNNsA   	 
(#(=B;D9 8F 9
E.!E)$F )E..F *Gc                    |                                  }g }| j        r| j        ng |D ]U}fd|                                D             }t          t	          |          |          }|                    |           V|S )Nc                 $    i | ]\  }}|v 	||S r"   r"   )r#   keyvaluemetadata_columnss      r   r.   z7OracleAutonomousDatabaseLoader.load.<locals>.<dictcomp>   s1       )sECCS<S<SU<S<S<Sr   )page_contentr   )r@   r   itemsr   r:   append)r   r?   	documentsr0   r   docrE   s         @r   loadz#OracleAutonomousDatabaseLoader.load~   s      	,0MA4==r 	" 	"C   -0YY[[  H C8DDDCS!!!!r   )r   N)__name__
__module____qualname____doc__r:   r   r   r   listtupledictr   r   r   r   r@   r   rK   r"   r   r   r   r      sQ       
 
$ !%"&$()-)-+/(,9=8 8 88 8 	8 8 3-8 SM8 "#8 "#8 $C=8 49%8 U4#4568 8 8 8t% % % %'Dc3h0 ' ' ' 'Rd8n      r   r   N)typingr   r   r   r   r   langchain_core.documentsr   )langchain_community.document_loaders.baser	   r   r"   r   r   <module>rV      s    3 3 3 3 3 3 3 3 3 3 3 3 3 3 - - - - - - @ @ @ @ @ @A A A A AZ A A A A Ar   