{"push_id":2013718827,"size":56,"distinct_size":56,"ref":"refs/heads/concourse_run_test","head":"47128e0ed42f48202f7a561417f81d2577523e65","before":"7265822df9f369d40cce8a4ab61f2a0585005ff9","commits":[{"sha":"f35b369c7d91a8f25469f98ee0c7e9d0cea524ef","author":{"name":"Lav Jain","email":"cdf3b377c75a05eedccc092daeac7dddeb1d1ac9@pivotal.io"},"message":"Running 'make clean' does not remove objects under bin/gpcheckcloud (#3377)","distinct":true,"url":"https://api.github.com/repos/jimmyyih/gpdb/commits/f35b369c7d91a8f25469f98ee0c7e9d0cea524ef"},{"sha":"f1bfd7d9451f8d615b30d7e0a3db827fa2150ba1","author":{"name":"Lav Jain","email":"cdf3b377c75a05eedccc092daeac7dddeb1d1ac9@pivotal.io"},"message":"Revert \"Running 'make clean' does not remove objects under bin/gpcheckcloud (#3377)\"\n\nThis reverts commit f35b369c7d91a8f25469f98ee0c7e9d0cea524ef.","distinct":true,"url":"https://api.github.com/repos/jimmyyih/gpdb/commits/f1bfd7d9451f8d615b30d7e0a3db827fa2150ba1"},{"sha":"2bc5401c3f8ce48cc168252eacc26668e67f0ec1","author":{"name":"Mel Kiyama","email":"a8b33018550b5a161381e2daf08e92d0b8b531a1@users.noreply.github.com"},"message":"docs: COPY... ON SEGMENT w/ SELECT is not supported. (#3348)","distinct":true,"url":"https://api.github.com/repos/jimmyyih/gpdb/commits/2bc5401c3f8ce48cc168252eacc26668e67f0ec1"},{"sha":"b4cfe39292ed2ebeeea648c3005369540bd49b25","author":{"name":"Nadeem Ghani","email":"e96fbb93d2cda7ffb265eda2d565a52d20d8d040@pivotal.io"},"message":"Force behave to use older version of its dependency\n\nBehave by default just grabs the latest parse_type package as part of\nthe setup requirement. However, the newest parse_type package (0.4.2)\nuses a new convention on how it handles packaging which is not in the\nolder python versions before 2.7.13. Since we're in python 2.7.12, we\nbreak.\n\nForce requirement to use an older version as a hack to bypass this\nissue.\n\nSigned-off-by: Marbin Tan <mtan@pivotal.io>","distinct":true,"url":"https://api.github.com/repos/jimmyyih/gpdb/commits/b4cfe39292ed2ebeeea648c3005369540bd49b25"},{"sha":"56cdb519ea05cd8c63e8d1d80ea65cee257c4c28","author":{"name":"Lisa Owen","email":"7192fc92da68c6215ddb4130cc4593d3ab33b9a0@pivotal.io"},"message":"docs - restructure admin guide top level topics (#3389)\n\n* admin guide working w/dbs section - pull some topics up a level\r\n\r\n* promote ddl, crud topics; move querying topic up","distinct":true,"url":"https://api.github.com/repos/jimmyyih/gpdb/commits/56cdb519ea05cd8c63e8d1d80ea65cee257c4c28"},{"sha":"b68bcd893aadf1e75783e23d00c22e560a076a0c","author":{"name":"Lisa Owen","email":"7192fc92da68c6215ddb4130cc4593d3ab33b9a0@pivotal.io"},"message":"docs - simplify the CREATE EXERNAL TABLE ref page (part 1) (#3379)","distinct":true,"url":"https://api.github.com/repos/jimmyyih/gpdb/commits/b68bcd893aadf1e75783e23d00c22e560a076a0c"},{"sha":"fe2eb2c9ed3789e0dc07386202d2c8932bd54ca8","author":{"name":"Ekta Khanna","email":"4c9e1b2261913655be26cd5cea6e7d4079f6437b@pivotal.io"},"message":"Implement SEMI and ANTI joins in the planner and executor.\n\ncommit e006a24ad152b3faec748afe8c1ff0829699b2e6\nAuthor: Tom Lane <tgl@sss.pgh.pa.us>\nDate:   Thu Aug 14 18:48:00 2008 +0000\n\n    Implement SEMI and ANTI joins in the planner and executor.  (Semijoins replace\n    the old JOIN_IN code, but antijoins are new functionality.)  Teach the planner\n    to convert appropriate EXISTS and NOT EXISTS subqueries into semi and anti\n    joins respectively.  Also, LEFT JOINs with suitable upper-level IS NULL\n    filters are recognized as being anti joins.  Unify the InClauseInfo and\n    OuterJoinInfo infrastructure into \"SpecialJoinInfo\".  With that change,\n    it becomes possible to associate a SpecialJoinInfo with every join attempt,\n    which permits some cleanup of join selectivity estimation.  That needs to be\n    taken much further than this patch does, but the next step is to change the\n    API for oprjoin selectivity functions, which seems like material for a\n    separate patch.  So for the moment the output size estimates for semi and\n    especially anti joins are quite bogus.\n\nRef [#142355175]\n\nSigned-off-by: Ekta Khanna <ekhanna@pivotal.io>","distinct":true,"url":"https://api.github.com/repos/jimmyyih/gpdb/commits/fe2eb2c9ed3789e0dc07386202d2c8932bd54ca8"},{"sha":"0feb1bd9687e7d1a03964b964bc9cc0e055cfc3d","author":{"name":"Ekta Khanna","email":"4c9e1b2261913655be26cd5cea6e7d4079f6437b@pivotal.io"},"message":"CDBlize the cherry-pick e006a24\n\nOriginal Flow:\ncdb_flatten_sublinks\n\t+--> pull_up_IN_clauses\n\t\t+--> convert_sublink_to_join\n\nNew Flow:\ncdb_flatten_sublinks\n\t+--> pull_up_sublinks\n\nThis commit contains relevant changes for the above flow.\n\nPreviously, `try_join_unique` was part of `InClauseInfo`. It was getting\nset in `convert_IN_to_join()` and used in `cdb_make_rel_dedup_info()`.\nNow, since `InClauseInfo` is not present and we construct\n`FlattenedSublink` instead in `convert_ANY_sublink_to_join()`. And later\nin the flow, we construct `SpecialJoinInfo` from `FlattenedSublink` in\n`deconstruct_sublink_quals_to_rel()`. Hence, adding `try_join_unique` as\npart of both `FlattenedSublink` and `SpecialJoinInfo`.\n\nRef [#142355175]\n\nSigned-off-by: Ekta Khanna <ekhanna@pivotal.io>","distinct":true,"url":"https://api.github.com/repos/jimmyyih/gpdb/commits/0feb1bd9687e7d1a03964b964bc9cc0e055cfc3d"},{"sha":"2b5c1b9e3e31a21788f909859f3f956b365ad803","author":{"name":"Dhanashree Kashid","email":"a7113a6f4ccd27890471715685a45013ab2c9271@pivotal.io"},"message":"Remove old pullup functions after merging e006a24\n\nWith the new flow, we don't need the following functions:\n\n - pull_up_IN_clauses\n - convert_EXISTS_to_join\n - convert_NOT_EXISTS_to_antijoin\n - not_null_inner_vars\n - safe_to_convert_NOT_EXISTS\n - convert_sublink_to_join\n\nRef [#142355175]\n\nSigned-off-by: Ekta Khanna <ekhanna@pivotal.io>","distinct":true,"url":"https://api.github.com/repos/jimmyyih/gpdb/commits/2b5c1b9e3e31a21788f909859f3f956b365ad803"},{"sha":"d91f0efb2e69933f9ae1b4f6190c954cdb3d39d7","author":{"name":"Dhanashree Kashid","email":"a7113a6f4ccd27890471715685a45013ab2c9271@pivotal.io"},"message":"Add pullup decisions in `convert_EXISTS_sublink_to_join`\n\nAfter merging with e006a24, this commit adds CDB specific restrictions\nas follows:\n\n0. Add pullup decisions specific to CDB from\n`convert_EXISTS_to_join` and `convert_NOT_EXISTS_to_join`\n\n0. Before this cherry-pick, we used to generate extra quals\nfor the NOT EXISTS query. This was done by calling `cdbpullup_expr()`\nin `convert_NOT_EXISTS_to_join()`.\nHowever, for the exact same query with EXISTS, we never generated these\nextra quals.\n```\ncreate table foo(t text, n numeric, i int, v varchar(10)) distributed by (t);\nexplain select * from foo t0 where not exists (select 1 from foo t1 where t0.i=t1.i + 1);\n                                           QUERY PLAN\n-------------------------------------------------------------------------------------------------\n Gather Motion 3:1  (slice2; segments: 3)  (cost=1.08..2.12 rows=4 width=19)\n   ->  Hash Left Anti Semi Join  (cost=1.08..2.12 rows=2 width=19)\n         Hash Cond: t0.i = (t1.i + 1)\n         ->  Seq Scan on foo t0  (cost=0.00..1.00 rows=1 width=19)\n         ->  Hash  (cost=1.04..1.04 rows=1 width=4)\n               ->  Broadcast Motion 3:3  (slice1; segments: 3)  (cost=0.00..1.04 rows=1 width=4)\n                     ->  Seq Scan on foo t1  (cost=0.00..1.00 rows=1 width=4)\n                           Filter: (i + 1) IS NOT NULL  -> extra filter\n Settings:  optimizer=off\n Optimizer status: legacy query optimizer\n(10 rows)\n\nexplain select * from foo t0 where exists (select 1 from foo t1 where t0.i=t1.i + 1);\n                                           QUERY PLAN\n-------------------------------------------------------------------------------------------------\n Gather Motion 3:1  (slice2; segments: 3)  (cost=1.08..2.12 rows=4 width=19)\n   ->  Hash EXISTS Join  (cost=1.08..2.12 rows=2 width=19)\n         Hash Cond: t0.i = (t1.i + 1)\n         ->  Seq Scan on foo t0  (cost=0.00..1.00 rows=1 width=19)\n         ->  Hash  (cost=1.04..1.04 rows=1 width=4)\n               ->  Broadcast Motion 3:3  (slice1; segments: 3)  (cost=0.00..1.04 rows=1 width=4)\n                     ->  Seq Scan on foo t1  (cost=0.00..1.00 rows=1 width=4)\n Settings:  optimizer=off\n Optimizer status: legacy query optimizer\n(9 rows)\n\n```\nCurrently with this commit, the combined pull-up code for EXISTS and NOT EXISTS\ndoes not generate extra filters. This will be a future TODO.\n\n0. Use `is_simple_subquery` in `simplify_EXISTS_query` to check if\nsubquery can be pulled up or not.\n\nRef [#142355175]\n\nSigned-off-by: Dhanashree Kashid <dkashid@pivotal.io>","distinct":true,"url":"https://api.github.com/repos/jimmyyih/gpdb/commits/d91f0efb2e69933f9ae1b4f6190c954cdb3d39d7"},{"sha":"7be2c0ad2408b383b85e816943f8c46554e212f0","author":{"name":"Ekta Khanna","email":"4c9e1b2261913655be26cd5cea6e7d4079f6437b@pivotal.io"},"message":"Add pullup decisions in `convert_ANY_sublink_to_join`\n\nAdd pullup decisions specific to CDB from `convert_IN_to_join`\n\nRef [#142355175]\n\nSigned-off-by: Dhanashree Kashid <dkashid@pivotal.io>","distinct":true,"url":"https://api.github.com/repos/jimmyyih/gpdb/commits/7be2c0ad2408b383b85e816943f8c46554e212f0"},{"sha":"db853de9fac2ba647e8097b8751d26676f21488a","author":{"name":"Ekta Khanna","email":"4c9e1b2261913655be26cd5cea6e7d4079f6437b@pivotal.io"},"message":"Replace JOIN_IN by JOIN_SEMI in ORCA translator\n\nAfter merging with e006a24, the jointype JOIN_IN has been renamed to\nJOIN_SEMI.\nThis commit makes appropriate changes in ORCA for the same.\n\nRef [#142355175]\n\nSigned-off-by: Dhanashree Kashid <dkashid@pivotal.io>","distinct":true,"url":"https://api.github.com/repos/jimmyyih/gpdb/commits/db853de9fac2ba647e8097b8751d26676f21488a"},{"sha":"8b63aafb2dbfc9471f57b31970493c211472e83d","author":{"name":"Ekta Khanna","email":"4c9e1b2261913655be26cd5cea6e7d4079f6437b@pivotal.io"},"message":"Remove InClauseInfo and OuterJoinInfo\n\nSince `InClauseInfo` and `OuterJoinInfo` are now combined into\n`SpecialJoinInfo` after merging with e006a24; this commit remove them\nfrom the relevant places.\n\nAccess `join_info_list` instead of `in_info_list` and `oj_info_list`\n\nPreviously, `CdbRelDedupInfo` contained list of `InClauseInfo` s. While\nmaking join decisions and overall join processing, we traversed this list\nand invoked cdb specific functions: `cdb_make_rel_dedup_info()`, `cdbpath_dedup_fixup()`\n\nSince `InClauseInfo` is no longer available,  `CdbRelDedupInfo` will contain list of\n`SpecialJoinInfo` s. All the cdb specific routines which were previously called for\n`InClauseInfo` list will now be called if `CdbRelDedupInfo` has valid `SpecialJoinInfo`\nlist and if join type in `SpecialJoinInfo` is `JOIN_SEMI`. A new helper routine `hasSemiJoin()`\nhas been added which traverses `SpecialJoinInfo` list to check if it contains `JOIN_SEMI`.\n\nRef [#142355175]\n\nSigned-off-by: Dhanashree Kashid <dkashid@pivotal.io>","distinct":true,"url":"https://api.github.com/repos/jimmyyih/gpdb/commits/8b63aafb2dbfc9471f57b31970493c211472e83d"},{"sha":"6e7b4722b11755ff0c8fac9fe2e0b3a0698cff98","author":{"name":"Ekta Khanna","email":"4c9e1b2261913655be26cd5cea6e7d4079f6437b@pivotal.io"},"message":"Replace JOIN_LASJ by JOIN_ANTI\n\nAfter merging with e006a24, Anti Semi Join will\nbe denoted by `JOIN_ANTI` instead of `JOIN_LASJ`\n\nRef [#142355175]\n\nSigned-off-by: Dhanashree Kashid <dkashid@pivotal.io>","distinct":true,"url":"https://api.github.com/repos/jimmyyih/gpdb/commits/6e7b4722b11755ff0c8fac9fe2e0b3a0698cff98"},{"sha":"102295b84e48b3b59191e73cc10fb3916ee95cdb","author":{"name":"Ekta Khanna and Omer Arap","email":"4c9e1b2261913655be26cd5cea6e7d4079f6437b@pivotal.io"},"message":"Update test output files and indentation\n\nThis commit updates test answer files after merging with e006a24.\n\n0. Replace `EXISTS Join` to `Semi Join`\n0. Replace `Left Anti Semi Join` to `Anti Join`\n0. Updated plan for `table_functions` for IN queries as we do not pull\nup the sublink and convert it into a join when sublink testexpr does not\ncontain Vars of parent query.\n0. Updated the error in `rangefuncs.out` since we now create a different\nplan for the following query :\n```\nCREATE TABLE foorescan (fooid int, foosubid int, fooname text, primary key(fooid,foosubid));\nINSERT INTO foorescan values(5000,1,'abc.5000.1');\nINSERT INTO foorescan values(5001,1,'abc.5001.1');\nCREATE FUNCTION foorescan(int,int) RETURNS setof foorescan AS 'SELECT * FROM foorescan WHERE fooid >= $1 and fooid < $2 ;' LANGUAGE SQL;\nSELECT * FROM foorescan f WHERE f.fooid IN (SELECT fooid FROM foorescan(5002,5004)) ORDER BY 1,2;\n```\nPlan before fix :\n```\n                                              QUERY PLAN\n------------------------------------------------------------------------------------------------------\n Sort  (cost=270.41..270.54 rows=50 width=50)\n   Sort Key: f.fooid, f.foosubid\n   ->  HashAggregate  (cost=268.50..269.00 rows=50 width=50)\n         Group By: f.ctid::bigint, f.gp_segment_id\n         ->  Hash Join  (cost=5.12..268.25 rows=50 width=29)\n               Hash Cond: foorescan.fooid = f.fooid\n               ->  Function Scan on foorescan  (cost=0.00..260.00 rows=1000 width=4)\n               ->  Hash  (cost=4.50..4.50 rows=17 width=29)\n                     ->  Gather Motion 3:1  (slice1; segments: 3)  (cost=0.00..4.50 rows=50 width=29)\n                           ->  Seq Scan on foorescan f  (cost=0.00..3.50 rows=17 width=29)\n Settings:  optimizer=off\n Optimizer status: legacy query optimizer\n(12 rows)\n\n```\nhere the function scan is done on master and since the function is\naccessing a distributed relation,  `cdbdisp_dispatchToGang()`\nerrors out.\n\nPlan after fix:\n```\n explain SELECT * FROM foorescan f WHERE f.fooid IN (SELECT fooid FROM foorescan(5002,5004)) ORDER BY 1,2;\n                                              QUERY PLAN\n------------------------------------------------------------------------------------------------------\n Gather Motion 3:1  (slice3; segments: 3)  (cost=299.16..299.29 rows=50 width=19)\n   Merge Key: f.fooid, f.foosubid\n   ->  Sort  (cost=299.16..299.29 rows=17 width=19)\n         Sort Key: f.fooid, f.foosubid\n         ->  Hash Semi Join  (cost=292.50..297.75 rows=17 width=19)\n               Hash Cond: f.fooid = foorescan.fooid\n               ->  Redistribute Motion 3:3  (slice1; segments: 3)  (cost=0.00..4.50 rows=17 width=19)\n                     Hash Key: f.fooid\n                     ->  Seq Scan on foorescan f  (cost=0.00..3.50 rows=17 width=19)\n               ->  Hash  (cost=280.00..280.00 rows=334 width=4)\n                     ->  Redistribute Motion 1:3  (slice2)  (cost=0.00..280.00 rows=1000 width=4)\n                           Hash Key: foorescan.fooid\n                           ->  Function Scan on foorescan  (cost=0.00..260.00 rows=1000 width=4)\n Settings:  optimizer=off\n Optimizer status: legacy query optimizer\n(15 rows)\n```\nWith this new plan, function scan is executed on segment in which case\n`init_sql_fcache()` first walks the query tree and checks if it is safe\nto be planned and executed on the segment using `querytree_safe_for_segment_walker()`.\n`querytree_safe_for_segment_walker()` errors out since the function is\naccessing distributed table. Both the new and old errors are testing the same scenario.\nBut due to plan change, the place where we bail out is different.\n\nRef [#142355175]\n\nSigned-off-by: Ekta Khanna <ekhanna@pivotal.io>","distinct":true,"url":"https://api.github.com/repos/jimmyyih/gpdb/commits/102295b84e48b3b59191e73cc10fb3916ee95cdb"},{"sha":"1ddcb97ef0798c4456204cb3a0e7b60a8f42ead2","author":{"name":"Ekta Khanna","email":"4c9e1b2261913655be26cd5cea6e7d4079f6437b@pivotal.io"},"message":"Improve sublink pullup code to handle ANY/EXISTS sublinks\n\ncommit 19e34b62395b36513a8e6c35ddfbeef12dd1e89f\nAuthor: Tom Lane <tgl@sss.pgh.pa.us>\nDate:   Sun Aug 17 01:20:00 2008 +0000\n\n    Improve sublink pullup code to handle ANY/EXISTS sublinks that are at top\n    level of a JOIN/ON clause, not only at top level of WHERE.  (However, we\n    can't do this in an outer join's ON clause, unless the ANY/EXISTS refers\n    only to the nullable side of the outer join, so that it can effectively\n    be pushed down into the nullable side.)  Per request from Kevin Grittner.\n\n    In passing, fix a bug in the initial implementation of EXISTS pullup:\n    it would Assert if the EXIST's WHERE clause used a join alias variable.\n    Since we haven't yet flattened join aliases when this transformation\n    happens, it's necessary to include join relids in the computed set of\n    RHS relids.\n\nRef [#142356521]\n\nSigned-off-by: Ekta Khanna <ekhanna@pivotal.io>","distinct":true,"url":"https://api.github.com/repos/jimmyyih/gpdb/commits/1ddcb97ef0798c4456204cb3a0e7b60a8f42ead2"},{"sha":"330dd1b3802515d8c7d46f93cb3193ec26d08005","author":{"name":"Dhanashree Kashid","email":"a7113a6f4ccd27890471715685a45013ab2c9271@pivotal.io"},"message":"Get rid of the rather fuzzily defined FlattenedSubLink node type\n\ncommit e549722a8b2fcc5b2ad9a9bd53948466ea5dae26\nAuthor: Tom Lane <tgl@sss.pgh.pa.us>\nDate:   Wed Feb 25 03:30:38 2009 +0000\n\n    Get rid of the rather fuzzily defined FlattenedSubLink node type in favor of\n    making pull_up_sublinks() construct a full-blown JoinExpr tree representation\n    of IN/EXISTS SubLinks that it is able to convert to semi or anti joins.\n    This makes pull_up_sublinks() a shade more complex, but the gain in semantic\n    clarity is worth it.  I still have more to do in this area to address the\n    previously-discussed problems, but this commit in itself fixes at least one\n    bug in HEAD, as shown by added regression test case.\n\nRef [#142356521]\n\nSigned-off-by: Ekta Khanna <ekhanna@pivotal.io>","distinct":true,"url":"https://api.github.com/repos/jimmyyih/gpdb/commits/330dd1b3802515d8c7d46f93cb3193ec26d08005"},{"sha":"e5f6e82636476cc4f85c8b4abe4e8755f2bd931e","author":{"name":"Shreedhar Hardikar","email":"6de7cf2ba6ba9dcfd239fb92c6f2168443ee4096@pivotal.io"},"message":"CDB Specific changes, other fix-ups after merging e549722\n\n0. Fix up post join dedup logic after cherry-pick\n0. Fix pull_up_sublinks_jointree_recurse returning garbage relids\n0. Update gporca, rangefuncs, eagerfree answer fileis\n\t1. gporca\n\tPreviously we were generating a Hash Inner Join with an\n\tHashAggregate for deduplication. Now we generate a Hash\n\tSemi Join in which case we do not need to deduplicate the\n\tinner.\n\n\t2. rangefuncs\n\tWe updated this answer file during the cherry-pick of\n\te006a24a since there was a change in plan.\n\tAfter these cherry-picks, we are back to the original\n\tplan as master. Hence we see the original error.\n\n\t3. eagerfree\n\tWe are generating a not-very-useful subquery scan node\n\twith this change. This is not producing wrong results.\n\tBut this subqeury scan needs to be removed.\n\tWe will file a follow-up chore to investigate and fix this.\n\n0. We no longer need helper function `hasSemiJoin()` to check whether\nthis specialInfo list has any specialJoinInfos constructed for Semi Join\n(IN/EXISTS sublink). We have moved that check inside\n`cdb_set_cheapest_dedup()`\n\n0. We are not exercising the pre-join-deduplication code path after\nthis cherry-pick. Before this merge, we had three CDB specific\nnodes in `InClauseInfo` in which we recorded information for\npre-join-dedup in case of simple uncorrelated IN sublinks.\n`try_join_unique`, `sub_targetlist` and `InOperators`\nSince we now have `SpecialJoinInfo` instead of `InClauseInfo`, we need\nto devise a way to record this information in `SpecialJoinInfo`.\nWe have filed a follow-up story for this.\n\nRef [#142356521]\n\nSigned-off-by: Dhanashree Kashid <dkashid@pivotal.io>","distinct":true,"url":"https://api.github.com/repos/jimmyyih/gpdb/commits/e5f6e82636476cc4f85c8b4abe4e8755f2bd931e"},{"sha":"efb2777a84b255fa7bd3f82d7c532fc7caa7ddcd","author":{"name":"Dhanashree Kashid, Ekta Khanna and Omer Arap","email":"05e5f925549d6f6f0c7f9c2fad2d2f3b254ca9b9@pivotal.io"},"message":"Implement CDB like pre-join deduplication\n\nFor flattened IN or EXISTS sublinks, if we chose INNER JOIN path instead\nof SEMI JOIN then we need to apply duplicate suppression.\n\nThe deduplication can be done in two ways:\n1. post-join dedup\nunique-ify the inner join results. try_postjoin_dedup in CdbRelDedupInfo denotes\nif we need to got for post-join dedup\n\n2. pre-join dedup\nunique-ify the rows coming from the rel containing the subquery result,\nbefore that is joined with any other rels. join_unique_ininfo in\nCdbRelDedupInfo denotes if we need to go for pre-join dedup.\nsemi_operators and semi_rhs_exprs are used for this. We ported a\nfunction from 9.5 to compute these in make_outerjoininfo().\n\nUpstream has completely different implementation of this. Upstream explores JOIN_UNIQUE_INNER\nand JOIN_UNIQUE_OUTER paths for this and deduplication is done create_unique_path().\nGPDB does this differently since JOIN_UNIQUE_INNER and JOIN_UNIQUE_OUTER are obsolete\nfor us. Hence we have kept the GPDB style deduplication mechanism as it in this merge.\n\nPost-join has been implemented in previous merge commits.\n\nRef [#146890743]","distinct":true,"url":"https://api.github.com/repos/jimmyyih/gpdb/commits/efb2777a84b255fa7bd3f82d7c532fc7caa7ddcd"},{"sha":"e0415acce366611dfe242f6cac4f66762847452b","author":{"name":"Shreedhar Hardikar","email":"6de7cf2ba6ba9dcfd239fb92c6f2168443ee4096@pivotal.io"},"message":"Update subselect EXPLAIN tests\n\nThis commit updates test answer files after merging e006a24, 19e34b6 and\ne549722. As a result of these merges, we produce inferior plans for\nwhich we have added FIX_ME's appropriately. They will be addressed in\nlater commits.","distinct":true,"url":"https://api.github.com/repos/jimmyyih/gpdb/commits/e0415acce366611dfe242f6cac4f66762847452b"}]}
{"actor":{"display_login":"jimmyyih"}}