
    gH                     B   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 jF                        Z$ G d de jJ                        Z& G d d e&e jN                        Z( G d! d"e&      Z) G d# d$e      Z* G d% d&e      Z+ G d' d(e j&                  jX                        Z- G d) d*e j&                  j\                        Z/ G d+ d,e j&                  j`                        Z1 G d- d.e      Z2 G d/ d0e      Z3 G d1 d2e      Z4 G d3 d4e jj                        Z6 G d5 d6e jn                        Z8 G d7 d8e jr                        Z: G d9 d:e jv                        Z< G d; d<e jz                        Z> G d= d>e j~                        Z@ G d? d@e j                        ZB G dA dBe j                        ZD G dC dDe      ZE G dE dFee      ZF G dG dHej                        ZH G dI dJej                        ZJ ej                         ZL G dK dLe      ZM G dM dN      ZN G dO dPe      ZO G dQ dRe      ZP G dS dTe      ZQeQZRy)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y)	_PGStringTN__name__
__module____qualname__render_bind_cast     d/var/www/html/AdoubleTech/venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyr   r   }       r$   r   c                       e Zd ZdZd Zy)
_PGNumericTc                 Z   | j                   r_|t        v r.t        j                  t        j
                  | j                        S |t        v s|t        v ry t        j                  d|z        |t        v ry |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    >>,&!>>OOT%I%I  N*g.C--1G;  ,&N*g.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y)_PGFloatfloatTNr   r    r!   __visit_name__r"   r#   r$   r%   r8   r8      s    Nr$   r8   c                       e Zd Zd Zy)_PGNumericNoBindc                      y Nr#   )r2   r3   s     r%   bind_processorz_PGNumericNoBind.bind_processor       r$   N)r   r    r!   r@   r#   r$   r%   r=   r=      s    r$   r=   c                       e Zd ZdZd Zy)_PGJSONTc                      y 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y)_PGJSONBTc                      y 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y)_PGJSONIndexTypec                     t        d      )Nzshould not be here)NotImplementedErrorr2   dbapis     r%   get_dbapi_typez_PGJSONIndexType.get_dbapi_type   s    !"677r$   Nr   r    r!   rO   r#   r$   r%   rJ   rJ      s    8r$   rJ   c                       e Zd ZdZdZy)_PGJSONIntIndexTypejson_int_indexTNr:   r#   r$   r%   rR   rR          %Nr$   rR   c                       e Zd ZdZdZy)_PGJSONStrIndexTypejson_str_indexTNr:   r#   r$   r%   rV   rV      rT   r$   rV   c                       e Zd Zy)_PGJSONPathTypeNr   r    r!   r#   r$   r%   rY   rY          r$   rY   c                       e Zd Zd Zy)_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y)_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      s#     @ @r$   ra   c                       e Zd ZdZy)_PGTimeStampTNr   r#   r$   r%   rl   rl      r&   r$   rl   c                       e Zd ZdZy)_PGDateTNr   r#   r$   r%   rn   rn      r&   r$   rn   c                       e Zd ZdZy)_PGTimeTNr   r#   r$   r%   rp   rp      r&   r$   rp   c                       e Zd ZdZy)
_PGIntegerTNr   r#   r$   r%   rr   rr      r&   r$   rr   c                       e Zd ZdZy)_PGSmallIntegerTNr   r#   r$   r%   rt   rt      r&   r$   rt   c                       e Zd Zy)_PGNullTypeNrZ   r#   r$   r%   rv   rv      r[   r$   rv   c                       e Zd ZdZy)_PGBigIntegerTNr   r#   r$   r%   rx   rx      r&   r$   rx   c                       e Zd ZdZy)
_PGBooleanTNr   r#   r$   r%   rz   rz      r&   r$   rz   c                       e Zd ZdZy)_PGARRAYTNr   r#   r$   r%   r|   r|      r&   r$   r|   c                       e Zd Zy)_PGOIDVECTORNrZ   r#   r$   r%   r~   r~      r[   r$   r~   c                       e Zd Zd Zd Zy)_Pg8000Rangec                 >    |j                   j                  fd}|S )Nc                     t        | t        j                        r3 | 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;    %.$KKellEKK Lr$   rN   r   )r2   r3   r   r   s      @r%   r@   z_Pg8000Range.bind_processor  s    }}**	 r$   c                     d }|S )Nc                     | At        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     KKKK <<..	 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     s    
r$   r   c                       e Zd Zd Zd Zy)_Pg8000MultiRangec                 >    |j                   j                  fd}|S )Nc           	         t        | t              ryg }| D ]p  }t        |t        j                        rC|j	                   |j
                  |j                  |j                  |j                               `|j	                  |       r |S | S r?   )	r   listr   r   appendr   r   r   r   )r   mrvr   s      r%   to_multirangez7_Pg8000MultiRange.bind_processor.<locals>.to_multirange#  sr    %& %A!!V\\2		(!''188QWWM 		!% 	r$   r   )r2   r3   r   r   s      @r%   r@   z _Pg8000MultiRange.bind_processor   s    }}**	 r$   c                     d }|S )Nc                 @    | y t        j                  d | D              S )Nc              3      K   | ]E  }t        j                  |j                  |j                  |j                  |j
                          G yw)r   Nr   ).0r   s     r%   	<genexpr>zL_Pg8000MultiRange.result_processor.<locals>.to_multirange.<locals>.<genexpr>8  sA      )  LL )s   AA)r   
MultiRanger   s    r%   r   z9_Pg8000MultiRange.result_processor.<locals>.to_multirange4  s,    }(( ) #	)  r$   r#   )r2   r3   r4   r   s       r%   r5   z"_Pg8000MultiRange.result_processor3  s    		 r$   Nr   r#   r$   r%   r   r     s    &r$   r   c                       e Zd Zd Zd Zy)PGExecutionContext_pg8000c                     dt        t        |             dd  dt        t                     dd  }t        | j                  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  sF     D]12.O4E0Fqr0JK 6 6 = = ?GGr$   c                     | j                   sy y r?   )compiledr2   s    r%   pre_execz"PGExecutionContext_pg8000.pre_execJ  s    }} r$   N)r   r    r!   r   r   r#   r$   r%   r   r   E  s    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y)r   Tc                      || _         || _        y 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$   Nc                 l    d| j                   z   dz   |z   }| j                  j                  |||       | S )NzDECLARE z NO SCROLL CURSOR FOR )stream)r   r   execute)r2   	operationargsr   ops        r%   r   zServerSideCursor.executeb  s9    $**$'??)KBV4r$   c                 >    | j                   j                  ||       | S r?   )r   executemany)r2   r   
param_setss      r%   r   zServerSideCursor.executemanyg  s    	:6r$   c                     | j                   j                  d| j                  z          | j                   j                         S )NzFETCH FORWARD 1 FROM )r   r   r   fetchoner   s    r%   r   zServerSideCursor.fetchonek  s1    3djj@A{{##%%r$   c                     || j                         S | j                  j                  dt        t	        |            z   dz   | j
                  z          | j                  j                         S )NzFETCH FORWARD z FROM )fetchallr   r   strintr   )r2   nums     r%   	fetchmanyzServerSideCursor.fetchmanyo  sX    ;==?"KK 3s3x=08;djjH ;;''))r$   c                     | j                   j                  d| j                  z          | j                   j                         S )NzFETCH FORWARD ALL FROM )r   r   r   r   r   s    r%   r   zServerSideCursor.fetchallx  s1    5

BC{{##%%r$   c                     | j                   j                  d| j                  z          | j                   j                          y )NzCLOSE )r   r   r   closer   s    r%   r   zServerSideCursor.close|  s-    Htzz12r$   c                 6     | j                   j                  |  y r?   )r   setinputsizes)r2   sizess     r%   r   zServerSideCursor.setinputsizes  s    !!!5)r$   c                      y 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  sp    K & & $ $ ' '
&*&*r$   r   c                       e Zd Zd Zy)PGCompiler_pg8000c                 ~     | 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  sB    DLL++dll6<<.2./	
r$   N)r   r    r!   r   r#   r$   r%   r   r     s    
r$   r   c                       e Zd Zd Zy)PGIdentifierPreparer_pg8000c                 D    t        j                  | g|i | d| _        y )NF)r   r   _double_percents)r2   r   kwargss      r%   r   z$PGIdentifierPreparer_pg8000.__init__  s"    %%d<T<V< %r$   N)r   r    r!   r   r#   r$   r%   r   r     s    &r$   r   c                      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j2                  eej6                  eej:                  eej>                  e ejB                  e"e#e$e%e%ej:                  jL                  e'ej:                  jP                  e)ej:                  jT                  e+ej:                  jX                  e-ej\                  e/e0e/ejb                  e2ejb                  e2ejf                  e4i ejj                  e6ejn                  e8ejr                  e:ejv                  e<ejz                  e>ej~                  e@eAeBeCj                  eEeCj                  eEeCj                  eEeCj                  eEeCj                  eEeCj                  eEeCj                  eLeCj                  eLeCj                  eLeCj                  eLeCj                  eLeCj                  eLi      ZddZRej                  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j                  d        Zfy)PGDialect_pg8000pg8000TformatNc                     t        j                  | fi | || _        | j                  dk  rt	        d      | j
                  rt	        d      y )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__  sW    4*6*.+%&LMM""%  #r$   c                     | j                   r`t        | j                   d      rJt        t        j                  d| j                   j
                        D cg c]  }t        |       c}      S yc c}w )N__version__z(\d+)(?:[-\.]?|$))c   r   r   )rN   hasattrtuplerefindallr   r   )r2   xs     r%   r   zPGDialect_pg8000._dbapi_version  sa    ::'$**m<  ZZ,djj.D.D F   s   A.c                     t        d      S )Nr   )
__import__)rf   s    r%   import_dbapizPGDialect_pg8000.import_dbapi  s    (##r$   c                     |j                  d      }d|v rt        |d         |d<   |j                  |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  sH    ))6):T>tF|,DLCIIDzr$   c                 x    t        || j                  j                        rdt        |      v rydt        |      v S )Nznetwork errorTzconnection is closed)r   rN   InterfaceErrorr   )r2   er   r   s       r%   is_disconnectzPGDialect_pg8000.is_disconnect  s>    a2233L
 9
  &Q//r$   c                      y)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                     |j                  dd      }|dk(  rd|_        y d|_        |j                         }|j                  d|        |j                  d       |j	                          y )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  sl    c3'L *.'*/'%,,.FNN##('+ NN8$LLNr$   c                     |j                         }	 |j                  d|rdndz         |j                  d       |j                          y # |j                          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  sQ    ""$	NN?"';\; NN8$LLNFLLN   )A Ac                     |j                         }	 |j                  d       |j                         d   }|j                          |dk(  S # |j                          w xY w)Nzshow transaction_read_onlyr   onr   r   r   r   r2   r   r   vals       r%   get_readonlyzPGDialect_pg8000.get_readonly*  sS    ""$	NN78//#A&CLLNd{ LLN   $A Ac                     |j                         }	 |j                  d|rdndz         |j                  d       |j                          y # |j                          w xY w)Nr  
DEFERRABLEzNOT DEFERRABLEr  r  r  s       r%   set_deferrablezPGDialect_pg8000.set_deferrable4  sS    ""$	NN?#(<.>@ NN8$LLNFLLNr  c                     |j                         }	 |j                  d       |j                         d   }|j                          |dk(  S # |j                          w xY w)Nzshow transaction_deferrabler   r  r   r!  s       r%   get_deferrablezPGDialect_pg8000.get_deferrable?  sS    ""$	NN89//#A&CLLNd{ LLNr$  c                     |j                         }|j                  d|j                  dd       d       |j                  d       |j                          y )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  sS    !((*(''T2)	

 	x r$   c                 @    |j                   j                  d|df       y Nr    )r   	tpc_beginr2   r   xids      r%   do_begin_twophasez"PGDialect_pg8000.do_begin_twophaseS  s    ''C5r$   c                 8    |j                   j                          y r?   )r   tpc_preparer1  s      r%   do_prepare_twophasez$PGDialect_pg8000.do_prepare_twophaseV  s    ))+r$   c                 @    |j                   j                  d|df       y r.  )r   tpc_rollbackr2   r   r2  is_preparedrecovers        r%   do_rollback_twophasez%PGDialect_pg8000.do_rollback_twophaseY  s     	**AsB<8r$   c                 @    |j                   j                  d|df       y r.  )r   
tpc_commitr9  s        r%   do_commit_twophasez#PGDialect_pg8000.do_commit_twophase^  s     	((!S"6r$   c                 b    |j                   j                         D cg c]  }|d   	 c}S c c}w )Nr   )r   tpc_recover)r2   r   rows      r%   do_recover_twophasez$PGDialect_pg8000.do_recover_twophasec  s)    ","7"7"C"C"EF3AFFFs   ,c                 *    g d }j                  |        j                   fd}j                  |        j                  du rd }j                  |        j                  r fd}j                  |       t	              dkD  rfd}|S y )Nc                 L    | j                   t           | j                   t        <   y r?   )py_typesr   r   conns    r%   
on_connectz/PGDialect_pg8000.on_connect.<locals>.on_connecti  s    )-s);DMM+&r$   c                 >    j                  | j                         y r?   )r,  r   rH  r2   s    r%   rI  z/PGDialect_pg8000.on_connect.<locals>.on_connectp  s    ))$0D0DEr$   Fc                 P    | j                  dd        | j                  dd        y )Nie  c                     | S r?   r#   ss    r%   <lambda>zAPGDialect_pg8000.on_connect.<locals>.on_connect.<locals>.<lambda>y       r$   i  c                     | S r?   r#   rN  s    r%   rP  zAPGDialect_pg8000.on_connect.<locals>.on_connect.<locals>.<lambda>|  rQ  r$   )register_in_adapterrG  s    r%   rI  z/PGDialect_pg8000.on_connect.<locals>.on_connectw  s$    ((k: ((k:r$   c                 v    | j                  dj                         | j                  dj                         y )Nr   i  )rS  _json_deserializerrK  s    r%   rI  z/PGDialect_pg8000.on_connect.<locals>.on_connect  s1    ((d.E.EF ((t/F/FGr$   r   c                 $    D ]
  } ||         y r?   r#   )rH  fnfnss     r%   rI  z/PGDialect_pg8000.on_connect.<locals>.on_connect  s     BtHr$   )r   r   r   rV  len)r2   rI  rY  s   ` @r%   rI  zPGDialect_pg8000.on_connectf  s    	< 	

:+F JJz"""e+; JJz"""H JJz"s8a< r$   c                      y)N;r#   r   s    r%   _dialect_specific_select_onez-PGDialect_pg8000._dialect_specific_select_one  s    r$   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,  r3  r6  r<  r?  rC  rI  r]  r#   r$   r%   r   r     s   F#"&!!#' 1**H#'     t%	
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__r,   r   r/  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   rk  r   rl  r(   rm  r8   r=   rC   rG   rp  rJ   rq  rR   rr  rV   rY   r]   ra   rt  rl   ru  rn   rv  rp   rw  rr   rx  rt   ro  rv   ry  rx   rn  rz   r|   r~   AbstractSingleRangeImplr   AbstractMultiRangeImplr   counterr   r   r   r   r   r   r3   r#   r$   r%   <module>r     s7  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$   