in csharp/src/Apache.Arrow.Adbc.FlightSql/FlightSqlStatement.cs [78:198]
public override object GetValue(IArrowArray arrowArray, Field field, int index)
{
if (arrowArray is BooleanArray)
{
return Convert.ToBoolean(((BooleanArray)arrowArray).Values[index]);
}
else if (arrowArray is Date32Array)
{
Date32Array date32Array = (Date32Array)arrowArray;
return date32Array.GetDateTime(index);
}
else if (arrowArray is Date64Array)
{
Date64Array date64Array = (Date64Array)arrowArray;
return date64Array.GetDateTime(index);
}
else if (arrowArray is Decimal128Array)
{
try
{
// the value may be <decimal.min or >decimal.max
// then Arrow throws an exception
// no good way to check prior to
return ((Decimal128Array)arrowArray).GetValue(index);
}
catch (OverflowException oex)
{
return ParseDecimalValueFromOverflowException(oex);
}
}
else if (arrowArray is Decimal256Array)
{
try
{
return ((Decimal256Array)arrowArray).GetValue(index);
}
catch (OverflowException oex)
{
return ParseDecimalValueFromOverflowException(oex);
}
}
else if (arrowArray is DoubleArray)
{
return ((DoubleArray)arrowArray).GetValue(index);
}
else if (arrowArray is FloatArray)
{
return ((FloatArray)arrowArray).GetValue(index);
}
#if NET5_0_OR_GREATER
else if (arrowArray is PrimitiveArray<Half>)
{
// TODO: HalfFloatArray not present in current library
return ((PrimitiveArray<Half>)arrowArray).GetValue(index);
}
#endif
else if (arrowArray is Int8Array)
{
return ((Int8Array)arrowArray).GetValue(index);
}
else if (arrowArray is Int16Array)
{
return ((Int16Array)arrowArray).GetValue(index);
}
else if (arrowArray is Int32Array)
{
return ((Int32Array)arrowArray).GetValue(index);
}
else if (arrowArray is Int64Array)
{
Int64Array array = (Int64Array)arrowArray;
return array.GetValue(index);
}
else if (arrowArray is StringArray)
{
return ((StringArray)arrowArray).GetString(index);
}
else if (arrowArray is Time32Array)
{
return ((Time32Array)arrowArray).GetValue(index);
}
else if (arrowArray is Time64Array)
{
return ((Time64Array)arrowArray).GetValue(index);
}
else if (arrowArray is TimestampArray)
{
TimestampArray timestampArray = (TimestampArray)arrowArray;
DateTimeOffset dateTimeOffset = timestampArray.GetTimestamp(index).Value;
return dateTimeOffset;
}
else if (arrowArray is UInt8Array)
{
return ((UInt8Array)arrowArray).GetValue(index);
}
else if (arrowArray is UInt16Array)
{
return ((UInt16Array)arrowArray).GetValue(index);
}
else if (arrowArray is UInt32Array)
{
return ((UInt32Array)arrowArray).GetValue(index);
}
else if (arrowArray is UInt64Array)
{
return ((UInt64Array)arrowArray).GetValue(index);
}
// not covered:
// -- struct array
// -- binary array
// -- dictionary array
// -- fixed size binary
// -- list array
// -- union array
return null;
}