1 // Licensed to the Apache Software Foundation (ASF) under one or more
2 // contributor license agreements. See the NOTICE file distributed with
3 // this work for additional information regarding copyright ownership.
4 // The ASF licenses this file to You under the Apache License, Version 2.0
5 // (the "License"); you may not use this file except in compliance with
6 // the License. You may obtain a copy of the License at
8 // http://www.apache.org/licenses/LICENSE-2.0
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
17 using System.Collections.Generic;
18 using Apache.Arrow.Types;
20 namespace Apache.Arrow
23 /// A Column data structure that logically represents a column in a dataset
27 public Field Field { get; }
28 public ChunkedArray Data { get; }
30 public Column(Field field, IList<Array> arrays)
32 Data = new ChunkedArray(arrays);
34 if (!ValidateArrayDataTypes())
36 throw new ArgumentException($"{Field.DataType} must match {Data.DataType}");
40 private Column(Field field, ChunkedArray arrays)
46 public long Length => Data.Length;
47 public long NullCount => Data.NullCount;
48 public string Name => Field.Name;
49 public IArrowType Type => Field.DataType;
51 public Column Slice(int offset, int length)
53 return new Column(Field, Data.Slice(offset, length));
56 public Column Slice(int offset)
58 return new Column(Field, Data.Slice(offset));
61 private bool ValidateArrayDataTypes()
63 for (int i = 0; i < Data.ArrayCount; i++)
65 if (Data.Array(i).Data.DataType != Field.DataType)