
    fw                     b   d dl mZ d dlmZ d dlmZ d dlmZ ddl	m
Z
 ddlmZ ddlmZ dd	lmZ dd
lmZ erhd dlmZ d dlmZ d dlmZ d dlmZmZ  G d d          Z G d d          Z G d d          Z G d de          Z G d de          Z ed             Z! G d de          ZdS )    )	lru_cache)NO_DB_ALIAS)DatabaseWrapper)is_psycopg3   )PostGISAdapter)DatabaseFeatures)PostGISIntrospection)PostGISOperations)PostGISSchemaEditor)Dumper)Format)TypeInfo)TextBinaryLoader
TextLoaderc                       e Zd ZdS )GeometryTypeN__name__
__module____qualname__     a/var/www/equiseq/venv/lib/python3.11/site-packages/django/contrib/gis/db/backends/postgis/base.pyr   r              r   r   c                       e Zd ZdS )GeographyTypeNr   r   r   r   r   r      r   r   r   c                       e Zd ZdS )
RasterTypeNr   r   r   r   r   r      r   r   r   c                       e Zd Zd ZdS )BaseTextDumperc                 X    |j                                                                         S N)ewkbhexencodeselfobjs     r   dumpzBaseTextDumper.dump   s    8<<>>((***r   N)r   r   r   r*   r   r   r   r!   r!      s#        	+ 	+ 	+ 	+ 	+r   r!   c                   "    e Zd Zej        Zd ZdS )BaseBinaryDumperc                     |j         S r#   )r$   r'   s     r   r*   zBaseBinaryDumper.dump$   s	    8Or   N)r   r   r   r   BINARYformatr*   r   r   r   r,   r,   !   s*        	 	 	 	 	r   r,   c                       G  fddt                     } G d d|t                    } G d d|t                    }||fS )Nc                   8     e Zd Z fdZd Zd Zd Z xZS )$postgis_adapters.<locals>.BaseDumperc                     t                                                       t          d|fdi          | _        t          d|fdi          | _        t          dt
          fdi          | _        d S )NGeometryDumperoidGeographyDumperRasterDumper)super__init_subclass__typer4   r6   r!   r7   )clsbase_dumper	__class__geo_oidgeog_oid
raster_oids     r   r9   z6postgis_adapters.<locals>.BaseDumper.__init_subclass__*   s    ))+++%)${nug6F& &" '+%~x7H' '# $("^$5z7J$ $   r   c                 H    |j         r|j        rt          nt          S t          S r#   )is_geometry	geographyr   r   r   r(   r)   r/   s      r   get_keyz,postgis_adapters.<locals>.BaseDumper.get_key7   s#    ? &,/MK==|K%%r   c                     |j         r;|j        r|                     t                    S |                     t
                    S |                     t                    S r#   )rB   rC   r6   r   r4   r   r7   r   rD   s      r   upgradez,postgis_adapters.<locals>.BaseDumper.upgrade=   sS    ? 9} A#33MBBB#22<@@@,,Z888r   c                     t           r#   )NotImplementedErrorr'   s     r   r*   z)postgis_adapters.<locals>.BaseDumper.dumpF   s    ))r   )r   r   r   r9   rE   rG   r*   __classcell__)r=   r>   r?   r@   s   @r   
BaseDumperr2   )   su               & & &9 9 9* * * * * * *r   rK   c                       e Zd ZdS )+postgis_adapters.<locals>.PostGISTextDumperNr   r   r   r   PostGISTextDumperrM   I   s        Dr   rN   )r<   c                       e Zd Zej        ZdS )-postgis_adapters.<locals>.PostGISBinaryDumperN)r   r   r   r   r.   r/   r   r   r   PostGISBinaryDumperrP   L   s        ]FFFr   rQ   )r   r!   r,   )r>   r?   r@   rK   rN   rQ   s   ```   r   postgis_adaptersrR   '   s    	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*@	 	 	 	 	
 	 	 	 		# 	# 	# 	# 	#*:J 	# 	# 	# 	# !"555r   c                   \     e Zd ZeZi i i dZ fdZ fdZ fdZe	rd Z
ddZ xZS  xZS )	r   )geometryrC   rasterc                      t                      j        |i | |                    dd          t          k    r>t	          |           | _        t          |           | _        t          |           | _	        d S d S )Nalias )
r8   __init__getr   r	   featuresr   opsr
   introspection)r(   argskwargsr=   s      r   rY   zDatabaseWrapper.__init__[   st    $)&)))::gr""k11,T22DM(..DH!5d!;!;D 21r   c                    t                                                       |                                 5 }|                    ddg           t	          |                                          r	 d d d            d S |                    d           t          r|                     | j        d           d d d            d S # 1 swxY w Y   d S )Nz-SELECT 1 FROM pg_extension WHERE extname = %spostgisz&CREATE EXTENSION IF NOT EXISTS postgisT)	r8   prepare_databasecursorexecuteboolfetchoner   register_geometry_adapters
connection)r(   rc   r=   s     r   rb   z DatabaseWrapper.prepare_databaseb   s7     """[[]] 	GfNNJYKXXXFOO%%&& 	G 	G 	G 	G 	G 	G 	G 	G NNCDDD G //FFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   :C=7CCCc                     t                                          |          }t          r|                     |           |S r#   )r8   get_new_connectionr   rg   )r(   conn_paramsrh   r=   s      r   rj   z"DatabaseWrapper.get_new_connectiono   s<    WW//<<
 	8++J777r   c                 p   | j         |         }	 || j                 }n/# t          $ r" t          j        ||          }||| j        <   Y nw xY w|r_|                    |           |j                            |j        t                     |j                            |j        t                     |r|j        nd S r#   )_type_infosrW   KeyErrorr   fetchregisteradaptersregister_loaderr5   r   r   )r(   pg_connectiontypenameregistryinfos        r   _register_typezDatabaseWrapper._register_typew   s    '1H,
+ , , ,~mX>>'+$$$,  Sm,,,&66txLLL&66txAQRRR#-488-s    )A	A	Fc                    |r0| j         D ](}| j         |                             | j        d            )|                     |d          }|                     |d          }|                     |d          }t	          |||          \  }}|j                            t          |           |j                            t          |           d S )NrT   rC   rU   )rm   poprW   rw   rR   rq   register_dumperr   )	r(   rs   clear_cachesrt   r>   r?   r@   rN   rQ   s	            r   rg   z*DatabaseWrapper.register_geometry_adapters   s     E $ 0 E EH$X.224:tDDDD))-DDG**=+FFH,,]HEEJ5E:6 622 "22>CTUUU"22>CVWWWWWr   )F)r   r   r   r   SchemaEditorClassrm   rY   rb   rj   r   rw   rg   rJ   )r=   s   @r   r   r   R   s        +  K< < < < <G G G G G      X	. 	. 	.	X 	X 	X 	X 	X 	X 	X 	X#X X X Xr   r   N)"	functoolsr   django.db.backends.base.baser   "django.db.backends.postgresql.baser   PsycopgDatabaseWrapper)django.db.backends.postgresql.psycopg_anyr   adapterr   r[   r	   r]   r
   
operationsr   schemar   psycopg.adaptr   
psycopg.pqr   psycopg.typesr   psycopg.types.stringr   r   r   r   r   r!   r,   rR   r   r   r   <module>r      s/         4 4 4 4 4 4 X X X X X X A A A A A A # # # # # # & & & & & & / / / / / / ) ) ) ) ) ) ' ' ' ' ' ' B6$$$$$$!!!!!!&&&&&&AAAAAAAA                     + + + + + + + +
    6    '6 '6 Y'6TAX AX AX AX AX, AX AX AX AX AXr   