Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nTmR1-0005rA-4e for pgsql-hackers@arkaria.postgresql.org; Mon, 14 Mar 2022 15:16:35 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nTmQz-0001eS-TC for pgsql-hackers@arkaria.postgresql.org; Mon, 14 Mar 2022 15:16:33 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nTmQy-0001eH-Nb for pgsql-hackers@lists.postgresql.org; Mon, 14 Mar 2022 15:16:33 +0000 Received: from mail-me3aus01olkn20802.outbound.protection.outlook.com ([2a01:111:f403:7004::802] helo=AUS01-ME3-obe.outbound.protection.outlook.com) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nTmQv-0002CZ-19 for pgsql-hackers@lists.postgresql.org; Mon, 14 Mar 2022 15:16:31 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=X9YRhidIdJ+g6KfG4qnSRooKjRKUaoHuMRtMHEFazk8FLKIV5ifJM+qRtvmrHjY0Wn3vLyVitjVRNgFGzoHO0DVyygZt7E7webWvnnIUMQvLBJLUFUG+XJG79JJengx0tHfrYoTID9k01XWuO1rOWJ251SJA3DrjSLi/rar36oNu+1JQuD5M9pYLw7WO+9qjOA2/wHIzTWCPpfyDRs5ITJCj/4v02R8sVkvnTQiLvh2SFm2uESPGPGpWd8A18+Ftrvx2JgzRJX9SPHJfXLTljNiLZs9aO2v6P7r8K8A8bTxgOQqm1k4QrJVYD7DS+jkxGabKBHfVo+tiKZ2/VhdBGQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Aj4XriwK68AK5JaayKRBjvoidKI2kzEcR62XLqRxnd8=; b=CICbK0F1yIJgFQH+w++oz3VJgj1FcewFlTWKDB/NQaKgNQ3qjQz/Za1Ahe5Fmmd72QUSrpjWFBBctstieZp8mGAJ+nN4nHCYjAIikJMST46Zu5APTdPiq7snx7GV+7gO+6pkvmaLuJaI8osVvjVYGWZW4oBkqyJ8+ei557fNzfBbnPWA0CN1tNHK56ifqDP9RA+9Y9daRW0vzBHnuTUm3r8CH7sBEzGNw1VA3hem9OvHg6GgaqtgCBCNxhTZHYB8zCM+yOxYHwuACq5jXei4xAnuebDkEXZKRD4OMaJG/1gEFJIDQGa/drDougoPygDs+vVLTE0gaG6/VUbmNQHHbA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Aj4XriwK68AK5JaayKRBjvoidKI2kzEcR62XLqRxnd8=; b=NoilbDIC+I2I4SUdHPFY0Bvl4nboyFLVb5QxoOi+tPJGzkWD0UrjvYa+jdd5DbmMEq+hhX9JtzwbZDzE21DgOrA8p7GNzems1Ybzjs0pYgSLjvspNeOZ9auXf/q3RolrEXF8ZqMi91AQIM0KLmknsuqwoYO0r/RF4xzEGSKyePyjGf6ukU1bgP+cUPrC4PjT4huT3TgQCAlDZDcIXVaMvtTFygH3hCxfKrYO/yJhgjVeOki2k6XZ63/7jAQgg2cQBaquw7sK7e6FD7dDTy0ZEVRzpNZAV4rHE5xZr31iV8HJtPEx2oSjD5BABN+5doAHtv3HiQYbCGjXJcjKOWxbmg== Received: from MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM (2603:10c6:220:c3::12) by ME2P282MB0019.AUSP282.PROD.OUTLOOK.COM (2603:10c6:220:55::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5061.24; Mon, 14 Mar 2022 15:16:20 +0000 Received: from MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM ([fe80::212d:b423:fd9e:4e11]) by MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM ([fe80::212d:b423:fd9e:4e11%6]) with mapi id 15.20.5061.028; Mon, 14 Mar 2022 15:16:20 +0000 References: <202203120353.sdof7mld5qfc@alvherre.pgsql> User-agent: mu4e 1.4.14; emacs 27.1 From: Japin Li To: Alvaro Herrera Cc: Zhihong Yu , Simon Riggs , Pg Hackers , Tomas Vondra , Daniel Westermann , Amit Langote , Justin Pryzby , Erik Rijkers , Jaime Casanova , Andres Freund Subject: Re: support for MERGE In-reply-to: <202203120353.sdof7mld5qfc@alvherre.pgsql> Date: Mon, 14 Mar 2022 23:16:11 +0800 Message-ID: Content-Type: text/plain X-TMN: [cNbDRXjVys3dX8C7wcPMSElqjqyGFj//] X-ClientProxiedBy: HK0PR03CA0107.apcprd03.prod.outlook.com (2603:1096:203:b0::23) To MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM (2603:10c6:220:c3::12) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: bc8567b5-f9c1-4493-a65a-08da05cd97f0 X-MS-TrafficTypeDiagnostic: ME2P282MB0019:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: klnOIgv4j3h6NNvmCrVaa1EWphLo5P4MWIu4EYD9kIbJF5KtWHMPPF82owzkNb9vINtgAhn3GfKQEF0o1u/txv0dGQFoX2hF2kx4Yhk9+hE5reR6ylUEgir+0Dee+CxsH8AjSrF8y9k5ZtlFwBKxC5X7NK94L8wjaUahfvx4No2beQyZMC1H0WqBj9YLpmR4J6IMbhGE6XOHtp53Aj01YXa/qI/HfMhesIQyz5xf9zr9Wp7sdnmB0TmpC5ke07wBiA1qxvehmT7XMRM5ZPAoy3izd7FHQYdHK/ku28n4SI1bX+i7lOrwMaKARhI3veZ8CkE0B/4hwMKtIYojRQZ3pMb2TxIGEbLncqgT/pND2rYYyib/fh4wolEE9HxFmUMBkgwEK6nR1fKgLFTxU2KktMW/KU+nVjx6TYZ/VkwM1kecggFmOUC3529DQR6erW7fmmkEwHMeXvc2+1rbvTaumdfPXiIvOMC/+/sR3SKz8dsuI+wAyHh/wzZ9YdZoxULQPs3NQ/MVlTpGKzsW9D5/4qLTRqyZuSp3ZzFSiIMN5Mawq9ebRdM6xCXVs3oSY5hN4/pFuj4JilQGeGcHBYwxAg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?l45E9ZZU3Y7LB52vd//JtDo4PrrwU6YsQmlNKCAThhWR9NMVRIzhifO7fPMx?= =?us-ascii?Q?D9SMBBamil1hLNJKc/djHxzRtkCMCjULp4IPMJ6Nkzfv9uG/MWJh+hQUcN/Q?= =?us-ascii?Q?1TkNCuM/6ZqZKiv4No2jLBHh3f8au32TznCqESJXoni3LMgNj6XQGmMi5Fry?= =?us-ascii?Q?nAOC8knIOrBU6OITjwmHvU2Xm8QBxXtn+h/SMf+s+8cH2xZYhEDwlPZw017R?= =?us-ascii?Q?LQdCsGwDltjVnTCiulAm6t9uj64Qd9pnLMyZ80Injft1zB5M3il4WMEL6QiT?= =?us-ascii?Q?3S004kiBmM2ugWdYZJ41OY2LIkTuX8MqUB4nQhHg4SXGMgpSIcg3vd5TUCtu?= =?us-ascii?Q?QeGcaDZASpuHI5LvyP1YChPFSytRkM/HMdMGgrE1ggSMoN0Fvv68GX0qB97J?= =?us-ascii?Q?fSH0DYf23G53pfT/v8G3MqKmBaldV+9tZDJ+TQcoWmU8l/Ftk/qhFCV4ECRz?= =?us-ascii?Q?jGog3C8TPuzVMhppT7xuoAAbDoTtSaGcolx9yRiMYDTmNOmY0lByKb6yZ/YY?= =?us-ascii?Q?f+/PyC22vIApiljWHnlGUBoq6GaRrH9yXNM5sfpd78XztuzcF9pavnG4hwvh?= =?us-ascii?Q?jIhgJaq2iFtj+HCoC/4+3iZKHFlHcDNRBeaHSa7/UPki3cnl1ItTeNtEGQui?= =?us-ascii?Q?DrDi+EsA88uGR6GrOH09OzwIGXzJpirv2aeVBtV48hXKNUoFAIsz2kHQaTYJ?= =?us-ascii?Q?DK1gTSnuBHhzQvgIQkcqx9xqN3/HNiSyifI+D75QhXLBQkd/5r9KxEOcYyhQ?= =?us-ascii?Q?/FljkYDZ14VCRqKCWuh6wbk/aKsdBAECAcDAovqwTlljVi+I9c8CXh4Ms9q7?= =?us-ascii?Q?Nz/4S7BS4PmP0ED7nQwnKV9pwcVpuLOT58/9bGsdfhJQL0Rm5DpnAYIpbmnE?= =?us-ascii?Q?lT+0dWmZayQPA/rnA0OUENgtPoTfWATG1gX+i+LXzQ36BcxTUWjs3Kx748/Z?= =?us-ascii?Q?G6G5r5gpUk+T6sBt3PmyNhLatnUTOMIk9WvJJ81TdBZk5TZmzBZ9ZJTf86D2?= =?us-ascii?Q?3vTiy7WS1sE8viNBZPu5+9ScY8ZpU9tZDpEtWHs2A6SZ8KCm8yBFQJDoiHWr?= =?us-ascii?Q?c/WHDmXoEGhlNw0iihGWFMAoHOurr+SoAZ+hICPD+a4TKh26jf4rKeA4WgoN?= =?us-ascii?Q?IhgAphrwh3h4e+KE7T0DDJuWYWnCLZVCQg=3D=3D?= X-OriginatorOrg: sct-15-20-4755-11-msonline-outlook-746f3.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: bc8567b5-f9c1-4493-a65a-08da05cd97f0 X-MS-Exchange-CrossTenant-AuthSource: MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Mar 2022 15:16:20.5817 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: ME2P282MB0019 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Sat, 12 Mar 2022 at 11:53, Alvaro Herrera wrote: > On 2022-Mar-09, Zhihong Yu wrote: > >> Hi, >> For v14-0002-Split-ExecUpdate-and-ExecDelete-in-reusable-piec.patch : >> >> + TupleTableSlot *insertProjectedTuple; >> >> With `insert` at the beginning of the variable name, someone may think it >> is a verb. How about naming the variable projectedTupleFromInsert (or >> something similar) ? > > I went with projectedFromInsert. I don't feel a need to call it a > "tuple" because it's already a TupleTableSlot * ... > >> + if (!ExecBRDeleteTriggers(context->estate, context->epqstate, >> + resultRelInfo, tupleid, oldtuple, >> + epqreturnslot)) >> + /* some trigger made the delete a no-op; let caller know */ >> + return false; >> >> It seems you can directly return the value returned >> from ExecBRDeleteTriggers(). > > True, let's do that. > > On 2022-Mar-10, Simon Riggs wrote: > >> Various cases were not tested in the patch - additional patch >> attached, but nothing surprising there. > > Thanks, incorporated here. > > This is mostly just a rebase to keep cfbot happy. Hi, hackers + ar_delete_trig_tcs = mtstate->mt_transition_capture; + if (mtstate->operation == CMD_UPDATE && mtstate->mt_transition_capture && + mtstate->mt_transition_capture->tcs_update_old_table) + { + ExecARUpdateTriggers(estate, resultRelInfo, tupleid, oldtuple, + NULL, NULL, mtstate->mt_transition_capture); + + /* + * We've already captured the NEW TABLE row, so make sure any AR + * DELETE trigger fired below doesn't capture it again. + */ + ar_delete_trig_tcs = NULL; + } Maybe we can use ar_delete_trig_tcs in if condition and ExecARUpdateTriggers() to make the code shorter. + /* "old" transition table for DELETE, if any */ + Tuplestorestate *old_del_tuplestore; + /* "new" transition table INSERT, if any */ + Tuplestorestate *new_ins_tuplestore; Should we add "for" for transition INSERT comment? +MERGE is a multiple-table, multiple-action command: it specifies a target +table and a source relation, and can contain multiple WHEN MATCHED and +WHEN NOT MATCHED clauses, each of which specifies one UPDATE, INSERT, +UPDATE, or DO NOTHING actions. The target table is modified by MERGE, +and the source relation supplies additional data for the actions I think the "source relation" is inaccurate. How about using "data source" like document? -- Regrads, Japin Li. ChengDu WenWu Information Technology Co.,Ltd.