
    0~h                     d    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y	)
    )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                |   |j                  dd      rt        d      |j                  dd      st        d      |j                  dt              t        urt        d      |j                  d	t              t        urt        d
      |dvrt        d      || _        || _        || _        t        |    di | y )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        j/var/www/peopleoo.sandbox-dev.co.uk/venv/lib/python3.12/site-packages/django/db/models/fields/generated.pyr   zGeneratedField.__init__   s    Z/ABB  $/<==::i.lBDEE::lL1EMNN]*OPP$($"6"    c                 r    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#   s*    44::##,,dD4E4EFFr   c                     || j                   j                  j                  k7  r|| j                  }t        |   ||      S N)r#   r$   r%   r   r   get_col)r   aliasr   r   s      r   r)   zGeneratedField.get_col)   s<    DJJ$$---,2F,,Lwul33r   c                     t        |   |i | t        | j                  d      | _        | j
                  j                         j                         D ]  \  }}| j                  ||        y )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.   sh    #T4V4$**?#'#4#4#F#F#H#N#N#P 	BK  [ A	Br   c                      |j                   j                  d      | j                  |d       }| j                  j	                  | j                  d      }|j                  |      S )NSQLCompiler)
connectionusingF)allow_joins)opscompilerr/   r   resolve_expressioncompile)r   r7   r;   resolved_expressions       r   generated_sqlzGeneratedField.generated_sql6   sb    9:>>**=9KKJd
 #oo@@KKU A 
  344r   c                 2   |j                  d      xs g }g t        	|   di || j                  |      | j	                  |      }| j
                  j                         }| j                  |_        |j                  |      }|rd}|j                  d |D              }|r,|j                  t        j                  d| | | d             |j                  d |D              }|r,|j                  t        j                  d	| | | d
             |S )N	databases)rA   z
    c              3      K   | ]:  }t        |t        j                        r|j                   d |j                   d < ywz ()N)
isinstancer   Errormsgid.0output_checks     r   	<genexpr>z'GeneratedField.check.<locals>.<genexpr>K   s?      , lFLL9  ##$B|&7q9,   A Az'GeneratedField.output_field has errors:zfields.E223objrH   c              3      K   | ]:  }t        |t        j                        r|j                   d |j                   d < ywrC   )rE   r   WarningrG   rH   rI   s     r   rL   z'GeneratedField.check.<locals>.<genexpr>Y   s?      . lFNN;  ##$B|&7q9.rM   z)GeneratedField.output_field has warnings:zfields.W224r   )r   r   check_check_supported_check_persistencer   cloner#   joinappendr   rF   rQ   )
r   r   rA   errorsoutput_field_cloneoutput_field_checks	separatorerror_messageswarning_messagesr   s
            r   rR   zGeneratedField.check?   sD   JJ{+1r	
W]$V$
""9-
 $$Y/

 "..446#':: 0666K I&^^ ,$7, N
 LLA$+n%57 (	  )~~ .$7.  
  NNC$+&6%79 (	 r   c                 \   g }|D ]#  }t        j                  || j                        s%t        |   }| j                  j                  j
                  r.| j                  j                  j
                  |j                  k7  r||j                  j                  rd| j                  j                  j                  v r|j                  j                  rd| j                  j                  j                  v r|j                  t        j                  |j                   d| d             & |S )N!supports_stored_generated_columns"supports_virtual_generated_columnsz" does not support GeneratedFields.zfields.E220rN   )r   allow_migrate_modelr#   r   r$   required_db_vendorvendorfeaturesr`   required_db_featuresr_   rW   r   rF   display_namer   rA   rX   dbr7   s        r   rS   zGeneratedField._check_supportedi   s     	B--b$**=$RJ

  33JJ$$77:;L;LL##FF6::##889 ##EE7::##889 LL%2233UV (%	2 r   c           	         g }|D ]s  }t        j                  || j                        s%t        |   }| j                  j                  j
                  r.| j                  j                  j
                  |j                  k7  r|| j                  sm|j                  j                  sWd| j                  j                  j                  v s5|j                  t        j                  |j                   d| dd             | j                  s|j                  j                  rd| j                  j                  j                  v r?|j                  t        j                  |j                   d| dd	             v |S )
Nr`   z0 does not support non-persisted GeneratedFields.zfields.E221z!Set db_persist=True on the field.)rO   rH   hintr_   z, does not support persisted GeneratedFields.zfields.E222z"Set db_persist=False on the field.)r   ra   r#   r   r$   rb   rc   r   rd   r`   re   rW   r   rF   rf   r_   rg   s        r   rT   z!GeneratedField._check_persistence   sH    $	B--b$**=$RJ

  33JJ$$77:;L;LL??##FF7::##889 LL%223 4+ + (@ ##EE6::##889 LL%223 4+ + (A9$	J 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   rl   zGeneratedField.deconstruct   sc    #(7#6#8 dD&7O:#|#|!%!2!2~T4''r   c                 6    | j                   j                         S r(   )r   get_internal_type)r   s    r   rp   z GeneratedField.get_internal_type   s      2244r   c                 8    | j                   j                  |      S r(   )r   db_parametersr   r7   s     r   rr   zGeneratedField.db_parameters   s      ..z::r   c                 8    | j                   j                  |      S r(   )r   db_type_parametersrs   s     r   ru   z!GeneratedField.db_type_parameters   s      33J??r   r(   )__name__
__module____qualname__	generateddb_returningr/   r   r   r   r&   r)   r.   r?   rR   rS   rT   rl   rp   rr   ru   __classcell__)r   s   @r   r   r      sk    ILFL?C #" G G
4
B5(T:'R(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 !
t@U t@r   