3
( È\m  ã               @   sf   d dl mZ eddddddgƒZdd
d„ZedddddddgƒZeddƒZdd„ ZG dd„ deƒZdS )é    )Ú
namedtupleÚColumnMetadataÚnameÚdatatypeÚforeignkeysÚdefaultÚhas_defaultNFc             C   s   t | ||pg ||ƒS )N)Ú_ColumnMetadata)r   r   r   r   r   © r
   úH/usr/share/pgadmin4/web/pgadmin/utils/sqlautocomplete/parseutils/meta.pyr   	   s    Ú
ForeignKeyZparentschemaZparenttableZparentcolumnZchildschemaZ
childtableZchildcolumnÚTableMetadatazname columnsc             c   sˆ   | sdS d}d}xl| D ]d}|dkr,|dkr,q|dks<|dkrX|rN||krNd}qr|sr|}n|dkrr| rr|V  d}q||7 }qW |V  dS )zxYields default values for a function, given the string provided by
    pg_get_expr(pg_catalog.pg_proc.proargdefaults, 0)NÚ ú ú"ú'ú,r
   )Zdefaults_stringZcurrentZin_quoteÚcharr
   r
   r   Úparse_defaults   s$    
r   c               @   sT   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚFunctionMetadatac             C   s¨   || _ || _|rt|ƒnd| _|r*t|ƒnd| _|r@t|ƒ| _n:|rZtdgt|ƒ ƒ| _n |rttdgt|ƒ ƒ| _nd| _tt|
ƒƒ| _|j	ƒ | _
|| _|| _|	| _dS )z*Class for describing a postgresql functionN)Úschema_nameÚ	func_nameÚtupleÚ	arg_modesÚ	arg_namesÚ	arg_typesÚlenr   Úarg_defaultsÚstripÚreturn_typeÚis_aggregateÚ	is_windowÚis_set_returning)Úselfr   r   r   r   r   r   r    r!   r"   r   r
   r
   r   Ú__init__4   s     
zFunctionMetadata.__init__c             C   s   t || jƒo| j|jkS )N)Ú
isinstanceÚ	__class__Ú__dict__)r#   Úotherr
   r
   r   Ú__eq__T   s    zFunctionMetadata.__eq__c             C   s   | j |ƒ S )N)r)   )r#   r(   r
   r
   r   Ú__ne__X   s    zFunctionMetadata.__ne__c          
   C   s,   | j | j| j| j| j| j| j| j| j| j	f
S )N)
r   r   r   r   r   r   r    r!   r"   r   )r#   r
   r
   r   Ú
_signature[   s    zFunctionMetadata._signaturec             C   s   t | jƒ ƒS )N)Úhashr+   )r#   r
   r
   r   Ú__hash__b   s    zFunctionMetadata.__hash__c             C   s   d| j jf | jƒ  S )NzŸ%s(schema_name=%r, func_name=%r, arg_names=%r, arg_types=%r, arg_modes=%r, return_type=%r, is_aggregate=%r, is_window=%r, is_set_returning=%r, arg_defaults=%r))r&   Ú__name__r+   )r#   r
   r
   r   Ú__repr__e   s    zFunctionMetadata.__repr__c             C   s   | j otdd„ | j D ƒƒS )Nc             s   s   | ]}|d kV  qdS )ÚvNr
   )Ú.0Zarg_moder
   r
   r   ú	<genexpr>p   s    z0FunctionMetadata.has_variadic.<locals>.<genexpr>)r   Úany)r#   r
   r
   r   Úhas_variadicn   s    zFunctionMetadata.has_variadicc                s^   ˆj s
g S ˆjpdgtˆj ƒ }dd„ tˆj ˆj|ƒD ƒ‰‡‡fdd„‰ ‡ fdd„tˆƒD ƒS )z=Returns a list of input-parameter ColumnMetadata namedtuples.Úic             S   s"   g | ]\}}}|dkr||f‘qS )r5   Úbr0   )r5   r6   r0   r
   )r1   r   ÚtypÚmoder
   r
   r   ú
<listcomp>x   s   z)FunctionMetadata.args.<locals>.<listcomp>c                sH   t ˆ ƒ}t ˆjƒ}|| |k}|r4ˆj|| |  nd }t| |g ||ƒS )N)r   r   r   )r   r7   ÚnumZnum_argsZnum_defaultsr   r   )Úargsr#   r
   r   Úarg}   s    
z"FunctionMetadata.args.<locals>.argc                s    g | ]\}\}}ˆ |||ƒ‘qS r
   r
   )r1   r:   r   r7   )r<   r
   r   r9   ‡   s    )r   r   r   Úzipr   Ú	enumerate)r#   Zmodesr
   )r<   r;   r#   r   r;   r   s    
zFunctionMetadata.argsc             C   sF   | j jƒ dkrg S | js*t| j| j g ƒgS dd„ t| j| j| jƒD ƒS )z9Returns a list of output-field ColumnMetadata namedtuplesÚvoidc             S   s&   g | ]\}}}|dkrt ||g ƒ‘qS )Úor6   Út)r@   r6   rA   )r   )r1   r   r7   r8   r
   r
   r   r9   ”   s   z+FunctionMetadata.fields.<locals>.<listcomp>)r   Úlowerr   r   r   r=   r   r   )r#   r
   r
   r   Úfields‰   s    zFunctionMetadata.fieldsN)r.   Ú
__module__Ú__qualname__r$   r)   r*   r+   r-   r/   r4   r;   rC   r
   r
   r
   r   r   2   s    	r   )NNF)	Úcollectionsr   r	   r   r   r   r   Úobjectr   r
   r
   r
   r   Ú<module>   s   


