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 1tNIcY-00A0aJ-KA for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Dec 2024 21:27:18 +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 1tNIcV-00BHHF-Q0 for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Dec 2024 21:27:17 +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 1tNIcV-00BHH7-3i for pgsql-hackers@lists.postgresql.org; Mon, 16 Dec 2024 21:27:16 +0000 Received: from mail-yw1-x112e.google.com ([2607:f8b0:4864:20::112e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1tNIcT-003BNU-DJ for pgsql-hackers@postgresql.org; Mon, 16 Dec 2024 21:27:15 +0000 Received: by mail-yw1-x112e.google.com with SMTP id 00721157ae682-6f29aa612fbso14013567b3.0 for ; Mon, 16 Dec 2024 13:27:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joeconway.com; s=google; t=1734384432; x=1734989232; darn=postgresql.org; h=content-transfer-encoding:in-reply-to:autocrypt:from :content-language:references:cc:to:subject:user-agent:mime-version :date:message-id:from:to:cc:subject:date:message-id:reply-to; bh=DyltcEgZ5tNcGI5wCEcZIsm8Z2Ff30c6Ljb4BDq15m4=; b=NBZrTlQKOCqvK0402t01mcoQ2wKGbOWluWabIUEN+1VOynmiLJJimyjSxud+vVjRar BcYgf2g6Gcd5f7h1/ftE0gwVoFzqQoCKw0+VBR0SnnX8XNgVUkbc4TRz//L5rm7jTrO1 wiPOC39KK293GnEfgRlkwdHK7tkTHhBvvJeM4rB6DrX2JDSZQ8GjmQh+Nv/xmV28eups C/U/edIogrTb83lyE/p+jAhZI3H79VYaVmiAUCJDEO2JKzPrW+VKAoyLqqvoP4lUBHDO Qv1RmzbVhzVkT+woHdrf7lKgmnbJ8V9tvjWTeja1g+URWRn+YpEVSi+sAX7Mt5fWNzNK 0Dqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734384432; x=1734989232; h=content-transfer-encoding:in-reply-to:autocrypt:from :content-language:references:cc:to:subject:user-agent:mime-version :date:message-id:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=DyltcEgZ5tNcGI5wCEcZIsm8Z2Ff30c6Ljb4BDq15m4=; b=sgyqldimFKdiZYO6VQWt/F/xfmSXGGFfZlBVnPHxCMnqoiQRENtXcrAPqR4NRCzn5M Lk5Sf/Ci66SuT0BOTMKLQAJi2dYVtvjFqLp9HmcEfakTIJ+q2a5e0SLNb3ySo5hW/uJq TRkbdV/AcS6Tqo+4degqQ43PuFKv6zj6DgRvcMKIDlmD4rbU1HDlzQHJs79tcmzd1JKr 5DO98A/Ck8lW5MZQie0lHhHQSSR4fgiUknBjYjuKiygKXBx1ZWKpvyOD6j2Bm+rCnbrY zGDfHsLVmBXpuskLeRJdUdfseDnAyDhPwHzmnOoZZJrNXm5O3HMZhQHkGj3MhC6nneX1 cfkg== X-Gm-Message-State: AOJu0Yw/EFBN+M38jdDmpRIyv3Mn9wR0NIK6wnAQnchP//LSWn2xG2qZ HzIn6ovhxmFOXcTwFBVNo75G7H5Y2d6ZZ8f5nZqMqUB+3OswwdRwpeGDO1Kje3M= X-Gm-Gg: ASbGncu4iVEiO6/CqfXdKDDSiNBrHfzTbO/FdWMdZt2BL61Uz8EGZ/Vwm/EXL8MiF4E LGe+Exmj09VAAjDFirHEn7uf0sGlgMUbiG75MmALWrVCbMMe1/ykFgbmjvhmLJn/72KVQVonDL+ mABvxSrVC+k53SMU0/d0KBTg4/uehPww8m96PKRZ+FJC3+IUnSCEzGfsVt1X7F/CLSP28IXQHJ+ d4bDilSKikpF4GVPut/GAvonclAL4I2N5LVP9FMkQq29OCLcRGsW0K2uko9p5rv+tiqAfv/U7Z6 U5h2xYnMQcpFOnyPe9AsF8CwcDXhky9sC0Xb X-Google-Smtp-Source: AGHT+IH9UuK3kXXxE88pixSDdr1B1bs3QFk4y6C0mwb8eFAhAOvuJTGg5U/bbxME9eVGb6ymI+8sSg== X-Received: by 2002:a05:690c:6c10:b0:6ef:8296:359d with SMTP id 00721157ae682-6f279b2aa00mr109996367b3.22.1734384432534; Mon, 16 Dec 2024 13:27:12 -0800 (PST) Received: from [192.168.4.41] (162-239-31-113.lightspeed.dybhfl.sbcglobal.net. [162.239.31.113]) by smtp.gmail.com with ESMTPSA id 00721157ae682-6f2891ef291sm15423367b3.110.2024.12.16.13.27.12 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 16 Dec 2024 13:27:12 -0800 (PST) Message-ID: <70a27f2e-3629-4fe8-8deb-4a0b987f6245@joeconway.com> Date: Mon, 16 Dec 2024 16:27:11 -0500 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Add CASEFOLD() function. To: Jeff Davis , Ian Lawrence Barwick Cc: pgsql-hackers@postgresql.org References: <47716a78-eb0b-4728-8991-fc0d958a01c9@joeconway.com> Content-Language: en-US From: Joe Conway Autocrypt: addr=mail@joeconway.com; keydata= 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 In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On 12/16/24 12:49, Jeff Davis wrote: > One question I have is whether we want this function to normalize the > output. > > I believe most usecases would want the output normalized, because > normalization differences (e.g. "a" U+0061 followed by "combining > acute" U+0301 vs "a with acute" U+00E1) are more minor than differences > in case. > > Of course, a user could wrap it with the normalize() function, but > that's verbose and easy to forget. I'm also not sure that it can be > made as fast as a combined function that does both. Perhaps a one arg version that always casefolds and a two arg version that accepts nfc, nfd, none (or something similar)? > And a follow-up question: if it does normalize, the second parameter > would be the requested normal form. But to accept the keyword forms > (NFC, NFD in gram.y) rather than the string forms ('NFC', 'NFD') then > we'd need to also need to add CASEFOLD to gram.y (like NORMALIZE). Is > that a reasonable thing to do? SQL 2023 seems to include the NORMALIZE syntax, but the only case folding considered is UPPER and LOWER. As such, I think it ought to be a function but not part of the grammar. -- Joe Conway PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com