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   úa/var/www/html/premium_crap/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    