aboutsummaryrefslogtreecommitdiff
path: root/dbstore/dbstore.go
diff options
context:
space:
mode:
Diffstat (limited to 'dbstore/dbstore.go')
-rw-r--r--dbstore/dbstore.go50
1 files changed, 30 insertions, 20 deletions
diff --git a/dbstore/dbstore.go b/dbstore/dbstore.go
index 4df9fb9..00b8fe2 100644
--- a/dbstore/dbstore.go
+++ b/dbstore/dbstore.go
@@ -189,6 +189,31 @@ type CpeSearchRow struct {
Rank float32 `json:"rank"`
}
+// Unmarshal CPE search row from row set.
+func unmarshalCpeSearchRow(rows *db_sql.Rows) (CpeSearchRow, error) {
+ var r CpeSearchRow
+ var titles string
+ var refs string
+
+ // get row values
+ if err := rows.Scan(&r.CpeId, &r.Cpe23, &titles, &refs, &r.Rank); err != nil {
+ return r, err
+ }
+
+ // unmarshal titles
+ if err := json.Unmarshal([]byte(titles), &r.Titles); err != nil {
+ return r, err
+ }
+
+ // unmarshal refs
+ if err := json.Unmarshal([]byte(refs), &r.Refs); err != nil {
+ return r, err
+ }
+
+ // return sccess
+ return r, nil
+}
+
// search CPEs
func (me DbStore) CpeSearch(
ctx context.Context,
@@ -216,28 +241,13 @@ func (me DbStore) CpeSearch(
// walk results
for rows.Next() {
- var sr CpeSearchRow
- var titles string
- var refs string
-
- // get row values
- err = rows.Scan(&sr.CpeId, &sr.Cpe23, &titles, &refs, &sr.Rank)
- if err != nil {
- return r, err
- }
-
- // unmarshal titles
- if err = json.Unmarshal([]byte(titles), &sr.Titles); err != nil {
- return r, err
- }
-
- // unmarshal refs
- if err = json.Unmarshal([]byte(refs), &sr.Refs); err != nil {
+ if sr, err := unmarshalCpeSearchRow(rows); err != nil {
+ // return error
return r, err
+ } else {
+ // append to results
+ r = append(r, sr)
}
-
- // append to results
- r = append(r, sr)
}
// close rows