o
    Žõ±jŽG  ã                   @   s”  d dl mZmZ d dlmZ d dlZd dlmZ d dlm	Z	 d dl
mZmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZ dd dd dœZG dd„ dejƒZd ZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+d Z,i ed“ed!“ed!“ed"“ed#“ed$“e d%“e!d&“e"d$“e#d“e$d“e%d“e&d“e'd“e(d'“e)d$“e*d(“e+d)e,di¥Z-d*Z.d+Z/d,Z0e.d-e/d.e0d/iZ1G d0d1„ d1ƒZ2dS )2é    )ÚINTERNAL_TO_NAMEÚNAME_TO_ATTRTYP)ÚOrderedDictN)Úunpack)ÚESENT_DB_HEADER)Ú
ESENT_PAGEÚ	PAGEFLAGSÚWELLKNOWNPAGENO)Úreadbranchentry)Úreadleafentry)ÚESENT_DATA_DEFINITION_HEADER)Ú#ESENT_CATALOG_DATA_DEFINITION_ENTRYÚCATALOG_TYPEó    )Ú	TableDataÚFatherDataPageNumberÚCurrentPageDataÚ
CurrentTagc                   @   s    e Zd ZdZdZdZdZdZdS )ÚTAGGED_DATA_TYPEé   é   é   é   é
   N)Ú__name__Ú
__module__Ú__qualname__ÚVARIABLE_SIZEÚ
COMPRESSEDÚSTOREDÚMULTI_VALUEÚ	WHO_KNOWS© r"   r"   ú‚/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aesedb/eesentdb.pyr      s    r   r   r   é   r   é   é   é   r   é	   r   é   é   é   é   é   é   é   é   )r   ÚB)r   z<h)r   z<l)r   z<Q)r   z<f)r   z<d)r   z<L)r.   Ú16s)r   z<Hi°  iŸN  iä  zutf-16leÚasciiÚcp1252c                   @   sŠ   e Zd Zd!dd„Zdd„ Zd"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d„ Zd#dd„Zd#defdd „ZdS )$ÚESENT_DBé    c                 C   s*   || _ || _d | _d | _tƒ | _d | _d S ©N)Ú_ESENT_DB__pageSizeÚ_ESENT_DB__DBÚ_ESENT_DB__DBHeaderÚ_ESENT_DB__totalPagesr   Ú_ESENT_DB__tablesÚ_ESENT_DB__currentTable)ÚselfÚdbfileÚpageSizer"   r"   r#   Ú__init__T   s   
zESENT_DB.__init__c              
   Ã   sÄ   �zJ|   d¡I d H \}}|d ur|‚t |¡| _| jj| _| j dd¡I d H  | j ¡ I d H }|| j d | _	|  
tjj¡I d H \}}|d urI|‚W dS  tya } z
d |fW  Y d }~S d }~ww )Néÿÿÿÿr   r   ©TN)Úget_pager   Ú
from_bytesr:   ÚPageSizer8   r9   ÚseekÚtellr;   Úparse_catalogr	   ÚCATALOGÚvalueÚ	Exception)r>   Ú
mainHeaderÚerrÚposÚ_Úer"   r"   r#   Úparse\   s$   €
€ÿzESENT_DB.parseFc           
   
   Ã   sô   �zb| j  |d | j d¡I d H  | j  | j¡I d H }t|ƒ| jk r=| jt|ƒ }| j  |¡I d H }||7 }t|ƒ| jk s"|dkrJ|du rJ|d fW S t| jƒ}| |¡I d H \}}|d ur_|‚|d fW S  tyy }	 z
d |	fW  Y d }	~	S d }	~	ww )Nr   r   F)r9   rG   r8   ÚreadÚlenr   r:   rL   )
r>   ÚpagenoÚforce_parseÚdataÚ	remainingÚtÚpagerP   rN   rQ   r"   r"   r#   rD   r   s(   €ý


€ÿzESENT_DB.get_pagec           
   
   Ã   sì   �z^|   |¡I d H \}}|d ur|‚|  |¡I d H \}}|d ur"|‚td|jjƒD ]3}| |¡\}}|jjtj@ dkr\t	||ƒI d H \}}|d urK|‚|  
|j¡I d H \}}|d ur\|‚q)W dS  tyu }	 z
d |	fW  Y d }	~	S d }	~	ww ©Nr   r   rC   )rD   Ú
parse_pageÚrangeÚrecordÚFirstAvailablePageTagÚget_tagÚ	PageFlagsr   ÚLEAFr
   rI   ÚChildPageNumberrL   )
r>   rU   rZ   rN   rP   ÚiÚflagsrW   ÚbranchEntryrQ   r"   r"   r#   rI   ‰   s.   €€€ÿzESENT_DB.parse_catalogc              
   Ã   sÐ   �zPt d|jjƒD ]E}| |¡\}}|jjtj@ dkrN|jjtj@ dkr%q	|jjtj@ dkr/q	|jjtj	@ dkr9q	t
||ƒI d H \}}|d urI|‚|  |¡ q	W dS  tyg } z
d |fW  Y d }~S d }~ww r[   )r]   r^   r_   r`   ra   r   rb   Ú
SPACE_TREEÚINDEXÚ
LONG_VALUEr   Ú_ESENT_DB__addItemrL   )r>   rZ   Útagnore   rW   ÚlerN   rQ   r"   r"   r#   r\   ¡   s*   €
€€ÿzESENT_DB.parse_pagec                 C   st   t  |j¡}|jdkr|jd }n|j}tj|j|jd … d d… ddd�}|j|jd … d| d … d |… }|S )Né   r   ÚlittleF©Ú	byteorderÚsigned)r   rE   Ú	EntryDataÚLastVariableDataTypeÚintÚVariableSizeOffset)r>   ÚentryÚdataDefinitionHeaderÚ
numEntriesÚitemLenÚitemNamer"   r"   r#   Ú__parseItemName¹   s   
$$zESENT_DB.__parseItemNamec                 C   s  t  |j¡}t |j|jd … ¡}|  |¡}|jtjkrBt	ƒ | j
|< || j
| _t	ƒ | j
| _t	ƒ | j
| _t	ƒ | j
| _|| _d S |jtjkrg|| j
| j j|< || j
| j j| _|| j
| j j| _d S |jtjkrx|| j
| j j|< d S |jtjkr…|  |¡ d S td|d  ƒ‚)NzUnknown type 0x%xÚType)r   rE   rr   r   Ú_lenÚ_ESENT_DB__parseItemNamer|   r   ÚTABLEr   r<   Ú
TableEntryÚColumnsÚIndexesÚ
LongValuesr=   ÚCOLUMNÚHeaderÚRecordrh   ri   Ú_ESENT_DB__addLongValuerL   )r>   rv   rw   ÚcatalogEntryrz   r"   r"   r#   Ú	__addItemÅ   s&   

zESENT_DB.__addItemc                 C   sf   t  |j¡}tj|j|jd … d d… ddd�}|j|jd … dd … d |… }|| j| j j|< d S )Nr   rn   Fro   r'   )r   rE   rr   rt   ru   r<   r=   rƒ   )r>   rv   rw   ÚlvLenÚlvNamer"   r"   r#   Ú__addLongValueÜ   s   $ zESENT_DB.__addLongValuec              
   Ã   sh  �zœt |tƒdur| ¡ }|| jv rš| j| j}t |j¡}t |j|j	d … ¡}|j
}d}|du r|  |¡I d H \}}|d urB|‚|jjdkrJd}td|jjƒD ])}	| |	¡\}
}|jjtj@ dkrxt|
|ƒI d H \}}|d urs|‚|j} nd} |du s2t}| j| |d< |j
|d< ||d< d|d< |d fW S td	ƒ‚ ty³ } z
d |fW  Y d }~S d }~ww )
NTFr   r   r   r   r   r   zTable not found!)Ú
isinstanceÚbytesÚencoder<   r€   r   rE   rr   r   r}   r   rD   r^   r_   r]   r`   ra   r   rb   r
   rc   ÚTABLE_CURSORrL   )r>   Ú	tablenamerv   rw   rˆ   ÚpageNumÚdonerZ   rN   rd   re   rW   rf   ÚcursorrQ   r"   r"   r#   Ú
open_tableâ   sL   €
í

€ÿzESENT_DB.open_tablec              
   Ã   sð   �z`|d }|d |j jkrW dS | |d ¡\}}|j jtj@ dkr_|j jtj@ dkr0tdƒ‚|j jtj@ dkr=tdƒ‚|j jtj	@ dkrJtdƒ‚t
||ƒI d H \}}|d urZ|‚|d fW S W dS  tyw } z
d |fW  Y d }~S d }~ww )Nr   r   ©NNr   zFLAGS_SPACE_TREE > 0zFLAGS_INDEX > 0zFLAGS_LONG_VALUE > 0)r^   r_   r`   ra   r   rb   rg   rL   rh   ri   r   )r>   r”   rZ   re   rW   Ú	leafEntryrN   rQ   r"   r"   r#   Ú__get_next_tag  s,   €
€ÿzESENT_DB.__get_next_tagc              
   Ã   s”   �z2|   |¡I d H \}}|d ur|‚d}	 |  |¡I d H \}}|d ur%|‚|d u r*n|d7 }q|d fW S  tyI } z
d |fW  Y d }~S d }~ww )Nr   Tr   )r•   Ú_ESENT_DB__next_row_ctrrL   )r>   Ú
table_namer”   rN   ÚctrÚresrQ   r"   r"   r#   Ú
get_rowcnt-  s&   €ú
€ÿzESENT_DB.get_rowcntc              
   Ã   sÊ   �zM|d  d7  < |   |¡I d H \}}|d ur|‚|d u rL|d }|jjdkr+W dS |  |jj¡I d H \|d< }|d ur?|‚d|d< |  |¡I d H W S W dS  tyd } z
d |fW  Y d }~S d }~ww )Nr   r   r   r   r–   rC   )Ú_ESENT_DB__get_next_tagr^   ÚNextPageNumberrD   r™   rL   )r>   r”   ÚtagrN   rZ   rQ   r"   r"   r#   Ú__next_row_ctrA  s(   €€ÿzESENT_DB.__next_row_ctrNc              
   Ã   sø   �zd|d  d7  < |   |¡I d H \}}|d ur|‚|d u rN|d }|jjdkr+W dS |  |jj¡I d H \|d< }|d ur?|‚d|d< | j||d�I d H W S |  ||j|¡I d H \}}|d ura|‚|d fW S  ty{ } z
d |fW  Y d }~S d }~ww )Nr   r   r   r   r–   )Ú
filter_col)rž   r^   rŸ   rD   Úget_next_rowÚ_ESENT_DB__tag_to_recordrr   rL   )r>   r”   r¢   r    rN   rZ   rœ   rQ   r"   r"   r#   r£   Z  s.   €
€ÿzESENT_DB.get_next_rowr¢   c           (   
   Ã   s.  ��z}t ƒ }t ƒ }d}t |¡}|jd d }d}	t|ƒ}
|j}|j}|d j}d }d}t| 	¡ ƒD �]G}|d ur>||vr>q2|d urJ|}t
|| ƒ}|| j}|j|jkri||d … d |j… ||< ||j7 }�n‘d|j  k ru|jkr¹n nB|jd d }tj|||d  d … d d… ddd�}|d	@ r�|	}d ||< n||| d … d ||	 … }|||< |||	 7 }|}	�nA|jd
k�rö|du �rŽ|| |
k �rŽ|| }| j}tj||d d … d d… ddd�d@ | | }	 tj||d … d d… ddd�}|d7 }tj||d … d d… ddd�d@ }| jjdk�r)| jjdk�r)| jjdk�r)d}ntj||d … d d… ddd�d@ }|d7 }||k �rF|}||
|f||< ||k�rSnqët| 	¡ ƒd }tdt|ƒƒD ](}|| \}}}t| ¡ ƒ| d \}} } ||| |f||< t| 	¡ ƒ| }�qcd}|j|v �rñ|| ||j d  }!||j d }"||j d dk�rÃt||!|!d … ƒ}#|!d7 }!|"d8 }"nd}#|#tj@ �rÐd ||< n*|#tj@ �rä||!d … d |"… f||< n||!d … d |"… ||< n	d ||< nd ||< t|| ƒtu �r|| d ||< q2|jtk�s|jtk�rS|| d u�rR|j t!v�r-t"d|d  ƒ‚t!|j  }$z||  #|$¡||< W q2 t"�yQ   ||  #|$d¡||< Y q2w q2t$|j }%|| d u�rz|%d u �rk|| ||< q2|%d }&t%|&|| ƒd ||< q2|d fW S  t"�y– }' z
d |'fW  Y d }'~'S d }'~'ww )NFrm   r   r   r   r   rn   ro   i €  éÿ   iÿ?  Ti   r/   r6   i @  zUnknown codepage 0x%xÚCodePageÚreplace)&r   r   rE   rs   rT   r}   ru   r�   ÚlistÚkeysÚboolr†   Ú
IdentifierÚLastFixedSizeÚ
SpaceUsagert   r8   r:   ÚVersionÚFileFormatRevisionrF   r]   ÚitemsÚordr   r   r    ÚtypeÚtupleÚ
ColumnTypeÚJET_coltypTextÚJET_coltypLongTextr¦   ÚStringCodePagesrL   ÚdecodeÚColumnTypeSizer   )(r>   r”   r    r¢   r^   ÚtaggedItemsÚtaggedItemsParsedrw   ÚvariableDataBytesProcessedÚprevItemLenÚtagLenÚfixedSizeOffsetÚvariableSizeOffsetÚcolumnsÚprev_column_nameÚprev_column_mandatoryÚcolumnÚcolumnRecordÚindexry   Ú	itemValueÚendOfVSÚfirstOffsetTagÚtaggedIdentifierÚtaggedOffsetÚflagsPresentÚprevKeyrd   Úoffset0Úlengthre   ÚoffsetrP   Ú
offsetItemÚitemSizeÚitemFlagÚstringDecoderÚ
unpackDataÚ	unpackStrrQ   r"   r"   r#   Ú__tag_to_recordx  sÊ   €


(
0 $*$

ï



üù

€
€ÿzESENT_DB.__tag_to_record)r6   )Fr7   )r   r   r   rA   rR   rD   rI   r\   r~   rj   r‡   r•   rž   r�   r™   r£   Údictr¤   r"   r"   r"   r#   r5   S   s    

/
r5   )3Úaesedb.security.constantsr   r   Úcollectionsr   ÚenumÚstructr   Úaesedb.structures.headerr   Úaesedb.structures.pager   r   r	   Úaesedb.structures.branchentryr
   Úaesedb.structures.leafentryr   Ú&aesedb.structures.datadefinitionheaderr   Ú%aesedb.structures.catalogdatadefentryr   r   r�   ÚIntFlagr   ÚJET_coltypNilÚJET_coltypBitÚJET_coltypUnsignedByteÚJET_coltypShortÚJET_coltypLongÚJET_coltypCurrencyÚJET_coltypIEEESingleÚJET_coltypIEEEDoubleÚJET_coltypDateTimeÚJET_coltypBinaryrµ   ÚJET_coltypLongBinaryr¶   ÚJET_coltypSLVÚJET_coltypUnsignedLongÚJET_coltypLongLongÚJET_coltypGUIDÚJET_coltypUnsignedShortÚJET_coltypMaxr¹   ÚCODEPAGE_UNICODEÚCODEPAGE_ASCIIÚCODEPAGE_WESTERNr·   r5   r"   r"   r"   r#   Ú<module>   s¢    üÿþýüûúùø	÷
öõôóòñðïíý