
    ؄_%                         d 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
  G d
 de          Z G d dee	j                  Z G d dee	j                  Z G d de          Z G d de          ZeZdS )aK  
.. dialect:: firebird+kinterbasdb
    :name: kinterbasdb
    :dbapi: kinterbasdb
    :connectstring: firebird+kinterbasdb://user:password@host:port/path/to/db[?key=value&key=value...]
    :url: http://firebirdsql.org/index.php?op=devel&sub=python

Arguments
----------

The Kinterbasdb backend accepts the ``enable_rowcount`` and ``retaining``
arguments accepted by the :mod:`sqlalchemy.dialects.firebird.fdb` dialect.
In addition, it also accepts the following:

* ``type_conv`` - select the kind of mapping done on the types: by default
  SQLAlchemy uses 200 with Unicode, datetime and decimal support.  See
  the linked documents below for further information.

* ``concurrency_level`` - set the backend policy with regards to threading
  issues: by default SQLAlchemy uses policy 1.  See the linked documents
  below for further information.

.. seealso::

    http://sourceforge.net/projects/kinterbasdb

    http://kinterbasdb.sourceforge.net/dist_docs/usage.html#adv_param_conv_dynamic_type_translation

    http://kinterbasdb.sourceforge.net/dist_docs/usage.html#special_issue_concurrency

    N)match   )	FBDialect)FBExecutionContext   )types)utilc                       e Zd Zd ZdS )_kinterbasdb_numericc                     d }|S )Nc                 X    t          | t          j                  rt          |           S | S N)
isinstancedecimalDecimalstr)values    m/var/www/book.euthymeo.com/html/venv/lib/python3.11/site-packages/sqlalchemy/dialects/firebird/kinterbasdb.pyprocessz4_kinterbasdb_numeric.bind_processor.<locals>.process3   s'    %11 5zz!     )selfdialectr   s      r   bind_processorz#_kinterbasdb_numeric.bind_processor2   s    	 	 	 r   N)__name__
__module____qualname__r   r   r   r   r   r   1   s#            r   r   c                       e Zd ZdS )_FBNumeric_kinterbasdbNr   r   r   r   r   r   r   r   <           Dr   r   c                       e Zd ZdS )_FBFloat_kinterbasdbNr    r   r   r   r#   r#   @   r!   r   r#   c                   $    e Zd Zed             ZdS )FBExecutionContext_kinterbasdbc                 h    | j                             d| j        j                  r| j        j        S dS )Nenable_rowcount)execution_optionsgetr   r'   cursorrowcount)r   s    r   r,   z'FBExecutionContext_kinterbasdb.rowcountE   s9    !%%t|;
 
 	 ;''2r   N)r   r   r   propertyr,   r   r   r   r%   r%   D   s-          X  r   r%   c                        e Zd ZdZdZdZeZdZ e	j
        ej        ej        eej        ei          Z	 	 	 	 d fd	Zed             Zdd	Zd
 Zd Zd Zd Zd Zd Z xZS )FBDialect_kinterbasdbkinterbasdbFT   r   c                      t          t          |           j        di | || _        || _        || _        || _        |r	d| _        d S d S )NTr   )superr/   __init__r'   	type_convconcurrency_level	retainingsupports_sane_rowcount)r   r5   r6   r'   r7   kwargs	__class__s         r   r4   zFBDialect_kinterbasdb.__init___   sg     	4#T**3==f===."!2" 	/*.D'''	/ 	/r   c                      t          d          S )Nr0   )
__import__)clss    r   dbapizFBDialect_kinterbasdb.dbapio   s    -(((r   Nc                 6    |                     ||pg            d S r   )execute)r   r+   	statement
parameterscontexts        r   
do_executez FBDialect_kinterbasdb.do_executes   s#     	y*"233333r   c                 :    |                     | j                   d S r   )rollbackr7   r   dbapi_connections     r   do_rollbackz!FBDialect_kinterbasdb.do_rollbackx   s    !!$.11111r   c                 :    |                     | j                   d S r   )commitr7   rG   s     r   	do_commitzFBDialect_kinterbasdb.do_commit{   s    /////r   c                    |                     d          }|                    d          r|d         d|d         |d<   |d= |                    |j                   t	          j        |dt                     |                    d| j                  }|                    d| j	                  }| j
        Lt          | j
        dd           }|t          | j
        d	d
          }|s| j
                            ||           g |fS )Nuser)usernameporthost/r5   r6   initialized_initializedF)r5   r6   )translate_connect_argsr*   updatequeryr	   coerce_kw_typeintpopr5   r6   r>   getattrinit)r   urloptsr5   r6   rS   s         r   create_connect_argsz)FBDialect_kinterbasdb.create_connect_args~   s   ))6)::88F 	&*6lllDLLADLVCID+s333HH[$.99	 HH!7
 
 :!!$*mTBBK" &dj.%HH 
';L      Dzr   c                 H    |j         }|j        }|                     |          S )zGet the version of the Firebird server used by a connection.

        Returns a tuple of (`major`, `minor`, `build`), three integers
        representing the version of the attached server.
        )
connectionserver_version_parse_version_info)r   ra   fbconnversions       r   _get_server_version_infoz.FBDialect_kinterbasdb._get_server_version_info   s(     &'''000r   c                 D   t          d|          }|st          d|z            |                    d          d k    r2t          d |                    ddd          D             dgz             S t          d	 |                    d
dd          D             dgz             S )Nz3\w+-V(\d+)\.(\d+)\.(\d+)\.(\d+)( \w+ (\d+)\.(\d+))?z,Could not determine version from string '%s'   c                 ,    g | ]}t          |          S r   rY   .0xs     r   
<listcomp>z=FBDialect_kinterbasdb._parse_version_info.<locals>.<listcomp>       ;;;Q#a&&;;;r            firebirdc                 ,    g | ]}t          |          S r   rj   rk   s     r   rn   z=FBDialect_kinterbasdb._parse_version_info.<locals>.<listcomp>   ro   r   r      r   	interbase)r   AssertionErrorgrouptuple)r   re   ms      r   rc   z)FBDialect_kinterbasdb._parse_version_info   s    BG
 
  	 >H   771::;;!''!Q*:*:;;;zlJKKK;;!''!Q*:*:;;;{mKLLLr   c                     t          || j        j        | j        j        f          r#t	          |          }d|v pd|v pd|v pd|v pd|v S dS )Nz$Error writing data to the connectionz*Unable to complete network request to hostzInvalid connection statezInvalid cursor statezconnection shutdownF)r   r>   OperationalErrorProgrammingErrorr   )r   era   r+   msgs        r   is_disconnectz#FBDialect_kinterbasdb.is_disconnect   s    
+TZ-HI
 
 	 a&&C6#= 0?3F0-40 *S00 )C/ 5r   )r1   r   TFr   )r   r   r   driverr8   supports_sane_multi_rowcountr%   execution_ctx_clssupports_native_decimalr	   update_copyr   colspecssqltypesNumericr   Floatr#   r4   classmethodr>   rD   rI   rL   r_   rf   rc   r   __classcell__)r:   s   @r   r/   r/   O   s$       F"#( 6"t4N0	
 H / / / / / /  ) ) [)4 4 4 4
2 2 20 0 0  61 1 1$M M M      r   r/   )__doc__r   rer   baser   r    r   r   r	   objectr   r   r   r   r#   r%   r/   r   r   r   r   <module>r      sg   @              $ $ $ $ $ $ ! ! ! ! ! !          6   	 	 	 	 	183C 	 	 		 	 	 	 	/ 	 	 	    %7   w w w w wI w w wt  r   