public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result) { if (base.TryInvokeMember(binder, args, out result)) { return(true); } if (_dataStrategy != null) { // Probably a table... var table = new DynamicTable(_name, _dataStrategy); if (table.TryInvokeMember(binder, args, out result)) { _dataStrategy.SetMemberAsTable(this, table); return(true); } // Or it could be a schema reference... var schema = new DynamicSchema(_name, _dataStrategy); if (schema.TryInvokeMember(binder, args, out result)) { _dataStrategy.SetMemberAsSchema(this); return(true); } } var dataStrategy = FindDataStrategyInHierarchy(); if (dataStrategy != null) { var command = CommandFactory.GetCommandFor(binder.Name); if (command != null) { var schema = dataStrategy.SetMemberAsSchema(_owner); var table = schema.GetTable(_name); result = command.Execute(dataStrategy, table, binder, args); } else { if (dataStrategy.IsExpressionFunction(binder.Name, args)) { result = new SimpleExpression(this, new SimpleFunction(binder.Name, args), SimpleExpressionType.Function); } else { result = new FunctionReference(binder.Name, this, args); } } return(true); } throw new InvalidOperationException(); }
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result) { if (_database != null) { var table = _database.SetMemberAsTable(this); return(table.TryInvokeMember(binder, args, out result)); } if ((!ReferenceEquals(_owner, null)) && GetOwner().GetDatabase() != null) { var command = CommandFactory.GetCommandFor(binder.Name); if (command != null) { var schema = _owner._database.SetMemberAsSchema(_owner); var table = schema.GetTable(_name); result = command.Execute(_database ?? _owner._database, table, binder, args); } else { result = new SimpleExpression(this, new SimpleFunction(binder.Name, args), SimpleExpressionType.Function); } return(true); } throw new InvalidOperationException(); }
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result) { if (base.TryInvokeMember(binder, args, out result)) { return(true); } if (_dataStrategy != null) { var table = new DynamicTable(_name, _dataStrategy); try { if (table.TryInvokeMember(binder, args, out result)) { _dataStrategy.SetMemberAsTable(this, table); return(true); } } catch (InvalidOperationException ex) { if (!ex.Message.StartsWith("Method")) { throw; } } // Or it could be a schema reference... var schema = new DynamicSchema(_name, _dataStrategy); try { if (schema.TryInvokeMember(binder, args, out result)) { _dataStrategy.SetMemberAsSchema(this); return(true); } } catch (KeyNotFoundException) { throw new InvalidOperationException(string.Format("Method {0} not recognised", binder.Name)); } } var dataStrategy = FindDataStrategyInHierarchy(); if (dataStrategy != null) { var command = CommandFactory.GetCommandFor(binder.Name); if (command != null) { if (!ReferenceEquals(_owner, null)) { var schema = dataStrategy.SetMemberAsSchema(_owner); var table = schema.GetTable(_name); table.TryInvokeMember(binder, args, out result); } else { throw new InvalidOperationException(string.Format("Method {0} not recognised", binder.Name)); } //result = command.Execute(dataStrategy, table, binder, args); } else { if (dataStrategy.IsExpressionFunction(binder.Name, args)) { result = new SimpleExpression(this, new SimpleFunction(binder.Name, args), SimpleExpressionType.Function); } else { result = new FunctionReference(binder.Name, this, args); } } return(true); } throw new InvalidOperationException(string.Format("Method {0} not recognised", binder.Name)); }