public SchemaObject GetSchema(string schemaObjectReferenceName) { // search the stack from the top and take first value that satisfies unique key var aliasedDatabaseObjectReferences = StatementReferences .SelectMany(x => x) .Where(x => x.HasAlias()) .Distinct(new KeyEqualityComparer <SchemaObjectReference, string>(x => x.Alias)) .ToDictionary(k => k.Alias, v => v.Value, StringComparer.InvariantCultureIgnoreCase); var directDatabaseObjectReferences = StatementReferences .SelectMany(x => x) .Where(x => !x.HasAlias()) .Distinct(new KeyEqualityComparer <SchemaObjectReference, string>(x => $"{x.Alias}.{x.Identifier}")) .ToDictionary(k => k.Identifier.Split('.').Last(), v => v.Value, StringComparer.InvariantCultureIgnoreCase); SchemaObject databaseObject = null; if (aliasedDatabaseObjectReferences.ContainsKey(schemaObjectReferenceName)) { databaseObject = aliasedDatabaseObjectReferences[schemaObjectReferenceName]; } else if (directDatabaseObjectReferences.ContainsKey(schemaObjectReferenceName)) { databaseObject = directDatabaseObjectReferences[schemaObjectReferenceName]; } return(databaseObject); }
public static string GetQualifiedIdentfier(this SchemaObject databaseObject) { var qualifiers = new List <string>() { databaseObject.Database, databaseObject.Schema, databaseObject.Identifier }; return(GetQualifiedIdentfier(qualifiers)); }