
    afD                         d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ  ed	ej        d
z             Z ed          Zd Z G d d          Z G d de          ZdS )    )
namedtupleN)DatabaseError)BaseDatabaseIntrospection)	FieldInfo	TableInfo)Index)_lazy_re_compiler   )pkhas_json_constraintz&^\s*(?:var)?char\s*\(\s*(\d+)\s*\)\s*$c                 h    t                               |           }|rt          |d                   ndS )z6Extract the size number from a "varchar(11)" type name   N)field_size_researchint)namems     Z/var/www/html/env/lib/python3.11/site-packages/django/db/backends/sqlite3/introspection.pyget_field_sizer      s.    T""A#3qt999t#    c                       e Zd Zi ddddddddddd	d
dd
dddddddddddddddddddddd d!Zd" Zd#S )$FlexibleFieldLookupDictboolBooleanFieldbooleansmallintSmallIntegerFieldzsmallint unsignedPositiveSmallIntegerFieldsmallintegerr   IntegerFieldintegerbigintBigIntegerFieldzinteger unsignedPositiveIntegerFieldzbigint unsignedPositiveBigIntegerFielddecimalDecimalFieldreal
FloatFieldtext	TextFieldchar	CharFieldvarcharblobBinaryFielddate	DateFieldDateTimeField	TimeField)datetimetimec                     |                                                     dd          d                                         }| j        |         S )N(r   r   )lowersplitstripbase_data_types_reverse)selfkeys     r   __getitem__z#FlexibleFieldLookupDict.__getitem__6   s>    iikkQ''*0022+C00r   N)__name__
__module____qualname__r<   r?    r   r   r   r      s       > 	' 	8	
 	+ 	~ 	> 	# 	2 	4 	> 	 	 	 	;  	!" 	#$ $'  ,1 1 1 1 1r   r   c                   p     e Zd Z e            Z fdZd Zd ZddZd Z	d Z
d Zd	 Zd
 Zd Zd Z xZS )DatabaseIntrospectionc                 x    t                                          ||          }|j        r|dv rdS |j        rdS |S )N>   r    r#   r   	AutoField	JSONField)superget_field_typer   r   )r=   	data_typedescription
field_type	__class__s       r   rJ   z$DatabaseIntrospection.get_field_type>   sT    WW++I{CC
> 	j -
 
 
 ;* 	;r   c                 h    |                     d           d |                                D             S )z>Return a list of table and view names in the current database.z
            SELECT name, type FROM sqlite_master
            WHERE type in ('table', 'view') AND NOT name='sqlite_sequence'
            ORDER BY namec                 R    g | ]$}t          |d          |d         d                    %S )r   r   r   ).0rows     r   
<listcomp>z8DatabaseIntrospection.get_table_list.<locals>.<listcomp>V   s.    JJJ	#a&#a&),,JJJr   )executefetchall)r=   cursors     r   get_table_listz$DatabaseIntrospection.get_table_listL   s@     		
 	
 	
 KJ8I8IJJJJr   c                   	 |                     d| j        j                            |          z             |                                }|st          d| d          |                     ||          t                      	| j        j        j	        rS|D ]P}|d         }d|z  }|                     d||g          
                                }|r	                    |           Q	fd|D             S )zi
        Return a description of the table with the DB-API cursor.description
        interface.
        zPRAGMA table_xinfo(%s)zTable z does not exist (empty pragma).r   z%%json_valid("%s")%%z
                    SELECT sql
                    FROM sqlite_master
                    WHERE
                        type = 'table' AND
                        name = %s AND
                        sql LIKE %s
                c                     g | ]N\  }}}}}}}|d v t          ||t          |          ddd| |                    |          |dk    |	v           OS ))r         Nr   )r   r   get)
rQ   cidr   rK   notnulldefaultr   hidden
collationsjson_columnss
           r   rS   z?DatabaseIntrospection.get_table_description.<locals>.<listcomp>v   s     
 
 
 CT9gwF  y))t$$a$   r   )rT   
connectionops
quote_namerU   r   _get_column_collationssetfeaturescan_introspect_json_fieldfetchoneadd)
r=   rV   
table_name
table_infolinecolumnjson_constraint_sqlr   ra   rb   s
           @@r   get_table_descriptionz+DatabaseIntrospection.get_table_descriptionX   s@   
 	$t':'E'Ej'Q'QQ	
 	
 	
 __&&
 	V T T T TUUU00DD
uu?#= 	-" - -a&<v&E#&,nn  !45
' 
' (** $ ' - $$V,,,
 
 
 
 
 GQ
 
 
 	
r   rC   c                 :    |                      ||          }||dgS )N)tablero   )get_primary_key_column)r=   rV   rl   table_fieldspk_cols        r   get_sequencesz#DatabaseIntrospection.get_sequences   s(    ,,VZ@@$7788r   c                     |                     d| j        j                            |          z             d |                                D             S )z
        Return a dictionary of {column_name: (ref_column_name, ref_table_name)}
        representing all foreign keys in the given table.
        zPRAGMA foreign_key_list(%s)c                 $    i | ]^}}}}}}|||fS rC   rC   )rQ   _ref_table_namecolumn_nameref_column_names        r   
<dictcomp>z7DatabaseIntrospection.get_relations.<locals>.<dictcomp>   sC     

 

 

 />:

 

 

r   rT   rc   rd   re   rU   r=   rV   rl   s      r   get_relationsz#DatabaseIntrospection.get_relations   sb    
 	)DO,?,J,J:,V,VV	
 	
 	


 

 ""

 

 

 
	
r   c                     |                     d| j        j                            |          z             d |                                D             S )NzPRAGMA table_info(%s)c                      g | ]^}}}}|	|S rC   rC   )rQ   rz   r   r   s       r   rS   zADatabaseIntrospection.get_primary_key_columns.<locals>.<listcomp>   s%    DDDD1bDDDDr   r   r   s      r   get_primary_key_columnsz-DatabaseIntrospection.get_primary_key_columns   sT    #do&9&D&DZ&P&PP	
 	
 	
 EDFOO,=,=DDDDr   c                    d }d }d }d }d}g }d}	g }
d}|D ]S}|                     t          j        j        d          r|dz  }nb|                     t          j        j        d          r|dz  }|dk     r nn.|dk    r(|                     t          j        j        d          r n|(|                     t          j        j        d          }|r|r*|d|j        t          j        j        t          j        j        fv r|j        }n3|j        t          j        j        j	        j
        k    r|j        dd         }|                     t          j        j        d	          rd
}|}n'|r||k    r|rd}\|j        t          j        j        t          j        j        fv r|                    |j                   n|j        t          j        j        j	        j
        k    r"|                    |j        dd                    n|d|j        t          j        j        t          j        j        fv r|j        }n3|j        t          j        j        j	        j
        k    r|j        dd         }|                     t          j        j        d	          r|g}|                     t          j        j        d          rd
}	|}|	r||k    r|
rd}	|j        t          j        j        t          j        j        fv r%|j        |v r|
                    |j                   |j        t          j        j        j	        j
        k    r3|j        dd         |v r"|
                    |j        dd                    U|r	d
|dd dddnd }|
r	d
|
ddd ddnd }||||fS )NFr   r8   r   ),
CONSTRAINTUNIQUETCHECK)uniquecolumnsprimary_keyforeign_keycheckindex)r   r   r   r   r   r   )matchsqlparsetokensPunctuationKeywordttypeNamevalueLiteralStringSymbolappend)r=   r   r   tokenis_constraint_definition
field_nameconstraint_namer   unique_columnsr   check_columnsbraces_deepunique_braces_deepcheck_braces_deepunique_constraintcheck_constraints                   r   &_parse_column_or_constraint_definitionz<DatabaseIntrospection._parse_column_or_constraint_definition   s   #' 
 ?	@ ?	@E{{8?6<< 	q X_8#>> q ??E # !!ekk(/2Ms&S&S!'/+0;;O+\, ,( , ' 2"*{x';X_=T&UUU*/+(?(F(MMM*/+ad*;;;x6AA A!F)4&& 	A)[88) +%*F {x';X_=T&UUU&--ek::::(?(F(MMM&--ek!B$.?@@@ %{x';X_=T&UUU%*[

(?(F(MMM%*[2%6
;;x6AA 2&0\N{{8?2G<< @$/!! @$33$ & %;8?#79P"QQQ{g--%,,U[999[HO$;$B$III{1R4(G33%,,U[2->??? 	)$#    	* 	($#    	  13CUJJr   c                    t          j        |          d         }i }d}d |                                D             }|D ])}|                    t           j        j        d          r n*	 |                     ||          \  }}	}
}|	r|r|	||<   n|dz  }|	|d|z  <   |
r|r|
||<   n|dz  }|
|d|z  <   |                    t           j        j        d          rnp|S )Nr   c              3   (   K   | ]}|j         	|V  d S N)is_whitespace)rQ   r   s     r   	<genexpr>zADatabaseIntrospection._parse_table_constraints.<locals>.<genexpr>  s*      TTE@ST%TTTTTTr   r8   Tr   z__unnamed_constraint_%s__r   )r   parseflattenr   r   r   r   )r=   sqlr   	statementconstraintsunnamed_constrains_indexr   r   r   r   r   	end_tokens               r   _parse_table_constraintsz.DatabaseIntrospection._parse_table_constraints  sP    N3''*	#$ TTY%6%6%8%8TTT 	 	E{{8?6<< 	 ;;FGLL " 39K00,1,   36NN  " 38K00,1,   36NN x:C@@ 1	2 r   c           	      H   i }	 |                     d| j        j                            |                                                    d         }d |                     ||          D             }|                    |                     ||                     n# t          $ r Y nw xY w|                     d| j        j                            |          z             |	                                D ]4}|dd         \  }}}	|                     d| j        j                            |          z             |                                pd\  }
|
sa|                     d	| j        j                            |          z             |	                                D ]D\  }}}||vrg d
t          |	          dd
dd||<   ||         d                             |           E||         d         r7t          j        ||         d<   |                     |
          }||||         d<   6|                     ||          }|r|dd
dd
d
d|d<   t!          |                     ||                                                    }|                    d |D                        |S )zu
        Retrieve any constraints or keys (unique, pk, fk, check, index) across
        one or more columns.
        z:SELECT sql FROM sqlite_master WHERE type='table' and name=r   c                     h | ]	}|j         
S rC   )r   rQ   infos     r   	<setcomp>z8DatabaseIntrospection.get_constraints.<locals>.<setcomp>F  s'       "	  r   zPRAGMA index_list(%s)Nr[   z<SELECT sql FROM sqlite_master WHERE type='index' AND name=%sr   zPRAGMA index_info(%s)FTr   r   r   r   r   r   r   r   typeorders__primary__c           
      @    i | ]\  }\  }\  }}d | |gdd||fdddS )fk_Fr   rC   )rQ   r   r|   r}   r{   s        r   r~   z9DatabaseIntrospection.get_constraints.<locals>.<dictcomp>  sb     
 
 
 LEKK)J/> e +}#(#$2O#D""   
 
 
r   )rT   rc   rd   re   rj   rq   updater   	TypeErrorrU   r   r   r	   suffix_get_index_columns_ordersr   	enumerater   items)r=   rV   rl   r   table_schemar   rR   numberr   r   r   
index_rankcolumn_rankro   r   
pk_columns	relationss                    r   get_constraintsz%DatabaseIntrospection.get_constraints6  s2   
 	U!>>>?&11*===@  hjjL &*&@&@&T&T  G t<<\7SSTTTT  	 	 	D	 	#do&9&D&DZ&P&PP	
 	
 	
 ??$$ (	: (	:C %(G!FE6NN137?3F3Q3QRW3X3XY  
 __&&1'FS  NN'$/*=*H*H*O*OO   4:??3D3D 
= 
=/
K++#%',"&v,,'+!&!%* *K& E"9-44V<<<<5!'* :-2\E"6*77<<%39K&x011&*EE
 	 &##* *K& d00DDJJLLMM	
 
 PY
 
 
	
 	
 	
 s   AB 
B('B(c                    t          j        |          d         }|D ]d}t          |t           j        j                  rCt          |                              d                              d          }d |D             c S ed S )Nr   (), c                 @    g | ]}|                     d           rd ndS )DESCASC)endswithr   s     r   rS   zCDatabaseIntrospection._get_index_columns_orders.<locals>.<listcomp>  s-    WWWt$--"7"7BUWWWr   )r   r   
isinstancer   Parenthesisstrr;   r:   )r=   r   r   r   r   s        r   r   z/DatabaseIntrospection._get_index_columns_orders  s    $$Q' 	X 	XE%!9:: Xe****40066t<<WWwWWWWWWX tr   c                    |                     d|g                                          }|si S |d         }t          t          j        |          d         d                                       d                              d          }i }|D ]h}|dd                                          }|d                             d          }	t          |          D ]\  }
}|dk    r||
dz            } nd }|||	<   i|S )	Nzn
            SELECT sql
            FROM sqlite_master
            WHERE type = 'table' AND name = %s
        r   r   r   r   r   "COLLATE)rT   rj   r   r   r   r;   r:   r   )r=   rV   rl   rR   r   r   ra   ro   r   r|   r   r   	collations                r   rf   z,DatabaseIntrospection._get_column_collations  s   nn
 L
 
 (** 	  	I!fhnS))!,R01177==CCDII
 		0 		0FABBZ%%''F )//#..K )& 1 1 ! !uI%% &uqy 1IE & !	&/J{##r   )rC   )r@   rA   rB   r   data_types_reverserJ   rW   rq   rw   r   r   r   r   r   r   rf   __classcell__)rN   s   @r   rE   rE   ;   s        0022    
K 
K 
K3
 3
 3
j9 9 9 9
 
 
(E E EbK bK bKH% % %N_ _ _B        r   rE   )collectionsr   r   	django.dbr   %django.db.backends.base.introspectionr   r   BaseFieldInfor   django.db.modelsr	   django.utils.regex_helperr
   _fieldsr   r   r   rE   rC   r   r   <module>r      s4   " " " " " "  # # # # # # K K K K K K L L L L L L ; ; ; ; ; ; " " " " " " 6 6 6 6 6 6J&)FF 	 ! !JKK$ $ $1 1 1 1 1 1 1 1>} } } } }5 } } } } }r   