From e085a61ca70932a3670381e2d6b5919e9108441d Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Mon, 14 Mar 2022 16:31:19 +0000 Subject: add integration test for "outfile append.." --- internal/mapr/groupsetresult.go | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) (limited to 'internal/mapr/groupsetresult.go') 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 { -- cgit v1.2.3