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 1rT0tU-00HP5S-M1 for pgsql-hackers@arkaria.postgresql.org; Thu, 25 Jan 2024 14:39:53 +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 1rT0tT-0000lx-GT for pgsql-hackers@arkaria.postgresql.org; Thu, 25 Jan 2024 14:39:51 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rT0tT-0000lp-3D for pgsql-hackers@lists.postgresql.org; Thu, 25 Jan 2024 14:39:51 +0000 Received: from mail-ua1-x930.google.com ([2607:f8b0:4864:20::930]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rT0tM-003fD4-CB for pgsql-hackers@postgresql.org; Thu, 25 Jan 2024 14:39:50 +0000 Received: by mail-ua1-x930.google.com with SMTP id a1e0cc1a2514c-7cecc0a662dso2323820241.1 for ; Thu, 25 Jan 2024 06:39:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706193582; x=1706798382; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=q5ZO66YGhLYc/yo0itQck5lVv2sN2Zv7Ojn/+6PzxQA=; b=YVjAGEb//IhThgBkAv10/F93ckiDlfxmsWDxRTcHqlDsBPjpTXFvd8SH5jc2gWbujU ZypVECBCxuCxlxXUT4Tu3SkLwNa49rAz3U9h0WTVEhf643+AoUpYxGfvcb0iBW5y0NVd yIMoe5xYl3OczLSs9XcKNPJckGr/b0DWHnfAQxbTsaJQ0HV+4ZHdJYQ74Di5HPY6Ia0z aQBGasRzdRXNizu2wR6TboyIZsITtsmFWrQkyyRw7IStSt2N1DqN6pgQLWiPFemUL53S TzF7CoM0J5UPbjU1voMiuN7ONfejfn7k73FnZz6HisZTzawTQH7lsTu0eYv01TyEqYFb dH3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706193582; x=1706798382; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=q5ZO66YGhLYc/yo0itQck5lVv2sN2Zv7Ojn/+6PzxQA=; b=dRRn9msUZMxcm6WL7TVrm57FsTYaitWgAQ9IMsqQMCNdqGR30syjMdU0WbYkZpOOC9 FCnnTf0ZCDKR0snLwDgJJ1XgWvTO8H9gLJuMzTOy96eR0yfhlTmYgMIYycltzwpNOzTw ycLkgg70v30waeQR9E6IfQvqMizV5DF5JC2hdMhM8yPkugED4esr4LOrqSxuy/PPiCAL JWcVQgIRvT6E2qxFnGaGCx5c32IGW/Twe3m66iCN1ahA66Wevd/EJ6rT/B83Lcb4sjLl hVT5cs5edEmHZoFxG5PDfPb3KW74xLQez0FZfcnNZQHmxZPseFuGbPpreyRYuBnjk8bm F6pg== X-Gm-Message-State: AOJu0YwIWc6EFTNMVYnhA67RonNixsdBvuvLVCPU+44j4B8jKa2Sdvcs vRR8t2JAJJp4G9rwcCYB2YRjwGn1OlHYm1qG06/jDQlcpwE7IsTRLsFe6ZIk90yT3gRPgsP/lkU G5jU9VagK+EdJJbbo2py6RcGR1Ec= X-Google-Smtp-Source: AGHT+IEXMJCmvP2dmuvN5p/ZIbMHIcq6xrV+vVpNMXWIYyVqunrpzaguNylzM7ppmjajWumoH/WmqI6EAqeVuuxL3CU= X-Received: by 2002:a1f:7dc3:0:b0:4bd:6109:ab9a with SMTP id y186-20020a1f7dc3000000b004bd6109ab9amr590145vkc.8.1706193582237; Thu, 25 Jan 2024 06:39:42 -0800 (PST) MIME-Version: 1.0 References: <202401181711.qxjxpnl3ohnw@alvherre.pgsql> <202401221619.ragf2vnbyopl@alvherre.pgsql> In-Reply-To: From: jian he Date: Thu, 25 Jan 2024 22:39:30 +0800 Message-ID: Subject: Re: remaining sql/json patches To: Amit Langote Cc: Alvaro Herrera , Andres Freund , Erik Rijkers , Andrew Dunstan , PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000636c74060fc626c0" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000636c74060fc626c0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Jan 25, 2024 at 7:54=E2=80=AFPM Amit Langote wrote: > > > > > The problem with returning comp_domain_with_typmod from json_value() > > seems to be that it's using a text-to-record CoerceViaIO expression > > picked from JsonExpr.item_coercions, which behaves differently than > > the expression tree that the following uses: > > > > select ('abcd', 42)::comp_domain_with_typmod; > > row > > ---------- > > (abc,42) > > (1 row) > > Oh, it hadn't occurred to me to check what trying to coerce a "string" > containing the record literal would do: > > select '(''abcd'', 42)'::comp_domain_with_typmod; > ERROR: value too long for type character(3) > LINE 1: select '(''abcd'', 42)'::comp_domain_with_typmod; > > which is the same thing as what the JSON_QUERY() and JSON_VALUE() are > running into. So, it might be fair to think that the error is not a > limitation of the SQL/JSON patch but an underlying behavior that it > has to accept as is. > Hi, I reconciled with these cases. What bugs me now is the first query of the following 4 cases (for compariso= n). SELECT JSON_QUERY(jsonb '[1,2]', '$' RETURNING char(3) omit quotes); SELECT JSON_QUERY(jsonb '[1,2]', '$' RETURNING char(3) keep quotes); SELECT JSON_QUERY(jsonb '[1,2]', '$' RETURNING text omit quotes); SELECT JSON_QUERY(jsonb '[1,2]', '$' RETURNING text keep quotes); I did some minor refactoring on the function coerceJsonFuncExprOutput. it will make the following queries return null instead of error. NULL is the return of json_value. SELECT JSON_QUERY(jsonb '"123"', '$' RETURNING int2); SELECT JSON_QUERY(jsonb '"123"', '$' RETURNING int4); SELECT JSON_QUERY(jsonb '"123"', '$' RETURNING int8); SELECT JSON_QUERY(jsonb '"123"', '$' RETURNING bool); SELECT JSON_QUERY(jsonb '"123"', '$' RETURNING numeric); SELECT JSON_QUERY(jsonb '"123"', '$' RETURNING real); SELECT JSON_QUERY(jsonb '"123"', '$' RETURNING float8); --000000000000636c74060fc626c0 Content-Type: application/octet-stream; name="v1-0001-minor-refactor-coerceJsonFuncExprOutput.no-cfbot" Content-Disposition: attachment; filename="v1-0001-minor-refactor-coerceJsonFuncExprOutput.no-cfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lrtbj35o0 RnJvbSBjZmYwZDk0NmRkNjViODFjMDIwZjJhMDZhNmIwMjljOGFlYjgxMDBlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFRodSwgMjUgSmFuIDIwMjQgMjI6MzU6NDUgKzA4MDAKU3ViamVjdDogW1BBVENIIHYx IDEvMV0gbWlub3IgcmVmYWN0b3IgY29lcmNlSnNvbkZ1bmNFeHByT3V0cHV0CgpjYXN0IGZ1bmN0 aW9uIGRvIHRoZSBjb2VyY2lvbiBmb3IgdGhlIGZvbGxvd2luZyB0eXBlcyBjYW5ub3QgaGFuZGxl IGVycm9yIHNvZnRseSwKc28gd2UgdXNlIGNvZXJjaW9uLgpzbyB0aGUgZm9sbG93aW5nIHF1ZXJp ZXMgaW5zdGVhZCBvZiBnZW5lcmF0ZSBhbiBlcnJvciwgbnVsbCB3aWxsIGJlIHByb2R1Y2VkLgoK U0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyIxMjMiJywgJyQnIFJFVFVSTklORyBpbnQyKTsKU0VM RUNUIEpTT05fUVVFUlkoanNvbmIgJyIxMjMiJywgJyQnIFJFVFVSTklORyBpbnQ0KTsKU0VMRUNU IEpTT05fUVVFUlkoanNvbmIgJyIxMjMiJywgJyQnIFJFVFVSTklORyBpbnQ4KTsKU0VMRUNUIEpT T05fUVVFUlkoanNvbmIgJyIxMjMiJywgJyQnIFJFVFVSTklORyBib29sKTsKU0VMRUNUIEpTT05f UVVFUlkoanNvbmIgJyIxMjMiJywgJyQnIFJFVFVSTklORyBudW1lcmljKTsKU0VMRUNUIEpTT05f UVVFUlkoanNvbmIgJyIxMjMiJywgJyQnIFJFVFVSTklORyByZWFsKTsKU0VMRUNUIEpTT05fUVVF UlkoanNvbmIgJyIxMjMiJywgJyQnIFJFVFVSTklORyBmbG9hdDgpOwotLS0KIHNyYy9iYWNrZW5k L3BhcnNlci9wYXJzZV9leHByLmMgfCAyNyArKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEg ZmlsZSBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cGFyc2VyL3BhcnNlX2V4cHIuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMKaW5k ZXggN2MzODcwYWMuLjI3ODU3NDRlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFy c2VfZXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMKQEAgLTQ1MDMs NiArNDUwMywzMyBAQCBjb2VyY2VKc29uRnVuY0V4cHJPdXRwdXQoUGFyc2VTdGF0ZSAqcHN0YXRl LCBKc29uRXhwciAqanNleHByKQogCiAJZGVmYXVsdF90eXBpZCA9IEpzb25GdW5jRXhwckRlZmF1 bHRSZXR1cm5UeXBlKGpzZXhwcik7CiAJZGVmYXVsdF90eXBtb2QgPSAtMTsKKworCS8qCisJKiBj YXN0IGZ1bmN0aW9uIGRvIHRoZSBjb2VyY2lvbiBmb3IgdGhlIGZvbGxvd2luZyB0eXBlcyBjYW5u b3QgaGFuZGxlIGVycm9yIHNvZnRseSwKKwkqIHNvIHdlIHVzZSBKc29uQ29lcmNpb24KKwkqLwor CWlmKGpzZXhwci0+b3AgPT0gSlNPTl9RVUVSWV9PUCkKKwl7CisJCUpzb25Db2VyY2lvbiAqY29l cmNpb24gPSBOVUxMOworCQlzd2l0Y2ggKHJldHVybmluZy0+dHlwaWQpCisJCXsKKwkJCWNhc2Ug Qk9PTE9JRDoKKwkJCWNhc2UgTlVNRVJJQ09JRDoKKwkJCWNhc2UgSU5UMk9JRDoKKwkJCWNhc2Ug SU5UNE9JRDoKKwkJCWNhc2UgSU5UOE9JRDoKKwkJCWNhc2UgRkxPQVQ0T0lEOgorCQkJY2FzZSBG TE9BVDhPSUQ6CisJCQkJY29lcmNpb24gPSBtYWtlSnNvbkNvZXJjaW9uKHJldHVybmluZyk7CisJ CQkJY29lcmNpb24tPm9taXRfcXVvdGVzID0ganNleHByLT5vbWl0X3F1b3RlczsKKwkJCQlicmVh azsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCX0KKwkJaWYoY29lcmNpb24pCisJCQlyZXR1 cm4gKE5vZGUgKikgY29lcmNpb247CisJfQorCiAJaWYgKHJldHVybmluZy0+dHlwaWQgIT0gZGVm YXVsdF90eXBpZCB8fAogCQlyZXR1cm5pbmctPnR5cG1vZCAhPSBkZWZhdWx0X3R5cG1vZCkKIAl7 Ci0tIAoyLjM0LjEKCg== --000000000000636c74060fc626c0--