{"action":"created","comment":{"url":"https://api.github.com/repos/dotnet/corefx/pulls/comments/60327897","id":60327897,"diff_hunk":"@@ -12,142 +12,38 @@\n \n namespace System.Data.ProviderBase\n {\n-    internal sealed class FieldNameLookup\n+    internal sealed class FieldNameLookup : BasicFieldNameLookup\n     {\n-        // Dictionary stores the index into the _fieldNames, match via case-sensitive\n-        private Dictionary<string, int> _fieldNameLookup;\n-\n-        // original names for linear searches when exact matches fail\n-        private string[] _fieldNames;\n-\n-        // if _defaultLocaleID is -1 then _compareInfo is initialized with InvariantCulture CompareInfo\n-        // otherwise it is specified by the server for the correct compare info\n-        private CompareInfo _compareInfo;\n         private int _defaultLocaleID;\n \n-        public FieldNameLookup(string[] fieldNames, int defaultLocaleID)\n+        public FieldNameLookup(string[] fieldNames, int defaultLocaleID) : base(fieldNames)\n         {\n-            if (null == fieldNames)\n-            {\n-                throw ADP.ArgumentNull(nameof(fieldNames));\n-            }\n-            _fieldNames = fieldNames;\n             _defaultLocaleID = defaultLocaleID;\n         }\n \n-        public FieldNameLookup(System.Collections.ObjectModel.ReadOnlyCollection<string> columnNames, int defaultLocaleID)\n+        public FieldNameLookup(System.Collections.ObjectModel.ReadOnlyCollection<string> columnNames, int defaultLocaleID) : base(columnNames)\n         {\n-            int length = columnNames.Count;\n-            string[] fieldNames = new string[length];\n-            for (int i = 0; i < length; ++i)\n-            {\n-                fieldNames[i] = columnNames[i];\n-            }\n-            _fieldNames = fieldNames;\n             _defaultLocaleID = defaultLocaleID;\n-            GenerateLookup();\n         }\n \n-        public FieldNameLookup(DbDataReader reader, int defaultLocaleID)\n+        public FieldNameLookup(DbDataReader reader, int defaultLocaleID) : base(reader)\n         {\n-            int length = reader.FieldCount;\n-            string[] fieldNames = new string[length];\n-            for (int i = 0; i < length; ++i)\n-            {\n-                fieldNames[i] = reader.GetName(i);\n-            }\n-            _fieldNames = fieldNames;\n             _defaultLocaleID = defaultLocaleID;\n         }\n \n-        public int GetOrdinal(string fieldName)\n-        {\n-            if (null == fieldName)\n-            {\n-                throw ADP.ArgumentNull(nameof(fieldName));\n-            }\n-            int index = IndexOf(fieldName);\n-            if (-1 == index)\n-            {\n-                throw ADP.IndexOutOfRange(fieldName);\n-            }\n-            return index;\n-        }\n-\n-        public int IndexOfName(string fieldName)\n+        //The compare info is specified by the server by specifying the default LocaleId.\n+        new CompareInfo GetCompareInfo()","path":"src/Common/src/System/Data/Common/FieldNameLookup.cs","position":72,"original_position":72,"commit_id":"37b0e41df85829dda8eb69acce4f605da6fb9661","original_commit_id":"37b0e41df85829dda8eb69acce4f605da6fb9661","user":{"login":"justinvp","id":710598,"avatar_url":"https://avatars.githubusercontent.com/u/710598?v=3","gravatar_id":"","url":"https://api.github.com/users/justinvp","html_url":"https://github.com/justinvp","followers_url":"https://api.github.com/users/justinvp/followers","following_url":"https://api.github.com/users/justinvp/following{/other_user}","gists_url":"https://api.github.com/users/justinvp/gists{/gist_id}","starred_url":"https://api.github.com/users/justinvp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/justinvp/subscriptions","organizations_url":"https://api.github.com/users/justinvp/orgs","repos_url":"https://api.github.com/users/justinvp/repos","events_url":"https://api.github.com/users/justinvp/events{/privacy}","received_events_url":"https://api.github.com/users/justinvp/received_events","type":"User","site_admin":false},"body":"I'm not sure this is going to behave the way you want it to...\r\n\r\nI think in the base class, you want to make the method `virtual`, e.g.:\r\n\r\n```csharp\r\nprotected virtual CompareInfo GetCompareInfo() => CultureInfo.InvariantCulture.CompareInfo;\r\n```\r\n\r\nThen here in the subclass, override the virtual method:\r\n\r\n```csharp\r\nprotected override CompareInfo GetCompareInfo()\r\n{\r\n    ...\r\n}\r\n```","created_at":"2016-04-19T23:09:39Z","updated_at":"2016-04-19T23:09:39Z","html_url":"https://github.com/dotnet/corefx/pull/7891#discussion_r60327897","pull_request_url":"https://api.github.com/repos/dotnet/corefx/pulls/7891","_links":{"self":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/comments/60327897"},"html":{"href":"https://github.com/dotnet/corefx/pull/7891#discussion_r60327897"},"pull_request":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/7891"}}},"pull_request":{"url":"https://api.github.com/repos/dotnet/corefx/pulls/7891","id":67100544,"html_url":"https://github.com/dotnet/corefx/pull/7891","diff_url":"https://github.com/dotnet/corefx/pull/7891.diff","patch_url":"https://github.com/dotnet/corefx/pull/7891.patch","issue_url":"https://api.github.com/repos/dotnet/corefx/issues/7891","number":7891,"state":"open","locked":false,"title":"Move DbEnumerator to System.Data.Common","user":{"login":"saurabh500","id":1623701,"avatar_url":"https://avatars.githubusercontent.com/u/1623701?v=3","gravatar_id":"","url":"https://api.github.com/users/saurabh500","html_url":"https://github.com/saurabh500","followers_url":"https://api.github.com/users/saurabh500/followers","following_url":"https://api.github.com/users/saurabh500/following{/other_user}","gists_url":"https://api.github.com/users/saurabh500/gists{/gist_id}","starred_url":"https://api.github.com/users/saurabh500/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/saurabh500/subscriptions","organizations_url":"https://api.github.com/users/saurabh500/orgs","repos_url":"https://api.github.com/users/saurabh500/repos","events_url":"https://api.github.com/users/saurabh500/events{/privacy}","received_events_url":"https://api.github.com/users/saurabh500/received_events","type":"User","site_admin":false},"body":"The commit contains the following changes.\r\n\r\n1.  DbEnumerator and the other related classes have been moved to System.Data.Common\r\n2. Refactored FieldNameLookup to extract a base class which doesn't need to do a Locale based comparison to avoid making System.Data.Common dependent on Locale functionality.","created_at":"2016-04-19T22:26:25Z","updated_at":"2016-04-19T23:09:40Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ce76e143b7bab72734fbd629db43282ea3c98590","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/dotnet/corefx/pulls/7891/commits","review_comments_url":"https://api.github.com/repos/dotnet/corefx/pulls/7891/comments","review_comment_url":"https://api.github.com/repos/dotnet/corefx/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dotnet/corefx/issues/7891/comments","statuses_url":"https://api.github.com/repos/dotnet/corefx/statuses/37b0e41df85829dda8eb69acce4f605da6fb9661","head":{"label":"saurabh500:issue4646","ref":"issue4646","sha":"37b0e41df85829dda8eb69acce4f605da6fb9661","user":{"login":"saurabh500","id":1623701,"avatar_url":"https://avatars.githubusercontent.com/u/1623701?v=3","gravatar_id":"","url":"https://api.github.com/users/saurabh500","html_url":"https://github.com/saurabh500","followers_url":"https://api.github.com/users/saurabh500/followers","following_url":"https://api.github.com/users/saurabh500/following{/other_user}","gists_url":"https://api.github.com/users/saurabh500/gists{/gist_id}","starred_url":"https://api.github.com/users/saurabh500/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/saurabh500/subscriptions","organizations_url":"https://api.github.com/users/saurabh500/orgs","repos_url":"https://api.github.com/users/saurabh500/repos","events_url":"https://api.github.com/users/saurabh500/events{/privacy}","received_events_url":"https://api.github.com/users/saurabh500/received_events","type":"User","site_admin":false},"repo":{"id":41459213,"name":"corefx","full_name":"saurabh500/corefx","owner":{"login":"saurabh500","id":1623701,"avatar_url":"https://avatars.githubusercontent.com/u/1623701?v=3","gravatar_id":"","url":"https://api.github.com/users/saurabh500","html_url":"https://github.com/saurabh500","followers_url":"https://api.github.com/users/saurabh500/followers","following_url":"https://api.github.com/users/saurabh500/following{/other_user}","gists_url":"https://api.github.com/users/saurabh500/gists{/gist_id}","starred_url":"https://api.github.com/users/saurabh500/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/saurabh500/subscriptions","organizations_url":"https://api.github.com/users/saurabh500/orgs","repos_url":"https://api.github.com/users/saurabh500/repos","events_url":"https://api.github.com/users/saurabh500/events{/privacy}","received_events_url":"https://api.github.com/users/saurabh500/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/saurabh500/corefx","description":"This repo contains the .NET Core foundational libraries, called CoreFX. It includes classes for collections, file systems, console, XML, async and many others.","fork":true,"url":"https://api.github.com/repos/saurabh500/corefx","forks_url":"https://api.github.com/repos/saurabh500/corefx/forks","keys_url":"https://api.github.com/repos/saurabh500/corefx/keys{/key_id}","collaborators_url":"https://api.github.com/repos/saurabh500/corefx/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/saurabh500/corefx/teams","hooks_url":"https://api.github.com/repos/saurabh500/corefx/hooks","issue_events_url":"https://api.github.com/repos/saurabh500/corefx/issues/events{/number}","events_url":"https://api.github.com/repos/saurabh500/corefx/events","assignees_url":"https://api.github.com/repos/saurabh500/corefx/assignees{/user}","branches_url":"https://api.github.com/repos/saurabh500/corefx/branches{/branch}","tags_url":"https://api.github.com/repos/saurabh500/corefx/tags","blobs_url":"https://api.github.com/repos/saurabh500/corefx/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/saurabh500/corefx/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/saurabh500/corefx/git/refs{/sha}","trees_url":"https://api.github.com/repos/saurabh500/corefx/git/trees{/sha}","statuses_url":"https://api.github.com/repos/saurabh500/corefx/statuses/{sha}","languages_url":"https://api.github.com/repos/saurabh500/corefx/languages","stargazers_url":"https://api.github.com/repos/saurabh500/corefx/stargazers","contributors_url":"https://api.github.com/repos/saurabh500/corefx/contributors","subscribers_url":"https://api.github.com/repos/saurabh500/corefx/subscribers","subscription_url":"https://api.github.com/repos/saurabh500/corefx/subscription","commits_url":"https://api.github.com/repos/saurabh500/corefx/commits{/sha}","git_commits_url":"https://api.github.com/repos/saurabh500/corefx/git/commits{/sha}","comments_url":"https://api.github.com/repos/saurabh500/corefx/comments{/number}","issue_comment_url":"https://api.github.com/repos/saurabh500/corefx/issues/comments{/number}","contents_url":"https://api.github.com/repos/saurabh500/corefx/contents/{+path}","compare_url":"https://api.github.com/repos/saurabh500/corefx/compare/{base}...{head}","merges_url":"https://api.github.com/repos/saurabh500/corefx/merges","archive_url":"https://api.github.com/repos/saurabh500/corefx/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/saurabh500/corefx/downloads","issues_url":"https://api.github.com/repos/saurabh500/corefx/issues{/number}","pulls_url":"https://api.github.com/repos/saurabh500/corefx/pulls{/number}","milestones_url":"https://api.github.com/repos/saurabh500/corefx/milestones{/number}","notifications_url":"https://api.github.com/repos/saurabh500/corefx/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/saurabh500/corefx/labels{/name}","releases_url":"https://api.github.com/repos/saurabh500/corefx/releases{/id}","deployments_url":"https://api.github.com/repos/saurabh500/corefx/deployments","created_at":"2015-08-27T01:41:34Z","updated_at":"2016-01-14T01:51:49Z","pushed_at":"2016-04-19T21:40:21Z","git_url":"git://github.com/saurabh500/corefx.git","ssh_url":"git@github.com:saurabh500/corefx.git","clone_url":"https://github.com/saurabh500/corefx.git","svn_url":"https://github.com/saurabh500/corefx","homepage":"http://dotnet.github.io/core/","size":64300,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"dotnet:master","ref":"master","sha":"8e3b469a40c0d7d7e48c6cbb2129db447c62d6c5","user":{"login":"dotnet","id":9141961,"avatar_url":"https://avatars.githubusercontent.com/u/9141961?v=3","gravatar_id":"","url":"https://api.github.com/users/dotnet","html_url":"https://github.com/dotnet","followers_url":"https://api.github.com/users/dotnet/followers","following_url":"https://api.github.com/users/dotnet/following{/other_user}","gists_url":"https://api.github.com/users/dotnet/gists{/gist_id}","starred_url":"https://api.github.com/users/dotnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotnet/subscriptions","organizations_url":"https://api.github.com/users/dotnet/orgs","repos_url":"https://api.github.com/users/dotnet/repos","events_url":"https://api.github.com/users/dotnet/events{/privacy}","received_events_url":"https://api.github.com/users/dotnet/received_events","type":"Organization","site_admin":false},"repo":{"id":26295345,"name":"corefx","full_name":"dotnet/corefx","owner":{"login":"dotnet","id":9141961,"avatar_url":"https://avatars.githubusercontent.com/u/9141961?v=3","gravatar_id":"","url":"https://api.github.com/users/dotnet","html_url":"https://github.com/dotnet","followers_url":"https://api.github.com/users/dotnet/followers","following_url":"https://api.github.com/users/dotnet/following{/other_user}","gists_url":"https://api.github.com/users/dotnet/gists{/gist_id}","starred_url":"https://api.github.com/users/dotnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotnet/subscriptions","organizations_url":"https://api.github.com/users/dotnet/orgs","repos_url":"https://api.github.com/users/dotnet/repos","events_url":"https://api.github.com/users/dotnet/events{/privacy}","received_events_url":"https://api.github.com/users/dotnet/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dotnet/corefx","description":"This repo contains the .NET Core foundational libraries, called CoreFX. It includes classes for collections, file systems, console, XML, async and many others.","fork":false,"url":"https://api.github.com/repos/dotnet/corefx","forks_url":"https://api.github.com/repos/dotnet/corefx/forks","keys_url":"https://api.github.com/repos/dotnet/corefx/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dotnet/corefx/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dotnet/corefx/teams","hooks_url":"https://api.github.com/repos/dotnet/corefx/hooks","issue_events_url":"https://api.github.com/repos/dotnet/corefx/issues/events{/number}","events_url":"https://api.github.com/repos/dotnet/corefx/events","assignees_url":"https://api.github.com/repos/dotnet/corefx/assignees{/user}","branches_url":"https://api.github.com/repos/dotnet/corefx/branches{/branch}","tags_url":"https://api.github.com/repos/dotnet/corefx/tags","blobs_url":"https://api.github.com/repos/dotnet/corefx/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dotnet/corefx/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dotnet/corefx/git/refs{/sha}","trees_url":"https://api.github.com/repos/dotnet/corefx/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dotnet/corefx/statuses/{sha}","languages_url":"https://api.github.com/repos/dotnet/corefx/languages","stargazers_url":"https://api.github.com/repos/dotnet/corefx/stargazers","contributors_url":"https://api.github.com/repos/dotnet/corefx/contributors","subscribers_url":"https://api.github.com/repos/dotnet/corefx/subscribers","subscription_url":"https://api.github.com/repos/dotnet/corefx/subscription","commits_url":"https://api.github.com/repos/dotnet/corefx/commits{/sha}","git_commits_url":"https://api.github.com/repos/dotnet/corefx/git/commits{/sha}","comments_url":"https://api.github.com/repos/dotnet/corefx/comments{/number}","issue_comment_url":"https://api.github.com/repos/dotnet/corefx/issues/comments{/number}","contents_url":"https://api.github.com/repos/dotnet/corefx/contents/{+path}","compare_url":"https://api.github.com/repos/dotnet/corefx/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dotnet/corefx/merges","archive_url":"https://api.github.com/repos/dotnet/corefx/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dotnet/corefx/downloads","issues_url":"https://api.github.com/repos/dotnet/corefx/issues{/number}","pulls_url":"https://api.github.com/repos/dotnet/corefx/pulls{/number}","milestones_url":"https://api.github.com/repos/dotnet/corefx/milestones{/number}","notifications_url":"https://api.github.com/repos/dotnet/corefx/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dotnet/corefx/labels{/name}","releases_url":"https://api.github.com/repos/dotnet/corefx/releases{/id}","deployments_url":"https://api.github.com/repos/dotnet/corefx/deployments","created_at":"2014-11-06T23:42:48Z","updated_at":"2016-04-19T18:59:50Z","pushed_at":"2016-04-19T23:05:25Z","git_url":"git://github.com/dotnet/corefx.git","ssh_url":"git@github.com:dotnet/corefx.git","clone_url":"https://github.com/dotnet/corefx.git","svn_url":"https://github.com/dotnet/corefx","homepage":"http://dotnet.github.io/","size":87636,"stargazers_count":9533,"watchers_count":9533,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2263,"mirror_url":null,"open_issues_count":974,"forks":2263,"open_issues":974,"watchers":9533,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/7891"},"html":{"href":"https://github.com/dotnet/corefx/pull/7891"},"issue":{"href":"https://api.github.com/repos/dotnet/corefx/issues/7891"},"comments":{"href":"https://api.github.com/repos/dotnet/corefx/issues/7891/comments"},"review_comments":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/7891/comments"},"review_comment":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/7891/commits"},"statuses":{"href":"https://api.github.com/repos/dotnet/corefx/statuses/37b0e41df85829dda8eb69acce4f605da6fb9661"}}}}