On Wed, Feb 18, 2026 at 04:38:07PM +0300, Nazir Bilal Yavuz wrote:
> By looking at these results having both is_csv and simd_enabled as an
> argument and sending them as constant boolean arguments help most.

Thanks for doing these tests.  ISTM we might as well get this initial
inlining stuff committed.  Thoughts?

-- 
nathan
>From 516176894a682e8bd4cb32202e3726f6621ba44d Mon Sep 17 00:00:00 2001
From: Nathan Bossart <[email protected]>
Date: Wed, 18 Feb 2026 14:55:39 -0600
Subject: [PATCH v8 1/1] Speedup COPY FROM with additional function inlining.

Following the example set by commit 58a359e585, we can squeeze out
a little more performance from COPY FROM (FORMAT {text,csv}) by
forcing CopyReadLineText() to be inlined and by passing the is_csv
parameter as a constant.  This allows the compiler to emit
specialized code with the known-const false comparisons and
subsequent branches removed.

Author: Nazir Bilal Yavuz <[email protected]>
Reviewed-by: Ayoub Kazar <[email protected]>
Discussion: 
https://postgr.es/m/CAOzEurSW8cNr6TPKsjrstnPfhf4QyQqB4tnPXGGe8N4e_v7Jig%40mail.gmail.com
---
 src/backend/commands/copyfromparse.c | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/src/backend/commands/copyfromparse.c 
b/src/backend/commands/copyfromparse.c
index 94d6f415a06..0aa549837b5 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -141,7 +141,8 @@ static const char BinarySignature[11] = 
"PGCOPY\n\377\r\n\0";
 
 /* non-export function prototypes */
 static bool CopyReadLine(CopyFromState cstate, bool is_csv);
-static bool CopyReadLineText(CopyFromState cstate, bool is_csv);
+static pg_attribute_always_inline bool CopyReadLineText(CopyFromState cstate,
+                                                                               
                                bool is_csv);
 static int     CopyReadAttributesText(CopyFromState cstate);
 static int     CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
@@ -1173,8 +1174,18 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
        resetStringInfo(&cstate->line_buf);
        cstate->line_buf_valid = false;
 
-       /* Parse data and transfer into line_buf */
-       result = CopyReadLineText(cstate, is_csv);
+       /*
+        * Parse data and transfer into line_buf.
+        *
+        * Because this is performance critical, we inline CopyReadLineText() 
and
+        * pass the boolean parameters as constants to allow the compiler to 
emit
+        * specialized code with the known-const false comparisons and 
subsequent
+        * branches removed.
+        */
+       if (is_csv)
+               result = CopyReadLineText(cstate, true);
+       else
+               result = CopyReadLineText(cstate, false);
 
        if (result)
        {
@@ -1241,7 +1252,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 /*
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
-static bool
+static pg_attribute_always_inline bool
 CopyReadLineText(CopyFromState cstate, bool is_csv)
 {
        char       *copy_input_buf;
-- 
2.50.1 (Apple Git-155)

Reply via email to