diff options
Diffstat (limited to 'dbstore/dbstore.go')
-rw-r--r-- | dbstore/dbstore.go | 46 |
1 files changed, 32 insertions, 14 deletions
diff --git a/dbstore/dbstore.go b/dbstore/dbstore.go index d1e44ba..840f268 100644 --- a/dbstore/dbstore.go +++ b/dbstore/dbstore.go @@ -693,6 +693,7 @@ var addCveFeedQueryIds = []string { "feed/insert-assigner", "feed/insert-cve", "feed/insert-cve-desc", + "feed/insert-cve-fts-refresh", "feed/insert-cve-problem", "feed/insert-cve-problem-desc", "feed/insert-cve-ref", @@ -703,29 +704,47 @@ var addCveFeedQueryIds = []string { "feed/insert-item-cvss-v3", } -// Import CVE feed. -func (me DbStore) AddCveFeed(ctx context.Context, feed nvd_feed.Feed) (int64, error) { - // feed ID - var feedId int64 +// Refresh CVE FTS index. +func (me DbStore) refreshCveFts(ctx context.Context, tx Tx) error { + _, err := tx.Exec(ctx, "feed/insert-cve-fts-refresh") + return err +} + +// Import CVE feeds. +func (me DbStore) AddCveFeeds(ctx context.Context, feeds []nvd_feed.Feed) ([]int64, error) { + feedIds := make([]int64, len(feeds)) // lazy-init db if err := me.Init(ctx); err != nil { - return feedId, err + return feedIds, err } // begin transaction err := me.Tx(ctx, addCveFeedQueryIds, func(tx Tx) error { - // add feed, get feed ID - if id, err := me.addFeed(ctx, tx, feed); err != nil { - return err - } else { - feedId = id - return nil + for i, feed := range(feeds) { + // add feed, get feed ID + if id, err := me.addFeed(ctx, tx, feed); err != nil { + return err + } else { + feedIds[i] = id + } } + + // refresh the cve fts index + return me.refreshCveFts(ctx, tx) }) - // return result - return feedId, err + // return results + return feedIds, err +} + +// Import single CVE feed. +func (me DbStore) AddCveFeed(ctx context.Context, feed nvd_feed.Feed) (int64, error) { + if r, err := me.AddCveFeeds(ctx, []nvd_feed.Feed { feed }); err != nil { + return 0, err + } else { + return r[0], nil + } } // search CVEs @@ -755,4 +774,3 @@ func (me DbStore) CveSearch( // return results return r, err } - |