diff --git a/go/arrow/datatype_binary.go b/go/arrow/datatype_binary.go index 40ab860def5..4fc0162734e 100644 --- a/go/arrow/datatype_binary.go +++ b/go/arrow/datatype_binary.go @@ -18,15 +18,17 @@ package arrow type BinaryType struct{} -func (t *BinaryType) ID() Type { return BINARY } -func (t *BinaryType) Name() string { return "binary" } -func (t *BinaryType) binary() {} +func (t *BinaryType) ID() Type { return BINARY } +func (t *BinaryType) Name() string { return "binary" } +func (t *BinaryType) String() string { return "binary" } +func (t *BinaryType) binary() {} type StringType struct{} -func (t *StringType) ID() Type { return STRING } -func (t *StringType) Name() string { return "utf8" } -func (t *StringType) binary() {} +func (t *StringType) ID() Type { return STRING } +func (t *StringType) Name() string { return "utf8" } +func (t *StringType) String() string { return "utf8" } +func (t *StringType) binary() {} var ( BinaryTypes = struct { diff --git a/go/arrow/datatype_fixedwidth.go b/go/arrow/datatype_fixedwidth.go index 444495058a5..ae4661052a4 100644 --- a/go/arrow/datatype_fixedwidth.go +++ b/go/arrow/datatype_fixedwidth.go @@ -16,10 +16,13 @@ package arrow +import "strconv" + type BooleanType struct{} -func (t *BooleanType) ID() Type { return BOOL } -func (t *BooleanType) Name() string { return "bool" } +func (t *BooleanType) ID() Type { return BOOL } +func (t *BooleanType) Name() string { return "bool" } +func (t *BooleanType) String() string { return "bool" } // BitWidth returns the number of bits required to store a single element of this data type in memory. func (t *BooleanType) BitWidth() int { return 1 } @@ -32,6 +35,10 @@ func (*FixedSizeBinaryType) ID() Type { return FIXED_SIZE_BINARY } func (*FixedSizeBinaryType) Name() string { return "fixed_size_binary" } func (t *FixedSizeBinaryType) BitWidth() int { return 8 * t.ByteWidth } +func (t *FixedSizeBinaryType) String() string { + return "fixed_size_binary[" + strconv.Itoa(t.ByteWidth) + "]" +} + type ( Timestamp int64 Time32 int32 @@ -58,8 +65,9 @@ type TimestampType struct { TimeZone string } -func (*TimestampType) ID() Type { return TIMESTAMP } -func (*TimestampType) Name() string { return "timestamp" } +func (*TimestampType) ID() Type { return TIMESTAMP } +func (*TimestampType) Name() string { return "timestamp" } +func (t *TimestampType) String() string { return "timestamp[" + t.Unit.String() + "]" } // BitWidth returns the number of bits required to store a single element of this data type in memory. func (*TimestampType) BitWidth() int { return 64 } @@ -69,18 +77,20 @@ type Time32Type struct { Unit TimeUnit } -func (*Time32Type) ID() Type { return TIME32 } -func (*Time32Type) Name() string { return "time32" } -func (*Time32Type) BitWidth() int { return 32 } +func (*Time32Type) ID() Type { return TIME32 } +func (*Time32Type) Name() string { return "time32" } +func (*Time32Type) BitWidth() int { return 32 } +func (t *Time32Type) String() string { return "time32[" + t.Unit.String() + "]" } // Time64Type is encoded as a 64-bit signed integer, representing either microseconds or nanoseconds since midnight. type Time64Type struct { Unit TimeUnit } -func (*Time64Type) ID() Type { return TIME64 } -func (*Time64Type) Name() string { return "time64" } -func (*Time64Type) BitWidth() int { return 64 } +func (*Time64Type) ID() Type { return TIME64 } +func (*Time64Type) Name() string { return "time64" } +func (*Time64Type) BitWidth() int { return 64 } +func (t *Time64Type) String() string { return "time64[" + t.Unit.String() + "]" } var ( FixedWidthTypes = struct { diff --git a/go/arrow/datatype_nested.go b/go/arrow/datatype_nested.go index 1c9b693aea1..59a198ffc12 100644 --- a/go/arrow/datatype_nested.go +++ b/go/arrow/datatype_nested.go @@ -19,6 +19,7 @@ package arrow import ( "fmt" "reflect" + "strings" ) // ListType describes a nested type in which each array slot contains @@ -38,8 +39,9 @@ func ListOf(t DataType) *ListType { return &ListType{elem: t} } -func (*ListType) ID() Type { return LIST } -func (*ListType) Name() string { return "list" } +func (*ListType) ID() Type { return LIST } +func (*ListType) Name() string { return "list" } +func (t *ListType) String() string { return fmt.Sprintf("list", t.elem) } // Elem returns the ListType's element type. func (t *ListType) Elem() DataType { return t.elem } @@ -88,6 +90,19 @@ func StructOf(fs ...Field) *StructType { func (*StructType) ID() Type { return STRUCT } func (*StructType) Name() string { return "struct" } +func (t *StructType) String() string { + o := new(strings.Builder) + o.WriteString("struct<") + for i, f := range t.fields { + if i > 0 { + o.WriteString(", ") + } + o.WriteString(fmt.Sprintf("%s: %v", f.Name, f.Type)) + } + o.WriteString(">") + return o.String() +} + func (t *StructType) Fields() []Field { return t.fields } func (t *StructType) Field(i int) Field { return t.fields[i] } diff --git a/go/arrow/datatype_null.go b/go/arrow/datatype_null.go index 7f0d8bfa516..5882dfe39b1 100644 --- a/go/arrow/datatype_null.go +++ b/go/arrow/datatype_null.go @@ -19,8 +19,9 @@ package arrow // NullType describes a degenerate array, with zero physical storage. type NullType struct{} -func (*NullType) ID() Type { return NULL } -func (*NullType) Name() string { return "null" } +func (*NullType) ID() Type { return NULL } +func (*NullType) Name() string { return "null" } +func (*NullType) String() string { return "null" } var ( Null *NullType diff --git a/go/arrow/datatype_numeric.gen.go b/go/arrow/datatype_numeric.gen.go index 9b5dc835b1e..d5b34d7d4fa 100644 --- a/go/arrow/datatype_numeric.gen.go +++ b/go/arrow/datatype_numeric.gen.go @@ -20,75 +20,87 @@ package arrow type Int8Type struct{} -func (t *Int8Type) ID() Type { return INT8 } -func (t *Int8Type) Name() string { return "int8" } -func (t *Int8Type) BitWidth() int { return 8 } +func (t *Int8Type) ID() Type { return INT8 } +func (t *Int8Type) Name() string { return "int8" } +func (t *Int8Type) String() string { return "int8" } +func (t *Int8Type) BitWidth() int { return 8 } type Int16Type struct{} -func (t *Int16Type) ID() Type { return INT16 } -func (t *Int16Type) Name() string { return "int16" } -func (t *Int16Type) BitWidth() int { return 16 } +func (t *Int16Type) ID() Type { return INT16 } +func (t *Int16Type) Name() string { return "int16" } +func (t *Int16Type) String() string { return "int16" } +func (t *Int16Type) BitWidth() int { return 16 } type Int32Type struct{} -func (t *Int32Type) ID() Type { return INT32 } -func (t *Int32Type) Name() string { return "int32" } -func (t *Int32Type) BitWidth() int { return 32 } +func (t *Int32Type) ID() Type { return INT32 } +func (t *Int32Type) Name() string { return "int32" } +func (t *Int32Type) String() string { return "int32" } +func (t *Int32Type) BitWidth() int { return 32 } type Int64Type struct{} -func (t *Int64Type) ID() Type { return INT64 } -func (t *Int64Type) Name() string { return "int64" } -func (t *Int64Type) BitWidth() int { return 64 } +func (t *Int64Type) ID() Type { return INT64 } +func (t *Int64Type) Name() string { return "int64" } +func (t *Int64Type) String() string { return "int64" } +func (t *Int64Type) BitWidth() int { return 64 } type Uint8Type struct{} -func (t *Uint8Type) ID() Type { return UINT8 } -func (t *Uint8Type) Name() string { return "uint8" } -func (t *Uint8Type) BitWidth() int { return 8 } +func (t *Uint8Type) ID() Type { return UINT8 } +func (t *Uint8Type) Name() string { return "uint8" } +func (t *Uint8Type) String() string { return "uint8" } +func (t *Uint8Type) BitWidth() int { return 8 } type Uint16Type struct{} -func (t *Uint16Type) ID() Type { return UINT16 } -func (t *Uint16Type) Name() string { return "uint16" } -func (t *Uint16Type) BitWidth() int { return 16 } +func (t *Uint16Type) ID() Type { return UINT16 } +func (t *Uint16Type) Name() string { return "uint16" } +func (t *Uint16Type) String() string { return "uint16" } +func (t *Uint16Type) BitWidth() int { return 16 } type Uint32Type struct{} -func (t *Uint32Type) ID() Type { return UINT32 } -func (t *Uint32Type) Name() string { return "uint32" } -func (t *Uint32Type) BitWidth() int { return 32 } +func (t *Uint32Type) ID() Type { return UINT32 } +func (t *Uint32Type) Name() string { return "uint32" } +func (t *Uint32Type) String() string { return "uint32" } +func (t *Uint32Type) BitWidth() int { return 32 } type Uint64Type struct{} -func (t *Uint64Type) ID() Type { return UINT64 } -func (t *Uint64Type) Name() string { return "uint64" } -func (t *Uint64Type) BitWidth() int { return 64 } +func (t *Uint64Type) ID() Type { return UINT64 } +func (t *Uint64Type) Name() string { return "uint64" } +func (t *Uint64Type) String() string { return "uint64" } +func (t *Uint64Type) BitWidth() int { return 64 } type Float32Type struct{} -func (t *Float32Type) ID() Type { return FLOAT32 } -func (t *Float32Type) Name() string { return "float32" } -func (t *Float32Type) BitWidth() int { return 32 } +func (t *Float32Type) ID() Type { return FLOAT32 } +func (t *Float32Type) Name() string { return "float32" } +func (t *Float32Type) String() string { return "float32" } +func (t *Float32Type) BitWidth() int { return 32 } type Float64Type struct{} -func (t *Float64Type) ID() Type { return FLOAT64 } -func (t *Float64Type) Name() string { return "float64" } -func (t *Float64Type) BitWidth() int { return 64 } +func (t *Float64Type) ID() Type { return FLOAT64 } +func (t *Float64Type) Name() string { return "float64" } +func (t *Float64Type) String() string { return "float64" } +func (t *Float64Type) BitWidth() int { return 64 } type Date32Type struct{} -func (t *Date32Type) ID() Type { return DATE32 } -func (t *Date32Type) Name() string { return "date32" } -func (t *Date32Type) BitWidth() int { return 32 } +func (t *Date32Type) ID() Type { return DATE32 } +func (t *Date32Type) Name() string { return "date32" } +func (t *Date32Type) String() string { return "date32" } +func (t *Date32Type) BitWidth() int { return 32 } type Date64Type struct{} -func (t *Date64Type) ID() Type { return DATE64 } -func (t *Date64Type) Name() string { return "date64" } -func (t *Date64Type) BitWidth() int { return 64 } +func (t *Date64Type) ID() Type { return DATE64 } +func (t *Date64Type) Name() string { return "date64" } +func (t *Date64Type) String() string { return "date64" } +func (t *Date64Type) BitWidth() int { return 64 } var ( PrimitiveTypes = struct { diff --git a/go/arrow/datatype_numeric.gen.go.tmpl b/go/arrow/datatype_numeric.gen.go.tmpl index 94589640b8d..193cf09e45d 100644 --- a/go/arrow/datatype_numeric.gen.go.tmpl +++ b/go/arrow/datatype_numeric.gen.go.tmpl @@ -19,9 +19,10 @@ package arrow {{range .In}} type {{.Name}}Type struct {} -func (t *{{.Name}}Type) ID() Type { return {{.Name|upper}} } -func (t *{{.Name}}Type) Name() string { return "{{.Name|lower}}" } -func (t *{{.Name}}Type) BitWidth() int { return {{.Size}} } +func (t *{{.Name}}Type) ID() Type { return {{.Name|upper}} } +func (t *{{.Name}}Type) Name() string { return "{{.Name|lower}}" } +func (t *{{.Name}}Type) String() string { return "{{.Name|lower}}" } +func (t *{{.Name}}Type) BitWidth() int { return {{.Size}} } {{end}} diff --git a/go/arrow/ipc/cmd/arrow-ls/main.go b/go/arrow/ipc/cmd/arrow-ls/main.go index cf9a765d6dc..59e21f98298 100644 --- a/go/arrow/ipc/cmd/arrow-ls/main.go +++ b/go/arrow/ipc/cmd/arrow-ls/main.go @@ -176,7 +176,7 @@ func displayField(o io.Writer, field arrow.Field, inc int) { if field.Nullable { nullable = ", nullable" } - fmt.Fprintf(o, "%*.s- %s: type=%v%v\n", inc, "", field.Name, field.Type.Name(), 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) }