use pointers for optional update fields to distinguish empty from unset

This commit is contained in:
2026-03-27 02:41:27 +01:00
parent 81fb9af5e2
commit 74cc7c104a
3 changed files with 19 additions and 11 deletions

View File

@@ -45,7 +45,8 @@ var editCmd = &cobra.Command{
} }
if content, err := os.ReadFile(tmp.Name()); err == nil { if content, err := os.ReadFile(tmp.Name()); err == nil {
if err := d.UpdateNode(args[0], db.UpdateParams{Content: string(content)}); err != nil { c := string(content)
if err := d.UpdateNode(args[0], db.UpdateParams{Content: &c}); err != nil {
fmt.Fprintln(os.Stderr, "failed to update:", err) fmt.Fprintln(os.Stderr, "failed to update:", err)
return return
} }

View File

@@ -61,8 +61,17 @@ var updateCmd = &cobra.Command{
uRmTags = append(uRmTags, "_prio::low", "_prio::medium", "_prio::high") uRmTags = append(uRmTags, "_prio::low", "_prio::medium", "_prio::high")
} }
uParams := db.UpdateParams{Title: uTitle, Content: uContent, DueDate: uDue, ClearDue: uClearDue, uParams := db.UpdateParams{ClearDue: uClearDue,
AddTags: uAddTags, RemoveTags: uRmTags, AddRels: addRels, RemoveRels: rmRels} AddTags: uAddTags, RemoveTags: uRmTags, AddRels: addRels, RemoveRels: rmRels}
if cmd.Flags().Changed("title") {
uParams.Title = &uTitle
}
if cmd.Flags().Changed("content") {
uParams.Content = &uContent
}
if cmd.Flags().Changed("due") {
uParams.DueDate = &uDue
}
if err := d.UpdateNode(args[0], uParams); err != nil { if err := d.UpdateNode(args[0], uParams); err != nil {
fmt.Fprintln(os.Stderr, "failed to update:", err) fmt.Fprintln(os.Stderr, "failed to update:", err)
return return

View File

@@ -41,7 +41,7 @@ type CreateParams struct {
Rels map[models.RelType][]string Rels map[models.RelType][]string
} }
type UpdateParams struct { type UpdateParams struct {
Title, Content, DueDate string Title, Content, DueDate *string
ClearDue bool ClearDue bool
AddTags, RemoveTags []string AddTags, RemoveTags []string
AddRels, RemoveRels map[models.RelType][]string AddRels, RemoveRels map[models.RelType][]string
@@ -97,19 +97,18 @@ func (db *DB) UpdateNode(id string, p UpdateParams) error {
_, err := tx.Exec("UPDATE nodes SET "+col+" = ? WHERE id = ?", val, id) _, err := tx.Exec("UPDATE nodes SET "+col+" = ? WHERE id = ?", val, id)
return err return err
} }
//TODO: does it make sense to check for emtpy sting? should it be possible to set the content to ""? if p.Title != nil {
if p.Title != "" { if err := upd("title", *p.Title); err != nil {
if err := upd("title", p.Title); err != nil {
return err return err
} }
} }
if p.Content != "" { if p.Content != nil {
if err := upd("content", p.Content); err != nil { if err := upd("content", *p.Content); err != nil {
return err return err
} }
} }
if p.DueDate != "" { if p.DueDate != nil {
if err := upd("due_date", p.DueDate); err != nil { if err := upd("due_date", *p.DueDate); err != nil {
return err return err
} }
} }
@@ -143,7 +142,6 @@ func (db *DB) UpdateNode(id string, p UpdateParams) error {
} }
func (db *DB) DeleteNode(id string) error { func (db *DB) DeleteNode(id string) error {
//TODO: check if this delete propagates?
_, err := db.Exec("DELETE FROM nodes WHERE id = ?", id) _, err := db.Exec("DELETE FROM nodes WHERE id = ?", id)
return err return err
} }