o
    µ„j4  ã                   @   s*   d dl mZ d dl mZ G dd„ dƒZdS )é    )Úsql)Útokensc                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚStatementSplitterz1Filter that split stream at individual statementsc                 C   s   |   ¡  d S ©N)Ú_reset©Úself© r	   ú`/var/www/html/django_cbt/venv/lib/python3.10/site-packages/sqlparse/engine/statement_splitter.pyÚ__init__   s   zStatementSplitter.__init__c                 C   s4   g | _ d| _d| _d| _d| _d| _g | _d| _dS )z/Set the filter attributes to its default valuesr   NF)Ú_block_stackÚ_parenthesis_levelÚ_unconfirmed_startÚ
_is_createÚ_seen_beginÚ
consume_wsr   Úlevelr   r	   r	   r
   r      s   
zStatementSplitter._resetc                 C   s‚   |dkr	d| _ dS |dkrd| _ dS |dv r3| j dv r'| j | j ¡ d| _ dS |dkr3| j d¡ dS |d	v r?| j |¡ dS dS )
z:Check for nested loop or control structures inside a blockÚFORr   ÚWHILE)ÚLOOPÚDO)r   r   Né   r   )ÚIFÚCASE)r   r   Úappend©r   Úunifiedr	   r	   r
   Ú_handle_nested_block   s$   
z&StatementSplitter._handle_nested_blockc                 C   s  |dkr| j r| j d dkr| j  ¡  dS dS |dkr.| j r,| j d dkr,| j  ¡  dS dS |dkrE| j rC| j d dkrC| j  ¡  dS dS |dkr\| j rZ| j d d	v rZ| j  ¡  dS dS |d
krs| j rq| j d dkrq| j  ¡  dS dS |dkr�| j r| j  ¡  dS dS )z"Handle closing keywords for blockszEND IFéÿÿÿÿr   zEND FORr   z	END WHILEr   zEND LOOP)r   r   r   zEND CASEr   ÚENDr   )r   Úpopr   r	   r	   r
   Ú_handle_closing_keyword3   s>   
ë
ï
ó
	ø
ü
z)StatementSplitter._handle_closing_keywordc                 C   s´  |t ju r%|dkr%d| _| jr#d| _| jr#| jd dkr#| j ¡  dS dS |t ju r7|dkr7|  jd7  _dS |t ju rK|d	krKtd| jd ƒ| _dS |t jvrRdS | 	¡ }|t jj
u rf| d
¡rfd| _dS |dkrx| jrx| jsx| j d¡ dS |dkržd| _| jr–| jd dkr–| j ¡  | j d¡ dS | j d¡ dS | jrÅ|t ju s«|t ju rÅ|dv rÅd| _| jrÃ| jd dkrÃ| j ¡  dS dS d| jv rÕ|  |¡}|durÕ|S |  |¡S )z<Get the new split level (increase, decrease or remain equal)ú;NFr   ÚBEGINr   ú(r   ú)ÚCREATETÚDECLARE)ÚTRANSACTIONÚWORKÚTRANÚDISTRIBUTEDÚDEFERREDÚ	IMMEDIATEÚ	EXCLUSIVE)ÚTÚPunctuationr   r   r   r    r   ÚmaxÚKeywordÚupperÚDDLÚ
startswithr   r   ÚNamer   r!   )r   ÚttypeÚvaluer   Úresr	   r	   r
   Ú_change_splitlevelP   sX   






z$StatementSplitter._change_splitlevelc                 c   s.  � t jt jjf}|D ]r\}}| jr ||vr t | j¡V  |  ¡  |  j	|  
||¡7  _	| j t ||¡¡ |t ju rO|dkrOd| _| j	dkrNd| jvrNd| _q
|t ju r`| ¡ d dkr`d| _q
|t jt jt jjt jjfvr||t ju ry| ¡ dks|d| _q
| jr“tdd„ | jD ƒƒs•t | j¡V  d	S d	S d	S )
zProcess the streamr"   Fr   r#   TÚGOc                 s   s   � | ]}|j V  qd S r   )Úis_whitespace)Ú.0Útr	   r	   r
   Ú	<genexpr>Ã   s   € z,StatementSplitter.process.<locals>.<genexpr>N)r/   Ú
WhitespaceÚCommentÚSingler   r   Ú	Statementr   r   r   r:   r   ÚTokenr0   r   r   r2   ÚsplitÚNewlineÚ	Multiliner3   Úall)r   ÚstreamÚ	EOS_TTYPEr7   r8   r	   r	   r
   Úprocess—   s0   €	€ÿ€ÿzStatementSplitter.processN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r!   r:   rK   r	   r	   r	   r
   r      s    Gr   N)Úsqlparser   r   r/   r   r	   r	   r	   r
   Ú<module>   s   