
    gz                       d dl mZ d dlZd dlmZmZ d dlmZ dZddZ	dZ
 ej                  de
 d	ej                  ej                  z  
      Z ej                  de
 d	ej                  ej                  z  
      Z ej                  de
 d	ej                  ej                  z  
      Z ej                  de
 dej                  
      ZddZddd	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZedz  dz
  ZddZy)    )annotationsN)AnyMapping)SpanAttributesP   c                   | j                  t        j                        }t        |t              sy|||k7  ry|j                         }t        |t              rs| j                  t        j                        }|r4t        |t              r$|j                  |      r|dt        |       dz
   }n|}||vryt        j                  d|      syt        |      S )zTry to construct a useful span message from OTel db statement.

    Returns: A new string to use as span message or None to keep the original message.
    N   z\S+)getr   DB_STATEMENT
isinstancestrstripDB_NAMEendswithlenre	fullmatchsummarize_query)
attributesmessage	span_namedb_statementdb_name	operations         [/var/www/openai/venv/lib/python3.12/site-packages/logfire/_internal/db_statement_summary.pymessage_from_db_statementr      s    
 >>."="=>LlC(w)3 %%'L'3..!7!78z'3/G4D4DW4M 33w<-!"34IIL(||FI.<((    z
[\w."'`-]+zSELECT (.+?) FROM ()flagszWITH (.+?) SELECT (.+?) FROM (z SELECT (.+?) FROM (\(.+?\)) AS (zINSERT INTO (z) (\(.+?\)) VALUES (\(.+?\))c           	     V   | j                         } t        |       t        k  r| S t        j                  dd| t        j
                        } t        j                  dd|       j                         } t        |       t        k  r| S t        j                  |       x}r2|j                         \  }}}t        |||j                         | |      S t        j                  |       x}r(t        |j                         |j                         | dS t        j                  |       x}r2|j                         \  }}}t        |||j                         | |      S t        j                  |       x}r3|j                         \  }}}d	| dt        |d
       dt        |d
       S t        |       S )zSummarize a database statement, specifically SQL queries.

    Args:
        db_statement: The database statement to summarize.

    Returns: A new string to use as span message or None to keep the original message.

    z^[ \t]*--.* r   z\s{2,} )	match_endr   	sub_query)r$   r   )r$   r   cteszINSERT INTO    z VALUES )r   r   MAX_QUERY_MESSAGE_LENGTHr   sub	MULTILINESELECT_SUBQUERY_REmatchgroupsselectend	SELECT_RESELECT_CTE_RE	INSERT_REtruncatefallback)	r   select_matchexprsubquerytabler&   insert_matchcolumnsvaluess	            r   r   r   3   s     %%'L
<44 66."l",,OL 66)S,7==?L
<44)//==|= , 3 3 5hdE\-=-=-?lfnoo"6	6	6|**,8H8H8JYeff&,,\:	:	:(//1dEdE\-=-=-?laeff"6	6	6!-!4!4!6weWAhw&;%<HXfVXEYDZ[[%%r   )r&   r%   c          	        t        | d      } |r d|  dt        |d       dt        |d       }nd|  dt        |d       }|rct        j                  dt         d|t        j                  	      }t        |      d
k(  rdt        |d   d       d| }ndt        |       d| }t        j                  dt         d||d  t        j                  	      }t        |      d
k(  r| dt        |d   d       d}n|r| dt        |       d}t        j                  d||d  t        j                  	      r| d}t        j                  d||d  t        j                  	      x}	r| d|	j                  d
       }t        |t              S )N   zSELECT z FROM r'   z AS    (z) ASr   r	   zWITH r   
   u
    AS (…) u	   WITH …[z CTEs] zJOIN (r   z JOIN u    ON …u    …[z JOINs]WHEREu
    WHERE …zLIMIT (\d+)z LIMIT )	r3   r   findallTABLE_REIr   searchgroupr(   )
r6   r8   r$   r   r&   r%   summarycte_asjoinslimits
             r   r.   r.   X   s    D"DD6B(?'@XeUWEXDYZ D6(;'<=q
$/RTTBv;!hvay"56j	JG!#f+ggY?GJJ&
!,l9:.FbddSE
5zQIVHU1Xr$:#;7C	IU3u:,g6	yy,yz2"$$?IZ(		.,yz*B"$$OOuOIWU[[^$45G566r   c                H    t        |       |k  r| S |dz  }| d |  d| | d   S )N   u   …)r   )slengthhalf_lengths      r   r3   r3   y   s>    
1vkL[/"#a&6%788r   rL   c                .    | d t           d| t          d   S )Nu    … )FALLBACK_HALF)r   s    r   r4   r4      s%    >M*+5}no1N0OPPr   )r   zMapping[str, Any]r   
str | Noner   r   returnrR   )r   r   rS   rR   )r6   r   r8   r   r$   intr   r   r&   rR   r%   rR   rS   r   )rM   r   rN   rT   rS   r   )r   r   )
__future__r   r   typingr   r   opentelemetry.semconv.tracer   r(   r   rC   compilerD   DOTALLr0   r1   r+   r2   r   r.   r3   rQ   r4    r   r   <module>r[      s9   " 	  6 )B BJJ-hZq9		AQR	

<XJaHPRPTPTWYW`W`P`aRZZ#CH:Q OWYW[W[^`^g^gWgh BJJ-z1MNVXVZVZ[	"&L UYrv7
77),7<?7GQ7eo77B9 )A-1Qr   