package Ġcom . squareup . sql de light . core . triggers Ċ Ċ import Ġcom . google . common . truth . Truth Ċ import Ġcom . squareup . sql de light . core . compiler . Mut ator Query Generator Ċ import Ġcom . squareup . sql de light . test . util . Fixture Compiler Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . rules . Temporary Folder Ċ Ċ class ĠMut ator Query Function Test Ġ{ ĊĠ Ġ@ get : Rule Ġval Ġtemp Folder Ġ= ĠTemporary Folder () ĊĊĠ Ġ@ Test Ġfun Ġ` trigger Ġbefore Ġinsert Ġthen Ġinsert Ġnot ifies `() Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFix ture Compiler . parse Sql (""" ĊĠĠĠĠĠ Ġ| CREATE ĠTABLE Ġdata Ġ( ĊĠĠĠĠĠ Ġ| Ġ Ġid ĠINTEGER ĠNOT ĠNULL ĠPRIMARY ĠKEY , ĊĠĠĠĠĠ Ġ| Ġ Ġvalue ĠTEXT ĊĠĠĠĠĠ Ġ| ); ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| CREATE ĠTABLE Ġdata 2 Ġ( ĊĠĠĠĠĠ Ġ| Ġ Ġvalue ĠTEXT ĊĠĠĠĠĠ Ġ| ); ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| CREATE ĠTR IG GER Ġbefore Insert Then Insert ĊĠĠĠĠĠ Ġ| BEFORE ĠINSERT ĠON Ġdata ĊĠĠĠĠĠ Ġ| BEGIN ĊĠĠĠĠĠ Ġ| INSERT ĠINTO Ġdata 2 ĊĠĠĠĠĠ Ġ| VALUES Ġ( new . value ); ĊĠĠĠĠĠ Ġ| END ; ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| select Data 2 : ĊĠĠĠĠĠ Ġ| SELECT Ġ* ĊĠĠĠĠĠ Ġ| FROM Ġdata 2 ; ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| insert Data : ĊĠĠĠĠĠ Ġ| INSERT ĠINTO Ġdata ĊĠĠĠĠĠ Ġ| VALUES Ġ( ?, Ġ? ); ĊĠĠĠĠĠ Ġ""" . trim Margin (), Ġtemp Folder ) ĊĊĠĠĠ Ġval Ġmut ator Ġ= Ġfile . named Mut ators . first () ĊĠĠĠ Ġval Ġgenerator Ġ= ĠMut ator Query Generator ( mut ator ) ĊĊĠĠĠ ĠTr uth . assertThat ( generator . function (). toString ()) ĊĠĠĠĠĠĠĠ Ġ. isEqualTo (""" ĊĠĠĠĠĠ Ġ| fun Ġinsert Data ( id : Ġkotlin . Long ?, Ġvalue : Ġkotlin . String ?) Ġ{ ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġdriver . execute (${ mut ator . id }, Ġ"" ${ '" '} ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ| INSERT ĠINTO Ġdata ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ| VALUES Ġ(? 1 , Ġ? 2 ) ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ"" ${ '" ' }. trim Margin (), Ġ 2 ) Ġ{ ĊĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġbind Long ( 1 , Ġid ) ĊĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġbind String ( 2 , Ġvalue ) ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġnotify Queries ( database . test Queries . select Data 2 ) ĊĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġ` trigger Ġbefore Ġinsert Ġthen Ġinsert Ġdoes Ġnot Ġnotify Ġfor Ġdelete `() Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFix ture Compiler . parse Sql (""" ĊĠĠĠĠĠ Ġ| CREATE ĠTABLE Ġdata Ġ( ĊĠĠĠĠĠ Ġ| Ġ Ġid ĠINTEGER ĠNOT ĠNULL ĠPRIMARY ĠKEY , ĊĠĠĠĠĠ Ġ| Ġ Ġvalue ĠTEXT ĊĠĠĠĠĠ Ġ| ); ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| CREATE ĠTABLE Ġdata 2 Ġ( ĊĠĠĠĠĠ Ġ| Ġ Ġvalue ĠTEXT ĊĠĠĠĠĠ Ġ| ); ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| CREATE ĠTR IG GER Ġbefore Insert Then Insert ĊĠĠĠĠĠ Ġ| BEFORE ĠINSERT ĠON Ġdata ĊĠĠĠĠĠ Ġ| BEGIN ĊĠĠĠĠĠ Ġ| INSERT ĠINTO Ġdata 2 ĊĠĠĠĠĠ Ġ| VALUES Ġ( new . value ); ĊĠĠĠĠĠ Ġ| END ; ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| select Data 2 : ĊĠĠĠĠĠ Ġ| SELECT Ġ* ĊĠĠĠĠĠ Ġ| FROM Ġdata 2 ; ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| delete Data : ĊĠĠĠĠĠ Ġ| DELETE ĠFROM Ġdata ĊĠĠĠĠĠ Ġ| WHERE Ġid Ġ= Ġ? ; ĊĠĠĠĠĠ Ġ""" . trim Margin (), Ġtemp Folder ) ĊĊĠĠĠ Ġval Ġmut ator Ġ= Ġfile . named Mut ators . first () ĊĠĠĠ Ġval Ġgenerator Ġ= ĠMut ator Query Generator ( mut ator ) ĊĊĠĠĠ ĠTr uth . assertThat ( generator . function (). toString ()) ĊĠĠĠĠĠĠĠ Ġ. isEqualTo (""" ĊĠĠĠĠĠ Ġ| fun Ġdelete Data ( id : Ġkotlin . Long ) Ġ{ ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġdriver . execute (${ mut ator . id }, Ġ"" ${ '" '} ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ| DELETE ĠFROM Ġdata ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ| WHERE Ġid Ġ= Ġ? 1 ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ"" ${ '" ' }. trim Margin (), Ġ 1 ) Ġ{ ĊĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġbind Long ( 1 , Ġid ) ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġ` trigger Ġbefore Ġinsert Ġthen Ġinsert Ġdoes Ġnot Ġnotify Ġfor Ġupdate `() Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFix ture Compiler . parse Sql (""" ĊĠĠĠĠĠ Ġ| CREATE ĠTABLE Ġdata Ġ( ĊĠĠĠĠĠ Ġ| Ġ Ġid ĠINTEGER ĠNOT ĠNULL ĠPRIMARY ĠKEY , ĊĠĠĠĠĠ Ġ| Ġ Ġvalue ĠTEXT ĊĠĠĠĠĠ Ġ| ); ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| CREATE ĠTABLE Ġdata 2 Ġ( ĊĠĠĠĠĠ Ġ| Ġ Ġvalue ĠTEXT ĊĠĠĠĠĠ Ġ| ); ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| CREATE ĠTR IG GER Ġbefore Insert Then Insert ĊĠĠĠĠĠ Ġ| BEFORE ĠINSERT ĠON Ġdata ĊĠĠĠĠĠ Ġ| BEGIN ĊĠĠĠĠĠ Ġ| INSERT ĠINTO Ġdata 2 ĊĠĠĠĠĠ Ġ| VALUES Ġ( new . value ); ĊĠĠĠĠĠ Ġ| END ; ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| select Data 2 : ĊĠĠĠĠĠ Ġ| SELECT Ġ* ĊĠĠĠĠĠ Ġ| FROM Ġdata 2 ; ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| delete Data : ĊĠĠĠĠĠ Ġ| UPDATE Ġdata ĊĠĠĠĠĠ Ġ| SET Ġvalue Ġ= Ġ? ĊĠĠĠĠĠ Ġ| WHERE Ġid Ġ= Ġ? ; ĊĠĠĠĠĠ Ġ""" . trim Margin (), Ġtemp Folder ) ĊĊĠĠĠ Ġval Ġmut ator Ġ= Ġfile . named Mut ators . first () ĊĠĠĠ Ġval Ġgenerator Ġ= ĠMut ator Query Generator ( mut ator ) ĊĊĠĠĠ ĠTr uth . assertThat ( generator . function (). toString ()) ĊĠĠĠĠĠĠĠ Ġ. isEqualTo (""" ĊĠĠĠĠĠ Ġ| fun Ġdelete Data ( value : Ġkotlin . String ?, Ġid : Ġkotlin . Long ) Ġ{ ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġdriver . execute (${ mut ator . id }, Ġ"" ${ '" '} ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ| UPDATE Ġdata ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ| SET Ġvalue Ġ= Ġ? 1 ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ| WHERE Ġid Ġ= Ġ? 2 ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ"" ${ '" ' }. trim Margin (), Ġ 2 ) Ġ{ ĊĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġbind String ( 1 , Ġvalue ) ĊĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġbind Long ( 2 , Ġid ) ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġ` trigger Ġbefore Ġupdate Ġthen Ġinsert Ġnot ifies `() Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFix ture Compiler . parse Sql (""" ĊĠĠĠĠĠ Ġ| CREATE ĠTABLE Ġdata Ġ( ĊĠĠĠĠĠ Ġ| Ġ Ġid ĠINTEGER ĠNOT ĠNULL ĠPRIMARY ĠKEY , ĊĠĠĠĠĠ Ġ| Ġ Ġvalue ĠTEXT ĊĠĠĠĠĠ Ġ| ); ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| CREATE ĠTABLE Ġdata 2 Ġ( ĊĠĠĠĠĠ Ġ| Ġ Ġvalue ĠTEXT ĊĠĠĠĠĠ Ġ| ); ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| CREATE ĠTR IG GER Ġbefore Insert Then Insert ĊĠĠĠĠĠ Ġ| BEFORE ĠUPDATE ĠON Ġdata ĊĠĠĠĠĠ Ġ| BEGIN ĊĠĠĠĠĠ Ġ| INSERT ĠINTO Ġdata 2 ĊĠĠĠĠĠ Ġ| VALUES Ġ( new . value ); ĊĠĠĠĠĠ Ġ| END ; ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| select Data 2 : ĊĠĠĠĠĠ Ġ| SELECT Ġ* ĊĠĠĠĠĠ Ġ| FROM Ġdata 2 ; ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| delete Data : ĊĠĠĠĠĠ Ġ| UPDATE Ġdata ĊĠĠĠĠĠ Ġ| SET Ġvalue Ġ= Ġ? ĊĠĠĠĠĠ Ġ| WHERE Ġid Ġ= Ġ? ; ĊĠĠĠĠĠ Ġ""" . trim Margin (), Ġtemp Folder ) ĊĊĠĠĠ Ġval Ġmut ator Ġ= Ġfile . named Mut ators . first () ĊĠĠĠ Ġval Ġgenerator Ġ= ĠMut ator Query Generator ( mut ator ) ĊĊĠĠĠ ĠTr uth . assertThat ( generator . function (). toString ()) ĊĠĠĠĠĠĠĠ Ġ. isEqualTo (""" ĊĠĠĠĠĠ Ġ| fun Ġdelete Data ( value : Ġkotlin . String ?, Ġid : Ġkotlin . Long ) Ġ{ ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġdriver . execute (${ mut ator . id }, Ġ"" ${ '" '} ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ| UPDATE Ġdata ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ| SET Ġvalue Ġ= Ġ? 1 ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ| WHERE Ġid Ġ= Ġ? 2 ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ"" ${ '" ' }. trim Margin (), Ġ 2 ) Ġ{ ĊĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġbind String ( 1 , Ġvalue ) ĊĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġbind Long ( 2 , Ġid ) ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġnotify Queries ( database . test Queries . select Data 2 ) ĊĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġ` trigger Ġbefore Ġupdate Ġcolumns Ġthen Ġinsert Ġnot ifies `() Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFix ture Compiler . parse Sql (""" ĊĠĠĠĠĠ Ġ| CREATE ĠTABLE Ġdata Ġ( ĊĠĠĠĠĠ Ġ| Ġ Ġid ĠINTEGER ĠNOT ĠNULL ĠPRIMARY ĠKEY , ĊĠĠĠĠĠ Ġ| Ġ Ġvalue ĠTEXT ĊĠĠĠĠĠ Ġ| ); ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| CREATE ĠTABLE Ġdata 2 Ġ( ĊĠĠĠĠĠ Ġ| Ġ Ġvalue ĠTEXT ĊĠĠĠĠĠ Ġ| ); ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| CREATE ĠTR IG GER Ġbefore Insert Then Insert ĊĠĠĠĠĠ Ġ| BEFORE ĠUPDATE ĠOF Ġvalue ĠON Ġdata ĊĠĠĠĠĠ Ġ| BEGIN ĊĠĠĠĠĠ Ġ| INSERT ĠINTO Ġdata 2 ĊĠĠĠĠĠ Ġ| VALUES Ġ( new . value ); ĊĠĠĠĠĠ Ġ| END ; ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| select Data 2 : ĊĠĠĠĠĠ Ġ| SELECT Ġ* ĊĠĠĠĠĠ Ġ| FROM Ġdata 2 ; ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| delete Data : ĊĠĠĠĠĠ Ġ| UPDATE Ġdata ĊĠĠĠĠĠ Ġ| SET Ġvalue Ġ= Ġ? ĊĠĠĠĠĠ Ġ| WHERE Ġid Ġ= Ġ? ; ĊĠĠĠĠĠ Ġ""" . trim Margin (), Ġtemp Folder ) ĊĊĠĠĠ Ġval Ġmut ator Ġ= Ġfile . named Mut ators . first () ĊĠĠĠ Ġval Ġgenerator Ġ= ĠMut ator Query Generator ( mut ator ) ĊĊĠĠĠ ĠTr uth . assertThat ( generator . function (). toString ()) ĊĠĠĠĠĠĠĠ Ġ. isEqualTo (""" ĊĠĠĠĠĠ Ġ| fun Ġdelete Data ( value : Ġkotlin . String ?, Ġid : Ġkotlin . Long ) Ġ{ ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġdriver . execute (${ mut ator . id }, Ġ"" ${ '" '} ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ| UPDATE Ġdata ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ| SET Ġvalue Ġ= Ġ? 1 ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ| WHERE Ġid Ġ= Ġ? 2 ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ"" ${ '" ' }. trim Margin (), Ġ 2 ) Ġ{ ĊĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġbind String ( 1 , Ġvalue ) ĊĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġbind Long ( 2 , Ġid ) ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġnotify Queries ( database . test Queries . select Data 2 ) ĊĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġ` trigger Ġbefore Ġupdate Ġcolumns Ġthen Ġinsert Ġdoes Ġnot Ġnotify Ġfor Ġdifferent Ġcolumn `() Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFix ture Compiler . parse Sql (""" ĊĠĠĠĠĠ Ġ| CREATE ĠTABLE Ġdata Ġ( ĊĠĠĠĠĠ Ġ| Ġ Ġid ĠINTEGER ĠNOT ĠNULL ĠPRIMARY ĠKEY , ĊĠĠĠĠĠ Ġ| Ġ Ġvalue ĠTEXT ĊĠĠĠĠĠ Ġ| ); ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| CREATE ĠTABLE Ġdata 2 Ġ( ĊĠĠĠĠĠ Ġ| Ġ Ġvalue ĠTEXT ĊĠĠĠĠĠ Ġ| ); ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| CREATE ĠTR IG GER Ġbefore Insert Then Insert ĊĠĠĠĠĠ Ġ| BEFORE ĠUPDATE ĠOF Ġid ĠON Ġdata ĊĠĠĠĠĠ Ġ| BEGIN ĊĠĠĠĠĠ Ġ| INSERT ĠINTO Ġdata 2 ĊĠĠĠĠĠ Ġ| VALUES Ġ( new . value ); ĊĠĠĠĠĠ Ġ| END ; ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| select Data 2 : ĊĠĠĠĠĠ Ġ| SELECT Ġ* ĊĠĠĠĠĠ Ġ| FROM Ġdata 2 ; ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| delete Data : ĊĠĠĠĠĠ Ġ| UPDATE Ġdata ĊĠĠĠĠĠ Ġ| SET Ġvalue Ġ= Ġ? ĊĠĠĠĠĠ Ġ| WHERE Ġid Ġ= Ġ? ; ĊĠĠĠĠĠ Ġ""" . trim Margin (), Ġtemp Folder ) ĊĊĠĠĠ Ġval Ġmut ator Ġ= Ġfile . named Mut ators . first () ĊĠĠĠ Ġval Ġgenerator Ġ= ĠMut ator Query Generator ( mut ator ) ĊĊĠĠĠ ĠTr uth . assertThat ( generator . function (). toString ()) ĊĠĠĠĠĠĠĠ Ġ. isEqualTo (""" ĊĠĠĠĠĠ Ġ| fun Ġdelete Data ( value : Ġkotlin . String ?, Ġid : Ġkotlin . Long ) Ġ{ ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġdriver . execute (${ mut ator . id }, Ġ"" ${ '" '} ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ| UPDATE Ġdata ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ| SET Ġvalue Ġ= Ġ? 1 ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ| WHERE Ġid Ġ= Ġ? 2 ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ"" ${ '" ' }. trim Margin (), Ġ 2 ) Ġ{ ĊĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġbind String ( 1 , Ġvalue ) ĊĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġbind Long ( 2 , Ġid ) ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} Ċ }