o
    SDib                     @   sd   d dl Z d dl mZ d dlmZmZ ddlmZ ddlmZm	Z	m
Z
 ddlmZ G dd	 d	eZdS )
    N)Any)MetaData
SchemaItem   )CustomTablePrefix)LiteralOptionLiteralOptionTypeTableOptionKey)TableFromQueryBasec                       s   e Zd ZdZejgZdZede	j
e fddZede	j
e fddZede	j
e fdd	Zd
d
ddededededededd
f fddZdededededd
f
ddZdefddZ  ZS )IcebergTablea  
    A class representing an iceberg table with configurable options and settings.

    While it does not support reflection at this time, it provides a flexible
    interface for creating iceberg tables and management.

    For further information on this clause, please refer to: https://docs.snowflake.com/en/sql-reference/sql/create-iceberg-table

    Example using option values:

        IcebergTable(
        "dynamic_test_table_1",
        metadata,
        Column("id", Integer),
        Column("name", String),
        external_volume='my_external_volume',
        base_location='my_iceberg_table'"
    )

    Example using explicit options:
        DynamicTable(
        "dynamic_test_table_1",
        metadata,
        Column("id", Integer),
        Column("name", String),
        external_volume=LiteralOption('my_external_volume')
        base_location=LiteralOption('my_iceberg_table')
    )
    Treturnc                 C      |  tjS N)_get_dialect_optionr	   EXTERNAL_VOLUMEself r   m/var/www/Datamplify/venv/lib/python3.10/site-packages/snowflake/sqlalchemy/sql/custom_schema/iceberg_table.pyexternal_volume1      zIcebergTable.external_volumec                 C   r   r   )r   r	   BASE_LOCATIONr   r   r   r   base_location5   r   zIcebergTable.base_locationc                 C   r   r   )r   r	   CATALOGr   r   r   r   catalog9   r   zIcebergTable.catalogN)r   r   namemetadataargsr   r   kwc                   sh   | ddrd S ttj|ttj|ttjdg}|| | t	 j
||g|R i | d S )N_no_initT	SNOWFLAKE)getr   creater	   r   r   r   update_as_dialect_optionssuper__init__)r   r   r   r   r   r   r   options	__class__r   r   r&   =   s   	 zIcebergTable.__init__c                 O   s"   | j ||g|R ddi| d S )Nr   F)r&   )r   r   r   r   r   r   r   r   _initR   s   "zIcebergTable._initc                    s   dd t jgt jg dd  jD  t jg t jg t jg t jg t j	g  fdddD   S )NzIcebergTable(%s)z, c                 S   s   g | ]}t |qS r   )repr).0xr   r   r   
<listcomp>_   s    z)IcebergTable.__repr__.<locals>.<listcomp>c                    s$   g | ]}| d t t | qS )=)r+   getattr)r,   kr   r   r   r.   e   s   $ )schema)
joinr+   r   r   columnsr   r   r   
cluster_byas_queryr   r   r   r   __repr__[   s&   






zIcebergTable.__repr__)__name__
__module____qualname____doc__r   ICEBERG__table_prefixes___support_structured_typespropertytypingOptionalr   r   r   r   strr   r   r   r   r&   r*   r7   __classcell__r   r   r(   r   r      sN    
	r   )r@   r   sqlalchemy.sql.schemar   r   custom_table_prefixr   r'   r   r   r	   table_from_queryr
   r   r   r   r   r   <module>   s   