
    h8'h                     F    d dl  d dlmZ  G d de      Z G d de      Zy)    )*)	JSONFieldc                   d    e Zd Z e ed      g      Z e       Z e       Z e	       Z
 e       Zy)BaseChangeLogzDEFAULT CURRENT_TIMESTAMP)constraintsN)__name__
__module____qualname__DateTimeFieldSQL	timestamp	TextFieldactiontableIntegerFieldprimary_keyr   changes     V/var/www/html/trade_iq/venv/lib/python3.12/site-packages/playhouse/sqlite_changelog.pyr   r      s1    3/J+K*LMI[FKE.KkGr   r   c                   V    e Zd ZeZdZdZdZddZddZ	ddZ
d Zed	        Z	 	 dd
Zy)	ChangeLoga  CREATE TRIGGER IF NOT EXISTS %(table)s_changes_%(action)s
    AFTER %(action)s ON %(table)s
    BEGIN
        INSERT INTO %(change_table)s
            ("action", "table", "primary_key", "changes")
        SELECT
            '%(action)s', '%(table)s', %(new_old)s."%(primary_key)s", "changes"
        FROM (
            SELECT json_group_object(
                col,
                json_array(
                    case when json_valid("oldval") then json("oldval")
                        else "oldval" end,
                    case when json_valid("newval") then json("newval")
                        else "newval" end)
                ) AS "changes"
            FROM (
                SELECT json_extract(value, '$[0]') as "col",
                       json_extract(value, '$[1]') as "oldval",
                       json_extract(value, '$[2]') as "newval"
                FROM json_each(json_array(%(column_array)s))
                WHERE "oldval" IS NOT "newval"
            )
        );
    END;z3DROP TRIGGER IF EXISTS %(table)s_changes_%(action)s)INSERTUPDATEDELETEc                      || _         || _        y N)db
table_name)selfr   r   s      r   __init__zChangeLog.__init__7   s    $r   Nc           
      H   g }|j                   j                  D ]w  }|j                  r||j                  |v r!|j                  }|sdnd|z  }|sdnd|z  }	t        |t              r|rd|	z  }	|rd|z  }|j                  d|d|	d|d       y dj                  |      S )	NNULLzNEW."%s"zOLD."%s"zjson(%s)zjson_array('z', z, ))	_metasorted_fieldsr   namecolumn_name
isinstancer   appendjoin)
r    modeluse_olduse_newskip_fields	col_arrayfieldcolumnnewolds
             r   _build_column_arrayzChangeLog._build_column_array;   s     	[[.. 	NE  &5::+D&&F '&Z&-@C '&Z&-@C%+ *s"2C*s"2C63LM#	N& yy##r   c                    || j                   v sJ |dk7  }|dk7  }| j                  ||||      }| j                  |j                  j                  ||dk7  rdnd|j                  j
                  j                  || j                  dz  S )Nr   r   NEWOLD)r   r   new_oldr   column_arraychange_table)_actionsr5   templater%   r   r   r(   )r    r,   r   r/   r-   r.   colss          r   trigger_sqlzChangeLog.trigger_sqlT   s    &&&H$H$''wM}}[[++ &( 2u ;;22>>  OO - - 	-r   c                 n    || j                   v sJ | j                  |j                  j                  |dz  S )N)r   r   )r<   drop_templater%   r   )r    r,   r   s      r   drop_trigger_sqlzChangeLog.drop_trigger_sqla   s<    &&&!![[++%  	r   c                 p     t         d      s G  fdd j                        }| _         j                  S )N_changelog_modelc                   &    e Zd Z G  fdd      Zy)"ChangeLog.model.<locals>.ChangeLogc                   B    e Zd ZW  j                  ZW  j
                  Zy)'ChangeLog.model.<locals>.ChangeLog.MetaN)r   r	   r
   r   databaser   r    s   r   MetarH   k   s    #wwH!%Jr   rK   N)r   r	   r
   rK   rJ   s   r   r   rF   j   s    1 1r   r   )hasattr
base_modelrD   )r    r   s   ` r   r,   zChangeLog.modelg   s4    t/01DOO 1 %.D!$$$r   c                 h   | j                   }|r|j                          t        t        |||f| j                              }	|r5|	D ]0  \  }
}| j
                  j                  | j                  ||             2 |	D ]6  \  }}|s	| j                  |||      }| j
                  j                  |       8 y r   )	r,   create_tablelistzipr<   r   execute_sqlrB   r?   )r    r,   r/   dropinsertupdatedeleterO   r   actions_r   enabledsqls                 r   installzChangeLog.installr   s    JJ	""$sFFF3T]]CD$ J	6##D$9$9%$HIJ  ' 	)OGV&&ufkB##C(	)r   )	changelogr   )NTTTTT)r   r	   r
   r   rM   r=   rA   r<   r!   r5   r?   rB   propertyr,   r[   r   r   r   r   r      sT     JH4 JM-H%$2- % % BF7;)r   r   N)peeweeplayhouse.sqlite_extr   Modelr   objectr   r   r   r   <module>rb      s%     *E s) s)r   