{"action":"created","comment":{"url":"https://api.github.com/repos/prestodb/presto/pulls/comments/171175135","pull_request_review_id":99970994,"id":171175135,"diff_hunk":"@@ -141,6 +141,75 @@ public void testRegexpReplace()\n         assertFunction(\"REGEXP_REPLACE(VARCHAR 'x', '.*', 'xxxxx')\", createUnboundedVarcharType(), \"xxxxxxxxxx\");\n     }\n \n+    @Test\n+    public void testRegexpReplaceLambda()\n+    {\n+        // One or more matches with non-empty, not null capturing groups\n+\n+        assertFunction(\"REGEXP_REPLACE('x', '(x)', x -> upper(x[1]))\", createUnboundedVarcharType(), \"X\");\n+        assertFunction(\"REGEXP_REPLACE('xxx xxx xxx', '(x)', x -> upper(x[1]))\", createUnboundedVarcharType(), \"XXX XXX XXX\");\n+        assertFunction(\"REGEXP_REPLACE('new', '(\\\\w)', x -> x[1])\", createUnboundedVarcharType(), \"new\");\n+        assertFunction(\"REGEXP_REPLACE('new', '(\\\\w)', x -> x[1] || upper(x[1]))\", createUnboundedVarcharType(), \"nNeEwW\");\n+        assertFunction(\"REGEXP_REPLACE('new york', '(\\\\w)(\\\\w*)', x -> upper(x[1]) || lower(x[2]))\", createUnboundedVarcharType(), \"New York\");\n+        assertFunction(\"REGEXP_REPLACE('new york', '((\\\\w)(\\\\w*))', x -> upper(x[2]) || lower(x[3]))\", createUnboundedVarcharType(), \"New York\");\n+        assertFunction(\"REGEXP_REPLACE('new york', '(n\\\\w*)', x -> upper(x[1]))\", createUnboundedVarcharType(), \"NEW york\");\n+        assertFunction(\"REGEXP_REPLACE('new york', '(y\\\\w*)', x -> upper(x[1]))\", createUnboundedVarcharType(), \"new YORK\");\n+        assertFunction(\"REGEXP_REPLACE('new york city', '(yo\\\\w*)', x -> upper(x[1]))\", createUnboundedVarcharType(), \"new YORK city\");\n+        assertFunction(\"REGEXP_REPLACE('abc abc', '(abc)', x -> 'm')\", createUnboundedVarcharType(), \"m m\");\n+        assertFunction(\"REGEXP_REPLACE('123 456', '([0-9]*)', x -> x[1])\", createUnboundedVarcharType(), \"123 456\");\n+        assertFunction(\"REGEXP_REPLACE('123 456', '(([0-9]*) ([0-9]*))', x -> x[2] || x[3])\", createUnboundedVarcharType(), \"123456\");\n+        assertFunction(\"REGEXP_REPLACE('abbabba', '(abba)', x -> 'm')\", createUnboundedVarcharType(), \"mbba\");\n+        assertFunction(\"REGEXP_REPLACE('abbabba', '(abba)', x -> 'm' || x[1])\", createUnboundedVarcharType(), \"mabbabba\");\n+        assertFunction(\"REGEXP_REPLACE('abcde', 'ab(c)?de', x -> case when x[1] is null then 'foo' else 'bar' end)\", createUnboundedVarcharType(), \"bar\");\n+        assertFunction(\"REGEXP_REPLACE('abc', '(.)', x -> 'm')\", createUnboundedVarcharType(), \"mmm\");\n+\n+        // Matches that contains empty capturing groups\n+\n+        assertFunction(\"REGEXP_REPLACE('abc', '.', x -> 'm')\", createUnboundedVarcharType(), \"mmm\");  //empty block passed to lambda\n+        assertFunction(\"REGEXP_REPLACE('abbabba', 'abba', x -> 'm')\", createUnboundedVarcharType(), \"mbba\"); //empty block passed to lambda\n+        assertFunction(\"REGEXP_REPLACE('abc abc', 'abc', x -> 'm')\", createUnboundedVarcharType(), \"m m\"); //empty block passed to lambda\n+        assertFunction(\"REGEXP_REPLACE('abc', '', x -> 'OK')\", createUnboundedVarcharType(), \"OKaOKbOKcOK\");  // Passed empty block to lambda\n+        assertFunction(\"REGEXP_REPLACE('abc', '()', x -> x[1])\", createUnboundedVarcharType(), \"abc\"); // Passed a block containing multiple empty capturing groups to lambda\n+        assertFunction(\"REGEXP_REPLACE('abc', '()', x -> 'OK')\", createUnboundedVarcharType(), \"OKaOKbOKcOK\"); // Passed a block containing multiple empty capturing groups to lambda\n+        assertFunction(\"REGEXP_REPLACE('new', '(\\\\w*)', x -> upper(x[1]))\", createUnboundedVarcharType(), \"NEW\");  // Two matches: [\"new\"] and [\"\"]\n+        assertFunction(\"REGEXP_REPLACE('new', '(\\\\w*)', x -> x[1] || upper(x[1]))\", createUnboundedVarcharType(), \"newNEW\");  // Two matches: [\"new\"] and [\"\"]\n+        assertFunction(\"REGEXP_REPLACE('new', '(\\\\w*)', x -> cast(length(x[1]) AS varchar))\", createUnboundedVarcharType(), \"30\");  // Two matches: [\"new\"] and [\"\"]\n+        assertFunction(\"REGEXP_REPLACE('new york', '(\\\\w*)', x -> '<' || x[1] || '>')\", createUnboundedVarcharType(), \"<new><> <york><>\");  // Four matches: [\"new\"], [\"\"], [\"york\"], [\"\"]\n+\n+        // Matches that contains null capturing groups\n+\n+        assertFunction(\"REGEXP_REPLACE('aaa', '(b)?', x -> x[1] )\", createUnboundedVarcharType(), null);\n+        assertFunction(\"REGEXP_REPLACE('abde', 'ab(c)?de', x -> x[1])\", createUnboundedVarcharType(), null);  // matched once with two matching groups[(0,3),null].\n+        assertFunction(\"REGEXP_REPLACE('abde', 'ab(c)?de', x -> 'OK')\", createUnboundedVarcharType(), \"OK\");  // matched once with two matching groups[(0,3),null]. Passed null to lambda and returns OK, so whole string replace with OK\n+        assertFunction(\"REGEXP_REPLACE('abde', 'ab(c)?de', x -> x[1] || 'OK')\", createUnboundedVarcharType(), null); // Passed null to lambda and returns null.\n+        assertFunction(\"REGEXP_REPLACE('abde', 'ab(c)?de', x -> 'OK' || x[1])\", createUnboundedVarcharType(), null);  // Passed null to lambda and returns null.\n+        assertFunction(\"REGEXP_REPLACE('abde', 'ab(c)?de', x -> case when x[1] is null then 'foo' else 'bar' end)\", createUnboundedVarcharType(), \"foo\");\n+        assertFunction(\"REGEXP_REPLACE('ab', '(a)?(b)?', x -> case when (x[1] is not null) AND (x[2] is not null) then 'foo' else null end)\", createUnboundedVarcharType(), null);\n+\n+        // Matches that contains non-empty and not null capturing groups but lambda returns null\n+\n+        assertFunction(\"REGEXP_REPLACE('aaa', '(a)', x -> cast(null as varchar))\", createUnboundedVarcharType(), null);\n+        assertFunction(\"REGEXP_REPLACE('ab', '(a)?(b)?', x -> case when (x[1] is not null) AND (x[2] is null) OR (x[1] is null) AND (x[2] is NOT null) then 'foo' else null end)\", createUnboundedVarcharType(), null);\n+        assertFunction(\"REGEXP_REPLACE('abacdb', '(a)?(b)?', x -> case when (x[1] is not null) AND (x[2] is null) OR (x[1] is null) AND (x[2] is NOT null) then 'foo' else null end)\", createUnboundedVarcharType(), null);\n+\n+        // No matches\n+\n+        assertFunction(\"REGEXP_REPLACE('new york', '(a)', x -> upper(x[1]))\", createUnboundedVarcharType(), \"new york\");\n+        assertFunction(\"REGEXP_REPLACE('', '(a)', x -> upper(x[1]))\", createUnboundedVarcharType(), \"\");\n+        assertFunction(\"REGEXP_REPLACE(null, '(a)', x -> upper(x[1]))\", createUnboundedVarcharType(), null);\n+        assertFunction(\"REGEXP_REPLACE('new', null, x -> upper(x[1]))\", createUnboundedVarcharType(), null);\n+        assertFunction(\"REGEXP_REPLACE('abde', '(c)', x -> x[1])\", createUnboundedVarcharType(), \"abde\");\n+        assertFunction(\"REGEXP_REPLACE('abde', '(c)', x -> 'm')\", createUnboundedVarcharType(), \"abde\");\n+\n+        // Invalid array indexes\n+\n+        assertInvalidFunction(\"REGEXP_REPLACE('new', '(\\\\w)', x -> upper(x[2]))\", INVALID_FUNCTION_ARGUMENT);\n+        assertInvalidFunction(\"REGEXP_REPLACE('new', '(\\\\w)', x -> upper(x[0]))\", INVALID_FUNCTION_ARGUMENT);\n+        assertInvalidFunction(\"REGEXP_REPLACE('abc', '', x -> x[1])\", INVALID_FUNCTION_ARGUMENT);\n+        assertInvalidFunction(\"REGEXP_REPLACE('x', 'x', x -> upper(x[1]))\", INVALID_FUNCTION_ARGUMENT);  //empty block passed to lambda but referencing an element out of bound","path":"presto-main/src/test/java/com/facebook/presto/operator/scalar/TestRegexpFunctions.java","position":69,"original_position":69,"commit_id":"7ec020651e998fdf87692b5a2e62748f80d61e92","original_commit_id":"7ec020651e998fdf87692b5a2e62748f80d61e92","user":{"login":"highker","id":2192913,"avatar_url":"https://avatars0.githubusercontent.com/u/2192913?v=4","gravatar_id":"","url":"https://api.github.com/users/highker","html_url":"https://github.com/highker","followers_url":"https://api.github.com/users/highker/followers","following_url":"https://api.github.com/users/highker/following{/other_user}","gists_url":"https://api.github.com/users/highker/gists{/gist_id}","starred_url":"https://api.github.com/users/highker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/highker/subscriptions","organizations_url":"https://api.github.com/users/highker/orgs","repos_url":"https://api.github.com/users/highker/repos","events_url":"https://api.github.com/users/highker/events{/privacy}","received_events_url":"https://api.github.com/users/highker/received_events","type":"User","site_admin":false},"body":"space after `//`; check all other places as well.","created_at":"2018-02-28T08:50:04Z","updated_at":"2018-02-28T09:00:47Z","html_url":"https://github.com/prestodb/presto/pull/9872#discussion_r171175135","pull_request_url":"https://api.github.com/repos/prestodb/presto/pulls/9872","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/prestodb/presto/pulls/comments/171175135"},"html":{"href":"https://github.com/prestodb/presto/pull/9872#discussion_r171175135"},"pull_request":{"href":"https://api.github.com/repos/prestodb/presto/pulls/9872"}}},"pull_request":{"url":"https://api.github.com/repos/prestodb/presto/pulls/9872","id":166454257,"html_url":"https://github.com/prestodb/presto/pull/9872","diff_url":"https://github.com/prestodb/presto/pull/9872.diff","patch_url":"https://github.com/prestodb/presto/pull/9872.patch","issue_url":"https://api.github.com/repos/prestodb/presto/issues/9872","number":9872,"state":"open","locked":false,"title":"Support lambda function for regex replacement","user":{"login":"yingsu00","id":33299678,"avatar_url":"https://avatars3.githubusercontent.com/u/33299678?v=4","gravatar_id":"","url":"https://api.github.com/users/yingsu00","html_url":"https://github.com/yingsu00","followers_url":"https://api.github.com/users/yingsu00/followers","following_url":"https://api.github.com/users/yingsu00/following{/other_user}","gists_url":"https://api.github.com/users/yingsu00/gists{/gist_id}","starred_url":"https://api.github.com/users/yingsu00/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yingsu00/subscriptions","organizations_url":"https://api.github.com/users/yingsu00/orgs","repos_url":"https://api.github.com/users/yingsu00/repos","events_url":"https://api.github.com/users/yingsu00/events{/privacy}","received_events_url":"https://api.github.com/users/yingsu00/received_events","type":"User","site_admin":false},"body":"There are some uses cases of string manipulation that can be efficiently supported if regexp_replace can take a lamdba function to define the replacement. The lambda function will take an array of match groups. For example, INITCAP in Oracle could be written as regexp_replace(string, '(\\w)(\\w*)', x -> upper(x[1]) || lower(x[2]))\r\n\r\nUpdate:\r\nThe document description for this new regexp_replace() function is put into regexp.rst. The function is still named as regexp_replace().\r\n\r\nWhen lambda returns null, the whole replace string becomes null. This is because in SQL the null represents \"not known\". If we replace a matched group with unknown value, the whole result becomes unknown. The current presto regexp_replace follows the same way:\r\nselect REGEXP_REPLACE('abc', 'b', null);\r\nResult is null.\r\n\r\nThe first capturing group(the entire match) for each match is not passed to lambda. There are two main reasons for this decision:\r\n  1) performance considerations: Since the entire match can always be passed if the user uses () for the whole pattern, we don't need to pass the whole match when it's not necessary. Passing it always incurs extra cost.\r\n 2) To follow the current numbering convention in existing regexp_replace function: $1 represents the first match, $2 the second. E.g.\r\n    SELECT regexp_replace('1a 2b 14m', '(\\d+)([ab]) ', '3c$2 '); -- '3ca 3cb 14m'\r\nSo the INITCAP example would be regexp_replace('new york', '(\\w)(\\w*)', x -> upper(x[1]) || lower(x[2])) = 'New York'\r\n\r\nhttps://github.com/prestodb/presto/issues/9772","created_at":"2018-02-01T06:31:57Z","updated_at":"2018-02-28T09:00:47Z","closed_at":null,"merged_at":null,"merge_commit_sha":"37bad87883778111b8afc572e6edb9c024a2ec6a","assignee":null,"assignees":[],"requested_reviewers":[{"login":"rongrong","id":1448363,"avatar_url":"https://avatars0.githubusercontent.com/u/1448363?v=4","gravatar_id":"","url":"https://api.github.com/users/rongrong","html_url":"https://github.com/rongrong","followers_url":"https://api.github.com/users/rongrong/followers","following_url":"https://api.github.com/users/rongrong/following{/other_user}","gists_url":"https://api.github.com/users/rongrong/gists{/gist_id}","starred_url":"https://api.github.com/users/rongrong/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rongrong/subscriptions","organizations_url":"https://api.github.com/users/rongrong/orgs","repos_url":"https://api.github.com/users/rongrong/repos","events_url":"https://api.github.com/users/rongrong/events{/privacy}","received_events_url":"https://api.github.com/users/rongrong/received_events","type":"User","site_admin":false},{"login":"haozhun","id":2020503,"avatar_url":"https://avatars3.githubusercontent.com/u/2020503?v=4","gravatar_id":"","url":"https://api.github.com/users/haozhun","html_url":"https://github.com/haozhun","followers_url":"https://api.github.com/users/haozhun/followers","following_url":"https://api.github.com/users/haozhun/following{/other_user}","gists_url":"https://api.github.com/users/haozhun/gists{/gist_id}","starred_url":"https://api.github.com/users/haozhun/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/haozhun/subscriptions","organizations_url":"https://api.github.com/users/haozhun/orgs","repos_url":"https://api.github.com/users/haozhun/repos","events_url":"https://api.github.com/users/haozhun/events{/privacy}","received_events_url":"https://api.github.com/users/haozhun/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":196992743,"url":"https://api.github.com/repos/prestodb/presto/labels/CLA%20Signed","name":"CLA Signed","color":"ededed","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/prestodb/presto/pulls/9872/commits","review_comments_url":"https://api.github.com/repos/prestodb/presto/pulls/9872/comments","review_comment_url":"https://api.github.com/repos/prestodb/presto/pulls/comments{/number}","comments_url":"https://api.github.com/repos/prestodb/presto/issues/9872/comments","statuses_url":"https://api.github.com/repos/prestodb/presto/statuses/7ec020651e998fdf87692b5a2e62748f80d61e92","head":{"label":"yingsu00:regexreplace","ref":"regexreplace","sha":"7ec020651e998fdf87692b5a2e62748f80d61e92","user":{"login":"yingsu00","id":33299678,"avatar_url":"https://avatars3.githubusercontent.com/u/33299678?v=4","gravatar_id":"","url":"https://api.github.com/users/yingsu00","html_url":"https://github.com/yingsu00","followers_url":"https://api.github.com/users/yingsu00/followers","following_url":"https://api.github.com/users/yingsu00/following{/other_user}","gists_url":"https://api.github.com/users/yingsu00/gists{/gist_id}","starred_url":"https://api.github.com/users/yingsu00/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yingsu00/subscriptions","organizations_url":"https://api.github.com/users/yingsu00/orgs","repos_url":"https://api.github.com/users/yingsu00/repos","events_url":"https://api.github.com/users/yingsu00/events{/privacy}","received_events_url":"https://api.github.com/users/yingsu00/received_events","type":"User","site_admin":false},"repo":{"id":111038439,"name":"presto","full_name":"yingsu00/presto","owner":{"login":"yingsu00","id":33299678,"avatar_url":"https://avatars3.githubusercontent.com/u/33299678?v=4","gravatar_id":"","url":"https://api.github.com/users/yingsu00","html_url":"https://github.com/yingsu00","followers_url":"https://api.github.com/users/yingsu00/followers","following_url":"https://api.github.com/users/yingsu00/following{/other_user}","gists_url":"https://api.github.com/users/yingsu00/gists{/gist_id}","starred_url":"https://api.github.com/users/yingsu00/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yingsu00/subscriptions","organizations_url":"https://api.github.com/users/yingsu00/orgs","repos_url":"https://api.github.com/users/yingsu00/repos","events_url":"https://api.github.com/users/yingsu00/events{/privacy}","received_events_url":"https://api.github.com/users/yingsu00/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/yingsu00/presto","description":"Distributed SQL query engine for big data","fork":true,"url":"https://api.github.com/repos/yingsu00/presto","forks_url":"https://api.github.com/repos/yingsu00/presto/forks","keys_url":"https://api.github.com/repos/yingsu00/presto/keys{/key_id}","collaborators_url":"https://api.github.com/repos/yingsu00/presto/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/yingsu00/presto/teams","hooks_url":"https://api.github.com/repos/yingsu00/presto/hooks","issue_events_url":"https://api.github.com/repos/yingsu00/presto/issues/events{/number}","events_url":"https://api.github.com/repos/yingsu00/presto/events","assignees_url":"https://api.github.com/repos/yingsu00/presto/assignees{/user}","branches_url":"https://api.github.com/repos/yingsu00/presto/branches{/branch}","tags_url":"https://api.github.com/repos/yingsu00/presto/tags","blobs_url":"https://api.github.com/repos/yingsu00/presto/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/yingsu00/presto/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/yingsu00/presto/git/refs{/sha}","trees_url":"https://api.github.com/repos/yingsu00/presto/git/trees{/sha}","statuses_url":"https://api.github.com/repos/yingsu00/presto/statuses/{sha}","languages_url":"https://api.github.com/repos/yingsu00/presto/languages","stargazers_url":"https://api.github.com/repos/yingsu00/presto/stargazers","contributors_url":"https://api.github.com/repos/yingsu00/presto/contributors","subscribers_url":"https://api.github.com/repos/yingsu00/presto/subscribers","subscription_url":"https://api.github.com/repos/yingsu00/presto/subscription","commits_url":"https://api.github.com/repos/yingsu00/presto/commits{/sha}","git_commits_url":"https://api.github.com/repos/yingsu00/presto/git/commits{/sha}","comments_url":"https://api.github.com/repos/yingsu00/presto/comments{/number}","issue_comment_url":"https://api.github.com/repos/yingsu00/presto/issues/comments{/number}","contents_url":"https://api.github.com/repos/yingsu00/presto/contents/{+path}","compare_url":"https://api.github.com/repos/yingsu00/presto/compare/{base}...{head}","merges_url":"https://api.github.com/repos/yingsu00/presto/merges","archive_url":"https://api.github.com/repos/yingsu00/presto/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/yingsu00/presto/downloads","issues_url":"https://api.github.com/repos/yingsu00/presto/issues{/number}","pulls_url":"https://api.github.com/repos/yingsu00/presto/pulls{/number}","milestones_url":"https://api.github.com/repos/yingsu00/presto/milestones{/number}","notifications_url":"https://api.github.com/repos/yingsu00/presto/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/yingsu00/presto/labels{/name}","releases_url":"https://api.github.com/repos/yingsu00/presto/releases{/id}","deployments_url":"https://api.github.com/repos/yingsu00/presto/deployments","created_at":"2017-11-17T00:37:10Z","updated_at":"2017-11-17T00:37:28Z","pushed_at":"2018-02-27T07:38:58Z","git_url":"git://github.com/yingsu00/presto.git","ssh_url":"git@github.com:yingsu00/presto.git","clone_url":"https://github.com/yingsu00/presto.git","svn_url":"https://github.com/yingsu00/presto","homepage":"https://prestodb.io","size":86745,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"prestodb:master","ref":"master","sha":"9f4db6f0dd9d3b0d122633f726373ed659751240","user":{"login":"prestodb","id":6882181,"avatar_url":"https://avatars0.githubusercontent.com/u/6882181?v=4","gravatar_id":"","url":"https://api.github.com/users/prestodb","html_url":"https://github.com/prestodb","followers_url":"https://api.github.com/users/prestodb/followers","following_url":"https://api.github.com/users/prestodb/following{/other_user}","gists_url":"https://api.github.com/users/prestodb/gists{/gist_id}","starred_url":"https://api.github.com/users/prestodb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/prestodb/subscriptions","organizations_url":"https://api.github.com/users/prestodb/orgs","repos_url":"https://api.github.com/users/prestodb/repos","events_url":"https://api.github.com/users/prestodb/events{/privacy}","received_events_url":"https://api.github.com/users/prestodb/received_events","type":"Organization","site_admin":false},"repo":{"id":5349565,"name":"presto","full_name":"prestodb/presto","owner":{"login":"prestodb","id":6882181,"avatar_url":"https://avatars0.githubusercontent.com/u/6882181?v=4","gravatar_id":"","url":"https://api.github.com/users/prestodb","html_url":"https://github.com/prestodb","followers_url":"https://api.github.com/users/prestodb/followers","following_url":"https://api.github.com/users/prestodb/following{/other_user}","gists_url":"https://api.github.com/users/prestodb/gists{/gist_id}","starred_url":"https://api.github.com/users/prestodb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/prestodb/subscriptions","organizations_url":"https://api.github.com/users/prestodb/orgs","repos_url":"https://api.github.com/users/prestodb/repos","events_url":"https://api.github.com/users/prestodb/events{/privacy}","received_events_url":"https://api.github.com/users/prestodb/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/prestodb/presto","description":"Distributed SQL query engine for big data","fork":false,"url":"https://api.github.com/repos/prestodb/presto","forks_url":"https://api.github.com/repos/prestodb/presto/forks","keys_url":"https://api.github.com/repos/prestodb/presto/keys{/key_id}","collaborators_url":"https://api.github.com/repos/prestodb/presto/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/prestodb/presto/teams","hooks_url":"https://api.github.com/repos/prestodb/presto/hooks","issue_events_url":"https://api.github.com/repos/prestodb/presto/issues/events{/number}","events_url":"https://api.github.com/repos/prestodb/presto/events","assignees_url":"https://api.github.com/repos/prestodb/presto/assignees{/user}","branches_url":"https://api.github.com/repos/prestodb/presto/branches{/branch}","tags_url":"https://api.github.com/repos/prestodb/presto/tags","blobs_url":"https://api.github.com/repos/prestodb/presto/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/prestodb/presto/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/prestodb/presto/git/refs{/sha}","trees_url":"https://api.github.com/repos/prestodb/presto/git/trees{/sha}","statuses_url":"https://api.github.com/repos/prestodb/presto/statuses/{sha}","languages_url":"https://api.github.com/repos/prestodb/presto/languages","stargazers_url":"https://api.github.com/repos/prestodb/presto/stargazers","contributors_url":"https://api.github.com/repos/prestodb/presto/contributors","subscribers_url":"https://api.github.com/repos/prestodb/presto/subscribers","subscription_url":"https://api.github.com/repos/prestodb/presto/subscription","commits_url":"https://api.github.com/repos/prestodb/presto/commits{/sha}","git_commits_url":"https://api.github.com/repos/prestodb/presto/git/commits{/sha}","comments_url":"https://api.github.com/repos/prestodb/presto/comments{/number}","issue_comment_url":"https://api.github.com/repos/prestodb/presto/issues/comments{/number}","contents_url":"https://api.github.com/repos/prestodb/presto/contents/{+path}","compare_url":"https://api.github.com/repos/prestodb/presto/compare/{base}...{head}","merges_url":"https://api.github.com/repos/prestodb/presto/merges","archive_url":"https://api.github.com/repos/prestodb/presto/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/prestodb/presto/downloads","issues_url":"https://api.github.com/repos/prestodb/presto/issues{/number}","pulls_url":"https://api.github.com/repos/prestodb/presto/pulls{/number}","milestones_url":"https://api.github.com/repos/prestodb/presto/milestones{/number}","notifications_url":"https://api.github.com/repos/prestodb/presto/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/prestodb/presto/labels{/name}","releases_url":"https://api.github.com/repos/prestodb/presto/releases{/id}","deployments_url":"https://api.github.com/repos/prestodb/presto/deployments","created_at":"2012-08-09T01:03:37Z","updated_at":"2018-02-28T07:51:59Z","pushed_at":"2018-02-28T06:00:19Z","git_url":"git://github.com/prestodb/presto.git","ssh_url":"git@github.com:prestodb/presto.git","clone_url":"https://github.com/prestodb/presto.git","svn_url":"https://github.com/prestodb/presto","homepage":"https://prestodb.io","size":87832,"stargazers_count":7146,"watchers_count":7146,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2386,"mirror_url":null,"archived":false,"open_issues_count":1207,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":2386,"open_issues":1207,"watchers":7146,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/prestodb/presto/pulls/9872"},"html":{"href":"https://github.com/prestodb/presto/pull/9872"},"issue":{"href":"https://api.github.com/repos/prestodb/presto/issues/9872"},"comments":{"href":"https://api.github.com/repos/prestodb/presto/issues/9872/comments"},"review_comments":{"href":"https://api.github.com/repos/prestodb/presto/pulls/9872/comments"},"review_comment":{"href":"https://api.github.com/repos/prestodb/presto/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/prestodb/presto/pulls/9872/commits"},"statuses":{"href":"https://api.github.com/repos/prestodb/presto/statuses/7ec020651e998fdf87692b5a2e62748f80d61e92"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"highker"}}