Skip to content

Commit f21c993

Browse files
committed
Optimized Dictionaries returned from ADO
1 parent ca74c4e commit f21c993

File tree

8 files changed

+48
-23
lines changed

8 files changed

+48
-23
lines changed

Simple.Data.Ado/DataReaderExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ private static IEnumerable<IEnumerable<IDictionary<string,object>>> ToMultipleDi
3434

3535
private static IEnumerable<IDictionary<string,object>> ToDictionariesImpl(IDataReader reader)
3636
{
37-
var index = OptimizedDictionary.CreateIndex(reader.GetFieldNames().Select(n => n.Homogenize()));
37+
var index = HomogenizedDictionaryIndex.CreateIndex(reader.GetFieldNames());
3838
var values = new object[reader.FieldCount];
3939
while (reader.Read())
4040
{

Simple.Data.Mocking/Ado/MockDataReader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ public override bool HasRows
357357
/// <param name="ordinal">The zero-based column ordinal.</param><filterpriority>1</filterpriority>
358358
public override string GetName(int ordinal)
359359
{
360-
throw new NotImplementedException();
360+
return ordinal.ToString();
361361
}
362362

363363
/// <summary>

Simple.Data/AdapterWithFunctionsExtensions.cs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,21 @@
66

77
namespace Simple.Data
88
{
9-
internal static class AdapterWithFunctionsExtensions
10-
{
11-
public static bool IsValidFunction(this Adapter adapter, string functionName)
12-
{
13-
var adapterWithFunctions = adapter as IAdapterWithFunctions;
14-
if (adapterWithFunctions == null) return false;
15-
return adapterWithFunctions.IsValidFunction(functionName);
16-
}
9+
//internal static class AdapterWithFunctionsExtensions
10+
//{
11+
// public static bool IsValidFunction(this Adapter adapter, string functionName)
12+
// {
13+
// var adapterWithFunctions = adapter as IAdapterWithFunctions;
14+
// if (adapterWithFunctions == null) return false;
15+
// return adapterWithFunctions.IsValidFunction(functionName);
16+
// }
1717

18-
public static bool Execute(this Adapter adapter, string functionName, IDictionary<string,object> parameters, out object result)
19-
{
20-
var adapterWithFunctions = adapter as IAdapterWithFunctions;
21-
if (adapterWithFunctions == null) throw new NotSupportedException("Adapter does not support Function calls.");
22-
var command = new ExecuteFunctionCommand(adapterWithFunctions, functionName, parameters);
23-
return command.Execute(out result);
24-
}
25-
}
18+
// public static bool Execute(this Adapter adapter, string functionName, IDictionary<string,object> parameters, out object result)
19+
// {
20+
// var adapterWithFunctions = adapter as IAdapterWithFunctions;
21+
// if (adapterWithFunctions == null) throw new NotSupportedException("Adapter does not support Function calls.");
22+
// var command = new ExecuteFunctionCommand(adapterWithFunctions, functionName, parameters);
23+
// return command.Execute(out result);
24+
// }
25+
//}
2626
}

Simple.Data/Commands/ExecuteFunctionCommand.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,14 @@ namespace Simple.Data.Commands
99
{
1010
class ExecuteFunctionCommand
1111
{
12+
private readonly Database _database;
1213
private readonly IAdapterWithFunctions _adapter;
1314
private readonly string _functionName;
1415
private readonly IDictionary<string, object> _arguments;
1516

16-
public ExecuteFunctionCommand(IAdapterWithFunctions adapter, string functionName, IDictionary<string,object> arguments)
17+
public ExecuteFunctionCommand(Database database, IAdapterWithFunctions adapter, string functionName, IDictionary<string,object> arguments)
1718
{
19+
_database = database;
1820
_adapter = adapter;
1921
_functionName = functionName;
2022
_arguments = arguments;

Simple.Data/DataStrategy.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, o
4343
var adapterWithFunctions = Adapter as IAdapterWithFunctions;
4444
if (adapterWithFunctions != null && adapterWithFunctions.IsValidFunction(binder.Name))
4545
{
46-
var command = new ExecuteFunctionCommand(adapterWithFunctions, binder.Name,
46+
var command = new ExecuteFunctionCommand(GetDatabase(), adapterWithFunctions, binder.Name,
4747
binder.ArgumentsToDictionary(args));
4848
return command.Execute(out result);
4949
}
@@ -69,6 +69,8 @@ internal DynamicSchema SetMemberAsSchema(DynamicReference reference)
6969
return (DynamicSchema)_members[reference.GetName()];
7070
}
7171

72+
protected abstract Database GetDatabase();
73+
7274
/// <summary>
7375
/// Finds data from the specified "table".
7476
/// </summary>

Simple.Data/Database.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,5 +96,10 @@ public SimpleTransaction BeginTransaction(string name)
9696
{
9797
return SimpleTransaction.Begin(this, name);
9898
}
99+
100+
protected override Database GetDatabase()
101+
{
102+
return this;
103+
}
99104
}
100105
}

Simple.Data/SimpleRecord.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ public partial class SimpleRecord : DynamicObject
1717

1818
public SimpleRecord()
1919
{
20-
_data = new Dictionary<string, object>();
20+
_data = new HomogenizedKeyDictionary();
2121
}
2222

2323
public SimpleRecord(Database database)
2424
{
25-
_data = new Dictionary<string,object>();
25+
_data = new HomogenizedKeyDictionary();
2626
_database = database;
2727
}
2828

@@ -40,7 +40,13 @@ internal SimpleRecord(IDictionary<string, object> data, string tableName, DataSt
4040
{
4141
_tableName = tableName;
4242
_database = dataStrategy;
43-
_data = data;
43+
_data = HomogenizeDataDictionary(data);
44+
}
45+
46+
private static IDictionary<string,object> HomogenizeDataDictionary(IDictionary<string,object> data)
47+
{
48+
if (data is HomogenizedKeyDictionary || data is OptimizedDictionary<string, object>) return data;
49+
return new HomogenizedKeyDictionary(data);
4450
}
4551

4652
public override bool TryGetMember(GetMemberBinder binder, out object result)
@@ -50,6 +56,11 @@ public override bool TryGetMember(GetMemberBinder binder, out object result)
5056
result = _data[binder.Name];
5157
return true;
5258
}
59+
if (_tableName == null)
60+
{
61+
result = null;
62+
return false;
63+
}
5364
var relatedAdapter = _database.Adapter as IAdapterWithRelation;
5465
if (relatedAdapter != null && relatedAdapter.IsValidRelation(_tableName, binder.Name))
5566
{

Simple.Data/SimpleTransaction.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,5 +131,10 @@ protected override Adapter GetAdapter()
131131
{
132132
return _adapter as Adapter;
133133
}
134+
135+
protected override Database GetDatabase()
136+
{
137+
return _database;
138+
}
134139
}
135140
}

0 commit comments

Comments
 (0)