completed the Scan() error handling

This commit is contained in:
2025-12-30 23:19:39 -07:00
parent d87b4b9411
commit c958bc5826
10 changed files with 179 additions and 153 deletions
+23 -6
View File
@@ -16,6 +16,7 @@ import (
"time"
)
// PostHeader represents the "header" of a post, everything except for its text and attachment.
type PostHeader struct {
PostId int64 `db:"postid"` // ID of the post
Parent int64 `db:"parent"` // ID of parent (unused?)
@@ -35,6 +36,7 @@ type PostData struct {
Data *string `db:"data"` // actual post data
}
// ErrNoPostData is returned if post data is missing.
var ErrNoPostData = errors.New("no post data")
// IsScribbled returns true if the post has been scribbled, false if not.
@@ -61,8 +63,7 @@ func (p *PostHeader) SetAttachment(ctx context.Context, fileName string, mimeTyp
// Text returns the text associated with a post.
func (p *PostHeader) Text(ctx context.Context) (string, error) {
var dbdata []PostData
err := amdb.SelectContext(ctx, &dbdata, "SELECT * FROM postdata WHERE postid = ?", p.PostId)
if err != nil {
if err := amdb.SelectContext(ctx, &dbdata, "SELECT * FROM postdata WHERE postid = ?", p.PostId); err != nil {
return "", err
}
if len(dbdata) > 1 {
@@ -74,10 +75,17 @@ func (p *PostHeader) Text(ctx context.Context) (string, error) {
return *dbdata[0].Data, nil
}
/* AmGetPost gets a single post from the database by ID.
* Parameters:
* ctx - Standard Go context value.
* postId - ID of the post to retrieve.
* Returns:
* Pointer to PostHeader for the post, or nil.
* Standard Go error status.
*/
func AmGetPost(ctx context.Context, postId int64) (*PostHeader, error) {
var dbdata []PostHeader
err := amdb.SelectContext(ctx, &dbdata, "SELECT * FROM posts WHERE postid = ?", postId)
if err != nil {
if err := amdb.SelectContext(ctx, &dbdata, "SELECT * FROM posts WHERE postid = ?", postId); err != nil {
return nil, err
}
if len(dbdata) == 0 {
@@ -89,10 +97,19 @@ func AmGetPost(ctx context.Context, postId int64) (*PostHeader, error) {
return &(dbdata[0]), nil
}
/* AmGetPostRage gets a range of posts from a topic by post numbers.
* Parameters:
* ctx - Standard Go context value.
* topic - Topic pointer to retrieve posts from.
* first - Number of first post to retrieve.
* last - Number of last post to retrieve.
* Returns:
* Array of pointers to PostHeader objects, or nil.
* Standard Go error status.
*/
func AmGetPostRange(ctx context.Context, topic *Topic, first, last int32) ([]*PostHeader, error) {
var posts []PostHeader
err := amdb.SelectContext(ctx, &posts, "SELECT * FROM posts WHERE topicid = ? AND num >= ? AND num <= ? ORDER BY num", topic.TopicId, first, last)
if err != nil {
if err := amdb.SelectContext(ctx, &posts, "SELECT * FROM posts WHERE topicid = ? AND num >= ? AND num <= ? ORDER BY num", topic.TopicId, first, last); err != nil {
return nil, err
}
rc := make([]*PostHeader, len(posts))