
    Hwgw                     6   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rVd 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y)    )	lru_cache)NO_DB_ALIAS)DatabaseWrapper)is_psycopg3   )PostGISAdapter)DatabaseFeatures)PostGISIntrospection)PostGISOperations)PostGISSchemaEditor)Dumper)Format)TypeInfo)TextBinaryLoader
TextLoaderc                       e Zd Zy)GeometryTypeN__name__
__module____qualname__     b/var/www/horilla/myenv/lib/python3.12/site-packages/django/contrib/gis/db/backends/postgis/base.pyr   r          r   r   c                       e Zd Zy)GeographyTypeNr   r   r   r   r   r      r   r   r   c                       e Zd Zy)
RasterTypeNr   r   r   r   r   r      r   r   r   c                       e Zd Zd Zy)BaseTextDumperc                 R    |j                   j                         j                         S N)ewkbhexencodeselfobjs     r   dumpzBaseTextDumper.dump   s    88<<>((**r   N)r   r   r   r*   r   r   r   r!   r!      s    	+r   r!   c                   *    e Zd Zej                  Zd Zy)BaseBinaryDumperc                     |j                   S r#   )r$   r'   s     r   r*   zBaseBinaryDumper.dump$   s    88Or   N)r   r   r   r   BINARYformatr*   r   r   r   r,   r,   !   s    	r   r,   c                 z      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      | _        y )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__*   sd    )+%)${nug6F&" '+%~x7H'# $("^$5z7J$ r   c                 V    |j                   r|j                  rt        S t        S t        S r#   )is_geometry	geographyr   r   r   r(   r)   r/   s      r   get_keyz,postgis_adapters.<locals>.BaseDumper.get_key7   s     ??,/MM=K|K%%r   c                     |j                   r6|j                  r| j                  t              S | j	                  t
              S | j                  t              S r#   )rB   rC   r6   r   r4   r   r7   r   rD   s      r   upgradez,postgis_adapters.<locals>.BaseDumper.upgrade=   sC    ??}}#33MBB#22<@@,,Z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   )   s    &9*r   rK   c                       e Zd Zy)+postgis_adapters.<locals>.PostGISTextDumperNr   r   r   r   PostGISTextDumperrM   I   s    r   rN   )r<   c                   $    e Zd Zej                  Zy)-postgis_adapters.<locals>.PostGISBinaryDumperN)r   r   r   r   r.   r/   r   r   r   PostGISBinaryDumperrP   L   s    ]]Fr   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        |   |i | |j                  dd      t        k7  r1t	        |       | _        t        |       | _        t        |       | _	        y y )Nalias )
r8   __init__getr   r	   featuresr   opsr
   introspection)r(   argskwargsr=   s      r   rY   zDatabaseWrapper.__init__[   sR    $)&)::gr"k1,T2DM(.DH!5d!;D 2r   c                 >   t         |           | j                         5 }|j                  ddg       t	        |j                               r
	 d d d        y |j                  d       t        r| j                  | j                  d       d d d        y # 1 sw Y   y xY w)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   s     "[[] 	GfNNJYKXFOO%&	G 	G NNCD //F	G 	G 	Gs   .B3BBc                 T    t         |   |      }t        r| j                  |       |S r#   )r8   get_new_connectionr   rg   )r(   conn_paramsrh   r=   s      r   rj   z"DatabaseWrapper.get_new_connectiono   s)    W/<
++J7r   c                    | j                   |   }	 || j                     }|re|j                  |       |j                  j                  |j                  t               |j                  j                  |j                  t               |r|j                  S d S # t        $ r( t        j                  ||      }||| j                  <   Y w xY w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,

+
 m,&&66txxL&&66txxAQR#488--  ,~~mX>'+$,s   B .CCc                    |r:| j                   D ]+  }| j                   |   j                  | j                  d        - | j                  |d      }| j                  |d      }| j                  |d      }t	        |||      \  }}|j
                  j                  t        |       |j
                  j                  t        |       y )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     $ 0 0 EH$$X.224::tDE ))-DG**=+FH,,]HEJ5E:622 ""22>CTU""22>CVWr   )F)r   r   r   r   SchemaEditorClassrm   rY   rb   rj   r   rw   rg   rJ   )r=   s   @r   r   r   R   s@    + K<G 	.	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 X A # & / ) '$!&A   + +
6  '6 '6TAX, AXr   