o
    8wi                     @   s   d dl Z d dlmZ d dl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Optional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<  f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                    s2   t    | jd u rtd| jd u rtdd S )Nzsql must be specifiedzcon must be specified)super__post_init__r
   
ValueErrorr   self	__class__ ^/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/datasets/packaged_modules/sql/sql.pyr   %   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configSQLALCHEMY_AVAILABLEsysmodulesr   r
   
Selectablecreate_enginesplitcompiler    	TypeErrortypeidloggerinfor   create_config_id)r   r   r   r
   r   enginesql_strr   r   r   r   r2   ,   s,   


zSqlConfig.create_config_idc                 C   s   | j | j| j| j| jd}|S )Nr   r   r   r   r   r5   )r   pd_read_sql_kwargsr   r   r   r6   O   s   zSqlConfig.pd_read_sql_kwargsN)__name__
__module____qualname____doc__r
   r   r#   __annotations__r   r   r   listr   boolr   tupledictr   r   r   intr   r$   Featuresr   r2   propertyr6   __classcell__r   r   r   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$   DatasetInfor%   r   r   r   r   r   _info^   s   z	Sql._infoc                 C   s   t jt jji dgS )N)name
gen_kwargs)r$   SplitGeneratorSplitTRAIN)r   
dl_managerr   r   r   _split_generatorsa   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 r7   r   ).0featurer   r   r   	<genexpr>g   s    z"Sql._cast_table.<locals>.<genexpr>c                    s   g | ]} |j  qS r   )rH   )rP   fieldrO   r   r   
<listcomp>i   s    z#Sql._cast_table.<locals>.<listcomp>)schema)	r%   r   arrow_schemaallvaluespaTablefrom_arraysr   )r   rO   rV   r   rT   r   _cast_tabled   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   pdread_sqlr
   r   r6   	enumeraterZ   r[   from_pandasr]   )r   r   
sql_reader	chunk_idxdfrO   r   r   r   _generate_tableso   s   zSql._generate_tablesN)r8   r9   r:   r	   BUILDER_CONFIG_CLASSrG   rN   rZ   r[   r]   re   r   r   r   r   rE   [   s    rE   )r'   dataclassesr   typingr   r   r   pandasr^   pyarrowrZ   r$   datasets.configdatasets.features.featuresr   datasets.tabler   sqlite3r   utilslogging
get_loggerr8   r0   BuilderConfigr	   ArrowBasedBuilderrE   r   r   r   r   <module>   s     C