{"action":"created","comment":{"url":"https://api.github.com/repos/facebook/presto/pulls/comments/23504509","id":23504509,"diff_hunk":"@@ -0,0 +1,202 @@\n+/*\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ *     http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package com.facebook.presto.operator.aggregation;\n+\n+import static com.facebook.presto.metadata.Signature.typeParameter;\n+import static com.facebook.presto.operator.aggregation.AggregationMetadata.ParameterMetadata.ParameterType.BLOCK_INDEX;\n+import static com.facebook.presto.operator.aggregation.AggregationMetadata.ParameterMetadata.ParameterType.INPUT_CHANNEL;\n+import static com.facebook.presto.operator.aggregation.AggregationMetadata.ParameterMetadata.ParameterType.STATE;\n+import static com.facebook.presto.operator.aggregation.AggregationUtils.generateAggregationName;\n+import static com.facebook.presto.type.TypeUtils.parameterizedTypeName;\n+import static com.facebook.presto.util.Reflection.method;\n+import io.airlift.slice.DynamicSliceOutput;\n+import io.airlift.slice.Slice;\n+import io.airlift.slice.SliceInput;\n+import io.airlift.slice.SliceOutput;\n+\n+import java.lang.reflect.Method;\n+import java.util.ArrayList;\n+import java.util.List;\n+import java.util.Map;\n+\n+import com.facebook.presto.byteCode.DynamicClassLoader;\n+import com.facebook.presto.metadata.FunctionInfo;\n+import com.facebook.presto.metadata.FunctionRegistry;\n+import com.facebook.presto.metadata.ParametricAggregation;\n+import com.facebook.presto.metadata.Signature;\n+import com.facebook.presto.operator.aggregation.AggregationMetadata.ParameterMetadata;\n+import com.facebook.presto.operator.aggregation.state.ArrayAggregationState;\n+import com.facebook.presto.operator.aggregation.state.ArrayAggregationStateFactory;\n+import com.facebook.presto.operator.aggregation.state.ArrayAggregationStateSerializer;\n+import com.facebook.presto.spi.block.Block;\n+import com.facebook.presto.spi.block.BlockBuilder;\n+import com.facebook.presto.spi.type.Type;\n+import com.facebook.presto.spi.type.TypeManager;\n+import com.facebook.presto.type.ArrayType;\n+import com.google.common.collect.ImmutableList;\n+\n+public class ArrayAggregation\n+        extends ParametricAggregation\n+{\n+    public static final ArrayAggregation ARRAY_AGGREGATION = new ArrayAggregation();\n+    private static final String NAME = \"array_agg\";\n+    private static final Method OUTPUT_FUNCTION = method(ArrayAggregation.class, \"output\", ArrayAggregationState.class, BlockBuilder.class);\n+    private static final Method INPUT_FUNCTION = method(ArrayAggregation.class, \"input\", ArrayAggregationState.class, Block.class, int.class);\n+    private static final Method COMBINE_FUNCTION = method(ArrayAggregation.class, \"combine\", ArrayAggregationState.class, ArrayAggregationState.class);\n+    private static final Signature SIGNATURE = new Signature(NAME, ImmutableList.of(typeParameter(\"T\")), \"array<T>\", ImmutableList.of(\"T\"), false, false);\n+\n+    @Override\n+    public Signature getSignature()\n+    {\n+        return SIGNATURE;\n+    }\n+\n+    @Override\n+    public String getDescription()\n+    {\n+        return \"return an array of values\";\n+    }\n+\n+    @Override\n+    public FunctionInfo specialize(Map<String, Type> types, int arity, TypeManager typeManager, FunctionRegistry functionRegistry)\n+    {\n+        Type valueType = types.get(\"T\");\n+        Signature signature = new Signature(NAME,\n+                parameterizedTypeName(\"array\", valueType.getTypeSignature()),\n+                valueType.getTypeSignature());\n+        InternalAggregationFunction aggregation = generateAggregation(valueType);\n+        return new FunctionInfo(signature, getDescription(), aggregation.getIntermediateType().getTypeSignature(), aggregation, false);\n+    }\n+\n+    private static InternalAggregationFunction generateAggregation(Type valueType)\n+    {\n+        DynamicClassLoader classLoader = new DynamicClassLoader(ArrayAggregation.class.getClassLoader());\n+\n+        ArrayAggregationStateSerializer stateSerializer = new ArrayAggregationStateSerializer();\n+        Type intermediateType = stateSerializer.getSerializedType();\n+\n+        List<Type> inputTypes = ImmutableList.of(valueType);\n+        Type outputType = new ArrayType(valueType);\n+        ArrayAggregationStateFactory stateFactory = new ArrayAggregationStateFactory(valueType);\n+        AggregationMetadata metadata = new AggregationMetadata(\n+                generateAggregationName(NAME, valueType, inputTypes),\n+                createInputParameterMetadata(valueType),\n+                INPUT_FUNCTION,\n+                null,\n+                null,\n+                COMBINE_FUNCTION,\n+                OUTPUT_FUNCTION,\n+                ArrayAggregationState.class,\n+                stateSerializer,\n+                stateFactory,\n+                outputType,\n+                false);\n+\n+        GenericAccumulatorFactoryBinder factory = new AccumulatorCompiler().generateAccumulatorFactoryBinder(metadata, classLoader);\n+        return new InternalAggregationFunction(NAME, inputTypes, intermediateType, valueType, true, false, factory);\n+    }\n+\n+    private static List<ParameterMetadata> createInputParameterMetadata(Type value)\n+    {\n+        return ImmutableList.of(new ParameterMetadata(STATE), new ParameterMetadata(INPUT_CHANNEL, value), new ParameterMetadata(BLOCK_INDEX));\n+    }\n+\n+    public static void input(ArrayAggregationState state, Block value, int position)\n+    {\n+        if (state.getSliceOutput() == null) {\n+            SliceOutput sliceOutput = new DynamicSliceOutput(400);\n+            state.setEntries(0);\n+            state.setSliceOutput(sliceOutput);\n+        }\n+        state.setEntries(state.getEntries() + 1);\n+        appendTo(state.getType(), state.getSliceOutput(), value, position);\n+    }\n+\n+    private static void appendTo(Type type, SliceOutput output, Block block, int position)\n+    {\n+        if (type.getJavaType() == long.class) {\n+            output.appendLong(type.getLong(block, position));\n+        }\n+        else if (type.getJavaType() == double.class) {\n+            output.appendDouble(type.getDouble(block, position));\n+        }\n+        else if (type.getJavaType() == Slice.class) {\n+            Slice s = type.getSlice(block, position);\n+            output.appendInt(s.length());\n+            output.appendBytes(s);\n+        }\n+        else if (type.getJavaType() == boolean.class) {\n+            output.appendByte(type.getBoolean(block, position) ? 1 : 0);\n+        }\n+        else {\n+            throw new IllegalArgumentException(\"Unsupported type: \" + type.getJavaType().getSimpleName());\n+        }\n+    }\n+\n+    public static void combine(ArrayAggregationState state, ArrayAggregationState otherState)\n+    {\n+        SliceOutput s1 = state.getSliceOutput();\n+        SliceOutput s2 = otherState.getSliceOutput();\n+        if (s1 == null && s2 != null) {\n+            state.setSliceOutput(s2);\n+            state.setEntries(otherState.getEntries());\n+        }\n+        else if (s1 != null) {\n+            s1.appendBytes(s2.slice());\n+            state.setEntries(state.getEntries() + otherState.getEntries());\n+        }\n+    }\n+\n+    public static void output(ArrayAggregationState state, BlockBuilder out)\n+    {\n+        if (state.getSliceOutput() == null) {\n+            out.appendNull();\n+        }\n+        else {\n+            SliceInput sliceInput = state.getSliceOutput().slice().getInput();\n+            Type type = state.getType();\n+            long entries = state.getEntries();\n+            List<Object> values = toValues(type, sliceInput, entries);\n+            Slice s = ArrayType.toStackRepresentation(values);\n+            out.writeBytes(s, 0, s.length());\n+            out.closeEntry();\n+        }\n+    }\n+\n+    private static List<Object> toValues(Type type, SliceInput input, long entries)\n+    {\n+        List<Object> ret = new ArrayList<Object>((int) entries);\n+        for (int i = 0; i < entries; i++) {","path":"presto-main/src/main/java/com/facebook/presto/operator/aggregation/ArrayAggregation.java","position":180,"original_position":180,"commit_id":"08756f97a3ad6ef2c2311e64a60c2fdd0d7d4462","original_commit_id":"08756f97a3ad6ef2c2311e64a60c2fdd0d7d4462","user":{"login":"snarayananqubole","id":5491710,"avatar_url":"https://avatars.githubusercontent.com/u/5491710?v=3","gravatar_id":"","url":"https://api.github.com/users/snarayananqubole","html_url":"https://github.com/snarayananqubole","followers_url":"https://api.github.com/users/snarayananqubole/followers","following_url":"https://api.github.com/users/snarayananqubole/following{/other_user}","gists_url":"https://api.github.com/users/snarayananqubole/gists{/gist_id}","starred_url":"https://api.github.com/users/snarayananqubole/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/snarayananqubole/subscriptions","organizations_url":"https://api.github.com/users/snarayananqubole/orgs","repos_url":"https://api.github.com/users/snarayananqubole/repos","events_url":"https://api.github.com/users/snarayananqubole/events{/privacy}","received_events_url":"https://api.github.com/users/snarayananqubole/received_events","type":"User","site_admin":false},"body":"Faced something very odd. I tried to extract the contents of this loop to a separate function. For some reason, Presto server refused to start up complaining about not being able to instantiate objects.","created_at":"2015-01-25T14:28:31Z","updated_at":"2015-01-25T14:28:31Z","html_url":"https://github.com/facebook/presto/pull/2246#discussion_r23504509","pull_request_url":"https://api.github.com/repos/facebook/presto/pulls/2246","_links":{"self":{"href":"https://api.github.com/repos/facebook/presto/pulls/comments/23504509"},"html":{"href":"https://github.com/facebook/presto/pull/2246#discussion_r23504509"},"pull_request":{"href":"https://api.github.com/repos/facebook/presto/pulls/2246"}}},"pull_request":{"url":"https://api.github.com/repos/facebook/presto/pulls/2246","id":27737515,"html_url":"https://github.com/facebook/presto/pull/2246","diff_url":"https://github.com/facebook/presto/pull/2246.diff","patch_url":"https://github.com/facebook/presto/pull/2246.patch","issue_url":"https://api.github.com/repos/facebook/presto/issues/2246","number":2246,"state":"open","locked":false,"title":"#1975 array_agg aggregate function","user":{"login":"snarayananqubole","id":5491710,"avatar_url":"https://avatars.githubusercontent.com/u/5491710?v=3","gravatar_id":"","url":"https://api.github.com/users/snarayananqubole","html_url":"https://github.com/snarayananqubole","followers_url":"https://api.github.com/users/snarayananqubole/followers","following_url":"https://api.github.com/users/snarayananqubole/following{/other_user}","gists_url":"https://api.github.com/users/snarayananqubole/gists{/gist_id}","starred_url":"https://api.github.com/users/snarayananqubole/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/snarayananqubole/subscriptions","organizations_url":"https://api.github.com/users/snarayananqubole/orgs","repos_url":"https://api.github.com/users/snarayananqubole/repos","events_url":"https://api.github.com/users/snarayananqubole/events{/privacy}","received_events_url":"https://api.github.com/users/snarayananqubole/received_events","type":"User","site_admin":false},"body":"Much faster implementation of array_agg https://github.com/facebook/presto/issues/1975","created_at":"2015-01-21T06:07:54Z","updated_at":"2015-01-25T14:28:31Z","closed_at":null,"merged_at":null,"merge_commit_sha":"2a665c0579f647eaed677ef20f136b9b1bdf8344","assignee":{"login":"cberner","id":842688,"avatar_url":"https://avatars.githubusercontent.com/u/842688?v=3","gravatar_id":"","url":"https://api.github.com/users/cberner","html_url":"https://github.com/cberner","followers_url":"https://api.github.com/users/cberner/followers","following_url":"https://api.github.com/users/cberner/following{/other_user}","gists_url":"https://api.github.com/users/cberner/gists{/gist_id}","starred_url":"https://api.github.com/users/cberner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cberner/subscriptions","organizations_url":"https://api.github.com/users/cberner/orgs","repos_url":"https://api.github.com/users/cberner/repos","events_url":"https://api.github.com/users/cberner/events{/privacy}","received_events_url":"https://api.github.com/users/cberner/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/facebook/presto/pulls/2246/commits","review_comments_url":"https://api.github.com/repos/facebook/presto/pulls/2246/comments","review_comment_url":"https://api.github.com/repos/facebook/presto/pulls/comments/{number}","comments_url":"https://api.github.com/repos/facebook/presto/issues/2246/comments","statuses_url":"https://api.github.com/repos/facebook/presto/statuses/08756f97a3ad6ef2c2311e64a60c2fdd0d7d4462","head":{"label":"snarayananqubole:1975","ref":"1975","sha":"08756f97a3ad6ef2c2311e64a60c2fdd0d7d4462","user":{"login":"snarayananqubole","id":5491710,"avatar_url":"https://avatars.githubusercontent.com/u/5491710?v=3","gravatar_id":"","url":"https://api.github.com/users/snarayananqubole","html_url":"https://github.com/snarayananqubole","followers_url":"https://api.github.com/users/snarayananqubole/followers","following_url":"https://api.github.com/users/snarayananqubole/following{/other_user}","gists_url":"https://api.github.com/users/snarayananqubole/gists{/gist_id}","starred_url":"https://api.github.com/users/snarayananqubole/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/snarayananqubole/subscriptions","organizations_url":"https://api.github.com/users/snarayananqubole/orgs","repos_url":"https://api.github.com/users/snarayananqubole/repos","events_url":"https://api.github.com/users/snarayananqubole/events{/privacy}","received_events_url":"https://api.github.com/users/snarayananqubole/received_events","type":"User","site_admin":false},"repo":{"id":29574132,"name":"presto","full_name":"snarayananqubole/presto","owner":{"login":"snarayananqubole","id":5491710,"avatar_url":"https://avatars.githubusercontent.com/u/5491710?v=3","gravatar_id":"","url":"https://api.github.com/users/snarayananqubole","html_url":"https://github.com/snarayananqubole","followers_url":"https://api.github.com/users/snarayananqubole/followers","following_url":"https://api.github.com/users/snarayananqubole/following{/other_user}","gists_url":"https://api.github.com/users/snarayananqubole/gists{/gist_id}","starred_url":"https://api.github.com/users/snarayananqubole/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/snarayananqubole/subscriptions","organizations_url":"https://api.github.com/users/snarayananqubole/orgs","repos_url":"https://api.github.com/users/snarayananqubole/repos","events_url":"https://api.github.com/users/snarayananqubole/events{/privacy}","received_events_url":"https://api.github.com/users/snarayananqubole/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/snarayananqubole/presto","description":"Distributed SQL query engine for running interactive analytic queries against big data sources.","fork":true,"url":"https://api.github.com/repos/snarayananqubole/presto","forks_url":"https://api.github.com/repos/snarayananqubole/presto/forks","keys_url":"https://api.github.com/repos/snarayananqubole/presto/keys{/key_id}","collaborators_url":"https://api.github.com/repos/snarayananqubole/presto/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/snarayananqubole/presto/teams","hooks_url":"https://api.github.com/repos/snarayananqubole/presto/hooks","issue_events_url":"https://api.github.com/repos/snarayananqubole/presto/issues/events{/number}","events_url":"https://api.github.com/repos/snarayananqubole/presto/events","assignees_url":"https://api.github.com/repos/snarayananqubole/presto/assignees{/user}","branches_url":"https://api.github.com/repos/snarayananqubole/presto/branches{/branch}","tags_url":"https://api.github.com/repos/snarayananqubole/presto/tags","blobs_url":"https://api.github.com/repos/snarayananqubole/presto/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/snarayananqubole/presto/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/snarayananqubole/presto/git/refs{/sha}","trees_url":"https://api.github.com/repos/snarayananqubole/presto/git/trees{/sha}","statuses_url":"https://api.github.com/repos/snarayananqubole/presto/statuses/{sha}","languages_url":"https://api.github.com/repos/snarayananqubole/presto/languages","stargazers_url":"https://api.github.com/repos/snarayananqubole/presto/stargazers","contributors_url":"https://api.github.com/repos/snarayananqubole/presto/contributors","subscribers_url":"https://api.github.com/repos/snarayananqubole/presto/subscribers","subscription_url":"https://api.github.com/repos/snarayananqubole/presto/subscription","commits_url":"https://api.github.com/repos/snarayananqubole/presto/commits{/sha}","git_commits_url":"https://api.github.com/repos/snarayananqubole/presto/git/commits{/sha}","comments_url":"https://api.github.com/repos/snarayananqubole/presto/comments{/number}","issue_comment_url":"https://api.github.com/repos/snarayananqubole/presto/issues/comments/{number}","contents_url":"https://api.github.com/repos/snarayananqubole/presto/contents/{+path}","compare_url":"https://api.github.com/repos/snarayananqubole/presto/compare/{base}...{head}","merges_url":"https://api.github.com/repos/snarayananqubole/presto/merges","archive_url":"https://api.github.com/repos/snarayananqubole/presto/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/snarayananqubole/presto/downloads","issues_url":"https://api.github.com/repos/snarayananqubole/presto/issues{/number}","pulls_url":"https://api.github.com/repos/snarayananqubole/presto/pulls{/number}","milestones_url":"https://api.github.com/repos/snarayananqubole/presto/milestones{/number}","notifications_url":"https://api.github.com/repos/snarayananqubole/presto/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/snarayananqubole/presto/labels{/name}","releases_url":"https://api.github.com/repos/snarayananqubole/presto/releases{/id}","created_at":"2015-01-21T05:57:34Z","updated_at":"2015-01-21T05:57:40Z","pushed_at":"2015-01-21T06:06:44Z","git_url":"git://github.com/snarayananqubole/presto.git","ssh_url":"git@github.com:snarayananqubole/presto.git","clone_url":"https://github.com/snarayananqubole/presto.git","svn_url":"https://github.com/snarayananqubole/presto","homepage":"http://prestodb.io/","size":35533,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"facebook:master","ref":"master","sha":"55c13600a5de44ac7fc3dfac8b95dceb2e6a3355","user":{"login":"facebook","id":69631,"avatar_url":"https://avatars.githubusercontent.com/u/69631?v=3","gravatar_id":"","url":"https://api.github.com/users/facebook","html_url":"https://github.com/facebook","followers_url":"https://api.github.com/users/facebook/followers","following_url":"https://api.github.com/users/facebook/following{/other_user}","gists_url":"https://api.github.com/users/facebook/gists{/gist_id}","starred_url":"https://api.github.com/users/facebook/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/facebook/subscriptions","organizations_url":"https://api.github.com/users/facebook/orgs","repos_url":"https://api.github.com/users/facebook/repos","events_url":"https://api.github.com/users/facebook/events{/privacy}","received_events_url":"https://api.github.com/users/facebook/received_events","type":"Organization","site_admin":false},"repo":{"id":5349565,"name":"presto","full_name":"facebook/presto","owner":{"login":"facebook","id":69631,"avatar_url":"https://avatars.githubusercontent.com/u/69631?v=3","gravatar_id":"","url":"https://api.github.com/users/facebook","html_url":"https://github.com/facebook","followers_url":"https://api.github.com/users/facebook/followers","following_url":"https://api.github.com/users/facebook/following{/other_user}","gists_url":"https://api.github.com/users/facebook/gists{/gist_id}","starred_url":"https://api.github.com/users/facebook/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/facebook/subscriptions","organizations_url":"https://api.github.com/users/facebook/orgs","repos_url":"https://api.github.com/users/facebook/repos","events_url":"https://api.github.com/users/facebook/events{/privacy}","received_events_url":"https://api.github.com/users/facebook/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/facebook/presto","description":"Distributed SQL query engine for running interactive analytic queries against big data sources.","fork":false,"url":"https://api.github.com/repos/facebook/presto","forks_url":"https://api.github.com/repos/facebook/presto/forks","keys_url":"https://api.github.com/repos/facebook/presto/keys{/key_id}","collaborators_url":"https://api.github.com/repos/facebook/presto/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/facebook/presto/teams","hooks_url":"https://api.github.com/repos/facebook/presto/hooks","issue_events_url":"https://api.github.com/repos/facebook/presto/issues/events{/number}","events_url":"https://api.github.com/repos/facebook/presto/events","assignees_url":"https://api.github.com/repos/facebook/presto/assignees{/user}","branches_url":"https://api.github.com/repos/facebook/presto/branches{/branch}","tags_url":"https://api.github.com/repos/facebook/presto/tags","blobs_url":"https://api.github.com/repos/facebook/presto/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/facebook/presto/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/facebook/presto/git/refs{/sha}","trees_url":"https://api.github.com/repos/facebook/presto/git/trees{/sha}","statuses_url":"https://api.github.com/repos/facebook/presto/statuses/{sha}","languages_url":"https://api.github.com/repos/facebook/presto/languages","stargazers_url":"https://api.github.com/repos/facebook/presto/stargazers","contributors_url":"https://api.github.com/repos/facebook/presto/contributors","subscribers_url":"https://api.github.com/repos/facebook/presto/subscribers","subscription_url":"https://api.github.com/repos/facebook/presto/subscription","commits_url":"https://api.github.com/repos/facebook/presto/commits{/sha}","git_commits_url":"https://api.github.com/repos/facebook/presto/git/commits{/sha}","comments_url":"https://api.github.com/repos/facebook/presto/comments{/number}","issue_comment_url":"https://api.github.com/repos/facebook/presto/issues/comments/{number}","contents_url":"https://api.github.com/repos/facebook/presto/contents/{+path}","compare_url":"https://api.github.com/repos/facebook/presto/compare/{base}...{head}","merges_url":"https://api.github.com/repos/facebook/presto/merges","archive_url":"https://api.github.com/repos/facebook/presto/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/facebook/presto/downloads","issues_url":"https://api.github.com/repos/facebook/presto/issues{/number}","pulls_url":"https://api.github.com/repos/facebook/presto/pulls{/number}","milestones_url":"https://api.github.com/repos/facebook/presto/milestones{/number}","notifications_url":"https://api.github.com/repos/facebook/presto/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/facebook/presto/labels{/name}","releases_url":"https://api.github.com/repos/facebook/presto/releases{/id}","created_at":"2012-08-09T01:03:37Z","updated_at":"2015-01-24T10:54:04Z","pushed_at":"2015-01-24T18:51:32Z","git_url":"git://github.com/facebook/presto.git","ssh_url":"git@github.com:facebook/presto.git","clone_url":"https://github.com/facebook/presto.git","svn_url":"https://github.com/facebook/presto","homepage":"http://prestodb.io/","size":67225,"stargazers_count":2924,"watchers_count":2924,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":639,"mirror_url":null,"open_issues_count":216,"forks":639,"open_issues":216,"watchers":2924,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/facebook/presto/pulls/2246"},"html":{"href":"https://github.com/facebook/presto/pull/2246"},"issue":{"href":"https://api.github.com/repos/facebook/presto/issues/2246"},"comments":{"href":"https://api.github.com/repos/facebook/presto/issues/2246/comments"},"review_comments":{"href":"https://api.github.com/repos/facebook/presto/pulls/2246/comments"},"review_comment":{"href":"https://api.github.com/repos/facebook/presto/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/facebook/presto/pulls/2246/commits"},"statuses":{"href":"https://api.github.com/repos/facebook/presto/statuses/08756f97a3ad6ef2c2311e64a60c2fdd0d7d4462"}}}}