in vulndb/export.go [193:249]
func (exp DataExporter) JSON(ctx context.Context, w io.Writer, indent string) error {
q := sqlutil.Select(
"d.cve_id",
"d.cve_json",
).From().SelectGroup(
"d",
exp.selectVendorData(
"vendor_data.cve_id AS cve_id",
"vendor_data.cve_json AS cve_json",
).
Literal("UNION ALL").
Select(exp.selectOverrides(
"custom_data.cve_id",
"custom_data.cve_json",
)),
)
query, args := q.String(), q.QueryArgs()
if debug.V(1) {
flog.Infof("running: %q / %#v", query, args)
}
rows, err := exp.DB.QueryContext(ctx, query, args...)
if err != nil {
return errors.Wrap(err, "cannot query export data")
}
defer rows.Close()
record := struct {
CVE string
JSON []byte
}{}
f := &cveFile{}
for rows.Next() {
v := record
err = rows.Scan(sqlutil.NewRecordType(&v).Values()...)
if err != nil {
return errors.Wrap(err, "cannot scan export data")
}
err = f.Add(v.CVE, v.JSON)
if err != nil {
return err
}
}
if indent == "" {
return f.EncodeJSON(w)
}
const prefix = ""
return f.EncodeIndentedJSON(w, prefix, indent)
}