Ë
    õ¡ŸjÛ  ã                  óÈ   — d Z ddlmZ ddlZddlZddlZddlZddlmZ  ej                  e
«      Zdd„Zdd„Z	 	 	 	 dd„Z eh d£«      Zdd	„Zdd
„Zddœ	 	 	 	 	 	 	 	 	 dd„Zy)zM
author: Yagnik Poshiya
organization: Webbrains Technologies Private Limited
é    )ÚannotationsN)ÚAnyc                óN   — t        j                  d| «      st        d| › �«      ‚| S )Nz^[A-Za-z_][A-Za-z0-9_]*$zInvalid table name: )ÚreÚmatchÚ
ValueError)Únames    úK/var/www/html/agent-engine/apps/agents/rag-agent/src/agent/sqlite_runner.pyÚ_safe_identifierr      s)   € Ü�8‰8Ð/°Ô6ÜÐ/°¨vÐ6Ó7Ð7Ø€Kó    c                ó�   — | €yt        | t        «      ryt        | t        «      rt        | t        «      syt        | t        «      ryy)NÚTEXTÚINTEGERÚREAL)Ú
isinstanceÚboolÚintÚfloat)Úvalues    r
   Ú_infer_sqlite_typer      s=   € Ø€}ØÜ�%œÔØÜ�%œÔ¤j°¼Ô&=ØÜ�%œÔØØr   c                ó  — t        j                  d«      }t         j                  |_        | D �]´  }t	        t        |j                  dd«      «      «      }|j                  d«      }t        |t
        «      rt        j                  |«      }t        |t        «      r|s|j                  d|› d�«       Œ†|d   }t        |t        «      sŒœt        |j                  «       «      }g }|D ]E  }t	        t        |«      «       |j                  d|› d	t        |j                  |«      «      › �«       ŒG d
|› ddj!                  |«      › d�}	|j                  |	«       dj!                  |D �
cg c]  }
d‘Œ c}
«      }dj!                  d„ |D «       «      }d|› d|› d|› d�}|D ]C  }t        |t        «      sŒ|D �cg c]  }|j                  |«      ‘Œ }}|j                  ||«       ŒE �Œ· |j#                  «        |S c c}
w c c}w )zg
    rows: each dict has schema_name, table_name, table_data (jsonb-compatible list of row dicts).
    z:memory:Ú
table_nameÚtÚ
table_datazCREATE TABLE IF NOT EXISTS "z)" (id INTEGER PRIMARY KEY AUTOINCREMENT);r   ú"z" zCREATE TABLE "z" (ú, z);ú,ú?c              3  ó(   K  — | ]
  }d |› d �–— Œ y­w)r   N© )Ú.0Úcs     r
   ú	<genexpr>z*load_tables_into_sqlite.<locals>.<genexpr>>   s   è ø€ Ò3¨˜a ˜s !œHÑ3ùs   ‚zINSERT INTO "z
) VALUES (ú))Úsqlite3ÚconnectÚRowÚrow_factoryr   ÚstrÚgetr   ÚjsonÚloadsÚlistÚexecuteÚdictÚkeysÚappendr   ÚjoinÚcommit)ÚrowsÚconnÚrowÚtnameÚdataÚfirstÚcolsÚcol_defsr"   ÚddlÚ_ÚplaceholdersÚcol_listÚ
insert_sqlÚrecÚvaluess                   r
   Úload_tables_into_sqliterC   #   sÖ  € ô �?‰?˜:Ó&€DÜ—{‘{€DÔØó -ˆÜ ¤ S§W¡W¨\¸3Ó%?Ó!@ÓAˆØ�w‰w�|Ó$ˆÜ�dœCÔ Ü—:‘:˜dÓ#ˆDÜ˜$¤Ô%©TØ�L‰LÐ7¸°wÐ>gÐhÔiØØ�Q‘ˆÜ˜%¤Ô&ØÜ�E—J‘J“LÓ!ˆØˆØò 	IˆAÜœS ›VÔ$Ø�O‰O˜a ˜s "Ô%7¸¿	¹	À!»Ó%EÐ$FÐGÕHð	Ið ˜u˜g S¨¯©°8Ó)<Ð(=¸RÐ@ˆØ�‰�SÔØ—x‘x¨dÖ 3¨¢Ò 3Ó4ˆØ—8‘8Ñ3¨dÔ3Ó3ˆØ$ U G¨3¨x¨j¸
À<À.ÐPQÐRˆ
Øò 	-ˆCÜ˜c¤4Ô(ØØ*.Ö/ Q�c—g‘g˜a•jÐ/ˆFÐ/Ø�L‰L˜ VÕ,ò		-ð+-ð4 	‡K�K„MØ€Kùò !4ùò 0s   Å&	G7
Æ4G<>C   ÚASÚBYÚINÚISÚONÚORÚABSÚALLÚANDÚASCÚAVGÚENDÚMAXÚMINÚNOTÚSETÚSUMÚCASEÚCASTÚDATEÚDESCÚELSEÚFROMÚFULLÚINTOÚJOINÚLEFTÚLIKEÚNULLÚTHENÚTIMEÚTRIMÚTRUEÚWHENÚWITHÚCOUNTÚCROSSÚFALSEÚGROUPÚINNERÚLIMITÚLOWERÚORDERÚOUTERÚRIGHTÚROUNDÚTOTALÚUNIONÚUPPERÚUSINGÚWHEREÚEXISTSÚHAVINGÚIFNULLÚLENGTHÚOFFSETÚSELECTÚSUBSTRÚTYPEOFÚVALUESÚBETWEENÚNATURALÚREPLACEÚCOALESCEÚDATETIMEÚDISTINCTÚ	RECURSIVEc                ó¶   — t        t        j                  d| t        j                  «      «      }|D �ch c]  }|j	                  «       t
        vsŒ|’Œ c}S c c}w )Nz4(?:FROM|JOIN)\s+[\"`]?([A-Za-z_][A-Za-z0-9_]*)[\"`]?)Úsetr   ÚfindallÚ
IGNORECASEÚupperÚ_SQL_KEYWORDS)ÚsqlÚfoundr   s      r
   Ú_tables_referencedr�   V   sG   € ÜÜ
�
‰
ÐJÈCÔQS×Q^ÑQ^Ó_ó€Eð Ö?�! §¡£	´Ò >ŠAÒ?Ð?ùÒ?s   ³AÁAc                ó\  — | j                  «       j                  d«      }|j                  «       j                  «       }|j                  d«      syd}|D ]%  }t	        j
                  d|› d�|«      sŒdd|› �fc S  t        |«      }||z
  }|rddd	j                  t        |«      «      › �fS y
)Nú;Úselect)Fz Only SELECT queries are allowed.)ÚattachÚpragmaÚdetachÚvacuumÚreindexÚanalyzeÚinsertÚupdateÚdeleteÚdropÚalterÚcreateÚreplaceÚtruncatez\bFzForbidden keyword: zUnknown table(s): r   )TÚ )	ÚstripÚrstripÚlowerÚ
startswithr   Úsearchr�   r2   Úsorted)r�   Úallowed_tablesÚsÚlowÚ	forbiddenÚfÚrefsÚunknowns           r
   Úvalidate_sqlr¯   ]   s·   € Ø�	‰	‹×Ñ˜3Ó€AØ
�'‰'‹)�/‰/Ó
€CØ�>‰>˜(Ô#Ø8ð€Ið  ò 4ˆÜ�9‰9˜˜1˜#˜R�[ #Õ&ØÐ/°¨sÐ3Ð3Ò3ð4ô ˜aÓ €DØ�^Ñ#€GÙØÐ*¨4¯9©9´V¸G³_Ó+EÐ*FÐGÐGÐGØr   éÈ   )Úmax_rowsc          	     ó6  — t        ||«      \  }}|st        |«      ‚|j                  «       j                  d«      }d|› d|› �}	 t        j                  d|«       | j                  |«      }|j                  r|j                  D �
cg c]  }
|
d   ‘Œ	 c}
ng }|j                  «       D �cg c]  }t        t        ||«      «      ‘Œ }}||fS # t        j                  $ r0}	t        j                  d|	«       t        t        |	«      «      |	‚d }	~	ww xY wc c}
w c c}w )Nr‘   zSELECT * FROM (z) AS _q LIMIT zsqlite_query_execute sql=%sz sqlite_query_failed raw_error=%rr   )r¯   r   r¢   r£   ÚloggerÚinfor.   r%   ÚErrorÚwarningr)   ÚdescriptionÚfetchallr/   Úzip)r5   r�   r¨   r±   ÚokÚerrÚ	sql_innerÚlimitedÚcurÚeÚdÚcolnamesr6   Úouts                 r
   Ú
run_selectrÃ   |   sù   € ô ˜3 Ó/�G€BˆÙÜ˜‹oÐØ—	‘	“×"Ñ" 3Ó'€IØ 	˜{¨.¸¸
ÐC€Gð(Ü�‰Ð1°3Ô7Ø�l‰l˜7Ó#ˆð 36·/²/˜cŸo™oÖ.˜��!“Ó.Àr€HØ/2¯|©|«~Ö
>¨Œ4”�H˜cÓ"Õ#Ð
>€CÐ
>Ø�Sˆ=Ðøô �=‰=ò (Ü�‰Ð9¸1Ô=Üœ˜Q›Ó  aÐ'ûð(üò /ùÚ
>s$   Á'C ÂDÂ)DÃDÃ+D	Ä	D)r	   r)   Úreturnr)   )r   r   rÄ   r)   )r4   zlist[dict[str, Any]]rÄ   úsqlite3.Connection)r�   r)   rÄ   úset[str])r�   r)   r¨   rÆ   rÄ   ztuple[bool, str])
r5   rÅ   r�   r)   r¨   rÆ   r±   r   rÄ   z&tuple[list[str], list[dict[str, Any]]])Ú__doc__Ú
__future__r   r+   Úloggingr   r%   Útypingr   Ú	getLoggerÚ__name__r³   r   r   rC   Ú	frozensetrŒ   r�   r¯   rÃ   r    r   r
   ú<module>rÎ      s¥   ðñõ
 #ã Û Û 	Û Ý à	ˆ×	Ñ	˜8Ó	$€óó	ð#Ø
ð#àó#ñL ò 
ó 
€ó@óðH ñØ
ðà	ðð ð	ð
 ðð ,ôr   