3
=ÕÇhX  ã               @   st   d dl mZ d dlZd dlZd dlmZ d dlmZ d dlT dZdZ	dZ
d	Zd
ZG dd„ deƒZG dd„ deƒZdS )é    )Ú
namedtupleN)Úlz4)Úaes)Ú*éc   ép   éo   és   é   c               @   sB   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zddd„Zdd„ Z	d
S )ÚPAGE_READERzù
	INPUT:
		require:
			page_size: page size
			filename: filename
		option:
			encryption: True or False
				iv  (require if encryption is True)
				key (require if encryption is True)
			compression: True or False

	RETURN:
		PAGE: binary data
		
	c             O   sb   |d | _ |d | _t| jdƒ| _d| _d|krV|d rV|d | _|d | _| j| _n| j	| _d S )NÚ	page_sizeÚfilenameÚrbr   Ú
encryptionÚivÚkey)
Ú	PAGE_SIZEr   ÚopenÚfÚpageidr   r   Ú_read_page_encryptionÚreadÚ_read_page_compression)ÚselfÚargsÚkwargs© r   ú;/root/work/ibd2sql-ibd2sql-v2.x/ibd2sql/innodb_page/page.pyÚ__init__   s    




zPAGE_READER.__init__c             C   s   | j jƒ  d S )N)r   Úclose)r   r   r   r   Ú	__close__.   s    zPAGE_READER.__close__c             C   s   d S )Nr   )r   Únr   r   r   r   1   s    zPAGE_READER.readc             G   sÌ   | j |Ž }|dd… dkrÈtjd|dd… ƒ\}}}}}|dkr€|d d… tjd|ƒ d |dd
…  tj|d
d
| … ƒ }nH|dkrÈ|d d… tjd|ƒ d |dd
…  tj|d
d
| … |ƒ }|S )Né   é   s    z>BBHHHé"   r
   z>Hó    é   é&   é   s           s           )Ú
_read_pageÚstructÚunpackÚpackÚzlibÚ
decompressr   )r   r   ÚdataÚFIL_PAGE_VERSIONÚFIL_PAGE_ALGORITHM_V1ÚFIL_PAGE_ORIGINAL_TYPE_V1ÚFIL_PAGE_ORIGINAL_SIZE_V1ÚFIL_PAGE_COMPRESS_SIZE_V1r   r   r   r   4   s    
@@z"PAGE_READER._read_page_compressionNc             C   s@   |d k	r$| j j|| j dƒ || _n|  jd7  _| j j| jƒS )Nr   r
   )r   Úseekr   r   r   )r   r!   r   r   r   r)   >   s
    zPAGE_READER._read_pagec             G   s    | j |Ž }|dd… dkrœtjd|dd… ƒ\}}}}}|d d… tjd|ƒ d |dd	…  tj| j|d	d… | jƒ tj| j|dd … | jƒdd …  }|S )Nr"   r#   s    z>BBHHHr$   z>Hr%   r&   r'   é
   é    s           iöÿÿÿiàÿÿÿiöÿÿÿ)r)   r*   r+   r,   r   Zaes_cbc256_decryptr   r   )r   r   r/   r0   r1   r2   r3   r4   r   r   r   r   F   s
    
dz!PAGE_READER._read_page_encryption)N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r    r   r   r)   r   r   r   r   r   r      s   

r   c               @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚPAGEc             C   s   d S )Nr   )r   r   r   r   r   O   s    zPAGE.__init__c             C   s   || _ d| _d| _d S )Nr   )r/   ÚoffsetÚ_offset)r   r/   r   r   r   ÚinitR   s    z	PAGE.initc          	   C   sX   t jd| jd d… ƒ\| _| _| _| _| _| _| _	| _
t jd| jdd … ƒ\| _| _d S )Nz>4LQHQLr'   z>LLr&   iøÿÿÿ)r*   r+   r/   ZFIL_PAGE_SPACE_OR_CHECKSUMZFIL_PAGE_OFFSETÚFIL_PAGE_PREVÚFIL_PAGE_NEXTZFIL_PAGE_LSNZFIL_PAGE_TYPEZFIL_PAGE_FILE_FLUSH_LSNZFIL_PAGE_SPACE_IDÚCHECKSUMZFIL_PAGE_LSN2)r   r   r   r   Úinit_filW   s    6zPAGE.init_filc             C   s†   t jd| jdd… ƒ\| _| _| _| _| _| _| _	| _
| _| _| _| _t jd| jdd… ƒ| _t jd| jdd… ƒ| _t| _t| _d S )	Nz>9HQHQr'   é$   z>LLHéJ   éT   é^   rE   )r*   r+   r/   ZPAGE_N_DIR_SLOTSZPAGE_HEAP_TOPZPAGE_N_HEAPZ	PAGE_FREEZPAGE_GARBAGEZPAGE_LAST_INSERTZPAGE_DIRECTIONZPAGE_N_DIRECTIONÚPAGE_N_RECSZPAGE_MAX_TRX_IDZ
PAGE_LEVELÚPAGE_INDEX_IDZPAGE_BTR_SEG_LEAFZPAGE_BTR_SEG_TOPÚPAGE_NEW_INFIMUMr=   r>   )r   r   r   r   Úinit_page_header^   s
    FzPAGE.init_page_headerc             C   s(   | j | j| j| … }|  j|7  _|S )N)r/   r=   )r   r!   r/   r   r   r   r   e   s    z	PAGE.readc             C   s(   | j | j| | j… }|  j|8  _|S )N)r/   r>   )r   r!   r/   r   r   r   Úread_reversej   s    zPAGE.read_reverseN)	r8   r9   r:   r   r?   rC   rK   r   rL   r   r   r   r   r<   N   s   r<   )Úcollectionsr   r-   r*   Zibd2sql.utilsr   r   Zibd2sql.utils.b2datarJ   ZPAGE_NEW_SUPREMUMZ	INFO_SIZEZINFO_MAX_SIZEZSDI_VERSIONÚobjectr   r<   r   r   r   r   Ú<module>   s   @