o
    8Di                     @  sl   d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZmZmZ d dlZG dd	 d	eZdS )
    )annotations)exp)seq_get)Postgres)	TokenType)remove_unique_constraints'ctas_with_tmp_tables_to_create_tmp_view
preprocessNc                   @  s0   e Zd ZG dd dejZG dd dejZdS )Materializec                   @  sR   e Zd Zi ejjddd iZi ejjejdd iZdddZ	dd
dZ
dS )zMaterialize.ParserMAPc                 C     |   S N)
_parse_mapself r   U/var/www/Datamplify/venv/lib/python3.10/site-packages/sqlglot/dialects/materialize.py<lambda>   s    zMaterialize.Parser.<lambda>c                 C  s   | j tjt|d|  dS )Nr   this
expression)r   r   Kwargr   _parse_assignment)r   expressionsr   r   r   r      s    returnt.Optional[exp.Expression]c                 C  r   r   )_parse_fieldr   r   r   r   _parse_lambda_arg   s   z$Materialize.Parser._parse_lambda_arg	exp.ToMapc                 C  s   |  tjr| jtj|  d}|   |S |  tjs!| 	d dd | 
| jD }|  tjs7| 	d | jtj| jtj|ddS )N)r   zExpecting [c                 S  s   g | ]}t j|j|jd qS )r   )r   
PropertyEQr   r   ).0er   r   r   
<listcomp>*   s    z1Materialize.Parser._parse_map.<locals>.<listcomp>zExpecting ])r   )_matchr   L_PARENr   r   ToMap_parse_select_match_r_paren	L_BRACKETraise_error
_parse_csv_parse_lambda	R_BRACKETStruct)r   to_mapentriesr   r   r   r   !   s   


zMaterialize.Parser._parse_mapN)r   r   )r   r   )__name__
__module____qualname__r   ParserNO_PAREN_FUNCTION_PARSERSLAMBDASr   FARROWr   r   r   r   r   r   r3      s    

r3   c                      s   e Zd ZdZi ejjejdd ej	e
eegejdd ejdd ejdd iZeej dddZd fddZdddZdddZ  ZS )zMaterialize.GeneratorFc                 C     dS N r   r   r!   r   r   r   r   9       zMaterialize.Generator.<lambda>c                 C  r7   r8   r   r:   r   r   r   r   @   r;   c                 C  r7   r8   r   r:   r   r   r   r   A   r;   c                 C  r7   r8   r   r:   r   r   r   r   B   r;   r   exp.PropertyEQr   strc                 C  s   |  |dS )Nz=>)binaryr   r   r   r   r   propertyeq_sqlF   s   z$Materialize.Generator.propertyeq_sqlexp.DataTypec                   s   | tjjjr|jr| j|dd dS dS | tjjjr:t|jdkr:|j\}}d| | d| | dS t	 
|S )	NTflatz LISTLIST   zMAP[z => ])is_typer   DataTypeTyperD   r   r   lensqlsuperdatatype_sql)r   r   keyvalue	__class__r   r   rM   I   s   
z"Materialize.Generator.datatype_sqlexp.Listc                 C  sH   t t|jdtjr| dt|jdS | d d| j|dd dS )Nr   rD   [TrB   rF   )
isinstancer   r   r   Selectfuncnormalize_funcr?   r   r   r   list_sqlU   s    zMaterialize.Generator.list_sqlr   c                 C  s:   t |jtjr| d|jS | d d| |j dS )Nr   rS   rF   )rT   r   r   rU   rV   rW   r   r?   r   r   r   	tomap_sql[   s   zMaterialize.Generator.tomap_sql)r   r<   r   r=   )r   rA   r   r=   )r   rR   r   r=   )r   r   r   r=   )r0   r1   r2   SUPPORTS_CREATE_TABLE_LIKEr   	Generator
TRANSFORMSr   AutoIncrementColumnConstraintCreater	   r   r   #GeneratedAsIdentityColumnConstraint
OnConflictPrimaryKeyColumnConstraintpopr%   r@   rM   rX   rY   __classcell__r   r   rP   r   r[   4   s(    





r[   N)r0   r1   r2   r   r3   r[   r   r   r   r   r
      s    #r
   )
__future__r   sqlglotr   sqlglot.helperr   sqlglot.dialects.postgresr   sqlglot.tokensr   sqlglot.transformsr   r   r	   typingtr
   r   r   r   r   <module>   s    