o
    i	                     @   sr   d dl 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 )    )
NamedTuple   )SparkSessionc                   @   s*   e Zd ZU eed< edB ed< eed< dS )DatabasenameNdescriptionlocationUri)__name__
__module____qualname__str__annotations__ r   r   Y/home/ubuntu/.local/lib/python3.10/site-packages/duckdb/experimental/spark/sql/catalog.pyr      s   
 r   c                   @   s>   e Zd ZU eed< edB ed< edB ed< eed< eed< dS )Tabler   Ndatabaser   	tableTypeisTemporaryr	   r
   r   r   r   boolr   r   r   r   r      s   
 r   c                   @   sB   e Zd ZU eed< edB ed< eed< eed< eed< eed< dS )Columnr   Nr   dataTypenullableisPartitionisBucketr   r   r   r   r   r      s   
 r   c                   @   s2   e Zd ZU eed< edB ed< eed< eed< dS )Functionr   Nr   	classNamer   r   r   r   r   r   r      s
   
 r   c                   @   s   e Zd ZdeddfddZdee fddZdee fdd	Z	dd
e
de
dB dee fddZdde
dB dee fddZde
ddfddZdS )CatalogsessionreturnNc                 C   s
   || _ d S N)_session)selfr   r   r   r   __init__%   s   
zCatalog.__init__c                    >   | j jd }dtt dtfdd  fdd|D }|S )Nz,select database_name from duckdb_databases()xr   c                 S   s   t | d d ddS )Nr    )r   r   r   )r   r%   r   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fetchalllistr   r   )r"   res	databasesr   r,   r   listDatabases(      zCatalog.listDatabasesc                    r$   )NzEselect table_name, database_name, sql, temporary from duckdb_tables()r%   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_table4   s   "z.Catalog.listTables.<locals>.transform_to_tablec                    r)   r   r   r*   r9   r   r   r-   7   r.   z&Catalog.listTables.<locals>.<listcomp>)r!   r/   r0   r1   r2   r   r   )r"   r3   tablesr   r:   r   
listTables1   r6   zCatalog.listTables	tableNamedbNamec                    sb   d| d}|r|d| d7 }| j j| }dtttB  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%   r   c                 S   s    t | d d | d | d dddS )Nr   r   r7   F)r   r   r   r   r   r   )r   r'   r   r   r   transform_to_columnB   s    z0Catalog.listColumns.<locals>.transform_to_columnc                    r)   r   r   r*   r@   r   r   r-   E   r.   z'Catalog.listColumns.<locals>.<listcomp>)r!   r/   r0   r1   r2   r   r   r   )r"   r=   r>   queryr3   columnsr   rA   r   listColumns:   s   zCatalog.listColumnsc                 C      t r    NotImplementedErrorr"   r>   r   r   r   listFunctionsH      zCatalog.listFunctionsc                 C   rE   r    rF   rH   r   r   r   setCurrentDatabaseK   rJ   zCatalog.setCurrentDatabaser    )r	   r
   r   r   r#   r2   r   r5   r   r<   r   r   rD   r   rI   rK   r   r   r   r   r   $   s    	 	r   )r   r   r   r   r   N)
typingr   r   r   r   r   r   r   r   __all__r   r   r   r   <module>   s    	+