commit
0274e9f73c
3 changed files with 268 additions and 0 deletions
61
internal/dump.go
Normal file
61
internal/dump.go
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
package internal
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"compress/gzip"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/google/cayley/graph"
|
||||
"github.com/google/cayley/exporter"
|
||||
)
|
||||
|
||||
// Dump the content of the database into a file based
|
||||
// on a few different formats
|
||||
func Dump(qs graph.QuadStore, outFile, typ string) error {
|
||||
var f *os.File
|
||||
if outFile == "-" {
|
||||
f = os.Stdout
|
||||
} else {
|
||||
var err error
|
||||
f, err = os.Create(outFile)
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not open file %q: %v", outFile, err)
|
||||
}
|
||||
defer f.Close()
|
||||
fmt.Printf("dumping db to file %q\n", outFile)
|
||||
}
|
||||
|
||||
var export *exporter.Exporter
|
||||
if filepath.Ext(outFile) == ".gz" {
|
||||
gzip := gzip.NewWriter(f)
|
||||
defer gzip.Close()
|
||||
export = exporter.NewExporter(gzip, qs)
|
||||
} else {
|
||||
export = exporter.NewExporter(f, qs)
|
||||
}
|
||||
|
||||
//TODO: add possible support for exporting specific queries only
|
||||
switch typ {
|
||||
case "quad":
|
||||
export.ExportQuad()
|
||||
case "json":
|
||||
export.ExportJson()
|
||||
// gml/graphml experimental
|
||||
case "gml":
|
||||
export.ExportGml()
|
||||
case "graphml":
|
||||
export.ExportGraphml()
|
||||
default:
|
||||
return fmt.Errorf("unknown format %q", typ)
|
||||
}
|
||||
|
||||
if export.Err() != nil {
|
||||
return export.Err()
|
||||
}
|
||||
|
||||
if outFile != "-" {
|
||||
fmt.Printf("%d entries were written\n", export.Count())
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue