o
    8D©i¨  ã                   @   s   d dl mZmZ dd„ ZdS )é    )ÚScopeÚbuild_scopec           	      C   sª   t | ƒ}|rS| ¡ }tt| ¡ ƒƒD ]@}|jrR|t|ƒ }|dkrR|jj}|j}| 	¡  |r9t
|jƒdkr9| 	¡  |j ¡ D ]\}}t|tƒrQ|t|ƒ  d8  < q>q| S )a™  
    Remove unused CTEs from an expression.

    Example:
        >>> import sqlglot
        >>> sql = "WITH y AS (SELECT a FROM x) SELECT a FROM z"
        >>> expression = sqlglot.parse_one(sql)
        >>> eliminate_ctes(expression).sql()
        'SELECT a FROM z'

    Args:
        expression (sqlglot.Expression): expression to optimize
    Returns:
        sqlglot.Expression: optimized expression
    r   é   )r   Ú	ref_countÚreversedÚlistÚtraverseÚis_cteÚidÚ
expressionÚparentÚpopÚlenÚexpressionsÚselected_sourcesÚvaluesÚ
isinstancer   )	r   Úrootr   ÚscopeÚcountÚcte_nodeÚ	with_nodeÚ_Úsource© r   úY/var/www/Datamplify/venv/lib/python3.10/site-packages/sqlglot/optimizer/eliminate_ctes.pyÚeliminate_ctes   s"   
€r   N)Úsqlglot.optimizer.scoper   r   r   r   r   r   r   Ú<module>   s    