Skip to content

Commit 5b1bbeb

Browse files
authored
Enable FTS5 in SQLite migrations (#582)
This statically compiles in the FTS5 module, allowing dbmate to handle migrations that use the full-text search features of SQLite. ## History Issue #237 raised the question of handling migrations that included FTS5 tables. It was later converted to a discussion (#357). ## Solution It is possible to enable the feature in the statically-compiled SQLite that ships with dbmate via a feature flag. Adding the `sqlite_fts5` flag to the `Makefile` embeds this feature statically. ## Testing An additional test was added with a `CREATE VIRTUAL TABLE` statement that leverages the FTS5 module. This test fails when dbmate is compiled _without_ the feature flag. After adding the flag, this test passes. `make test` and `make docker-all` pass. Confirmed that it works in practice locally on Ubuntu 22.04. ## Additional info For information about the extension: https://www.sqlite.org/fts5.html For the feature flag for mattn/go-sqlite3: https://github.com/mattn/go-sqlite3/?tab=readme-ov-file#feature--extension-list
1 parent f9c7be2 commit 5b1bbeb

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

Makefile

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ OUTPUT ?= dbmate
88
GOOS := $(shell go env GOOS)
99
ifeq ($(GOOS),linux)
1010
# statically link binaries to support alpine linux
11-
override FLAGS := -tags netgo,osusergo,sqlite_omit_load_extension,sqlite_json -ldflags '-s -extldflags "-static"' $(FLAGS)
11+
override FLAGS := -tags netgo,osusergo,sqlite_omit_load_extension,sqlite_fts5,sqlite_json -ldflags '-s -extldflags "-static"' $(FLAGS)
1212
else
1313
# strip binaries
14-
override FLAGS := -tags sqlite_omit_load_extension,sqlite_json -ldflags '-s' $(FLAGS)
14+
override FLAGS := -tags sqlite_omit_load_extension,sqlite_fts5,sqlite_json -ldflags '-s' $(FLAGS)
1515
endif
1616
ifeq ($(GOOS),darwin)
1717
export SDKROOT ?= $(shell xcrun --sdk macosx --show-sdk-path)

pkg/driver/sqlite/sqlite_test.go

+9
Original file line numberDiff line numberDiff line change
@@ -405,3 +405,12 @@ func TestSQLiteQuotedMigrationsTableName(t *testing.T) {
405405
require.Equal(t, `"fooMigrations"`, name)
406406
})
407407
}
408+
409+
func TestSQLiteFTS5Available(t *testing.T) {
410+
db := prepTestSQLiteDB(t)
411+
defer dbutil.MustClose(db)
412+
413+
// this only passes if the FTS5 module is statically compiled in to the SQLite driver
414+
_, err := db.Exec("CREATE VIRTUAL TABLE a USING fts5(b, c)")
415+
require.NoError(t, err)
416+
}

0 commit comments

Comments
 (0)