o
    QDi                     @   sv   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mZ d dlmZ G d	d
 d
ejZdS )    N)forms)ValidationError)connections)cached_property)gettext_lazy)is_select_queryreformat_sql)DebugToolbarc                       s   e Zd ZdZe Ze Zdd Zdd Z	dd Z
 fdd	Zd
d Zdd Zdd Zdd Zedd Zedd Z  ZS )SQLSelectFormz|
    Validate params

        request_id: The identifier for the request
        query_id: The identifier for the query
    c                 C   s   | j d }t|std|S )Nraw_sqlz"Only 'select' queries are allowed.)cleaned_datar   r   selfvalue r   W/var/www/Datamplify/venv/lib/python3.10/site-packages/debug_toolbar/panels/sql/forms.pyclean_raw_sql   s   
zSQLSelectForm.clean_raw_sqlc              
   C   s:   | j d }zt|W S  ty } ztd|d }~ww )NparamszIs not valid JSON)r   jsonloads
ValueErrorr   )r   r   excr   r   r   clean_params    s   

zSQLSelectForm.clean_paramsc                 C   s&   | j d }|tvrtd| d|S )NaliaszDatabase alias 'z' not found)r   r   r   r   r   r   r   clean_alias(   s   
zSQLSelectForm.clean_aliasc                    s   ddl m} t  }tj| jd |jd}|d u r tt	d|
|j}d }| d D ]}|d | jd kr:q.|} |sEtt	d||d	< |S )
Nr   )SQLPanel
request_id)panel_idz,Data for this panel isn't available anymore.queriesdjdt_query_idzInvalid query id.query)debug_toolbar.panels.sqlr   supercleanr	   fetchr   r   r   _get_panel_by_id	get_stats)r   r   r   toolbarpanelr    q	__class__r   r   r#   0   s$   
zSQLSelectForm.cleanc                 C   sv   | j d }|d }t|d }| j}||| dd |jD }| }||fW  d    S 1 s4w   Y  d S )Nr    r   r   c                 S      g | ]}|d  qS r   r   .0dr   r   r   
<listcomp>N       z(SQLSelectForm.select.<locals>.<listcomp>r   r   r   cursorexecutedescriptionfetchallr   r    sqlr   r5   headersresultr   r   r   selectH   s   
$zSQLSelectForm.selectc                 C   s   | j d }|d }t|d }|d }| j=}|dkr&|d| | n|dkr4|d| | n	|d	| | d
d |jD }| }||fW  d    S 1 sWw   Y  d S )Nr    r   r   vendorsqlitezEXPLAIN QUERY PLAN 
postgresqlzEXPLAIN ANALYZE zEXPLAIN c                 S   r-   r.   r   r/   r   r   r   r2   a   r3   z)SQLSelectForm.explain.<locals>.<listcomp>r4   )r   r    r:   r   r>   r5   r;   r<   r   r   r   explainR   s   
$zSQLSelectForm.explainc                 C   s   | j d }|d }t|d }| j-}|d ||| |d |d dd |jD }| }||fW  d    S 1 sCw   Y  d S )	Nr    r   r   zSET PROFILING=1zSET PROFILING=0a2  
                SELECT *
                FROM information_schema.profiling
                WHERE query_id = (
                    SELECT query_id
                    FROM information_schema.profiling
                    ORDER BY query_id DESC
                    LIMIT 1
                )
                c                 S   r-   r.   r   r/   r   r   r   r2   {   r3   z)SQLSelectForm.profile.<locals>.<listcomp>r4   r9   r   r   r   profilee   s   


$zSQLSelectForm.profilec                 C   s   t | jd d ddS )Nr    r:   F)with_toggle)r   r   r   r   r   r   r      s   zSQLSelectForm.reformat_sqlc                 C   s   t | jd d  S )Nr    r   )r   r   rD   r   r   r   
connection   s   zSQLSelectForm.connectionc                 C   s
   | j  S )N)rE   r5   rD   r   r   r   r5      s   
zSQLSelectForm.cursor)__name__
__module____qualname____doc__r   	CharFieldr   r   r   r   r   r#   r=   rA   rB   r   propertyrE   r   r5   __classcell__r   r   r+   r   r
      s     

r
   )r   djangor   django.core.exceptionsr   	django.dbr   django.utils.functionalr   django.utils.translationr   r%   debug_toolbar.panels.sql.utilsr   r   debug_toolbar.toolbarr	   Formr
   r   r   r   r   <module>   s    