B
    ©0H[  ã               @   sp   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 d dlmZ G dd„ deƒZd	S )
é    )Úsettings)Úcaches)ÚBaseDatabaseCache)ÚBaseCommandÚCommandError)ÚDEFAULT_DB_ALIASÚconnectionsÚmodelsÚrouterÚtransaction)ÚDatabaseErrorc               @   s,   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	S )
ÚCommandz7Creates the tables needed to use the SQL cache backend.Fc             C   s<   |j ddddd� |j dddtd	d
� |j d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
--databaseÚstoreÚdatabasezgNominates a database onto which the cache tables will be installed. Defaults to the "default" database.)ÚactionÚdestÚdefaultr   z	--dry-runÚ
store_trueÚdry_runzADoes not create the table, just prints the SQL that would be run.)r   r   r   )Úadd_argumentr   )ÚselfÚparser© r   útC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-6bm3nxem\django\django\core\management\commands\createcachetable.pyÚadd_arguments   s    zCommand.add_argumentsc             O   sv   |d }|d | _ |d }t|ƒr@xN|D ]}|  |||¡ q(W n2x0tjD ]&}t| }t|tƒrH|  ||j|¡ qHW d S )Nr   Ú	verbosityr   )	r    ÚlenÚcreate_tabler   ZCACHESr   Ú
isinstancer   Z_table)r   Z
tablenamesÚoptionsÚdbr   Ú	tablenameZcache_aliasÚcacher   r   r   Úhandle    s    


zCommand.handlec             C   sx  t |i ƒ}t ||j¡sd S t| }||j ¡ k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}	x¨|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�W d|	|ƒ g}x>t|ƒD ]2\}}| d||t|ƒd k �rrdndf ¡ �qLW | d¡ d |¡}|�rÈ| j 	|¡ x|D ]}| j 	|¡ �q®W d S tj||jjd��x | ¡ �d}y| |¡ W n4 t k
�r( } zt!d||f ƒ‚W d d }~X Y nX x|D ]}| |¡ �q0W W d Q R X W d Q R X | jdk�rt| 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);Ú
)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-   r1   ÚjoinÚ	enumerater!   r   ZatomicÚfeaturesZcan_rollback_ddlÚcursorÚexecuter   r   )r   r   r&   r   r'   r2   ÚfieldsZtable_outputZindex_outputÚqnÚfZfield_outputr-   Zfull_statementÚiÚlineZ	statementZcursÚer   r   r   r"   .   sd    





(.




$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   Zdjango.db.utilsr   r   r   r   r   r   Ú<module>   s   