@@ -589,6 +589,12 @@ SPACETIMEDB_STRUCT(PkSimpleEnum, a, data)
589589SPACETIMEDB_TABLE (PkSimpleEnum, pk_simple_enum, Public)
590590FIELD_PrimaryKey (pk_simple_enum, a);
591591
592+ struct PkTryUpdateUniqueConflict { uint32_t id; uint32_t unique_value; int32_t data; };
593+ SPACETIMEDB_STRUCT (PkTryUpdateUniqueConflict, id, unique_value, data)
594+ SPACETIMEDB_TABLE (PkTryUpdateUniqueConflict, pk_try_update_unique_conflict, Public)
595+ FIELD_PrimaryKey (pk_try_update_unique_conflict, id);
596+ FIELD_Unique (pk_try_update_unique_conflict, unique_value);
597+
592598// =============================================================================
593599// ADDITIONAL SPECIALIZED TABLES
594600// =============================================================================
@@ -1327,6 +1333,31 @@ SPACETIMEDB_REDUCER(insert_pk_simple_enum, ReducerContext ctx, SimpleEnum a, int
13271333 return Ok ();
13281334}
13291335
1336+ SPACETIMEDB_REDUCER (insert_pk_try_update_unique_conflict, ReducerContext ctx, uint32_t id, uint32_t unique_value, int32_t data)
1337+ {
1338+ ctx.db [pk_try_update_unique_conflict].insert (PkTryUpdateUniqueConflict{id, unique_value, data});
1339+ return Ok ();
1340+ }
1341+
1342+ SPACETIMEDB_REDUCER (try_update_pk_try_update_unique_conflict, ReducerContext ctx, uint32_t id, uint32_t unique_value, int32_t data)
1343+ {
1344+ auto existing = ctx.db [pk_try_update_unique_conflict_id].find (id);
1345+ if (!existing.has_value ()) {
1346+ return Err (" row not found" );
1347+ }
1348+
1349+ auto conflicting = ctx.db [pk_try_update_unique_conflict_unique_value].find (unique_value);
1350+ if (conflicting.has_value () && conflicting->id != id) {
1351+ return Err (" unique constraint violation" );
1352+ }
1353+
1354+ if (!ctx.db [pk_try_update_unique_conflict_id].update (PkTryUpdateUniqueConflict{id, unique_value, data})) {
1355+ return Err (" update failed" );
1356+ }
1357+
1358+ return Ok ();
1359+ }
1360+
13301361// =============================================================================
13311362// DELETE OPERATIONS - PRIMARY KEY
13321363// =============================================================================
0 commit comments