Skip to content

Commit

Permalink
subtract 1 from on conflict clauses that set the seq
Browse files Browse the repository at this point in the history
The `select` portion is _always_ run.

The `on conflict` clause might be run. Since the select is always run (conditional on the where clause matching) then the seq is already incremented. The conflict clause needs to get the previous seq number rather than current.
  • Loading branch information
tantaman committed Jun 17, 2023
1 parent 7bd27e1 commit 7b0a595
Showing 1 changed file with 5 additions and 5 deletions.
10 changes: 5 additions & 5 deletions core/src/triggers.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ char *crsql_insertTriggerQuery(crsql_TableInfo *tableInfo, char *pkList,
WHERE crsql_internal_sync_bit() = 0 ON CONFLICT DO UPDATE SET\
__crsql_col_version = __crsql_col_version + 1,\
__crsql_db_version = crsql_nextdbversion(),\
__crsql_seq = crsql_get_seq(),\
__crsql_seq = crsql_get_seq() - 1,\
__crsql_site_id = NULL;\n",
tableInfo->tblName, pkList, pkNewList, PKS_ONLY_CID_SENTINEL);
}
Expand All @@ -92,7 +92,7 @@ char *crsql_insertTriggerQuery(crsql_TableInfo *tableInfo, char *pkList,
WHERE crsql_internal_sync_bit() = 0 ON CONFLICT DO UPDATE SET\
__crsql_col_version = __crsql_col_version + 1,\
__crsql_db_version = crsql_nextdbversion(),\
__crsql_seq = crsql_get_seq(),\
__crsql_seq = crsql_get_seq() - 1,\
__crsql_site_id = NULL;\n",
tableInfo->tblName, pkList, pkNewList, tableInfo->nonPks[i].name);
}
Expand Down Expand Up @@ -160,7 +160,7 @@ int crsql_createUpdateTrigger(sqlite3 *db, crsql_TableInfo *tableInfo,
WHERE crsql_internal_sync_bit() = 0 ON CONFLICT DO UPDATE SET\
__crsql_col_version = __crsql_col_version + 1,\
__crsql_db_version = crsql_nextdbversion(),\
__crsql_seq = crsql_get_seq(),\
__crsql_seq = crsql_get_seq() - 1,\
__crsql_site_id = NULL;\n",
tableInfo->tblName, pkList, pkNewList, PKS_ONLY_CID_SENTINEL);
}
Expand All @@ -176,7 +176,7 @@ int crsql_createUpdateTrigger(sqlite3 *db, crsql_TableInfo *tableInfo,
__crsql_db_version,\
__crsql_seq,\
__crsql_site_id\
) SELECT %s, %Q, 1, crsql_nextdbversion(), crsql_increment_and_get_seq() - 1, NULL WHERE crsql_internal_sync_bit() = 0 AND NEW.\"%w\" IS NOT OLD.\"%w\"\
) SELECT %s, %Q, 1, crsql_nextdbversion(), crsql_increment_and_get_seq(), NULL WHERE crsql_internal_sync_bit() = 0 AND NEW.\"%w\" IS NOT OLD.\"%w\"\
ON CONFLICT DO UPDATE SET\
__crsql_col_version = __crsql_col_version + 1,\
__crsql_db_version = crsql_nextdbversion(),\
Expand Down Expand Up @@ -251,7 +251,7 @@ char *crsql_deleteTriggerQuery(crsql_TableInfo *tableInfo) {
WHERE crsql_internal_sync_bit() = 0 ON CONFLICT DO UPDATE SET\
__crsql_col_version = __crsql_col_version + 1,\
__crsql_db_version = crsql_nextdbversion(),\
__crsql_seq = crsql_get_seq(),\
__crsql_seq = crsql_get_seq() - 1,\
__crsql_site_id = NULL;\
\
DELETE FROM \"%w__crsql_clock\" WHERE crsql_internal_sync_bit() = 0 AND %s AND __crsql_col_name != '__crsql_del';\
Expand Down

0 comments on commit 7b0a595

Please sign in to comment.