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 1rqBwv-00B726-WF for pgsql-hackers@arkaria.postgresql.org; Fri, 29 Mar 2024 13:07:14 +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 1rqBwv-000wDL-0J for pgsql-hackers@arkaria.postgresql.org; Fri, 29 Mar 2024 13:07:13 +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 1rqBwu-000wC0-He for pgsql-hackers@lists.postgresql.org; Fri, 29 Mar 2024 13:07:12 +0000 Received: from mail-ej1-x62f.google.com ([2a00:1450:4864:20::62f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rqBwr-007ILe-03 for pgsql-hackers@postgresql.org; Fri, 29 Mar 2024 13:07:11 +0000 Received: by mail-ej1-x62f.google.com with SMTP id a640c23a62f3a-a450bedffdfso223281466b.3 for ; Fri, 29 Mar 2024 06:07:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cybertec-at.20230601.gappssmtp.com; s=20230601; t=1711717628; x=1712322428; darn=postgresql.org; h=mime-version:user-agent:content-transfer-encoding:autocrypt :references:in-reply-to:date:cc:to:from:subject:message-id:from:to :cc:subject:date:message-id:reply-to; bh=Siu6BcIgG1W1EywsYLr4OHqLxxQke2xEWXRtTNs5RKM=; b=1+PEer1TgXgBUc1zOGsCdv510P3OmXCgiLoccdDf14IiHmZnJujIXxapCcd8aS8ruZ ANQYLNX3NGff6C8OSoghfn0Y12L9DeQfaRxHRlcYVphHEOFWYXqnFmw2XOBObt2lQ00+ vP7e6oKiCycdR5xLFeXCJLqMfhzRp2y4z/OUcLAcjWT+DGqVioB1a01m08veWv2hsMuz OQ7JhVYf5kD6bQGRktG8bJHpZl6+fxRS2fgcg3Dv0qKZ6oBk/hXY25UX/oL9eRKgkzaL GeB5kln7BTg6+cqCZUQM3Ebg8Z5JTBdRdsbs6FOL56YBUmAnGvwyRDXpl+vimMSavelk LIMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711717628; x=1712322428; h=mime-version:user-agent:content-transfer-encoding:autocrypt :references:in-reply-to:date:cc:to:from:subject:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Siu6BcIgG1W1EywsYLr4OHqLxxQke2xEWXRtTNs5RKM=; b=KqXhM5+nk1FrN12V5RmEzRKSWoTZdAHB6ubUQtxG09KakRbHOcjPHQDtPA164SBhDs MvlLorSBoSoRilCX3utOuUP5SibaaJmh3z3KtrtBx4xmss1JWwr2bxQYI3fLO0rcug5d KNHs2w3Y2LN7lU0DSnRe3gwrA0WKDg++tZU1l0Qr0RRucJ9uI/MD5/HwpeQ9CH36mjr/ HE1N8scTTZhKca28jQGnoNEYr73OnPGdogJxxWSrqq2esx+HIj4aTBj7vOlGmdn6rbD1 sOw/+BEPstxIjKdpmIIRYePVGdg2Bg0TPh6Q2kQsI96X6NKBtbkxMR18ht14KDtaYy9h ++Qg== X-Gm-Message-State: AOJu0YzlrG6iT10AWTPNHI+ICymtYEmVcs61/MCA7Rc2EBX0yNWn+GJF BJ9ffC+jHjDG4VcBdjHA4E68Xr3RLdP7RLLjVRJXLX7TfMQb1Uui2TJ5R2v7wgs= X-Google-Smtp-Source: AGHT+IEVerCSShq3Pz0Kpa8HnOXT/b7hM1wfUmWSN2CkSb0GrtdMQ2EJw0KYeUTtY50YBVIul9Rkog== X-Received: by 2002:a17:906:ad96:b0:a4e:4047:3eb7 with SMTP id la22-20020a170906ad9600b00a4e40473eb7mr395442ejb.14.1711717628310; Fri, 29 Mar 2024 06:07:08 -0700 (PDT) Received: from localhost.localdomain ([2001:871:5e:4f14:9626:51c0:dc2c:a039]) by smtp.gmail.com with ESMTPSA id ef5-20020a17090697c500b00a473792da26sm1938683ejb.19.2024.03.29.06.07.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 Mar 2024 06:07:08 -0700 (PDT) Message-ID: <7a3a478be2a16465ac93ba01b13e1081568cbbd9.camel@cybertec.at> Subject: Re: psql's FETCH_COUNT (cursor) is not being respected for CTEs From: Laurenz Albe To: Daniel Verite Cc: PostgreSQL Hackers , Tom Lane , Robert Haas , Jakub Wartak Date: Fri, 29 Mar 2024 14:07:06 +0100 In-Reply-To: References: Autocrypt: addr=laurenz.albe@cybertec.at; prefer-encrypt=mutual; keydata=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 +AnW5l0HsQcY9ntFL/zEBOaonjdJf Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable User-Agent: Evolution 3.50.4 (3.50.4-1.fc39) MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Tue, 2024-01-30 at 15:29 +0100, Daniel Verite wrote: > PFA a rebased version. I had a look at patch 0001 (0002 will follow). > - > - Retrieving Query Results Row-by-Row > + > + Retrieving Query Results by chunks That should be "in chunks". > + > + > + > + PQsetChunkedRowsMode > + PQsetChunkedRowsMode > + > + > + Select the mode retrieving results in chunks for the currently-ex= ecuting query. That is questionable English. How about Select to receive the results for the currently-executing query in chunks= . > + This function is similar to , > + except that it can retrieve a user-specified number of rows > + per call to , instead of a s= ingle row. The "user-specified number" is "maxRows". So a better wording would be: ... except that it can retrieve maxRows rows per call to instead of a single row= . > - error. But in single-row mode, those rows will have already been > + error. But in single-row or chunked modes, those rows will have alr= eady been I'd say it should be "in *the* single-row or chunk modes". > --- a/src/interfaces/libpq/fe-exec.c > +++ b/src/interfaces/libpq/fe-exec.c > @@ -41,7 +41,8 @@ char *const pgresStatus[] =3D { > "PGRES_COPY_BOTH", > "PGRES_SINGLE_TUPLE", > "PGRES_PIPELINE_SYNC", > - "PGRES_PIPELINE_ABORTED" > + "PGRES_PIPELINE_ABORTED", > + "PGRES_TUPLES_CHUNK" > }; I think that PGRES_SINGLE_TUPLE and PGRES_TUPLES_CHUNK should be next to ea= ch other, but that's no big thing. The same applies to the change in src/interfaces/libpq/libpq-fe.h I understand that we need to keep the single-row mode for compatibility reasons. But I think that under the hood, "single-row mode" should be the same as "chunk mode with chunk size one". That should save some code repetition. Yours, Laurenz Albe