Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qdu1w-0057p1-Nl for pgsql-hackers@arkaria.postgresql.org; Wed, 06 Sep 2023 15:01:21 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qdu1v-00BA8l-6A for pgsql-hackers@arkaria.postgresql.org; Wed, 06 Sep 2023 15:01:18 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qdu1u-00BA8Q-5H for pgsql-hackers@lists.postgresql.org; Wed, 06 Sep 2023 15:01:18 +0000 Received: from wout3-smtp.messagingengine.com ([64.147.123.19]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qdu1q-0034vO-8l for pgsql-hackers@postgresql.org; Wed, 06 Sep 2023 15:01:16 +0000 Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailout.west.internal (Postfix) with ESMTP id CCC9A32008FF; Wed, 6 Sep 2023 11:01:10 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute3.internal (MEProxy); Wed, 06 Sep 2023 11:01:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :reply-to:sender:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t=1694012470; x= 1694098870; bh=UMxFTEe6RdLZ2kY4oiBpmjzyg3imtKYVF7vqGX0/xb8=; b=n gQOTNpRoDqJgtBRGY+oMR+fWwT03hj5Hfdgb89yU7yWH2Z7QxvVq5O+ByPafZPyu zh0eLck0SBrfVnSgwXWfnPV9/WjPtHEo3p1T9VRcpPzBfAaYlRWmYnQXd1FDv6BO nrlX0IF/v4f+4ujW7n6JHX+oJOOYxw6LxRMY/FRExVsqNm8IaTXmLUt/beb7wvZY VvpHqy/6ZT9xIUQl6HWRela858tq24ZE8A0Q6fQO2lKDGnyBbIBFaUxScTdMDRe9 QTqafruuqUVvytsTBWFiI2vjC1FE4SORJW3lrKUXOJ8xL4q6umr779EeOd+erbBS q3mRlqsL8Upx2Kzxnpumw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedviedrudehfedgkedvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkgggtugfgjgesthekredttddtjeenucfhrhhomheptehlvhgr rhhoucfjvghrrhgvrhgruceorghlvhhhvghrrhgvsegrlhhvhhdrnhhoqdhiphdrohhrgh eqnecuggftrfgrthhtvghrnhepvdektdffudfftdffffehfffhjeejhffgieeuueekjeek fffgudffhfduffffueevnecuffhomhgrihhnpegvnhhtvghrphhrihhsvggusgdrtghomh enucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpegrlhhv hhgvrhhrvgesrghlvhhhrdhnohdqihhprdhorhhg X-ME-Proxy: Feedback-ID: ia2694551:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Wed, 6 Sep 2023 11:01:09 -0400 (EDT) Received: by perhan.alvh.no-ip.org (Postfix, from userid 1000) id 6149D426; Wed, 6 Sep 2023 17:01:06 +0200 (CEST) Date: Wed, 6 Sep 2023 17:01:06 +0200 From: Alvaro Herrera To: Amit Langote Cc: Erik Rijkers , jian he , Andrew Dunstan , PostgreSQL-development Subject: Re: remaining sql/json patches Message-ID: <202309061501.xcwpfa2jjj5n@alvherre.pgsql> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk 0001 is quite mysterious to me. I've been reading it but I'm not sure I grok it, so I don't have anything too intelligent to say about it at this point. But here are my thoughts anyway. Assert()ing that a pointer is not null, and in the next line dereferencing that pointer, is useless: the process would crash anyway at the time of dereference, so the Assert() adds no value. Better to leave the assert out. (This appears both in ExecExprEnableErrorSafe and ExecExprDisableErrorSafe). Is it not a problem to set just the node type, and not reset the contents of the node to zeroes, in ExecExprEnableErrorSafe? I'm not sure if it's possible to enable error-safe on a node two times with an error reported in between; would that result in the escontext filled with junk the second time around? That might be dangerous. Maybe a simple cross-check is to verify (assert) in ExecExprEnableErrorSafe() that the struct is already all-zeroes, so that if this happens, we'll get reports about it. (After all, there are very few nodes that handle the SOFT_ERROR_OCCURRED case). Do we need to have the ->details_wanted flag turned on? Maybe if we're having ExecExprEnableErrorSafe() as a generic tool, it should receive the boolean to use as an argument. Why palloc the escontext always, and not just when ExecExprEnableErrorSafe is called? (At Disable time, just memset it to zero, and next time it is enabled for that node, we don't need to allocate it again, just set the nodetype.) ExecExprEnableErrorSafe() is a strange name for this operation. Maybe you mean ExecExprEnableSoftErrors()? Maybe it'd be better to leave it as NULL initially, so that for the majority of cases we don't even allocate it. In 0002 you're adding soft-error support for a bunch of existing operations, in addition to introducing SQL/JSON query functions. Maybe the soft-error stuff should be done separately in a preparatory patch. I think functions such as populate_array_element() that can now save soft errors and which currently do not have a return value, should acquire a convention to let caller know that things failed: maybe return false if SOFT_ERROR_OCCURRED(). Otherwise it appears that, for instance populate_array_dim_jsonb() can return happily if an error occurs when parsing the last element in the array. Splitting 0002 to have a preparatory patch where all such soft-error-saving changes are introduced separately would help review that this is indeed being handled by all their callers. -- Álvaro Herrera Breisgau, Deutschland — https://www.EnterpriseDB.com/ "Por suerte hoy explotó el califont porque si no me habría muerto de aburrido" (Papelucho)