U
    e6                     @   s   d dl Z d dlmZ d dlmZ d dlmZ dd Ze jdd Z	e jd	d
 Z
ernd dlmZmZ dd Znd dlZd dlmZ dd ZdS )    N)connections)NO_DB_ALIAS)is_psycopg3c              
   C   sp   t |   Z}|d|f g }g }|D ] }||d  ||d  q(t|t|fW  5 Q R  S Q R X d S )Nz4SELECT oid, typarray FROM pg_type WHERE typname = %sr      )r   cursorexecuteappendtuple)connection_alias	type_namer   oids
array_oidsrow r   C/tmp/pip-unpacked-wheel-lctamlir/django/contrib/postgres/signals.pyget_type_oids   s     r   c                 C   s
   t | dS )z$Return hstore and hstore array OIDs.hstorer   r
   r   r   r   get_hstore_oids   s    r   c                 C   s
   t | dS )z$Return citext and citext array OIDs.citextr   r   r   r   r   get_citext_oids   s    r   )TypeInfor   c           	      K   s   | j dks| jtkrd S t| j\}}t||D ]"\}}td||}t|| j q0t	| j\}}|D ]}tdd|}|
| j qfd S )N
postgresqlr   r   r   )vendoraliasr   r   zipr   r   register_hstore
connectionr   register)	r   kwargsr   r   oid	array_oidZti_citext_oidsr   r   r   register_type_handlers$   s    r%   )r   c                 K   sr   | j dks| jtkrd S t| j\}}|r<t| jd||d t| j\}}|rntj	|dtj
}tj|d  d S )Nr   T)Zgloballyr!   r"   zcitext[])r   r   r   r   r   r   r   psycopg2
extensionsZnew_array_typeSTRINGZregister_type)r   r    r   r   r$   Z
array_typer   r   r   r%   6   s$    	     )	functoolsZ	django.dbr   Zdjango.db.backends.base.baser   Z)django.db.backends.postgresql.psycopg_anyr   r   	lru_cacher   r   Zpsycopg.typesr   r   r%   r&   Zpsycopg2.extrasr   r   r   r   r   <module>   s   


