summaryrefslogtreecommitdiff
path: root/internal/mapr
diff options
context:
space:
mode:
authorPaul Buetow <pbuetow@mimecast.com>2022-03-14 16:31:19 +0000
committerPaul Buetow <pbuetow@mimecast.com>2022-03-14 16:31:19 +0000
commite085a61ca70932a3670381e2d6b5919e9108441d (patch)
tree02635c4a7b0e24a900d790cb247c7bab14b139b7 /internal/mapr
parentbee83cd299b3259790d62b9f22347498f70206b7 (diff)
add integration test for "outfile append.."
Diffstat (limited to 'internal/mapr')
-rw-r--r--internal/mapr/groupsetresult.go30
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 {