
    h                     R    d dl T d dlmZ  G d de          Z G d de          ZdS )    )*)	JSONFieldc                       e Zd Z e ed          g          Z e            Z e            Z e	            Z
 e            ZdS )BaseChangeLogzDEFAULT CURRENT_TIMESTAMP)constraintsN)__name__
__module____qualname__DateTimeFieldSQL	timestamp	TextFieldactiontableIntegerFieldprimary_keyr   changes     X/var/www/html/marketdash/venv/lib/python3.11/site-packages/playhouse/sqlite_changelog.pyr   r      sZ        33/J+K+K*LMMMIY[[FIKKE,..KikkGGGr   r   c                   ^    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dS )	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DELETE	changelogc                 "    || _         || _        d S N)db
table_name)selfr   r    s      r   __init__zChangeLog.__init__7   s    $r   Nc           
      ,   g }|j         j        D ]q}|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  }|                    d|d|	d|d           rd                    |          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 	NE  &5:+D+D&F '@&&Z&-@C '@&&Z&-@C%++ 3 2*s"2C2*s"2C666333LMMMMyy###r   c                     || j         v sJ |dk    }|dk    }|                     ||||          }| j        |j        j        ||dk    rdnd|j        j        j        || j        dz  S )Nr   r   NEWOLD)r   r   new_oldr   column_arraychange_table)_actionsr6   templater&   r    r   r)   )r!   r-   r   r0   r.   r/   colss          r   trigger_sqlzChangeLog.trigger_sqlT   s    &&&&H$H$''wMM}[+ &( 2 2uu ;2>  O -  - - 	-r   c                 F    || 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                 j     t           d          s G  fdd j                  }| _         j        S )N_changelog_modelc                   .    e Zd Z G  fdd          ZdS )"ChangeLog.model.<locals>.ChangeLogc                   ,    e Zd Z j        Z j        ZdS )'ChangeLog.model.<locals>.ChangeLog.MetaN)r   r	   r
   r   databaser    r!   s   r   MetarI   k   s        #wH!%JJJr   rL   N)r   r	   r
   rL   rK   s   r   r   rG   j   sG        1 1 1 1 1 1 1 1 1 1 1 1r   r   )hasattr
base_modelrE   )r!   r   s   ` r   r-   zChangeLog.modelg   s_    t/00 	.1 1 1 1 1 1 1DO 1 1 1 %.D!$$r   Tc                 p   | j         }|r|                                 t          t          |||f| j                            }	|r6|	D ]3\  }
}| j                            |                     ||                     4|	D ]8\  }}|r1|                     |||          }| j                            |           9d S r   )	r-   create_tablelistzipr=   r   execute_sqlrC   r@   )r!   r-   r0   dropinsertupdatedeleterP   r   actions_r   enabledsqls                 r   installzChangeLog.installr   s    J	 	%""$$$sFFF3T]CCDD 	J$ J J	6##D$9$9%$H$HIIII& 	) 	)OGV )&&ufkBB##C(((	) 	)r   )r   r   )NTTTTT)r   r	   r
   r   rN   r>   rB   r=   r"   r6   r@   rC   propertyr-   r\   r   r   r   r   r      s         JH4 JM-H% % % %$ $ $ $2- - - -   % % X% BF7;) ) ) ) ) )r   r   N)peeweeplayhouse.sqlite_extr   Modelr   objectr   r   r   r   <module>rb      s        * * * * * *    E   s) s) s) s) s) s) s) s) s) s)r   