Skip to content
Snippets Groups Projects
Select Git revision
  • benchmark-tools
  • postgres-lambda
  • master default
  • REL9_4_25
  • REL9_5_20
  • REL9_6_16
  • REL_10_11
  • REL_11_6
  • REL_12_1
  • REL_12_0
  • REL_12_RC1
  • REL_12_BETA4
  • REL9_4_24
  • REL9_5_19
  • REL9_6_15
  • REL_10_10
  • REL_11_5
  • REL_12_BETA3
  • REL9_4_23
  • REL9_5_18
  • REL9_6_14
  • REL_10_9
  • REL_11_4
23 results

fe-exec.c

Blame
  • fe-exec.c 55.80 KiB
    /*-------------------------------------------------------------------------
     *
     * fe-exec.c
     *	  functions related to sending a query down to the backend
     *
     * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
     * Portions Copyright (c) 1994, Regents of the University of California
     *
     *
     * IDENTIFICATION
     *	  $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.107 2001/08/17 15:11:15 momjian Exp $
     *
     *-------------------------------------------------------------------------
     */
    #include "postgres_fe.h"
    
    #include <errno.h>
    #include <ctype.h>
    #include <fcntl.h>
    
    #include "libpq-fe.h"
    #include "libpq-int.h"
    
    #ifdef WIN32
    #include "win32.h"
    #else
    #include <unistd.h>
    #endif
    
    /* keep this in same order as ExecStatusType in libpq-fe.h */
    char	   *const pgresStatus[] = {
    	"PGRES_EMPTY_QUERY",
    	"PGRES_COMMAND_OK",
    	"PGRES_TUPLES_OK",
    	"PGRES_COPY_OUT",
    	"PGRES_COPY_IN",
    	"PGRES_BAD_RESPONSE",
    	"PGRES_NONFATAL_ERROR",
    	"PGRES_FATAL_ERROR"
    };
    
    
    /* Note: DONOTICE macro will work if applied to either PGconn or PGresult */
    #define DONOTICE(conn,message) \
    	((*(conn)->noticeHook) ((conn)->noticeArg, (message)))
    
    
    static void pqCatenateResultError(PGresult *res, const char *msg);
    static void saveErrorResult(PGconn *conn);
    static PGresult *prepareAsyncResult(PGconn *conn);
    static int	addTuple(PGresult *res, PGresAttValue * tup);
    static void parseInput(PGconn *conn);
    static void handleSendFailure(PGconn *conn);
    static int	getRowDescriptions(PGconn *conn);
    static int	getAnotherTuple(PGconn *conn, int binary);
    static int	getNotify(PGconn *conn);
    static int	getNotice(PGconn *conn);
    
    
    /* ----------------
     * Space management for PGresult.
     *
     * Formerly, libpq did a separate malloc() for each field of each tuple
     * returned by a query.  This was remarkably expensive --- malloc/free
     * consumed a sizable part of the application's runtime.  And there is
     * no real need to keep track of the fields separately, since they will
     * all be freed together when the PGresult is released.  So now, we grab
     * large blocks of storage from malloc and allocate space for query data
     * within these blocks, using a trivially simple allocator.  This reduces
     * the number of malloc/free calls dramatically, and it also avoids