o
    q3i                     @   s  d dl mZmZ d dlmZ d dlZd dlmZmZ d dl	m
Z
 d dlmZmZ d dlmZ d dlmZ e ZG d	d
 d
eZG dd deZeddd Zeddd Zeddd Z	eddedefddZeddedefddZed edd!d"edd#d"edd$d"ededfded%edee d&ee d'ee d(ee d)ee fd*d+Zed,d-efd.d/Zed0d1d2 Ze d3d4efd5d6Z!e d7d4efd8d9Z"dS ):    )FastAPIQuery)OptionalN)
get_tablesget_columns)build_graph)predict_joinability	best_path)generate_multi_join_sqlsuggest_column_namec                   @      e Zd ZU eed< eed< dS )RenameRequestrawreadableN__name__
__module____qualname__str__annotations__ r   r   '/var/www/html/database-metadata/main.pyr         
 r   c                   @   r   )TableRenameRequestr   r   Nr   r   r   r   r   r      r   r   z/tablesc                   C      t  S N)r   r   r   r   r   tables      r   z/columnsc                   C   r   r   )r   r   r   r   r   columns   r   r   z/graphc                  C   s   t  } t| jt| jdS )N)nodesedges)r   listr    r!   )Gr   r   r   graph   s   r$   z/predict_joint1t2c                 C   s   t | |}d|iS )Njoinability_score)r   )r%   r&   scorer   r   r   predict"   s   
r)   z
/best_pathsourcetargetc                 C   s   dt | |iS )Nr	   )r	   )r*   r+   r   r   r   path'   s   r,   z!/generate_multi_join_sql_filteredz)Format: table1.col1,col2;table2.col3,col4)descriptionz5JSON: {"table": {"col": {"op": "=", "value": "val"}}}zJSON: [["table", "col", "asc"]]targetswhereorderlimitoffsetc                 C   s   | d}i }|r.| dD ]}	|	 d}
|
d }t|
dkr&|
d  dndg}|||< q|r5t|ni }|r>t|ng }t| ||||||}d|iS )N,;.r      *sql)splitlenjsonloadsr
   )r*   r.   r   r/   r0   r1   r2   target_listcolumn_filtersgrouppartstablecolswhere_filtersorder_byr8   r   r   r   multi_join_sql_filtered+   s(   


 
	rE   z/suggest_column_namer   c                 C   s   t | \}}|t|ddS )N   )suggested_name
confidence)r   round)r   namer(   r   r   r   suggestL   s   rK   z/columns_with_suggestionsc                  C   s2   t  } i }|  D ]\}}dd |D ||< q	|S )Nc                 S   s   g | ]}|t |d  dqS )r   )original	suggestedr   ).0colr   r   r   
<listcomp>V   s    z,columns_with_suggestions.<locals>.<listcomp>)r   items)r   resultrA   rB   r   r   r   columns_with_suggestionsQ   s   rS   z/rename_columnreqc                 C   (   t | j| j dd| j d| j diS )Nmessagez	Renamed '' to '')update_column_namer   r   rT   r   r   r   rename_column\      r[   z/rename_tablec                 C   rU   )NrV   zRenamed table 'rW   rX   )update_table_namer   r   rZ   r   r   r   rename_table_apia   r\   r^   )#fastapir   r   typingr   r;   dbr   r   r$   r   mlr   r	   join_generatorr
   semantic_renamer   app	BaseModelr   r   getr   r   r   r)   r,   intrE   rK   rS   postr[   r^   r   r   r   r   <module>   sd    





 

