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 1l2Rls-0007sk-QF for pgsql-hackers@arkaria.postgresql.org; Thu, 21 Jan 2021 04:40:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1l2Rlr-0005Tu-O5 for pgsql-hackers@arkaria.postgresql.org; Thu, 21 Jan 2021 04:40:35 +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 1l2Rlq-0005Tn-M9 for pgsql-hackers@lists.postgresql.org; Thu, 21 Jan 2021 04:40:34 +0000 Received: from mail-io1-xd30.google.com ([2607:f8b0:4864:20::d30]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1l2Rlm-0004Ah-7h for pgsql-hackers@postgresql.org; Thu, 21 Jan 2021 04:40:33 +0000 Received: by mail-io1-xd30.google.com with SMTP id d13so1571760ioy.4 for ; Wed, 20 Jan 2021 20:40:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:cc:subject:from:to:date:message-id:in-reply-to; bh=FqKtZbtvAHTvedJ/5DTXt9aKYYFrokZ7lAjy+ECVJ7A=; b=YdXhcK5NdqI5Cd8Jk3tVKzDib+scwtAdlrXzzApWwYRjkmsk0svapxFHvngArG7flW 8vkfBi8tBnE3uGHVE8XU10usO5suyHY7yg30frJe99rwytb8AoL3mo3ay+ONOX1XaXnX MKrFLY2YB7cVfD7w2rrSuTJs/kR/8/6U5mLFKP6ZSY2KfIZq29oIzOvjfTTitQ2uoS7+ 6F0SLD5CabO8v+/DFGO/iaLwbwb504eGqcZH3qwELaghHuiDGFjbMo3CImM64YigVDmL z2nhf66OnjyQm64SMFKoQUgn+qdSi3rjz0n16AkLFhPqwzuqwdbJUfdLCgsVh0XR4nKu tbWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:cc:subject:from:to:date:message-id :in-reply-to; bh=FqKtZbtvAHTvedJ/5DTXt9aKYYFrokZ7lAjy+ECVJ7A=; b=dNtb9GKmd7pUnv2VV/Uc8/WV7dFdp2ktpRCG8+lU+rpK04LMfCJXH61gzZuHfmnGG1 XF2arK7tGyfD4Z39x/0UtyG3xaWSoGT7kTe9S1eEbNe6eW5/ItVXKEbh7+uACMUo+OUg h3z3bfr5hvQkhVDNB3XiJNnw0yEv9U0occNCdhYzTidhRyzkCUmbBj3a3RW2Nw3tUkz1 f2S4KMVvbZpo5LdCWW8/YptQvpTHMGRshNlRWbr1Gu6jifTEw6DdPz30co5DmYErucQi 0S8mVM52RLcYQjY8+0mAaoYCv3HBH5QOt4r9z9+i5eDm1AotuHowM1CObqYIwlYvuDmv 1J1w== X-Gm-Message-State: AOAM532aP2+F3L1Flr/RfeVdYfDxHUk/j0GoiTDBuHd1taFvjgtGeETV PwkfV1n09/4OSgabXQDh/0U= X-Google-Smtp-Source: ABdhPJyz8kcOxyDLl3uYI54FfipN72Yjn4gRrqy7qNXWiKrXUYZZ7I/Zg+unUcUaVroIPvG8pHARfg== X-Received: by 2002:a02:e87:: with SMTP id 129mr10309390jae.34.1611204029211; Wed, 20 Jan 2021 20:40:29 -0800 (PST) Received: from localhost ([68.235.43.45]) by smtp.gmail.com with ESMTPSA id d23sm1853586ioc.2.2021.01.20.20.40.27 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 20 Jan 2021 20:40:28 -0800 (PST) Content-Type: multipart/mixed; boundary=c78867e2f18f120b6c7d4995e726371753812387e9b2082385745e668f69 Mime-Version: 1.0 Cc: "Pavel Stehule" , "Tom Lane" , "Andres Freund" , "Alexander Korotkov" , "Justin Pryzby" , "David Steele" , "Nikita Glukhov" , "Alvaro Herrera" , "David Fetter" , "Thomas Munro" , "Oleksandr Shulgin" , "Robert Haas" , "Michael Paquier" , "Oleg Bartunov" , "Peter Eisentraut" , "PostgreSQL Hackers" Subject: Re: [HACKERS] [PATCH] Generic type subscripting From: "Dian M Fay" To: "Dmitry Dolgov" <9erthalion6@gmail.com> Date: Wed, 20 Jan 2021 23:37:32 -0500 Message-Id: In-Reply-To: <20210120190857.vvtwtabubwxzeraq@localhost> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --c78867e2f18f120b6c7d4995e726371753812387e9b2082385745e668f69 Content-Type: multipart/alternative; boundary=1434cfede8eeda04c3fea1cc538fbe26df171a9f3f5484f0974ca91aead6 --1434cfede8eeda04c3fea1cc538fbe26df171a9f3f5484f0974ca91aead6 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 On Wed Jan 20, 2021 at 2:08 PM EST, Dmitry Dolgov wrote: > > On Wed, Jan 20, 2021 at 11:34:16AM -0500, Dian M Fay wrote: > > > Thanks, I need to remember to not skipp doc building for testing proc= ess > > > even for such small changes. Hope now I didn't forget anything. > > > > > > > On Wed, Jan 20, 2021 at 09:58:43AM -0500, Dian M Fay wrote: > > > > > > > Here's a full editing pass on the documentation, with v45 and Pavel= 's > > > > doc-whitespaces-fix.patch applied. I also corrected a typo in one o= f the > > > > added hints. > > > > > > Great! I've applied almost all of it, except: > > > > > > + A jsonb value will accept assignments to nonexistent > > > subscript > > > + paths as long as the nonexistent elements being traversed are all > > > arrays. > > > > > > Maybe I've misunderstood the intention, but there is no requirement > > > about arrays for creating such an empty path. I've formulated it as: > > > > > > + A jsonb value will accept assignments to nonexistent > > > subscript > > > + paths as long as the last existing path key is an object or an arra= y. > > > > My intention there was to highlight the difference between: > > > > * SET obj['a']['b']['c'] =3D '"newvalue"' > > * SET arr[0][0][3] =3D '"newvalue"' > > > > obj has to conform to {"a": {"b": {...}}} in order to receive the > > assignment of the nested c. If it doesn't, that's the error case we > > discussed earlier. But arr can be null, [], and so on, and any missing > > structure [[[null, null, null, "newvalue"]]] will be created. > > If arr is 'null', or any other scalar value, such subscripting will work > only one level deep because they represented internally as an array of > one element. If arr is '[]' the path will comply by definition. So it's > essentially the same as for objects with no particular difference. If > such a quirk about scalars being treated like arrays is bothering, we > could also bend it in this case as well (see the attached version). I missed that distinction in the original UPDATE paragraph too. Here's another revision based on v48. --1434cfede8eeda04c3fea1cc538fbe26df171a9f3f5484f0974ca91aead6-- --c78867e2f18f120b6c7d4995e726371753812387e9b2082385745e668f69 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0001-more-jsonb-subscripting-documentation-edits.patch Content-Type: text/plain; charset=utf-8; name=0001-more-jsonb-subscripting-documentation-edits.patch RnJvbSBhNDg2ZWUyMjE0NjkwMzdiMDhkMzY2M2YxZWMxNDJhOTA1NDA2ZjhiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEaWFuIE0gRmF5IDxkaWFuLm0uZmF5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyMCBKYW4gMjAyMSAyMzozNjozNCAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIG1vcmUg anNvbmIgc3Vic2NyaXB0aW5nIGRvY3VtZW50YXRpb24gZWRpdHMKCi0tLQogZG9jL3NyYy9zZ21s L2pzb24uc2dtbCB8IDQwICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0K IDEgZmlsZSBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9kb2Mvc3JjL3NnbWwvanNvbi5zZ21sIGIvZG9jL3NyYy9zZ21sL2pzb24uc2dtbApp bmRleCBkZWViOWU2NmUwLi5lMTZkZDY5NzNkIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvanNv bi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9qc29uLnNnbWwKQEAgLTYxNiwxNiArNjE2LDE3IEBA IFNFTEVDVCBqZG9jLSZndDsnZ3VpZCcsIGpkb2MtJmd0OyduYW1lJyBGUk9NIGFwaSBXSEVSRSBq ZG9jIEAmZ3Q7ICd7InRhZ3MiOiBbInF1CiAKICAgPHBhcmE+CiAgICA8Y29tbWFuZD5VUERBVEU8 L2NvbW1hbmQ+IHN0YXRlbWVudHMgbWF5IHVzZSBzdWJzY3JpcHRpbmcgaW4gdGhlCi0gICA8bGl0 ZXJhbD5TRVQ8L2xpdGVyYWw+IGNsYXVzZSB0byBtb2RpZnkgPHR5cGU+anNvbmI8L3R5cGU+IHZh bHVlcy4gT2JqZWN0Ci0gICB2YWx1ZXMgYmVpbmcgdHJhdmVyc2VkIG11c3QgZXhpc3QgYXMgc3Bl Y2lmaWVkIGJ5IHRoZSBzdWJzY3JpcHQgcGF0aC4gRm9yCi0gICBpbnN0YW5jZSwgdGhlIHBhdGgg PGxpdGVyYWw+dmFsWydhJ11bJ2InXVsnYyddPC9saXRlcmFsPiBhc3N1bWVzIHRoYXQKLSAgIDxs aXRlcmFsPnZhbDwvbGl0ZXJhbD4sIDxsaXRlcmFsPnZhbFsnYSddPC9saXRlcmFsPiwgYW5kIDxs aXRlcmFsPnZhbFsnYSddWydiJ108L2xpdGVyYWw+Ci0gICBhcmUgYWxsIG9iamVjdHMgaW4gZXZl cnkgcmVjb3JkIGJlaW5nIHVwZGF0ZWQgKDxsaXRlcmFsPnZhbFsnYSddWydiJ108L2xpdGVyYWw+ Ci0gICBtYXkgb3IgbWF5IG5vdCBjb250YWluIGEgZmllbGQgbmFtZWQgPGxpdGVyYWw+YzwvbGl0 ZXJhbD4sIGFzIGxvbmcgYXMgaXQncyBhbgotICAgb2JqZWN0KS4gSWYgYW55IGluZGl2aWR1YWwg PGxpdGVyYWw+dmFsPC9saXRlcmFsPiwgPGxpdGVyYWw+dmFsWydhJ108L2xpdGVyYWw+LAotICAg b3IgPGxpdGVyYWw+dmFsWydhJ11bJ2InXTwvbGl0ZXJhbD4gaXMgYSBub24tb2JqZWN0IHN1Y2gg YXMgYSBzdHJpbmcsIGEgbnVtYmVyLAotICAgb3IgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4sIGFu IGVycm9yIGlzIHJhaXNlZCBldmVuIGlmIG90aGVyIHZhbHVlcyBkbyBjb25mb3JtLgotICAgQXJy YXkgdmFsdWVzIGFyZSBub3Qgc3ViamVjdCB0byB0aGlzIHJlc3RyaWN0aW9uLCBhcyBkZXRhaWxl ZCBiZWxvdy4KKyAgIDxsaXRlcmFsPlNFVDwvbGl0ZXJhbD4gY2xhdXNlIHRvIG1vZGlmeSA8dHlw ZT5qc29uYjwvdHlwZT4gdmFsdWVzLiBTdWJzY3JpcHQKKyAgIHBhdGhzIG11c3QgYmUgdHJhdmVy c2libGUgZm9yIGFsbCBhZmZlY3RlZCB2YWx1ZXMgaW5zb2ZhciBhcyB0aGV5IGV4aXN0LiBGb3IK KyAgIGluc3RhbmNlLCB0aGUgcGF0aCA8bGl0ZXJhbD52YWxbJ2EnXVsnYiddWydjJ108L2xpdGVy YWw+IGNhbiBiZSB0cmF2ZXJzZWQgYWxsCisgICB0aGUgd2F5IHRvIDxsaXRlcmFsPmM8L2xpdGVy YWw+IGlmIGV2ZXJ5IDxsaXRlcmFsPnZhbDwvbGl0ZXJhbD4sCisgICA8bGl0ZXJhbD52YWxbJ2En XTwvbGl0ZXJhbD4sIGFuZCA8bGl0ZXJhbD52YWxbJ2EnXVsnYiddPC9saXRlcmFsPiBpcyBhbgor ICAgb2JqZWN0LiBJZiBhbnkgPGxpdGVyYWw+dmFsWydhJ108L2xpdGVyYWw+IG9yIDxsaXRlcmFs PnZhbFsnYSddWydiJ108L2xpdGVyYWw+CisgICBpcyBub3QgZGVmaW5lZCwgaXQgd2lsbCBiZSBj cmVhdGVkIGFzIGFuIGVtcHR5IG9iamVjdCBhbmQgZmlsbGVkIGFzCisgICBuZWNlc3NhcnkuIEhv d2V2ZXIsIGlmIGFueSA8bGl0ZXJhbD52YWw8L2xpdGVyYWw+IGl0c2VsZiBvciBvbmUgb2YgdGhl CisgICBpbnRlcm1lZGlhcnkgdmFsdWVzIGlzIGRlZmluZWQgYXMgYSBub24tb2JqZWN0IHN1Y2gg YXMgYSBzdHJpbmcsIG51bWJlciwgb3IKKyAgIDxsaXRlcmFsPmpzb25iPC9saXRlcmFsPiA8bGl0 ZXJhbD5udWxsPC9saXRlcmFsPiwgdHJhdmVyc2FsIGNhbm5vdCBwcm9jZWVkIHNvCisgICBhbiBl cnJvciBpcyByYWlzZWQgYW5kIHRoZSB0cmFuc2FjdGlvbiBhYm9ydGVkLgogICA8L3BhcmE+CiAK ICAgPHBhcmE+CkBAIC02NTgsOCArNjU5LDkgQEAgU0VMRUNUICogRlJPTSB0YWJsZV9uYW1lIFdI RVJFIGpzb25iX2ZpZWxkWydrZXknXSA9ICcidmFsdWUiJzsKIAogICAgPHR5cGU+anNvbmI8L3R5 cGU+IGFzc2lnbm1lbnQgdmlhIHN1YnNjcmlwdGluZyBoYW5kbGVzIGEgZmV3IGVkZ2UgY2FzZXMK ICAgIGRpZmZlcmVudGx5IGZyb20gPGxpdGVyYWw+anNvbmJfc2V0PC9saXRlcmFsPi4gV2hlbiBh IHNvdXJjZSA8dHlwZT5qc29uYjwvdHlwZT4KLSAgIGlzIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+ LCBhc3NpZ25tZW50IHZpYSBzdWJzY3JpcHRpbmcgd2lsbCBwcm9jZWVkIGFzIGlmCi0gICBpdCB3 YXMgYW4gZW1wdHkgSlNPTiBvYmplY3Q6CisgICB2YWx1ZSBpcyA8bGl0ZXJhbD5OVUxMPC9saXRl cmFsPiwgYXNzaWdubWVudCB2aWEgc3Vic2NyaXB0aW5nIHdpbGwgcHJvY2VlZAorICAgYXMgaWYg aXQgd2FzIGFuIGVtcHR5IEpTT04gdmFsdWUgb2YgdGhlIHR5cGUgKG9iamVjdCBvciBhcnJheSkg aW1wbGllZCBieSB0aGUKKyAgIHN1YnNjcmlwdCBrZXk6CiAKIDxwcm9ncmFtbGlzdGluZz4KIC0t IFdoZXJlIGpzb25iX2ZpZWxkIHdhcyBOVUxMLCBpdCBpcyBub3cgeyJhIjogMX0KQEAgLTY4MCwx NyArNjgyLDE5IEBAIFVQREFURSB0YWJsZV9uYW1lIFNFVCBqc29uYl9maWVsZFsyXSA9ICcyJzsK IDwvcHJvZ3JhbWxpc3Rpbmc+CiAKICAgIEEgPHR5cGU+anNvbmI8L3R5cGU+IHZhbHVlIHdpbGwg YWNjZXB0IGFzc2lnbm1lbnRzIHRvIG5vbmV4aXN0ZW50IHN1YnNjcmlwdAotICAgcGF0aHMgYXMg bG9uZyBhcyB0aGUgbGFzdCBleGlzdGluZyBwYXRoIGtleSBpcyBhbiBvYmplY3Qgb3IgYW4gYXJy YXkuIFNpbmNlCi0gICB0aGUgZmluYWwgc3Vic2NyaXB0IGlzIG5vdCB0cmF2ZXJzZWQsIGl0IG1h eSBiZSBhbiBvYmplY3Qga2V5LiBOZXN0ZWQgYXJyYXlzCi0gICB3aWxsIGJlIGNyZWF0ZWQgYW5k IDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+LXBhZGRlZCBhY2NvcmRpbmcgdG8gdGhlIHBhdGggdW50 aWwKLSAgIHRoZSB2YWx1ZSBjYW4gYmUgcGxhY2VkIGFwcHJvcHJpYXRlbHkuCisgICBwYXRocyBh cyBsb25nIGFzIHRoZSBsYXN0IGV4aXN0aW5nIGVsZW1lbnQgdG8gYmUgdHJhdmVyc2VkIGlzIGFu IG9iamVjdCBvcgorICAgYXJyYXksIGFzIGltcGxpZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcgc3Vi c2NyaXB0ICh0aGUgZWxlbWVudCBpbmRpY2F0ZWQgYnkKKyAgIHRoZSBsYXN0IHN1YnNjcmlwdCBp biB0aGUgcGF0aCBpcyBub3QgdHJhdmVyc2VkIGFuZCBtYXkgYmUgYW55dGhpbmcpLiBOZXN0ZWQK KyAgIGFycmF5IGFuZCBvYmplY3Qgc3RydWN0dXJlcyB3aWxsIGJlIGNyZWF0ZWQsIGFuZCBpbiB0 aGUgZm9ybWVyIGNhc2UKKyAgIDxsaXRlcmFsPm51bGw8L2xpdGVyYWw+LXBhZGRlZCwgYXMgc3Bl Y2lmaWVkIGJ5IHRoZSBzdWJzY3JpcHQgcGF0aCB1bnRpbCB0aGUKKyAgIGFzc2lnbmVkIHZhbHVl IGNhbiBiZSBwbGFjZWQuCiAKIDxwcm9ncmFtbGlzdGluZz4KIC0tIFdoZXJlIGpzb25iX2ZpZWxk IHdhcyB7fSwgaXQgaXMgbm93IHsnYSc6IFt7J2InOiAxfV19CiBVUERBVEUgdGFibGVfbmFtZSBT RVQganNvbmJfZmllbGRbJ2EnXVswXVsnYiddID0gJzEnOwogCi0tLSBXaGVyZSBqc29uYl9maWVs ZCB3YXMgW10sIGl0IGlzIG5vdyBbeydhJzogMX1dCi1VUERBVEUgdGFibGVfbmFtZSBTRVQganNv bmJfZmllbGRbMF1bJ2EnXSA9ICcxJzsKKy0tIFdoZXJlIGpzb25iX2ZpZWxkIHdhcyBbXSwgaXQg aXMgbm93IFtudWxsLCB7J2EnOiAxfV0KK1VQREFURSB0YWJsZV9uYW1lIFNFVCBqc29uYl9maWVs ZFsxXVsnYSddID0gJzEnOwogPC9wcm9ncmFtbGlzdGluZz4KIAogICA8L3BhcmE+Ci0tIAoyLjMw LjAKCg== --c78867e2f18f120b6c7d4995e726371753812387e9b2082385745e668f69--