mirror of
https://github.com/Theodor-Springmann-Stiftung/musenalm.git
synced 2025-10-29 17:25:32 +00:00
ft5 table creation
This commit is contained in:
@@ -5,7 +5,7 @@ tmp_dir = "tmp"
|
|||||||
[build]
|
[build]
|
||||||
args_bin = []
|
args_bin = []
|
||||||
full_bin = "./tmp/musenalm --dir ./pb_data serve"
|
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
|
delay = 400
|
||||||
exclude_dir = [
|
exclude_dir = [
|
||||||
"views/assets",
|
"views/assets",
|
||||||
|
|||||||
@@ -4,6 +4,84 @@ import "github.com/pocketbase/pocketbase/tools/types"
|
|||||||
|
|
||||||
var EDITORSTATE_VALUES = []string{"Unknown", "ToDo", "Seen", "Partially Edited", "Waiting", "Review", "Edited"}
|
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{
|
var ITEM_TYPE_VALUES = []string{
|
||||||
"Original",
|
"Original",
|
||||||
"Reproduktion",
|
"Reproduktion",
|
||||||
@@ -416,6 +494,8 @@ var PUBLIC_VIEW_RULE = types.Pointer("")
|
|||||||
var PUBLIC_LIST_RULE = types.Pointer("")
|
var PUBLIC_LIST_RULE = types.Pointer("")
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
FTS5_PREFIX = "fts5_"
|
||||||
|
|
||||||
PLACES_TABLE = "places"
|
PLACES_TABLE = "places"
|
||||||
AGENTS_TABLE = "agents"
|
AGENTS_TABLE = "agents"
|
||||||
SERIES_TABLE = "series"
|
SERIES_TABLE = "series"
|
||||||
|
|||||||
@@ -97,3 +97,19 @@ func GetFields(records []*core.Record, field string) []any {
|
|||||||
}
|
}
|
||||||
return fields
|
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
|
||||||
|
}
|
||||||
|
|||||||
77
migrations/1738936649_fts5.go
Normal file
77
migrations/1738936649_fts5.go
Normal 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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user