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 1sfyqC-00DwMD-5B for pgsql-hackers@arkaria.postgresql.org; Mon, 19 Aug 2024 09:38:20 +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 1sfyq9-000S8k-Sh for pgsql-hackers@arkaria.postgresql.org; Mon, 19 Aug 2024 09:38:18 +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 1sfyq9-000S8c-Hh for pgsql-hackers@lists.postgresql.org; Mon, 19 Aug 2024 09:38:18 +0000 Received: from forward101d.mail.yandex.net ([2a02:6b8:c41:1300:1:45:d181:d101]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sfyq6-000NhJ-3d for pgsql-hackers@postgresql.org; Mon, 19 Aug 2024 09:38:17 +0000 Received: from mail-nwsmtp-smtp-production-main-91.myt.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-91.myt.yp-c.yandex.net [IPv6:2a02:6b8:c12:4c2a:0:640:f0d3:0]) by forward101d.mail.yandex.net (Yandex) with ESMTPS id ECFA9608D9 for ; Mon, 19 Aug 2024 12:38:09 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-91.myt.yp-c.yandex.net (smtp/Yandex) with ESMTPSA id 6cIxoKKMauQ0-FszXJSdn; Mon, 19 Aug 2024 12:38:08 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tantorlabs.com; s=mail; t=1724060289; bh=R4tIIULEUF4r2SNmoOtlF633egVuLGFVmrRhe2vdHPE=; h=Subject:To:Message-ID:Date:From; b=hwvLfxlHnpd4l9RSbEa2vTd5/iRiOCujzE96HG0J02zxpKxbWFfM+1J9r8B4dTCqt ZwzJOAi/U2BDaD6Ezc9LxIIA/VCJcVkdvvgUJ2hOjfQiY/Pi9QTw8CSS0Rc7HyM6Zb 7pLPhXSGRRE5D8YQlOpzY0+jRITmWALZ1eSMm4N4= Authentication-Results: mail-nwsmtp-smtp-production-main-91.myt.yp-c.yandex.net; dkim=pass header.i=@tantorlabs.com Content-Type: multipart/mixed; boundary="------------KwLZNR7k75ys69MFPdtN4Yy2" Message-ID: <016e33b7-2830-4300-bc89-e7ce9e613bad@tantorlabs.com> Date: Mon, 19 Aug 2024 12:38:05 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: pgsql-hackers From: Ilia Evdokimov Subject: Remove redundant NULL check in clause_selectivity_ext() function List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------KwLZNR7k75ys69MFPdtN4Yy2 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi everyone, In the `clause_selectivity_ext()` function, there’s a comment regarding a NULL clause check that asks, "can this still happen?". I decided to investigate whether this scenario is still valid. Here’s what I found after reviewing the relevant cases: - approx_tuple_count(): The function iterates over a loop of other clauses. - get_foreign_key_join_selectivity(): The function is invoked within an `if (clause)` condition. - consider_new_or_clause(): The clause is generated by `make_restrictinfo()`, which never returns NULL. - clauselist_selectivity_ext(): This function either checks `list_length(clauses) == 1` before being called, or it is called within a loop of clauses. In other cases, the function is called recursively from `clause_selectivity_ext()`. If you are aware of any situations where a NULL clause could be passed or if I’ve missed anything, please let me know. I’m also open to any other suggestions. -- Regards, Ilia Evdokimov, Tantor Labs LCC. --------------KwLZNR7k75ys69MFPdtN4Yy2 Content-Type: text/x-patch; charset=UTF-8; name="v1-0001-Remove-redundant-NULL-check-for-clause-during-select.patch" Content-Disposition: attachment; filename*0="v1-0001-Remove-redundant-NULL-check-for-clause-during-select"; filename*1=".patch" Content-Transfer-Encoding: base64 RnJvbSBmYWIwNTc1ZWYxMzUwY2I3MDBiNmZjMDc5MjMwMzk3ZWNiNWNhMTlkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBJbGlhIEV2ZG9raW1vdiA8aWx5YS5ldmRva2ltb3ZA dGFudG9ybGFicy5ydT4KRGF0ZTogTW9uLCAxOSBBdWcgMjAyNCAxMjowODo1MyArMDMwMApT dWJqZWN0OiBbUEFUQ0hdIFJlbW92ZSByZWR1bmRhbnQgTlVMTCBjaGVjayBmb3IgY2xhdXNl IGR1cmluZyBzZWxlY3Rpdml0eQogY2FsY3VsYXRpb24KClRoZSBmdW5jdGlvbiBjbGF1c2Vf c2VsZWN0aXZpdHlfZXh0KCkgdGFrZXMgYSBOb2RlICpjbGF1c2UgcGFyYW1ldGVyLAp3aGlj aCBpcyBlaXRoZXIgaXRlcmF0ZWQgb3ZlciBpbiBhIGxvb3Agd2l0aCBvdGhlciBjbGF1c2Vz IG9yIHBhc3NlZAphcyBhIFJlc3RyaWN0SW5mbyBmcm9tIG90aGVyIGZ1bmN0aW9ucy4KU2lu Y2UgdGhlc2UgZnVuY3Rpb25zIGd1YXJhbnRlZSB0aGF0IGNsYXVzZSBjYW5ub3QgYmUgTlVM TCwKdGhlIE5VTEwgY2hlY2sgaXMgdW5uZWNlc3NhcnkgYW5kIGhhcyBiZWVuIHJlbW92ZWQu Ci0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMgfCAzIC0tLQog MSBmaWxlIGNoYW5nZWQsIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9jbGF1c2VzZWwuYwppbmRleCAwYWIwMjFjMWU4Li41OTkyZjk2ZWQyIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwuYworKysgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwuYwpAQCAtNjkyLDkgKzY5Miw2IEBA IGNsYXVzZV9zZWxlY3Rpdml0eV9leHQoUGxhbm5lckluZm8gKnJvb3QsCiAJUmVzdHJpY3RJ bmZvICpyaW5mbyA9IE5VTEw7CiAJYm9vbAkJY2FjaGVhYmxlID0gZmFsc2U7CiAKLQlpZiAo Y2xhdXNlID09IE5VTEwpCQkJLyogY2FuIHRoaXMgc3RpbGwgaGFwcGVuPyAqLwotCQlyZXR1 cm4gczE7Ci0KIAlpZiAoSXNBKGNsYXVzZSwgUmVzdHJpY3RJbmZvKSkKIAl7CiAJCXJpbmZv ID0gKFJlc3RyaWN0SW5mbyAqKSBjbGF1c2U7Ci0tIAoyLjM0LjEKCg== --------------KwLZNR7k75ys69MFPdtN4Yy2--