B
    CVvg                 @   sl   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlmZ e 	 dd Z
e 	 dd	 Zd
d ZdS )    N)ProgrammingError)register_hstore)connections)NO_DB_ALIASc          	   C   sd   t |   N}|d g }g }x(|D ] }||d  ||d  q&W t|t|fS Q R X dS )z$Return hstore and hstore array OIDs.zlSELECT t.oid, typarray FROM pg_type t JOIN pg_namespace ns ON typnamespace = ns.oid WHERE typname = 'hstore'r      N)r   cursorexecuteappendtuple)connection_aliasr   oids
array_oidsrow r   C/tmp/pip-install-o3oxmrkh/Django/django/contrib/postgres/signals.pyget_hstore_oids   s    
r   c          	   C   s4   t |   }|d tdd |D S Q R X dS )zReturn citext array OIDs.z5SELECT typarray FROM pg_type WHERE typname = 'citext'c             s   s   | ]}|d  V  qdS )r   Nr   ).0r   r   r   r   	<genexpr>"   s    z"get_citext_oids.<locals>.<genexpr>N)r   r   r   r
   )r   r   r   r   r   get_citext_oids   s    
r   c             K   s   | j dks| jtkrd S y$t| j\}}t| jd||d W n tk
rP   Y nX y.t| j}tj	
|dtj}tj	|d  W n tk
r   Y nX d S )NZ
postgresqlT)ZgloballyoidZ	array_oidzcitext[])vendoraliasr   r   r   
connectionr   r   psycopg2
extensionsZnew_array_typeSTRINGZregister_type)r   kwargsr   r   Zcitext_oidsZ
array_typer   r   r   register_type_handlers%   s    	
r   )	functoolsr   r   Zpsycopg2.extrasr   Z	django.dbr   Zdjango.db.backends.base.baser   	lru_cacher   r   r   r   r   r   r   <module>   s   