
    bi                         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(                  j+                  e      Ze G d dej0                               Z G d d	ej4                        Zy)
    N)	dataclass)TYPE_CHECKINGOptionalUnionrequire_storage_cast)
table_castc                   d    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Z	 ddede
ej.                     def fdZed        Z x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                 ~    t         |           | j                  t        d      | j                  t        d      y )Nzsql must be specifiedzcon must be specified)super__post_init__r   
ValueErrorr   )self	__class__s    \/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/datasets/packaged_modules/sql/sql.pyr   zSqlConfig.__post_init__%   s?    8845588455     config_kwargscustom_featuresreturnc                    |j                         }|d   }t        |t              st        j                  j
                  rdt        j                  v rdd l}t        ||j                  j                        rU |j                  |d   j                  d      d   dz         }t        |j                  |j                              }||d<   n4t        dt!        |       d|       t        dt!        |       d|       |d   }t        |t              s0t#        |      |d<   t$        j'                  d	t!        |       d
       t(        | U  ||      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   s	           r   r4   zSqlConfig.create_config_id,   sZ   
 &**, E"#s#338S!c:>>#<#<=5Z55mE6J6P6PQV6WXY6Z]b6bcF!#++fnn+"EFG+2M%(#efjknfoepprsvrwx   abfgjbkallnornst  E"#s##%c7M% KK/S	{  ;P  Q w''WWr   c                 z    | j                   | j                  | j                  | j                  | j                  d}|S )Nr   r   r   r   r   r8   )r   pd_read_sql_kwargss     r   r9   zSqlConfig.pd_read_sql_kwargsO   s;     ||kk --++
 "!r   N)__name__
__module____qualname____doc__r   r   r%   __annotations__r   r   r   listr   boolr   tupledictr   r   r   intr   r&   Featuresr   r4   propertyr9   __classcell__)r   s   @r   r   r      s    37Cs//	07hlCs24NPdd	el15Ixc49n-.5L$15FHU4,-.5/3K%d
+,3#'GXd3i '%Ix}%,0Hhx(()06 8<!X!X "("3"34!X 
	!XF " "r   r   c                   Z    e Zd ZeZd Zd Zdej                  dej                  fdZ	d Z
y)Sqlc                 V    t        j                  | j                  j                        S )N)r   )r&   DatasetInfor'   r   )r   s    r   _infoz	Sql._info^   s    ##T[[-A-ABBr   c                 b    t        j                  t         j                  j                  i       gS )N)name
gen_kwargs)r&   SplitGeneratorSplitTRAIN)r   
dl_managers     r   _split_generatorszSql._split_generatorsa   s"    ''X^^-A-AbQRRr   pa_tabler   c                 x   | j                   j                  | j                   j                  j                  }t        d | j                   j                  j	                         D              r>t
        j                  j                  |D cg c]  }||j                      c}|      }|S t        ||      }|S c c}w )Nc              3   4   K   | ]  }t        |         y wr:   r   ).0features     r   	<genexpr>z"Sql._cast_table.<locals>.<genexpr>g   s     b+G44bs   )schema)
r'   r   arrow_schemaallvaluespaTablefrom_arraysrN   r	   )r   rU   r[   fields       r   _cast_tablezSql._cast_tabled   s    ;;+[[))66FbDKKDXDXD_D_Dabb88//SY0Z%%**1E0Zci/j  &h7	 1[s   B7c              #   ~  K   | j                   j                  }t        j                  | j                   j                  | j                   j
                  fd|i| j                   j                  }||gn|}t        |      D ]9  \  }}t        j                  j                  |      }|| j                  |      f ; y w)Nr   )r'   r   pdread_sqlr   r   r9   	enumerater_   r`   from_pandasrc   )r   r   
sql_reader	chunk_idxdfrU   s         r   _generate_tableszSql._generate_tableso   s     KK))	[[KKOOT[[__
8A
EI[[EcEc

 &/%6j\J
&z2 	8MIrxx++B/HT--h777	8s   B;B=N)r;   r<   r=   r   BUILDER_CONFIG_CLASSrL   rT   r_   r`   rc   rl    r   r   rI   rI   [   s4    $CS	BHH 	 	8r   rI   )r)   dataclassesr   typingr   r   r   pandasre   pyarrowr_   r&   datasets.configdatasets.features.featuresr   datasets.tabler	   sqlite3r!   utilslogging
get_loggerr;   r2   BuilderConfigr   ArrowBasedBuilderrI   rn   r   r   <module>r|      s    
 ! 1 1     ; %  
			*	*8	4 @"&& @" @"F8(
$
$ 8r   