
    hD                         S SK Jr  S SKrS SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
Jr  S SKJr  \" S	\R                  S
-   5      r\" S5      rS r " S S5      r " S S\5      rg)    )
namedtupleN)DatabaseError)BaseDatabaseIntrospection)	FieldInfo)	TableInfo)Index)_lazy_re_compiler   )pkhas_json_constraintz&^\s*(?:var)?char\s*\(\s*(\d+)\s*\)\s*$c                 Z    [         R                  U 5      nU(       a  [        US   5      $ 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.13/site-packages/django/db/backends/sqlite3/introspection.pyget_field_sizer      s'    T"A3qt9#t#    c                       \ rS rSr0 SS_SS_SS_SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_S S!S".ErS# rS$rg%)&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                     UR                  5       R                  SS5      S   R                  5       nU R                  U   $ )N(r   r   )lowersplitstripbase_data_types_reverse)selfkeys     r   __getitem__#FlexibleFieldLookupDict.__getitem__6   s9    iikQ'*002++C00r    N)__name__
__module____qualname____firstlineno__r<   r?   __static_attributes__rA   r   r   r   r      s    > 	' 	8	
 	+ 	~ 	> 	# 	2 	4 	> 	 	 	 	;  	!" 	#$ $',1r   r   c                   v   ^  \ rS rSr\" 5       rU 4S jrS rS rSS jr	S r
S rS	 rS
 rS rS rS rSrU =r$ )DatabaseIntrospection;   c                 z   > [         TU ]  X5      nUR                  (       a  US;   a  gUR                  (       a  gU$ )N>   r    r#   r   	AutoField	JSONField)superget_field_typer
   r   )r=   	data_typedescription
field_type	__class__s       r   rN   $DatabaseIntrospection.get_field_type>   s<    W+IC
>>j -
 
 **r   c                     UR                  S5        UR                  5        Vs/ s H  n[        US   US   S   5      PM     sn$ s  snf )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 namer   r   )executefetchallr   )r=   cursorrows      r   get_table_list$DatabaseIntrospection.get_table_listL   sK     		
 9?8IJ8I	#a&#a&),8IJJJs   Ac                    UR                  SU R                  R                  R                  U5      -  5        UR	                  5       nU(       d  [        SU S35      eU R                  X5      n[        5       nU R                  R                  R                  (       aN  U HH  nUS   nSU-  nUR                  SX(/5      R                  5       n	U	(       d  M7  UR                  U5        MJ     U V
VVVVVVs/ s HG  u  pppnUS;   d  M  [        UU[        U5      SSSU(       + UUR                  U5      US:H  X;   5      PMI     snnnnnnn
$ s  snnnnnnn
f )	zQ
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
                )r         N)rU   
connectionops
quote_namerV   r   _get_column_collationssetfeaturescan_introspect_json_fieldfetchoneaddr   r   get)r=   rW   
table_name
table_info
collationsjson_columnslinecolumnjson_constraint_sqlr   cidr   rO   notnulldefaultr
   hiddens                    r   get_table_description+DatabaseIntrospection.get_table_descriptionX   sh   
 	$t':':'E'Ej'QQ	
 __&
&4S TUU00D
u??##=="a&<v&E#&,nn  5
' (* $ '& $$V, #< GQ
 
 GQB9wFIy)t$a$ GQ
 	
 
 
s   6E	;ErA   c                 .    U R                  X5      nX$S./$ )N)tablerm   )get_primary_key_column)r=   rW   rh   table_fieldspk_cols        r   get_sequences#DatabaseIntrospection.get_sequences   s    ,,V@$788r   c                     UR                  SU R                  R                  R                  U5      -  5        UR	                  5        VVVVs0 s H  tnnnnnnXVU4_M     snnnn$ s  snnnnf )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)rU   r^   r_   r`   rV   )r=   rW   rh   _ref_table_namecolumn_nameref_column_names          r   get_relations#DatabaseIntrospection.get_relations   s|    
 	)DOO,?,?,J,J:,VV	
 "

 # >:: #

 
	
 

s   A'
c           	          UR                  SU R                  R                  R                  U5      -  5        UR	                  5        VVVs/ s H  Gtp4p5U(       d  M  UPM     snnn$ s  snnnf )NzPRAGMA table_info(%s)r}   )r=   rW   rh   r~   r   r
   s         r   get_primary_key_columns-DatabaseIntrospection.get_primary_key_columns   sT    #doo&9&9&D&DZ&PP	
 -3OO,=D,=1,=DDDs   A)A)c                 	   S nS nS nS nSn/ nSn	/ n
SnU GH  nUR                  [        R                  R                  S5      (       a  US-  nOvUR                  [        R                  R                  S5      (       a  US-  nUS:  a    GO(O8US:X  a2  UR                  [        R                  R                  S5      (       a    GOUc3  UR                  [        R                  R                  S5      nU(       a  M  U(       Ga  Uc  UR
                  [        R                  R                  [        R                  R                  4;   a  UR                  nOKUR
                  [        R                  R                  R                  R                  :X  a  UR                  SS nUR                  [        R                  R                  S	5      (       a  S
nUnGOU(       a  WU:X  a  U(       a  SnGM  UR
                  [        R                  R                  [        R                  R                  4;   a  UR                  UR                  5        GO*UR
                  [        R                  R                  R                  R                  :X  a  UR                  UR                  SS 5        OUc  UR
                  [        R                  R                  [        R                  R                  4;   a  UR                  nOKUR
                  [        R                  R                  R                  R                  :X  a  UR                  SS nUR                  [        R                  R                  S	5      (       a  U/nUR                  [        R                  R                  S5      (       a  S
n	UnGM  U	(       d  GM  WU:X  a  U
(       a  Sn	GM  UR
                  [        R                  R                  [        R                  R                  4;   a1  UR                  U;   a  U
R                  UR                  5        GM#  GM&  UR
                  [        R                  R                  R                  R                  :X  d  GMe  UR                  SS U;   d  GM{  U
R                  UR                  SS 5        GM     U(       a	  S
USS SSS.OS nU
(       a	  S
U
SSS SS.OS nXnX4$ )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_definition<DatabaseIntrospection._parse_column_or_constraint_definition   s   #' 
E{{8??66<<q X__88#>>q ? # !ekk(//2M2Ms&S&S'/+0;;OO++\,( ,'"*{{x';';X__=T=T&UU*/++(?(?(F(F(M(MM*/++a*;;;x66AA!F)4&)[8)%*F {{x';';X__=T=T&UU&--ekk:(?(?(F(F(M(MM&--ekk!B.?@ %{{x';';X__=T=T&UU%*[[
(?(?(F(F(M(MM%*[[2%6
;;x66AA&0\N{{8??22G<<$/!$3$ %;;8??#7#79P9P"QQ{{g-%,,U[[9 .[[HOO$;$;$B$B$I$II{{1R(G3%,,U[[2->? R  )$#  	*  ($#  	 3CJJr   c                    [         R                  " U5      S   n0 nSnS UR                  5        5       nU H4  nUR                  [         R                  R
                  S5      (       d  M4    O    U R                  Xb5      u  nn	n
nU	(       a  U(       a  XU'   OUS-  nU	USU-  '   U
(       a  U(       a  XU'   OUS-  nU
USU-  '   UR                  [         R                  R
                  S5      (       a   U$ M  )Nr   c              3   J   #    U  H  oR                   (       a  M  Uv   M     g 7fN)is_whitespace).0r   s     r   	<genexpr>ADatabaseIntrospection._parse_table_constraints.<locals>.<genexpr>  s     T%8E@S@S%%%8s   #	#r8   r   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_constraints.DatabaseIntrospection._parse_table_constraints  s    NN3'*	#$ TY%6%6%8TE{{8??66<<   ;;FL"390,1,   36NN "380,1,   36NN x::C@@3 r   c                 l   0 n UR                  SU R                  R                  R                  U5      < 35      R	                  5       S   nU R                  X5       Vs1 s H  oUR                  iM     nnUR                  U R                  XF5      5        UR                  SU R                  R                  R                  U5      -  5        UR                  5        GH(  nUSS u  pn
UR                  SU R                  R                  R                  U	5      -  5        UR	                  5       =(       d    Su  nU(       d  Mg  UR                  SU R                  R                  R                  U	5      -  5        UR                  5        H5  u  pnX;  a  / S	[        U
5      SS	S
S.X9'   X9   S   R                  U5        M7     X9   S   (       d  M  [        R                  X9   S'   U R                  U5      nUc  GM!  XU	   S'   GM+     U R!                  X5      nU(       a  US
S	SS	S	S.US'   [#        U R%                  X5      R'                  5       5      nUR                  U V	VVVs0 s H  u  n	u  nu  nnSU	 3U/S	S	UU4S	S	S._M     snnnn	5        U$ s  snf ! [         a     GNf = fs  snnnn	f )z]
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   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__fk_)rU   r^   r_   r`   re   rs   r   updater   	TypeErrorrV   r   r   r   suffix_get_index_columns_ordersr   	enumerater   items)r=   rW   rh   r   table_schemainfor   rX   numberr   r   r   
index_rankcolumn_rankrm   r   
pk_columns	relationsr   r   r   s                        r   get_constraints%DatabaseIntrospection.get_constraints6  s   
 	U!>>??&&11*=@ hjL '+&@&@&T&Td		&T   t<<\ST 	#doo&9&9&D&DZ&PP	
 ??$C %(G!F6NN137??3F3F3Q3QRW3XY
 __&1'FS NN'$//*=*=*H*H*OO 4:??3D/
+#%',"&v,'+!&!%*K& "9-44V< 4E !'**-2\\"6*77<%39&x0Q %T 11&E
 &##*K& d00DJJLM	 PY
 PYKEKK)J/> eW +}#(#$2O#D""   PY
	
 _	  		N
s   A	J  J)#J.
J+*J+c                 N   [         R                  " U5      S   nU H  n[        U[         R                  R                  5      (       d  M.  [        U5      R                  S5      R                  S5      nU Vs/ s H  oUR                  S5      (       a  SOSPM     sns  $    g s  snf )Nr   (), DESCASC)	r   r   
isinstancer   Parenthesisstrr;   r:   endswith)r=   r   r   r   r   r   s         r   r   /DatabaseIntrospection._get_index_columns_orders  s    $Q'E%!9!9::e***4066t<OVWwt--"7"7UBwWW   Xs   7#B"c                    UR                  SU/5      R                  5       nU(       d  0 $ US   n[        [        R                  " U5      S   S   5      R                  S5      R                  S5      n0 nU HS  nUSS  R                  5       nUS   R                  S5      n	[        U5       H  u  pUS:X  d  M  XS-      n  O   S nXU	'   MU     U$ )	Nzn
            SELECT sql
            FROM sqlite_master
            WHERE type = 'table' AND name = %s
        r   r   r   r   r   "COLLATE)rU   re   r   r   r   r;   r:   r   )r=   rW   rh   rX   r   r   rj   rm   r   r   r   r   	collations                r   ra   ,DatabaseIntrospection._get_column_collations  s    nn
 L
 (* 	 I!fhnnS)!,R0177=CCDI
FABZ%%'F )//#.K )& 1I% &qy 1I !2
 !	&/{#  r   )rA   )rB   rC   rD   rE   r   data_types_reverserN   rY   rs   rz   r   r   r   r   r   r   ra   rF   __classcell__)rR   s   @r   rH   rH   ;   sQ    02
K3
j9
(EbKH%N_B r   rH   )collectionsr   r   	django.dbr   %django.db.backends.base.introspectionr   r   BaseFieldInfor   django.db.modelsr   django.utils.regex_helperr	   _fieldsr   r   r   rH   rA   r   r   <module>r      sc    "  # K L ; " 6&&)FF	 !!JK$1 1>}5 }r   