3
=h                 @   s,   d dl Z d dlZdd ZG dd deZdS )    Nc             C   s  d}d}d}d}d}| dkr`| dkr(dnd}| d dkr<d	nd}|rHd
nd d}|rZdnd}n| dkrvd}d}d}nz| dkrd}| dkrd}| dkrd}| d dkrd	nd}|rdnd d|d  }n&| dkrd}d}d}n| dkrd}d}|||||| dS )NF    None      objarrayTZlargeZsmallz JSON object   literal
   int      	   u   double   zutf8mb4 stringchar)isbigsignedsizenametypet)r   r   )r   r    )r   r   r   r   r   _typer   r   </root/work/ibd2sql-ibd2sql-v2.x/ibd2sql/utils/mysql_json2.py
DEJSONTYPE   sF    r   c               @   sP   e Zd Zdd ZdddZddd	Zd
d Zdd Zdd Zdd Z	dd Z
dS )	JSON2DICTc             C   s   || _ d| _d| _d S )Nr   )dataoffsetoffset_start)selfr    r   r   r   __init__0   s    zJSON2DICT.__init__r   r   c             C   s&   || }| j |||  }|| |fS )N)r    )r#   nr"   r!   Ztoffsetr    r   r   r   read5   s    zJSON2DICT.readNc             C   s:  |d kr| j d }t|}|d dkr| j|d ||\}}tj|d}| j|d ||\}}tj|d}| j||||d \}}| j|||\}}	| j|||\}}
| j|||	\}}dd t	|
|D S |d dkrF| j|d ||\}}tj|d}| j|d ||\}}tj|d}| j|||\}}	| j|||	\}}|S |d d	kr| jd
||\}}t
jd|\}|dkrd S |dkrdS |d
krdS d S n|d dkr| j|d ||\}}tj|d|d dS |d dkr| j|d ||\}}t
jd|d S |d dkr2| j||\}}|S dS d S )Nr   r   r   r   littlec             S   s   i | ]\}}||qS r   r   ).0kvr   r   r   
<dictcomp>M   s    z"JSON2DICT.init.<locals>.<dictcomp>r   r
   r   z<Br   TFr   r   )r   r   dr   null)r    r   r&   r   
from_bytes_read_key_entry_read_value_entry	_read_key_read_valuezipstructunpack_read_vardata)r#   r"   r   r!   djr    element_countr   	key_entryvalue_entrykeyvaluer   r   r   init<   sR    



zJSON2DICT.initc       
      C   sh   g }xZt |D ]N}| j|||\}}tj|d}| jd||\}}tj|d}	|j||	g qW ||fS )Nr'   r   )ranger&   r   r.   append)
r#   r!   r"   countr   rdataxr    
key_offset
key_lengthr   r   r   r/   o   s    zJSON2DICT._read_key_entryc             C   sF   g }x8|D ]0}|d }| j |d ||\}}|j|j  q
W ||fS )Nr   r   )r&   r?   decode)r#   r!   r"   r9   rA   rB   r    r   r   r   r1   y   s    
zJSON2DICT._read_keyc       
      C   sX  g }xHt |D ]:}d }| jd||\}}tj|d}t|}	|	d dkrx| j|	d ||\}}tj|d|	d d}n|	d dkr| j|	d ||\}}tjd	|\}n|	d d
kr| j|	d ||\}}tj|ddd}n`|	d dkr| j|	d ||\}}tj|ddd}n*| j|	d ||\}}tj|ddd| }|j|	|g qW ||fS )Nr   r'   r   r   r   r   )r   r   z>dr   Fr
   )r>   r&   r   r.   r   r4   r5   r?   )
r#   r!   r"   r@   rA   rB   tdatar    r   r7   r   r   r   r0      s,    zJSON2DICT._read_value_entryc             C   sx   g }xj|D ]b\}}|d dkr>|}| j ||\}}|j| q
|d dkrb|j| j||d  q
|j| q
W ||fS )Nr   r   r   r   r   )r   r   )r6   r?   r=   )r#   r!   r"   r:   rA   r7   rF   r    r   r   r   r2      s    zJSON2DICT._read_valuec             C   sv   | j d||\}}tjd|\}|d@ rX| j d||\}}tjd|\}|d |d  }| j |||\}}||j fS )Nr   z<B   )r&   r4   r5   rE   )r#   r!   r"   r    Zt1Zt2r   r   r   r6      s    zJSON2DICT._read_vardata)r   r   )r   Nr   )__name__
__module____qualname__r$   r&   r=   r/   r1   r0   r2   r6   r   r   r   r   r   /   s   

3
r   )r4   sysr   objectr   r   r   r   r   <module>   s   *