]> git.proxmox.com Git - ceph.git/blob - ceph/src/arrow/csharp/src/Apache.Arrow/Column.cs
import quincy 17.2.0
[ceph.git] / ceph / src / arrow / csharp / src / Apache.Arrow / Column.cs
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
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
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.
15
16 using System;
17 using System.Collections.Generic;
18 using Apache.Arrow.Types;
19
20 namespace Apache.Arrow
21 {
22 /// <summary>
23 /// A Column data structure that logically represents a column in a dataset
24 /// </summary>
25 public class Column
26 {
27 public Field Field { get; }
28 public ChunkedArray Data { get; }
29
30 public Column(Field field, IList<Array> arrays)
31 {
32 Data = new ChunkedArray(arrays);
33 Field = field;
34 if (!ValidateArrayDataTypes())
35 {
36 throw new ArgumentException($"{Field.DataType} must match {Data.DataType}");
37 }
38 }
39
40 private Column(Field field, ChunkedArray arrays)
41 {
42 Field = field;
43 Data = arrays;
44 }
45
46 public long Length => Data.Length;
47 public long NullCount => Data.NullCount;
48 public string Name => Field.Name;
49 public IArrowType Type => Field.DataType;
50
51 public Column Slice(int offset, int length)
52 {
53 return new Column(Field, Data.Slice(offset, length));
54 }
55
56 public Column Slice(int offset)
57 {
58 return new Column(Field, Data.Slice(offset));
59 }
60
61 private bool ValidateArrayDataTypes()
62 {
63 for (int i = 0; i < Data.ArrayCount; i++)
64 {
65 if (Data.Array(i).Data.DataType != Field.DataType)
66 {
67 return false;
68 }
69 }
70 return true;
71 }
72 }
73 }