internal MetadataMember ResolveSimpleFunctionName(string name, ErrorContext errCtx) { // // "Foo()" represents a simple function name. Resolve it as an unqualified name by calling the type resolver directly. // Note that calling type resolver directly will avoid resolution of the identifier as a local variable or entity container // (these resolutions are performed only by ResolveSimpleName(...)). // var resolution = TypeResolver.ResolveUnqualifiedName(name, false /* partOfQualifiedName */, errCtx); if (resolution.MetadataMemberClass == MetadataMemberClass.Namespace) { // // Try resolving as a function import inside the default entity container. // var defaultEntityContainer = TypeResolver.Perspective.GetDefaultContainer(); ExpressionResolution defaultEntityContainerResolution; if (defaultEntityContainer != null && TryResolveEntityContainerMemberAccess(defaultEntityContainer, name, out defaultEntityContainerResolution) && defaultEntityContainerResolution.ExpressionClass == ExpressionResolutionClass.MetadataMember) { resolution = (MetadataMember)defaultEntityContainerResolution; } } return(resolution); }
internal ExpressionResolution ResolveSimpleName(string name, bool leftHandSideOfMemberAccess, ErrorContext errCtx) { DebugCheck.NotEmpty(name); // // Try resolving as a scope entry. // ScopeEntry scopeEntry; int scopeIndex; if (TryScopeLookup(name, out scopeEntry, out scopeIndex)) { // // Check for invalid join left expression correlation. // if (scopeEntry.EntryKind == ScopeEntryKind.SourceVar && ((SourceScopeEntry)scopeEntry).IsJoinClauseLeftExpr) { var message = Strings.InvalidJoinLeftCorrelation; throw EntitySqlException.Create(errCtx, message, null); } // // Set correlation flag. // SetScopeRegionCorrelationFlag(scopeIndex); return(new ValueExpression(GetExpressionFromScopeEntry(scopeEntry, scopeIndex, name, errCtx))); } // // Try resolving as a member of the default entity container. // var defaultEntityContainer = TypeResolver.Perspective.GetDefaultContainer(); ExpressionResolution defaultEntityContainerResolution; if (defaultEntityContainer != null && TryResolveEntityContainerMemberAccess(defaultEntityContainer, name, out defaultEntityContainerResolution)) { return(defaultEntityContainerResolution); } if (!_ignoreEntityContainerNameResolution) { // // Try resolving as an entity container. // EntityContainer entityContainer; if (TypeResolver.Perspective.TryGetEntityContainer( name, _parserOptions.NameComparisonCaseInsensitive /*ignoreCase*/, out entityContainer)) { return(new EntityContainerExpression(entityContainer)); } } // // Otherwise, resolve as an unqualified name. // return(TypeResolver.ResolveUnqualifiedName(name, leftHandSideOfMemberAccess /* partOfQualifiedName */, errCtx)); }