o
    {,h                     @   s^   d dl mZ d dlmZmZ d dlmZ d dlmZ ddl	m
Z
mZ dgZG dd deZd	S )
    )checks)connectionsrouter)Query)cached_property   )NOT_PROVIDEDFieldGeneratedFieldc                       s   e Zd ZdZdZdZdZdd fdd
Zedd Z	d fdd		Z
 fd
dZdd Z fddZdd Zdd Z fddZdd Zdd Zdd Z  ZS )r
   TN)
db_persistc                   s   | ddr
td| ddstd|dttur td|d	ttur,td
|dvr4td|| _|| _|| _t jdi | d S )NeditableFz"GeneratedField cannot be editable.blankTzGeneratedField must be blank.defaultz%GeneratedField cannot have a default.
db_defaultz.GeneratedField cannot have a database default.)TFz0GeneratedField.db_persist must be True or False. )	
setdefault
ValueErrorgetr   
expressionoutput_fieldr   super__init__)selfr   r   r   kwargs	__class__r   W/var/www/html/rh/venv/lib/python3.10/site-packages/django/db/models/fields/generated.pyr      s   zGeneratedField.__init__c                 C   s    ddl m} || jjj| | jS )Nr   )Col)django.db.models.expressionsr   model_metadb_tabler   )r   r   r   r   r   
cached_col#   s   zGeneratedField.cached_colc                    s.   || j jjkr|d | fv r| j}t ||S N)r   r    r!   r   r   get_col)r   aliasr   r   r   r   r$   )   s   zGeneratedField.get_colc                    sL   t  j|i | t| jdd| _| j  D ]\}}| j||d qd S )NF)r   
alias_cols)lookup_name)	r   contribute_to_classr   r   _queryr   get_class_lookupsitemsregister_lookup)r   argsr   r'   lookupr   r   r   r(   .   s
   z"GeneratedField.contribute_to_classc                 C   sb   |j d| j|d d}| jj| jdd}||\}}t| jddr-|jjs-d| d}||fS )NSQLCompiler)
connectionusingF)allow_joinsconditionalz
CASE WHEN z THEN 1 ELSE 0 END)	opscompilerr)   r   resolve_expressioncompilegetattrfeatures&supports_boolean_expr_in_select_clause)r   r0   r5   resolved_expressionsqlparamsr   r   r   generated_sql6   s   
zGeneratedField.generated_sqlc           	         s   | dpg }g t jdi || || |}| j }| j|_|j|d}|rgd}|dd |D }|rK|	t
jd| | | dd |d	d |D }|rg|	t
jd
| | | dd |S )N	databases)r?   z
    c                 s   0    | ]}t |tjr|j d |j dV  qdS z ()N)
isinstancer   Errormsgid.0output_checkr   r   r   	<genexpr>Q       

z'GeneratedField.check.<locals>.<genexpr>z'GeneratedField.output_field has errors:zfields.E223objrF   c                 s   r@   rA   )rC   r   WarningrE   rF   rG   r   r   r   rJ   _   rK   z)GeneratedField.output_field has warnings:zfields.W224r   )r   r   check_check_supported_check_persistencer   cloner   joinappendr   rD   rN   )	r   r   r?   errorsoutput_field_cloneoutput_field_checks	separatorerror_messageswarning_messagesr   r   r   rO   E   sX   


zGeneratedField.checkc                 C   s   g }|D ]A}t || jsqt| }| jjjr | jjj|jkr q|jjsEd| jjj	v sE|jj
sEd| jjj	v sE|tj|j d| dd q|S )N!supports_stored_generated_columns"supports_virtual_generated_columnsz" does not support GeneratedFields.zfields.E220rL   )r   allow_migrate_modelr   r   r    required_db_vendorvendorr9   r\   required_db_featuresr[   rT   r   rD   display_namer   r?   rU   dbr0   r   r   r   rP   o   s8   
zGeneratedField._check_supportedc              	   C   s   g }|D ]X}t || jsqt| }| jjjr | jjj|jkr q| js>|jj	s>d| jjj
v s>|tj|j d| ddd | jr\|jjs\d| jjj
v s\|tj|j d| dd	d q|S )
Nr\   z0 does not support non-persisted GeneratedFields.zfields.E221z!Set db_persist=True on the field.)rM   rF   hintr[   z, does not support persisted GeneratedFields.zfields.E222z"Set db_persist=False on the field.)r   r]   r   r   r    r^   r_   r   r9   r\   r`   rT   r   rD   ra   r[   rb   r   r   r   rQ      sN   
	
	z!GeneratedField._check_persistencec                    sH   t   \}}}}|d= |d= | j|d< | j|d< | j|d< ||||fS )Nr   r   r   r   r   )r   deconstructr   r   r   )r   namepathr-   r   r   r   r   re      s   


zGeneratedField.deconstructc                 C   s
   | j  S r#   )r   get_internal_type)r   r   r   r   rh      s   
z GeneratedField.get_internal_typec                 C      | j |S r#   )r   db_parametersr   r0   r   r   r   rj         zGeneratedField.db_parametersc                 C   ri   r#   )r   db_type_parametersrk   r   r   r   rm      rl   z!GeneratedField.db_type_parametersr#   )__name__
__module____qualname__	generateddb_returningr)   r   r   r   r"   r$   r(   r>   rO   rP   rQ   re   rh   rj   rm   __classcell__r   r   r   r   r
      s$    
*)	N)django.corer   	django.dbr   r   django.db.models.sqlr   django.utils.functionalr    r   r	   __all__r
   r   r   r   r   <module>   s    