@@ -175,43 +175,48 @@ fn powersync_trigger_insert_sql_impl(
175175 let mut columns = ColumnNameAndTypeStatement :: new ( local_db, table) ?;
176176 let json_fragment = json_object_fragment ( "NEW" , & mut columns. names_iter ( ) ) ?;
177177
178+ let metadata_fragment = if table_info. flags . include_metadata ( ) {
179+ ", 'metadata', NEW._metadata"
180+ } else {
181+ ""
182+ } ;
183+
178184 return if !local_only && !insert_only {
179185 let trigger = format ! ( "\
180- CREATE TRIGGER {: }
181- INSTEAD OF INSERT ON {: }
186+ CREATE TRIGGER {trigger_name }
187+ INSTEAD OF INSERT ON {quoted_name }
182188 FOR EACH ROW
183189 BEGIN
184190 SELECT CASE
185191 WHEN (NEW.id IS NULL)
186192 THEN RAISE (FAIL, 'id is required')
187193 END;
188- INSERT INTO {: }
189- SELECT NEW.id, {: };
190- INSERT INTO powersync_crud_(data) VALUES(json_object('op', 'PUT', 'type', {:}, 'id', NEW.id, 'data', json(powersync_diff('{{}}', {:}))));
191- INSERT OR IGNORE INTO ps_updated_rows(row_type, row_id) VALUES({: }, NEW.id);
192- INSERT OR REPLACE INTO ps_buckets(name, last_op, target_op) VALUES('$local', 0, {: });
193- END" , trigger_name , quoted_name , internal_name , json_fragment , type_string, json_fragment, type_string , MAX_OP_ID ) ;
194+ INSERT INTO {internal_name }
195+ SELECT NEW.id, {json_fragment };
196+ INSERT INTO powersync_crud_(data) VALUES(json_object('op', 'PUT', 'type', {:}, 'id', NEW.id, 'data', json(powersync_diff('{{}}', {:})) {metadata_fragment} ));
197+ INSERT OR IGNORE INTO ps_updated_rows(row_type, row_id) VALUES({type_string }, NEW.id);
198+ INSERT OR REPLACE INTO ps_buckets(name, last_op, target_op) VALUES('$local', 0, {MAX_OP_ID });
199+ END" , type_string, json_fragment) ;
194200 Ok ( trigger)
195201 } else if local_only {
196202 let trigger = format ! (
197203 "\
198- CREATE TRIGGER {: }
199- INSTEAD OF INSERT ON {: }
204+ CREATE TRIGGER {trigger_name }
205+ INSTEAD OF INSERT ON {quoted_name }
200206 FOR EACH ROW
201207 BEGIN
202- INSERT INTO {: } SELECT NEW.id, {: };
208+ INSERT INTO {internal_name } SELECT NEW.id, {json_fragment };
203209 END" ,
204- trigger_name, quoted_name, internal_name, json_fragment
205210 ) ;
206211 Ok ( trigger)
207212 } else if insert_only {
208213 let trigger = format ! ( "\
209- CREATE TRIGGER {: }
210- INSTEAD OF INSERT ON {: }
214+ CREATE TRIGGER {trigger_name }
215+ INSTEAD OF INSERT ON {quoted_name }
211216 FOR EACH ROW
212217 BEGIN
213218 INSERT INTO powersync_crud_(data) VALUES(json_object('op', 'PUT', 'type', {}, 'id', NEW.id, 'data', json(powersync_diff('{{}}', {:}))));
214- END" , trigger_name , quoted_name , type_string, json_fragment) ;
219+ END" , type_string, json_fragment) ;
215220 Ok ( trigger)
216221 } else {
217222 Err ( SQLiteError :: from ( ResultCode :: MISUSE ) )
0 commit comments