U
    h2
                     @   sH   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 de	Z
dS )    )AnyDictIteratorListOptional)Document)
BaseLoaderc                	   @   sX   e Zd ZdZd	eeeee  eee  eeeef  ddddZ	e
e dddZdS )

TiDBLoaderzLoad documents from TiDB.N)connection_stringquerypage_content_columnsmetadata_columnsengine_argsreturnc                 C   s.   || _ || _|| _|dk	r|ng | _|| _dS )aT  Initialize TiDB document loader.

        Args:
            connection_string (str): The connection string for the TiDB database,
                format: "mysql+pymysql://root@127.0.0.1:4000/test".
            query: The query to run in TiDB.
            page_content_columns: Optional. Columns written to Document `page_content`,
                default(None) to all columns.
            metadata_columns: Optional. Columns written to Document `metadata`,
                default(None) to no columns.
            engine_args: Optional. Additional arguments to pass to sqlalchemy engine.
        N)r
   r   r   r   r   )selfr
   r   r   r   r    r   M/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/document_loaders/tidb.py__init__   s
    zTiDBLoader.__init__)r   c           
   	   #   s   ddl m} ddlm} ddlm} |jfjp4i }| }|	|j
}t|  |D ]X} fddt|D dfdd	 D }fd
djD }	t||	dV  qbW 5 Q R X dS )z*Lazy load TiDB data into document objects.r   )create_engine)Engine)textc                    s   i | ]\}} | |qS r   r   ).0indexvalue)column_namesr   r   
<dictcomp>9   s     z(TiDBLoader.lazy_load.<locals>.<dictcomp>
c                 3   s4   | ],\}} j d ks| j kr| d| V  qd S )Nz: )r   )r   kv)r   r   r   	<genexpr><   s   

z'TiDBLoader.lazy_load.<locals>.<genexpr>c                    s   i | ]}| | qS r   r   )r   col)row_datar   r   r   B   s      )page_contentmetadataN)Z
sqlalchemyr   Zsqlalchemy.enginer   Zsqlalchemy.sqlr   r
   r   connectexecuter   listkeys	enumeratejoinitemsr   r   )
r   r   r   r   Zengineconnresultrowr"   r#   r   )r   r!   r   r   	lazy_load%   s(    

zTiDBLoader.lazy_load)NNN)__name__
__module____qualname____doc__strr   r   r   r   r   r   r   r.   r   r   r   r   r	      s      

r	   N)typingr   r   r   r   r   Zlangchain_core.documentsr   Z)langchain_community.document_loaders.baser   r	   r   r   r   r   <module>   s   