Add a note's filename in the index database

index-filename
Mickaël Menu 3 years ago
parent 9ae8e5b041
commit 9463991918

@ -3,6 +3,7 @@ package sqlite
import (
"database/sql"
"fmt"
"path/filepath"
sqlite "github.com/mattn/go-sqlite3"
"github.com/mickael-menu/zk/internal/core"
@ -78,6 +79,7 @@ func (db *DB) migrate() error {
migrations := []struct {
SQL []string
Migrate func(tx Transaction) error
NeedsReindexing bool
}{
{ // 1
@ -207,6 +209,46 @@ func (db *DB) migrate() error {
LEFT JOIN notes t ON l.target_id = t.id`,
},
},
{ // 7
SQL: []string{
// Add a `filename` column to `notes`
`ALTER TABLE notes ADD COLUMN filename TEXT DEFAULT('') NOT NULL`,
},
Migrate: func(tx Transaction) error {
// Fill the filenames
rows, err := tx.Query(`SELECT id, path FROM notes`)
if err != nil {
return err
}
defer rows.Close()
filenames := map[int]string{}
for rows.Next() {
var id int
var path string
err := rows.Scan(&id, &path)
if err != nil {
return err
}
filenames[id] = filepath.Base(path)
}
for id, filename := range filenames {
_, err = tx.Exec(`
UPDATE notes
SET filename = ?
WHERE id = ?
`, filename, id)
if err != nil {
return err
}
}
return nil
},
},
}
needsReindexing := false
@ -216,8 +258,20 @@ func (db *DB) migrate() error {
continue
}
stmts := append(migration.SQL, fmt.Sprintf("PRAGMA user_version = %d", i+1))
err = tx.ExecStmts(stmts)
err = tx.ExecStmts(migration.SQL)
if err != nil {
return err
}
// Execute additional migration steps.
if migration.Migrate != nil {
err = migration.Migrate(tx)
if err != nil {
return err
}
}
_, err = tx.Exec(fmt.Sprintf("PRAGMA user_version = %d", i+1))
if err != nil {
return err
}

@ -27,7 +27,7 @@ func TestMigrateFrom0(t *testing.T) {
var version int
err := tx.QueryRow("PRAGMA user_version").Scan(&version)
assert.Nil(t, err)
assert.Equal(t, version, 6)
assert.Equal(t, version, 7)
_, err = tx.Exec(`
INSERT INTO notes (path, sortable_path, title, body, word_count, checksum)

@ -47,8 +47,8 @@ func NewNoteDAO(tx Transaction, logger util.Logger) *NoteDAO {
// Add a new note to the index.
addStmt: tx.PrepareLazy(`
INSERT INTO notes (path, sortable_path, title, lead, body, raw_content, word_count, metadata, checksum, created, modified)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
INSERT INTO notes (filename, path, sortable_path, title, lead, body, raw_content, word_count, metadata, checksum, created, modified)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
`),
// Update the content of a note.
@ -128,7 +128,7 @@ func (d *NoteDAO) Add(note core.Note) (core.NoteID, error) {
metadata := d.metadataToJSON(note)
res, err := d.addStmt.Exec(
note.Path, sortablePath, note.Title, note.Lead, note.Body,
note.Filename(), note.Path, sortablePath, note.Title, note.Lead, note.Body,
note.RawContent, note.WordCount, metadata, note.Checksum, note.Created,
note.Modified,
)

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4ed584a5c1177888066b7b63eb3b5a256c5a9a404669134f722144a30314959b
oid sha256:f2575f74e02681445aea64c310372f8fdf327e89215e88284519fb58c1d68fa0
size 86016

Loading…
Cancel
Save