403Webshell
Server IP : 217.160.0.135  /  Your IP : 216.73.217.85
Web Server : Apache
System : Linux www 6.18.52-i1-ampere #1203 SMP Mon Sep 14 18:29:59 CEST 2026 aarch64
User : sws1074145052 ( 1074145052)
PHP Version : 8.3.32
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /lib/python3/dist-packages/django/db/models/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib/python3/dist-packages/django/db/models/__pycache__/expressions.cpython-311.pyc
�

48zj���:�ddlZddlZddlZddlZddlmZddlmZddlm	Z	m
Z
ddlmZm
Z
ddlmZddlmZddlmZdd	lmZdd
lmZddlmZGd�d
��ZGd�d��ZGd�d��ZeGd�dee����Zd�ejejej ej!fD��Z"ej#d���d���Z$Gd�dee��Z%Gd�de%��Z&Gd�de%��Z'eGd�de����Z(Gd �d!e(��Z)Gd"�d#e(��Z*Gd$�d%ee��Z+Gd&�d'e��Z,Gd(�d)e��Z-Gd*�d+e��Z.Gd,�d-e��Z/Gd.�d/e��Z0Gd0�d1e+��Z1Gd2�d3e��Z2Gd4�d5e��Z3Gd6�d7e��Z4Gd8�d9ee��Z5Gd:�d;e5��Z6Gd<�d=e��Z7Gd>�d?ee��Z8Gd@�dAe��Z9GdB�dCe9��Z:GdD�dEe9��Z;dS)F�N��Decimal)�UUID)�EmptyResultSet�
FieldError)�NotSupportedError�
connection)�fields)�
LOOKUP_SEP)�Q)�deconstructible)�cached_property)�
make_hashablec��eZdZdZd�ZdS)�SQLiteNumericMixinzp
    Some expressions with output_field=DecimalField() must be cast to
    numeric to be properly filtered.
    c��|j||fi|��\}}	|j���dkrd|z}n#t$rYnwxYw||fS)N�DecimalFieldzCAST(%s AS NUMERIC))�as_sql�output_field�get_internal_typer)�self�compilerr	�
extra_context�sql�paramss      �>/usr/lib/python3/dist-packages/django/db/models/expressions.py�	as_sqlitezSQLiteNumericMixin.as_sqlitesu��!�d�k�(�J�H�H�-�H�H���V�	�� �2�2�4�4��F�F�+�c�1�����	�	�	��D�	�����F�{�s�"7�
A�AN)�__name__�
__module__�__qualname__�__doc__r��rrrs-������������r#rc���eZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z!d �Z"d!�Z#d"�Z$d#�Z%d$S)%�
Combinablezu
    Provide the ability to combine one or two objects with
    some connector. For example F('foo') + F('bar').
    �+�-�*�/�^z%%�&�|z<<z>>�#c��t|d��st|��}|rt|||��St|||��S)N�resolve_expression)�hasattr�Value�CombinedExpression)r�other�	connector�reverseds    r�_combinezCombinable._combine:sL���u�2�3�3�	!��%�L�L�E��	>�%�e�Y��=�=�=�!�$�	�5�9�9�9r#c�:�|�d|jd��S)N���F�r6�MUL�rs r�__neg__zCombinable.__neg__Gs���}�}�R���5�1�1�1r#c�:�|�||jd��S�NF�r6�ADD�rr3s  r�__add__zCombinable.__add__J����}�}�U�D�H�e�4�4�4r#c�:�|�||jd��Sr>�r6�SUBrAs  r�__sub__zCombinable.__sub__MrCr#c�:�|�||jd��Sr>r9rAs  r�__mul__zCombinable.__mul__PrCr#c�:�|�||jd��Sr>�r6�DIVrAs  r�__truediv__zCombinable.__truediv__SrCr#c�:�|�||jd��Sr>�r6�MODrAs  r�__mod__zCombinable.__mod__VrCr#c�:�|�||jd��Sr>�r6�POWrAs  r�__pow__zCombinable.__pow__YrCr#c��t|dd��r0t|dd��rt|��t|��zStd����N�conditionalF�:Use .bitand() and .bitor() for bitwise logical operations.��getattrr�NotImplementedErrorrAs  r�__and__zCombinable.__and__\�V���4���.�.�	&�7�5�-�QV�3W�3W�	&��T�7�7�Q�u�X�X�%�%�!�H�
�
�	
r#c�:�|�||jd��Sr>)r6�BITANDrAs  r�bitandzCombinable.bitandc����}�}�U�D�K��7�7�7r#c�:�|�||jd��Sr>)r6�BITLEFTSHIFTrAs  r�bitleftshiftzCombinable.bitleftshiftfs���}�}�U�D�$5�u�=�=�=r#c�:�|�||jd��Sr>)r6�
BITRIGHTSHIFTrAs  r�
bitrightshiftzCombinable.bitrightshiftis���}�}�U�D�$6��>�>�>r#c�:�|�||jd��Sr>)r6�BITXORrAs  r�bitxorzCombinable.bitxorlrbr#c��t|dd��r0t|dd��rt|��t|��zStd���rWrZrAs  r�__or__zCombinable.__or__or^r#c�:�|�||jd��Sr>)r6�BITORrAs  r�bitorzCombinable.bitorvs���}�}�U�D�J��6�6�6r#c�:�|�||jd��S�NTr?rAs  r�__radd__zCombinable.__radd__y����}�}�U�D�H�d�3�3�3r#c�:�|�||jd��SrrrErAs  r�__rsub__zCombinable.__rsub__|rtr#c�:�|�||jd��Srrr9rAs  r�__rmul__zCombinable.__rmul__rtr#c�:�|�||jd��SrrrKrAs  r�__rtruediv__zCombinable.__rtruediv__�rtr#c�:�|�||jd��SrrrOrAs  r�__rmod__zCombinable.__rmod__�rtr#c�:�|�||jd��SrrrSrAs  r�__rpow__zCombinable.__rpow__�rtr#c� �td����NrY�r\rAs  r�__rand__zCombinable.__rand__����!�H�
�
�	
r#c� �td���r�r�rAs  r�__ror__zCombinable.__ror__�r�r#N)&rrr r!r@rFr:rLrTrPr`rordrgrjr6r<rBrGrIrMrQrUr]rarerhrkrmrprsrvrxrzr|r~r�r�r"r#rr%r%!s����������C�

�C�

�C�

�C�

�C��C�
�F��E��L��M�
�F�:�:�:�2�2�2�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�
�
�
�8�8�8�>�>�>�?�?�?�8�8�8�
�
�
�7�7�7�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�4�
�
�
�

�
�
�
�
r#r%c�f�eZdZdZdZdZdZdZd"d�Zd�Z	d�Z
d�Zd	�Zd
�Z
d�Zed���Zed
���Zed���Zd#d�Zed���Zed���Zed���Zed���Zd�Zed���Zed���Zd�Zd�Zd�Zd�Z d"d�Z!d�Z"d�Z#d�Z$d�Z%d �Z&d!�Z'dS)$�BaseExpressionz%Base class for all query expressions.FTNc��|�	||_dSdS�N�r�rrs  r�__init__zBaseExpression.__init__�s���#� ,�D����$�#r#c�d�|j���}|�dd��|S)N�
convert_value)�__dict__�copy�pop)r�states  r�__getstate__zBaseExpression.__getstate__�s.���
�"�"�$�$��
�	�	�/�4�(�(�(��r#c�h�|j|jurgn|jg|j�|��zSr�)r��_convert_value_noopr�get_db_converters�rr	s  rr�z BaseExpression.get_db_converters�sC���!�T�%=�=�=�
�B�
�
� ���/�/�
�;�;�	<�	<r#c��gSr�r"r;s r�get_source_expressionsz%BaseExpression.get_source_expressions�����	r#c��|rJ�dSr�r"�r�exprss  r�set_source_expressionsz%BaseExpression.set_source_expressions�s�������r#c��d�|D��S)Nc��g|]G}t|d��r|n2t|t��rt|��nt	|����HS�r/)r0�
isinstance�str�Fr1��.0�args  r�
<listcomp>z5BaseExpression._parse_expressions.<locals>.<listcomp>�s`��
�
�
���3� 4�5�5�
�C�C�$�S�#�.�.�>��#����E�#�J�J�
�
�
r#r")r�expressionss  r�_parse_expressionsz!BaseExpression._parse_expressions�s%��
�
�%�
�
�
�	
r#c� �td���)a�
        Responsible for returning a (sql, [params]) tuple to be included
        in the current query.

        Different backends can provide their own implementation, by
        providing an `as_{vendor}` method and patching the Expression:

        ```
        def override_as_sql(self, compiler, connection):
            # custom logic
            return super().as_sql(compiler, connection)
        setattr(Expression, 'as_' + connection.vendor, override_as_sql)
        ```

        Arguments:
         * compiler: the query compiler responsible for generating the query.
           Must have a compile method, returning a (sql, [params]) tuple.
           Calling compiler(value) will return a quoted `value`.

         * connection: the database connection used for the current query.

        Return: (sql, params)
          Where `sql` is a string containing ordered sql parameters to be
          replaced with the elements of the list `params`.
        z"Subclasses must implement as_sql()r��rrr	s   rrzBaseExpression.as_sql�s��4"�"F�G�G�Gr#c�X�td�|���D����S)Nc3�(K�|]
}|o|jV��dSr�)�contains_aggregate�r��exprs  r�	<genexpr>z4BaseExpression.contains_aggregate.<locals>.<genexpr>�s*����^�^��4�3�D�3�^�^�^�^�^�^r#��anyr�r;s rr�z!BaseExpression.contains_aggregate�s+���^�^��@[�@[�@]�@]�^�^�^�^�^�^r#c�X�td�|���D����S)Nc3�(K�|]
}|o|jV��dSr�)�contains_over_clauser�s  rr�z6BaseExpression.contains_over_clause.<locals>.<genexpr>�s*����`�`�$�4�5�D�5�`�`�`�`�`�`r#r�r;s rr�z#BaseExpression.contains_over_clause�s+���`�`�$�B]�B]�B_�B_�`�`�`�`�`�`r#c�X�td�|���D����S)Nc3�(K�|]
}|o|jV��dSr�)�contains_column_referencesr�s  rr�z<BaseExpression.contains_column_references.<locals>.<genexpr>�s*����f�f��4�;�D�;�f�f�f�f�f�fr#r�r;s rr�z)BaseExpression.contains_column_references�s+���f�f��Hc�Hc�He�He�f�f�f�f�f�fr#c������|���}�|_|�����fd�|���D����|S)a

        Provide the chance to do any preprocessing or validation before being
        added to the query.

        Arguments:
         * query: the backend query implementation
         * allow_joins: boolean allowing or denying use of joins
           in this query
         * reuse: a set of reusable joins for multijoins
         * summarize: a terminal aggregate clause
         * for_save: whether this expression about to be used in a save or update

        Return: an Expression to be added to the query.
        c�H��g|]}|r|�������nd��Sr�r�)r�r��allow_joins�query�reuse�	summarizes  ����rr�z5BaseExpression.resolve_expression.<locals>.<listcomp>�sL���"
�"
�"
���
�D�#�#�E�;��y�I�I�I��"
�"
�"
r#)r��
is_summaryr�r��rr�r�r�r��for_save�cs ````  rr/z!BaseExpression.resolve_expression�s~������
�I�I�K�K�� ���	� � �"
�"
�"
�"
�"
�"
�"
��0�0�2�2�"
�"
�"
�	�	�	�
�r#c�@�t|jtj��Sr�)r�rr
�BooleanFieldr;s rrXzBaseExpression.conditional�s���$�+�V�-@�A�A�Ar#c��|jSr�r�r;s r�fieldzBaseExpression.fields��� � r#c�^�|���}|�d|_td���|S)z+Return the output type of this expressions.NTz4Cannot resolve expression type, unknown output_field)�_resolve_output_field�_output_field_resolved_to_nonerr�s  rrzBaseExpression.output_fields8���1�1�3�3����26�D�/��S�T�T�T��r#c�D�	|jS#t$r|js�YdSwxYw)z�
        Return the output field of this expression, or None if
        _resolve_output_field() didn't return an output type.
        N)rrr�r;s r�_output_field_or_nonez$BaseExpression._output_field_or_nonesH��	��$�$���	�	�	��6�
��
�
�
�	���s�	��c	���d�|���D��}|D]I}|D]A}t||j��s*td|jj�d|jj�d�����B|cSdS)a�
        Attempt to infer the output type of the expression. If the output
        fields of all source fields match then, simply infer the same type
        here. This isn't always correct, but it makes sense most of the time.

        Consider the difference between `2 + 2` and `2 / 3`. Inferring
        the type here is a convenience for the common case. The user should
        supply their own output_field with more complex computations.

        If a source's output field resolves to None, exclude it from this check.
        If all sources are None, then an error is raised higher up the stack in
        the output_field property.
        c3�K�|]}|�|V��	dSr�r")r��sources  rr�z7BaseExpression._resolve_output_field.<locals>.<genexpr>)s'����\�\�6��I[��I[�I[�I[�I[�\�\r#z!Expression contains mixed types: �, z. You must set output_field.N)�get_source_fieldsr��	__class__rr)r�sources_iterrr�s    rr�z$BaseExpression._resolve_output_fields���]�\�T�-C�-C�-E�-E�\�\�\��(�
	 �
	 �L�&�
�
��!�,��0@�A�A��$�*�)�2�;�;�;�"�,�5�5�5������ ����
	 �
	 r#c��|Sr�r"��value�
expressionr	s   rr�z"BaseExpression._convert_value_noop6s���r#c��|j}|���}|dkrd�S|�d��rd�S|dkrd�S|jS)z�
        Expressions provide their own converters because users have the option
        of manually specifying the output_field which may be a different type
        from the one the database returns.
        �
FloatFieldc�(�|�dnt|��Sr�)�floatr�s   r�<lambda>z.BaseExpression.convert_value.<locals>.<lambda>Ds������TY�Z_�T`�T`�r#�IntegerFieldc�(�|�dnt|��Sr�)�intr�s   rr�z.BaseExpression.convert_value.<locals>.<lambda>Fs������TW�X]�T^�T^�r#rc�(�|�dnt|��Sr�rr�s   rr�z.BaseExpression.convert_value.<locals>.<lambda>Hs������T[�\a�Tb�Tb�r#)rr�endswithr�)rr��
internal_types   rr�zBaseExpression.convert_value:sn���!���/�/�1�1�
��L�(�(�`�`�`�
�
#�
#�N�
3�
3�	c�^�^�^�
�n�
,�
,�b�b�b��'�'r#c�6�|j�|��Sr�)r�
get_lookup)r�lookups  rr�zBaseExpression.get_lookupKs��� �+�+�F�3�3�3r#c�6�|j�|��Sr�)r�
get_transform�r�names  rr�zBaseExpression.get_transformNs��� �.�.�t�4�4�4r#c���|���}|��fd�|���D����|S)Nc�B��g|]}|�|����nd��Sr�)�relabeled_clone)r��e�
change_maps  �rr�z2BaseExpression.relabeled_clone.<locals>.<listcomp>Ss@���&
�&
�&
��./�]�A���j�)�)�)��&
�&
�&
r#)r�r�r�)rr��clones ` rr�zBaseExpression.relabeled_cloneQsa����	�	����
�$�$�&
�&
�&
�&
��0�0�2�2�&
�&
�&
�	�	�	��r#c�*�tj|��Sr�)r�r;s rr�zBaseExpression.copyYs���y����r#c��|js|gSg}|���D])}|�|������*|Sr�)r�r��extend�get_group_by_cols�r�alias�colsr�s    rr�z BaseExpression.get_group_by_cols\sZ���&�	��6�M����1�1�3�3�	4�	4�F��K�K��0�0�2�2�3�3�3�3��r#c�>�d�|���D��S)z9Return the underlying field types used by this aggregate.c��g|]	}|j��
Sr")r�)r�r�s  rr�z4BaseExpression.get_source_fields.<locals>.<listcomp>fs��O�O�O�A��'�O�O�Or#)r�r;s rr�z BaseExpression.get_source_fieldsds"��O�O��1L�1L�1N�1N�O�O�O�Or#c��t|fi|��Sr���OrderBy�r�kwargss  r�asczBaseExpression.asch����t�&�&�v�&�&�&r#c� �t|fddi|��S�N�
descendingTr�r�s  r�desczBaseExpression.desck����t�7�7��7��7�7�7r#c��|Sr�r"r;s r�reverse_orderingzBaseExpression.reverse_orderingn����r#c#�K�|V�|���D]3}|r/t|d��r|���Ed{V���/|V��4dS)zi
        Recursively yield this expression and all subexpressions, in
        depth-first order.
        �flattenN)r�r0r
)rr�s  rr
zBaseExpression.flattenqs}����
�
�
�
��/�/�1�1�	�	�D��
��4��+�+��#�|�|�~�~�-�-�-�-�-�-�-�-��J�J�J��	�	r#c�l�t|jd��r|j�|||��S||fS)z�
        Custom format for select clauses. For example, EXISTS expressions need
        to be wrapped in CASE WHEN on Oracle.
        �
select_format)r0rr�rrrrs    rrzBaseExpression.select_format~s?��
�4�$�o�6�6�	J��$�2�2�8�S�&�I�I�I��F�{�r#r��NTNFF)(rrr r!r�r��
filterable�window_compatibler�r�r�r�r�r�rrr�r�r�r/�propertyrXr�rr�r��staticmethodr�r�r�r�r�r�r�r�r�rrr
rr"r#rr�r��sr������/�/��J�%*�"��J���-�-�-�-����
<�<�<�������
�
�
�H�H�H�8�_�_��_�_��a�a��_�a��g�g��_�g�����0�B�B��X�B��!�!��X�!�����_���	�	��_�	� � � �6����\���(�(��_�(� 4�4�4�5�5�5�����������P�P�P�'�'�'�8�8�8�����������r#r�c�4�eZdZdZed���Zd�Zd�ZdS)�
Expressionz:An expression that can be combined with other expressions.c���tj|j��}|j\}}|j|i|��}|���|j���}|jg}|D]|\}}t|tj��r7|jr |j
r|j
jj|jf}nt!|��}nt#|��}|�||f���}t'|��Sr�)�inspect�	signaturer��_constructor_args�bind_partial�apply_defaults�	arguments�itemsr�r�r
�Fieldr��model�_meta�label�typer�append�tuple)	r�constructor_signature�argsr�rr�identityr�r�s	         rr&zExpression.identity�s��� '� 1�$�-� @� @���-���f�6�)�6��G��G�G�	�� � �"�"�"��'�-�-�/�/�	��N�#��#�	*�	*�J�C���%���.�.�
-��:�(�%�+�(�"�[�.�4�e�j�A�E�E� ��K�K�E�E�%�e�,�,���O�O�S�%�L�)�)�)�)��X���r#c�Z�t|t��stS|j|jkSr�)r�r�NotImplementedr&rAs  r�__eq__zExpression.__eq__�s)���%��,�,�	"�!�!��~���.�.r#c�*�t|j��Sr�)�hashr&r;s r�__hash__zExpression.__hash__�s���D�M�"�"�"r#N)rrr r!rr&r)r,r"r#rrr�sQ������D�D�����_��$/�/�/�
#�#�#�#�#r#rc
�h�i|]�}|tjtjtjftjtjtjftjtjtjftjtjtjftjtjtjfg���Sr")r
r�rr�)r�r4s  r�
<dictcomp>r.�s���	�	�	�	��	�	�f�1�6�3F�G�	�	�f�1�6�3F�G�	�	�f�1�6�3F�G�	�	�f�/��1B�C�	�	�F�/��1B�C��	�	�	r#�)�maxsizec��t�|d��}|D]*\}}}t||��rt||��r|cS�+dS)Nr")�_connector_combinators�get�
issubclass)r4�lhs_type�rhs_type�combinators�combinator_lhs_type�combinator_rhs_type�
combined_types       r�_resolve_combined_typer;�sk��(�,�,�Y��;�;�K�CN�!�!�?��0�-��h� 3�4�4�	!��H�Na�9b�9b�	!� � � � ��!�!r#c�P��eZdZd�fd�	Zd�Zd�Zd�Zd�Z�fd�Zd�Z	d
d�Z
�xZS)r2Nc�v��t���|���||_||_||_dS�Nr�)�superr�r4�lhs�rhs)rr@r4rArr�s     �rr�zCombinedExpression.__init__�s7���
�����l��3�3�3�"����������r#c�B�d�|jj|��S)Nz<{}: {}>)�formatr�rr;s r�__repr__zCombinedExpression.__repr__�s��� � ���!8�$�?�?�?r#c�N�d�|j|j|j��S)Nz{} {} {})rCr@r4rAr;s r�__str__zCombinedExpression.__str__�s ��� � ���4�>�4�8�D�D�Dr#c��|j|jgSr��r@rAr;s rr�z)CombinedExpression.get_source_expressions�s����$�(�#�#r#c�$�|\|_|_dSr�rHr�s  rr�z)CombinedExpression.set_source_expressions�s��"����$�(�(�(r#c���	t�����S#t$rTt|jt|jj��t|jj����}|��|��cYSwxYwr�)	r?r�rr;r4r!r@rrA)rr:r�s  �rr�z(CombinedExpression._resolve_output_field�s����
	#��7�7�0�0�2�2�2���	#�	#�	#�2����T�X�*�+�+��T�X�*�+�+���M�
�$�� �=�?�?�"�"�"�	#���s�#�AB�Bc�x�g}g}|�|j��\}}|�|��|�|��|�|j��\}}|�|��|�|��d}|j�|j|��}||z|fS�Nz(%s))�compiler@r"r�rA�ops�combine_expressionr4)rrr	r��expression_paramsrr�expression_wrappers        rrzCombinedExpression.as_sql�s��������&�&�t�x�0�0���V����3����� � ��(�(�(��&�&�t�x�0�0���V����3����� � ��(�(�(�#���n�/�/����L�L��!�C�'�):�:�:r#TFc��|j�|||||��}|j�|||||��}t|tt
f��s�	|j���}n#ttf$rd}YnwxYw	|j���}	n#ttf$rd}	YnwxYwd||	hvr=||	kr7t	|j|j
|j���|||||��Shd�}
|j
|jkr;||
vr7||	kr1t|j|j���|||||��S|���}||_
||_||_|S)N�
DurationField>�	DateField�	TimeField�
DateTimeField)r@r/rAr��DurationExpression�TemporalSubtractionrr�AttributeErrorrr4rFr�r�)rr�r�r�r�r�r@rAr5r6�datetime_fieldsr�s            rr/z%CombinedExpression.resolve_expression�s����h�)�)�%��e�Y�PX�Y�Y���h�)�)�%��e�Y�PX�Y�Y���$�!3�5H� I�J�J�	�
 ��+�=�=�?�?����"�J�/�
 �
 �
 �����
 ����
 ��+�=�=�?�?����"�J�/�
 �
 �
 �����
 �����8�X�"6�6�6�8�x�;O�;O�)�$�(�D�N�D�H�M�M�`�`��;��y�(����J�I�I�O��~���)�)�h�/�.I�.I�h�Zb�Nb�Nb�*�4�8�T�X�>�>�Q�Q��;��y�(����
�I�I�K�K�� ����������s$�A4�4B
�	B
�B(�(B>�=B>r�r)rrr r�rDrFr�r�r�rr/�
__classcell__�r�s@rr2r2�s��������������@�@�@�E�E�E�$�$�$�#�#�#�#�#�#�#�#�;�;�;��������r#r2c�$��eZdZd�Z�fd�Z�xZS)rWc��	|j}|���dkr4|�|��\}}|j�|��|fSn#t
$rYnwxYw|�|��S)NrS)rrrMrN�format_for_duration_arithmeticr)r�siderr	�outputrrs       rrMzDurationExpression.compiles���	R��&�F��'�'�)�)�_�<�<�&�.�.�t�4�4���V�!�~�D�D�S�I�I�6�Q�Q�=���	�	�	��D�	��������%�%�%s�A�
A#�"A#c���|jjr"t���||��S|j�|��g}g}|�|j||��\}}|�|��|�	|��|�|j
||��\}}|�|��|�	|��d}|j�|j|��}||z|fSrL)
�features�has_native_duration_fieldr?rrN�check_expression_supportrMr@r"r�rA�combine_duration_expressionr4)	rrr	r�rPrrrQr�s	        �rrzDurationExpression.as_sqls�����8�	8��7�7�>�>�(�J�7�7�7���/�/��5�5�5������l�l�4�8�X�z�B�B���V����3����� � ��(�(�(��l�l�4�8�X�z�B�B���V����3����� � ��(�(�(�#���n�8�8����U�U��!�C�'�):�:�:r#)rrr rMrr[r\s@rrWrWsG�������	&�	&�	&�;�;�;�;�;�;�;�;�;r#rWc�B��eZdZej��Z�fd�Zd�Z�xZS)rXc�X��t���||j|��dSr�)r?r�rF)rr@rAr�s   �rr�zTemporalSubtraction.__init__(s'���
������d�h��,�,�,�,�,r#c��|j�|��|�|j��}|�|j��}|j�|jj���||��Sr�)rNrerMr@rA�subtract_temporalsrr)rrr	r@rAs     rrzTemporalSubtraction.as_sql+so����/�/��5�5�5����t�x�(�(�����t�x�(�(���~�0�0���1F�1X�1X�1Z�1Z�\_�ad�e�e�er#)	rrr r
rSrr�rr[r\s@rrXrX%s^�������'�6�'�)�)�L�-�-�-�-�-�f�f�f�f�f�f�fr#rXc�B�eZdZdZd�Zd�Z		dd�Zd�Zd	�Zd
�Z	d�Z
dS)
r�zDAn object capable of resolving references to existing query objects.c��||_dS)z^
        Arguments:
         * name: the name of the field this expression references
        N)r�r�s  rr�z
F.__init__6s��
��	�	�	r#c�L�d�|jj|j��S�N�{}({}))rCr�rr�r;s rrDz
F.__repr__=s�����t�~�6��	�B�B�Br#NTFc�<�|�|j|||��Sr�)�resolve_refr��rr�r�r�r�r�s      rr/zF.resolve_expression@s��� � ���K��	�J�J�Jr#c��t|fi|��Sr�r�r�s  rr�zF.ascDrr#c� �t|fddi|��Srr�r�s  rrzF.descGrr#c�B�|j|jko|j|jkSr�)r�r�rAs  rr)zF.__eq__Js���~���0�L�T�Y�%�*�5L�Lr#c�*�t|j��Sr�)r+r�r;s rr,z
F.__hash__Ms���D�I���r#r)rrr r!r�rDr/r�rr)r,r"r#rr�r�2s�������N�N����C�C�C�FJ�5:�K�K�K�K�'�'�'�8�8�8�M�M�M�����r#r�c�:��eZdZdZdZd�Z�fd�Zd�Zdd�Z�xZ	S)	�ResolvedOuterRefz�
    An object that contains a reference to an outer query.

    In this case, the reference to the outer query has been resolved because
    the inner query has been used as a subquery.
    Fc� �td���)NzXThis queryset contains a reference to an outer query and may only be used in a subquery.)�
ValueError�rr%r�s   rrzResolvedOuterRef.as_sqlZs���
*�
�
�	
r#c�`��t��j|i|��}t|jv|_|Sr�)r?r/rr��possibly_multivalued)rr%r��colr�s    �rr/z#ResolvedOuterRef.resolve_expression`s4���(�e�g�g�(�$�9�&�9�9��$.���#:�� ��
r#c��|Sr�r"�r�relabelss  rr�z ResolvedOuterRef.relabeled_clonehrr#Nc��gSr�r"�rr�s  rr�z"ResolvedOuterRef.get_group_by_colskr�r#r�)
rrr r!r�rr/r�r�r[r\s@rrxrxQs|�����������
�
�
����������������r#rxc��eZdZdZd�Zd�ZdS)�OuterRefFc�l�t|j|j��r|jSt|j��Sr�)r�r�r�rxr{s   rr/zOuterRef.resolve_expressionrs0���d�i���0�0�	��9����	�*�*�*r#c��|Sr�r"r�s  rr�zOuterRef.relabeled_clonewrr#N)rrr r�r/r�r"r#rr�r�os8��������+�+�+�
����r#r�c�j��eZdZdZdZdZdZdZdd��fd�
Zd�Z	d�Z
d	�Zd
�Zdd
�Z
dd�Z�fd�Z�xZS)�FunczAn SQL function call.Nz%(function)s(%(expressions)s)r�r�c�@��|j�]t|��|jkrEtd|jj�d|j�d|jdkrdnd�dt|���d�	���t���|�	��|j|�|_||_	dS)
N�'z' takes exactly � ��argumentrz (z given)r�)
�arity�len�	TypeErrorr�rr?r�r��source_expressions�extra)rrr�r�r�s    �rr�z
Func.__init__�s�����:�!�c�+�&6�&6�$�*�&D�&D��)��N�+�+�+��J�J�J�"&�*��/�/�J�J�{�B�B���$�$�$�$�	���
�	�����l��3�3�3�"9�$�"9�;�"G�����
�
�
r#c��|j�d�|jD����}i|j�|����}|r_d�d�t|�����D����}d�|jj	||��Sd�|jj	|��S)Nc3�4K�|]}t|��V��dSr��r�r�s  rr�z Func.__repr__.<locals>.<genexpr>��(����#P�#P��C��H�H�#P�#P�#P�#P�#P�#Pr#r�c3�`K�|])\}}t|��dzt|��zV��*dS)�=Nr�)r��key�vals   rr�z Func.__repr__.<locals>.<genexpr>�s;����^�^�H�C��c�#�h�h��n�s�3�x�x�7�^�^�^�^�^�^r#�
{}({}, {})ro)
�
arg_joiner�joinr�r��_get_repr_options�sortedrrCr�r)rr%r�s   rrDz
Func.__repr__�s�����#�#�#P�#P��8O�#P�#P�#P�P�P��:�4�:�:��!7�!7�!9�!9�:���	M��I�I�^�^��u�{�{�}�}�H]�H]�^�^�^�^�^�E��&�&�t�~�'>��e�L�L�L����t�~�6��=�=�=r#c��iS)zAReturn a dict of extra __init__() options to include in the repr.r"r;s rr�zFunc._get_repr_options�s���	r#c��|jSr��r�r;s rr�zFunc.get_source_expressions�s���&�&r#c��||_dSr�r�r�s  rr�zFunc.set_source_expressions�s��"'����r#TFc��|���}||_t|j��D]&\}}|�|||||��|j|<�'|Sr�)r�r��	enumerater�r/)	rr�r�r�r�r�r��posr�s	         rr/zFunc.resolve_expression�sd���I�I�K�K�� ���!�!�"6�7�7�	o�	o�H�C��(+�(>�(>�u�k�SX�Zc�em�(n�(n�A� ��%�%��r#c���|j�|��g}g}|jD]D}	|�|	��\}
}|�|
��|�|���Ei|j�|�}|�||d<n|�d|j��|p|�	d|j
��}|p|�	d|j��}|�|��x|d<|d<||z|fS)N�function�templater�r�r�)
rNrer�rMr"r�r��
setdefaultr�r3r�r�r�)
rrr	r�r�r�r�	sql_partsrr��arg_sql�
arg_params�datas
             rrzFunc.as_sql�s����/�/��5�5�5��	����*�	&�	&�C�"*�"2�"2�3�"7�"7��G�Z����W�%�%�%��M�M�*�%�%�%�%�.�$�*�.�
�.����'�D�����O�O�J��
�6�6�6��B�t�x�x�
�D�M�B�B���J�4�8�8�L�$�/�#J�#J�
�.8�o�o�i�.H�.H�H��]��d�7�m��$���&�&r#c���t�����}|jdd�|_|j���|_|Sr�)r?r�r�r�)rr�r�s  �rr�z	Func.copy�s@����w�w�|�|�~�~��"&�"9�!�!�!�"<����Z�_�_�&�&��
��r#r)NNN)rrr r!r�r�r�r�r�rDr�r�r�r/rr�r[r\s@rr�r�{s�����������H�.�H��J��E�26��������>�>�>����'�'�'�(�(�(�����'�'�'�'�*��������r#r�c�N��eZdZdZdZd�fd�	Zd�Zd�Zd�fd�	Zdd	�Z	d
�Z
�xZS)
r1z9Represent a wrapped value as a node within an expression.FNc�Z��t���|���||_dS)a:
        Arguments:
         * value: the value this expression represents. The value will be
           added into the sql parameter list and properly quoted.

         * output_field: an instance of the model field type that this
           expression will return, such as IntegerField() or CharField().
        r�N)r?r�r�)rr�rr�s   �rr�zValue.__init__�s+���	�����l��3�3�3���
�
�
r#c�L�d�|jj|j��Srn)rCr�rr�r;s rrDzValue.__repr__�s�����t�~�6��
�C�C�Cr#c�,�|j�|��|j}|j}|�`|jr|�||���}n|�||���}t|d��r|�|||��|gfS|�dgfSd|gfS)N)r	�get_placeholder�NULLz%s)	rNrer�r�r��get_db_prep_save�get_db_prep_valuer0r�)rrr	r�rs     rrzValue.as_sql�s�����/�/��5�5�5��j���1���#��}�
Q�"�3�3�C�J�3�O�O���"�4�4�S�Z�4�P�P���|�%6�7�7�
V�#�3�3�C��:�N�N�QT�PU�U�U��;��2�:���c�U�{�r#Tc�`��t���|||||��}||_|Sr�)r?r/r�)rr�r�r�r�r�r�r�s       �rr/zValue.resolve_expression�s.����G�G�&�&�u�k�5�)�X�V�V����
��r#c��gSr�r"r�s  rr�zValue.get_group_by_cols�r�r#c��t|jt��rtj��St|jt
��rtj��St|jt��rtj��St|jt��rtj
��St|jtj��rtj��St|jtj
��rtj��St|jtj��rtj��St|jtj��rtj��St|jt&��rtj��St|jt*��rtj��St|jt.��rtj��SdSr�)r�r�r�r
�	CharField�boolr�r�r�r�r��datetimerV�daterT�timerU�	timedeltarSrr�bytes�BinaryFieldr�	UUIDFieldr;s rr�zValue._resolve_output_field�s����d�j�#�&�&�	&��#�%�%�%��d�j�$�'�'�	)��&�(�(�(��d�j�#�&�&�	)��&�(�(�(��d�j�%�(�(�	'��$�&�&�&��d�j�(�"3�4�4�	*��'�)�)�)��d�j�(�-�0�0�	&��#�%�%�%��d�j�(�-�0�0�	&��#�%�%�%��d�j�(�"4�5�5�	*��'�)�)�)��d�j�'�*�*�	)��&�(�(�(��d�j�%�(�(�	(��%�'�'�'��d�j�$�'�'�	&��#�%�%�%�	&�	&r#r�r)rrr r!r�r�rDrr/r�r�r[r\s@rr1r1�s��������C�C��H�
�
�
�
�
�
�D�D�D����$������
����&�&�&�&�&�&�&r#r1c�@��eZdZd	�fd�	Zd�Zd�Zd	d�Zd
�fd�	Z�xZS)�RawSQLNc���|�tj��}||c|_|_t	���|���dSr>)r
rrrr?r�)rrrrr�s    �rr�zRawSQL.__init__sE�����!�<�>�>�L� #�V����$�+�
�����l��3�3�3�3�3r#c�X�d�|jj|j|j��S�Nr�)rCr�rrrr;s rrDzRawSQL.__repr__s#���"�"�4�>�#:�D�H�d�k�R�R�Rr#c�$�d|jz|jfSrL)rrr�s   rrz
RawSQL.as_sqls����� �$�+�-�-r#c��|gSr�r"r�s  rr�zRawSQL.get_group_by_cols�	���v�
r#TFc�t��|jj���D]t}|jjD]e}|���\}}	|	���|j���vr|�|j|||��n�f�ut���
|||||��Sr�)rr�get_parent_list�local_fields�get_attname_column�lowerrrqr�r?r/)rr�r�r�r�r��parent�parent_field�_�column_namer�s          �rr/zRawSQL.resolve_expressions�����k�'�7�7�9�9�	�	�F� &�� 9�
�
��!-�!@�!@�!B�!B���;��$�$�&�&�$�(�.�.�*:�*:�:�:��%�%�l�&7��e�Y�W�W�W��E�;���w�w�)�)�%��e�Y�PX�Y�Y�Yr#r�r)	rrr r�rDrr�r/r[r\s@rr�r�
s��������4�4�4�4�4�4�S�S�S�.�.�.�����Z�Z�Z�Z�Z�Z�Z�Z�Z�Zr#r�c��eZdZd�Zd�ZdS)�Starc��dS)Nz'*'r"r;s rrDz
Star.__repr__)s���ur#c�
�dgfS)Nr(r"r�s   rrzStar.as_sql,s���B�w�r#N)rrr rDrr"r#rr�r�(s2�������������r#r�c�H��eZdZdZdZd
�fd�	Zd�Zd�Zd�Zd
d�Z	d	�Z
�xZS)�ColTFNc�r��|�|}t���|���||c|_|_dSr>)r?r�r��target)rr�r�rr�s    �rr�zCol.__init__5s=�����!�L�
�����l��3�3�3�"'����
�D�K�K�Kr#c���|j|j}}|r|t|��fnt|��f}d�|jjd�|����S)Nror�)r�r�r�rCr�rr�)rr�r��identifierss    rrDzCol.__repr__;sV���
�D�K�v��.3�G�u�c�&�k�k�*�*�#�f�+�+������t�~�6��	�	�+�8N�8N�O�O�Or#c��|j|jj}}|r||fn|f}d�t	|j|����}|gfS)N�.)r�r��columnr��map�quote_name_unless_alias)rrr	r�r�r�rs       rrz
Col.as_sql@sM���
�D�K�$6�v��).�=�u�f�o�o�V�I���h�h�s�8�;�[�I�I�J�J���B�w�r#c��|j�|S|�|�|j|j��|j|j��Sr�)r�r�r3r�rr�s  rr�zCol.relabeled_cloneFs=���:���K��~�~�h�l�l�4�:�t�z�B�B�D�K�QU�Qb�c�c�cr#c��|gSr�r"r�s  rr�zCol.get_group_by_colsKr�r#c��|j|jkr|j�|��S|j�|��|j�|��zSr�)r�rr�r�s  rr�zCol.get_db_convertersNsZ���;�$�+�+�+��$�6�6�z�B�B�B��!�3�3�J�?�?���-�-�j�9�9�:�	;r#r�)rrr r�r}r�rDrr�r�r�r[r\s@rr�r�0s��������!%�� ��0�0�0�0�0�0�P�P�P�
���d�d�d�
����;�;�;�;�;�;�;r#r�c�P��eZdZdZ�fd�Zd�Zd�Zd�Zd
d	�Zd
�Z	d�Z
dd�Z�xZS)�Refz~
    Reference to column alias of the query. For example, Ref('sum_cost') in
    qs.annotate(sum_cost=Sum('cost')) query.
    c�f��t�����||c|_|_dSr�)r?r��refsr�)rr�r�r�s   �rr�zRef.__init__Zs-���
��������!%�v���	�4�;�;�;r#c�X�d�|jj|j|j��Sr�)rCr�rr�r�r;s rrDzRef.__repr__^s#���"�"�4�>�#:�D�I�t�{�S�S�Sr#c��|jgSr��r�r;s rr�zRef.get_source_expressionsas����}�r#c��|\|_dSr�r�r�s  rr�zRef.set_source_expressionsds�������r#NTFc��|Sr�r"rrs      rr/zRef.resolve_expressiongs	���r#c��|Sr�r"r�s  rr�zRef.relabeled_clonelrr#c�D�|j�|j��gfSr�)rN�
quote_namer�r�s   rrz
Ref.as_sqlos���~�(�(���3�3�R�7�7r#c��|gSr�r"r�s  rr�zRef.get_group_by_colsrr�r#rr�)
rrr r!r�rDr�r�r/r�rr�r[r\s@rr�r�Us����������.�.�.�.�.�T�T�T�����������
���8�8�8��������r#r�c�2��eZdZdZdZ�fd�Zd�Zd�Z�xZS)�ExpressionListz�
    An expression containing multiple expressions. Can be used to provide a
    list of expressions as an argument to another expression, like an
    ordering clause.
    z%(expressions)sc�v��|std|jjz���t��j|i|��dS)Nz$%s requires at least one expression.)rzr�rr?r�)rr�r�r�s   �rr�zExpressionList.__init__~sG����	_��C�d�n�F]�]�^�^�^������+�/��/�/�/�/�/r#c�T�|j�d�|jD����S)Nc3�4K�|]}t|��V��dSr�r�r�s  rr�z)ExpressionList.__str__.<locals>.<genexpr>�r�r#)r�r�r�r;s rrFzExpressionList.__str__�s*����#�#�#P�#P��8O�#P�#P�#P�P�P�Pr#c� �|j||fi|��Sr�)r)rrr	rs    rrzExpressionList.as_sqlite�s���t�{�8�Z�A�A�=�A�A�Ar#)	rrr r!r�r�rFrr[r\s@rr�r�vsq���������
!�H�0�0�0�0�0�
Q�Q�Q�B�B�B�B�B�B�Br#r�c�F��eZdZdZ�fd�Zd�Zd�Zd	�fd�	Zd�Zd�Z	�xZ
S)
�ExpressionWrapperz�
    An expression that can wrap another expression so that it can provide
    extra context to the inner expression, such as the output_field.
    c�Z��t���|���||_dSr>)r?r�r�)rr�rr�s   �rr�zExpressionWrapper.__init__�s)���
�����l��3�3�3�$����r#c� �|d|_dS�Nr�r�r�s  rr�z(ExpressionWrapper.set_source_expressions������(����r#c��|jgSr�rr;s rr�z(ExpressionWrapper.get_source_expressions��
���� � r#Nc����t|jt��r;|j���}|j|_|�|���St
�����S)N)r�)r�r�rr�rr�r?)rr�r�r�s   �rr�z#ExpressionWrapper.get_group_by_cols�sd����d�o�z�2�2�	=���-�-�/�/�J�&*�&7�J�#��/�/�e�/�<�<�<��w�w�(�(�*�*�*r#c�6�|�|j��Sr�)rMr�r�s   rrzExpressionWrapper.as_sql�s�������0�0�0r#c�L�d�|jj|j��Srn)rCr�rr�r;s rrDzExpressionWrapper.__repr__�s�����t�~�6���H�H�Hr#r�)rrr r!r�r�r�r�rrDr[r\s@rr�r��s����������
%�%�%�%�%�#�#�#�!�!�!�+�+�+�+�+�+�1�1�1�I�I�I�I�I�I�Ir#r�c�^��eZdZdZdZd�fd�	Zd�Zd�Zd�Zd�Z	d	�Z
dd�Zdd�Zdd
�Z
�xZS)�Whenz"WHEN %(condition)s THEN %(result)sFNc���|r1|�tdi|��d}}n t|dd��rt|fi|��d}}|�t|dd��r|rtd���t|t��r|st	d���t���d���||_|�|��d|_	dS)NrXFzLWhen() supports a Q object, a boolean expression, or lookups as a condition.z1An empty Q() can't be used as a When() condition.r�rr")
rr[r�r�rzr?r��	conditionr��result)rr
�then�lookupsr�s    �rr�z
When.__init__�s�����	C�� �%&�\�\��\�\�4�7�	�	���M�5�9�9�
C�%&�y�%<�%<�G�%<�%<�d�7�	���G�I�}�e�$L�$L��PW���"���
��i��#�#�	R�I�	R��P�Q�Q�Q�
�����d��+�+�+�"����-�-�d�3�3�A�6����r#c�&�d|j�d|j��S)NzWHEN z THEN �r
rr;s rrFzWhen.__str__�s���$(�N�N�N�D�K�K�@�@r#c�(�d|jj�d|�d�S�N�<z: �>�r�rr;s rrDz
When.__repr__�����!�^�4�4�4�d�d�d�;�;r#c��|j|jgSr�rr;s rr�zWhen.get_source_expressions�s������,�,r#c�$�|\|_|_dSr�rr�s  rr�zWhen.set_source_expressions�s��&+�#������r#c��|jjgSr�)rr�r;s rr�zWhen.get_source_fields�s����1�2�2r#Tc���|���}||_t|jd��r#|j�||||d��|_|j�|||||��|_|S)Nr/F)r�r�r0r
r/rr�s       rr/zWhen.resolve_expression�sr���I�I�K�K�� ����1�;� 4�5�5�	f��+�8�8���U�T]�_d�e�e�A�K��8�.�.�u�k�5�)�U]�^�^����r#c�:�|j�|��|}g}|�|j��\}}||d<|�|��|�|j��\}	}
|	|d<|�|
��|p|j}||z|fS)Nr
r)rNrerMr
r�rr�)rrr	r�r�template_params�
sql_params�
condition_sql�condition_params�
result_sql�
result_paramss           rrzWhen.as_sql�s�����/�/��5�5�5�'���
�*2�*:�*:�4�>�*J�*J�'�
�'�'4���$����*�+�+�+�$,�$4�$4�T�[�$A�$A�!�
�M�$.���!����-�(�(�(��,�t�}���/�)�:�5�5r#c��g}|���D])}|�|������*|Sr��r�r�r�r�s    rr�zWhen.get_group_by_cols�sH�����1�1�3�3�	4�	4�F��K�K��0�0�2�2�3�3�3�3��r#�NNrr�)rrr r�rXr�rFrDr�r�r�r/rr�r[r\s@rrr�s��������3�H��K�7�7�7�7�7�7�"A�A�A�<�<�<�-�-�-�,�,�,�3�3�3�����6�6�6�6��������r#rc�p��eZdZdZdZdZddd��fd�
Zd�Zd�Zd	�Z	d
�Z
dd
�Z�fd�Zdd�Z
d�fd�	Z�xZS)�Casez�
    An SQL searched CASE expression:

        CASE
            WHEN n > 0
                THEN 'positive'
            WHEN n < 0
                THEN 'negative'
            ELSE 'zero'
        END
    z#CASE %(cases)s ELSE %(default)s ENDr�N)�defaultrc���td�|D����std���t���|��t	|��|_|�|��d|_||_dS)Nc3�@K�|]}t|t��V��dSr�)r�r)r��cases  rr�z Case.__init__.<locals>.<genexpr>�s,����<�<�d�:�d�D�)�)�<�<�<�<�<�<r#z.Positional arguments must all be When objects.r)	�allr�r?r��list�casesr�r&r�)rr&rr,r�r�s     �rr�z
Case.__init__�s|����<�<�e�<�<�<�<�<�	N��L�M�M�M�
������&�&�&��%�[�[��
��.�.�w�7�7��:�����
�
�
r#c�`�dd�d�|jD�����d|j��S)NzCASE r�c3�4K�|]}t|��V��dSr�r�)r�r�s  rr�zCase.__str__.<locals>.<genexpr>s(����.J�.J�!�s�1�v�v�.J�.J�.J�.J�.J�.Jr#z, ELSE )r�r,r&r;s rrFzCase.__str__s6���%)�Y�Y�.J�.J�t�z�.J�.J�.J�%J�%J�%J�%J�D�L�L�Y�Yr#c�(�d|jj�d|�d�Srrr;s rrDz
Case.__repr__rr#c�"�|j|jgzSr��r,r&r;s rr�zCase.get_source_expressionss���z�T�\�N�*�*r#c�$�|�^|_|_dSr�r1r�s  rr�zCase.set_source_expressionss��$)�!���T�\�\�\r#TFc��|���}||_t|j��D]&\}}|�|||||��|j|<�'|j�|||||��|_|Sr�)r�r�r�r,r/r&)	rr�r�r�r�r�r�r�r)s	         rr/zCase.resolve_expressions~���I�I�K�K�� ���"�1�7�+�+�	c�	c�I�C���2�2�5�+�u�i�Ya�b�b�A�G�C�L�L��I�0�0���U�I�W_�`�`��	��r#c�p��t�����}|jdd�|_|Sr�)r?r�r,)rr�r�s  �rr�z	Case.copys*����G�G�L�L�N�N���'�!�!�!�*����r#c��|j�|��|js|�|j��Si|j�|�}g}g}|jD]V}		|�|	��\}
}n#t$rY�(wxYw|�|
��|�|���W|�|j��\}}
|s||
fS|p|j	}|�
|��|d<||d<|�|
��|p|�d|j��}||z}|j
�"|j�|j��|z}||fS)Nr,r&r�)rNrer,rMr&r�rr"r��case_joinerr�r3r�r��unification_cast_sqlr)rrr	r�r6rr�
case_partsrr)�case_sql�case_params�default_sql�default_paramsrs               rrzCase.as_sqls�����/�/��5�5�5��z�	2��#�#�D�L�1�1�1�9�T�Z�9�=�9���
��
��J�	+�	+�D�
�(0�(8�(8��(>�(>�%��+�+��!�
�
�
���
�������h�'�'�'����k�*�*�*�*�&.�&6�&6�t�|�&D�&D�#��^��	/���.�.�!�5�T�%5��#.�#3�#3�J�#?�#?��� �%0��	�"����.�)�)�)��M��2�2�:�t�}�M�M����(���%�1��.�5�5�d�6G�H�H�3�N�C��J��s�A.�.
A;�:A;c���|js|j�|��St���|��Sr�)r,r&r�r?)rr�r�s  �rr�zCase.get_group_by_cols9s;����z�	9��<�1�1�%�8�8�8��w�w�(�(��/�/�/r#rr#r�)rrr r!r�r6r�rFrDr�r�r/r�rr�r[r\s@rr%r%�s��������
�
�5�H��K�'+�$��������Z�Z�Z�<�<�<�+�+�+�*�*�*����������
����60�0�0�0�0�0�0�0�0�0r#r%c�t��eZdZdZdZdZd�fd�	Zd�Zd�Zd�Z	�fd	�Z
ed
���Zd�Z
dd�Zdd
�Z�xZS)�Subqueryz�
    An explicit subquery. It may contain OuterRef() references to the outer
    query which will be resolved when it is applied to that query.
    z(%(subquery)s)FNc���t|d|��|_||_t���|��dS)Nr�)r[r�r�r?r�)r�querysetrr�r�s    �rr�zSubquery.__init__Gs;����X�w��9�9��
���
�
������&�&�&�&�&r#c��|jgSr��r�r;s rr�zSubquery.get_source_expressionsMs���
�|�r#c� �|d|_dSr�rCr�s  rr�zSubquery.set_source_expressionsPs���1�X��
�
�
r#c��|jjSr�)r�rr;s rr�zSubquery._resolve_output_fieldSs
���z�&�&r#c���t�����}|j���|_|Sr�)r?r�r�r�)rr�r�s  �rr�z
Subquery.copyVs.������������k�'�'�)�)����r#c��|jjSr�)r��external_aliasesr;s rrHzSubquery.external_aliases[s
���z�*�*r#c�4�|j���Sr�)r��get_external_colsr;s rrJzSubquery.get_external_cols_s���z�+�+�-�-�-r#c��|j�|��i|j�|�}|p|j}|�||��\}}|dd�|d<|p|�d|j��}||z}	|	|fS)Nr�r8�subqueryr�)rNrer�r�rr3r�)
rrr	r�r�rr�subquery_sqlrrs
          rrzSubquery.as_sqlbs�����/�/��5�5�5�9�T�Z�9�=�9���#����#(�<�<��*�#E�#E� ��j�&2�1�R�4�&8��
�#��M��2�2�:�t�}�M�M����(���J��r#c�Z�|rt||��gS|j���Sr�)r�r�r�r�s  rr�zSubquery.get_group_by_colsms3��
�	&���t�$�$�%�%��z�+�+�-�-�-r#r�r#)rrr r!r�r�r�r�r�r�r�rrHrJrr�r[r\s@rr?r??s���������� �H���'�'�'�'�'�'�������'�'�'������
�+�+��X�+�.�.�.�	�	�	�	�.�.�.�.�.�.�.�.r#r?c�Z��eZdZdZej��Zd�fd�	Zd�Zd	�fd�	Z	d�Z
�xZS)
�ExistszEXISTS(%(subquery)s)Fc�J��||_t��j|fi|��dSr�)�negatedr?r�)rrArRr�r�s    �rr�zExists.__init__{s/������������,�,�V�,�,�,�,�,r#c�H�|���}|j|_|Sr�)r�rR)rr�s  r�
__invert__zExists.__invert__s ���	�	���� �L�(��
��r#Nc����|j�|j���}t��j||f||d�|��\}}|jrd�|��}||fS)N)�using)r�r�zNOT {})r��existsr�r?rrRrC)	rrr	r�rr�rrr�s	        �rrz
Exists.as_sql�s�����
�!�!�
�(8�!�9�9��$�e�g�g�n���
���	
�
�
�
�
���V��<�	'��/�/�#�&�&�C��F�{�r#c�V�|jjjsd�|��}||fS)NzCASE WHEN {} THEN 1 ELSE 0 END)r	rc�&supports_boolean_expr_in_select_clauserCr
s    rrzExists.select_format�s2���"�+�R�	?�2�9�9�#�>�>�C��F�{�r#)Fr�)rrr r�r
r�rr�rTrrr[r\s@rrPrPws��������%�H�&�6�&�(�(�L�-�-�-�-�-�-����
������������r#rPc�X�eZdZdZdZdd�Zd�Zd�Zd�Zdd�Z	d	�Z
dd
�Zd�Zd�Z
d
�ZdS)r�z%(expression)s %(ordering)sFc��|r|rtd���||_||_||_t	|d��std���||_dS)Nz1nulls_first and nulls_last are mutually exclusiver/z%expression must be an expression type)rz�nulls_first�
nulls_lastrr0r�)rr�rr\r]s     rr�zOrderBy.__init__�sf���	R�:�	R��P�Q�Q�Q�&���$���$����z�#7�8�8�	F��D�E�E�E�$����r#c�X�d�|jj|j|j��S)Nz{}({}, descending={}))rCr�rr�rr;s rrDzOrderBy.__repr__�s-��&�-�-��N�#�T�_�d�o�G�G�	Gr#c� �|d|_dSr�rr�s  rr�zOrderBy.set_source_expressions�rr#c��|jgSr�rr;s rr�zOrderBy.get_source_expressions�rr#Nc���|p|j}|jjr|jrd|z}nL|jrd|z}n?|jr|jr|jjsd|z}n|jr|js|jjsd|z}|j�|��|�	|j
��\}}||jrdndd�|�}|p|j}||�d��z}||z���|fS)	Nz
%s NULLS LASTz%s NULLS FIRSTz%%(expression)s IS NULL, %sz%%(expression)s IS NOT NULL, %s�DESC�ASC)r��orderingz%(expression)s)
r�rc� supports_order_by_nulls_modifierr]r\r�order_by_nulls_firstrNrerMr��count�rstrip)rrr	r�r�expression_sqlr�placeholderss        rrzOrderBy.as_sql�sF���,�t�}����?�
	H���
7�*�X�5����!�
7�+�h�6�����
H���
H�$.�$7�$L�
H�9�8�C����!�
H��O�
H�(2�(;�(P�
H�=�x�G����/�/��5�5�5�!)�!1�!1�$�/�!B�!B����(�"&�/�<���u�
�
��
��
�,�t�}���(�.�.�!1�2�2�2���<�'�/�/�1�1�6�9�9r#c��t|jt��rO|���}t	t|jd���d���|_|j||��S|�||��S)NT)rF)r&)r�r�rPr�r%rr)rrr	r�s    r�	as_oraclezOrderBy.as_oracle�sz���d�o�v�.�.�	5��9�9�;�;�D�"��T�_�4�0�0�0�����D�O��4�;�x��4�4�4��{�{�8�Z�0�0�0r#c��g}|���D])}|�|������*|Sr�r"r�s    rr�zOrderBy.get_group_by_cols�sH�����1�1�3�3�	4�	4�F��K�K��0�0�2�2�3�3�3�3��r#c�p�|j|_|js|jr|j|_|j|_|Sr�)rr\r]r;s rrzOrderBy.reverse_ordering�sA��"�o�-�����	2�t��	2�#'�#3�3�D��"&�/�1�D�O��r#c��d|_dSr>�rr;s rr�zOrderBy.asc�s
������r#c��d|_dSrrrpr;s rrzOrderBy.desc�s
������r#)FFFr�)rrr r�rXr�rDr�r�rrlr�rr�rr"r#rr�r��s�������,�H��K�%�%�%�%�G�G�G�#�#�#�!�!�!�:�:�:�:�6
1�
1�
1�������� � � �����r#r�c�h��eZdZdZdZdZdZd�fd�	Zd�Zd�Z	d�Z
dd	�Z�fd
�Zd�Z
d�Zdd
�Z�xZS)�Windowz %(expression)s OVER (%(window)s)FTNc�j��||_||_||_t|dd��st	d|jjz���|j�At|jttf��s
|jf|_t|j�|_|j�^t|jttf��rt|j�|_n)t|jt��st	d���t���
|���|�|��d|_dS)NrFz3Expression '%s' isn't compatible with OVER clauses.zCorder_by must be either an Expression or a sequence of expressions.r�r)�partition_by�order_by�framer[rzr�rr�r#r+r�r�r?r�r��source_expression)rr�rurvrwrr�s      �rr�zWindow.__init__�s,���(��� ��
���
��z�#6��>�>�	��E��$�-�.���
�
��(��d�/�%���?�?�
9�%)�%6�$8��!� .��0A� B�D���=�$��$�-�$���7�7�
� .��
� >��
�
���
�~�>�>�
� �#����	�����l��3�3�3�!%�!8�!8��!D�!D�Q�!G����r#c��|jjSr�)rxrr;s rr�zWindow._resolve_output_fields���%�2�2r#c�6�|j|j|j|jgSr��rxrurvrwr;s rr�zWindow.get_source_expressionss���&��(9�4�=�$�*�U�Ur#c�<�|\|_|_|_|_dSr�r{r�s  rr�zWindow.set_source_expressionss��OT�L���� 1�4�=�$�*�*�*r#c�R�|j�|��|jjst	d���|�|j��\}}gg}}|j�J|j�||d���\}}	|�	|��|�	|	��|j
�\|�d��|�|j
��\}
}|�	|
��|�	|��|jrJ|�|j��\}}
|�d|z��|�	|
��|�	|��|p|j
}||d�|�����d�z|fS)Nz1This backend does not support window expressions.zPARTITION BY %(expressions)s)rr	r�z
 ORDER BY r��)r��window)rNrerc�supports_over_clauserrMrxrurr�rvr"rwr�r��strip)rrr	r��expr_sqlr�
window_sql�
window_params�sql_exprr�	order_sql�order_params�	frame_sql�frame_paramss              rrz
Window.as_sqls�����/�/��5�5�5��"�7�	Y�#�$W�X�X�X�#�+�+�D�,B�C�C���&�$&��M�
���(�#'�#4�#;�#;�!�j�7�$<�$�$� �H�j�
���h�'�'�'�� � ��,�,�,��=�$����l�+�+�+�&.�&6�&6�t�}�&E�&E�#�I�|����i�(�(�(�� � ��.�.�.��:�	/�&.�&6�&6�t�z�&B�&B�#�I�|����c�I�o�.�.�.�� � ��.�.�.��
�
�m�$�$�$��,�t�}���"��g�g�j�)�)�/�/�1�1�
�
�
���	r#c�b��t|jtj��rz|���}|j��}tj��|d_|j|��tt|���
||��S|�||��Sr�)r�rr
rr�r�r�r�r?rsrr)rrr	r�r�r�s     �rrzWindow.as_sqlite<s�����d�'��)<�=�=�	G��9�9�;�;�D�!<��!<�!>�!>��17�1B�1D�1D��q�!�.�'�D�'�(:�;�;�;����&�&�0�0��:�F�F�F��{�{�8�Z�0�0�0r#c��d�t|j��|jrdt|j��znd|jrdt|j��zndt|jpd����S)Nz{} OVER ({}{}{})z
PARTITION BY r~z	ORDER BY )rCr�rxrurvrwr;s rrFzWindow.__str__Fsx��!�(�(���&�'�'�8<�8I�Q�O�c�$�"3�4�4�4�4�r�04�
�E�K�#�d�m�,�,�,�,�2���
� �b�!�!�	
�
�	
r#c�(�d|jj�d|�d�Srrr;s rrDzWindow.__repr__Nrr#c��gSr�r"r�s  rr�zWindow.get_group_by_colsQr�r#)NNNNr�)rrr r�r�r�rr�r�r�r�rrrFrDr�r[r\s@rrsrs�s��������1�H������J�H�H�H�H�H�H�63�3�3�V�V�V�U�U�U� � � � �D1�1�1�1�1�
�
�
�<�<�<��������r#rsc�J�eZdZdZdZdd�Zd�Zd�Zd�Zd�Z	d
d	�Z
d
�Zd�ZdS)�WindowFrameaV
    Model the frame clause in window expressions. There are two types of frame
    clauses which are subclasses, however, all processing and validation (by no
    means intended to be complete) is done here. Thus, providing an end for a
    frame is optional (the default is UNBOUNDED FOLLOWING, which is the last
    row in the frame).
    z,%(frame_type)s BETWEEN %(start)s AND %(end)sNc�V�t|��|_t|��|_dSr�)r1�start�end�rr�r�s   rr�zWindowFrame.__init___s ���5�\�\��
���:�:����r#c�$�|\|_|_dSr��r�r�r�s  rr�z"WindowFrame.set_source_expressionscs��$���
�D�H�H�Hr#c��|j|jgSr�r�r;s rr�z"WindowFrame.get_source_expressionsfs���
�D�H�%�%r#c��|j�|��|�||jj|jj��\}}|j|j||d�zgfS)N��
frame_typer�r�)rNre�window_frame_start_endr�r�r�r�r�)rrr	r�r�s     rrzWindowFrame.as_sqlisj����/�/��5�5�5��0�0��T�Z�=M�t�x�~�^�^�
��s��}��/��� 
� 
�
��	�	r#c�(�d|jj�d|�d�Srrr;s rrDzWindowFrame.__repr__rrr#c��gSr�r"r�s  rr�zWindowFrame.get_group_by_colsur�r#c�2�|jj�>|jjdkr.dt|jj��tjjfz}n?|jj�"|jjdkrtjj}ntjj}|jj�1|jjdkr!d|jjtjj	fz}n?|jj�"|jjdkrtjj}ntjj
}|j|j||d�zS)Nrz%d %sr�)
r�r��absr	rN�	PRECEDING�CURRENT_ROW�UNBOUNDED_PRECEDINGr��	FOLLOWING�UNBOUNDED_FOLLOWINGr�r�r�s   rrFzWindowFrame.__str__xs����:��'�D�J�,<�q�,@�,@��s�4�:�#3�4�4�j�n�6N�O�O�E�E�
�Z�
�
)�d�j�.>�!�.C�.C��N�.�E�E��N�6�E��8�>�%�$�(�.�1�*<�*<��T�X�^�Z�^�-E�F�F�C�C�
�X�^�
'�D�H�N�a�,?�,?��.�,�C�C��.�4�C��}��/��� 
� 
�
�	
r#c� �td���)Nz3Subclasses must implement window_frame_start_end().r��rr	r�r�s    rr�z"WindowFrame.window_frame_start_end�s��!�"W�X�X�Xr#r#r�)
rrr r!r�r�r�r�rrDr�rFr�r"r#rr�r�Us���������>�H�����%�%�%�&�&�&����<�<�<�����
�
�
�(Y�Y�Y�Y�Yr#r�c��eZdZdZd�ZdS)�RowRange�ROWSc�8�|j�||��Sr�)rN�window_frame_rows_start_endr�s    rr�zRowRange.window_frame_start_end�s���~�9�9�%��E�E�Er#N�rrr r�r�r"r#rr�r��s-�������J�F�F�F�F�Fr#r�c��eZdZdZd�ZdS)�
ValueRange�RANGEc�8�|j�||��Sr�)rN�window_frame_range_start_endr�s    rr�z!ValueRange.window_frame_start_end�s���~�:�:�5�#�F�F�Fr#Nr�r"r#rr�r��s-�������J�G�G�G�G�Gr#r�)<r�r��	functoolsr�decimalr�uuidr�django.core.exceptionsrr�	django.dbrr	�django.db.modelsr
�django.db.models.constantsr�django.db.models.query_utilsr�django.utils.deconstructr
�django.utils.functionalr�django.utils.hashablerrr%r�rr@rFr:rLr2�	lru_cacher;r2rWrXr�rxr�r�r1r�r�r�r�r�r�rr%r?rPr�rsr�r�r�r"r#r�<module>r�st������������������������������=�=�=�=�=�=�=�=�3�3�3�3�3�3�3�3�#�#�#�#�#�#�1�1�1�1�1�1�*�*�*�*�*�*�4�4�4�4�4�4�3�3�3�3�3�3�/�/�/�/�/�/���������r
�r
�r
�r
�r
�r
�r
�r
�jo�o�o�o�o�o�o�o�d�#�#�#�#�#���#�#���#�>	�	�!�n�j�n�j�n�j�n�U�	�	�	�����S�!�!�!�!�!�"�!�!�H�H�H�H�H�+�Z�H�H�H�V;�;�;�;�;�+�;�;�;�<
f�
f�
f�
f�
f�,�
f�
f�
f�������
������<�����q����<	�	�	�	�	�q�	�	�	�G�G�G�G�G��z�G�G�G�TE&�E&�E&�E&�E&�J�E&�E&�E&�PZ�Z�Z�Z�Z�Z�Z�Z�Z�6�����:����";�";�";�";�";�*�";�";�";�J�����*����BB�B�B�B�B�T�B�B�B�*I�I�I�I�I�
�I�I�I�@@�@�@�@�@�:�@�@�@�FN0�N0�N0�N0�N0�:�N0�N0�N0�b5.�5.�5.�5.�5.�~�z�5.�5.�5.�p � � � � �X� � � �FP�P�P�P�P�j�P�P�P�fe�e�e�e�e�
��e�e�e�P8Y�8Y�8Y�8Y�8Y�*�8Y�8Y�8Y�vF�F�F�F�F�{�F�F�F�G�G�G�G�G��G�G�G�G�Gr#

Youez - 2016 - github.com/yon3zu
LinuXploit