func()

in vulndb/custom.go [135:193]


func (o CustomDataExporter) CSV(ctx context.Context, w io.Writer, header bool) error {
	fields := []string{
		"owner",
		"provider",
		"cve_id",
		"published",
		"modified",
		"base_score",
		"summary",
	}
	q := sqlutil.Select(
		fields...,
	).From(
		"custom_data",
	).Where(
		o.condition(),
	)

	query, args := q.String(), q.QueryArgs()

	if debug.V(1) {
		flog.Infof("running: %q / %#v", query, args)
	}

	rows, err := o.DB.QueryContext(ctx, query, args...)
	if err != nil {
		return errors.Wrap(err, "cannot query vendor data")
	}

	defer rows.Close()

	cw := csv.NewWriter(w)
	defer cw.Flush()

	if header {
		cw.Write(fields)
	}

	for rows.Next() {
		var v CustomDataRecord
		r := sqlutil.NewRecordType(&v).Subset(fields...)
		err = rows.Scan(r.Values()...)
		if err != nil {
			return errors.Wrap(err, "cannot scan custom data")
		}

		cw.Write([]string{
			v.Owner,
			v.Provider,
			v.CVE,
			v.Published.Format(TimeLayout),
			v.Modified.Format(TimeLayout),
			strconv.FormatFloat(v.BaseScore, 'f', 3, 64),
			v.Summary,
		})
	}

	return nil
}