a
    Lcòf  ã                   @   sh   d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
mZmZmZmZmZ G dd„ deƒZdS )	é    )Úsettings)Úcaches)ÚBaseDatabaseCache)ÚBaseCommandÚCommandError)ÚDEFAULT_DB_ALIASÚDatabaseErrorÚconnectionsÚmodelsÚrouterÚtransactionc                   @   s,   e Zd ZdZg Zdd„ Zdd„ Zdd„ ZdS )	ÚCommandz7Creates the tables needed to use the SQL cache backend.c                 C   s6   |j ddddd� |j dtdd� |j d	d
dd� d S )NÚargsZ
table_nameÚ*zNOptional table names. Otherwise, settings.CACHES is used to find cache tables.)ÚmetavarÚnargsÚhelpz
--databasezgNominates a database onto which the cache tables will be installed. Defaults to the "default" database.)Údefaultr   z	--dry-runÚ
store_truezADoes not create the table, just prints the SQL that would be run.)Úactionr   )Úadd_argumentr   )ÚselfÚparser© r   úm/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/django/core/management/commands/createcachetable.pyÚadd_arguments   s     û	ýýzCommand.add_argumentsc                 O   sj   |d }|d | _ |d }|r8|D ]}|  |||¡ q"n.tjD ]&}t| }t|tƒr>|  ||j|¡ q>d S )NÚdatabaseÚ	verbosityÚdry_run)r   Úcreate_tabler   ZCACHESr   Ú
isinstancer   Ú_table)r   Z
tablenamesÚoptionsÚdbr   Ú	tablenameZcache_aliasÚcacher   r   r   Úhandle*   s    


zCommand.handlec                 C   s–  t |i ƒ}t ||j¡sd S t| }||j ¡ v rP| jdkrL| j 	d| ¡ d S t
jddddd�t
jdd�t
jd	dd
�f}g }g }|jj}	|D ] }
|	|
jƒ|
j|d�d|
js°dnd g}|
jrÊ| d¡ n|
jrÚ| d¡ |
j�r|
jrìdnd}| d||	d||
jf ƒ|	|ƒ|	|
jƒf ¡ | d |¡¡ qŽd|	|ƒ g}t|ƒD ]2\}}| d||t|ƒd k �rldndf ¡ �qF| d¡ d |¡}|�r¼| j 	|¡ |D ]}| j 	|¡ �q¤d S tj||jjd��– | ¡ �l}z| |¡ W n6 t �y } zt!d||f ƒ‚W Y d }~n
d }~0 0 |D ]}| |¡ �q$W d   ƒ n1 �sL0    Y  W d   ƒ n1 �sl0    Y  | jdk�r’| j 	d| ¡ d S )Nr   z Cache table '%s' already exists.Ú	cache_keyéÿ   T)ÚnameÚ
max_lengthÚuniqueÚprimary_keyÚvalue)r)   Úexpires)r)   Údb_index)Ú
connectionz%sNULLzNOT Ú zPRIMARY KEYZUNIQUEzUNIQUE zCREATE %sINDEX %s ON %s (%s);z%s_%sú zCREATE TABLE %s (z    %s%sé   ú,z);Ú
)ÚusingZ	savepointz9Cache table '%s' could not be created.
The error was: %s.zCache table '%s' created.)"r   r   Zallow_migrate_modelZcache_model_classr	   ZintrospectionZtable_namesr   ÚstdoutÚwriter
   Z	CharFieldZ	TextFieldZDateTimeFieldÚopsZ
quote_namer)   Zdb_typeÚnullr,   Úappendr+   r/   ÚjoinÚ	enumerateÚlenr   ZatomicÚfeaturesZcan_rollback_ddlÚcursorÚexecuter   r   )r   r   r$   r   r%   r0   ÚfieldsZtable_outputZindex_outputÚqnÚfZfield_outputr+   Zfull_statementÚiÚlineZ	statementZcursÚer   r   r   r   8   s„    

ÿ
ú
ý
üÿÿ	 ÿ

ÿ
ÿÿNzCommand.create_tableN)Ú__name__Ú
__module__Ú__qualname__r   Zrequires_system_checksr   r&   r   r   r   r   r   r      s
   r   N)Zdjango.confr   Zdjango.core.cacher   Zdjango.core.cache.backends.dbr   Zdjango.core.management.baser   r   Z	django.dbr   r   r	   r
   r   r   r   r   r   r   r   Ú<module>   s
    
