]> granicus.if.org Git - postgresql/commitdiff
Replace pq_getbytes(&ch, 1) calls with pq_getbyte(), which is easier
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 4 Dec 2001 19:40:17 +0000 (19:40 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 4 Dec 2001 19:40:17 +0000 (19:40 +0000)
to use and significantly faster.  This tweak saves 25% (!) of the runtime
of COPY IN in a test with 8000-character lines.  I wouldn't normally
commit a performance improvement this late in the cycle, but 25% got
my attention...

src/backend/commands/copy.c
src/backend/libpq/pqcomm.c
src/backend/tcop/postgres.c
src/include/libpq/libpq.h

index 7f1e288fab9ff7ebd1b2e997511c2c8afd98ee9e..726ae39324fc73f35e6812d18b4f089f1edde005 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.142 2001/10/25 05:49:24 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.143 2001/12/04 19:40:16 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -157,13 +157,10 @@ CopyGetChar(FILE *fp)
 {
        if (!fp)
        {
-               unsigned char ch;
+               int                     ch = pq_getbyte();
 
-               if (pq_getbytes((char *) &ch, 1))
-               {
+               if (ch == EOF)
                        fe_eof = true;
-                       return EOF;
-               }
                return ch;
        }
        else
@@ -209,12 +206,9 @@ CopyDonePeek(FILE *fp, int c, int pickup)
                if (pickup)
                {
                        /*
-                        * We want to pick it up - just receive again into dummy
-                        * buffer
+                        * We want to pick it up
                         */
-                       char            c;
-
-                       pq_getbytes(&c, 1);
+                       (void) pq_getbyte();
                }
                /* If we didn't want to pick it up, just leave it where it sits */
        }
index 181c46416b7a05d16201ba7a2ab6e7026efa6628..7a46961222c26f3f6eab2ed13eb7650812a9e07d 100644 (file)
@@ -29,7 +29,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- *     $Id: pqcomm.c,v 1.124 2001/11/12 04:54:08 tgl Exp $
+ *     $Id: pqcomm.c,v 1.125 2001/12/04 19:40:17 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -47,6 +47,7 @@
  * low-level I/O:
  *             pq_getbytes             - get a known number of bytes from connection
  *             pq_getstring    - get a null terminated string from connection
+ *             pq_getbyte              - get next byte from connection
  *             pq_peekbyte             - peek at next byte from connection
  *             pq_putbytes             - send bytes to connection (not flushed until pq_flush)
  *             pq_flush                - flush pending output
@@ -527,7 +528,7 @@ pq_recvbuf(void)
  *             pq_getbyte      - get a single byte from connection, or return EOF
  * --------------------------------
  */
-static int
+int
 pq_getbyte(void)
 {
        while (PqRecvPointer >= PqRecvLength)
index c7b227cd7153db0d732960b15c6cc9f907803b55..85d0346b65e95acb98ce9f972b617fe9c82355ca 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.242 2001/11/10 23:51:14 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.243 2001/12/04 19:40:17 tgl Exp $
  *
  * NOTES
  *       this is the "main" module of the postgres backend and
@@ -242,25 +242,25 @@ InteractiveBackend(StringInfo inBuf)
 static int
 SocketBackend(StringInfo inBuf)
 {
-       char            qtype;
-       char            result = '\0';
+       int                     qtype;
 
        /*
         * get input from the frontend
         */
-       qtype = '?';
-       if (pq_getbytes(&qtype, 1) == EOF)
-               return EOF;
+       qtype = pq_getbyte();
 
        switch (qtype)
        {
+               case EOF:
+                       /* frontend disconnected */
+                       break;
+
                        /*
                         * 'Q': user entered a query
                         */
                case 'Q':
                        if (pq_getstr(inBuf))
                                return EOF;
-                       result = 'Q';
                        break;
 
                        /*
@@ -269,14 +269,12 @@ SocketBackend(StringInfo inBuf)
                case 'F':
                        if (pq_getstr(inBuf))
                                return EOF;             /* ignore "string" at start of F message */
-                       result = 'F';
                        break;
 
                        /*
                         * 'X':  frontend is exiting
                         */
                case 'X':
-                       result = 'X';
                        break;
 
                        /*
@@ -289,7 +287,8 @@ SocketBackend(StringInfo inBuf)
                        elog(FATAL, "Socket command type %c unknown", qtype);
                        break;
        }
-       return result;
+
+       return qtype;
 }
 
 /* ----------------
@@ -1627,7 +1626,7 @@ PostgresMain(int argc, char *argv[], const char *username)
        if (!IsUnderPostmaster)
        {
                puts("\nPOSTGRES backend interactive interface ");
-               puts("$Revision: 1.242 $ $Date: 2001/11/10 23:51:14 $\n");
+               puts("$Revision: 1.243 $ $Date: 2001/12/04 19:40:17 $\n");
        }
 
        /*
index 0da1568069e4ae36d69cdcd25565eef3fb5e7469..a68d546d425fc49c473b766abde19e6b1df8184c 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: libpq.h,v 1.48 2001/11/05 17:46:33 momjian Exp $
+ * $Id: libpq.h,v 1.49 2001/12/04 19:40:17 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -62,6 +62,7 @@ extern void StreamClose(int sock);
 extern void pq_init(void);
 extern int     pq_getbytes(char *s, size_t len);
 extern int     pq_getstring(StringInfo s);
+extern int     pq_getbyte(void);
 extern int     pq_peekbyte(void);
 extern int     pq_putbytes(const char *s, size_t len);
 extern int     pq_flush(void);