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 1slwL0-0025ue-8K for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Sep 2024 20:10:46 +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 1slwKy-00EgRN-G6 for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Sep 2024 20:10:44 +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 1slwKy-00EgRF-2e for pgsql-hackers@lists.postgresql.org; Wed, 04 Sep 2024 20:10:44 +0000 Received: from mail-qk1-x72a.google.com ([2607:f8b0:4864:20::72a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1slwKv-000ADd-AE for pgsql-hackers@postgresql.org; Wed, 04 Sep 2024 20:10:42 +0000 Received: by mail-qk1-x72a.google.com with SMTP id af79cd13be357-7a7f94938fcso360785a.1 for ; Wed, 04 Sep 2024 13:10:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dunslane-net.20230601.gappssmtp.com; s=20230601; t=1725480639; x=1726085439; darn=postgresql.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :from:references:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=V/MZrHI52t/Qw8gexQN0oxTiPORYyh6IBdGziikeKVU=; b=uTZ2IcIZSt/h9i+9gUjn1MMwY/n1ob/+HRBTufsTqPXxN7hbGGZmHnkgrvCB+3Bgli DAgPNcBG3oZQK6/g7p6FY7yKv2LignBQPAnMkh3/UilsrzRW07VGf2nC8F9JcLQt+aYs 9qYUITnJyvz+mIZM7eu/2h3rWHmQy46VmJUIOwT5U0yJgT30NqD4rZLOJiEF37QYMc/t tujVfaWTnR9/xPfO2sp1TcXE+JTEOJPktsMSJtZrSsgFgpG89j/GduSBtVGIqAz+6lS/ dEf024aKFFdbds1uoB04DYJ9kZjYS/X1L+lSM5g2V2JTizaSyVVfCZQmjsHQYDm1hDlc 18Ig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725480639; x=1726085439; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :from:references:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=V/MZrHI52t/Qw8gexQN0oxTiPORYyh6IBdGziikeKVU=; b=MaYq2olG2Kb+X+1iQWeJjOAj9nzAlA90roQAMOG0HzHcSX0tzj6v0unnc86WLzBxDN CIrlMkPEa2goun7FSCG2oXjiWhqpfD6bPdk5WX7bptbQ3l9cmavfrdza2EKtpPSS2CFd HL3STvw/RqxMc8R6kp/kVh2nwDG8glythI6xOk1bmbSAxWlgUG+TJ/2eaEev3NJRLO6s nF8YZ84fb2FCA1Ay3hVhJ2HerccpmDvqaTBEA2IyVlrjz6oaTdWu3LyAZ4fiNUSJSG41 W2cgys4tPcvfAzFnnkurjDFnjjQ2thKvxeSZAxOy3at8GTVBR+XmBAcFsWvVCDZQXmo/ FTGQ== X-Forwarded-Encrypted: i=1; AJvYcCU1HhvlWFUoesgPULz3tjCyX8v/S1NBMnHr4nNlEHeXyZhcbraPa+O2ye9KXo6IQYDupFvxamOuAD70d64S@postgresql.org X-Gm-Message-State: AOJu0Yy5JsRb4Q+eIgkDS4qMmEhg8BndP3beNm+w7H1YycpD7F7QXAXf UOPrBp2yxcBgjzK8jGS55vonfKdDhOvcwaqoI4l+8VEZtkFnwHL7CD9vrGBuFDVGjAL++AUhieB s X-Google-Smtp-Source: AGHT+IFyOItC/J2veHFAseNrTdoszj0wvVLb9yQiGH/HzeP1V4zmjT5jTwlcLTakOtx28sgb+EE4oA== X-Received: by 2002:a0c:f903:0:b0:6c3:5946:ea0b with SMTP id 6a1803df08f44-6c35946eb94mr131010116d6.11.1725480639393; Wed, 04 Sep 2024 13:10:39 -0700 (PDT) Received: from ?IPV6:2605:a601:9180:9800::2bb? ([2605:a601:9180:9800::2bb]) by smtp.googlemail.com with ESMTPSA id 6a1803df08f44-6c5201e0054sm1471156d6.1.2024.09.04.13.10.38 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 04 Sep 2024 13:10:38 -0700 (PDT) Message-ID: Date: Wed, 4 Sep 2024 16:10:37 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: json_query conditional wrapper bug To: Peter Eisentraut , pgsql-hackers References: <8022e067-818b-45d3-8fab-6e0d94d03626@eisentraut.org> <0919c21e-af83-458b-8e40-1228429eaaa4@eisentraut.org> From: Andrew Dunstan Content-Language: en-US Autocrypt: addr=andrew@dunslane.net; keydata= xsBNBE7KWFkBCAClridxur2AIc7eW2AR7izbfp3EnNefie2HbLF0izW5Ik5UjX2HBXBx4syI gY6b0ugohXrr274+baoAlvSbq6cAoQuEVrk5IZFzt20b1Xkx65FwGSEj526yiKLocqkJceSq Xr9xcA5SGY+FZv441chh5SU92v4q6z+6LPpoHOh97ptAVXZYNTtU0LevyvD5lja0TzbvJm6C eFXitJfnm1pLEr0DGJCR/iUOl/N62Kh4855zZC7NHIjQHPOvV5Stz/l5ilDhvGVk+xkXFPys SjZoUr1rXhYLpiyi5sR0X9FHXT0KnGuz1F5ERO7ZTLSSQ6fJwPj6gOk9K+vvoKvoeql5ABEB AAHNJEFuZHJldyBEdW5zdGFuIDxhbmRyZXdAZHVuc2xhbmUubmV0PsLAmwQTAQgARQIbAwIX gAIZAQULCQgHAgMiAgEGFQoJCAsCBBYCAwECHgcWIQTkPlhGHfx8v0RpFaWZ+n/LWfw7gQUC ZFlxxwUJGVGAbgAKCRCZ+n/LWfw7gXikB/9ZdcUy6CTBFIIuL/bVsc1eLEW/gJBjJBF6HxNY xgEkAgXAp4Lg4A5U+QB9GouFr7+GYxF0BU4hzoGhNPUWltxnHdMWP8nC/38LAqgMi8L/bbsm HW5YPBdWYaAZAPJQVfOAgjTbRUb26KSprpyrrJKW0ZmrZfjhNPcQ72jpWzoPLQqx2X6B0fru 1jq+cBh8lb6r1mJTim1T3JIn+F/v5VpdQS+EL8xqsHkfzKjIPsW3CIXpkypSk6saA55Rkkbl 26AW8ftPVB0Q6Lnn6FLt9CP0MGNixBQ55yq8r1K+nCBvCCjvQjM8RDm0UUum0WNl+ifQgTLO E8TWEnwVtkBf+3QWzsBNBE7KWFkBCADRnOM0FCzsYW6jtncg+dWIagjUZpvaClmqn/sJluLa Q3v1VXMQJzYs3eC1gh386W+XBwLRpDj3jzH81lX+p73Re3d3oJW7X+ffsxuzu5ZVdMUkqBYo nkAbKxr6gyJ12F/+JkUVzLcoTN+d/7YsQvUVi7NaKH8mJgjz112O4fUe3p9wfAaFa0RXHc5S GPzRTYRRlv/XZBIho4J2tkZOnteZJZ+GbxQVlINt6fd8P6al3MWOvpP/ExJPguEfjOsO6Njy xjo3WfpD4lHMOR/Oc3/8mScEF84rF2jXbsFgelWnbPWAvXY+pD0dXOFRkagGmC/viwBDqq5b 5tk76kKmUbZxABEBAAHCwHwEGAEIACYCGwwWIQTkPlhGHfx8v0RpFaWZ+n/LWfw7gQUCZFlx 5wUJGVGAjgAKCRCZ+n/LWfw7gf+iB/4g8CPY5jihf5r/8EsoIGe2H+dpVmpPF8YGBzTIvCz/ fQoOq8AX/pE76QEuFnFZWfjw+wgBXgCVmkox2Eflkk6z4ND3pcwGZ6CfCxTQCDk/dij+2DQ4 6bmDCy/sBgcbz9mTpoLC11HLoPae6YN9nBNQRZDcEFEu54OaVOqlIdbA6m+POIBCXZdHOFc0 WoDTgxHRzC1jgQNidyd6tKqcsVJs0dzF0oKTmFFmUAqTdJO12LBuNA1rlqrR3EtpYk8B/wtS 5dIMD7Q8hwQpL+4C6GNpb6ZKnPkLi47pDOLhz2qBrqN+rqUEsT3YnExYpzj5yOBi+FlmV1Hw 49QYe1sn2ZPs In-Reply-To: <0919c21e-af83-458b-8e40-1228429eaaa4@eisentraut.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On 2024-09-04 We 6:16 AM, Peter Eisentraut wrote: > On 28.08.24 11:21, Peter Eisentraut wrote: >> These are ok: >> >> select json_query('{"a": 1, "b": 42}'::jsonb, 'lax $.b' without >> wrapper); >>   json_query >> ------------ >>   42 >> >> select json_query('{"a": 1, "b": 42}'::jsonb, 'lax $.b' with >> unconditional wrapper); >>   json_query >> ------------ >>   [42] >> >> But this appears to be wrong: >> >> select json_query('{"a": 1, "b": 42}'::jsonb, 'lax $.b' with >> conditional wrapper); >>   json_query >> ------------ >>   [42] >> >> This should return an unwrapped 42. > > If I make the code change illustrated in the attached patch, then I > get the correct result here.  And various regression test results > change, which, to me, all look more correct after this patch.  I don't > know what the code I removed was supposed to accomplish, but it seems > to be wrong somehow.  In the current implementation, the WITH > CONDITIONAL WRAPPER clause doesn't appear to work correctly in any > case I could identify. Agree the code definitely looks wrong. If anything the test should probably be reversed:         wrap = count > 1  || !(             IsAJsonbScalar(singleton) ||             (singleton->type == jbvBinary && JsonContainerIsScalar(singleton->val.binary.data))); i.e. in the count = 1 case wrap unless it's a scalar or a binary wrapping a scalar. The code could do with a comment about the logic. I know we're very close to release but we should fix this as it's a new feature. cheers andrew -- Andrew Dunstan EDB: https://www.enterprisedb.com