@@ -84,21 +84,23 @@ fn powersync_trigger_delete_sql_impl(
8484 let trigger_name = quote_identifier_prefixed ( "ps_view_delete_" , view_name) ;
8585 let type_string = quote_string ( name) ;
8686
87- let old_fragment: Cow < ' static , str > = match & table_info. diff_include_old {
88- Some ( include_old) => {
89- let json = match include_old {
90- DiffIncludeOld :: OnlyForColumns { columns } => {
91- json_object_fragment ( "OLD" , & mut columns. iter ( ) . map ( |c| c. as_str ( ) ) )
92- }
93- DiffIncludeOld :: ForAllColumns => {
94- json_object_fragment ( "OLD" , & mut table_info. column_names ( ) )
95- }
96- } ?;
97-
98- format ! ( ", 'old', {json}" ) . into ( )
99- }
100- None => "" . into ( ) ,
101- } ;
87+ let ( old_data_name, old_data_value) : ( & ' static str , Cow < ' static , str > ) =
88+ match & table_info. diff_include_old {
89+ Some ( include_old) => {
90+ let mut json = match include_old {
91+ DiffIncludeOld :: OnlyForColumns { columns } => {
92+ json_object_fragment ( "OLD" , & mut columns. iter ( ) . map ( |c| c. as_str ( ) ) )
93+ }
94+ DiffIncludeOld :: ForAllColumns => {
95+ json_object_fragment ( "OLD" , & mut table_info. column_names ( ) )
96+ }
97+ } ?;
98+
99+ json. insert ( 0 , ',' ) ;
100+ ( ",old_values" , json. into ( ) )
101+ }
102+ None => ( "" , "" . into ( ) ) ,
103+ } ;
102104
103105 return if !local_only && !insert_only {
104106 let mut trigger = format ! (
@@ -108,9 +110,7 @@ INSTEAD OF DELETE ON {quoted_name}
108110FOR EACH ROW
109111BEGIN
110112DELETE FROM {internal_name} WHERE id = OLD.id;
111- INSERT INTO powersync_crud_(data) VALUES(json_object('op', 'DELETE', 'type', {type_string}, 'id', OLD.id{old_fragment}));
112- INSERT OR IGNORE INTO ps_updated_rows(row_type, row_id) VALUES({type_string}, OLD.id);
113- INSERT OR REPLACE INTO ps_buckets(name, last_op, target_op) VALUES('$local', 0, {MAX_OP_ID});
113+ INSERT INTO powersync_crud(op,id,type{old_data_name}) VALUES ('DELETE',OLD.id,{type_string}{old_data_value});
114114END"
115115 ) ;
116116
@@ -126,9 +126,7 @@ FOR EACH ROW
126126WHEN NEW._deleted IS TRUE
127127BEGIN
128128DELETE FROM {internal_name} WHERE id = NEW.id;
129- INSERT INTO powersync_crud_(data) VALUES(json_object('op', 'DELETE', 'type', {type_string}, 'id', NEW.id{old_fragment}, 'metadata', NEW._metadata));
130- INSERT OR IGNORE INTO ps_updated_rows(row_type, row_id) VALUES({type_string}, NEW.id);
131- INSERT OR REPLACE INTO ps_buckets(name, last_op, target_op) VALUES('$local', 0, {MAX_OP_ID});
129+ INSERT INTO powersync_crud(op,id,type,metadata{old_data_name}) VALUES ('DELETE',OLD.id,{type_string},NEW._metadata{old_data_value});
132130END"
133131 ) . expect ( "writing to string should be infallible" ) ;
134132 }
0 commit comments