From eaac17a236cf79589483ad5b03c4d638be10e3cf Mon Sep 17 00:00:00 2001 From: Athurg Gooth Date: Sun, 8 Oct 2023 18:29:12 +0800 Subject: [PATCH] fix: create memo without some attributes (#2355) --- store/db/mysql/memo.go | 38 +++++++++++++++++++++++++------- store/db/sqlite/memo.go | 49 +++++++++++++++++++++++------------------ 2 files changed, 58 insertions(+), 29 deletions(-) diff --git a/store/db/mysql/memo.go b/store/db/mysql/memo.go index 29d2c676..f387d64f 100644 --- a/store/db/mysql/memo.go +++ b/store/db/mysql/memo.go @@ -13,14 +13,36 @@ import ( ) func (d *DB) CreateMemo(ctx context.Context, create *store.Memo) (*store.Memo, error) { - stmt := "INSERT INTO `memo` (`creator_id`, `content`, `visibility`) VALUES (?, ?, ?)" - result, err := d.db.ExecContext( - ctx, - stmt, - create.CreatorID, - create.Content, - create.Visibility, - ) + fields := []string{"`creator_id`", "`content`", "`visibility`"} + placeholder := []string{"?", "?", "?"} + args := []any{create.CreatorID, create.Content, create.Visibility} + + if create.ID != 0 { + fields = append(fields, "`id`") + placeholder = append(placeholder, "?") + args = append(args, create.ID) + } + + if create.CreatedTs != 0 { + fields = append(fields, "`created_ts`") + placeholder = append(placeholder, "FROM_UNIXTIME(?)") + args = append(args, create.CreatedTs) + } + + if create.UpdatedTs != 0 { + fields = append(fields, "`updated_ts`") + placeholder = append(placeholder, "FROM_UNIXTIME(?)") + args = append(args, create.UpdatedTs) + } + + if create.RowStatus != "" { + fields = append(fields, "`row_status`") + placeholder = append(placeholder, "?") + args = append(args, create.RowStatus) + } + + stmt := "INSERT INTO memo (" + strings.Join(fields, ", ") + ") VALUES (" + strings.Join(placeholder, ", ") + ")" + result, err := d.db.ExecContext(ctx, stmt, args...) if err != nil { return nil, err } diff --git a/store/db/sqlite/memo.go b/store/db/sqlite/memo.go index d0215391..1e315cbf 100644 --- a/store/db/sqlite/memo.go +++ b/store/db/sqlite/memo.go @@ -5,7 +5,6 @@ import ( "database/sql" "fmt" "strings" - "time" "github.com/pkg/errors" @@ -14,28 +13,36 @@ import ( ) func (d *DB) CreateMemo(ctx context.Context, create *store.Memo) (*store.Memo, error) { - if create.CreatedTs == 0 { - create.CreatedTs = time.Now().Unix() + fields := []string{"`creator_id`", "`content`", "`visibility`"} + placeholder := []string{"?", "?", "?"} + args := []any{create.CreatorID, create.Content, create.Visibility} + + if create.ID != 0 { + fields = append(fields, "`id`") + placeholder = append(placeholder, "?") + args = append(args, create.ID) } - stmt := ` - INSERT INTO memo ( - creator_id, - created_ts, - content, - visibility - ) - VALUES (?, ?, ?, ?) - RETURNING id, created_ts, updated_ts, row_status - ` - if err := d.db.QueryRowContext( - ctx, - stmt, - create.CreatorID, - create.CreatedTs, - create.Content, - create.Visibility, - ).Scan( + if create.CreatedTs != 0 { + fields = append(fields, "`created_ts`") + placeholder = append(placeholder, "?") + args = append(args, create.CreatedTs) + } + + if create.UpdatedTs != 0 { + fields = append(fields, "`updated_ts`") + placeholder = append(placeholder, "?") + args = append(args, create.UpdatedTs) + } + + if create.RowStatus != "" { + fields = append(fields, "`row_status`") + placeholder = append(placeholder, "?") + args = append(args, create.RowStatus) + } + + stmt := "INSERT INTO memo (" + strings.Join(fields, ", ") + ") VALUES (" + strings.Join(placeholder, ", ") + ") RETURNING `id`, `created_ts`, `updated_ts`, `row_status`" + if err := d.db.QueryRowContext(ctx, stmt, args...).Scan( &create.ID, &create.CreatedTs, &create.UpdatedTs,