o
    6	f                     @   sd   d Z ddlmZmZmZmZmZ ddlmZ erddl	m
Z
 G dd deZG dd	 d	ee Zd
S )z)
The Column object in Cursor.description
    )Any
NamedTupleOptionalSequenceTYPE_CHECKING
attrgetter   )
BaseCursorc                   @   s&   e Zd ZU eed< eed< eed< dS )
ColumnDataftypefmodfsizeN)__name__
__module____qualname__int__annotations__ r   r   H/home/ertert/spirit/venv/lib/python3.10/site-packages/psycopg/_column.pyr      s   
 r   c                   @   s  e Zd ZdZdddefddZedd d	 D Zd
efddZ	d
efddZ
d
efddZded
efddZed
efddZed
efddZed
ee fddZed
ee fddZed
ee fddZed
ee fddZed
ee fdd Zd!S )"ColumnpsycopgcursorzBaseCursor[Any, Any]indexc                 C   sv   |j }|sJ ||}|r||j| _nd|d  | _t||||||d| _	|j
j| j	j| _d S )Ncolumn_r	   )r   r   r   )pgresultfnamedecode	_encoding_namer   r   r   r   _dataadapterstypesget_type)selfr   r   resr   r   r   r   __init__   s   
zColumn.__init__c                 c   s    | ]}t |V  qd S Nr   ).0attrr   r   r   	<genexpr>)   s
    
zColumn.<genexpr>z[
            name type_code display_size internal_size precision scale null_ok
            returnc                 C   s    d| j d|   d| j dS )Nz<Column z, type: z (oid: z)>)name_type_display	type_coder%   r   r   r   __repr__0   s   
zColumn.__repr__c                 C      dS )N   r   r0   r   r   r   __len__6   s   zColumn.__len__c                 C   s   g }| | jr| jjnt| j | j}|d u r| j}|r6| d|  | jr1| d| j  | d | jrE| j| jjkrE| d d	|S )N(z, )z[] )
appendr$   r-   strr/   	precisiondisplay_sizescale	array_oidjoin)r%   partsmod1r   r   r   r.   9   s   


zColumn._type_displayc                    s4   t |trt fdd j| D S  j|  S )Nc                 3   s    | ]}| V  qd S r(   r   )r)   getterr0   r   r   r+   M   s    z%Column.__getitem__.<locals>.<genexpr>)
isinstanceslicetuple_attrs)r%   r   r   r0   r   __getitem__K   s   
zColumn.__getitem__c                 C   s   | j S )zThe name of the column.)r   r0   r   r   r   r-   Q   s   zColumn.namec                 C   s   | j jS )zThe numeric OID of the column.)r    r   r0   r   r   r   r/   V   s   zColumn.type_codec                 C   s2   | j sdS | j jdv r| jj}|dkr|d S dS )z6The field size, for :sql:`varchar(n)`, None otherwise.N)varcharcharr      r$   r-   r    r   r%   r   r   r   r   r;   [   s   zColumn.display_sizec                 C   s   | j j}|dkr
|S dS )z=The internal field size for fixed-size types, None otherwise.r   N)r    r   )r%   r   r   r   r   internal_sizeh   s   zColumn.internal_sizec                 C   s^   | j sdS d}| j jdkr| jj}|dkr|d? S dS | j j|v r-| jj}|dkr-|d@ S dS )z/The number of digits for fixed precision types.N)timetimetz	timestamptimestamptzintervalnumericr        rJ   )r%   dttypesr   r   r   r   r:   n   s   zColumn.precisionc                 C   s2   | j r| j jdkr| jjd }|dkr|d@ S dS )z:The number of digits after the decimal point if available.rR   rI   r   rT   NrJ   rK   r   r   r   r<      s
   zColumn.scalec                 C   r2   )zAlways `!None`Nr   r0   r   r   r   null_ok   s   zColumn.null_okN)r   r   r   r   r'   rD   splitrE   r9   r1   r4   r.   r   rF   propertyr-   r/   r   r;   rL   r:   r<   boolrV   r   r   r   r   r      s2    	r   N)__doc__typingr   r   r   r   r   operatorr   r   r
   r   r   r   r   r   r   <module>   s    