{"action":"created","comment":{"url":"https://api.github.com/repos/greenplum-db/gporca/pulls/comments/226019085","pull_request_review_id":165741832,"id":226019085,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyNjAxOTA4NQ==","diff_hunk":"@@ -0,0 +1,413 @@\n+//---------------------------------------------------------------------------i\n+//  Greenplum Database\n+//  Copyright (C) 2018 Pivotal Inc.\n+//\n+//  @filename:\n+//      CXformEagerAgg.cpp\n+//\n+//  @doc:\n+//      Implementation for eagerly pushing aggregates below join\n+//          (with no foreign key restriction on the join condition)\n+//---------------------------------------------------------------------------\n+#include \"gpos/base.h\"\n+\n+#include \"naucrates/md/IMDAggregate.h\"\n+#include \"naucrates/md/CMDScalarOpGPDB.h\"\n+#include \"gpopt/operators/ops.h\"\n+#include \"gpopt/xforms/CXformExploration.h\"\n+#include \"gpopt/xforms/CXformEagerAgg.h\"\n+#include \"gpopt/xforms/CXformUtils.h\"\n+#include \"gpopt/base/CColRefSetIter.h\"\n+\n+using namespace gpopt;\n+using namespace gpmd;\n+\n+// ctor\n+CXformEagerAgg::CXformEagerAgg\n+\t(\n+\tIMemoryPool *mp\n+\t)\n+\t:\n+\t// pattern\n+\tCXformExploration\n+\t\t(\n+\t\tGPOS_NEW(mp) CExpression\n+\t\t\t(\n+\t\t\tmp,\n+\t\t\tGPOS_NEW(mp) CLogicalGbAgg(mp),\n+\t\t\tGPOS_NEW(mp) CExpression\n+\t\t\t\t(\n+\t\t\t\tmp,\n+\t\t\t\tGPOS_NEW(mp) CLogicalInnerJoin(mp),\n+\t\t\t\tGPOS_NEW(mp) CExpression(mp, GPOS_NEW(mp) CPatternLeaf(mp)), // join outer child\n+\t\t\t\tGPOS_NEW(mp) CExpression(mp, GPOS_NEW(mp) CPatternLeaf(mp)), // join inner child\n+\t\t\t\tGPOS_NEW(mp) CExpression(mp, GPOS_NEW(mp) CPatternTree(mp))  // join predicate\n+\t\t\t\t),\n+\t\t\t\tGPOS_NEW(mp) CExpression(mp, GPOS_NEW(mp) CPatternTree(mp))  // scalar project list\n+\t\t\t)\n+\t\t)\n+{}\n+\n+// ctor\n+CXformEagerAgg::CXformEagerAgg\n+\t(\n+\tCExpression *pexprPattern\n+\t)\n+\t:\n+\tCXformExploration(pexprPattern)\n+{}\n+\n+// compute xform promise for a given expression handle;\n+// we only push down global aggregates\n+CXform::EXformPromise\n+CXformEagerAgg::Exfp\n+\t(\n+\tCExpressionHandle &exprhdl\n+\t)\n+\tconst\n+{\n+\tCLogicalGbAgg *popGbAgg = CLogicalGbAgg::PopConvert(exprhdl.Pop());\n+\tif (!popGbAgg->FGlobal())\n+\t{\n+\t\treturn CXform::ExfpNone;\n+\t}\n+\treturn CXform::ExfpHigh;\n+}\n+\n+// actual transformation\n+void\n+CXformEagerAgg::Transform\n+\t(\n+\tCXformContext *pxf_ctxt,\n+\tCXformResult *pxfres,\n+\tCExpression *pexpr\n+\t)\n+\tconst\n+{\n+\tGPOS_ASSERT(NULL != pxf_ctxt);\n+\tGPOS_ASSERT(FPromising(pxf_ctxt->Pmp(), this, pexpr));\n+\tGPOS_ASSERT(FCheckPattern(pexpr));","path":"libgpopt/src/xforms/CXformEagerAgg.cpp","position":92,"original_position":89,"commit_id":"dbfc66599d42b46f3ab2dcb39e5dce60312ef8fd","original_commit_id":"c37b43d040cd3af57b15d1b3287dd3b9142a357f","user":{"login":"vraghavan78","id":12649877,"node_id":"MDQ6VXNlcjEyNjQ5ODc3","avatar_url":"https://avatars1.githubusercontent.com/u/12649877?v=4","gravatar_id":"","url":"https://api.github.com/users/vraghavan78","html_url":"https://github.com/vraghavan78","followers_url":"https://api.github.com/users/vraghavan78/followers","following_url":"https://api.github.com/users/vraghavan78/following{/other_user}","gists_url":"https://api.github.com/users/vraghavan78/gists{/gist_id}","starred_url":"https://api.github.com/users/vraghavan78/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vraghavan78/subscriptions","organizations_url":"https://api.github.com/users/vraghavan78/orgs","repos_url":"https://api.github.com/users/vraghavan78/repos","events_url":"https://api.github.com/users/vraghavan78/events{/privacy}","received_events_url":"https://api.github.com/users/vraghavan78/received_events","type":"User","site_admin":false},"body":"```\r\nselect * from foo where foo.a = (select min(foo.b) from bar, jazz where bar.a = jazz.a group by bar.b limit 1);\r\n```","created_at":"2018-10-17T17:10:58Z","updated_at":"2018-10-17T17:10:58Z","html_url":"https://github.com/greenplum-db/gporca/pull/413#discussion_r226019085","pull_request_url":"https://api.github.com/repos/greenplum-db/gporca/pulls/413","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/greenplum-db/gporca/pulls/comments/226019085"},"html":{"href":"https://github.com/greenplum-db/gporca/pull/413#discussion_r226019085"},"pull_request":{"href":"https://api.github.com/repos/greenplum-db/gporca/pulls/413"}},"in_reply_to_id":225661262},"pull_request":{"url":"https://api.github.com/repos/greenplum-db/gporca/pulls/413","id":221873983,"node_id":"MDExOlB1bGxSZXF1ZXN0MjIxODczOTgz","html_url":"https://github.com/greenplum-db/gporca/pull/413","diff_url":"https://github.com/greenplum-db/gporca/pull/413.diff","patch_url":"https://github.com/greenplum-db/gporca/pull/413.patch","issue_url":"https://api.github.com/repos/greenplum-db/gporca/issues/413","number":413,"state":"open","locked":false,"title":"Eager agg","user":{"login":"iyerr3","id":2237447,"node_id":"MDQ6VXNlcjIyMzc0NDc=","avatar_url":"https://avatars2.githubusercontent.com/u/2237447?v=4","gravatar_id":"","url":"https://api.github.com/users/iyerr3","html_url":"https://github.com/iyerr3","followers_url":"https://api.github.com/users/iyerr3/followers","following_url":"https://api.github.com/users/iyerr3/following{/other_user}","gists_url":"https://api.github.com/users/iyerr3/gists{/gist_id}","starred_url":"https://api.github.com/users/iyerr3/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iyerr3/subscriptions","organizations_url":"https://api.github.com/users/iyerr3/orgs","repos_url":"https://api.github.com/users/iyerr3/repos","events_url":"https://api.github.com/users/iyerr3/events{/privacy}","received_events_url":"https://api.github.com/users/iyerr3/received_events","type":"User","site_admin":false},"body":"Goal of this work is to add a transform that eagerly aggregates data if\r\nan inner join is present below the aggregate. This allows potentially\r\nreducing the number of tuples to join, hence making this plan cheaper\r\nthan alternatives.\r\n\r\nCurrent restrictions include:\r\n1. Only aggregates using columns from one side of the inner join are supported\r\n2. This commit adds the feature for `min` and `max`. Future commits will\r\nadd support for `sum`, `count` and `avg`.\r\n3. DQAs are not supported\r\n\r\nExample query:\r\n```\r\nSELECT min(s1)\r\nFROM foo, bar\r\nWHERE foo.j1 = bar.j2\r\nAND   foo.s1 % 2 = 0\r\nGROUP BY foo.g1, bar.g2\r\n```\r\n\r\nPlan without EagerAgg\r\n```\r\n                                                  QUERY PLAN\r\n--------------------------------------------------------------------------------------------------------------\r\n Gather Motion 3:1  (slice2; segments: 3)  (cost=0.00..43788.53 rows=562500 width=4)\r\n   ->  Result  (cost=0.00..43780.14 rows=187500 width=4)\r\n         ->  HashAggregate  (cost=0.00..43780.14 rows=187500 width=4)\r\n               Group Key: foo.g1, bar.g2\r\n               ->  Redistribute Motion 3:3  (slice1; segments: 3)  (cost=0.00..43734.55 rows=187500 width=12)\r\n                     Hash Key: foo.g1, bar.g2\r\n                     ->  Result  (cost=0.00..43727.51 rows=187500 width=12)\r\n                           ->  HashAggregate  (cost=0.00..43727.51 rows=187500 width=12)\r\n                                 Group Key: foo.g1, bar.g2\r\n                                 ->  Hash Join  (cost=0.00..11032.52 rows=132874743 width=12)\r\n                                       Hash Cond: (foo.j1 = bar.j2)\r\n                                       ->  Table Scan on foo  (cost=0.00..2595.31 rows=13333572 width=12)\r\n                                             Filter: ((s1 % 2) = 0)\r\n                                       ->  Hash  (cost=431.77..431.77 rows=33341 width=8)\r\n                                             ->  Table Scan on bar  (cost=0.00..431.77 rows=33341 width=8)\r\n```\r\n\r\nPlan with EagerAgg\r\n```\r\n                                                   QUERY PLAN\r\n----------------------------------------------------------------------------------------------------------------\r\n Gather Motion 3:1  (slice2; segments: 3)  (cost=0.00..12090.26 rows=562500 width=4)\r\n   ->  Result  (cost=0.00..12081.88 rows=187500 width=4)\r\n         ->  HashAggregate  (cost=0.00..12081.88 rows=187500 width=4)\r\n               Group Key: foo.g1, bar.g2\r\n               ->  Redistribute Motion 3:3  (slice1; segments: 3)  (cost=0.00..12036.29 rows=187500 width=12)\r\n                     Hash Key: foo.g1, bar.g2\r\n                     ->  Result  (cost=0.00..12029.25 rows=187500 width=12)\r\n                           ->  HashAggregate  (cost=0.00..12029.25 rows=187500 width=12)\r\n                                 Group Key: foo.g1, bar.g2\r\n                                 ->  Hash Join  (cost=0.00..7414.04 rows=18754313 width=12)\r\n                                       Hash Cond: (foo.j1 = bar.j2)\r\n                                       ->  HashAggregate  (cost=0.00..5843.87 rows=1881938 width=12)\r\n                                             Group Key: foo.j1, foo.g1\r\n                                             ->  Table Scan on foo  (cost=0.00..2595.31 rows=13333572 width=12)\r\n                                                   Filter: ((s1 % 2) = 0)\r\n                                       ->  Hash  (cost=431.77..431.77 rows=33341 width=8)\r\n                                             ->  Table Scan on bar  (cost=0.00..431.77 rows=33341 width=8)\r\n```\r\n","created_at":"2018-10-10T17:36:08Z","updated_at":"2018-10-17T17:10:58Z","closed_at":null,"merged_at":null,"merge_commit_sha":"18e6b4f6677db5200320472d7f12120681844472","assignee":{"login":"iyerr3","id":2237447,"node_id":"MDQ6VXNlcjIyMzc0NDc=","avatar_url":"https://avatars2.githubusercontent.com/u/2237447?v=4","gravatar_id":"","url":"https://api.github.com/users/iyerr3","html_url":"https://github.com/iyerr3","followers_url":"https://api.github.com/users/iyerr3/followers","following_url":"https://api.github.com/users/iyerr3/following{/other_user}","gists_url":"https://api.github.com/users/iyerr3/gists{/gist_id}","starred_url":"https://api.github.com/users/iyerr3/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iyerr3/subscriptions","organizations_url":"https://api.github.com/users/iyerr3/orgs","repos_url":"https://api.github.com/users/iyerr3/repos","events_url":"https://api.github.com/users/iyerr3/events{/privacy}","received_events_url":"https://api.github.com/users/iyerr3/received_events","type":"User","site_admin":false},"assignees":[{"login":"iyerr3","id":2237447,"node_id":"MDQ6VXNlcjIyMzc0NDc=","avatar_url":"https://avatars2.githubusercontent.com/u/2237447?v=4","gravatar_id":"","url":"https://api.github.com/users/iyerr3","html_url":"https://github.com/iyerr3","followers_url":"https://api.github.com/users/iyerr3/followers","following_url":"https://api.github.com/users/iyerr3/following{/other_user}","gists_url":"https://api.github.com/users/iyerr3/gists{/gist_id}","starred_url":"https://api.github.com/users/iyerr3/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iyerr3/subscriptions","organizations_url":"https://api.github.com/users/iyerr3/orgs","repos_url":"https://api.github.com/users/iyerr3/repos","events_url":"https://api.github.com/users/iyerr3/events{/privacy}","received_events_url":"https://api.github.com/users/iyerr3/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"hardikar","id":2496677,"node_id":"MDQ6VXNlcjI0OTY2Nzc=","avatar_url":"https://avatars2.githubusercontent.com/u/2496677?v=4","gravatar_id":"","url":"https://api.github.com/users/hardikar","html_url":"https://github.com/hardikar","followers_url":"https://api.github.com/users/hardikar/followers","following_url":"https://api.github.com/users/hardikar/following{/other_user}","gists_url":"https://api.github.com/users/hardikar/gists{/gist_id}","starred_url":"https://api.github.com/users/hardikar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hardikar/subscriptions","organizations_url":"https://api.github.com/users/hardikar/orgs","repos_url":"https://api.github.com/users/hardikar/repos","events_url":"https://api.github.com/users/hardikar/events{/privacy}","received_events_url":"https://api.github.com/users/hardikar/received_events","type":"User","site_admin":false},{"login":"bhuvnesh2703","id":10293569,"node_id":"MDQ6VXNlcjEwMjkzNTY5","avatar_url":"https://avatars1.githubusercontent.com/u/10293569?v=4","gravatar_id":"","url":"https://api.github.com/users/bhuvnesh2703","html_url":"https://github.com/bhuvnesh2703","followers_url":"https://api.github.com/users/bhuvnesh2703/followers","following_url":"https://api.github.com/users/bhuvnesh2703/following{/other_user}","gists_url":"https://api.github.com/users/bhuvnesh2703/gists{/gist_id}","starred_url":"https://api.github.com/users/bhuvnesh2703/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bhuvnesh2703/subscriptions","organizations_url":"https://api.github.com/users/bhuvnesh2703/orgs","repos_url":"https://api.github.com/users/bhuvnesh2703/repos","events_url":"https://api.github.com/users/bhuvnesh2703/events{/privacy}","received_events_url":"https://api.github.com/users/bhuvnesh2703/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/greenplum-db/gporca/pulls/413/commits","review_comments_url":"https://api.github.com/repos/greenplum-db/gporca/pulls/413/comments","review_comment_url":"https://api.github.com/repos/greenplum-db/gporca/pulls/comments{/number}","comments_url":"https://api.github.com/repos/greenplum-db/gporca/issues/413/comments","statuses_url":"https://api.github.com/repos/greenplum-db/gporca/statuses/dbfc66599d42b46f3ab2dcb39e5dce60312ef8fd","head":{"label":"greenplum-db:eager-agg","ref":"eager-agg","sha":"dbfc66599d42b46f3ab2dcb39e5dce60312ef8fd","user":{"login":"greenplum-db","id":14097842,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0MDk3ODQy","avatar_url":"https://avatars2.githubusercontent.com/u/14097842?v=4","gravatar_id":"","url":"https://api.github.com/users/greenplum-db","html_url":"https://github.com/greenplum-db","followers_url":"https://api.github.com/users/greenplum-db/followers","following_url":"https://api.github.com/users/greenplum-db/following{/other_user}","gists_url":"https://api.github.com/users/greenplum-db/gists{/gist_id}","starred_url":"https://api.github.com/users/greenplum-db/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/greenplum-db/subscriptions","organizations_url":"https://api.github.com/users/greenplum-db/orgs","repos_url":"https://api.github.com/users/greenplum-db/repos","events_url":"https://api.github.com/users/greenplum-db/events{/privacy}","received_events_url":"https://api.github.com/users/greenplum-db/received_events","type":"Organization","site_admin":false},"repo":{"id":47849203,"node_id":"MDEwOlJlcG9zaXRvcnk0Nzg0OTIwMw==","name":"gporca","full_name":"greenplum-db/gporca","private":false,"owner":{"login":"greenplum-db","id":14097842,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0MDk3ODQy","avatar_url":"https://avatars2.githubusercontent.com/u/14097842?v=4","gravatar_id":"","url":"https://api.github.com/users/greenplum-db","html_url":"https://github.com/greenplum-db","followers_url":"https://api.github.com/users/greenplum-db/followers","following_url":"https://api.github.com/users/greenplum-db/following{/other_user}","gists_url":"https://api.github.com/users/greenplum-db/gists{/gist_id}","starred_url":"https://api.github.com/users/greenplum-db/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/greenplum-db/subscriptions","organizations_url":"https://api.github.com/users/greenplum-db/orgs","repos_url":"https://api.github.com/users/greenplum-db/repos","events_url":"https://api.github.com/users/greenplum-db/events{/privacy}","received_events_url":"https://api.github.com/users/greenplum-db/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/greenplum-db/gporca","description":"A modular query optimizer for big data","fork":false,"url":"https://api.github.com/repos/greenplum-db/gporca","forks_url":"https://api.github.com/repos/greenplum-db/gporca/forks","keys_url":"https://api.github.com/repos/greenplum-db/gporca/keys{/key_id}","collaborators_url":"https://api.github.com/repos/greenplum-db/gporca/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/greenplum-db/gporca/teams","hooks_url":"https://api.github.com/repos/greenplum-db/gporca/hooks","issue_events_url":"https://api.github.com/repos/greenplum-db/gporca/issues/events{/number}","events_url":"https://api.github.com/repos/greenplum-db/gporca/events","assignees_url":"https://api.github.com/repos/greenplum-db/gporca/assignees{/user}","branches_url":"https://api.github.com/repos/greenplum-db/gporca/branches{/branch}","tags_url":"https://api.github.com/repos/greenplum-db/gporca/tags","blobs_url":"https://api.github.com/repos/greenplum-db/gporca/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/greenplum-db/gporca/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/greenplum-db/gporca/git/refs{/sha}","trees_url":"https://api.github.com/repos/greenplum-db/gporca/git/trees{/sha}","statuses_url":"https://api.github.com/repos/greenplum-db/gporca/statuses/{sha}","languages_url":"https://api.github.com/repos/greenplum-db/gporca/languages","stargazers_url":"https://api.github.com/repos/greenplum-db/gporca/stargazers","contributors_url":"https://api.github.com/repos/greenplum-db/gporca/contributors","subscribers_url":"https://api.github.com/repos/greenplum-db/gporca/subscribers","subscription_url":"https://api.github.com/repos/greenplum-db/gporca/subscription","commits_url":"https://api.github.com/repos/greenplum-db/gporca/commits{/sha}","git_commits_url":"https://api.github.com/repos/greenplum-db/gporca/git/commits{/sha}","comments_url":"https://api.github.com/repos/greenplum-db/gporca/comments{/number}","issue_comment_url":"https://api.github.com/repos/greenplum-db/gporca/issues/comments{/number}","contents_url":"https://api.github.com/repos/greenplum-db/gporca/contents/{+path}","compare_url":"https://api.github.com/repos/greenplum-db/gporca/compare/{base}...{head}","merges_url":"https://api.github.com/repos/greenplum-db/gporca/merges","archive_url":"https://api.github.com/repos/greenplum-db/gporca/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/greenplum-db/gporca/downloads","issues_url":"https://api.github.com/repos/greenplum-db/gporca/issues{/number}","pulls_url":"https://api.github.com/repos/greenplum-db/gporca/pulls{/number}","milestones_url":"https://api.github.com/repos/greenplum-db/gporca/milestones{/number}","notifications_url":"https://api.github.com/repos/greenplum-db/gporca/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/greenplum-db/gporca/labels{/name}","releases_url":"https://api.github.com/repos/greenplum-db/gporca/releases{/id}","deployments_url":"https://api.github.com/repos/greenplum-db/gporca/deployments","created_at":"2015-12-11T20:24:47Z","updated_at":"2018-10-17T03:56:43Z","pushed_at":"2018-10-17T00:00:41Z","git_url":"git://github.com/greenplum-db/gporca.git","ssh_url":"git@github.com:greenplum-db/gporca.git","clone_url":"https://github.com/greenplum-db/gporca.git","svn_url":"https://github.com/greenplum-db/gporca","homepage":"","size":43786,"stargazers_count":153,"watchers_count":153,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":88,"mirror_url":null,"archived":false,"open_issues_count":32,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":88,"open_issues":32,"watchers":153,"default_branch":"master"}},"base":{"label":"greenplum-db:master","ref":"master","sha":"df70df7391046ed23ad35a4c2b986852745dd1b7","user":{"login":"greenplum-db","id":14097842,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0MDk3ODQy","avatar_url":"https://avatars2.githubusercontent.com/u/14097842?v=4","gravatar_id":"","url":"https://api.github.com/users/greenplum-db","html_url":"https://github.com/greenplum-db","followers_url":"https://api.github.com/users/greenplum-db/followers","following_url":"https://api.github.com/users/greenplum-db/following{/other_user}","gists_url":"https://api.github.com/users/greenplum-db/gists{/gist_id}","starred_url":"https://api.github.com/users/greenplum-db/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/greenplum-db/subscriptions","organizations_url":"https://api.github.com/users/greenplum-db/orgs","repos_url":"https://api.github.com/users/greenplum-db/repos","events_url":"https://api.github.com/users/greenplum-db/events{/privacy}","received_events_url":"https://api.github.com/users/greenplum-db/received_events","type":"Organization","site_admin":false},"repo":{"id":47849203,"node_id":"MDEwOlJlcG9zaXRvcnk0Nzg0OTIwMw==","name":"gporca","full_name":"greenplum-db/gporca","private":false,"owner":{"login":"greenplum-db","id":14097842,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0MDk3ODQy","avatar_url":"https://avatars2.githubusercontent.com/u/14097842?v=4","gravatar_id":"","url":"https://api.github.com/users/greenplum-db","html_url":"https://github.com/greenplum-db","followers_url":"https://api.github.com/users/greenplum-db/followers","following_url":"https://api.github.com/users/greenplum-db/following{/other_user}","gists_url":"https://api.github.com/users/greenplum-db/gists{/gist_id}","starred_url":"https://api.github.com/users/greenplum-db/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/greenplum-db/subscriptions","organizations_url":"https://api.github.com/users/greenplum-db/orgs","repos_url":"https://api.github.com/users/greenplum-db/repos","events_url":"https://api.github.com/users/greenplum-db/events{/privacy}","received_events_url":"https://api.github.com/users/greenplum-db/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/greenplum-db/gporca","description":"A modular query optimizer for big data","fork":false,"url":"https://api.github.com/repos/greenplum-db/gporca","forks_url":"https://api.github.com/repos/greenplum-db/gporca/forks","keys_url":"https://api.github.com/repos/greenplum-db/gporca/keys{/key_id}","collaborators_url":"https://api.github.com/repos/greenplum-db/gporca/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/greenplum-db/gporca/teams","hooks_url":"https://api.github.com/repos/greenplum-db/gporca/hooks","issue_events_url":"https://api.github.com/repos/greenplum-db/gporca/issues/events{/number}","events_url":"https://api.github.com/repos/greenplum-db/gporca/events","assignees_url":"https://api.github.com/repos/greenplum-db/gporca/assignees{/user}","branches_url":"https://api.github.com/repos/greenplum-db/gporca/branches{/branch}","tags_url":"https://api.github.com/repos/greenplum-db/gporca/tags","blobs_url":"https://api.github.com/repos/greenplum-db/gporca/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/greenplum-db/gporca/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/greenplum-db/gporca/git/refs{/sha}","trees_url":"https://api.github.com/repos/greenplum-db/gporca/git/trees{/sha}","statuses_url":"https://api.github.com/repos/greenplum-db/gporca/statuses/{sha}","languages_url":"https://api.github.com/repos/greenplum-db/gporca/languages","stargazers_url":"https://api.github.com/repos/greenplum-db/gporca/stargazers","contributors_url":"https://api.github.com/repos/greenplum-db/gporca/contributors","subscribers_url":"https://api.github.com/repos/greenplum-db/gporca/subscribers","subscription_url":"https://api.github.com/repos/greenplum-db/gporca/subscription","commits_url":"https://api.github.com/repos/greenplum-db/gporca/commits{/sha}","git_commits_url":"https://api.github.com/repos/greenplum-db/gporca/git/commits{/sha}","comments_url":"https://api.github.com/repos/greenplum-db/gporca/comments{/number}","issue_comment_url":"https://api.github.com/repos/greenplum-db/gporca/issues/comments{/number}","contents_url":"https://api.github.com/repos/greenplum-db/gporca/contents/{+path}","compare_url":"https://api.github.com/repos/greenplum-db/gporca/compare/{base}...{head}","merges_url":"https://api.github.com/repos/greenplum-db/gporca/merges","archive_url":"https://api.github.com/repos/greenplum-db/gporca/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/greenplum-db/gporca/downloads","issues_url":"https://api.github.com/repos/greenplum-db/gporca/issues{/number}","pulls_url":"https://api.github.com/repos/greenplum-db/gporca/pulls{/number}","milestones_url":"https://api.github.com/repos/greenplum-db/gporca/milestones{/number}","notifications_url":"https://api.github.com/repos/greenplum-db/gporca/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/greenplum-db/gporca/labels{/name}","releases_url":"https://api.github.com/repos/greenplum-db/gporca/releases{/id}","deployments_url":"https://api.github.com/repos/greenplum-db/gporca/deployments","created_at":"2015-12-11T20:24:47Z","updated_at":"2018-10-17T03:56:43Z","pushed_at":"2018-10-17T00:00:41Z","git_url":"git://github.com/greenplum-db/gporca.git","ssh_url":"git@github.com:greenplum-db/gporca.git","clone_url":"https://github.com/greenplum-db/gporca.git","svn_url":"https://github.com/greenplum-db/gporca","homepage":"","size":43786,"stargazers_count":153,"watchers_count":153,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":88,"mirror_url":null,"archived":false,"open_issues_count":32,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":88,"open_issues":32,"watchers":153,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/greenplum-db/gporca/pulls/413"},"html":{"href":"https://github.com/greenplum-db/gporca/pull/413"},"issue":{"href":"https://api.github.com/repos/greenplum-db/gporca/issues/413"},"comments":{"href":"https://api.github.com/repos/greenplum-db/gporca/issues/413/comments"},"review_comments":{"href":"https://api.github.com/repos/greenplum-db/gporca/pulls/413/comments"},"review_comment":{"href":"https://api.github.com/repos/greenplum-db/gporca/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/greenplum-db/gporca/pulls/413/commits"},"statuses":{"href":"https://api.github.com/repos/greenplum-db/gporca/statuses/dbfc66599d42b46f3ab2dcb39e5dce60312ef8fd"}},"author_association":"NONE"}}
{"actor":{"display_login":"vraghavan78"}}