o
    TZh                     @   s   d dl Z d dlmZ d dlmZmZmZmZmZm	Z	 d dl
Zd dlZd dlZd dlZd dlmZ d dlmZ er@d dlZd dlZejjeZeG dd dejZG dd	 d	ejZdS )
    N)	dataclass)TYPE_CHECKINGDictListOptionalTupleUnionrequire_storage_cast)
table_castc                       s
  e Zd ZU dZdZeedf ed< dZeedddf ed< dZ	e
eeee f  ed	< d
Zeed< dZe
eeeef  ed< dZe
eeef  ed< dZe
ee  ed< dZe
e ed< dZe
ej ed< dd Z	ddede
ej def fddZedd Z  ZS )	SqlConfigzBuilderConfig for SQL.Nzsqlalchemy.sql.Selectablesqlzsqlalchemy.engine.Connectionzsqlalchemy.engine.Enginezsqlite3.Connectioncon	index_colTcoerce_floatparamsparse_datescolumnsi'  	chunksizefeaturesc                 C   s(   | j d u r	td| jd u rtdd S )Nzsql must be specifiedzcon must be specified)r   
ValueErrorr   self r   X/var/www/html/lang_env/lib/python3.10/site-packages/datasets/packaged_modules/sql/sql.py__post_init__%   s
   

zSqlConfig.__post_init__config_kwargscustom_featuresreturnc                    s   |  }|d }t|tsUtjjrIdtjv rIdd l}t||j	j
r=||d dd d }t|j|jd}||d< ntdt| d| tdt| d| |d }t|tsot||d< td	t| d
 t j||dS )Nr   
sqlalchemyr   r   z://)dialectzKSupported types for 'sql' are string and sqlalchemy.sql.Selectable but got z: zSQL connection 'con' of type zU couldn't be hashed properly. To enable hashing, specify 'con' as URI string instead.)r   )copy
isinstancestrdatasetsconfigZSQLALCHEMY_AVAILABLEsysmodulesr   r   Z
SelectableZcreate_enginesplitcompiler    	TypeErrortypeidloggerinfosupercreate_config_id)r   r   r   r   r   ZengineZsql_strr   	__class__r   r   r0   +   s,   


zSqlConfig.create_config_idc                 C   s   | j | j| j| j| jd}|S )Nr   r   r   r   r   r3   )r   pd_read_sql_kwargsr   r   r   r4   N   s   zSqlConfig.pd_read_sql_kwargsN)__name__
__module____qualname____doc__r   r   r#   __annotations__r   r   r   r   r   boolr   r   r   r   r   r   intr   r$   ZFeaturesr   dictr0   propertyr4   __classcell__r   r   r1   r   r      s,   
 	#r   c                   @   s>   e Zd ZeZdd Zdd ZdejdejfddZ	d	d
 Z
dS )Sqlc                 C   s   t j| jjdS )N)r   )r$   ZDatasetInfor%   r   r   r   r   r   _info]   s   z	Sql._infoc                 C   s   t jt jji dgS )N)nameZ
gen_kwargs)r$   ZSplitGeneratorZSplitZTRAIN)r   Z
dl_managerr   r   r   _split_generators`   s   zSql._split_generatorspa_tabler   c                    s`   | j jd ur.| j jj}tdd | j j D r)tjj fdd|D |d  S t |  S )Nc                 s   s    | ]}t | V  qd S r5   r	   ).0featurer   r   r   	<genexpr>f   s    z"Sql._cast_table.<locals>.<genexpr>c                    s   g | ]} |j  qS r   )rB   )rE   fieldrD   r   r   
<listcomp>h   s    z#Sql._cast_table.<locals>.<listcomp>)schema)	r%   r   Zarrow_schemaallvaluespaTableZfrom_arraysr   )r   rD   rK   r   rI   r   _cast_tablec   s   

zSql._cast_tablec                 c   sr    | j j}tj| j j| j jfd|i| j j}|d u r|gn|}t|D ]\}}tj	
|}|| |fV  q$d S )Nr   )r%   r   pdZread_sqlr   r   r4   	enumeraterN   rO   Zfrom_pandasrP   )r   r   Z
sql_readerZ	chunk_idxdfrD   r   r   r   _generate_tablesn   s   zSql._generate_tablesN)r6   r7   r8   r   ZBUILDER_CONFIG_CLASSrA   rC   rN   rO   rP   rT   r   r   r   r   r@   Z   s    r@   )r&   dataclassesr   typingr   r   r   r   r   r   ZpandasrQ   ZpyarrowrN   r$   Zdatasets.configZdatasets.features.featuresr
   Zdatasets.tabler   sqlite3r   utilsloggingZ
get_loggerr6   r-   ZBuilderConfigr   ZArrowBasedBuilderr@   r   r   r   r   <module>   s      B