public static bool TryCreate(string name, SimpleReference argument, out object functionReference) { if (!KnownFunctionNames.Contains(name.ToLowerInvariant())) { functionReference = null; return false; } functionReference = new FunctionReference(name, argument); return true; }
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(); }
private string TryFormatAsFunctionReference(FunctionReference functionReference) { if (ReferenceEquals(functionReference, null)) return null; var odataName = _functionNameConverter.ConvertToODataName(functionReference.Name); var columnArgument = FormatColumnClause(functionReference.Argument); if (functionReference.AdditionalArguments.Any()) { var additionalArguments = FormatAdditionalArguments(functionReference.AdditionalArguments); if (odataName == "substringof") return string.Format("{0}({1},{2})", odataName, additionalArguments, columnArgument); else return string.Format("{0}({1},{2})", odataName, columnArgument, additionalArguments); } else { return string.Format("{0}({1})", odataName, columnArgument); } }
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)); }