
    ,hH                     B   S r SSKrSSKrSSKJr  SSKJr  SSKJ	r	  SSKJ
r
  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ r   SSK!J"r"   " S S\ RF                  5      r$ " S S\ RJ                  5      r& " S S \&\ RN                  5      r( " S! S"\&5      r) " S# S$\5      r* " S% S&\5      r+ " S' S(\ R&                  RX                  5      r- " S) S*\ R&                  R\                  5      r/ " S+ S,\ R&                  R`                  5      r1 " S- S.\5      r2 " S/ S0\5      r3 " S1 S2\5      r4 " S3 S4\ Rj                  5      r6 " S5 S6\ Rn                  5      r8 " S7 S8\ Rr                  5      r: " S9 S:\ Rv                  5      r< " S; S<\ Rz                  5      r> " S= S>\ R~                  5      r@ " S? S@\ R                  5      rB " SA SB\ R                  5      rD " SC SD\5      rE " SE SF\\5      rF " SG SH\R                  5      rH " SI SJ\R                  5      rJ\R                  " 5       rL " SK SL\5      rM " SM SN5      rN " SO SP\5      rO " SQ SR\5      rP " SS ST\5      rQ\QrRg)Ua	  
.. dialect:: postgresql+pg8000
    :name: pg8000
    :dbapi: pg8000
    :connectstring: postgresql+pg8000://user:password@host:port/dbname[?key=value&key=value...]
    :url: https://pypi.org/project/pg8000/

.. versionchanged:: 1.4  The pg8000 dialect has been updated for version
   1.16.6 and higher, and is again part of SQLAlchemy's continuous integration
   with full feature support.

.. _pg8000_unicode:

Unicode
-------

pg8000 will encode / decode string values between it and the server using the
PostgreSQL ``client_encoding`` parameter; by default this is the value in
the ``postgresql.conf`` file, which often defaults to ``SQL_ASCII``.
Typically, this can be changed to ``utf-8``, as a more useful default::

    # client_encoding = sql_ascii # actually, defaults to database encoding
    client_encoding = utf8

The ``client_encoding`` can be overridden for a session by executing the SQL:

.. sourcecode:: sql

    SET CLIENT_ENCODING TO 'utf8';

SQLAlchemy will execute this SQL on all new connections based on the value
passed to :func:`_sa.create_engine` using the ``client_encoding`` parameter::

    engine = create_engine(
        "postgresql+pg8000://user:pass@host/dbname", client_encoding="utf8"
    )

.. _pg8000_ssl:

SSL Connections
---------------

pg8000 accepts a Python ``SSLContext`` object which may be specified using the
:paramref:`_sa.create_engine.connect_args` dictionary::

    import ssl

    ssl_context = ssl.create_default_context()
    engine = sa.create_engine(
        "postgresql+pg8000://scott:tiger@192.168.0.199/test",
        connect_args={"ssl_context": ssl_context},
    )

If the server uses an automatically-generated certificate that is self-signed
or does not match the host name (as seen from the client), it may also be
necessary to disable hostname checking::

    import ssl

    ssl_context = ssl.create_default_context()
    ssl_context.check_hostname = False
    ssl_context.verify_mode = ssl.CERT_NONE
    engine = sa.create_engine(
        "postgresql+pg8000://scott:tiger@192.168.0.199/test",
        connect_args={"ssl_context": ssl_context},
    )

.. _pg8000_isolation_level:

pg8000 Transaction Isolation Level
-------------------------------------

The pg8000 dialect offers the same isolation level settings as that
of the :ref:`psycopg2 <psycopg2_isolation_level>` dialect:

* ``READ COMMITTED``
* ``READ UNCOMMITTED``
* ``REPEATABLE READ``
* ``SERIALIZABLE``
* ``AUTOCOMMIT``

.. seealso::

    :ref:`postgresql_isolation_level`

    :ref:`psycopg2_isolation_level`


    N   )ranges)ARRAY)_DECIMAL_TYPES)_FLOAT_TYPES)
_INT_TYPES)ENUMINTERVAL)
PGCompiler)	PGDialect)PGExecutionContext)PGIdentifierPreparer)JSON)JSONB)JSONPathType)_SpaceVector)	OIDVECTOR)CITEXT   )exc)util)
processors)sqltypes)quoted_namec                       \ rS rSrSrSrg)	_PGString}   T N__name__
__module____qualname____firstlineno__render_bind_cast__static_attributes__r       ]/var/www/auris/envauris/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyr   r   }       r'   r   c                       \ rS rSrSrS rSrg)
_PGNumeric   Tc                    U R                   (       ag  U[        ;   a/  [        R                  " [        R
                  U R                  5      $ U[        ;   d
  U[        ;   a  g [        R                  " SU-  5      eU[        ;   a  g U[        ;   d
  U[        ;   a  [        R                  $ [        R                  " SU-  5      e)NzUnknown PG numeric type: %d)	asdecimalr   r   to_decimal_processor_factorydecimalDecimal_effective_decimal_return_scaler   r   r   InvalidRequestErrorto_floatselfdialectcoltypes      r(   result_processor_PGNumeric.result_processor   s    >>,&!>>OOT%I%I  N*g.C--1G;  ,&N*g.C!***--1G; r'   r   Nr!   r"   r#   r$   r%   r9   r&   r   r'   r(   r+   r+      s    r'   r+   c                       \ rS rSrSrSrSrg)_PGFloat   floatTr   Nr!   r"   r#   r$   __visit_name__r%   r&   r   r'   r(   r=   r=      s    Nr'   r=   c                       \ rS rSrS rSrg)_PGNumericNoBind   c                     g Nr   )r6   r7   s     r(   bind_processor_PGNumericNoBind.bind_processor       r'   r   N)r!   r"   r#   r$   rG   r&   r   r'   r(   rC   rC      s    r'   rC   c                       \ rS rSrSrS rSrg)_PGJSON   Tc                     g rF   r   r5   s      r(   r9   _PGJSON.result_processor   rI   r'   r   Nr;   r   r'   r(   rK   rK          r'   rK   c                       \ rS rSrSrS rSrg)_PGJSONB   Tc                     g rF   r   r5   s      r(   r9   _PGJSONB.result_processor   rI   r'   r   Nr;   r   r'   r(   rQ   rQ      rO   r'   rQ   c                       \ rS rSrS rSrg)_PGJSONIndexType   c                     [        S5      e)Nzshould not be here)NotImplementedErrorr6   dbapis     r(   get_dbapi_type_PGJSONIndexType.get_dbapi_type   s    !"677r'   r   Nr!   r"   r#   r$   r\   r&   r   r'   r(   rV   rV      s    8r'   rV   c                       \ rS rSrSrSrSrg)_PGJSONIntIndexType   json_int_indexTr   Nr@   r   r'   r(   r`   r`          %Nr'   r`   c                       \ rS rSrSrSrSrg)_PGJSONStrIndexType   json_str_indexTr   Nr@   r   r'   r(   re   re      rc   r'   re   c                       \ rS rSrSrg)_PGJSONPathType   r   Nr!   r"   r#   r$   r&   r   r'   r(   ri   ri          r'   ri   c                       \ rS rSrS rSrg)_PGEnum   c                     UR                   $ rF   )UNKNOWNrZ   s     r(   r\   _PGEnum.get_dbapi_type   s    }}r'   r   Nr^   r   r'   r(   rn   rn      s    r'   rn   c                   .    \ rS rSrSrS r\S 5       rSrg)_PGInterval   Tc                     UR                   $ rF   r
   rZ   s     r(   r\   _PGInterval.get_dbapi_type   s    ~~r'   c                 (    [        UR                  S9$ )N)	precision)rt   second_precision)clsintervalkws      r(   adapt_emulated_to_native$_PGInterval.adapt_emulated_to_native   s    X%>%>??r'   r   N)	r!   r"   r#   r$   r%   r\   classmethodr~   r&   r   r'   r(   rt   rt      s#     @ @r'   rt   c                       \ rS rSrSrSrg)_PGTimeStamp   Tr   Nr    r   r'   r(   r   r      r)   r'   r   c                       \ rS rSrSrSrg)_PGDate   Tr   Nr    r   r'   r(   r   r      r)   r'   r   c                       \ rS rSrSrSrg)_PGTime   Tr   Nr    r   r'   r(   r   r      r)   r'   r   c                       \ rS rSrSrSrg)
_PGInteger   Tr   Nr    r   r'   r(   r   r      r)   r'   r   c                       \ rS rSrSrSrg)_PGSmallInteger   Tr   Nr    r   r'   r(   r   r      r)   r'   r   c                       \ rS rSrSrg)_PGNullType   r   Nrk   r   r'   r(   r   r      rl   r'   r   c                       \ rS rSrSrSrg)_PGBigInteger   Tr   Nr    r   r'   r(   r   r      r)   r'   r   c                       \ rS rSrSrSrg)
_PGBoolean   Tr   Nr    r   r'   r(   r   r      r)   r'   r   c                       \ rS rSrSrSrg)_PGARRAY   Tr   Nr    r   r'   r(   r   r      r)   r'   r   c                       \ rS rSrSrg)_PGOIDVECTOR   r   Nrk   r   r'   r(   r   r      rl   r'   r   c                        \ rS rSrS rS rSrg)_Pg8000Rangei  c                 @   ^ UR                   R                  mU4S jnU$ )Nc                    > [        U [        R                  5      (       a3  T" U R                  U R                  U R
                  U R                  5      n U $ rF   )
isinstancer   Rangelowerupperboundsempty)valuepg8000_Ranges    r(   to_range-_Pg8000Range.bind_processor.<locals>.to_range  s>    %..$KKellEKK Lr'   r[   r   )r6   r7   r   r   s      @r(   rG   _Pg8000Range.bind_processor  s    }}**	 r'   c                     S nU$ )Nc                     U b?  [         R                  " U R                  U R                  U R                  U R
                  S9n U $ )Nr   r   r   r   r   r   r   is_emptyr   s    r(   r   /_Pg8000Range.result_processor.<locals>.to_range  s9     KKKK <<..	 Lr'   r   )r6   r7   r8   r   s       r(   r9   _Pg8000Range.result_processor  s    	 r'   r   Nr!   r"   r#   r$   rG   r9   r&   r   r'   r(   r   r     s    
r'   r   c                        \ rS rSrS rS rSrg)_Pg8000MultiRangei  c                 @   ^ UR                   R                  mU4S jnU$ )Nc           	      4  > [        U [        5      (       a  / nU  Hw  n[        U[        R                  5      (       aD  UR	                  T" UR
                  UR                  UR                  UR                  5      5        Mf  UR	                  U5        My     U$ U $ rF   )	r   listr   r   appendr   r   r   r   )r   mrvr   s      r(   to_multirange7_Pg8000MultiRange.bind_processor.<locals>.to_multirange#  ss    %&&A!!V\\22		(!''188QWWM 		!  	r'   r   )r6   r7   r   r   s      @r(   rG    _Pg8000MultiRange.bind_processor   s    }}**	 r'   c                     S nU$ )Nc                 D    U c  g [         R                  " S U  5       5      $ )Nc              3      #    U  HD  n[         R                  " UR                  UR                  UR                  UR
                  S 9v   MF     g7f)r   Nr   ).0r   s     r(   	<genexpr>L_Pg8000MultiRange.result_processor.<locals>.to_multirange.<locals>.<genexpr>8  s=      ) # LL #s   AA)r   
MultiRanger   s    r(   r   9_Pg8000MultiRange.result_processor.<locals>.to_multirange4  s,    }(( ) #	)  r'   r   )r6   r7   r8   r   s       r(   r9   "_Pg8000MultiRange.result_processor3  s    		 r'   r   Nr   r   r'   r(   r   r     s    &r'   r   c                        \ rS rSrS rS rSrg)PGExecutionContext_pg8000iE  c                     S[        [        U 5      5      SS  < S[        [        5       5      SS  < 3n[        U R                  R                  5       U5      $ )Nc_   _)hexid_server_side_idServerSideCursor_dbapi_connectioncursor)r6   idents     r(   create_server_side_cursor3PGExecutionContext_pg8000.create_server_side_cursorF  sF     D]12.O4E0Fqr0JK 6 6 = = ?GGr'   c                 (    U R                   (       d  g g rF   )compiledr6   s    r(   pre_exec"PGExecutionContext_pg8000.pre_execJ  s    }} r'   r   N)r!   r"   r#   r$   r   r   r&   r   r'   r(   r   r   E  s    Hr'   r   c                       \ rS rSrSrS r\S 5       r\S 5       r\S 5       r	SS jr
S	 rS
 rSS jrS rS rS rSS jrSrg)r   iO  Tc                     X l         Xl        g rF   )r   r   )r6   r   r   s      r(   __init__ServerSideCursor.__init__R  s    
r'   c                 .    U R                   R                  $ rF   )r   
connectionr   s    r(   r   ServerSideCursor.connectionV  s    {{%%%r'   c                 .    U R                   R                  $ rF   )r   rowcountr   s    r(   r   ServerSideCursor.rowcountZ  s    {{###r'   c                 .    U R                   R                  $ rF   )r   descriptionr   s    r(   r   ServerSideCursor.description^  s    {{&&&r'   Nc                 d    SU R                   -   S-   U-   nU R                  R                  XBUS9  U $ )NzDECLARE z NO SCROLL CURSOR FOR )stream)r   r   execute)r6   	operationargsr   ops        r(   r   ServerSideCursor.executeb  s7    $**$'??)KBV4r'   c                 <    U R                   R                  X5        U $ rF   )r   executemany)r6   r   
param_setss      r(   r   ServerSideCursor.executemanyg  s    	6r'   c                     U R                   R                  SU R                  -   5        U R                   R                  5       $ )NzFETCH FORWARD 1 FROM )r   r   r   fetchoner   s    r(   r   ServerSideCursor.fetchonek  s1    3djj@A{{##%%r'   c                     Uc  U R                  5       $ U R                  R                  S[        [	        U5      5      -   S-   U R
                  -   5        U R                  R                  5       $ )NzFETCH FORWARD z FROM )fetchallr   r   strintr   )r6   nums     r(   	fetchmanyServerSideCursor.fetchmanyo  sX    ;==?"KK 3s3x=08;djjH ;;''))r'   c                     U R                   R                  SU R                  -   5        U R                   R                  5       $ )NzFETCH FORWARD ALL FROM )r   r   r   r   r   s    r(   r   ServerSideCursor.fetchallx  s1    5

BC{{##%%r'   c                     U R                   R                  SU R                  -   5        U R                   R                  5         g )NzCLOSE )r   r   r   closer   s    r(   r  ServerSideCursor.close|  s-    Htzz12r'   c                 6    U R                   R                  " U6   g rF   )r   setinputsizes)r6   sizess     r(   r  ServerSideCursor.setinputsizes  s    !!5)r'   c                     g rF   r   )r6   sizecolumns      r(   setoutputsizeServerSideCursor.setoutputsize  s    r'   )r   r   )r   NrF   )r!   r"   r#   r$   server_sider   propertyr   r   r   r   r   r   r   r   r  r  r  r&   r   r'   r(   r   r   O  sp    K & & $ $ ' '
&*&*r'   r   c                       \ rS rSrS rSrg)PGCompiler_pg8000i  c                 ~    U R                   " UR                  40 UD6S-   U R                   " UR                  40 UD6-   $ )Nz %% )processleftright)r6   binaryoperatorr}   s       r(   visit_mod_binary"PGCompiler_pg8000.visit_mod_binary  s>    LL++ll6<<.2./	
r'   r   N)r!   r"   r#   r$   r  r&   r   r'   r(   r  r    s    
r'   r  c                       \ rS rSrS rSrg)PGIdentifierPreparer_pg8000i  c                 F    [         R                  " U /UQ70 UD6  SU l        g )NF)r   r   _double_percents)r6   r   kwargss      r(   r   $PGIdentifierPreparer_pg8000.__init__  s"    %%d<T<V< %r'   )r  N)r!   r"   r#   r$   r   r&   r   r'   r(   r  r    s    &r'   r  c                      \ rS rSrSrSrSrSrSrSr	\
r\r\rSrSrSr\R(                  " \R,                  0 \R0                  \_\R4                  \_\R8                  \_\R<                  \_\R@                  \!_\RD                  \#_\$\%_\&\&_\R<                  RN                  \(_\R<                  RR                  \*_\R<                  RV                  \,_\R<                  RZ                  \._\R^                  \0_\1\0_\Rd                  \3_\Rd                  \3_\Rh                  \5_0 \Rl                  \7_\Rp                  \9_\Rt                  \;_\Rx                  \=_\R|                  \?_\R                  \A_\B\C_\DR                  \F_\DR                  \F_\DR                  \F_\DR                  \F_\DR                  \F_\DR                  \F_\DR                  \M_\DR                  \M_\DR                  \M_\DR                  \M_E\DR                  \M\DR                  \M0E5      rSS jrS\R                  S 5       rU\VS 5       rWS	 rXS
 rYS rZS r[S r\S r]S r^S r_S r`S raS rb SS jrc SS jrdS reS rf\R                  S 5       rgSrhg)PGDialect_pg8000i  pg8000TformatNc                     [         R                  " U 40 UD6  Xl        U R                  S:  a  [	        S5      eU R
                  (       a  [	        S5      eg )N)r         z$pg8000 1.16.6 or greater is requiredznThe pg8000 dialect does not fully implement ipaddress type handling; INET is supported by default, CIDR is not)r   r   client_encoding_dbapi_versionrY   _native_inet_types)r6   r)  r   s      r(   r   PGDialect_pg8000.__init__  sU    4*6*.+%&LMM""%  #r'   c                    U R                   (       ai  [        U R                   S5      (       aN  [        [        R                  " SU R                   R
                  5       Vs/ s H  n[        U5      PM     sn5      $ gs  snf )N__version__z(\d+)(?:[-\.]?|$))c   r/  r/  )r[   hasattrtuplerefindallr.  r   )r6   xs     r(   r*  PGDialect_pg8000._dbapi_version  sm    ::'$**m<<  ZZ,djj.D.D F   s   A<c                     [        S5      $ )Nr$  )
__import__)r{   s    r(   import_dbapiPGDialect_pg8000.import_dbapi  s    (##r'   c                     UR                  SS9nSU;   a  [        US   5      US'   UR                  UR                  5        / U4$ )Nuser)usernameport)translate_connect_argsr   updatequery)r6   urloptss      r(   create_connect_args$PGDialect_pg8000.create_connect_args  sH    ))6):T>tF|,DLCIIDzr'   c                     [        XR                  R                  5      (       a  S[        U5      ;   a  gS[        U5      ;   $ )Nznetwork errorTzconnection is closed)r   r[   InterfaceErrorr   )r6   er   r   s       r(   is_disconnectPGDialect_pg8000.is_disconnect  s?    a22333L
 9
  &Q//r'   c                     g)N)
AUTOCOMMITzREAD COMMITTEDzREAD UNCOMMITTEDzREPEATABLE READSERIALIZABLEr   )r6   dbapi_connections     r(   get_isolation_level_values+PGDialect_pg8000.get_isolation_level_values  s    
r'   c                     UR                  SS5      nUS:X  a  SUl        g SUl        UR                  5       nUR                  SU 35        UR                  S5        UR	                  5         g )Nr    rK  TFz;SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL COMMIT)replace
autocommitr   r   r  )r6   rM  levelr   s       r(   set_isolation_level$PGDialect_pg8000.set_isolation_level  sl    c3'L *.'*/'%,,.FNN##('+ NN8$LLNr'   c                     UR                  5       n UR                  SU(       a  SOS-  5        UR                  S5        UR                  5         g ! UR                  5         f = f)N-SET SESSION CHARACTERISTICS AS TRANSACTION %sz	READ ONLYz
READ WRITErR  r   r   r  r6   r   r   r   s       r(   set_readonlyPGDialect_pg8000.set_readonly  sQ    ""$	NN?"';\; NN8$LLNFLLN   .A A#c                     UR                  5       n UR                  S5        UR                  5       S   nUR                  5         US:H  $ ! UR                  5         f = f)Nzshow transaction_read_onlyr   onr   r   r   r  r6   r   r   vals       r(   get_readonlyPGDialect_pg8000.get_readonly*  sS    ""$	NN78//#A&CLLNd{ LLN   $A Ac                     UR                  5       n UR                  SU(       a  SOS-  5        UR                  S5        UR                  5         g ! UR                  5         f = f)NrY  
DEFERRABLEzNOT DEFERRABLErR  rZ  r[  s       r(   set_deferrablePGDialect_pg8000.set_deferrable4  sS    ""$	NN?#(<.>@ NN8$LLNFLLNr^  c                     UR                  5       n UR                  S5        UR                  5       S   nUR                  5         US:H  $ ! UR                  5         f = f)Nzshow transaction_deferrabler   r`  ra  rb  s       r(   get_deferrablePGDialect_pg8000.get_deferrable?  sS    ""$	NN89//#A&CLLNd{ LLNrf  c                     UR                  5       nUR                  SUR                  SS5       S35        UR                  S5        UR                  5         g )NzSET CLIENT_ENCODING TO ''z''rR  )r   r   rS  r  )r6   rM  r)  r   s       r(   _set_client_encoding%PGDialect_pg8000._set_client_encodingI  sS    !((*(''T2)	

 	x r'   c                 @    UR                   R                  SUS45        g Nr    )r   	tpc_beginr6   r   xids      r(   do_begin_twophase"PGDialect_pg8000.do_begin_twophaseS  s    ''C5r'   c                 8    UR                   R                  5         g rF   )r   tpc_preparerv  s      r(   do_prepare_twophase$PGDialect_pg8000.do_prepare_twophaseV  s    ))+r'   c                 @    UR                   R                  SUS45        g rs  )r   tpc_rollbackr6   r   rw  is_preparedrecovers        r(   do_rollback_twophase%PGDialect_pg8000.do_rollback_twophaseY  s     	**AsB<8r'   c                 @    UR                   R                  SUS45        g rs  )r   
tpc_commitr  s        r(   do_commit_twophase#PGDialect_pg8000.do_commit_twophase^  s     	((!S"6r'   c                 f    UR                   R                  5        Vs/ s H  o"S   PM	     sn$ s  snf )Nr   )r   tpc_recover)r6   r   rows      r(   do_recover_twophase$PGDialect_pg8000.do_recover_twophasec  s-    ","7"7"C"C"EF"E3A"EFFFs   .c                 @  ^ ^ / mS nTR                  U5        T R                  b  U 4S jnTR                  U5        T R                  SL a  S nTR                  U5        T R                  (       a  U 4S jnTR                  U5        [	        T5      S:  a  U4S jnU$ g )Nc                 L    U R                   [           U R                   [        '   g rF   )py_typesr   r   conns    r(   
on_connect/PGDialect_pg8000.on_connect.<locals>.on_connecti  s    )-s);DMM+&r'   c                 >   > TR                  U TR                  5        g rF   )rp  r)  r  r6   s    r(   r  r  p  s    ))$0D0DEr'   Fc                 P    U R                  SS 5        U R                  SS 5        g )Nie  c                     U $ rF   r   ss    r(   <lambda>APGDialect_pg8000.on_connect.<locals>.on_connect.<locals>.<lambda>y      r'   i  c                     U $ rF   r   r  s    r(   r  r  |  r  r'   )register_in_adapterr  s    r(   r  r  w  s$    ((k: ((k:r'   c                 v   > U R                  STR                  5        U R                  STR                  5        g )Nr   i  )r  _json_deserializerr  s    r(   r  r    s1    ((d.E.EF ((t/F/FGr'   r   c                 (   > T H  nU" U 5        M     g rF   r   )r  fnfnss     r(   r  r    s    BtH r'   )r   r)  r+  r  len)r6   r  r  s   ` @r(   r  PGDialect_pg8000.on_connectf  s    	< 	

:+F JJz"""e+; JJz"""H JJz"s8a< r'   c                     g)N;r   r   s    r(   _dialect_specific_select_one-PGDialect_pg8000._dialect_specific_select_one  s    r'   )r)  rF   )TF)ir!   r"   r#   r$   driversupports_statement_cachesupports_unicode_statementssupports_unicode_bindsdefault_paramstylesupports_sane_multi_rowcountr   execution_ctx_clsr  statement_compilerr  preparersupports_server_side_cursorsr%   description_encodingr   update_copyr   colspecsr   Stringr   NumericrC   Floatr=   r   rK   Booleanr   NullTyper   r   rQ   r   r   ri   JSONIndexTyperV   JSONIntIndexTyper`   JSONStrIndexTypere   Intervalrt   r   DateTimer   Dater   Timer   Integerr   SmallIntegerr   
BigIntegerr   Enumrn   r   r   r   r   r   	INT4RANGEr   	INT8RANGENUMRANGE	DATERANGETSRANGE	TSTZRANGEINT4MULTIRANGEr   INT8MULTIRANGENUMMULTIRANGEDATEMULTIRANGETSMULTIRANGETSTZMULTIRANGEr   memoized_propertyr*  r   r8  rC  rH  rN  rV  r\  rd  ri  rl  rp  rx  r|  r  r  r  r  r  r&   r   r'   r(   r#  r#    s   F#"&!!#' 1**H#'    %	
OOY%	
.%	
 NNH%	
 MM7	%	

 j%	
 {%	
 8%	
 F%	
 MM&&%	
 MM'')9%	
 MM**,?%	
 MM**,?%	
 {%	
 k%	
 |%	
  |!%	
" MM7#%	
$ MM7%%	
& j'%	
( !!?)%	
* +%	
, MM7-%	
. NNH/%	
0 |1%	
2 l3%	
4 l5%	
6 OO\7%	
8 l9%	
: NNL;%	
< l=%	
> !!#4?%	
@ !!#4A%	
B   "3C%	
D !!#4E%	
F !2!!#4I%	
(HT 
    $ $0
		6, :?9 :?7
G-^ 
 r'   r#  )S__doc__r0   r2  rt  r   arrayr   PGARRAYbaser   r   r   r	   r   r   r   r   r   jsonr   r   r   
pg_catalogr   r   typesr   r   r   enginer   sqlr   sql.elementsr   r  r   r  r+   r  r=   rC   rK   rQ   r  rV   r  r`   r  re   ri   rn   rt   r  r   r  r   r  r   r  r   r  r   r  r   r  r   r  r   r   r   AbstractSingleRangeImplr   AbstractMultiRangeImplr   counterr   r   r   r  r  r#  r7   r   r'   r(   <module>r     s5  Xr  	  #         $ &    $ !       ' !! 8z8>> 
z 
d u 8x}}22 8
(--88 (--88 	l 	d 
@( @8$$ hmm hmm !! h++ 	(## 	H'' !! w 	< 	611 6 55  F ,,. 2 5 5p

 
&"6 &Ay AH r'   