in language-extensions/dotnet-core-CSharp/src/managed/CSharpOutputDataSet.cs [118:182]
private unsafe void ExtractColumn(
ushort columnNumber,
DataFrameColumn column
)
{
Logging.Trace("CSharpOutputDataSet::ExtractColumn");
int[] colMap = GetStrLenNullMap(column);
fixed(int* len = colMap)
{
_strLenOrNullMapPtrs[columnNumber] = len;
}
switch(DataTypeMap[column.DataType])
{
case SqlDataType.DotNetInteger:
SetDataPtrs<int>(columnNumber, GetArray<int>(column));
break;
case SqlDataType.DotNetUInteger:
SetDataPtrs<uint>(columnNumber, GetArray<uint>(column));
break;
case SqlDataType.DotNetBigInt:
SetDataPtrs<long>(columnNumber, GetArray<long>(column));
break;
case SqlDataType.DotNetUBigInt:
SetDataPtrs<ulong>(columnNumber, GetArray<ulong>(column));
break;
case SqlDataType.DotNetSmallInt:
SetDataPtrs<short>(columnNumber, GetArray<short>(column));
break;
case SqlDataType.DotNetUSmallInt:
SetDataPtrs<ushort>(columnNumber, GetArray<ushort>(column));
break;
case SqlDataType.DotNetTinyInt:
SetDataPtrs<sbyte>(columnNumber, GetArray<sbyte>(column));
break;
case SqlDataType.DotNetUTinyInt:
SetDataPtrs<byte>(columnNumber, GetArray<byte>(column));
break;
case SqlDataType.DotNetBit:
SetDataPtrs<bool>(columnNumber, GetArray<bool>(column));
break;
case SqlDataType.DotNetReal:
SetDataPtrs<float>(columnNumber, GetArray<float>(column));
break;
case SqlDataType.DotNetFloat:
SetDataPtrs<double>(columnNumber, GetArray<double>(column));
break;
case SqlDataType.DotNetDouble:
SetDataPtrs<double>(columnNumber, GetArray<double>(column));
break;
case SqlDataType.DotNetChar:
// Modify the size of the string column to be the max size of bytes.
//
int maxStrLen = colMap.Max();
if(maxStrLen > 0)
{
_columns[columnNumber].Size = (ulong)maxStrLen;
}
SetDataPtrs<byte>(columnNumber, GetStringArray(column));
break;
default:
throw new NotImplementedException("Parameter type for " + DataTypeMap[column.DataType].ToString() + " has not been implemented yet");
}
}