
    Evg                     l    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e          Zd	S )
    )checks)connectionsrouter)Query)cached_property   )NOT_PROVIDEDFieldGeneratedFieldc                        e Zd ZdZdZdZdZdd fd
Zed             Z	d fd	Z
 fdZd Z fd	Zd
 Zd Z fdZd Zd Zd Z xZS )r   TN)
db_persistc                   |                     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rt          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__s        ^/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/db/models/fields/generated.pyr   zGeneratedField.__init__   s    Z// 	CABBB  $// 	><===::i..lBBDEEE::lL11EEMNNN]**OPPP$($""6"""""    c                 P    ddl m}  || j        j        j        | | j                  S )Nr   )Col)django.db.models.expressionsr!   model_metadb_tabler   )r   r!   s     r   
cached_colzGeneratedField.cached_col#   s3    444444s4:#,dD4EFFFr   c                     || j         j        j        k    r|d | fv r| j        }t	                                          ||          S N)r#   r$   r%   r   r   get_col)r   aliasr   r   s      r   r)   zGeneratedField.get_col)   sD    DJ$---,4,2N2N,Lwwul333r   c                      t                      j        |i | t          | j        d          | _        | j                                                                        D ]\  }}|                     ||           d S )NF)r#   
alias_cols)lookup_name)	r   contribute_to_classr   r#   _queryr   get_class_lookupsitemsregister_lookup)r   argsr   r-   lookupr   s        r   r.   z"GeneratedField.contribute_to_class.   s    ##T4V444$*???#'#4#F#F#H#H#N#N#P#P 	B 	BK  [ AAAA	B 	Br   c                 "    |j                             d          | j        |d           }| j                            | j        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   r7   r<   resolved_expressionsqlparamss         r   generated_sqlzGeneratedField.generated_sql6   s    9:>**=99KJd
 
 
 #o@@KU A 
 
 &&':;;VDO]E::	7'N	7 7s666CF{r   c                 ~   |                     d          pg }g  t                      j        di ||                     |          |                     |          }| j                                        }| j        |_        |                    |          }|rd}|                    d |D                       }|r/|	                    t          j        d| | | d                     |                    d |D                       }|r/|	                    t          j        d	| | | d
                     |S )N	databases)rG   z
    c              3   n   K   | ]0}t          |t          j                  |j         d |j         dV  1dS z ()N)
isinstancer   Errormsgid.0output_checks     r   	<genexpr>z'GeneratedField.check.<locals>.<genexpr>Q   s^       , , lFL99,#99|999, , , , , ,r   z'GeneratedField.output_field has errors:zfields.E223objrN   c              3   n   K   | ]0}t          |t          j                  |j         d |j         dV  1dS rI   )rK   r   WarningrM   rN   rO   s     r   rR   z'GeneratedField.check.<locals>.<genexpr>_   s^       . . lFN;;.#99|999. . . . . .r   z)GeneratedField.output_field has warnings:zfields.W224r   )r   r   check_check_supported_check_persistencer   cloner#   joinappendr   rL   rV   )
r   r   rG   errorsoutput_field_cloneoutput_field_checks	separatorerror_messageswarning_messagesr   s
            r   rW   zGeneratedField.checkE   s   JJ{++1r	
UWW]$$V$$
""9--
 $$Y//

 ".4466#': 0666KK 	 I&^^ , ,$7, , ,  N
  L7$7&47 7 (	      )~~ . .$7. . .    
   N9$9&69 9 (	     r   c                    g }|D ]}t          j        || j                  st          |         }| j        j        j        r| j        j        j        |j        k    rV|j        j        sdd| j        j        j	        v sQ|j        j
        sEd| j        j        j	        v s2|                    t          j        |j         d| d                     |S )N!supports_stored_generated_columns"supports_virtual_generated_columnsz" does not support GeneratedFields.zfields.E220rS   )r   allow_migrate_modelr#   r   r$   required_db_vendorvendorr@   re   required_db_featuresrd   r\   r   rL   display_namer   rG   r]   dbr7   s        r   rX   zGeneratedField._check_supportedo   s     	 	B-b$*== $RJ
 3J$7:;LLL#F6:#89 9 #E9 8:#89 9 L%2VVV (     r   c           	      $   g }|D ]	}t          j        || j                  st          |         }| j        j        j        r| j        j        j        |j        k    rW| j        sR|j        j	        sFd| j        j        j
        v s3|                    t          j        |j         d| dd                     | j        rR|j        j        sFd| j        j        j
        v s3|                    t          j        |j         d| dd	                     |S )
Nre   z0 does not support non-persisted GeneratedFields.zfields.E221z!Set db_persist=True on the field.)rT   rN   hintrd   z, does not support persisted GeneratedFields.zfields.E222z"Set db_persist=False on the field.)r   rf   r#   r   r$   rg   rh   r   r@   re   ri   r\   r   rL   rj   rd   rk   s        r   rY   z!GeneratedField._check_persistence   s`    $	 $	B-b$*== $RJ
 3J$7:;LLL? #F7:#89 9 L%2 + + + (@      #E6:#89 9 L%2 + + + (A     r   c                     t                                                      \  }}}}|d= |d= | j        |d<   | j        |d<   | j        |d<   ||||fS )Nr   r   r   r   r   )r   deconstructr   r   r   )r   namepathr3   r   r   s        r   rp   zGeneratedField.deconstruct   sd    #(77#6#6#8#8 dD&7O:#|#|!%!2~T4''r   c                 4    | j                                         S r(   )r   get_internal_type)r   s    r   rt   z GeneratedField.get_internal_type   s     22444r   c                 6    | j                             |          S r(   )r   db_parametersr   r7   s     r   rv   zGeneratedField.db_parameters   s     ..z:::r   c                 6    | j                             |          S r(   )r   db_type_parametersrw   s     r   ry   z!GeneratedField.db_type_parameters   s     33J???r   r(   )__name__
__module____qualname__	generateddb_returningr/   r   r   r   r&   r)   r.   rE   rW   rX   rY   rp   rt   rv   ry   __classcell__)r   s   @r   r   r      sH       ILFL?C # # # # # # #" G G _G
4 4 4 4 4 4
B B B B B  ( ( ( ( (T  :' ' 'R( ( ( ( (5 5 5; ; ;@ @ @ @ @ @ @r   N)django.corer   	django.dbr   r   django.db.models.sqlr   django.utils.functionalr    r	   r
   __all__r   r   r   r   <module>r      s          ) ) ) ) ) ) ) ) & & & & & & 3 3 3 3 3 3 ! ! ! ! ! ! ! !
z@ z@ z@ z@ z@U z@ z@ z@ z@ z@r   