blob: 4c4586ad8c21271b596a1f5f1bbadc2d619b3c96 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using Apache.Arrow.Types;
namespace Apache.Arrow
{
static class ArrowArrayBuilderFactory
{
internal static IArrowArrayBuilder<IArrowArray, IArrowArrayBuilder<IArrowArray>> Build(IArrowType dataType)
{
switch (dataType.TypeId)
{
case ArrowTypeId.Boolean:
return new BooleanArray.Builder();
case ArrowTypeId.UInt8:
return new UInt8Array.Builder();
case ArrowTypeId.Int8:
return new Int8Array.Builder();
case ArrowTypeId.UInt16:
return new UInt16Array.Builder();
case ArrowTypeId.Int16:
return new Int16Array.Builder();
case ArrowTypeId.UInt32:
return new UInt32Array.Builder();
case ArrowTypeId.Int32:
return new Int32Array.Builder();
case ArrowTypeId.UInt64:
return new UInt64Array.Builder();
case ArrowTypeId.Int64:
return new Int64Array.Builder();
case ArrowTypeId.HalfFloat:
#if NET5_0_OR_GREATER
return new HalfFloatArray.Builder();
#else
throw new NotSupportedException("Half-float arrays are not supported by this target framework.");
#endif
case ArrowTypeId.Float:
return new FloatArray.Builder();
case ArrowTypeId.Double:
return new DoubleArray.Builder();
case ArrowTypeId.String:
return new StringArray.Builder();
case ArrowTypeId.StringView:
return new StringViewArray.Builder();
case ArrowTypeId.Binary:
return new BinaryArray.Builder();
case ArrowTypeId.BinaryView:
return new BinaryViewArray.Builder();
case ArrowTypeId.Timestamp:
return new TimestampArray.Builder();
case ArrowTypeId.Date64:
return new Date64Array.Builder();
case ArrowTypeId.Date32:
return new Date32Array.Builder();
case ArrowTypeId.Time32:
return new Time32Array.Builder(dataType as Time32Type);
case ArrowTypeId.Time64:
return new Time64Array.Builder(dataType as Time64Type);
case ArrowTypeId.Duration:
return new DurationArray.Builder(dataType as DurationType);
case ArrowTypeId.List:
return new ListArray.Builder(dataType as ListType);
case ArrowTypeId.ListView:
return new ListViewArray.Builder(dataType as ListViewType);
case ArrowTypeId.FixedSizeList:
return new FixedSizeListArray.Builder(dataType as FixedSizeListType);
case ArrowTypeId.Decimal32:
return new Decimal32Array.Builder(dataType as Decimal32Type);
case ArrowTypeId.Decimal64:
return new Decimal64Array.Builder(dataType as Decimal64Type);
case ArrowTypeId.Decimal128:
return new Decimal128Array.Builder(dataType as Decimal128Type);
case ArrowTypeId.Decimal256:
return new Decimal256Array.Builder(dataType as Decimal256Type);
case ArrowTypeId.Interval:
var intervalType = (IntervalType)dataType;
return intervalType.Unit switch
{
IntervalUnit.YearMonth => new YearMonthIntervalArray.Builder(),
IntervalUnit.DayTime => new DayTimeIntervalArray.Builder(),
IntervalUnit.MonthDayNanosecond => new MonthDayNanosecondIntervalArray.Builder(),
_ => throw new ArgumentOutOfRangeException($"unsupported interval unit <{intervalType.Unit}>")
};
case ArrowTypeId.Map:
return new MapArray.Builder(dataType as MapType);
case ArrowTypeId.Struct:
case ArrowTypeId.Union:
case ArrowTypeId.Dictionary:
case ArrowTypeId.FixedSizedBinary:
default:
throw new NotSupportedException($"An ArrowArrayBuilder cannot be built for type {dataType.TypeId}.");
}
}
}
}