Skip to content
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions build/Dependencies.props
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,11 @@
<PropertyGroup>
<BenchmarkDotNetVersion>0.11.3</BenchmarkDotNetVersion>
<MicrosoftCodeAnalysisTestingVersion>1.0.0-beta1-63812-02</MicrosoftCodeAnalysisTestingVersion>
<MicrosoftMLTestDatabasesPackageVersion>0.0.5-test</MicrosoftMLTestDatabasesPackageVersion>
<MicrosoftMLTestModelsPackageVersion>0.0.5-test</MicrosoftMLTestModelsPackageVersion>
<MicrosoftMLTensorFlowTestModelsVersion>0.0.11-test</MicrosoftMLTensorFlowTestModelsVersion>
<MicrosoftMLOnnxTestModelsVersion>0.0.5-test</MicrosoftMLOnnxTestModelsVersion>
<SystemDataSqlClientVersion>4.6.1</SystemDataSqlClientVersion>
</PropertyGroup>

</Project>
267 changes: 202 additions & 65 deletions src/Microsoft.ML.Experimental/DataLoadSave/Database/DatabaseLoader.cs

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,58 @@ private Delegate CreateGetterDelegate<TValue>(int col)
{
getterDelegate = CreateUInt64GetterDelegate(colInfo);
}
else if (typeof(TValue) == typeof(VBuffer<bool>))
{
getterDelegate = CreateVBufferBooleanGetterDelegate(colInfo);
}
else if (typeof(TValue) == typeof(VBuffer<byte>))
{
getterDelegate = CreateVBufferByteGetterDelegate(colInfo);
}
else if (typeof(TValue) == typeof(VBuffer<DateTime>))
{
getterDelegate = CreateVBufferDateTimeGetterDelegate(colInfo);
}
else if (typeof(TValue) == typeof(VBuffer<double>))
{
getterDelegate = CreateVBufferDoubleGetterDelegate(colInfo);
}
else if (typeof(TValue) == typeof(VBuffer<short>))
{
getterDelegate = CreateVBufferInt16GetterDelegate(colInfo);
}
else if (typeof(TValue) == typeof(VBuffer<int>))
{
getterDelegate = CreateVBufferInt32GetterDelegate(colInfo);
}
else if (typeof(TValue) == typeof(VBuffer<long>))
{
getterDelegate = CreateVBufferInt64GetterDelegate(colInfo);
}
else if (typeof(TValue) == typeof(VBuffer<sbyte>))
{
getterDelegate = CreateVBufferSByteGetterDelegate(colInfo);
}
else if (typeof(TValue) == typeof(VBuffer<float>))
{
getterDelegate = CreateVBufferSingleGetterDelegate(colInfo);
}
else if (typeof(TValue) == typeof(VBuffer<ReadOnlyMemory<char>>))
{
getterDelegate = CreateVBufferStringGetterDelegate(colInfo);
}
else if (typeof(TValue) == typeof(VBuffer<ushort>))
{
getterDelegate = CreateVBufferUInt16GetterDelegate(colInfo);
}
else if (typeof(TValue) == typeof(VBuffer<uint>))
{
getterDelegate = CreateVBufferUInt32GetterDelegate(colInfo);
}
else if (typeof(TValue) == typeof(VBuffer<ulong>))
{
getterDelegate = CreateVBufferUInt64GetterDelegate(colInfo);
}
else
{
throw new NotSupportedException();
Expand Down Expand Up @@ -311,9 +363,307 @@ private ValueGetter<ulong> CreateUInt64GetterDelegate(ColInfo colInfo)
return (ref ulong value) => value = DataReader.IsDBNull(columnIndex) ? default : (ulong)DataReader.GetInt64(columnIndex);
}

private ValueGetter<VBuffer<bool>> CreateVBufferBooleanGetterDelegate(ColInfo colInfo)
{
return (ref VBuffer<bool> value) =>
{
int length = colInfo.SizeBase;
var editor = VBufferEditor.Create(ref value, length);

int i = 0;
var segs = colInfo.Segments;

foreach (var seg in segs)
{
for (int columnIndex = seg.Min; columnIndex < seg.Lim; columnIndex++, i++)
{
editor.Values[i] = DataReader.IsDBNull(columnIndex) ? default : DataReader.GetBoolean(columnIndex);
}
}

value = editor.Commit();
};
}

private ValueGetter<VBuffer<byte>> CreateVBufferByteGetterDelegate(ColInfo colInfo)
{
return (ref VBuffer<byte> value) =>
{
int length = colInfo.SizeBase;
var editor = VBufferEditor.Create(ref value, length);

int i = 0;
var segs = colInfo.Segments;

foreach (var seg in segs)
{
for (int columnIndex = seg.Min; columnIndex < seg.Lim; columnIndex++, i++)
{
editor.Values[i] = DataReader.IsDBNull(columnIndex) ? default : DataReader.GetByte(columnIndex);
}
}

value = editor.Commit();
};
}

private ValueGetter<VBuffer<DateTime>> CreateVBufferDateTimeGetterDelegate(ColInfo colInfo)
{
return (ref VBuffer<DateTime> value) =>
{
int length = colInfo.SizeBase;
var editor = VBufferEditor.Create(ref value, length);

int i = 0;
var segs = colInfo.Segments;

foreach (var seg in segs)
{
for (int columnIndex = seg.Min; columnIndex < seg.Lim; columnIndex++, i++)
{
editor.Values[i] = DataReader.IsDBNull(columnIndex) ? default : DataReader.GetDateTime(columnIndex);
}
}

value = editor.Commit();
};
}

private ValueGetter<VBuffer<double>> CreateVBufferDoubleGetterDelegate(ColInfo colInfo)
{
return (ref VBuffer<double> value) =>
{
int length = colInfo.SizeBase;
var editor = VBufferEditor.Create(ref value, length);

int i = 0;
var segs = colInfo.Segments;

foreach (var seg in segs)
{
for (int columnIndex = seg.Min; columnIndex < seg.Lim; columnIndex++, i++)
{
editor.Values[i] = DataReader.IsDBNull(columnIndex) ? double.NaN : DataReader.GetDouble(columnIndex);
}
}

value = editor.Commit();
};
}

private ValueGetter<VBuffer<short>> CreateVBufferInt16GetterDelegate(ColInfo colInfo)
{
return (ref VBuffer<short> value) =>
{
int length = colInfo.SizeBase;
var editor = VBufferEditor.Create(ref value, length);

int i = 0;
var segs = colInfo.Segments;

foreach (var seg in segs)
{
for (int columnIndex = seg.Min; columnIndex < seg.Lim; columnIndex++, i++)
{
editor.Values[i] = DataReader.IsDBNull(columnIndex) ? default : DataReader.GetInt16(columnIndex);
}
}

value = editor.Commit();
};
}

private ValueGetter<VBuffer<int>> CreateVBufferInt32GetterDelegate(ColInfo colInfo)
{
return (ref VBuffer<int> value) =>
{
int length = colInfo.SizeBase;
var editor = VBufferEditor.Create(ref value, length);

int i = 0;
var segs = colInfo.Segments;

foreach (var seg in segs)
{
for (int columnIndex = seg.Min; columnIndex < seg.Lim; columnIndex++, i++)
{
editor.Values[i] = DataReader.IsDBNull(columnIndex) ? default : DataReader.GetInt32(columnIndex);
}
}

value = editor.Commit();
};
}

private ValueGetter<VBuffer<long>> CreateVBufferInt64GetterDelegate(ColInfo colInfo)
{
return (ref VBuffer<long> value) =>
{
int length = colInfo.SizeBase;
var editor = VBufferEditor.Create(ref value, length);

int i = 0;
var segs = colInfo.Segments;

foreach (var seg in segs)
{
for (int columnIndex = seg.Min; columnIndex < seg.Lim; columnIndex++, i++)
{
editor.Values[i] = DataReader.IsDBNull(columnIndex) ? default : DataReader.GetInt64(columnIndex);
}
}

value = editor.Commit();
};
}

private ValueGetter<VBuffer<sbyte>> CreateVBufferSByteGetterDelegate(ColInfo colInfo)
{
return (ref VBuffer<sbyte> value) =>
{
int length = colInfo.SizeBase;
var editor = VBufferEditor.Create(ref value, length);

int i = 0;
var segs = colInfo.Segments;

foreach (var seg in segs)
{
for (int columnIndex = seg.Min; columnIndex < seg.Lim; columnIndex++, i++)
{
editor.Values[i] = DataReader.IsDBNull(columnIndex) ? default : (sbyte)DataReader.GetByte(columnIndex);
}
}

value = editor.Commit();
};
}

private ValueGetter<VBuffer<float>> CreateVBufferSingleGetterDelegate(ColInfo colInfo)
{
return (ref VBuffer<float> value) =>
{
int length = colInfo.SizeBase;
var editor = VBufferEditor.Create(ref value, length);

int i = 0;
var segs = colInfo.Segments;

foreach (var seg in segs)
{
for (int columnIndex = seg.Min; columnIndex < seg.Lim; columnIndex++, i++)
{
editor.Values[i] = DataReader.IsDBNull(columnIndex) ? float.NaN : DataReader.GetFloat(columnIndex);
}
}

value = editor.Commit();
};
}

private ValueGetter<VBuffer<ReadOnlyMemory<char>>> CreateVBufferStringGetterDelegate(ColInfo colInfo)
{
return (ref VBuffer<ReadOnlyMemory<char>> value) =>
{
int length = colInfo.SizeBase;
var editor = VBufferEditor.Create(ref value, length);

int i = 0;
var segs = colInfo.Segments;

foreach (var seg in segs)
{
for (int columnIndex = seg.Min; columnIndex < seg.Lim; columnIndex++, i++)
{
editor.Values[i] = DataReader.IsDBNull(columnIndex) ? default : DataReader.GetString(columnIndex).AsMemory();
}
}

value = editor.Commit();
};
}

private ValueGetter<VBuffer<ushort>> CreateVBufferUInt16GetterDelegate(ColInfo colInfo)
{
return (ref VBuffer<ushort> value) =>
{
int length = colInfo.SizeBase;
var editor = VBufferEditor.Create(ref value, length);

int i = 0;
var segs = colInfo.Segments;

foreach (var seg in segs)
{
for (int columnIndex = seg.Min; columnIndex < seg.Lim; columnIndex++, i++)
{
editor.Values[i] = DataReader.IsDBNull(columnIndex) ? default : (ushort)DataReader.GetInt16(columnIndex);
}
}

value = editor.Commit();
};
}

private ValueGetter<VBuffer<uint>> CreateVBufferUInt32GetterDelegate(ColInfo colInfo)
{
return (ref VBuffer<uint> value) =>
{
int length = colInfo.SizeBase;
var editor = VBufferEditor.Create(ref value, length);

int i = 0;
var segs = colInfo.Segments;

foreach (var seg in segs)
{
for (int columnIndex = seg.Min; columnIndex < seg.Lim; columnIndex++, i++)
{
editor.Values[i] = DataReader.IsDBNull(columnIndex) ? default : (uint)DataReader.GetInt32(columnIndex);
}
}

value = editor.Commit();
};
}

private ValueGetter<VBuffer<ulong>> CreateVBufferUInt64GetterDelegate(ColInfo colInfo)
{
return (ref VBuffer<ulong> value) =>
{
int length = colInfo.SizeBase;
var editor = VBufferEditor.Create(ref value, length);

int i = 0;
var segs = colInfo.Segments;

foreach (var seg in segs)
{
for (int columnIndex = seg.Min; columnIndex < seg.Lim; columnIndex++, i++)
{
editor.Values[i] = DataReader.IsDBNull(columnIndex) ? default : (ulong)DataReader.GetInt64(columnIndex);
}
}

value = editor.Commit();
};
}

private int GetColumnIndex(ColInfo colInfo)
{
return colInfo.SourceIndex ?? DataReader.GetOrdinal(colInfo.Name);
var segs = colInfo.Segments;

if (segs is null)
{
return DataReader.GetOrdinal(colInfo.Name);
}

Contracts.Check(segs.Length == 1);

var seg = segs[0];
Contracts.Check(seg.Min == seg.Lim);

return seg.Min;
}
}
}
Expand Down
Loading