Skip to content

Commit f99dbd1

Browse files
Add C++ sdk-test try_update parity
1 parent 9ef487f commit f99dbd1

1 file changed

Lines changed: 31 additions & 0 deletions

File tree

modules/sdk-test-cpp/src/lib.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -589,6 +589,12 @@ SPACETIMEDB_STRUCT(PkSimpleEnum, a, data)
589589
SPACETIMEDB_TABLE(PkSimpleEnum, pk_simple_enum, Public)
590590
FIELD_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

Comments
 (0)