
    3i                     X    d Z ddlmZ ddlmZ ddlmZ ddlmZ ededee   fd       Z	y	)
zAtomic transaction context manager utilities for MySQL Connector/Python.

Provides context manager atomic_transaction() that ensures commit on success
and rollback on error without obscuring the original exception.
    )contextmanager)Iterator)MySQLConnectionAbstract)MySQLCursorAbstractconnreturnc              #     K   | j                   }| j                         }d}	 |rd| _         | | j                          	 || _         	 |j                          y# t        $ r$ d}	 | j	                           # t        $ r Y  w xY ww xY w# t        $ r |s Y yw xY w# || _         	 |j                          w # t        $ r |s Y w w xY wxY ww)a  
    Context manager that wraps a MySQL database cursor and ensures transaction
    rollback in case of exception.

    NOTE: DDL statements such as CREATE TABLE cause implicit commits. These cannot
    be managed by a cursor object. Changes made at or before a DDL statement will
    be committed and not rolled back. Callers are responsible for any cleanup of
    this type.

    This class acts as a robust, PEP 343-compliant context manager for handling
    database cursor operations on a MySQL connection. It ensures that all operations
    executed within the context block are part of the same transaction, and
    automatically calls `connection.rollback()` if an exception occurs, helping
    to maintain database integrity. On normal completion (no exception), it simply
    closes the cursor after use. Exceptions are always propagated to the caller.

    Args:
        conn: A MySQLConnectionAbstract instance.
    FTN)
autocommitcursorcommit	Exceptionrollbackclose)r   old_autocommitr   exception_raiseds       AD:\jyotish\venv\Lib\site-packages\mysql/ai/utils/atomic_cursor.pyatomic_transactionr   *   s     . __N[[]F#DO )	LLN  		MMO 	  	 				  	# $		 )	LLN 	# $	s   C
A  C
B	 C
B%A65B6	B?BBBB 	BC
BC
C$B54C5CCCCC
N)
__doc__
contextlibr   typingr   mysql.connector.abstractsr   mysql.connector.cursorr   r        r   <module>r      sB   : &  = 6 3
!3!"3 3r   