
    gD                         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y)    )
namedtupleN)DatabaseError)BaseDatabaseIntrospection)	FieldInfo)	TableInfo)Index)_lazy_re_compiler   )pkhas_json_constraintz&^\s*(?:var)?char\s*\(\s*(\d+)\s*\)\s*$c                 P    t         j                  |       }|rt        |d         S dS )z6Extract the size number from a "varchar(11)" type name   N)field_size_researchint)namems     /var/www/python.vincentserveurtest.ovh/public_html/venv/lib/python3.12/site-packages/django/db/backends/sqlite3/introspection.pyget_field_sizer      s'    T"A3qt9#t#    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y#)$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                     |j                         j                  dd      d   j                         }| j                  |   S )N(r   r   )lowersplitstripbase_data_types_reverse)selfkeys     r   __getitem__z#FlexibleFieldLookupDict.__getitem__6   s9    iikQ'*002++C00r   N)__name__
__module____qualname__r;   r>    r   r   r   r      s    > 	' 	8	
 	+ 	~ 	> 	# 	2 	4 	> 	 	 	 	;  	!" 	#$ $',1r   r   c                   j     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                 d    t         |   ||      }|j                  r|dv ry|j                  ry|S )N>   r   r"   r   	AutoField	JSONField)superget_field_typer
   r   )r<   	data_typedescription
field_type	__class__s       r   rI   z$DatabaseIntrospection.get_field_type>   s>    W+I{C
>>j -
 
 **r   c                     |j                  d       |j                         D cg c]  }t        |d   |d   d          c}S c c}w )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_listz$DatabaseIntrospection.get_table_listL   sK     		
 9?8IJ8I	#a&#a&),8IJJJs   Ac                    |j                  d| j                  j                  j                  |      z         |j	                         }|st        d| d      | j                  ||      }t               }| j                  j                  j                  rG|D ]B  }|d   }d|z  }|j                  d||g      j                         }	|	s2|j                  |       D |D 
cg c]A  \  }
}}}}}}|dv r3t        ||t        |      ddd| ||j                  |      |dk(  ||v       C c}}}}}}}
S c c}}}}}}}
w )	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
                )r         N)rO   
connectionops
quote_namerP   r   _get_column_collationssetfeaturescan_introspect_json_fieldfetchoneaddr   r   get)r<   rQ   
table_name
table_info
collationsjson_columnslinecolumnjson_constraint_sqlr   cidr   rJ   notnulldefaultr
   hiddens                    r   get_table_descriptionz+DatabaseIntrospection.get_table_descriptionX   sp   
 	$t':':'E'Ej'QQ	
 __&
&4S TUU00D
u??##=="a&<v&E#&,nn  !45
' (* $ ' $$V, #< GQ
 
 GQBT9gwF y)t$a$ GQ
 	
 
 
s   &AD5c                 2    | j                  ||      }||dgS )N)tablerf   )get_primary_key_column)r<   rQ   ra   table_fieldspk_cols        r   get_sequencesz#DatabaseIntrospection.get_sequences   s"    ,,VZ@$788r   c                     |j                  d| j                  j                  j                  |      z         |j	                         D ci c]  ^}}}}}}|||f c}}}}S c c}}}}w )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)rO   rW   rX   rY   rP   )r<   rQ   ra   _ref_table_namecolumn_nameref_column_names          r   get_relationsz#DatabaseIntrospection.get_relations   s~    
 	)DOO,?,?,J,J:,VV	
 "

 # />:: #

 
	
 

s   A%
c           	          |j                  d| j                  j                  j                  |      z         |j	                         D cg c]  ^}}}}|s| c}}}S c c}}}w )NzPRAGMA table_info(%s)rt   )r<   rQ   ra   ru   r   r
   s         r   get_primary_key_columnsz-DatabaseIntrospection.get_primary_key_columns   sX    #doo&9&9&D&DZ&PP	
 -3OO,=D,=D1b,=DDDs   A"A"c                    d }d }d }d }d}g }d}	g }
d}|D ]<  }|j                  t        j                  j                  d      r|dz  }ni|j                  t        j                  j                  d      r|dz  }|dk  r5 n|dk(  r-|j                  t        j                  j                  d      r n|-|j                  t        j                  j                  d      }|r|r||j
                  t        j                  j                  t        j                  j                  fv r|j                  }nJ|j
                  t        j                  j                  j                  j                  k(  r|j                  dd }|j                  t        j                  j                  d	      rd
}|}n|r|k(  r|rd}|j
                  t        j                  j                  t        j                  j                  fv r|j                  |j                         n |j
                  t        j                  j                  j                  j                  k(  r|j                  |j                  dd        n||j
                  t        j                  j                  t        j                  j                  fv r|j                  }nJ|j
                  t        j                  j                  j                  j                  k(  r|j                  dd }|j                  t        j                  j                  d	      r|g}|j                  t        j                  j                  d      rd
}	|}S|	sW|k(  r|
rd}	b|j
                  t        j                  j                  t        j                  j                  fv r-|j                  |v s|
j                  |j                         |j
                  t        j                  j                  j                  j                  k(  s|j                  dd |v s|
j                  |j                  dd        ? |r	d
|dd dddnd }|
r	d
|
ddd ddnd }||||fS )NFr   r7   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6<q X__88#>q ?!ekk(//2M2Ms&S'/+0;;OO++\,( ,'"*{{x';';X__=T=T&UU*/++(?(?(F(F(M(MM*/++a*;;;x66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&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  )$#  	*  ($#  	  13CUJJr   c                    t        j                  |      d   }i }d}d |j                         D        }|D ].  }|j                  t         j                  j
                  d      s. n 	 | j                  ||      \  }}	}
}|	r|r|	||<   n|dz  }|	|d|z  <   |
r|r|
||<   n|dz  }|
|d|z  <   |j                  t         j                  j
                  d      r	 |S s)Nr   c              3   :   K   | ]  }|j                   r|  y wN)is_whitespace).0r   s     r   	<genexpr>zADatabaseIntrospection._parse_table_constraints.<locals>.<genexpr>  s     T%8E@S@S%%8s   r7   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_constraintsz.DatabaseIntrospection._parse_table_constraints  s    NN3'*	#$ TY%6%6%8TE{{8??66<   ;;FGL"39K0,1,   36NN "38K0,1,   36NN x::C@3 r   c                 :   i }	 |j                  d| j                  j                  j                  |            j	                         d   }| j                  ||      D ch c]  }|j                   }}|j                  | j                  ||             |j                  d| j                  j                  j                  |      z         |j                         D ]  }|dd \  }}	}
|j                  d| j                  j                  j                  |	      z         |j	                         xs d\  }|s]|j                  d| j                  j                  j                  |	      z         |j                         D ]6  \  }}}|	|vrg d	t        |
      dd	d
d||	<   ||	   d   j                  |       8 ||	   d   st        j                  ||	   d<   | j                  |      }||||	   d<    | j!                  ||      }|r|d
d	dd	d	d|d<   t#        | j%                  ||      j'                               }|j                  |D 	ci c]  \  }	\  }\  }}d|	 |gd	d	||fd	d	d c}}}}	       |S c c}w # t        $ r Y w xY wc c}}}}	w )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   zPRAGMA index_list(%s)NrV   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_)rO   rW   rX   rY   r^   rl   r   updater   	TypeErrorrP   r   r   r   suffix_get_index_columns_ordersr{   	enumeratery   items)r<   rQ   ra   r   table_schemainfor   rR   numberr   r   r   
index_rankcolumn_rankrf   r   
pk_columns	relationsrw   rx   rv   s                        r   get_constraintsz%DatabaseIntrospection.get_constraints6  s   
 	U!>>??&&11*=@ hjL '+&@&@&T&Td		&T   t<<\7ST 	#doo&9&9&D&DZ&PP	
 ??$C %(G!FE6NN137??3F3F3Q3QRW3XY
 __&1'FS NN'$//*=*=*H*H*OO 4:??3D/
K+#%',"&v,'+!&!%*K& E"9-44V< 4E 5!'*-2\\E"6*77<%39K&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                 0   t        j                  |      d   }|D ]t  }t        |t         j                  j                        s(t        |      j                  d      j                  d      }|D cg c]  }|j                  d      rdnd c}c S  y c c}w )Nr   (), DESCASC)	r   r   
isinstancer   Parenthesisstrr:   r9   endswith)r<   r   r   r   r   r   s         r   r   z/DatabaseIntrospection._get_index_columns_orders  s    $Q'E%!9!9:e***4066t<OVWwt$--"7UBwWW   Xs   0Bc                    |j                  d|g      j                         }|si S |d   }t        t        j                  |      d   d         j                  d      j                  d      }i }|D ]R  }|dd  j                         }|d   j                  d      }	t        |      D ]  \  }
}|dk(  s||
dz      } n d }|||	<   T |S )	Nzn
            SELECT sql
            FROM sqlite_master
            WHERE type = 'table' AND name = %s
        r   r   r   r   r   "COLLATE)rO   r^   r   r   r   r:   r9   r   )r<   rQ   ra   rR   r   r   rc   rf   r   rw   r   r   	collations                r   rZ   z,DatabaseIntrospection._get_column_collations  s    nn
 L
 (* 	 I!fhnnS)!,R0177=CCDI
FABZ%%'F )//#.K )& 1uI% &uqy 1I !2
 !	&/J{#  r   )rB   )r?   r@   rA   r   data_types_reverserI   rS   rl   rr   ry   r{   r   r   r   r   rZ   __classcell__)rM   s   @r   rD   rD   ;   sL    02
K3
j9
(EbKH%N_Br   rD   )collectionsr   r   	django.dbr   %django.db.backends.base.introspectionr   r   BaseFieldInfor   django.db.modelsr   django.utils.regex_helperr	   _fieldsr   r   r   rD   rB   r   r   <module>r      sc    "  # K L ; " 6&&)FF	 !!JK$1 1>}5 }r   