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()
+}