in csharp/src/Drivers/Apache/Hive2/HiveServer2Connection.cs [1383:1523]
public override IArrowArrayStream GetInfo(IReadOnlyList<AdbcInfoCode> codes)
{
const int strValTypeID = 0;
const int boolValTypeId = 1;
UnionType infoUnionType = new UnionType(
new Field[]
{
new Field("string_value", StringType.Default, true),
new Field("bool_value", BooleanType.Default, true),
new Field("int64_value", Int64Type.Default, true),
new Field("int32_bitmask", Int32Type.Default, true),
new Field(
"string_list",
new ListType(
new Field("item", StringType.Default, true)
),
false
),
new Field(
"int32_to_int32_list_map",
new ListType(
new Field("entries", new StructType(
new Field[]
{
new Field("key", Int32Type.Default, false),
new Field("value", Int32Type.Default, true),
}
), false)
),
true
)
},
new int[] { 0, 1, 2, 3, 4, 5 },
UnionMode.Dense);
if (codes.Count == 0)
{
codes = infoSupportedCodes;
}
UInt32Array.Builder infoNameBuilder = new UInt32Array.Builder();
ArrowBuffer.Builder<byte> typeBuilder = new ArrowBuffer.Builder<byte>();
ArrowBuffer.Builder<int> offsetBuilder = new ArrowBuffer.Builder<int>();
StringArray.Builder stringInfoBuilder = new StringArray.Builder();
BooleanArray.Builder booleanInfoBuilder = new BooleanArray.Builder();
int nullCount = 0;
int arrayLength = codes.Count;
int offset = 0;
foreach (AdbcInfoCode code in codes)
{
switch (code)
{
case AdbcInfoCode.DriverName:
infoNameBuilder.Append((UInt32)code);
typeBuilder.Append(strValTypeID);
offsetBuilder.Append(offset++);
stringInfoBuilder.Append(InfoDriverName);
booleanInfoBuilder.AppendNull();
break;
case AdbcInfoCode.DriverVersion:
infoNameBuilder.Append((UInt32)code);
typeBuilder.Append(strValTypeID);
offsetBuilder.Append(offset++);
stringInfoBuilder.Append(ProductVersion);
booleanInfoBuilder.AppendNull();
break;
case AdbcInfoCode.DriverArrowVersion:
infoNameBuilder.Append((UInt32)code);
typeBuilder.Append(strValTypeID);
offsetBuilder.Append(offset++);
stringInfoBuilder.Append(InfoDriverArrowVersion);
booleanInfoBuilder.AppendNull();
break;
case AdbcInfoCode.VendorName:
infoNameBuilder.Append((UInt32)code);
typeBuilder.Append(strValTypeID);
offsetBuilder.Append(offset++);
string vendorName = VendorName;
stringInfoBuilder.Append(vendorName);
booleanInfoBuilder.AppendNull();
break;
case AdbcInfoCode.VendorVersion:
infoNameBuilder.Append((UInt32)code);
typeBuilder.Append(strValTypeID);
offsetBuilder.Append(offset++);
string? vendorVersion = VendorVersion;
stringInfoBuilder.Append(vendorVersion);
booleanInfoBuilder.AppendNull();
break;
case AdbcInfoCode.VendorSql:
infoNameBuilder.Append((UInt32)code);
typeBuilder.Append(boolValTypeId);
offsetBuilder.Append(offset++);
stringInfoBuilder.AppendNull();
booleanInfoBuilder.Append(InfoVendorSql);
break;
default:
infoNameBuilder.Append((UInt32)code);
typeBuilder.Append(strValTypeID);
offsetBuilder.Append(offset++);
stringInfoBuilder.AppendNull();
booleanInfoBuilder.AppendNull();
nullCount++;
break;
}
}
StructType entryType = new StructType(
new Field[] {
new Field("key", Int32Type.Default, false),
new Field("value", Int32Type.Default, true)});
StructArray entriesDataArray = new StructArray(entryType, 0,
new[] { new Int32Array.Builder().Build(), new Int32Array.Builder().Build() },
new ArrowBuffer.BitmapBuilder().Build());
IArrowArray[] childrenArrays = new IArrowArray[]
{
stringInfoBuilder.Build(),
booleanInfoBuilder.Build(),
new Int64Array.Builder().Build(),
new Int32Array.Builder().Build(),
new ListArray.Builder(StringType.Default).Build(),
new List<IArrowArray?>(){ entriesDataArray }.BuildListArrayForType(entryType)
};
DenseUnionArray infoValue = new DenseUnionArray(infoUnionType, arrayLength, childrenArrays, typeBuilder.Build(), offsetBuilder.Build(), nullCount);
IArrowArray[] dataArrays = new IArrowArray[]
{
infoNameBuilder.Build(),
infoValue
};
StandardSchemas.GetInfoSchema.Validate(dataArrays);
return new HiveInfoArrowStream(StandardSchemas.GetInfoSchema, dataArrays);
}