o
    ŠågÎH  ã                   @   s$  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„ de j#ƒZ$G dd„ de j%ƒZ&G dd „ d e&e j'ƒZ(G d!d"„ d"e&ƒZ)G d#d$„ d$eƒZ*G d%d&„ d&eƒZ+G d'd(„ d(e jj,ƒZ-G d)d*„ d*e jj.ƒZ/G d+d,„ d,e jj0ƒZ1G d-d.„ d.eƒZ2G d/d0„ d0eƒZ3G d1d2„ d2eƒZ4G d3d4„ d4e j5ƒZ6G d5d6„ d6e j7ƒZ8G d7d8„ d8e j9ƒZ:G d9d:„ d:e j;ƒZ<G d;d<„ d<e j=ƒZ>G d=d>„ d>e j?ƒZ@G d?d@„ d@e jAƒZBG dAdB„ dBe jCƒZDG dCdD„ dDeƒZEG dEdF„ dFeeƒZFG dGdH„ dHejGƒZHG dIdJ„ dJejIƒZJe K¡ ZLG dKdL„ dLeƒZMG dMdN„ dNƒZNG dOdP„ dPeƒZOG dQdR„ dReƒZPG dSdT„ 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© r"   r"   úa/var/www/html/flaskapp/venv/lib/python3.10/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyr   }   ó    r   c                   @   ó   e Zd ZdZdd„ ZdS )Ú
_PGNumericTc                 C   sp   | j r |tv rt tj| j¡S |tv s|tv rd S t	 
d| ¡‚|tv r&d S |tv s.|tv r1tjS t	 
d| ¡‚)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Úcoltyper"   r"   r#   Úresult_processor„   s"   ÿÿÿz_PGNumeric.result_processorN©r   r   r    r!   r2   r"   r"   r"   r#   r&   �   ó    r&   c                   @   ó   e Zd ZdZdZdS )Ú_PGFloatÚfloatTN©r   r   r    Ú__visit_name__r!   r"   r"   r"   r#   r6   �   s    r6   c                   @   ó   e Zd Zdd„ ZdS )Ú_PGNumericNoBindc                 C   ó   d S ©Nr"   )r/   r0   r"   r"   r#   Úbind_processor£   ó   z_PGNumericNoBind.bind_processorN)r   r   r    r>   r"   r"   r"   r#   r;   ¢   ó    r;   c                   @   r%   )Ú_PGJSONTc                 C   r<   r=   r"   r.   r"   r"   r#   r2   ª   r?   z_PGJSON.result_processorNr3   r"   r"   r"   r#   rA   §   r4   rA   c                   @   r%   )Ú_PGJSONBTc                 C   r<   r=   r"   r.   r"   r"   r#   r2   ±   r?   z_PGJSONB.result_processorNr3   r"   r"   r"   r#   rB   ®   r4   rB   c                   @   r:   )Ú_PGJSONIndexTypec                 C   s   t dƒ‚)Nzshould not be here)ÚNotImplementedError©r/   Údbapir"   r"   r#   Úget_dbapi_type¶   s   z_PGJSONIndexType.get_dbapi_typeN©r   r   r    rG   r"   r"   r"   r#   rC   µ   r@   rC   c                   @   r5   )Ú_PGJSONIntIndexTypeÚjson_int_indexTNr8   r"   r"   r"   r#   rI   º   ó    rI   c                   @   r5   )Ú_PGJSONStrIndexTypeÚjson_str_indexTNr8   r"   r"   r"   r#   rL   À   rK   rL   c                   @   ó   e Zd ZdS )Ú_PGJSONPathTypeN©r   r   r    r"   r"   r"   r#   rO   Æ   ó    rO   c                   @   r:   )Ú_PGEnumc                 C   ó   |j S r=   )ÚUNKNOWNrE   r"   r"   r#   rG   Í   ó   z_PGEnum.get_dbapi_typeNrH   r"   r"   r"   r#   rR   Ì   r@   rR   c                   @   s$   e Zd ZdZdd„ Zedd„ ƒZdS )Ú_PGIntervalTc                 C   rS   r=   r	   rE   r"   r"   r#   rG   Ô   rU   z_PGInterval.get_dbapi_typec                 K   s   t |jd�S )N)Ú	precision)rV   Úsecond_precision)ÚclsÚintervalÚkwr"   r"   r#   Úadapt_emulated_to_native×   s   z$_PGInterval.adapt_emulated_to_nativeN)r   r   r    r!   rG   Úclassmethodr\   r"   r"   r"   r#   rV   Ñ   s
    rV   c                   @   r   )Ú_PGTimeStampTNr   r"   r"   r"   r#   r^   Ü   r$   r^   c                   @   r   )Ú_PGDateTNr   r"   r"   r"   r#   r_   à   r$   r_   c                   @   r   )Ú_PGTimeTNr   r"   r"   r"   r#   r`   ä   r$   r`   c                   @   r   )Ú
_PGIntegerTNr   r"   r"   r"   r#   ra   è   r$   ra   c                   @   r   )Ú_PGSmallIntegerTNr   r"   r"   r"   r#   rb   ì   r$   rb   c                   @   rN   )Ú_PGNullTypeNrP   r"   r"   r"   r#   rc   ð   rQ   rc   c                   @   r   )Ú_PGBigIntegerTNr   r"   r"   r"   r#   rd   ô   r$   rd   c                   @   r   )Ú
_PGBooleanTNr   r"   r"   r"   r#   re   ø   r$   re   c                   @   r   )Ú_PGARRAYTNr   r"   r"   r"   r#   rf   ü   r$   rf   c                   @   rN   )Ú_PGOIDVECTORNrP   r"   r"   r"   r#   rg      rQ   rg   c                   @   ó   e Zd Zdd„ Zdd„ ZdS )Ú_Pg8000Rangec                    ó   |j j‰ ‡ fdd„}|S )Nc                    s&   t | tjƒrˆ | j| j| j| jƒ} | S r=   )Ú
isinstancer   ÚRangeÚlowerÚupperÚboundsÚempty©Úvalue©Úpg8000_Ranger"   r#   Úto_range  s
   ÿz-_Pg8000Range.bind_processor.<locals>.to_range©rF   rl   )r/   r0   ru   r"   rs   r#   r>     s   z_Pg8000Range.bind_processorc                 C   ó   dd„ }|S )Nc                 S   s&   | d urt j| j| j| j| jd�} | S )N©ro   rp   ©r   rl   rm   rn   ro   Úis_emptyrq   r"   r"   r#   ru     s   üz/_Pg8000Range.result_processor.<locals>.to_ranger"   )r/   r0   r1   ru   r"   r"   r#   r2     s   
z_Pg8000Range.result_processorN©r   r   r    r>   r2   r"   r"   r"   r#   ri     s    ri   c                   @   rh   )Ú_Pg8000MultiRangec                    rj   )Nc                    sT   t | tƒr(g }| D ]}t |tjƒr | ˆ |j|j|j|jƒ¡ q	| |¡ q	|S | S r=   )	rk   Úlistr   rl   Úappendrm   rn   ro   rp   )rr   ÚmrÚvrs   r"   r#   Úto_multirange#  s   
ÿz7_Pg8000MultiRange.bind_processor.<locals>.to_multirangerv   )r/   r0   r�   r"   rs   r#   r>      s   z _Pg8000MultiRange.bind_processorc                 C   rw   )Nc                 S   s    | d u rd S t  dd„ | D ƒ¡S )Nc                 s   s*   � | ]}t j|j|j|j|jd �V  qdS )rx   Nry   )Ú.0r€   r"   r"   r#   Ú	<genexpr>8  s   € ýÿ
ÿzL_Pg8000MultiRange.result_processor.<locals>.to_multirange.<locals>.<genexpr>)r   Ú
MultiRangerq   r"   r"   r#   r�   4  s
   
üz9_Pg8000MultiRange.result_processor.<locals>.to_multiranger"   )r/   r0   r1   r�   r"   r"   r#   r2   3  s   z"_Pg8000MultiRange.result_processorNr{   r"   r"   r"   r#   r|     s    r|   c                   @   rh   )ÚPGExecutionContext_pg8000c                 C   s:   dt t| ƒƒdd … t tƒ ƒdd … f }t| j ¡ |ƒS )Nzc_%s_%sé   )ÚhexÚidÚ_server_side_idÚServerSideCursorÚ_dbapi_connectionÚcursor)r/   Úidentr"   r"   r#   Úcreate_server_side_cursorF  s   *z3PGExecutionContext_pg8000.create_server_side_cursorc                 C   s   | j sd S d S r=   )Úcompiled©r/   r"   r"   r#   Úpre_execJ  s   ÿz"PGExecutionContext_pg8000.pre_execN)r   r   r    rŽ   r‘   r"   r"   r"   r#   r…   E  s    r…   c                   @   s‚   e Zd ZdZdd„ Zedd„ ƒZedd„ ƒZedd	„ ƒZddd„Z	dd„ Z
dd„ Zddd„Zdd„ Zdd„ Zdd„ Zddd„ZdS )rŠ   Tc                 C   s   || _ || _d S r=   )r�   rŒ   )r/   rŒ   r�   r"   r"   r#   Ú__init__R  s   
zServerSideCursor.__init__c                 C   ó   | j jS r=   )rŒ   Ú
connectionr�   r"   r"   r#   r”   V  ó   zServerSideCursor.connectionc                 C   r“   r=   )rŒ   Úrowcountr�   r"   r"   r#   r–   Z  r•   zServerSideCursor.rowcountc                 C   r“   r=   )rŒ   Údescriptionr�   r"   r"   r#   r—   ^  r•   zServerSideCursor.descriptionr"   Nc                 C   s(   d| j  d | }| jj|||d� | S )NzDECLARE z NO SCROLL CURSOR FOR )Ústream)r�   rŒ   Úexecute)r/   Ú	operationÚargsr˜   Úopr"   r"   r#   r™   b  s   zServerSideCursor.executec                 C   s   | j  ||¡ | S r=   )rŒ   Úexecutemany)r/   rš   Ú
param_setsr"   r"   r#   r�   g  s   zServerSideCursor.executemanyc                 C   ó   | j  d| j ¡ | j  ¡ S )NzFETCH FORWARD 1 FROM )rŒ   r™   r�   Úfetchoner�   r"   r"   r#   r    k  ó   
zServerSideCursor.fetchonec                 C   s<   |d u r|   ¡ S | j dtt|ƒƒ d | j ¡ | j  ¡ S )NzFETCH FORWARD z FROM )ÚfetchallrŒ   r™   ÚstrÚintr�   )r/   Únumr"   r"   r#   Ú	fetchmanyo  s   ÿ
zServerSideCursor.fetchmanyc                 C   rŸ   )NzFETCH FORWARD ALL FROM )rŒ   r™   r�   r¢   r�   r"   r"   r#   r¢   x  r¡   zServerSideCursor.fetchallc                 C   s    | j  d| j ¡ | j  ¡  d S )NzCLOSE )rŒ   r™   r�   Úcloser�   r"   r"   r#   r§   |  s   zServerSideCursor.closec                 G   s   | j j|Ž  d S r=   )rŒ   Úsetinputsizes)r/   Úsizesr"   r"   r#   r¨   €  s   zServerSideCursor.setinputsizesc                 C   r<   r=   r"   )r/   ÚsizeÚcolumnr"   r"   r#   Úsetoutputsizeƒ  r?   zServerSideCursor.setoutputsize)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"    




	rŠ   c                   @   r:   )ÚPGCompiler_pg8000c                 K   s,   | j |jfi |¤Žd | j |jfi |¤Ž S )Nz %% )ÚprocessÚleftÚright)r/   ÚbinaryÚoperatorr[   r"   r"   r#   Úvisit_mod_binaryˆ  s   ÿþÿz"PGCompiler_pg8000.visit_mod_binaryN)r   r   r    rµ   r"   r"   r"   r#   r¯   ‡  r@   r¯   c                   @   r:   )ÚPGIdentifierPreparer_pg8000c                 O   s"   t j| g|¢R i |¤Ž d| _d S )NF)r   r’   Ú_double_percents)r/   r›   Úkwargsr"   r"   r#   r’   ‘  s   
z$PGIdentifierPreparer_pg8000.__init__N)r   r   r    r’   r"   r"   r"   r#   r¶   �  r@   r¶   c                   @   s   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 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j1e2“ej1e2“ej3e4“i ej5e6“ej7e8“ej9e:“ej;e<“ej=e>“ej?e@“eAeB“eCjDeE“eCjFeE“eCjGeE“eCjHeE“eCjIeE“eCjJeE“eCjKeL“eCjMeL“eCjNeL“eCjOeL“¥eCjPeLeCjQeLi¥¡Zd,dd„ZRejSdd„ ƒZTeUd	d
„ ƒZVdd„ ZWdd„ ZXdd„ ZYdd„ ZZdd„ Z[dd„ Z\dd„ Z]dd„ Z^dd„ Z_dd„ Z`dd „ Za	!d-d"d#„Zb	!d-d$d%„Zcd&d'„ Zdd(d)„ ZeejSd*d+„ ƒZfdS ).ÚPGDialect_pg8000Úpg8000TÚformatNc                 K   s<   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_versionrD   Ú_native_inet_types)r/   r¾   r¸   r"   r"   r#   r’   Ö  s   
ÿÿzPGDialect_pg8000.__init__c                 C   s4   | j rt| j dƒrtdd„ t d| j j¡D ƒƒS dS )NÚ__version__c                 S   s   g | ]}t |ƒ‘qS r"   )r¤   )r‚   Úxr"   r"   r#   Ú
<listcomp>è  s    ÿÿz3PGDialect_pg8000._dbapi_version.<locals>.<listcomp>z(\d+)(?:[-\.]?|$))éc   rÄ   rÄ   )rF   ÚhasattrÚtupleÚreÚfindallrÁ   r�   r"   r"   r#   r¿   ä  s   ÿþÿ	zPGDialect_pg8000._dbapi_versionc                 C   s   t dƒS )Nrº   )Ú
__import__)rY   r"   r"   r#   Úimport_dbapiò  r•   zPGDialect_pg8000.import_dbapic                 C   s8   |j dd�}d|v rt|d ƒ|d< | |j¡ g |fS )NÚuser)ÚusernameÚport)Útranslate_connect_argsr¤   ÚupdateÚquery)r/   ÚurlÚoptsr"   r"   r#   Úcreate_connect_argsö  s
   z$PGDialect_pg8000.create_connect_argsc                 C   s*   t || jjƒrdt|ƒv rdS dt|ƒv S )Nznetwork errorTzconnection is closed)rk   rF   ÚInterfaceErrorr£   )r/   Úer”   rŒ   r"   r"   r#   Úis_disconnectý  s
   ÿzPGDialect_pg8000.is_disconnectc                 C   ó   dS )N)Ú
AUTOCOMMITzREAD COMMITTEDzREAD UNCOMMITTEDzREPEATABLE READÚSERIALIZABLEr"   )r/   Údbapi_connectionr"   r"   r#   Úget_isolation_level_values  r?   z+PGDialect_pg8000.get_isolation_level_valuesc                 C   sR   |  dd¡}|dkrd|_d S d|_| ¡ }| d|› �¡ | d¡ | ¡  d S )NÚ_ú rØ   TFz;SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL ÚCOMMIT)ÚreplaceÚ
autocommitrŒ   r™   r§   )r/   rÚ   ÚlevelrŒ   r"   r"   r#   Úset_isolation_level  s   
ÿÿ
z$PGDialect_pg8000.set_isolation_levelc                 C   óB   |  ¡ }z| d|rdnd ¡ | d¡ W | ¡  d S | ¡  w )Nú-SET SESSION CHARACTERISTICS AS TRANSACTION %sz	READ ONLYz
READ WRITErÞ   ©rŒ   r™   r§   ©r/   r”   rr   rŒ   r"   r"   r#   Úset_readonly  ó   
ÿÿzPGDialect_pg8000.set_readonlyc                 C   ó<   |  ¡ }z| d¡ | ¡ d }W | ¡  |dkS | ¡  w )Nzshow transaction_read_onlyr   Úon©rŒ   r™   r    r§   ©r/   r”   rŒ   Úvalr"   r"   r#   Úget_readonly*  ó   

þzPGDialect_pg8000.get_readonlyc                 C   rã   )Nrä   Ú
DEFERRABLEzNOT DEFERRABLErÞ   rå   ræ   r"   r"   r#   Úset_deferrable4  rè   zPGDialect_pg8000.set_deferrablec                 C   ré   )Nzshow transaction_deferrabler   rê   rë   rì   r"   r"   r#   Úget_deferrable?  rï   zPGDialect_pg8000.get_deferrablec                 C   s8   |  ¡ }| d| dd¡› d�¡ | d¡ | ¡  d S )NzSET CLIENT_ENCODING TO 'ú'z''rÞ   )rŒ   r™   rß   r§   )r/   rÚ   r¾   rŒ   r"   r"   r#   Ú_set_client_encodingI  s   
ÿÿ
z%PGDialect_pg8000._set_client_encodingc                 C   ó   |j  d|df¡ d S ©Nr   Ú )r”   Ú	tpc_begin©r/   r”   Úxidr"   r"   r#   Údo_begin_twophaseS  s   z"PGDialect_pg8000.do_begin_twophasec                 C   s   |j  ¡  d S r=   )r”   Útpc_preparerù   r"   r"   r#   Údo_prepare_twophaseV  s   z$PGDialect_pg8000.do_prepare_twophaseFc                 C   rõ   rö   )r”   Útpc_rollback©r/   r”   rú   Úis_preparedÚrecoverr"   r"   r#   Údo_rollback_twophaseY  ó   z%PGDialect_pg8000.do_rollback_twophasec                 C   rõ   rö   )r”   Ú
tpc_commitrÿ   r"   r"   r#   Údo_commit_twophase^  r  z#PGDialect_pg8000.do_commit_twophasec                 C   s   dd„ |j  ¡ D ƒS )Nc                 S   s   g | ]}|d  ‘qS )r   r"   )r‚   Úrowr"   r"   r#   rÃ   d  s    z8PGDialect_pg8000.do_recover_twophase.<locals>.<listcomp>)r”   Útpc_recover)r/   r”   r"   r"   r#   Údo_recover_twophasec  ó   z$PGDialect_pg8000.do_recover_twophasec                    sŽ   g ‰ dd„ }ˆ   |¡ ˆjd ur‡fdd„}ˆ   |¡ ˆjdu r)dd„ }ˆ   |¡ ˆjr7‡fdd„}ˆ   |¡ tˆ ƒdkrE‡ fdd„}|S d S )	Nc                 S   s   | j t | j t< d S r=   )Úpy_typesr£   r   ©Úconnr"   r"   r#   Ú
on_connecti  r	  z/PGDialect_pg8000.on_connect.<locals>.on_connectc                    s   ˆ   | ˆ j¡ d S r=   )rô   r¾   r  r�   r"   r#   r  p  s   Fc                 S   s$   |   ddd„ ¡ |   ddd„ ¡ d S )Nie  c                 S   ó   | S r=   r"   ©Úsr"   r"   r#   Ú<lambda>y  ó    zAPGDialect_pg8000.on_connect.<locals>.on_connect.<locals>.<lambda>iŠ  c                 S   r  r=   r"   r  r"   r"   r#   r  |  r  )Úregister_in_adapterr  r"   r"   r#   r  w  s   c                    s    |   dˆ j¡ |   dˆ j¡ d S )Nér   iÚ  )r  Ú_json_deserializerr  r�   r"   r#   r  ‚  s   r   c                    s   ˆ D ]}|| ƒ qd S r=   r"   )r  Úfn)Úfnsr"   r#   r  �  s   
ÿ)r~   r¾   rÀ   r  Úlen)r/   r  r"   )r  r/   r#   r  f  s    





zPGDialect_pg8000.on_connectc                 C   r×   )Nú;r"   r�   r"   r"   r#   Ú_dialect_specific_select_one•  s   z-PGDialect_pg8000._dialect_specific_select_oner=   )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;   ÚFloatr6   r   rA   ÚBooleanre   ÚNullTyperc   r   rB   r   r   rO   ÚJSONIndexTyperC   ÚJSONIntIndexTyperI   ÚJSONStrIndexTyperL   ÚIntervalrV   r
   ÚDateTimer^   ÚDater_   ÚTimer`   ÚIntegerra   ÚSmallIntegerrb   Ú
BigIntegerrd   ÚEnumrR   r   rf   r   rg   r   Ú	INT4RANGEri   Ú	INT8RANGEÚNUMRANGEÚ	DATERANGEÚTSRANGEÚ	TSTZRANGEÚINT4MULTIRANGEr|   ÚINT8MULTIRANGEÚNUMMULTIRANGEÚDATEMULTIRANGEÚTSMULTIRANGEÚTSTZMULTIRANGEr’   Úmemoized_propertyr¿   r]   rÊ   rÓ   rÖ   rÛ   râ   rç   rî   rñ   rò   rô   rû   rý   r  r  r  r  r  r"   r"   r"   r#   r¹   –  sà    ÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Þ#Üþ
*


	



ÿ
ÿ/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   r(  r   r)  r&   r*  r6   r;   rA   rB   r-  rC   r.  rI   r/  rL   rO   rR   rV   r1  r^   r2  r_   r3  r`   r4  ra   r5  rb   r,  rc   r6  rd   r+  re   rf   rg   ÚAbstractSingleRangeImplri   ÚAbstractMultiRangeImplr|   Úcounterr‰   r…   rŠ   r¯   r¶   r¹   r0   r"   r"   r"   r#   Ú<module>   st   Y#
8	  