@@ -24,6 +24,7 @@ fn powersync_view_sql_impl(
24
24
let name = statement. column_text ( 0 ) ?;
25
25
let view_name = statement. column_text ( 1 ) ?;
26
26
let local_only = statement. column_int ( 2 ) ? != 0 ;
27
+ let include_metadata = statement. column_int ( 5 ) ? != 0 ;
27
28
28
29
let quoted_name = quote_identifier ( view_name) ;
29
30
let internal_name = quote_internal_name ( name, local_only) ;
@@ -48,6 +49,11 @@ fn powersync_view_sql_impl(
48
49
column_values. push ( foo) ;
49
50
}
50
51
52
+ if include_metadata {
53
+ column_names_quoted. push ( quote_identifier ( "_metadata" ) ) ;
54
+ column_values. push ( String :: from ( "NULL" ) ) ;
55
+ }
56
+
51
57
let view_statement = format ! (
52
58
"CREATE VIEW {:}({:}) AS SELECT {:} FROM {:} -- powersync-auto-generated" ,
53
59
quoted_name,
@@ -206,6 +212,9 @@ fn powersync_trigger_update_sql_impl(
206
212
let view_name = statement. column_text ( 1 ) ?;
207
213
let local_only = statement. column_int ( 2 ) ? != 0 ;
208
214
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 ;
209
218
210
219
let quoted_name = quote_identifier ( view_name) ;
211
220
let internal_name = quote_internal_name ( name, local_only) ;
@@ -218,6 +227,20 @@ fn powersync_trigger_update_sql_impl(
218
227
let json_fragment_new = json_object_fragment ( "NEW" , & stmt2) ?;
219
228
stmt2. reset ( ) ?;
220
229
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
+ }
221
244
222
245
return if !local_only && !insert_only {
223
246
let trigger = format ! ( "\
@@ -232,10 +255,10 @@ BEGIN
232
255
UPDATE {:}
233
256
SET data = {:}
234
257
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({:}, {:})){:}{:} ));
236
259
INSERT OR IGNORE INTO ps_updated_rows(row_type, row_id) VALUES({:}, NEW.id);
237
260
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 ) ;
239
262
Ok ( trigger)
240
263
} else if local_only {
241
264
let trigger = format ! (
0 commit comments