mirror of
https://github.com/nkanaev/yarr.git
synced 2026-06-24 09:05:16 +00:00
use nullable for field updates
This commit is contained in:
@@ -65,30 +65,28 @@ func (s *Storage) DeleteFeed(feedId int64) bool {
|
||||
}
|
||||
|
||||
type UpdateFeedParams struct {
|
||||
Title *string
|
||||
FeedLink *string
|
||||
FolderID *int64
|
||||
UpdateFolderID bool
|
||||
Icon *[]byte
|
||||
UpdateIcon bool
|
||||
Title *string
|
||||
FeedLink *string
|
||||
FolderID Nullable[int64]
|
||||
Icon Nullable[[]byte]
|
||||
}
|
||||
|
||||
func (s *Storage) UpdateFeed(feedId int64, params UpdateFeedParams) (bool, error) {
|
||||
_, err := s.db.Exec(`
|
||||
update feeds set
|
||||
title = coalesce(:title, title),
|
||||
title = coalesce(:title, title),
|
||||
feed_link = coalesce(:feed_link, feed_link),
|
||||
folder_id = case when :update_folder_id then :folder_id else folder_id end,
|
||||
icon = case when :update_icon then :icon else icon end
|
||||
icon = case when :update_icon then :icon else icon end
|
||||
where id = :id
|
||||
`,
|
||||
sql.Named("id", feedId),
|
||||
sql.Named("title", params.Title),
|
||||
sql.Named("feed_link", params.FeedLink),
|
||||
sql.Named("update_folder_id", params.UpdateFolderID),
|
||||
sql.Named("folder_id", params.FolderID),
|
||||
sql.Named("update_icon", params.UpdateIcon),
|
||||
sql.Named("icon", params.Icon),
|
||||
sql.Named("update_folder_id", params.FolderID.Set),
|
||||
sql.Named("folder_id", params.FolderID.Value),
|
||||
sql.Named("update_icon", params.Icon.Set),
|
||||
sql.Named("icon", params.Icon.Value),
|
||||
)
|
||||
if err != nil {
|
||||
log.Print(err)
|
||||
|
||||
@@ -56,11 +56,9 @@ func TestUpdateFeed(t *testing.T) {
|
||||
|
||||
title := "newtitle"
|
||||
db.UpdateFeed(feed1.Id, UpdateFeedParams{
|
||||
Title: &title,
|
||||
FolderID: &folder.Id,
|
||||
UpdateFolderID: true,
|
||||
Icon: &icon,
|
||||
UpdateIcon: true,
|
||||
Title: &title,
|
||||
FolderID: SetNullable(&folder.Id),
|
||||
Icon: SetNullable(&icon),
|
||||
})
|
||||
|
||||
feed2 := db.GetFeed(feed1.Id)
|
||||
|
||||
@@ -12,6 +12,15 @@ type Storage struct {
|
||||
db *sql.DB
|
||||
}
|
||||
|
||||
type Nullable[T any] struct {
|
||||
Set bool
|
||||
Value *T
|
||||
}
|
||||
|
||||
func SetNullable[T any](v *T) Nullable[T] {
|
||||
return Nullable[T]{Set: true, Value: v}
|
||||
}
|
||||
|
||||
func New(path string) (*Storage, error) {
|
||||
if pos := strings.IndexRune(path, '?'); pos == -1 {
|
||||
params := "_journal=WAL&_sync=NORMAL&_busy_timeout=5000&cache=shared"
|
||||
|
||||
Reference in New Issue
Block a user