summaryrefslogtreecommitdiff
path: root/internal/mapr
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2021-10-03 13:32:20 +0300
committerPaul Buetow <paul@buetow.org>2021-10-03 13:39:03 +0300
commitb2dbe133347ef220ff781ffeb1f8137245f5235f (patch)
treed2ff5f5cc0b02159a14f51b1850e4427877ef9a7 /internal/mapr
parent07e1470892beacf0722276f94bacbd822b002540 (diff)
when a mapreduce outfile is specified also always write a outfile.query file
Diffstat (limited to 'internal/mapr')
-rw-r--r--internal/mapr/groupset.go36
1 files changed, 28 insertions, 8 deletions
diff --git a/internal/mapr/groupset.go b/internal/mapr/groupset.go
index df8c603..ce7630d 100644
--- a/internal/mapr/groupset.go
+++ b/internal/mapr/groupset.go
@@ -178,11 +178,31 @@ func (g *GroupSet) Result(query *Query, rowsLimit int) (string, int, error) {
return sb.String(), len(rows), nil
}
+func (*GroupSet) writeQueryFile(query *Query) error {
+ queryFile := fmt.Sprintf("%s.query", query.Outfile)
+ tmpQueryFile := fmt.Sprintf("%s.tmp", queryFile)
+ dlog.Common.Debug("Writing query file", queryFile)
+
+ fd, err := os.Create(tmpQueryFile)
+ if err != nil {
+ return err
+ }
+ defer fd.Close()
+
+ fd.WriteString(query.RawQuery)
+ os.Rename(tmpQueryFile, queryFile)
+
+ return nil
+}
+
// WriteResult writes the result to an CSV outfile.
func (g *GroupSet) WriteResult(query *Query) error {
if !query.HasOutfile() {
return errors.New("No outfile specified")
}
+ if err := g.writeQueryFile(query); err != nil {
+ return err
+ }
rows, _, err := g.result(query, false)
if err != nil {
@@ -192,22 +212,22 @@ func (g *GroupSet) WriteResult(query *Query) error {
dlog.Common.Info("Writing outfile", query.Outfile)
tmpOutfile := fmt.Sprintf("%s.tmp", query.Outfile)
- file, err := os.Create(tmpOutfile)
+ fd, err := os.Create(tmpOutfile)
if err != nil {
return err
}
- defer file.Close()
+ defer fd.Close()
// Generate header now
lastIndex := len(query.Select) - 1
for i, sc := range query.Select {
- file.WriteString(sc.FieldStorage)
+ fd.WriteString(sc.FieldStorage)
if i == lastIndex {
continue
}
- file.WriteString(protocol.CSVDelimiter)
+ fd.WriteString(protocol.CSVDelimiter)
}
- file.WriteString("\n")
+ fd.WriteString("\n")
// And now write the data
for i, r := range rows {
@@ -215,13 +235,13 @@ func (g *GroupSet) WriteResult(query *Query) error {
break
}
for j, value := range r.values {
- file.WriteString(value)
+ fd.WriteString(value)
if j == lastIndex {
continue
}
- file.WriteString(protocol.CSVDelimiter)
+ fd.WriteString(protocol.CSVDelimiter)
}
- file.WriteString("\n")
+ fd.WriteString("\n")
}
if err := os.Rename(tmpOutfile, query.Outfile); err != nil {