ft5 table creation

This commit is contained in:
Simon Martens
2025-02-16 03:05:44 +01:00
parent 2d9e27ac8e
commit ca1c7272b6
4 changed files with 174 additions and 1 deletions

View File

@@ -5,7 +5,7 @@ tmp_dir = "tmp"
[build]
args_bin = []
full_bin = "./tmp/musenalm --dir ./pb_data serve"
cmd = "go build -tags=\"dev,fts5\" -o ./tmp/musenalm ."
cmd = "go build -tags=dev,fts5 -o ./tmp/musenalm ."
delay = 400
exclude_dir = [
"views/assets",

View File

@@ -4,6 +4,84 @@ import "github.com/pocketbase/pocketbase/tools/types"
var EDITORSTATE_VALUES = []string{"Unknown", "ToDo", "Seen", "Partially Edited", "Waiting", "Review", "Edited"}
var SERIES_FTS5_FIELDS = []string{
SERIES_TITLE_FIELD,
SERIES_PSEUDONYMS_FIELD,
ANNOTATION_FIELD,
COMMENT_FIELD,
}
var AGENTS_FTS5_FIELDS = []string{
AGENTS_NAME_FIELD,
AGENTS_BIOGRAPHICAL_DATA_FIELD,
AGENTS_PSEUDONYMS_FIELD,
ANNOTATION_FIELD,
COMMENT_FIELD,
}
var PLACES_FTS5_FIELDS = []string{
PLACES_NAME_FIELD,
PLACES_PSEUDONYMS_FIELD,
URI_FIELD,
ANNOTATION_FIELD,
COMMENT_FIELD,
}
var ITEMS_FTS5_FIELDS = []string{
ITEMS_LOCATION_FIELD,
ITEMS_OWNER_FIELD,
ITEMS_MEDIA_FIELD,
ITEMS_CONDITION_FIELD,
ITEMS_IDENTIFIER_FIELD,
URI_FIELD,
ANNOTATION_FIELD,
COMMENT_FIELD,
}
var ENTRIES_FTS5_FIELDS = []string{
PREFERRED_TITLE_FIELD,
VARIANT_TITLE_FIELD,
PARALLEL_TITLE_FIELD,
TITLE_STMT_FIELD,
SUBTITLE_STMT_FIELD,
INCIPIT_STMT_FIELD,
RESPONSIBILITY_STMT_FIELD,
PUBLICATION_STMT_FIELD,
PLACE_STMT_FIELD,
EDITION_FIELD,
YEAR_FIELD,
EXTENT_FIELD,
DIMENSIONS_FIELD,
REFERENCES_FIELD,
PLACES_TABLE,
AGENTS_TABLE,
SERIES_TABLE,
MUSENALMID_FIELD,
ANNOTATION_FIELD,
COMMENT_FIELD,
}
var CONTENTS_FTS5_FIELDS = []string{
PREFERRED_TITLE_FIELD,
VARIANT_TITLE_FIELD,
PARALLEL_TITLE_FIELD,
TITLE_STMT_FIELD,
SUBTITLE_STMT_FIELD,
INCIPIT_STMT_FIELD,
RESPONSIBILITY_STMT_FIELD,
PUBLICATION_STMT_FIELD,
PLACE_STMT_FIELD,
YEAR_FIELD,
EXTENT_FIELD,
DIMENSIONS_FIELD,
NUMBERING_FIELD,
ENTRIES_TABLE,
AGENTS_TABLE,
MUSENALMID_FIELD,
ANNOTATION_FIELD,
COMMENT_FIELD,
}
var ITEM_TYPE_VALUES = []string{
"Original",
"Reproduktion",
@@ -416,6 +494,8 @@ var PUBLIC_VIEW_RULE = types.Pointer("")
var PUBLIC_LIST_RULE = types.Pointer("")
const (
FTS5_PREFIX = "fts5_"
PLACES_TABLE = "places"
AGENTS_TABLE = "agents"
SERIES_TABLE = "series"

View File

@@ -97,3 +97,19 @@ func GetFields(records []*core.Record, field string) []any {
}
return fields
}
func CreateFTS5TableQuery(tablename string, fields ...string) string {
if len(fields) == 0 {
return ""
}
str := "CREATE VIRTUAL TABLE IF NOT EXISTS " + FTS5_PREFIX + tablename + " USING fts5(id, "
for i, f := range fields {
str += f
if i < len(fields)-1 {
str += ", "
}
}
str += ")"
return str
}

View File

@@ -0,0 +1,77 @@
package migrations
import (
"github.com/Theodor-Springmann-Stiftung/musenalm/dbmodels"
"github.com/pocketbase/pocketbase/core"
m "github.com/pocketbase/pocketbase/migrations"
)
func init() {
m.Register(func(app core.App) error {
err := createFTS5(app, dbmodels.AGENTS_TABLE, dbmodels.AGENTS_FTS5_FIELDS)
if err != nil {
app.Logger().Error("Error creating FTS5 table for agents", "error", err)
}
err = createFTS5(app, dbmodels.PLACES_TABLE, dbmodels.PLACES_FTS5_FIELDS)
if err != nil {
app.Logger().Error("Error creating FTS5 table for places", "error", err)
}
err = createFTS5(app, dbmodels.SERIES_TABLE, dbmodels.SERIES_FTS5_FIELDS)
if err != nil {
app.Logger().Error("Error creating FTS5 table for series", "error", err)
}
err = createFTS5(app, dbmodels.ITEMS_TABLE, dbmodels.ITEMS_FTS5_FIELDS)
if err != nil {
app.Logger().Error("Error creating FTS5 table for items", "error", err)
}
err = createFTS5(app, dbmodels.ENTRIES_TABLE, dbmodels.ENTRIES_FTS5_FIELDS)
if err != nil {
app.Logger().Error("Error creating FTS5 table for entries", "error", err)
}
err = createFTS5(app, dbmodels.CONTENTS_TABLE, dbmodels.CONTENTS_FTS5_FIELDS)
if err != nil {
app.Logger().Error("Error creating FTS5 table for contents", "error", err)
}
return nil
}, func(app core.App) error {
deleteTable(app, dbmodels.FTS5_PREFIX+dbmodels.AGENTS_TABLE)
deleteTable(app, dbmodels.FTS5_PREFIX+dbmodels.PLACES_TABLE)
deleteTable(app, dbmodels.FTS5_PREFIX+dbmodels.SERIES_TABLE)
deleteTable(app, dbmodels.FTS5_PREFIX+dbmodels.ITEMS_TABLE)
deleteTable(app, dbmodels.FTS5_PREFIX+dbmodels.ENTRIES_TABLE)
deleteTable(app, dbmodels.FTS5_PREFIX+dbmodels.CONTENTS_TABLE)
return nil
})
}
func createFTS5(app core.App, table string, fields []string) error {
query := dbmodels.CreateFTS5TableQuery(
table,
fields...,
)
_, err := app.DB().NewQuery(query).Execute()
if err != nil {
return err
}
return nil
}
func deleteTable(app core.App, table string) error {
query := "DROP TABLE IF EXISTS " + table
_, err := app.DB().NewQuery(query).Execute()
if err != nil {
return err
}
return nil
}