@@ -24,6 +24,7 @@ fn powersync_view_sql_impl(
2424 let name = statement. column_text ( 0 ) ?;
2525 let view_name = statement. column_text ( 1 ) ?;
2626 let local_only = statement. column_int ( 2 ) ? != 0 ;
27+ let include_metadata = statement. column_int ( 5 ) ? != 0 ;
2728
2829 let quoted_name = quote_identifier ( view_name) ;
2930 let internal_name = quote_internal_name ( name, local_only) ;
@@ -48,6 +49,11 @@ fn powersync_view_sql_impl(
4849 column_values. push ( foo) ;
4950 }
5051
52+ if include_metadata {
53+ column_names_quoted. push ( quote_identifier ( "_metadata" ) ) ;
54+ column_values. push ( String :: from ( "NULL" ) ) ;
55+ }
56+
5157 let view_statement = format ! (
5258 "CREATE VIEW {:}({:}) AS SELECT {:} FROM {:} -- powersync-auto-generated" ,
5359 quoted_name,
@@ -206,6 +212,9 @@ fn powersync_trigger_update_sql_impl(
206212 let view_name = statement. column_text ( 1 ) ?;
207213 let local_only = statement. column_int ( 2 ) ? != 0 ;
208214 let insert_only = statement. column_int ( 3 ) ? != 0 ;
215+ // TODO: allow accepting a column list
216+ let include_old = statement. column_type ( 4 ) ? == sqlite:: ColumnType :: Text ;
217+ let include_metadata = statement. column_int ( 5 ) ? != 0 ;
209218
210219 let quoted_name = quote_identifier ( view_name) ;
211220 let internal_name = quote_internal_name ( name, local_only) ;
@@ -218,6 +227,20 @@ fn powersync_trigger_update_sql_impl(
218227 let json_fragment_new = json_object_fragment ( "NEW" , & stmt2) ?;
219228 stmt2. reset ( ) ?;
220229 let json_fragment_old = json_object_fragment ( "OLD" , & stmt2) ?;
230+ let old_fragment: String ;
231+ let metadata_fragment: & str ;
232+
233+ if include_old {
234+ old_fragment = format ! ( ", 'old', {:}" , json_fragment_old) ;
235+ } else {
236+ old_fragment = String :: from ( "" ) ;
237+ }
238+
239+ if include_metadata {
240+ metadata_fragment = ", 'metadata', NEW._metadata" ;
241+ } else {
242+ metadata_fragment = "" ;
243+ }
221244
222245 return if !local_only && !insert_only {
223246 let trigger = format ! ( "\
@@ -232,10 +255,10 @@ BEGIN
232255 UPDATE {:}
233256 SET data = {:}
234257 WHERE id = NEW.id;
235- INSERT INTO powersync_crud_(data) VALUES(json_object('op', 'PATCH', 'type', {:}, 'id', NEW.id, 'data', json(powersync_diff({:}, {:}))));
258+ INSERT INTO powersync_crud_(data) VALUES(json_object('op', 'PATCH', 'type', {:}, 'id', NEW.id, 'data', json(powersync_diff({:}, {:})){:}{:} ));
236259 INSERT OR IGNORE INTO ps_updated_rows(row_type, row_id) VALUES({:}, NEW.id);
237260 INSERT OR REPLACE INTO ps_buckets(name, last_op, target_op) VALUES('$local', 0, {:});
238- END" , trigger_name, quoted_name, internal_name, json_fragment_new, type_string, json_fragment_old, json_fragment_new, type_string, MAX_OP_ID ) ;
261+ END" , trigger_name, quoted_name, internal_name, json_fragment_new, type_string, json_fragment_old, json_fragment_new, old_fragment , metadata_fragment , type_string, MAX_OP_ID ) ;
239262 Ok ( trigger)
240263 } else if local_only {
241264 let trigger = format ! (
0 commit comments