You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by sb...@apache.org on 2019/06/11 12:05:13 UTC
[arrow] branch master updated: ARROW-5552: [Go] make Schema,
Field and simpleRecord implement Stringer
This is an automated email from the ASF dual-hosted git repository.
sbinet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/master by this push:
new 084549a ARROW-5552: [Go] make Schema, Field and simpleRecord implement Stringer
084549a is described below
commit 084549af7d4674976267add234bfcead81ca7ccf
Author: Sebastien Binet <bi...@cern.ch>
AuthorDate: Tue Jun 11 14:04:48 2019 +0200
ARROW-5552: [Go] make Schema, Field and simpleRecord implement Stringer
Author: Sebastien Binet <bi...@cern.ch>
Closes #4516 from sbinet/issue-5552 and squashes the following commits:
dfbb6110d <Sebastien Binet> go/arrow/array: make simpleRecord implement Stringer
702b3a33d <Sebastien Binet> ARROW-5552: make Schema and Field implement Stringer
---
go/arrow/array/record.go | 12 ++++++++++++
go/arrow/datatype_nested.go | 13 +++++++++++++
go/arrow/ipc/cmd/arrow-ls/main.go | 29 ++---------------------------
go/arrow/ipc/cmd/arrow-ls/main_test.go | 6 +++---
go/arrow/schema.go | 15 +++++++++++++++
5 files changed, 45 insertions(+), 30 deletions(-)
diff --git a/go/arrow/array/record.go b/go/arrow/array/record.go
index 7bbdab7..f7b7bd7 100644
--- a/go/arrow/array/record.go
+++ b/go/arrow/array/record.go
@@ -18,6 +18,7 @@ package array
import (
"fmt"
+ "strings"
"sync/atomic"
"github.com/apache/arrow/go/arrow"
@@ -242,6 +243,17 @@ func (rec *simpleRecord) NewSlice(i, j int64) Record {
return NewRecord(rec.schema, arrs, j-i)
}
+func (rec *simpleRecord) String() string {
+ o := new(strings.Builder)
+ fmt.Fprintf(o, "record:\n %v\n", rec.schema)
+ fmt.Fprintf(o, " rows: %d\n", rec.rows)
+ for i, col := range rec.arrs {
+ fmt.Fprintf(o, " col[%d][%s]: %v\n", i, rec.schema.Field(i).Name, col)
+ }
+
+ return o.String()
+}
+
// RecordBuilder eases the process of building a Record, iteratively, from
// a known Schema.
type RecordBuilder struct {
diff --git a/go/arrow/datatype_nested.go b/go/arrow/datatype_nested.go
index cf3f99b..c6173fe 100644
--- a/go/arrow/datatype_nested.go
+++ b/go/arrow/datatype_nested.go
@@ -161,6 +161,19 @@ func (f Field) Equal(o Field) bool {
return reflect.DeepEqual(f, o)
}
+func (f Field) String() string {
+ o := new(strings.Builder)
+ nullable := ""
+ if f.Nullable {
+ nullable = ", nullable"
+ }
+ fmt.Fprintf(o, "%s: type=%v%v", f.Name, f.Type, nullable)
+ if f.HasMetadata() {
+ fmt.Fprintf(o, "\n%*.smetadata: %v", len(f.Name)+2, "", f.Metadata)
+ }
+ return o.String()
+}
+
var (
_ DataType = (*ListType)(nil)
_ DataType = (*StructType)(nil)
diff --git a/go/arrow/ipc/cmd/arrow-ls/main.go b/go/arrow/ipc/cmd/arrow-ls/main.go
index 59e21f9..43460f9 100644
--- a/go/arrow/ipc/cmd/arrow-ls/main.go
+++ b/go/arrow/ipc/cmd/arrow-ls/main.go
@@ -59,9 +59,7 @@ import (
"io"
"log"
"os"
- "strings"
- "github.com/apache/arrow/go/arrow"
"github.com/apache/arrow/go/arrow/ipc"
"github.com/apache/arrow/go/arrow/memory"
"github.com/pkg/errors"
@@ -99,7 +97,7 @@ func processStream(w io.Writer, rin io.Reader) error {
}
defer r.Release()
- fmt.Fprintf(w, "schema:\n%v", displaySchema(r.Schema()))
+ fmt.Fprintf(w, "%v\n", r.Schema())
nrecs := 0
for r.Next() {
@@ -153,35 +151,12 @@ func processFile(w io.Writer, fname string) error {
defer r.Close()
fmt.Fprintf(w, "version: %v\n", r.Version())
- fmt.Fprintf(w, "schema:\n%v", displaySchema(r.Schema()))
+ fmt.Fprintf(w, "%v\n", r.Schema())
fmt.Fprintf(w, "records: %d\n", r.NumRecords())
return nil
}
-func displaySchema(s *arrow.Schema) string {
- o := new(strings.Builder)
- fmt.Fprintf(o, "%*.sfields: %d\n", 2, "", len(s.Fields()))
- for _, f := range s.Fields() {
- displayField(o, f, 4)
- }
- if meta := s.Metadata(); meta.Len() > 0 {
- fmt.Fprintf(o, "metadata: %v\n", meta)
- }
- return o.String()
-}
-
-func displayField(o io.Writer, field arrow.Field, inc int) {
- nullable := ""
- if field.Nullable {
- nullable = ", nullable"
- }
- fmt.Fprintf(o, "%*.s- %s: type=%v%v\n", inc, "", field.Name, field.Type, nullable)
- if field.HasMetadata() {
- fmt.Fprintf(o, "%*.smetadata: %v\n", inc, "", field.Metadata)
- }
-}
-
func init() {
flag.Usage = func() {
fmt.Fprintf(os.Stderr, `Command arrow-ls displays the listing of an Arrow file.
diff --git a/go/arrow/ipc/cmd/arrow-ls/main_test.go b/go/arrow/ipc/cmd/arrow-ls/main_test.go
index 3b50b89..64cd478 100644
--- a/go/arrow/ipc/cmd/arrow-ls/main_test.go
+++ b/go/arrow/ipc/cmd/arrow-ls/main_test.go
@@ -50,7 +50,7 @@ func TestLsStream(t *testing.T) {
- uint64s: type=uint64, nullable
- float32s: type=float32, nullable
- float64s: type=float64, nullable
-metadata: ["k1": "v1", "k2": "v2", "k3": "v3"]
+ metadata: ["k1": "v1", "k2": "v2", "k3": "v3"]
records: 3
`,
},
@@ -179,7 +179,7 @@ func TestLsFile(t *testing.T) {
- uint64s: type=uint64, nullable
- float32s: type=float32, nullable
- float64s: type=float64, nullable
-metadata: ["k1": "v1", "k2": "v2", "k3": "v3"]
+ metadata: ["k1": "v1", "k2": "v2", "k3": "v3"]
records: 3
`,
},
@@ -199,7 +199,7 @@ schema:
- uint64s: type=uint64, nullable
- float32s: type=float32, nullable
- float64s: type=float64, nullable
-metadata: ["k1": "v1", "k2": "v2", "k3": "v3"]
+ metadata: ["k1": "v1", "k2": "v2", "k3": "v3"]
records: 3
`,
},
diff --git a/go/arrow/schema.go b/go/arrow/schema.go
index 0083707..f86bd2e 100644
--- a/go/arrow/schema.go
+++ b/go/arrow/schema.go
@@ -183,3 +183,18 @@ func (sc *Schema) Equal(o *Schema) bool {
}
return true
}
+
+func (s *Schema) String() string {
+ o := new(strings.Builder)
+ fmt.Fprintf(o, "schema:\n fields: %d\n", len(s.Fields()))
+ for i, f := range s.Fields() {
+ if i > 0 {
+ o.WriteString("\n")
+ }
+ fmt.Fprintf(o, " - %v", f)
+ }
+ if meta := s.Metadata(); meta.Len() > 0 {
+ fmt.Fprintf(o, "\n metadata: %v", meta)
+ }
+ return o.String()
+}