@@ -84,21 +84,23 @@ fn powersync_trigger_delete_sql_impl(
84
84
let trigger_name = quote_identifier_prefixed ( "ps_view_delete_" , view_name) ;
85
85
let type_string = quote_string ( name) ;
86
86
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
+ } ;
102
104
103
105
return if !local_only && !insert_only {
104
106
let mut trigger = format ! (
@@ -108,9 +110,7 @@ INSTEAD OF DELETE ON {quoted_name}
108
110
FOR EACH ROW
109
111
BEGIN
110
112
DELETE 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});
114
114
END"
115
115
) ;
116
116
@@ -126,9 +126,7 @@ FOR EACH ROW
126
126
WHEN NEW._deleted IS TRUE
127
127
BEGIN
128
128
DELETE 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});
132
130
END"
133
131
) . expect ( "writing to string should be infallible" ) ;
134
132
}
0 commit comments