From f0180cb014b3fda3151585a68155a86818143758 Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Fri, 5 Sep 2025 09:31:07 +0000 Subject: [PATCH] fix(sqlite): avoid rowid on kv table (#10367) No migration on this as it has no practical impact, just a slight cleanup for new installations. Also a refactor of how we declare single column primary keys, for consistency. Signed-off-by: Jakob Borg --- internal/db/sqlite/sql/schema/common/10-schema.sql | 5 ++--- internal/db/sqlite/sql/schema/common/70-kv.sql | 2 +- internal/db/sqlite/sql/schema/folder/30-indexids.sql | 3 +-- internal/db/sqlite/sql/schema/folder/50-mtimes.sql | 5 ++--- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/internal/db/sqlite/sql/schema/common/10-schema.sql b/internal/db/sqlite/sql/schema/common/10-schema.sql index ce636dbd4..6a070dc63 100644 --- a/internal/db/sqlite/sql/schema/common/10-schema.sql +++ b/internal/db/sqlite/sql/schema/common/10-schema.sql @@ -6,9 +6,8 @@ -- Schema migrations hold the list of historical migrations applied CREATE TABLE IF NOT EXISTS schemamigrations ( - schema_version INTEGER NOT NULL, + schema_version INTEGER NOT NULL PRIMARY KEY, applied_at INTEGER NOT NULL, -- unix nanos - syncthing_version TEXT NOT NULL COLLATE BINARY, - PRIMARY KEY(schema_version) + syncthing_version TEXT NOT NULL COLLATE BINARY ) STRICT ; diff --git a/internal/db/sqlite/sql/schema/common/70-kv.sql b/internal/db/sqlite/sql/schema/common/70-kv.sql index e723ef467..3accddd16 100644 --- a/internal/db/sqlite/sql/schema/common/70-kv.sql +++ b/internal/db/sqlite/sql/schema/common/70-kv.sql @@ -9,5 +9,5 @@ CREATE TABLE IF NOT EXISTS kv ( key TEXT NOT NULL PRIMARY KEY COLLATE BINARY, value BLOB NOT NULL -) STRICT +) STRICT, WITHOUT ROWID ; diff --git a/internal/db/sqlite/sql/schema/folder/30-indexids.sql b/internal/db/sqlite/sql/schema/folder/30-indexids.sql index e6a40bb53..aca0cbfdd 100644 --- a/internal/db/sqlite/sql/schema/folder/30-indexids.sql +++ b/internal/db/sqlite/sql/schema/folder/30-indexids.sql @@ -6,10 +6,9 @@ -- indexids holds the index ID and maximum sequence for a given device and folder CREATE TABLE IF NOT EXISTS indexids ( - device_idx INTEGER NOT NULL, + device_idx INTEGER NOT NULL PRIMARY KEY, index_id TEXT NOT NULL COLLATE BINARY, sequence INTEGER NOT NULL DEFAULT 0, - PRIMARY KEY(device_idx), FOREIGN KEY(device_idx) REFERENCES devices(idx) ON DELETE CASCADE ) STRICT, WITHOUT ROWID ; diff --git a/internal/db/sqlite/sql/schema/folder/50-mtimes.sql b/internal/db/sqlite/sql/schema/folder/50-mtimes.sql index 5b3313c10..67e774b38 100644 --- a/internal/db/sqlite/sql/schema/folder/50-mtimes.sql +++ b/internal/db/sqlite/sql/schema/folder/50-mtimes.sql @@ -6,9 +6,8 @@ --- Backing for the MtimeFS CREATE TABLE IF NOT EXISTS mtimes ( - name TEXT NOT NULL, + name TEXT NOT NULL PRIMARY KEY, ondisk INTEGER NOT NULL, -- unix nanos - virtual INTEGER NOT NULL, -- unix nanos - PRIMARY KEY(name) + virtual INTEGER NOT NULL -- unix nanos ) STRICT, WITHOUT ROWID ;