
    h                     *   S SK r S SKJr  S SKJrJrJr  S SKrS SK	r
S SKrS SKrS SKJr  S SKJr  \(       a  S SKrS SKr\R&                  R(                  R+                  \5      r\ " S S\R0                  5      5       r " S S	\R4                  5      rg)
    N)	dataclass)TYPE_CHECKINGOptionalUnionrequire_storage_cast)
table_castc                   t  ^  \ rS rSr% SrSr\\S4   \S'   Sr	\\SSS4   \S	'   Sr
\\\\\   4      \S
'   Sr\\S'   Sr\\\\\4      \S'   Sr\\\\4      \S'   Sr\\\      \S'   Sr\\   \S'   Sr\\R0                     \S'   U 4S jr SS\S\\R0                     S\4U 4S jjjr\S 5       rSrU =r$ )	SqlConfig   z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U ]  5         U R                  c  [        S5      eU R                  c  [        S5      eg )Nzsql must be specifiedzcon must be specified)super__post_init__r   
ValueErrorr   )self	__class__s    [/home/james-whalen/.local/lib/python3.13/site-packages/datasets/packaged_modules/sql/sql.pyr   SqlConfig.__post_init__%   s?    8845588455     config_kwargscustom_featuresreturnc                   > UR                  5       nUS   n[        U[        5      (       d  [        R                  R
                  (       a  S[        R                  ;   a  SS Kn[        X4R                  R                  5      (       aQ  UR                  " US   R                  S5      S   S-   5      n[        UR                  UR                  S95      nXaS'   O4[        S[!        U5       SU 35      e[        S[!        U5       SU 35      eUS   n[        U[        5      (       d0  [#        U5      US'   [$        R'                  S	[!        U5       S
35        [(        TU ]U  XS9$ )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   r6   SqlConfig.create_config_id,   s[   
 &**, E"#s##338S!c>>#<#<=='55mE6J6P6PQV6WXY6Z]b6bcF!#++fnn+"EFG+2%(#efjknfoepprsvrwx   abfgjbkallnornst  E"#s###%c7M% KK/S	{  ;P  Q w''WWr   c                 z    U R                   U R                  U R                  U R                  U R                  S.nU$ )Nr   r   r   r   r   r;   )r   pd_read_sql_kwargss     r   r<   SqlConfig.pd_read_sql_kwargsO   s;     ||kk --++
 "!r    N)__name__
__module____qualname____firstlineno____doc__r   r   r'   __annotations__r   r   r   listr   boolr   tupledictr   r   r   intr   r(   Featuresr   r6   propertyr<   __static_attributes____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 !XF " "r   r   c                   d    \ rS rSr\rS rS rS\R                  S\R                  4S jr
S rSrg	)
Sql[   c                 R    [         R                  " U R                  R                  S9$ )N)r   )r(   DatasetInfor)   r   )r   s    r   _info	Sql._info^   s    ##T[[-A-ABBr   c                 ^    [         R                  " [         R                  R                  0 S9/$ )N)name
gen_kwargs)r(   SplitGeneratorSplitTRAIN)r   
dl_managers     r   _split_generatorsSql._split_generatorsa   s"    ''X^^-A-AbQRRr   pa_tabler!   c                    U R                   R                  b  U R                   R                  R                  n[        S U R                   R                  R	                  5        5       5      (       a=  [
        R                  R                  U Vs/ s H  o1UR                     PM     snUS9nU$ [        X5      nU$ s  snf )Nc              3   B   #    U  H  n[        U5      (       + v   M     g 7fr?   r   ).0features     r   	<genexpr>"Sql._cast_table.<locals>.<genexpr>g   s     bDa+G444Das   )schema)
r)   r   arrow_schemaallvaluespaTablefrom_arraysrW   r	   )r   r_   rf   fields       r   _cast_tableSql._cast_tabled   s    ;;+[[))66FbDKKDXDXD_D_Dabbb88//SY0ZSY%%**1ESY0Zci/j  &h7	 1[s   B;c              #     #    U R                   R                  n[        R                  " U R                   R                  U R                   R
                  4SU0U R                   R                  D6nUc  U/OUn[        U5       H8  u  p4[        R                  R                  U5      nX0R                  U5      4v   M:     g 7f)Nr   )r)   r   pdread_sqlr   r   r<   	enumeraterj   rk   from_pandasrn   )r   r   
sql_reader	chunk_idxdfr_   s         r   _generate_tablesSql._generate_tableso   s     KK))	[[KKOOT[[__
8A
EI[[EcEc

 &/%6j\J
&z2MIxx++B/H--h777 3s   B=B?r>   N)r@   rA   rB   rC   r   BUILDER_CONFIG_CLASSrT   r]   rj   rk   rn   rx   rM   r>   r   r   rP   rP   [   s4    $CS	BHH 	 	8r   rP   )r+   dataclassesr   typingr   r   r   pandasrq   pyarrowrj   r(   datasets.configdatasets.features.featuresr   datasets.tabler	   sqlite3r#   utilslogging
get_loggerr@   r4   BuilderConfigr   ArrowBasedBuilderrP   r>   r   r   <module>r      s    
 ! 1 1     ; %  
			*	*8	4 @"&& @" @"F8(
$
$ 8r   