@@ -18,6 +18,7 @@ package arrow_test
1818
1919import (
2020 "fmt"
21+ "log"
2122
2223 "github.com/apache/arrow/go/arrow"
2324 "github.com/apache/arrow/go/arrow/array"
@@ -409,3 +410,135 @@ func Example_float64Tensor2x5ColMajor() {
409410 // arr[1 3] = 8
410411 // arr[1 4] = 10
411412}
413+
414+ func Example_record () {
415+ pool := memory .NewGoAllocator ()
416+
417+ schema := arrow .NewSchema (
418+ []arrow.Field {
419+ arrow.Field {Name : "f1-i32" , Type : arrow .PrimitiveTypes .Int32 },
420+ arrow.Field {Name : "f2-f64" , Type : arrow .PrimitiveTypes .Float64 },
421+ },
422+ nil ,
423+ )
424+
425+ b := array .NewRecordBuilder (pool , schema )
426+ defer b .Release ()
427+
428+ b .Field (0 ).(* array.Int32Builder ).AppendValues ([]int32 {1 , 2 , 3 , 4 , 5 , 6 }, nil )
429+ b .Field (0 ).(* array.Int32Builder ).AppendValues ([]int32 {7 , 8 , 9 , 10 }, []bool {true , true , false , true })
430+ b .Field (1 ).(* array.Float64Builder ).AppendValues ([]float64 {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 }, nil )
431+
432+ rec := b .NewRecord ()
433+ defer rec .Release ()
434+
435+ for i , col := range rec .Columns () {
436+ fmt .Printf ("column[%d] %q: %v\n " , i , rec .ColumnName (i ), col )
437+ }
438+
439+ // Output:
440+ // column[0] "f1-i32": [1 2 3 4 5 6 7 8 (null) 10]
441+ // column[1] "f2-f64": [1 2 3 4 5 6 7 8 9 10]
442+ }
443+
444+ func Example_recordReader () {
445+ pool := memory .NewGoAllocator ()
446+
447+ schema := arrow .NewSchema (
448+ []arrow.Field {
449+ arrow.Field {Name : "f1-i32" , Type : arrow .PrimitiveTypes .Int32 },
450+ arrow.Field {Name : "f2-f64" , Type : arrow .PrimitiveTypes .Float64 },
451+ },
452+ nil ,
453+ )
454+
455+ b := array .NewRecordBuilder (pool , schema )
456+ defer b .Release ()
457+
458+ b .Field (0 ).(* array.Int32Builder ).AppendValues ([]int32 {1 , 2 , 3 , 4 , 5 , 6 }, nil )
459+ b .Field (0 ).(* array.Int32Builder ).AppendValues ([]int32 {7 , 8 , 9 , 10 }, []bool {true , true , false , true })
460+ b .Field (1 ).(* array.Float64Builder ).AppendValues ([]float64 {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 }, nil )
461+
462+ rec1 := b .NewRecord ()
463+ defer rec1 .Release ()
464+
465+ b .Field (0 ).(* array.Int32Builder ).AppendValues ([]int32 {11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 }, nil )
466+ b .Field (1 ).(* array.Float64Builder ).AppendValues ([]float64 {11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 }, nil )
467+
468+ rec2 := b .NewRecord ()
469+ defer rec2 .Release ()
470+
471+ itr , err := array .NewRecordReader (schema , []array.Record {rec1 , rec2 })
472+ if err != nil {
473+ log .Fatal (err )
474+ }
475+ defer itr .Release ()
476+
477+ n := 0
478+ for itr .Next () {
479+ rec := itr .Record ()
480+ for i , col := range rec .Columns () {
481+ fmt .Printf ("rec[%d][%q]: %v\n " , n , rec .ColumnName (i ), col )
482+ }
483+ n ++
484+ }
485+
486+ // Output:
487+ // rec[0]["f1-i32"]: [1 2 3 4 5 6 7 8 (null) 10]
488+ // rec[0]["f2-f64"]: [1 2 3 4 5 6 7 8 9 10]
489+ // rec[1]["f1-i32"]: [11 12 13 14 15 16 17 18 19 20]
490+ // rec[1]["f2-f64"]: [11 12 13 14 15 16 17 18 19 20]
491+ }
492+
493+ func Example_table () {
494+ pool := memory .NewGoAllocator ()
495+
496+ schema := arrow .NewSchema (
497+ []arrow.Field {
498+ arrow.Field {Name : "f1-i32" , Type : arrow .PrimitiveTypes .Int32 },
499+ arrow.Field {Name : "f2-f64" , Type : arrow .PrimitiveTypes .Float64 },
500+ },
501+ nil ,
502+ )
503+
504+ b := array .NewRecordBuilder (pool , schema )
505+ defer b .Release ()
506+
507+ b .Field (0 ).(* array.Int32Builder ).AppendValues ([]int32 {1 , 2 , 3 , 4 , 5 , 6 }, nil )
508+ b .Field (0 ).(* array.Int32Builder ).AppendValues ([]int32 {7 , 8 , 9 , 10 }, []bool {true , true , false , true })
509+ b .Field (1 ).(* array.Float64Builder ).AppendValues ([]float64 {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 }, nil )
510+
511+ rec1 := b .NewRecord ()
512+ defer rec1 .Release ()
513+
514+ b .Field (0 ).(* array.Int32Builder ).AppendValues ([]int32 {11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 }, nil )
515+ b .Field (1 ).(* array.Float64Builder ).AppendValues ([]float64 {11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 }, nil )
516+
517+ rec2 := b .NewRecord ()
518+ defer rec2 .Release ()
519+
520+ tbl := array .NewTableFromRecords (schema , []array.Record {rec1 , rec2 })
521+ defer tbl .Release ()
522+
523+ tr := array .NewTableReader (tbl , 5 )
524+ defer tr .Release ()
525+
526+ n := 0
527+ for tr .Next () {
528+ rec := tr .Record ()
529+ for i , col := range rec .Columns () {
530+ fmt .Printf ("rec[%d][%q]: %v\n " , n , rec .ColumnName (i ), col )
531+ }
532+ n ++
533+ }
534+
535+ // Output:
536+ // rec[0]["f1-i32"]: [1 2 3 4 5]
537+ // rec[0]["f2-f64"]: [1 2 3 4 5]
538+ // rec[1]["f1-i32"]: [6 7 8 (null) 10]
539+ // rec[1]["f2-f64"]: [6 7 8 9 10]
540+ // rec[2]["f1-i32"]: [11 12 13 14 15]
541+ // rec[2]["f2-f64"]: [11 12 13 14 15]
542+ // rec[3]["f1-i32"]: [16 17 18 19 20]
543+ // rec[3]["f2-f64"]: [16 17 18 19 20]
544+ }
0 commit comments