
    [hH                     0   d Z 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
 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 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"  G d de j#                  Z$ G d de j%                  Z& G d d e&e j'                  Z( G d! d"e&          Z) G d# d$e          Z* G d% d&e          Z+ G d' d(e j        j,                  Z- G d) d*e j        j.                  Z/ G d+ d,e j        j0                  Z1 G d- d.e          Z2 G d/ d0e          Z3 G d1 d2e          Z4 G d3 d4e j5                  Z6 G d5 d6e j7                  Z8 G d7 d8e j9                  Z: G d9 d:e j;                  Z< G d; d<e j=                  Z> G d= d>e j?                  Z@ G d? d@e jA                  ZB G dA dBe jC                  ZD G dC dDe          ZE G dE dFee          ZF G dG dHejG                  ZH G dI dJejI                  ZJ ejK                    ZL G dK dLe          ZM G dM dN          ZN G dO dPe          ZO G dQ dRe          ZP G dS dTe          ZQeQZRdS )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                       e Zd ZdZdS )	_PGStringTN__name__
__module____qualname__render_bind_cast     t/var/www/api.easyaligner.net/htdocs/venv_linux/lib/python3.11/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyr   r   }           r$   r   c                       e Zd ZdZd ZdS )
_PGNumericTc                 @   | j         rX|t          v r$t          j        t          j        | j                  S |t          v s	|t          v rd S t          j
        d|z            |t          v rd S |t          v s	|t          v rt          j        S t          j
        d|z            )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_processorz_PGNumeric.result_processor   s    > 	,&&!>OT%I   N**g.C.Ct-1G;   ,&&tN**g.C.C!**-1G;  r$   Nr   r    r!   r"   r5   r#   r$   r%   r(   r(      s)            r$   r(   c                       e Zd ZdZdZdS )_PGFloatfloatTNr   r    r!   __visit_name__r"   r#   r$   r%   r8   r8      s        Nr$   r8   c                       e Zd Zd ZdS )_PGNumericNoBindc                     d S Nr#   )r2   r3   s     r%   bind_processorz_PGNumericNoBind.bind_processor       tr$   N)r   r    r!   r@   r#   r$   r%   r=   r=      s#            r$   r=   c                       e Zd ZdZd ZdS )_PGJSONTc                     d S r?   r#   r1   s      r%   r5   z_PGJSON.result_processor   rA   r$   Nr6   r#   r$   r%   rC   rC      )            r$   rC   c                       e Zd ZdZd ZdS )_PGJSONBTc                     d S r?   r#   r1   s      r%   r5   z_PGJSONB.result_processor   rA   r$   Nr6   r#   r$   r%   rG   rG      rE   r$   rG   c                       e Zd Zd ZdS )_PGJSONIndexTypec                      t          d          )Nzshould not be here)NotImplementedErrorr2   dbapis     r%   get_dbapi_typez_PGJSONIndexType.get_dbapi_type   s    !"6777r$   Nr   r    r!   rO   r#   r$   r%   rJ   rJ      s#        8 8 8 8 8r$   rJ   c                       e Zd ZdZdZdS )_PGJSONIntIndexTypejson_int_indexTNr:   r#   r$   r%   rR   rR              %Nr$   rR   c                       e Zd ZdZdZdS )_PGJSONStrIndexTypejson_str_indexTNr:   r#   r$   r%   rV   rV      rT   r$   rV   c                       e Zd ZdS )_PGJSONPathTypeNr   r    r!   r#   r$   r%   rY   rY              Dr$   rY   c                       e Zd Zd ZdS )_PGEnumc                     |j         S r?   )UNKNOWNrM   s     r%   rO   z_PGEnum.get_dbapi_type   s
    }r$   NrP   r#   r$   r%   r]   r]      s#            r$   r]   c                   .    e Zd ZdZd Zed             ZdS )_PGIntervalTc                     |j         S r?   r
   rM   s     r%   rO   z_PGInterval.get_dbapi_type   s
    ~r$   c                 ,    t          |j                  S )N)	precision)ra   second_precision)clsintervalkws      r%   adapt_emulated_to_nativez$_PGInterval.adapt_emulated_to_native   s    X%>????r$   N)r   r    r!   r"   rO   classmethodri   r#   r$   r%   ra   ra      sI           @ @ [@ @ @r$   ra   c                       e Zd ZdZdS )_PGTimeStampTNr   r#   r$   r%   rl   rl      r&   r$   rl   c                       e Zd ZdZdS )_PGDateTNr   r#   r$   r%   rn   rn      r&   r$   rn   c                       e Zd ZdZdS )_PGTimeTNr   r#   r$   r%   rp   rp      r&   r$   rp   c                       e Zd ZdZdS )
_PGIntegerTNr   r#   r$   r%   rr   rr      r&   r$   rr   c                       e Zd ZdZdS )_PGSmallIntegerTNr   r#   r$   r%   rt   rt      r&   r$   rt   c                       e Zd ZdS )_PGNullTypeNrZ   r#   r$   r%   rv   rv      r[   r$   rv   c                       e Zd ZdZdS )_PGBigIntegerTNr   r#   r$   r%   rx   rx      r&   r$   rx   c                       e Zd ZdZdS )
_PGBooleanTNr   r#   r$   r%   rz   rz      r&   r$   rz   c                       e Zd ZdZdS )_PGARRAYTNr   r#   r$   r%   r|   r|      r&   r$   r|   c                       e Zd ZdS )_PGOIDVECTORNrZ   r#   r$   r%   r~   r~      r[   r$   r~   c                       e Zd Zd Zd ZdS )_Pg8000Rangec                 *    |j         j        fd}|S )Nc                     t          | t          j                  r" | j        | j        | j        | j                  } | S r?   )
isinstancer   Rangelowerupperboundsempty)valuepg8000_Ranges    r%   to_rangez-_Pg8000Range.bind_processor.<locals>.to_range  s@    %.. $KelEK  Lr$   rN   r   )r2   r3   r   r   s      @r%   r@   z_Pg8000Range.bind_processor  s-    }*	 	 	 	 	 r$   c                     d }|S )Nc                 b    | ,t          j        | j        | j        | j        | j                  } | S )Nr   r   r   r   r   r   r   is_emptyr   s    r%   r   z/_Pg8000Range.result_processor.<locals>.to_range  s9     KK <.	   Lr$   r#   )r2   r3   r4   r   s       r%   r5   z_Pg8000Range.result_processor  s    	 	 	 r$   Nr   r    r!   r@   r5   r#   r$   r%   r   r     s2        
 
 
    r$   r   c                       e Zd Zd Zd ZdS )_Pg8000MultiRangec                 *    |j         j        fd}|S )Nc           	         t          | t                    rng }| D ]g}t          |t          j                  r6|                     |j        |j        |j        |j                             R|                    |           h|S | S r?   )	r   listr   r   appendr   r   r   r   )r   mrvr   s      r%   to_multirangez7_Pg8000MultiRange.bind_processor.<locals>.to_multirange#  s    %&&  % %A!!V\22 %		(L!'18QWMM    		!	r$   r   )r2   r3   r   r   s      @r%   r@   z _Pg8000MultiRange.bind_processor   s.    }*	 	 	 	 	 r$   c                     d }|S )Nc                 F    | d S t          j        d | D                       S )Nc              3   n   K   | ]0}t          j        |j        |j        |j        |j                   V  1dS )r   Nr   ).0r   s     r%   	<genexpr>zL_Pg8000MultiRange.result_processor.<locals>.to_multirange.<locals>.<genexpr>8  sZ       ) )  L  ) ) ) ) ) )r$   )r   
MultiRanger   s    r%   r   z9_Pg8000MultiRange.result_processor.<locals>.to_multirange4  s?    }t( ) ) #	) ) )   r$   r#   )r2   r3   r4   r   s       r%   r5   z"_Pg8000MultiRange.result_processor3  s    		 		 		 r$   Nr   r#   r$   r%   r   r     s2          &    r$   r   c                       e Zd Zd Zd ZdS )PGExecutionContext_pg8000c                     dt          t          |                     dd          dt          t                                dd          }t          | j                                        |          S )Nc_   _)hexid_server_side_idServerSideCursor_dbapi_connectioncursor)r2   idents     r%   create_server_side_cursorz3PGExecutionContext_pg8000.create_server_side_cursorF  sb      D]]122...O4E4E0F0Fqrr0J0JK 6 = = ? ?GGGr$   c                     | j         sd S d S r?   )compiledr2   s    r%   pre_execz"PGExecutionContext_pg8000.pre_execJ  s    } 	F	 	r$   N)r   r    r!   r   r   r#   r$   r%   r   r   E  s5        H H H    r$   r   c                       e Zd ZdZd Zed             Zed             Zed             ZddZ	d	 Z
d
 ZddZd Zd Zd ZddZdS )r   Tc                 "    || _         || _        d S r?   )r   r   )r2   r   r   s      r%   __init__zServerSideCursor.__init__R  s    
r$   c                     | j         j        S r?   )r   
connectionr   s    r%   r   zServerSideCursor.connectionV  s    {%%r$   c                     | j         j        S r?   )r   rowcountr   s    r%   r   zServerSideCursor.rowcountZ  s    {##r$   c                     | j         j        S r?   )r   descriptionr   s    r%   r   zServerSideCursor.description^  s    {&&r$   r#   Nc                 `    d| j         z   dz   |z   }| j                            |||           | S )NzDECLARE z NO SCROLL CURSOR FOR )stream)r   r   execute)r2   	operationargsr   ops        r%   r   zServerSideCursor.executeb  s;    $*$'??)KBV444r$   c                 <    | j                             ||           | S r?   )r   executemany)r2   r   
param_setss      r%   r   zServerSideCursor.executemanyg  s    	:666r$   c                 x    | j                             d| j        z              | j                                         S )NzFETCH FORWARD 1 FROM )r   r   r   fetchoner   s    r%   r   zServerSideCursor.fetchonek  s4    3dj@AAA{##%%%r$   c                     ||                                  S | j                            dt          t	          |                    z   dz   | j        z              | j                                         S )NzFETCH FORWARD z FROM )fetchallr   r   strintr   )r2   nums     r%   	fetchmanyzServerSideCursor.fetchmanyo  se    ;==??"K 3s3xx==08;djH   ;'')))r$   c                 x    | j                             d| j        z              | j                                         S )NzFETCH FORWARD ALL FROM )r   r   r   r   r   s    r%   r   zServerSideCursor.fetchallx  s4    5
BCCC{##%%%r$   c                 |    | j                             d| j        z              | j                                          d S )NzCLOSE )r   r   r   closer   s    r%   r   zServerSideCursor.close|  s9    Htz1222r$   c                 $     | j         j        |  d S r?   )r   setinputsizes)r2   sizess     r%   r   zServerSideCursor.setinputsizes  s    !!5))))r$   c                     d S r?   r#   )r2   sizecolumns      r%   setoutputsizezServerSideCursor.setoutputsize  s    r$   )r#   Nr?   )r   r    r!   server_sider   propertyr   r   r   r   r   r   r   r   r   r   r   r#   r$   r%   r   r   O  s        K   & & X& $ $ X$ ' ' X'   
  & & &* * * *& & &  * * *     r$   r   c                       e Zd Zd ZdS )PGCompiler_pg8000c                 V     | j         |j        fi |dz    | j         |j        fi |z   S )Nz %% )processleftright)r2   binaryoperatorrh   s       r%   visit_mod_binaryz"PGCompiler_pg8000.visit_mod_binary  sF    DL++++dl6<..2../	
r$   N)r   r    r!   r   r#   r$   r%   r   r     s#        
 
 
 
 
r$   r   c                       e Zd Zd ZdS )PGIdentifierPreparer_pg8000c                 >    t          j        | g|R i | d| _        d S )NF)r   r   _double_percents)r2   r   kwargss      r%   r   z$PGIdentifierPreparer_pg8000.__init__  s1    %d<T<<<V<<< %r$   N)r   r    r!   r   r#   r$   r%   r   r     s#        & & & & &r$   r   c                   n   e Zd ZdZdZdZdZdZdZe	Z
eZeZdZdZdZ ej        ej        i ej        eej        eej        eej        eej        e ej!        e"e#e$e%e%ej        j&        e'ej        j(        e)ej        j*        e+ej        j,        e-ej.        e/e0e/ej1        e2ej1        e2ej3        e4i ej5        e6ej7        e8ej9        e:ej;        e<ej=        e>ej?        e@eAeBeCjD        eEeCjF        eEeCjG        eEeCjH        eEeCjI        eEeCjJ        eEeCjK        eLeCjM        eLeCjN        eLeCjO        eLeCjP        eLeCjQ        eLi          ZddZRejS        d             ZTeUd             ZVd ZWd	 ZXd
 ZYd ZZd Z[d Z\d Z]d Z^d Z_d Z`d Za	 ddZb	 ddZcd Zdd ZeejS        d             ZfdS )PGDialect_pg8000pg8000TformatNc                     t          j        | fi | || _        | j        dk     rt	          d          | j        rt	          d          d S )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_versionrL   _native_inet_types)r2   r   r   s      r%   r   zPGDialect_pg8000.__init__  sl    4**6***.++%&LMMM" 	%  	 	r$   c                     | j         rKt          | j         d          r6t          d t          j        d| j         j                  D                       S dS )N__version__c                 ,    g | ]}t          |          S r#   )r   )r   xs     r%   
<listcomp>z3PGDialect_pg8000._dbapi_version.<locals>.<listcomp>  s.        FF  r$   z(\d+)(?:[-\.]?|$))c   r   r   )rN   hasattrtuplerefindallr   r   s    r%   r   zPGDialect_pg8000._dbapi_version  sj    : 
	 '$*m<< 
	  Z,dj.D       <r$   c                      t          d          S )Nr   )
__import__)rf   s    r%   import_dbapizPGDialect_pg8000.import_dbapi  s    (###r$   c                     |                     d          }d|v rt          |d                   |d<   |                    |j                   g |fS )Nuser)usernameport)translate_connect_argsr   updatequery)r2   urloptss      r%   create_connect_argsz$PGDialect_pg8000.create_connect_args  sT    ))6)::T>>tF|,,DLCIDzr$   c                 ~    t          || j        j                  rdt          |          v rdS dt          |          v S )Nznetwork errorTzconnection is closed)r   rN   InterfaceErrorr   )r2   er   r   s       r%   is_disconnectzPGDialect_pg8000.is_disconnect  sP    a233 	3L
 L
 9
 9
 4 &Q//r$   c                     dS )N)
AUTOCOMMITzREAD COMMITTEDzREAD UNCOMMITTEDzREPEATABLE READSERIALIZABLEr#   )r2   dbapi_connections     r%   get_isolation_level_valuesz+PGDialect_pg8000.get_isolation_level_values  s    
 
r$   c                    |                     dd          }|dk    r	d|_        d S d|_        |                                }|                    d|            |                    d           |                                 d S )Nr    r  TFz;SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL COMMIT)replace
autocommitr   r   r   )r2   r  levelr   s       r%   set_isolation_levelz$PGDialect_pg8000.set_isolation_level  s    c3''L  *.'''*/'%,,..FNN+#(+ +   NN8$$$LLNNNNNr$   c                     |                                 }	 |                    d|rdndz             |                    d           |                                 d S # |                                 w xY w)N-SET SESSION CHARACTERISTICS AS TRANSACTION %sz	READ ONLYz
READ WRITEr  r   r   r   r2   r   r   r   s       r%   set_readonlyzPGDialect_pg8000.set_readonly  sy    ""$$	NN?"'9;;\;   NN8$$$LLNNNNNFLLNNNN   1A A3c                     |                                 }	 |                    d           |                                d         }|                                 n# |                                 w xY w|dk    S )Nzshow transaction_read_onlyr   onr   r   r   r   r2   r   r   vals       r%   get_readonlyzPGDialect_pg8000.get_readonly*  sj    ""$$	NN7888//##A&CLLNNNNFLLNNNNd{   /A A0c                     |                                 }	 |                    d|rdndz             |                    d           |                                 d S # |                                 w xY w)Nr  
DEFERRABLEzNOT DEFERRABLEr  r  r  s       r%   set_deferrablezPGDialect_pg8000.set_deferrable4  s{    ""$$	NN?#(><<.>@   NN8$$$LLNNNNNFLLNNNNr  c                     |                                 }	 |                    d           |                                d         }|                                 n# |                                 w xY w|dk    S )Nzshow transaction_deferrabler   r!  r"  r#  s       r%   get_deferrablezPGDialect_pg8000.get_deferrable?  sj    ""$$	NN8999//##A&CLLNNNNFLLNNNNd{r&  c                     |                                 }|                    d|                    dd           d           |                    d           |                                 d S )NzSET CLIENT_ENCODING TO ''z''r  )r   r   r  r   )r2   r  r   r   s       r%   _set_client_encodingz%PGDialect_pg8000._set_client_encodingI  su    !((**''T22  	
 	
 	

 	x   r$   c                 @    |j                             d|df           d S Nr    )r   	tpc_beginr2   r   xids      r%   do_begin_twophasez"PGDialect_pg8000.do_begin_twophaseS  s%    ''C55555r$   c                 8    |j                                          d S r?   )r   tpc_preparer3  s      r%   do_prepare_twophasez$PGDialect_pg8000.do_prepare_twophaseV  s    ))+++++r$   Fc                 @    |j                             d|df           d S r0  )r   tpc_rollbackr2   r   r4  is_preparedrecovers        r%   do_rollback_twophasez%PGDialect_pg8000.do_rollback_twophaseY  s'     	**AsB<88888r$   c                 @    |j                             d|df           d S r0  )r   
tpc_commitr;  s        r%   do_commit_twophasez#PGDialect_pg8000.do_commit_twophase^  s'     	((!S"66666r$   c                 H    d |j                                         D             S )Nc                     g | ]
}|d          S )r   r#   )r   rows     r%   r   z8PGDialect_pg8000.do_recover_twophase.<locals>.<listcomp>d  s    FFF3AFFFr$   )r   tpc_recover)r2   r   s     r%   do_recover_twophasez$PGDialect_pg8000.do_recover_twophasec  s%    FF*"7"C"C"E"EFFFFr$   c                 8    g d }                     |            j         fd}                     |            j        du rd }                     |            j        r fd}                     |           t	                    dk    rfd}|S d S )Nc                 D    | j         t                   | j         t          <   d S r?   )py_typesr   r   conns    r%   
on_connectz/PGDialect_pg8000.on_connect.<locals>.on_connecti  s    )-s);DM+&&&r$   c                 >                         | j                   d S r?   )r.  r   rK  r2   s    r%   rL  z/PGDialect_pg8000.on_connect.<locals>.on_connectp  s"    ))$0DEEEEEr$   Fc                 b    |                      dd            |                      dd            d S )Nie  c                     | S r?   r#   ss    r%   <lambda>zAPGDialect_pg8000.on_connect.<locals>.on_connect.<locals>.<lambda>y       r$   i  c                     | S r?   r#   rQ  s    r%   rS  zAPGDialect_pg8000.on_connect.<locals>.on_connect.<locals>.<lambda>|  rT  r$   )register_in_adapterrJ  s    r%   rL  z/PGDialect_pg8000.on_connect.<locals>.on_connectw  s:    ((kk::: ((kk:::::r$   c                 t    |                      dj                   |                      dj                   d S )Nr   i  )rV  _json_deserializerrN  s    r%   rL  z/PGDialect_pg8000.on_connect.<locals>.on_connect  s=    ((d.EFFF ((t/FGGGGGr$   r   c                 (    D ]} ||            d S r?   r#   )rK  fnfnss     r%   rL  z/PGDialect_pg8000.on_connect.<locals>.on_connect  s+      BBtHHHH r$   )r   r   r   rY  len)r2   rL  r\  s   ` @r%   rL  zPGDialect_pg8000.on_connectf  s
   	< 	< 	< 	

:+F F F F F JJz""""e++; ; ; JJz"""" 		#H H H H H JJz"""s88a<<     4r$   c                     dS )N;r#   r   s    r%   _dialect_specific_select_onez-PGDialect_pg8000._dialect_specific_select_one  s    sr$   r?   )TF)gr   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   Numericr=   Floatr8   r   rC   Booleanrz   NullTyperv   r   rG   r   r   rY   JSONIndexTyperJ   JSONIntIndexTyperR   JSONStrIndexTyperV   Intervalra   r   DateTimerl   Datern   Timerp   Integerrr   SmallIntegerrt   
BigIntegerrx   Enumr]   r   r|   r   r~   r   	INT4RANGEr   	INT8RANGENUMRANGE	DATERANGETSRANGE	TSTZRANGEINT4MULTIRANGEr   INT8MULTIRANGENUMMULTIRANGEDATEMULTIRANGETSMULTIRANGETSTZMULTIRANGEr   memoized_propertyr   rj   r   r	  r  r  r  r  r%  r)  r+  r.  r5  r8  r>  rA  rF  rL  r`  r#   r$   r%   r   r     s	       F#"&!!#' 1**H#'     t%	
OY%	
.%	
 NH%	
 M7	%	

 j%	
 {%	
 8%	
 F%	
 M&%	
 M')9%	
 M*,?%	
 M*,?%	
 {%	
 k%	
 |%	
  |!%	
" M7#%	
 %	
$ M7%%	
& j'%	
( !?)%	
* +%	
, M7-%	
. NH/%	
0 |1%	
2 l3%	
4 l5%	
6 O\7%	
8 l9%	
: NL;%	
< l=%	
> !#4?%	
@ !#4A%	
B  "3C%	
D !#4E%	
 %	
F !2!#4I%	
 %	
( (HT    
      $ $ [$  0 0 0
 
 
  	 	 	  	 	 	    6 6 6, , , :?9 9 9 9 :?7 7 7 7
G G G- - -^ 
    r$   r   )S__doc__r,   r   r1  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   rn  r   ro  r(   rp  r8   r=   rC   rG   rs  rJ   rt  rR   ru  rV   rY   r]   ra   rw  rl   rx  rn   ry  rp   rz  rr   r{  rt   rr  rv   r|  rx   rq  rz   r|   r~   AbstractSingleRangeImplr   AbstractMultiRangeImplr   counterr   r   r   r   r   r   r3   r#   r$   r%   <module>r     s  X Xr  				       # # # # # #                                                 $ $ $ $ $ $ & & & & & &                   $ $ $ $ $ $ ! ! ! ! ! !                                     ' ' ' ' ' '           !   8    z8>   
    z   
    d       u   8 8 8 8 8x}2 8 8 8
    (-8       (-8   	 	 	 	 	l 	 	 	    d   
@ @ @ @ @( @ @ @    8$       hm       hm       !       h+   	 	 	 	 	(# 	 	 	    H'       !       w   	 	 	 	 	< 	 	 	    61   6         5      F $,..     2   5 5 5 5 5 5 5 5p
 
 
 
 

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