o
    ?Di                     @   sz   d dl mZmZmZ ddlmZ G dd deZG dd deZG dd	 d	eZG d
d deZ	G dd dZ
g dZdS )    )List
NamedTupleOptional   )SparkSessionc                   @   s*   e Zd ZU eed< ee ed< eed< dS )DatabasenamedescriptionlocationUriN)__name__
__module____qualname__str__annotations__r    r   r   ^/var/www/Datamplify/venv/lib/python3.10/site-packages/duckdb/experimental/spark/sql/catalog.pyr      s   
 r   c                   @   s>   e Zd ZU eed< ee ed< ee ed< eed< eed< dS )Tabler   databaser	   	tableTypeisTemporaryNr   r   r   r   r   r   boolr   r   r   r   r      s   
 r   c                   @   sB   e Zd ZU eed< ee ed< eed< eed< eed< eed< dS )Columnr   r	   dataTypenullableisPartitionisBucketNr   r   r   r   r   r      s   
 r   c                   @   s2   e Zd ZU eed< ee ed< eed< eed< dS )Functionr   r	   	classNamer   Nr   r   r   r   r   r      s
   
 r   c                   @   s   e Zd ZdefddZdee fddZdee fddZ	dd
e
dee
 dee fddZddee
 dee fddZde
dd	fddZd	S )Catalogsessionc                 C   s
   || _ d S N)_session)selfr    r   r   r   __init__$   s   
zCatalog.__init__returnc                    6   | j jd }dtfdd  fdd|D }|S )Nz,select database_name from duckdb_databases()r%   c                 S   s   t | d d ddS )Nr    )r   r	   r
   )r   xr   r   r   transform_to_database*   s   z4Catalog.listDatabases.<locals>.transform_to_databasec                       g | ]} |qS r   r   .0r)   r*   r   r   
<listcomp>-       z)Catalog.listDatabases.<locals>.<listcomp>)r"   connsqlfetchallr   )r#   res	databasesr   r.   r   listDatabases'      zCatalog.listDatabasesc                    r&   )NzEselect table_name, database_name, sql, temporary from duckdb_tables()r%   c                 S   s"   t | d | d | d d| d dS )Nr   r      r'      )r   r   r	   r   r   )r   r(   r   r   r   transform_to_table3   s   "z.Catalog.listTables.<locals>.transform_to_tablec                    r+   r   r   r,   r:   r   r   r/   6   r0   z&Catalog.listTables.<locals>.<listcomp>)r"   r1   r2   r3   r   )r#   r4   tablesr   r;   r   
listTables0   r7   zCatalog.listTablesN	tableNamedbNamec                    sV   d| d}|r|d| d7 }| j j| }dtfdd  fdd	|D }|S )
NzY
			select column_name, data_type, is_nullable from duckdb_columns() where table_name = 'z'
		z and database_name = ''r%   c                 S   s    t | d d | d | d dddS )Nr   r   r8   F)r   r	   r   r   r   r   )r   r(   r   r   r   transform_to_columnA   s    z0Catalog.listColumns.<locals>.transform_to_columnc                    r+   r   r   r,   rA   r   r   r/   D   r0   z'Catalog.listColumns.<locals>.<listcomp>)r"   r1   r2   r3   r   )r#   r>   r?   queryr4   columnsr   rB   r   listColumns9   s   zCatalog.listColumnsc                 C      t r!   NotImplementedErrorr#   r?   r   r   r   listFunctionsG      zCatalog.listFunctionsc                 C   rF   r!   rG   rI   r   r   r   setCurrentDatabaseJ   rK   zCatalog.setCurrentDatabaser!   )r   r   r   r   r$   r   r   r6   r   r=   r   r   r   rE   r   rJ   rL   r   r   r   r   r   #   s    	 	r   )r   r   r   r   r   N)typingr   r   r   r    r   r   r   r   r   r   __all__r   r   r   r   <module>   s    	+