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.96) (envelope-from ) id 1w0EVs-001jRG-1B for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Mar 2026 08:01:52 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w0EVq-007zJg-2T for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Mar 2026 08:01: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.96) (envelope-from ) id 1w0EVq-007zJX-1M for pgsql-hackers@lists.postgresql.org; Wed, 11 Mar 2026 08:01:50 +0000 Received: from mail-yw1-x112a.google.com ([2607:f8b0:4864:20::112a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w0EVo-000000026S9-2jej for pgsql-hackers@lists.postgresql.org; Wed, 11 Mar 2026 08:01:50 +0000 Received: by mail-yw1-x112a.google.com with SMTP id 00721157ae682-7982c3b7da9so125473277b3.1 for ; Wed, 11 Mar 2026 01:01:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773216107; cv=none; d=google.com; s=arc-20240605; b=IlEoaJE79B0DxuPuY2ns2l/0n7SI7PLBWewMiRPdCsQLaskI4ZlriO2BAH9NQ+DdDF DNxx8kUZcG8rL/tJU75HZ8itzA3zxHCZNhDN6O8BPD5SkP0yBAmal4GM+F6bWAlz/3K8 7zrjtTNYHFe/4XXjaAcOq4PNezmyyRW+WCyjBeaoN+ACk4Gks0RIGJLxRLcFWQSvEf0+ Gkwr5A/zf/0pWXbtRHqdp61Qp2KwFKotTKN0qteiF5UamfTws2W/upxcuZR9UUiP1GeE ABmmShdlVKJqbgZZFrcL4Uj1sZ4DoqIHRcYkuQYcXRcXsx88Edjj8rEk3u5DZxeho1YL c1NQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=K8/dXGj+AHFd1m50ublANlgWSjp1F/YziTrolo4L1UM=; fh=i4KmVR1a/QCC/6kBN4YNy54vDSCR/6z4j7lWTLfmdSc=; b=ZRjx+o3XZHJWbqhFOkIguKCjfLX3w28M9lqRoee30+TCSj/TTaZta6kjq6w+YLHhbx 17hgAcB2dLfXJcyEx4K+e7gSoigG8/QGtUcMStYvRgSvFyaBc3UT2haHjTar4aQPyCUf CEU6I1JGKtL6nboNglbt+g2qtcWsEPXyfAwuNry2IFxnNCxE+8KDqN5zj3u2fKZAx7iV Cy+/2UQL15+scmHF3R7ZksvoOqfOtH7z8qiZueN8mW/KyNdTQVMQULLa33IPSCHHUcpP h5HABrnQJF5sCuzGppCxW1AHyMCc5pCNGPR0a/53DV20XTPtkU+lLzvZoN1Ui31dsi02 wpgg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=percona.com; s=google; t=1773216107; x=1773820907; darn=lists.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=K8/dXGj+AHFd1m50ublANlgWSjp1F/YziTrolo4L1UM=; b=cn0Ee1ryTypKDOWV836vUVxFai0c2RsrNGfDXSfiqN+Ac4c1qdOy5YW5KoKmafeudz UBLrc09Qxi2I5W8eLzkIlI9BgRjXiHidgxdFWEcZ93eniX+j6OPcewiMt+lRpHTcnq48 Nw4++8rE0S/1kqAVeSgdY7OzQHaa5CBXs+ET4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773216107; x=1773820907; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=K8/dXGj+AHFd1m50ublANlgWSjp1F/YziTrolo4L1UM=; b=Yc8iGuUeaH7H1qBg/9If4jbnkZauSKY0L6/yM46RuMwGOxJSyzx5prrs5UbhMUiZcJ lbt2kKAagaDbJuuoiJKZ0wgHUYvYEZ366BMU/2dQ6vVr19srMqx9UD/CVs8s5ppxCZKP +qO+jsMZSyi1swRXDOwV1w5Rd55prphC2T+jIegya0cF5ISfiFkJoWG+cYn/5kOsvFIa 3iU6msKqbwCC3C+NamQ9D+3ixHvHgeZTyYKT/AbZLpkXBVaG6fzAHtSHKqnAbaSmy8M/ kZ1ndLNxYUrhDE+tf4/3Ba30I0IBBi3gkEhMT2RR+BIlfIAwufrxki6vLM6Vm8iGwJZL ZtKw== X-Forwarded-Encrypted: i=1; AJvYcCWwl+1eJSrw/XHTzEsppg3JO4TmkU9FzObXFKRoJBdX0QBsa893FPxwKhjGGM8jBAY8FuPzDnpWEQsmXhVB@lists.postgresql.org X-Gm-Message-State: AOJu0Yz60EF+uRhAyoLdSRWotyO2+1DyqbbiaywZ/OgNhz0E2kYuHC6b d9PX5ZP0nLKgPyoez1pjIIeY8PA+mUdPwUbCC3PslctCNO8PrAX6sL18lbr7hIa3bBwh3p+zZjG xY6sUzeKbLAy8N0PMhJiZULDvX8RTJ5dpsevrbrHyOe9sSaO3ThgzoPk/R9CNSL6xVLEVFeAB2o u/PSX4QuTCTIW+dB0MzgXbOhad0rEwu/F4R7g8zsEb26tWIgbpu/Bv7arROObnEbgEbV2+AZALN VkPXIKbrf3MEVdy7Zlnuryn/RqAIHNtMmpCWLVN9jBGs9Dd/NDPLwWxg3n2MFxVMYU= X-Gm-Gg: ATEYQzyQUH/8RnvdYvQAMOwyEwIjDWmqfChYmCEwPYkiGTJljxgcTBD0cQzvNfY2yoz zkFWTdKwkQOm63MTh9kH21UDX6CWKHruT/jmakBrYgjX8uNCGt14fj3LHufipuJwe0E8kEUqDwA Tz9GOfAYY2do4sH+LhPVMNiuoXWQFF0la+Sse2ADUJAf0F/z5oC6QNxDsEBQ72WjHf6QML2ErvD YwQK+/inU3fD6N/Z8aCWEBJ5s1vkG2GHKxKqpwomXK5RH1+egW6l0KFJvbroJPBvQOJmlAZW6Xb pkDvH9tyvFSj+XryhWZ21mF4omJ29KJCc1zCaHt+JuCK6RgnElXO4ZFgUwLzrZwn81Yt X-Received: by 2002:a05:690c:6806:b0:798:5a44:781a with SMTP id 00721157ae682-79917facb54mr12459357b3.54.1773216107001; Wed, 11 Mar 2026 01:01:47 -0700 (PDT) MIME-Version: 1.0 References: <7db341e0-fbc6-4ec5-922c-11fdafe7be12@tantorlabs.com> <988e3168-6096-488a-bb42-787e1e8c21a4@tantorlabs.com> <21FF6A0B-886F-4132-B6A6-0F4E934B4CEE@Outlook.com> <8ee9d903-bb13-434c-8145-b3769bf2b3cb@tantorlabs.com> <9e3054ae-1c5d-46dd-9b6a-7fb67764b076@tantorlabs.com> <9067a807-f130-4631-8df4-076c6d7e43b6@tantorlabs.com> <03aa576f-13bb-4ed1-bee4-0ee69ad8813c@tantorlabs.com> <8375f8b5-1f21-401e-bbc3-a749302b76c7@tantorlabs.com> In-Reply-To: <8375f8b5-1f21-401e-bbc3-a749302b76c7@tantorlabs.com> From: Zsolt Parragi Date: Wed, 11 Mar 2026 08:01:37 +0000 X-Gm-Features: AaiRm50qMZrNTtAldGGxHJvXd4UmtdSUv1D-Erjo44uE1Nk6aSbUoyZu2TLXgv4 Message-ID: Subject: Re: Hash-based MCV matching for large IN-lists To: Ilia Evdokimov Cc: David Geier , Chengpeng Yan , Tatsuya Kawata , "pgsql-hackers@lists.postgresql.org" Content-Type: text/plain; charset="UTF-8" X-CLOUD-SEC-AV-Sent: true X-CLOUD-SEC-AV-Info: percona,google_mail,monitor X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk + if (elem_nulls[i]) + { + nonmcv_cnt--; + continue; + } > The patch v8 can still be reviewed as-is, and if the selectivity > regression test gets committed [0], I will add corresponding tests for > this change as well. Without [0], the const path will return incorrect results for <> ALL and NULLs. Compared to that, the other path still has special handling in it: + /* + * For ALL semantics, if the array contains NULL, assume + * operator is strict. The ScalarArrayOpExpr cannot + * evaluate to TRUE, so return zero. + */ + nonconst_sel = var_eq_non_const(&vardata, operator, + clause->inputcollid, + other_op, var_on_left, + isInequality); + if (isInequality) + individual_s = 1.0 - individual_s - nullfrac; Isn't this the double negation issue again, which was once mentioned/fixed earlier? + int count; /* number of occurrences of current value in */ That's a truncated comment