
    Vi                     F    S SK 7  S SKJr   " S S\5      r " S S\5      rg)    )*)	JSONFieldc                   f    \ rS rSr\" \" S5      /S9r\" 5       r\" 5       r	\
" 5       r\" 5       rSrg)BaseChangeLog   zDEFAULT CURRENT_TIMESTAMP)constraints N)__name__
__module____qualname____firstlineno__DateTimeFieldSQL	timestamp	TextFieldactiontableIntegerFieldprimary_keyr   changes__static_attributes__r	       m/home/james-whalen/.local/share/pipx/venvs/semgrep/lib/python3.13/site-packages/playhouse/sqlite_changelog.pyr   r      s1    3/J+K*LMI[FKE.KkGr   r   c                   f    \ rS rSr\rSrSrSrSS jr	SS jr
SS jrS	 r\S
 5       r  SS jrSrg)	ChangeLog   a  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                     Xl         X l        g N)db
table_name)selfr"   r#   s      r   __init__ChangeLog.__init__7   s    $r   Nc           
         / nUR                   R                   H  nUR                  (       a  M  Ub  UR                  U;   a  M+  UR                  nU(       d  SOSU-  nU(       d  SOSU-  n	[        U[        5      (       a  U(       a  SU	-  n	U(       a  SU-  nUR                  SU< SU	< SU< S35        M     SR                  U5      $ )	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_arrayChangeLog._build_column_array;   s     	[[..E  &5::+D&&F '&Z&-@C '&Z&-@C%++ *s"2C*s"2C63LM# /& yy##r   c                    X R                   ;   d   eUS:g  nUS:g  nU R                  XXS5      nU R                  UR                  R                  UUS:w  a  SOSUR                  R
                  R                  UU R                  S.-  $ )Nr   r   NEWOLD)r   r   new_oldr   column_arraychange_table)_actionsr:   templater*   r#   r   r-   )r$   r1   r   r4   r2   r3   colss          r   trigger_sqlChangeLog.trigger_sqlT   s    &&&H$H$''M}}[[++ &( 2u ;;22>>  OO - - 	-r   c                 p    X R                   ;   d   eU R                  UR                  R                  US.-  $ )N)r   r   )rB   drop_templater*   r#   )r$   r1   r   s      r   drop_trigger_sqlChangeLog.drop_trigger_sqla   s:    &&&!![[++%  	r   c                 |   ^  [        T S5      (       d   " U 4S jST R                  5      nUT l        T R                  $ )N_changelog_modelc                   0   > \ rS rSr " U 4S jS5      rSrg)"ChangeLog.model.<locals>.ChangeLogj   c                   J   > \ rS rSr Y R                  r Y R                  rSrg)'ChangeLog.model.<locals>.ChangeLog.Metak   r	   N)r
   r   r   r   r"   databaser#   r   r$   s   r   MetarQ   k   s    #wwH!%Jr   rU   r	   N)r
   r   r   r   rU   r   rT   s   r   r   rN   j   s    1 1r   r   )hasattr
base_modelrL   )r$   r   s   ` r   r1   ChangeLog.modelg   s7    t/001DOO 1 %.D!$$$r   c                    U R                   nU(       a  UR                  5         [        [        XEU4U R                  5      5      n	U(       a5  U	 H/  u  pU R
                  R                  U R                  X5      5        M1     U	 H;  u  pU(       d  M  U R                  XU5      nU R
                  R                  U5        M=     g r!   )	r1   create_tablelistziprB   r"   execute_sqlrI   rE   )r$   r1   r4   dropinsertupdatedeleterZ   r   actions_r   enabledsqls                 r   installChangeLog.installr   s    JJ	""$sFF3T]]CD$	##D$9$9%$HI %  'OGw&&ukB##C(  'r   )rL   r"   r#   )	changelogr!   )NTTTTT)r
   r   r   r   r   rW   rC   rH   rB   r%   r:   rE   rI   propertyr1   rf   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>rn      s%     *E s) s)r   