Ë
    õ¡Ÿjp	  ã                  óV   — d Z ddlmZ ddlZddlZddlmZ d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                ó,  — g }t        j                  d| t         j                  «      D ]M  }|j                  d«      xs |j                  d«      }|sŒ*|j	                  «       dvsŒ=|j                  |«       ŒO t        t        j                  |«      «      S )zCBest-effort extraction of table names from CREATE TABLE statements.zTCREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?(?:[`\"]?(\w+)[`\"]?\.?)?[`\"]?(\w+)[`\"]?é   é   )ÚIFÚNOTÚEXISTS)	ÚreÚfinditerÚ
IGNORECASEÚgroupÚupperÚappendÚlistÚdictÚfromkeys)Ú
schema_sqlÚnamesÚmÚts       úL/var/www/html/agent-engine/apps/agents/rag-agent/src/agent/schema_catalog.pyÚ extract_table_names_from_sql_ddlr      sz   € à€EÜ�[‰[Ø_ØÜ
�‰óò ˆð
 �G‰G�A‹JÒ$˜!Ÿ'™' !›*ˆÚ�—‘“Ð"9Ò9Ø�L‰L˜�Oðô ”—‘˜eÓ$Ó%Ð%ó    c                óH  — | €g S t        | t        «      r�| j                  d«      }t        |t        «      rlg }|D ]c  }t        |t        «      r/|j                  d«      r|j	                  t        |d   «      «       ŒBt        |t
        «      sŒS|j	                  |«       Œe |S g S )NÚtablesÚname©Ú
isinstancer   Úgetr   r   Ústr)Úschema_snapshotr   Úoutr   s       r   Útable_names_from_snapshotr$      sŽ   € ØÐØˆ	Ü�/¤4Ô(Ø ×$Ñ$ XÓ.ˆÜ�fœdÔ#ØˆCØò "�Ü˜a¤Ô&¨1¯5©5°¬=Ø—J‘Jœs 1 V¡9›~Õ.Ü ¤3Õ'Ø—J‘J˜q•Mð	"ð
 ˆJØ€Ir   c                óH  — | €g S t        | t        «      r�| j                  d«      }t        |t        «      rlg }|D ]c  }t        |t        «      r/|j                  d«      r|j	                  t        |d   «      «       ŒBt        |t
        «      sŒS|j	                  |«       Œe |S g S )NÚcollectionsr   r   )r"   r&   r#   Úcs       r   Úcollection_names_from_snapshotr(   +   sŽ   € ØÐØˆ	Ü�/¤4Ô(Ø%×)Ñ)¨-Ó8ˆÜ�k¤4Ô(ØˆCØ ò "�Ü˜a¤Ô&¨1¯5©5°¬=Ø—J‘Jœs 1 V¡9›~Õ.Ü ¤3Õ'Ø—J‘J˜q•Mð	"ð
 ˆJØ€Ir   é   )Ú
max_tablesc               ó„  — |sg S | j                  «       }g }|D ]f  }|j                  «       }d}||v r|dz  }t        j                  d|«      }|D ]  }	t        |	«      dkD  sŒ|	|v sŒ|dz  }Œ |j	                  ||f«       Œh |j                  d„ ¬«       |D �
�cg c]  \  }
}|
dkD  sŒ|‘Œ c}}
d | }|r|S |d | S c c}}
w )Nr   é
   z[_\s]+r   é   c                ó   — | d    | d   fS )Nr   r   © )Úxs    r   ú<lambda>z"shortlist_tables.<locals>.<lambda>J   s   €   !¡˜u a¨¡d˜m€ r   )Úkey)Úlowerr   ÚsplitÚlenr   Úsort)Úuser_messageÚ
candidatesr*   ÚmsgÚscoredr   ÚnÚscoreÚpartsÚpÚsÚpickeds               r   Úshortlist_tablesrA   ;   sã   € ÙØˆ	Ø
×
Ñ
Ó
€CØ$&€FØò 	%ˆØ�J‰J‹LˆØˆØ�‰8Ø�R‰KˆEÜ—‘˜ AÓ&ˆØò 	ˆAÜ�1‹v˜‹z˜a 3šhØ˜‘
‘ð	ð 	�‰�u˜d�mÕ$ð	%ð ‡K�KÑ+€KÔ,Ø"×,‘D�A�q a¨!£eŠaÓ,¨[¨jÐ9€FÙØˆØ�k�zÐ"Ð"ùó -s   ÂB<Â(B<)r   r!   Úreturnú	list[str])r"   r   rB   rC   )r7   r!   r8   rC   r*   ÚintrB   rC   )Ú__doc__Ú
__future__r   Újsonr   Útypingr   r   r$   r(   rA   r/   r   r   ú<module>rI      s3   ðñõ
 #ã Û 	Ý ó&óó ð  UVö #r   