o
    i                     @   sJ  d dl Z d dlZd dlZ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 d dlmZ d d	lmZ d dlmZ d d
lmZ ejZedeeddedddee jdddd defddZdeeef fddZdd Zdd Zdd Zdd Z G dd  d eZ!G d!d" d"e!e	Z"G d#d$ d$e
Z#dS )%    N)config)Pin)FetchTracedCursor)TracedConnection)TracedCursor)db)schematize_database_operation)schematize_service_name)asboolsqlitezsqlite.query)database_providerDD_SQLITE_TRACE_FETCH_METHODSF)default)_default_service_dbapi_span_name_prefix_dbapi_span_operation_nametrace_fetch_methodsreturnc                   C   s   t jS N)sqlite3sqlite_version r   r   Z/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/sqlite3/patch.pyget_version!   s   r   c                   C   s   ddiS )Nr   *r   r   r   r   r   _supported_versions%   s   r   c                  C   s^   t tddrd S dt_ttt} | t_| tj_t	j
r-ddlm} ddlm} || d S d S )N_datadog_patchFTr   )"_set_metric_iast_instrumented_sink)VULN_SQL_INJECTION)getattrr   r   wraptFunctionWrapper_connecttraced_connectconnectdbapi2
asm_config_iast_enabledddtrace.appsec._iast._metricsr   ddtrace.appsec._iast.constantsr   )wrappedr   r   r   r   r   patch)   s   r+   c                   C   s$   t tddr	dt_tt_ttj_d S )Nr   F)r   r   r   r"   r$   r%   r   r   r   r   unpatch9   s   r,   c                 C   s   | |i |}t |S r   )
patch_conn)func_argskwargsconnr   r   r   r#   @   s   r#   c                 C   s"   t | }ttjdid| |S )Nr   )tags)TracedSQLiter   r   SYSTEMonto)r2   r*   r   r   r   r-   E   s   r-   c                       s(   e Zd Z fddZ fddZ  ZS )TracedSQLiteCursorc                       t t| j|i | | S r   )superr7   executemanyselfr0   r1   	__class__r   r   r:   L      zTracedSQLiteCursor.executemanyc                    r8   r   )r9   r7   executer;   r=   r   r   r@   Q   r?   zTracedSQLiteCursor.execute)__name__
__module____qualname__r:   r@   __classcell__r   r   r=   r   r7   K   s    r7   c                   @   s   e Zd ZdS )TracedSQLiteFetchCursorN)rA   rB   rC   r   r   r   r   rE   W   s    rE   c                       s.   e Zd Zd fdd	Zdd Zdd Z  ZS )	r4   Nc                    s6   |st jjrtnt}tt| j||t j|d d S d S )N)pincfg
cursor_cls)r   r   r   rE   r7   r9   r4   __init__)r<   r2   rF   rH   r=   r   r   rI   \   s   zTracedSQLite.__init__c                 O   s   |   j|i |S r   )cursorr@   r;   r   r   r   r@   c   s   zTracedSQLite.executec                 O   s*   t |tr|j}| jj|g|R i |S r   )
isinstancer   __wrapped__backup)r<   targetr0   r1   r   r   r   rM   g   s   
zTracedSQLite.backup)NN)rA   rB   rC   rI   r@   rM   rD   r   r   r=   r   r4   [   s    r4   )$osr   sqlite3.dbapi2r    ddtracer   ddtrace._trace.pinr   ddtrace.contrib.dbapir   r   r   ddtrace.extr   ddtrace.internal.schemar   r	   ddtrace.internal.settings.asmr&   ddtrace.internal.utils.formatsr
   r$   r"   _adddictgetenvstrr   r   r+   r,   r#   r-   r7   rE   r4   r   r   r   r   <module>   sB    
