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 1nggSI-0002ly-5a for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Apr 2022 05:31:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nggRJ-0003uY-2f for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Apr 2022 05:30:13 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nggRI-0003uP-MP for pgsql-hackers@lists.postgresql.org; Tue, 19 Apr 2022 05:30:12 +0000 Received: from mail-oa1-x30.google.com ([2001:4860:4864:20::30]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nggRG-0002Nb-Fa; Tue, 19 Apr 2022 05:30:12 +0000 Received: by mail-oa1-x30.google.com with SMTP id 586e51a60fabf-d6e29fb3d7so16386066fac.7; Mon, 18 Apr 2022 22:30:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=pDF+bcQCtRJKmH3P+PPYcA+3LjHczHK8pYnkgGCEW98=; b=WOnpC+nx50+k9wrr9YrIczQ1iQRf2lhseEWwl1awagWussk0dKL5Nd85N8jeWZnwhS wkab2jEu5l9PlPdeyJSJBL7MIsxzPpz8NcvIByL4zw1zL4T9raXS4nML/zKTOry2HOP8 duY0dZuZpMCWhn5hx+lub86chiH/z7eKxGCz/l+tdA9282dF6OVWjLj0SINsoUusB771 i9fc/SocjNuQxMZLZmiI2gSevn1ibF9FnqiExP/qHr/W3Gw45x7k93CA2gn467OGSYfN YeCicreKWNF4TS3G6MuPzuc5bjP4I4qSgTvRiaesUNgoz/+Qzqhixs0teRVgFrgJmjcw 4U/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=pDF+bcQCtRJKmH3P+PPYcA+3LjHczHK8pYnkgGCEW98=; b=GCOdJkYzbPjwxbPvyimpMIrp9PG/fIZ74GCu8IP5tH7HEYx50MXwqgtV3WvAsvpBle QdSmML/2uAokNiYrvl04zL83qjnsq93MOfeqbxCCeFR7Whkbw5V9NnZQhuo1eQiE4KCw +axrmWDuwDeWbXjcrpQdSeACV86PnKBXTZ89NkuIHRqXNfpNpCd3625qsjSTxB7b5nDO xgxGYMwUzxTupuBRn0ZiJ28Fp6lP/H4R0o8qF4L/Xuo4mHyyWGqyGOBNgeUXb+4YOnXa /9ohaftC9WjYMmTvxcbb38tPVdcS/BKbgmGKj9uJdQIratjbhod77ttLTP54/H1BU34c 7SuQ== X-Gm-Message-State: AOAM531bjUIHl1ssi2x3hJusr0EzPu+rahxnVWZNdtk2CYiupZIEjNVD Nf7NojmfLLOhpbAT1geBewW6G3pwa1WKzwWDOOg= X-Google-Smtp-Source: ABdhPJxkwvzQFbvOZ+rlLWO7cVPzspgRma0GIMwD7oK+F5/nEw4Eq431I0LoD7IHPT0+P+rUqFSstTdmnsdjwvMEZTE= X-Received: by 2002:a05:6870:d28d:b0:da:b3f:3234 with SMTP id d13-20020a056870d28d00b000da0b3f3234mr5625894oae.228.1650346208245; Mon, 18 Apr 2022 22:30:08 -0700 (PDT) MIME-Version: 1.0 References: <20220402202027.GG28503@telsasoft.com> <20220402210333.bwf4h375p4fxt5j6@alap3.anarazel.de> <20220402231151.635ohpc4q3gppdzb@alap3.anarazel.de> <20220403163256.ythjrgtwe2nbwajc@alap3.anarazel.de> In-Reply-To: From: David Rowley Date: Tue, 19 Apr 2022 17:29:56 +1200 Message-ID: Subject: Re: A qsort template To: John Naylor Cc: Thomas Munro , Andres Freund , Justin Pryzby , Peter Geoghegan , pgsql-hackers , Robert Haas Content-Type: multipart/mixed; boundary="0000000000007fea7005dcfb2bd4" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007fea7005dcfb2bd4 Content-Type: text/plain; charset="UTF-8" Thanks for looking at this. On Tue, 19 Apr 2022 at 02:11, John Naylor wrote: > IIUC, this function is called by tuplesort_begin_common, which in turn > is called by tuplesort_begin_{heap, indexes, etc}. The latter callers > set the onlyKey and now oneKeySort variables as appropriate, and > sometimes hard-coded to false. Is it intentional to set them here > first? > > Falling under the polish that you were likely thinking of above: I did put the patch together quickly just for the benchmark and at the time I was subtly aware that the onlyKey field was being set using a similar condition as I was using to set the boolean field I'd added. On reflection today, it should be fine just to check if that field is NULL or not in the 3 new comparison functions. Similarly to before, this only needs to be done if the datums compare equally, so does not add any code to the path where the datums are non-equal. It looks like the other tuplesort_begin_* functions use a different comparison function that will never make use of the specialization comparison functions added by 697492434. I separated out the "or" condition that I'd added tot he existing "if" to make it easier to write a comment explaining why we can skip the tiebreak function call. Updated patch attached. David --0000000000007fea7005dcfb2bd4 Content-Type: text/plain; charset="US-ASCII"; name="skip_calling_sort_tiebreak_when_not_needed2.patch" Content-Disposition: attachment; filename="skip_calling_sort_tiebreak_when_not_needed2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l25pd7ds0 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0LmMgYi9zcmMvYmFj a2VuZC91dGlscy9zb3J0L3R1cGxlc29ydC5jCmluZGV4IDExNzRlMWEzMWMuLjEyZDFiZjU1MWIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0LmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvc29ydC90dXBsZXNvcnQuYwpAQCAtNDM2LDcgKzQzNiwxMCBAQCBzdHJ1 Y3QgVHVwbGVzb3J0c3RhdGUKIAogCS8qCiAJICogVGhpcyB2YXJpYWJsZSBpcyBzaGFyZWQgYnkg dGhlIHNpbmdsZS1rZXkgTWluaW1hbFR1cGxlIGNhc2UgYW5kIHRoZQotCSAqIERhdHVtIGNhc2Ug KHdoaWNoIGJvdGggdXNlIHFzb3J0X3NzdXAoKSkuICBPdGhlcndpc2UgaXQncyBOVUxMLgorCSAq IERhdHVtIGNhc2UgKHdoaWNoIGJvdGggdXNlIHFzb3J0X3NzdXAoKSkuICBJdCBpcyBhbHNvIHVz ZWQgYnkgdmFyaW91cworCSAqIHNvcnQgc3BlY2lhbGl6YXRpb24gZnVuY3Rpb25zIHdoZW4gY29t cGFyaW5nIHRoZSBsZWFkaW5nIGtleSBpbiBhCisJICogdGllYnJlYWsgc2l0dWF0aW9uIHRvIGRl dGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHN1YnNlcXVlbnQga2V5cyB0bworCSAqIHNvcnQgb24u IEl0J3Mgb3RoZXJ3aXNlIE5VTEwuCiAJICovCiAJU29ydFN1cHBvcnQgb25seUtleTsKIApAQCAt Njk4LDcgKzcwMSwxMiBAQCBxc29ydF90dXBsZV91bnNpZ25lZF9jb21wYXJlKFNvcnRUdXBsZSAq YSwgU29ydFR1cGxlICpiLCBUdXBsZXNvcnRzdGF0ZSAqc3RhdGUpCiAJY29tcGFyZSA9IEFwcGx5 VW5zaWduZWRTb3J0Q29tcGFyYXRvcihhLT5kYXR1bTEsIGEtPmlzbnVsbDEsCiAJCQkJCQkJCQkJ ICBiLT5kYXR1bTEsIGItPmlzbnVsbDEsCiAJCQkJCQkJCQkJICAmc3RhdGUtPnNvcnRLZXlzWzBd KTsKLQlpZiAoY29tcGFyZSAhPSAwKQorCisJLyoKKwkgKiBObyBuZWVkIHRvIGNhbGwgdGhlIHRp ZWJyZWFrIGZ1bmN0aW9uIHdoZW4gdGhlIGRhdHVtcyBkaWZmZXIgb3IgaWYgdGhpcworCSAqIGlz IHRoZSBvbmx5IGtleSB3ZSdyZSBzb3J0aW5nIG9uLgorCSAqLworCWlmIChjb21wYXJlICE9IDAg fHwgc3RhdGUtPm9ubHlLZXkgIT0gTlVMTCkKIAkJcmV0dXJuIGNvbXBhcmU7CiAKIAlyZXR1cm4g c3RhdGUtPmNvbXBhcmV0dXAoYSwgYiwgc3RhdGUpOwpAQCAtNzEzLDcgKzcyMSwxMiBAQCBxc29y dF90dXBsZV9zaWduZWRfY29tcGFyZShTb3J0VHVwbGUgKmEsIFNvcnRUdXBsZSAqYiwgVHVwbGVz b3J0c3RhdGUgKnN0YXRlKQogCWNvbXBhcmUgPSBBcHBseVNpZ25lZFNvcnRDb21wYXJhdG9yKGEt PmRhdHVtMSwgYS0+aXNudWxsMSwKIAkJCQkJCQkJCQliLT5kYXR1bTEsIGItPmlzbnVsbDEsCiAJ CQkJCQkJCQkJJnN0YXRlLT5zb3J0S2V5c1swXSk7Ci0JaWYgKGNvbXBhcmUgIT0gMCkKKworCS8q CisJICogTm8gbmVlZCB0byBjYWxsIHRoZSB0aWVicmVhayBmdW5jdGlvbiB3aGVuIHRoZSBkYXR1 bXMgZGlmZmVyIG9yIGlmIHRoaXMKKwkgKiBpcyB0aGUgb25seSBrZXkgd2UncmUgc29ydGluZyBv bi4KKwkgKi8KKwlpZiAoY29tcGFyZSAhPSAwIHx8IHN0YXRlLT5vbmx5S2V5ICE9IE5VTEwpCiAJ CXJldHVybiBjb21wYXJlOwogCiAJcmV0dXJuIHN0YXRlLT5jb21wYXJldHVwKGEsIGIsIHN0YXRl KTsKQEAgLTcyOCw3ICs3NDEsMTIgQEAgcXNvcnRfdHVwbGVfaW50MzJfY29tcGFyZShTb3J0VHVw bGUgKmEsIFNvcnRUdXBsZSAqYiwgVHVwbGVzb3J0c3RhdGUgKnN0YXRlKQogCWNvbXBhcmUgPSBB cHBseUludDMyU29ydENvbXBhcmF0b3IoYS0+ZGF0dW0xLCBhLT5pc251bGwxLAogCQkJCQkJCQkJ CWItPmRhdHVtMSwgYi0+aXNudWxsMSwKIAkJCQkJCQkJCQkmc3RhdGUtPnNvcnRLZXlzWzBdKTsK LQlpZiAoY29tcGFyZSAhPSAwKQorCisJLyoKKwkgKiBObyBuZWVkIHRvIGNhbGwgdGhlIHRpZWJy ZWFrIGZ1bmN0aW9uIHdoZW4gdGhlIGRhdHVtcyBkaWZmZXIgb3IgaWYgdGhpcworCSAqIGlzIHRo ZSBvbmx5IGtleSB3ZSdyZSBzb3J0aW5nIG9uLgorCSAqLworCWlmIChjb21wYXJlICE9IDAgfHwg c3RhdGUtPm9ubHlLZXkgIT0gTlVMTCkKIAkJcmV0dXJuIGNvbXBhcmU7CiAKIAlyZXR1cm4gc3Rh dGUtPmNvbXBhcmV0dXAoYSwgYiwgc3RhdGUpOwo= --0000000000007fea7005dcfb2bd4--