This is an automated email from the ASF dual-hosted git repository.
zeroshade 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 a40d377 ARROW-14128: [Go] Implement MakeArrayFromScalar for nested
types
a40d377 is described below
commit a40d377e7437541c0261c0392ef37f5544eb7ae6
Author: Matthew Topol <[email protected]>
AuthorDate: Mon Oct 4 10:41:51 2021 -0400
ARROW-14128: [Go] Implement MakeArrayFromScalar for nested types
Also increases some test coverage on the existing scalars
Closes #11252 from zeroshade/arrow-14128
Lead-authored-by: Matthew Topol <[email protected]>
Co-authored-by: Matt Topol <[email protected]>
Signed-off-by: Matthew Topol <[email protected]>
---
go/arrow/go.sum | 52 +++++++++++++++++++
go/arrow/scalar/nested.go | 18 ++++---
go/arrow/scalar/scalar.go | 106 ++++++++++++++++++++++++++++++++++++--
go/arrow/scalar/scalar_test.go | 112 ++++++++++++++++++++++++++++++++++++++++-
4 files changed, 276 insertions(+), 12 deletions(-)
diff --git a/go/arrow/go.sum b/go/arrow/go.sum
index 49f3a31..9a1bcef 100644
--- a/go/arrow/go.sum
+++ b/go/arrow/go.sum
@@ -1,16 +1,28 @@
cloud.google.com/go v0.26.0/go.mod
h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.34.0 h1:eOI3/cP2VTU6uZLDYAoic+eyzzB9YyGmJ7eIjl8rOPg=
cloud.google.com/go v0.34.0/go.mod
h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9
h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod
h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+gioui.org v0.0.0-20210308172011-57750fc8a0a6
h1:K72hopUosKG3ntOPNG4OzzbuhxGuVf06fa2la1/H/Ho=
gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod
h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8=
+github.com/BurntSushi/toml v0.3.1
h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod
h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802
h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod
h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
+github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af
h1:wVe6/Ea46ZMeNkQjjBW6xcqyQA/j5e0D6GytH95g0gQ=
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod
h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
+github.com/antihax/optional v1.0.0
h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg=
github.com/antihax/optional v1.0.0/go.mod
h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
+github.com/boombuler/barcode v1.0.0
h1:s1TvRnXwL2xJRaccrdcBQMZxq6X7DvsMogtmJeHDdrc=
github.com/boombuler/barcode v1.0.0/go.mod
h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
+github.com/census-instrumentation/opencensus-proto v0.2.1
h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod
h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/client9/misspell v0.3.4
h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI=
github.com/client9/misspell v0.3.4/go.mod
h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod
h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403
h1:cqQfy1jclcSy/FwLjemeg3SR1yaINm74aQyupQ0Bl8M=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod
h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
+github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed
h1:OZmjad4L3H8ncOIR8rnb5MREYqG8ixi5+WbeUsquF0c=
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod
h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/davecgh/go-spew v1.1.0/go.mod
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1
h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
@@ -20,19 +32,32 @@ github.com/envoyproxy/go-control-plane
v0.9.1-0.20191026205805-5f8ba28d4473/go.m
github.com/envoyproxy/go-control-plane v0.9.4/go.mod
h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/go-control-plane
v0.9.9-0.20201210154907-fd9021fe5dad/go.mod
h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/go-control-plane
v0.9.9-0.20210217033140-668b12f5399d/go.mod
h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0
h1:dulLQAYQFYtG5MTplgNGHWuV2D+OBD+Z8lmDBmbLg+s=
github.com/envoyproxy/go-control-plane
v0.9.9-0.20210512163311-63b5d3c536b0/go.mod
h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
+github.com/envoyproxy/protoc-gen-validate v0.1.0
h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod
h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod
h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
+github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8=
github.com/fogleman/gg v1.3.0/go.mod
h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
+github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
github.com/ghodss/yaml v1.0.0/go.mod
h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/go-fonts/dejavu v0.1.0
h1:JSajPXURYqpr+Cu8U9bt8K+XcACIHWqWrvWCKyeFmVQ=
github.com/go-fonts/dejavu v0.1.0/go.mod
h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g=
+github.com/go-fonts/latin-modern v0.2.0
h1:5/Tv1Ek/QCr20C6ZOz15vw3g7GELYL98KWr8Hgo+3vk=
github.com/go-fonts/latin-modern v0.2.0/go.mod
h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks=
+github.com/go-fonts/liberation v0.1.1
h1:wBrPaMkrXFBW3qXpXAjiKljdVUMxn9bX2ia3XjPHoik=
github.com/go-fonts/liberation v0.1.1/go.mod
h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY=
+github.com/go-fonts/stix v0.1.0 h1:UlZlgrvvmT/58o573ot7NFw0vZasZ5I6bcIft/oMdgg=
github.com/go-fonts/stix v0.1.0/go.mod
h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY=
+github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1
h1:QbL/5oDUmRBzO9/Z7Seo6zf912W/a6Sr4Eu0G/3Jho0=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod
h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
+github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07
h1:OTlfMvwR1rLyf9goVmXfuS5AJn80+Vmj4rTf4n46SOs=
github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod
h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U=
+github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod
h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b
h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod
h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/mock v1.1.1 h1:G5FRp8JnTd7RQH5kemVNlMeyXQAztQ3mOWV95KxsXH8=
github.com/golang/mock v1.1.1/go.mod
h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod
h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod
h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -60,32 +85,46 @@ github.com/google/go-cmp v0.5.0/go.mod
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.5/go.mod
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
github.com/google/go-cmp v0.5.6/go.mod
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
github.com/google/uuid v1.1.2/go.mod
h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/grpc-ecosystem/grpc-gateway v1.16.0
h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod
h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
github.com/jung-kurt/gofpdf v1.0.0/go.mod
h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
+github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5
h1:PJr+ZMXIecYc1Ey2zucXdR73SMBtgjPgwa31099IMv0=
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod
h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/klauspost/compress v1.13.1
h1:wXr2uRxZTJXHLly6qhJabee5JqIhTRoLBhDOA74hDEQ=
github.com/klauspost/compress v1.13.1/go.mod
h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
+github.com/phpdave11/gofpdf v1.4.2
h1:KPKiIbfwbvC/wOncwhrpRdXVj2CZTCFlw4wnoyjtHfQ=
github.com/phpdave11/gofpdf v1.4.2/go.mod
h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY=
+github.com/phpdave11/gofpdi v1.0.12
h1:RZb9NG62cw/RW0rHAduVRo+98R8o/G1krcg2ns7DakQ=
github.com/phpdave11/gofpdi v1.0.12/go.mod
h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
github.com/pierrec/lz4/v4 v4.1.8
h1:ieHkV+i2BRzngO4Wd/3HGowuZStgq6QkPsD1eolNAO4=
github.com/pierrec/lz4/v4 v4.1.8/go.mod
h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pkg/errors v0.8.1/go.mod
h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod
h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0
h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod
h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4
h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod
h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/rogpeppe/fastuuid v1.2.0
h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s=
github.com/rogpeppe/fastuuid v1.2.0/go.mod
h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
+github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58
h1:nlG4Wa5+minh3S9LVFtNoY+GVRiudA2e3EVfcCi3RCA=
+github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod
h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w=
+github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
github.com/stretchr/objx v0.1.0/go.mod
h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod
h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.5.1/go.mod
h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.7.0
h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod
h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/yuin/goldmark v1.3.5 h1:dPmz1Snjq0kmkz159iL7S6WzdahUTHnHB5M56WFVifs=
github.com/yuin/goldmark v1.3.5/go.mod
h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
+go.opentelemetry.io/proto/otlp v0.7.0
h1:rwOQPCuKAKmwGKq2aVNnYIibI6wnV7EvzgfTCzcdGg8=
go.opentelemetry.io/proto/otlp v0.7.0/go.mod
h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod
h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod
h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod
h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9
h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod
h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod
h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod
h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -102,14 +141,18 @@ golang.org/x/image
v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+o
golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod
h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod
h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod
h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/image v0.0.0-20210216034530-4410531fe030
h1:lP9pYkih3DUSC641giIXa2XqfTIbbbRr0w2EOTA7wHA=
golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod
h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod
h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod
h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod
h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20210508222113-6edffad5e616
h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug=
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod
h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028
h1:4+4C/Iv2U4fMZBiMCc98MG1In4gJY5YRhtpDNeDeHWs=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod
h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod
h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -123,11 +166,13 @@ golang.org/x/net
v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b
golang.org/x/net v0.0.0-20210614182718-04defd469f4e
h1:XpT3nA5TvE525Ne3hInMh6+GETgn27Zfm9dxsThnX2Q=
golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod
h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod
h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d
h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod
h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -141,6 +186,7 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod
h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c
h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1
h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod
h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
@@ -157,6 +203,7 @@ golang.org/x/tools
v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBn
golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod
h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod
h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod
h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.1.4 h1:cVngSRcfgyZCzys3KYOpCFa+4dqX/Oub9tAq00ttGVs=
golang.org/x/tools v0.1.4/go.mod
h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -170,8 +217,10 @@ gonum.org/v1/gonum v0.9.3/go.mod
h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0=
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0
h1:OE9mWmgKkjJyEmDAAtGMPjXu+YNeGvK9VTSHY6+Qihc=
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod
h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod
h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
+gonum.org/v1/plot v0.9.0 h1:3sEo36Uopv1/SA/dMFFaxXoL5XyikJ9Sf2Vll/k6+2E=
gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY=
google.golang.org/appengine v1.1.0/go.mod
h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0
h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
google.golang.org/appengine v1.4.0/go.mod
h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod
h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod
h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
@@ -204,9 +253,12 @@ google.golang.org/protobuf v1.27.1/go.mod
h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405
h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.3 h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI=
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c
h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod
h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc
h1:/hemPrYIhOhy8zYrNj+069zDB68us2sMGsfkFJO0iZs=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
diff --git a/go/arrow/scalar/nested.go b/go/arrow/scalar/nested.go
index 4caa0b4..2347592 100644
--- a/go/arrow/scalar/nested.go
+++ b/go/arrow/scalar/nested.go
@@ -29,7 +29,9 @@ import (
type ListScalar interface {
Scalar
- List() array.Interface
+ GetList() array.Interface
+ Release()
+ Retain()
}
type List struct {
@@ -37,10 +39,12 @@ type List struct {
Value array.Interface
}
-func (l *List) value() interface{} { return l.Value }
-func (l *List) List() array.Interface { return l.Value }
+func (l *List) Release() { l.Value.Release() }
+func (l *List) Retain() { l.Value.Retain() }
+func (l *List) value() interface{} { return l.Value }
+func (l *List) GetList() array.Interface { return l.Value }
func (l *List) equals(rhs Scalar) bool {
- return array.ArrayEqual(l.Value, rhs.(ListScalar).List())
+ return array.ArrayEqual(l.Value, rhs.(ListScalar).GetList())
}
func (l *List) Validate() (err error) {
if err = l.scalar.Validate(); err != nil {
@@ -108,7 +112,7 @@ func (l *List) String() string {
}
func NewListScalar(val array.Interface) *List {
- return &List{scalar{arrow.ListOf(val.DataType()), true}, val}
+ return &List{scalar{arrow.ListOf(val.DataType()), true},
array.MakeFromData(val.Data())}
}
func makeMapType(typ *arrow.StructType) *arrow.MapType {
@@ -121,7 +125,7 @@ type Map struct {
}
func NewMapScalar(val array.Interface) *Map {
- return
&Map{&List{scalar{makeMapType(val.DataType().(*arrow.StructType)), true}, val}}
+ return
&Map{&List{scalar{makeMapType(val.DataType().(*arrow.StructType)), true},
array.MakeFromData(val.Data())}}
}
type FixedSizeList struct {
@@ -151,7 +155,7 @@ func NewFixedSizeListScalar(val array.Interface)
*FixedSizeList {
func NewFixedSizeListScalarWithType(val array.Interface, typ arrow.DataType)
*FixedSizeList {
debug.Assert(val.Len() == int(typ.(*arrow.FixedSizeListType).Len()),
"length of value for fixed size list scalar must match type")
- return &FixedSizeList{&List{scalar{typ, true}, val}}
+ return &FixedSizeList{&List{scalar{typ, true},
array.MakeFromData(val.Data())}}
}
type Vector []Scalar
diff --git a/go/arrow/scalar/scalar.go b/go/arrow/scalar/scalar.go
index 49b386d..03a7d03 100644
--- a/go/arrow/scalar/scalar.go
+++ b/go/arrow/scalar/scalar.go
@@ -60,6 +60,11 @@ type Scalar interface {
//TODO(zeroshade): approxEquals
}
+type Releasable interface {
+ Release()
+ Retain()
+}
+
func validateOptional(s *scalar, value interface{}, valueDesc string) error {
if s.Valid && value == nil {
return xerrors.Errorf("%s scalar is marked valid but doesn't
have a %s", s.Type, valueDesc)
@@ -477,7 +482,9 @@ func GetScalar(arr array.Interface, idx int) (Scalar,
error) {
return NewFixedSizeBinaryScalar(buf, arr.DataType()), nil
case *array.FixedSizeList:
size := int(arr.DataType().(*arrow.FixedSizeListType).Len())
- return
NewFixedSizeListScalarWithType(array.NewSlice(arr.ListValues(),
int64(idx*size), int64((idx+1)*size)), arr.DataType()), nil
+ slice := array.NewSlice(arr.ListValues(), int64(idx*size),
int64((idx+1)*size))
+ defer slice.Release()
+ return NewFixedSizeListScalarWithType(slice, arr.DataType()),
nil
case *array.Float16:
return NewFloat16Scalar(arr.Value(idx)), nil
case *array.Float32:
@@ -502,10 +509,14 @@ func GetScalar(arr array.Interface, idx int) (Scalar,
error) {
return NewUint64Scalar(arr.Value(idx)), nil
case *array.List:
offsets := arr.Offsets()
- return NewListScalar(array.NewSlice(arr.ListValues(),
int64(offsets[idx]), int64(offsets[idx+1]))), nil
+ slice := array.NewSlice(arr.ListValues(), int64(offsets[idx]),
int64(offsets[idx+1]))
+ defer slice.Release()
+ return NewListScalar(slice), nil
case *array.Map:
offsets := arr.Offsets()
- return NewMapScalar(array.NewSlice(arr.ListValues(),
int64(offsets[idx]), int64(offsets[idx+1]))), nil
+ slice := array.NewSlice(arr.ListValues(), int64(offsets[idx]),
int64(offsets[idx+1]))
+ defer slice.Release()
+ return NewMapScalar(slice), nil
case *array.MonthInterval:
return NewMonthIntervalScalar(arr.Value(idx)), nil
case *array.Null:
@@ -577,18 +588,21 @@ func MakeArrayFromScalar(sc Scalar, length int, mem
memory.Allocator) (array.Int
finishFixedWidth := func(data []byte) *array.Data {
buffer := createBuffer(data)
+ defer buffer.Release()
return array.NewData(sc.DataType(), length,
[]*memory.Buffer{nil, buffer}, nil, 0, 0)
}
switch s := sc.(type) {
case *Boolean:
data := memory.NewResizableBuffer(mem)
+ defer data.Release()
data.Resize(int(bitutil.BytesForBits(int64(length))))
c := byte(0x00)
if s.Value {
c = 0xFF
}
memory.Set(data.Bytes(), c)
+ defer data.Release()
return array.NewBoolean(length, data, nil, 0), nil
case BinaryScalar:
if s.DataType().ID() == arrow.FIXED_SIZE_BINARY {
@@ -600,12 +614,96 @@ func MakeArrayFromScalar(sc Scalar, length int, mem
memory.Allocator) (array.Int
valuesBuf := createBuffer(s.Data())
offsetsBuf := createOffsets(int32(len(s.Data())))
data := array.NewData(sc.DataType(), length,
[]*memory.Buffer{nil, offsetsBuf, valuesBuf}, nil, 0, 0)
- defer data.Release()
+ defer func() {
+ valuesBuf.Release()
+ offsetsBuf.Release()
+ data.Release()
+ }()
return array.MakeFromData(data), nil
case PrimitiveScalar:
data := finishFixedWidth(s.Data())
defer data.Release()
return array.MakeFromData(data), nil
+ case *Decimal128:
+ data :=
finishFixedWidth(arrow.Decimal128Traits.CastToBytes([]decimal128.Num{s.Value}))
+ defer data.Release()
+ return array.MakeFromData(data), nil
+ case *List:
+ values := make([]array.Interface, length)
+ for i := range values {
+ values[i] = s.Value
+ }
+
+ valueArray, err := array.Concatenate(values, mem)
+ if err != nil {
+ return nil, err
+ }
+ defer valueArray.Release()
+
+ offsetsBuf := createOffsets(int32(s.Value.Len()))
+ defer offsetsBuf.Release()
+ data := array.NewData(s.DataType(), length,
[]*memory.Buffer{nil, offsetsBuf}, []*array.Data{valueArray.Data()}, 0, 0)
+ defer data.Release()
+ return array.MakeFromData(data), nil
+ case *FixedSizeList:
+ values := make([]array.Interface, length)
+ for i := range values {
+ values[i] = s.Value
+ }
+
+ valueArray, err := array.Concatenate(values, mem)
+ if err != nil {
+ return nil, err
+ }
+ defer valueArray.Release()
+
+ data := array.NewData(s.DataType(), length,
[]*memory.Buffer{nil}, []*array.Data{valueArray.Data()}, 0, 0)
+ defer data.Release()
+ return array.MakeFromData(data), nil
+ case *Struct:
+ fields := make([]*array.Data, 0)
+ for _, v := range s.Value {
+ arr, err := MakeArrayFromScalar(v, length, mem)
+ if err != nil {
+ return nil, err
+ }
+ defer arr.Release()
+ fields = append(fields, arr.Data())
+ }
+
+ data := array.NewData(s.DataType(), length,
[]*memory.Buffer{nil}, fields, 0, 0)
+ defer data.Release()
+ return array.NewStructData(data), nil
+ case *Map:
+ structArr := s.GetList().(*array.Struct)
+ keys := make([]array.Interface, length)
+ values := make([]array.Interface, length)
+ for i := 0; i < length; i++ {
+ keys[i] = structArr.Field(0)
+ values[i] = structArr.Field(1)
+ }
+
+ keyArr, err := array.Concatenate(keys, mem)
+ if err != nil {
+ return nil, err
+ }
+ defer keyArr.Release()
+
+ valueArr, err := array.Concatenate(values, mem)
+ if err != nil {
+ return nil, err
+ }
+ defer valueArr.Release()
+
+ offsetsBuf := createOffsets(int32(structArr.Len()))
+ outStructArr := array.NewData(structArr.DataType(),
keyArr.Len(), []*memory.Buffer{nil}, []*array.Data{keyArr.Data(),
valueArr.Data()}, 0, 0)
+ data := array.NewData(s.DataType(), length,
[]*memory.Buffer{nil, offsetsBuf}, []*array.Data{outStructArr}, 0, 0)
+ defer func() {
+ offsetsBuf.Release()
+ outStructArr.Release()
+ data.Release()
+ }()
+ return array.MakeFromData(data), nil
default:
return nil, xerrors.Errorf("array from scalar not yet
implemented for type %s", sc.DataType())
}
diff --git a/go/arrow/scalar/scalar_test.go b/go/arrow/scalar/scalar_test.go
index f2b1c57..49c5c59 100644
--- a/go/arrow/scalar/scalar_test.go
+++ b/go/arrow/scalar/scalar_test.go
@@ -515,12 +515,31 @@ func TestNumericScalarCasts(t *testing.T) {
arrow.FixedWidthTypes.MonthInterval,
}
+ falseScalar := scalar.NewBooleanScalar(false)
+ trueScalar := scalar.NewBooleanScalar(true)
+ nullBool := scalar.MakeNullScalar(arrow.FixedWidthTypes.Boolean)
+
for _, tt := range tests {
+ t.Run(tt.ID().String()+"from bool", func(t *testing.T) {
+ zero, _ := scalar.ParseScalar(tt, "0")
+ zeroFromBool, err := falseScalar.CastTo(tt)
+ assert.NoError(t, err)
+ assert.True(t, scalar.Equals(zero, zeroFromBool))
+
+ one, _ := scalar.ParseScalar(tt, "1")
+ oneFromBool, err := trueScalar.CastTo(tt)
+ assert.NoError(t, err)
+ assert.True(t, scalar.Equals(one, oneFromBool))
+ })
t.Run(tt.ID().String(), func(t *testing.T) {
for _, repr := range []string{"0", "1", "3"} {
nullTest := scalar.MakeNullScalar(tt)
assert.Equal(t, "null", nullTest.String())
+ castedNull, err := nullBool.CastTo(tt)
+ assert.NoError(t, err)
+ assert.True(t, scalar.Equals(castedNull,
nullTest))
+
s, err := scalar.ParseScalar(tt, repr)
assert.NoError(t, err)
@@ -686,7 +705,7 @@ func TestMapScalarBasics(t *testing.T) {
expectedScalarType := arrow.MapOf(arrow.BinaryTypes.String,
arrow.PrimitiveTypes.Int8)
assert.True(t, arrow.TypeEqual(s.DataType(), expectedScalarType))
- assert.True(t, array.ArrayEqual(value, s.Value))
+ assert.True(t, array.ArrayEqual(value, s.GetList()))
checkMakeNullScalar(t, expectedScalarType)
}
@@ -767,3 +786,94 @@ func TestStructScalarValidateErrors(t *testing.T) {
assert.NoError(t, sc.Validate())
assert.Error(t, sc.ValidateFull())
}
+
+func getScalars(mem memory.Allocator) []scalar.Scalar {
+ hello := memory.NewBufferBytes([]byte("hello"))
+ daytime := arrow.DayTimeInterval{Days: 1, Milliseconds: 100}
+
+ int8Bldr := array.NewInt8Builder(mem)
+ defer int8Bldr.Release()
+
+ int8Bldr.AppendValues([]int8{1, 2, 3, 4}, nil)
+ int8Arr := int8Bldr.NewInt8Array()
+ defer int8Arr.Release()
+
+ mapBldr := array.NewMapBuilder(mem, arrow.PrimitiveTypes.Int8,
arrow.BinaryTypes.String, false)
+ defer mapBldr.Release()
+
+ kb := mapBldr.KeyBuilder().(*array.Int8Builder)
+ ib := mapBldr.ItemBuilder().(*array.StringBuilder)
+
+ mapBldr.Append(true)
+ kb.AppendValues([]int8{1, 2, 3}, nil)
+ ib.AppendValues([]string{"foo", "bar", "baz"}, nil)
+
+ mapArr := mapBldr.NewMapArray()
+ defer mapArr.Release()
+
+ return []scalar.Scalar{
+ scalar.NewBooleanScalar(false),
+ scalar.NewInt8Scalar(3),
+ scalar.NewUint16Scalar(3),
+ scalar.NewInt32Scalar(3),
+ scalar.NewUint64Scalar(3),
+ scalar.NewFloat64Scalar(3.0),
+ scalar.NewDate32Scalar(10),
+ scalar.NewDate64Scalar(11),
+ scalar.NewTime32Scalar(1000, arrow.FixedWidthTypes.Time32s),
+ scalar.NewTime64Scalar(1111, arrow.FixedWidthTypes.Time64us),
+ scalar.NewTimestampScalar(111,
arrow.FixedWidthTypes.Timestamp_ms),
+ scalar.NewMonthIntervalScalar(1),
+ scalar.NewDayTimeIntervalScalar(daytime),
+ scalar.NewDurationScalar(60, arrow.FixedWidthTypes.Duration_s),
+ scalar.NewBinaryScalar(hello, arrow.BinaryTypes.Binary),
+ scalar.NewFixedSizeBinaryScalar(hello,
&arrow.FixedSizeBinaryType{ByteWidth: hello.Len()}),
+ scalar.NewDecimal128Scalar(decimal128.FromI64(10),
&arrow.Decimal128Type{Precision: 16, Scale: 4}),
+ scalar.NewStringScalarFromBuffer(hello),
+ scalar.NewListScalar(int8Arr),
+ scalar.NewMapScalar(mapArr.List.ListValues()),
+ scalar.NewFixedSizeListScalar(int8Arr),
+
scalar.NewStructScalar([]scalar.Scalar{scalar.NewInt32Scalar(2),
scalar.NewInt32Scalar(6)},
+ arrow.StructOf([]arrow.Field{{Name: "min", Type:
arrow.PrimitiveTypes.Int32}, {Name: "max", Type:
arrow.PrimitiveTypes.Int32}}...)),
+ }
+}
+
+func TestMakeArrayFromScalar(t *testing.T) {
+ mem := memory.NewCheckedAllocator(memory.NewGoAllocator())
+ defer mem.AssertSize(t, 0)
+
+ nullArray, err := scalar.MakeArrayFromScalar(scalar.ScalarNull, 5, mem)
+ assert.NoError(t, err)
+ defer nullArray.Release()
+
+ assert.Equal(t, 5, nullArray.Len())
+ assert.Equal(t, 5, nullArray.NullN())
+
+ scalars := getScalars(mem)
+
+ for _, length := range []int{16} {
+ for _, s := range scalars {
+ t.Run(s.DataType().Name(), func(t *testing.T) {
+ if ls, ok := s.(scalar.Releasable); ok {
+ defer ls.Release()
+ }
+
+ arr, err := scalar.MakeArrayFromScalar(s,
length, mem)
+ assert.NoError(t, err)
+ defer arr.Release()
+
+ assert.Equal(t, length, arr.Len())
+ assert.Zero(t, arr.NullN())
+
+ for _, i := range []int{0, length / 2, length -
1} {
+ scalarCompare, err :=
scalar.GetScalar(arr, i)
+ assert.NoError(t, err)
+ assert.True(t, scalar.Equals(s,
scalarCompare))
+ if ls, ok :=
scalarCompare.(scalar.Releasable); ok {
+ ls.Release()
+ }
+ }
+ })
+ }
+ }
+}