Compare commits

..

1 Commits

3 changed files with 31 additions and 34 deletions

View File

@ -20,21 +20,20 @@ func (s *Storage) CreateFeed(title, description, link, feedLink string, folderId
if title == "" { if title == "" {
title = feedLink title = feedLink
} }
row := s.db.QueryRow(` result, err := s.db.Exec(`
insert into feeds (title, description, link, feed_link, folder_id) insert into feeds (title, description, link, feed_link, folder_id)
values (?, ?, ?, ?, ?) values (?, ?, ?, ?, ?)
on conflict (feed_link) do update set folder_id = ? on conflict (feed_link) do update set folder_id=?`,
returning id`,
title, description, link, feedLink, folderId, title, description, link, feedLink, folderId,
folderId, folderId,
) )
if err != nil {
var id int64 return nil
err := row.Scan(&id) }
if err != nil { id, idErr := result.LastInsertId()
log.Print(err) if idErr != nil {
return nil return nil
} }
return &Feed{ return &Feed{
Id: id, Id: id,
Title: title, Title: title,

View File

@ -17,23 +17,6 @@ func TestCreateFeed(t *testing.T) {
} }
} }
func TestCreateFeedSameLink(t *testing.T) {
db := testDB()
feed1 := db.CreateFeed("title", "", "", "http://example1.com/feed.xml", nil)
if feed1 == nil || feed1.Id == 0 {
t.Fatal("expected feed")
}
for i := 0; i < 10; i++ {
db.CreateFeed("title", "", "", "http://example2.com/feed.xml", nil)
}
feed2 := db.CreateFeed("title", "", "http://example.com", "http://example1.com/feed.xml", nil)
if feed1.Id != feed2.Id {
t.Fatalf("expected the same feed.\nwant: %#v\nhave: %#v", feed1, feed2)
}
}
func TestReadFeed(t *testing.T) { func TestReadFeed(t *testing.T) {
db := testDB() db := testDB()
if db.GetFeed(100500) != nil { if db.GetFeed(100500) != nil {

View File

@ -1,6 +1,7 @@
package storage package storage
import ( import (
"fmt"
"log" "log"
) )
@ -12,21 +13,35 @@ type Folder struct {
func (s *Storage) CreateFolder(title string) *Folder { func (s *Storage) CreateFolder(title string) *Folder {
expanded := true expanded := true
row := s.db.QueryRow(` result, err := s.db.Exec(`
insert into folders (title, is_expanded) values (?, ?) insert into folders (title, is_expanded) values (?, ?)
on conflict (title) do update set title = ? on conflict (title) do nothing`,
returning id`,
title, expanded, title, expanded,
// provide title again so that we can extract row id
title,
) )
var id int64 if err != nil {
err := row.Scan(&id) fmt.Println(err)
return nil
}
var id int64
numrows, err := result.RowsAffected()
if err != nil { if err != nil {
log.Print(err) log.Print(err)
return nil return nil
} }
if numrows == 1 {
id, err = result.LastInsertId()
if err != nil {
log.Print(err)
return nil
}
} else {
err = s.db.QueryRow(`select id, is_expanded from folders where title=?`, title).Scan(&id, &expanded)
if err != nil {
log.Print(err)
return nil
}
}
return &Folder{Id: id, Title: title, IsExpanded: expanded} return &Folder{Id: id, Title: title, IsExpanded: expanded}
} }