Skip to content

Commit 7bf50d8

Browse files
committed
1 parent 3ea81b8 commit 7bf50d8

4 files changed

Lines changed: 29 additions & 10 deletions

File tree

Simple.Data.InMemoryTest/InMemoryTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -750,7 +750,7 @@ public void UpsertShouldUpdateExistingRecord()
750750
}
751751

752752
[Test]
753-
public void UpsertWithoutDefinedKeyColumnsSHouldThrowMeaningfulException()
753+
public void UpsertWithoutDefinedKeyColumnsShouldThrowMeaningfulException()
754754
{
755755
var adapter = new InMemoryAdapter();
756756
Database.UseMockAdapter(adapter);

Simple.Data/DataStrategy.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ internal DynamicTable SetMemberAsTable(ObjectReference reference, DynamicTable t
101101

102102
internal DynamicSchema SetMemberAsSchema(ObjectReference reference)
103103
{
104-
if (reference == null) throw new ArgumentNullException("reference");
104+
if (ReferenceEquals(reference, null)) throw new ArgumentNullException("reference");
105105
_members.TryUpdate(reference.GetName(), new DynamicSchema(reference.GetName(), this), reference);
106106
return (DynamicSchema) _members[reference.GetName()];
107107
}

Simple.Data/DynamicTable.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,9 @@ public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, o
100100
return true;
101101
}
102102

103-
return base.TryInvokeMember(binder, args, out result);
103+
if (base.TryInvokeMember(binder, args, out result)) return true;
104+
105+
throw new InvalidOperationException(string.Format("Method {0} not recognised", binder.Name));
104106
}
105107

106108
private Func<object[],object> CreateMemberDelegate(string signature, InvokeMemberBinder binder, object[] args)

Simple.Data/ObjectReference.cs

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,20 @@ public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, o
119119
if (_dataStrategy != null)
120120
{
121121
var table = new DynamicTable(_name, _dataStrategy);
122-
if (table.TryInvokeMember(binder, args, out result))
122+
try
123123
{
124-
_dataStrategy.SetMemberAsTable(this, table);
125-
return true;
124+
if (table.TryInvokeMember(binder, args, out result))
125+
{
126+
_dataStrategy.SetMemberAsTable(this, table);
127+
return true;
128+
}
129+
}
130+
catch (InvalidOperationException ex)
131+
{
132+
if (!ex.Message.StartsWith("Method"))
133+
{
134+
throw;
135+
}
126136
}
127137

128138
// Or it could be a schema reference...
@@ -140,9 +150,16 @@ public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, o
140150
var command = CommandFactory.GetCommandFor(binder.Name);
141151
if (command != null)
142152
{
143-
var schema = dataStrategy.SetMemberAsSchema(_owner);
144-
var table = schema.GetTable(_name);
145-
table.TryInvokeMember(binder, args, out result);
153+
if (!ReferenceEquals(_owner, null))
154+
{
155+
var schema = dataStrategy.SetMemberAsSchema(_owner);
156+
var table = schema.GetTable(_name);
157+
table.TryInvokeMember(binder, args, out result);
158+
}
159+
else
160+
{
161+
throw new InvalidOperationException(string.Format("Method {0} not recognised", binder.Name));
162+
}
146163
//result = command.Execute(dataStrategy, table, binder, args);
147164
}
148165
else
@@ -158,7 +175,7 @@ public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, o
158175
}
159176
return true;
160177
}
161-
throw new InvalidOperationException();
178+
throw new InvalidOperationException(string.Format("Method {0} not recognised", binder.Name));
162179
}
163180

164181
/// <summary>

0 commit comments

Comments
 (0)