diff options
| author | Paul Buetow <pbuetow@mimecast.com> | 2022-03-14 16:31:19 +0000 |
|---|---|---|
| committer | Paul Buetow <pbuetow@mimecast.com> | 2022-03-14 16:31:19 +0000 |
| commit | e085a61ca70932a3670381e2d6b5919e9108441d (patch) | |
| tree | 02635c4a7b0e24a900d790cb247c7bab14b139b7 /internal/mapr | |
| parent | bee83cd299b3259790d62b9f22347498f70206b7 (diff) | |
add integration test for "outfile append.."
Diffstat (limited to 'internal/mapr')
| -rw-r--r-- | internal/mapr/groupsetresult.go | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/internal/mapr/groupsetresult.go b/internal/mapr/groupsetresult.go index 40c10fe..4b86025 100644 --- a/internal/mapr/groupsetresult.go +++ b/internal/mapr/groupsetresult.go @@ -187,13 +187,23 @@ func (g *GroupSet) WriteResult(query *Query) error { return err } + // By default, also write the CSV header. + writeHeader := true + + // In append mode, only write CSV header when file doesn't exist yet or is empty. + if query.Outfile.AppendMode { + if info, err := os.Stat(query.Outfile.FilePath); err == nil && info.Size() > 0 { + writeHeader = false + } + } + fd, err := g.getOutfileFD(query) if err != nil { return err } defer fd.Close() - return g.resultWriteUnformatted(query, rows, fd) + return g.resultWriteUnformatted(query, rows, fd, writeHeader) } func (g *GroupSet) getOutfileFD(query *Query) (*os.File, error) { @@ -208,17 +218,19 @@ func (g *GroupSet) getOutfileFD(query *Query) (*os.File, error) { return os.OpenFile(query.Outfile.FilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644) } -func (g *GroupSet) resultWriteUnformatted(query *Query, rows []result, fd *os.File) error { - // Generate header now +func (g *GroupSet) resultWriteUnformatted(query *Query, rows []result, fd *os.File, writeHeader bool) error { lastColumn := len(query.Select) - 1 - for i, sc := range query.Select { - fd.WriteString(sc.FieldStorage) - if i == lastColumn { - continue + + if writeHeader { + for i, sc := range query.Select { + fd.WriteString(sc.FieldStorage) + if i == lastColumn { + continue + } + fd.WriteString(protocol.CSVDelimiter) } - fd.WriteString(protocol.CSVDelimiter) + fd.WriteString("\n") } - fd.WriteString("\n") // And now write the data for i, r := range rows { |
