Run pgindent over ODBC source. We couldn't do this years ago because we
authorBruce Momjian <bruce@momjian.us>
Sat, 10 Feb 2001 07:01:19 +0000 (07:01 +0000)
committerBruce Momjian <bruce@momjian.us>
Sat, 10 Feb 2001 07:01:19 +0000 (07:01 +0000)
weren't the master source.  We are now, and it really needs it.

43 files changed:
bind.c
bind.h
columninfo.c
columninfo.h
connection.c
connection.h
convert.c
convert.h
dlg_specific.c
dlg_specific.h
drvconn.c
environ.c
environ.h
execute.c
gpps.c
gpps.h
info.c
iodbc.h
isql.h
isqlext.h
lobj.c
lobj.h
misc.c
misc.h
options.c
parse.c
pgtypes.c
pgtypes.h
psqlodbc.c
psqlodbc.h
qresult.c
qresult.h
resource.h
results.c
setup.c
socket.c
socket.h
statement.c
statement.h
tuple.c
tuple.h
tuplelist.c
tuplelist.h

diff --git a/bind.c b/bind.c
index ce25c4a1c3a26e1b5f27a94024817bad3da264fd..5589db97374e50352b59b9d149787cc016c3535c 100644 (file)
--- a/bind.c
+++ b/bind.c
@@ -1,14 +1,14 @@
-/* Module:          bind.c
+/* Module:         bind.c
  *
- * Description:     This module contains routines related to binding 
- *                  columns and parameters.
+ * Description:        This module contains routines related to binding
+ *                 columns and parameters.
  *
- * Classes:         BindInfoClass, ParameterInfoClass
+ * Classes:            BindInfoClass, ParameterInfoClass
  *
- * API functions:   SQLBindParameter, SQLBindCol, SQLDescribeParam, SQLNumParams,
- *                  SQLParamOptions(NI)
+ * API functions:  SQLBindParameter, SQLBindCol, SQLDescribeParam, SQLNumParams,
+ *                 SQLParamOptions(NI)
  *
- * Comments:        See "notice.txt" for copyright and license information.
+ * Comments:       See "notice.txt" for copyright and license information.
  *
  */
 
 #include "sqlext.h"
 #endif
 
-/*      Bind parameters on a statement handle */
-
-RETCODE SQL_API SQLBindParameter(
-        HSTMT      hstmt,
-        UWORD      ipar,
-        SWORD      fParamType,
-        SWORD      fCType,
-        SWORD      fSqlType,
-        UDWORD     cbColDef,
-        SWORD      ibScale,
-        PTR        rgbValue,
-        SDWORD     cbValueMax,
-        SDWORD FAR *pcbValue)
+/*     Bind parameters on a statement handle */
+
+RETCODE SQL_API
+SQLBindParameter(
+                HSTMT hstmt,
+                UWORD ipar,
+                SWORD fParamType,
+                SWORD fCType,
+                SWORD fSqlType,
+                UDWORD cbColDef,
+                SWORD ibScale,
+                PTR rgbValue,
+                SDWORD cbValueMax,
+                SDWORD FAR * pcbValue)
 {
-StatementClass *stmt = (StatementClass *) hstmt;
-static char *func="SQLBindParameter";
+   StatementClass *stmt = (StatementClass *) hstmt;
+   static char *func = "SQLBindParameter";
 
-   mylog( "%s: entering...\n", func);
+   mylog("%s: entering...\n", func);
 
-   if( ! stmt) {
+   if (!stmt)
+   {
        SC_log_error(func, "", NULL);
        return SQL_INVALID_HANDLE;
    }
 
-   if(stmt->parameters_allocated < ipar) {
+   if (stmt->parameters_allocated < ipar)
+   {
        ParameterInfoClass *old_parameters;
-       int i, old_parameters_allocated;
+       int         i,
+                   old_parameters_allocated;
 
        old_parameters = stmt->parameters;
        old_parameters_allocated = stmt->parameters_allocated;
 
-       stmt->parameters = (ParameterInfoClass *) malloc(sizeof(ParameterInfoClass)*(ipar));
-       if ( ! stmt->parameters) {
+       stmt->parameters = (ParameterInfoClass *) malloc(sizeof(ParameterInfoClass) * (ipar));
+       if (!stmt->parameters)
+       {
            stmt->errornumber = STMT_NO_MEMORY_ERROR;
            stmt->errormsg = "Could not allocate memory for statement parameters";
            SC_log_error(func, "", stmt);
@@ -75,18 +80,23 @@ static char *func="SQLBindParameter";
        stmt->parameters_allocated = ipar;
 
        /* copy the old parameters over */
-       for(i = 0; i < old_parameters_allocated; i++) {
+       for (i = 0; i < old_parameters_allocated; i++)
+       {
            /* a structure copy should work */
            stmt->parameters[i] = old_parameters[i];
        }
 
        /* get rid of the old parameters, if there were any */
-       if(old_parameters)
+       if (old_parameters)
            free(old_parameters);
 
-       /* zero out the newly allocated parameters (in case they skipped some, */
+       /*
+        * zero out the newly allocated parameters (in case they skipped
+        * some,
+        */
        /* so we don't accidentally try to use them later) */
-       for(; i < stmt->parameters_allocated; i++) {
+       for (; i < stmt->parameters_allocated; i++)
+       {
            stmt->parameters[i].buflen = 0;
            stmt->parameters[i].buffer = 0;
            stmt->parameters[i].used = 0;
@@ -102,7 +112,8 @@ static char *func="SQLBindParameter";
        }
    }
 
-   ipar--;     /* use zero based column numbers for the below part */
+   ipar--;                     /* use zero based column numbers for the
+                                * below part */
 
    /* store the given info */
    stmt->parameters[ipar].buflen = cbValueMax;
@@ -114,74 +125,84 @@ static char *func="SQLBindParameter";
    stmt->parameters[ipar].precision = cbColDef;
    stmt->parameters[ipar].scale = ibScale;
 
-   /*  If rebinding a parameter that had data-at-exec stuff in it,
-       then free that stuff
-   */
-   if (stmt->parameters[ipar].EXEC_used) {
+   /*
+    * If rebinding a parameter that had data-at-exec stuff in it, then
+    * free that stuff
+    */
+   if (stmt->parameters[ipar].EXEC_used)
+   {
        free(stmt->parameters[ipar].EXEC_used);
        stmt->parameters[ipar].EXEC_used = NULL;
    }
 
-   if (stmt->parameters[ipar].EXEC_buffer) {
+   if (stmt->parameters[ipar].EXEC_buffer)
+   {
        if (stmt->parameters[ipar].SQLType != SQL_LONGVARBINARY)
            free(stmt->parameters[ipar].EXEC_buffer);
        stmt->parameters[ipar].EXEC_buffer = NULL;
    }
 
-   /*  Data at exec macro only valid for C char/binary data */
+   /* Data at exec macro only valid for C char/binary data */
    if ((fSqlType == SQL_LONGVARBINARY || fSqlType == SQL_LONGVARCHAR) && pcbValue && *pcbValue <= SQL_LEN_DATA_AT_EXEC_OFFSET)
        stmt->parameters[ipar].data_at_exec = TRUE;
    else
        stmt->parameters[ipar].data_at_exec = FALSE;
 
-   mylog("SQLBindParamater: ipar=%d, paramType=%d, fCType=%d, fSqlType=%d, cbColDef=%d, ibScale=%d, rgbValue=%d, *pcbValue = %d, data_at_exec = %d\n", ipar, fParamType, fCType, fSqlType, cbColDef, ibScale, rgbValue, pcbValue ? *pcbValue: -777, stmt->parameters[ipar].data_at_exec);
+   mylog("SQLBindParamater: ipar=%d, paramType=%d, fCType=%d, fSqlType=%d, cbColDef=%d, ibScale=%d, rgbValue=%d, *pcbValue = %d, data_at_exec = %d\n", ipar, fParamType, fCType, fSqlType, cbColDef, ibScale, rgbValue, pcbValue ? *pcbValue : -777, stmt->parameters[ipar].data_at_exec);
 
    return SQL_SUCCESS;
 }
 
-/*      -       -       -       -       -       -       -       -       - */
-
-/*      Associate a user-supplied buffer with a database column. */
-RETCODE SQL_API SQLBindCol(
-        HSTMT      hstmt,
-        UWORD      icol,
-        SWORD      fCType,
-        PTR        rgbValue,
-        SDWORD     cbValueMax,
-        SDWORD FAR *pcbValue)
+/*     -       -       -       -       -       -       -       -       - */
+
+/*     Associate a user-supplied buffer with a database column. */
+RETCODE SQL_API
+SQLBindCol(
+          HSTMT hstmt,
+          UWORD icol,
+          SWORD fCType,
+          PTR rgbValue,
+          SDWORD cbValueMax,
+          SDWORD FAR * pcbValue)
 {
-StatementClass *stmt = (StatementClass *) hstmt;
-static char *func="SQLBindCol";
+   StatementClass *stmt = (StatementClass *) hstmt;
+   static char *func = "SQLBindCol";
+
+   mylog("%s: entering...\n", func);
 
-   mylog( "%s: entering...\n", func);
-    
-mylog("**** SQLBindCol: stmt = %u, icol = %d\n", stmt, icol);
+   mylog("**** SQLBindCol: stmt = %u, icol = %d\n", stmt, icol);
 
-   if ( ! stmt) {
+   if (!stmt)
+   {
        SC_log_error(func, "", NULL);
        return SQL_INVALID_HANDLE;
    }
 
 
    SC_clear_error(stmt);
-    
-   if( stmt->status == STMT_EXECUTING) {
+
+   if (stmt->status == STMT_EXECUTING)
+   {
        stmt->errormsg = "Can't bind columns while statement is still executing.";
        stmt->errornumber = STMT_SEQUENCE_ERROR;
        SC_log_error(func, "", stmt);
        return SQL_ERROR;
    }
 
-   /*  If the bookmark column is being bound, then just save it */
-   if (icol == 0) {
+   /* If the bookmark column is being bound, then just save it */
+   if (icol == 0)
+   {
 
-       if (rgbValue == NULL) {
+       if (rgbValue == NULL)
+       {
            stmt->bookmark.buffer = NULL;
            stmt->bookmark.used = NULL;
        }
-       else {
-           /*  Make sure it is the bookmark data type */
-           if ( fCType != SQL_C_BOOKMARK) {
+       else
+       {
+           /* Make sure it is the bookmark data type */
+           if (fCType != SQL_C_BOOKMARK)
+           {
                stmt->errormsg = "Column 0 is not of type SQL_C_BOOKMARK";
                stmt->errornumber = STMT_PROGRAM_TYPE_OUT_OF_RANGE;
                SC_log_error(func, "", stmt);
@@ -194,37 +215,42 @@ mylog("**** SQLBindCol: stmt = %u, icol = %d\n", stmt, icol);
        return SQL_SUCCESS;
    }
 
-   /*  allocate enough bindings if not already done */
-   /*  Most likely, execution of a statement would have setup the  */
-   /*  necessary bindings. But some apps call BindCol before any */
-   /*  statement is executed. */
-   if ( icol > stmt->bindings_allocated)
+   /* allocate enough bindings if not already done */
+   /* Most likely, execution of a statement would have setup the  */
+   /* necessary bindings. But some apps call BindCol before any */
+   /* statement is executed. */
+   if (icol > stmt->bindings_allocated)
        extend_bindings(stmt, icol);
 
-   /*  check to see if the bindings were allocated */
-   if ( ! stmt->bindings) {
+   /* check to see if the bindings were allocated */
+   if (!stmt->bindings)
+   {
        stmt->errormsg = "Could not allocate memory for bindings.";
        stmt->errornumber = STMT_NO_MEMORY_ERROR;
        SC_log_error(func, "", stmt);
        return SQL_ERROR;
    }
 
-   icol--;     /* use zero based col numbers from here out */
+   icol--;                     /* use zero based col numbers from here
+                                * out */
 
-   /*  Reset for SQLGetData */
+   /* Reset for SQLGetData */
    stmt->bindings[icol].data_left = -1;
 
-   if (rgbValue == NULL) {
+   if (rgbValue == NULL)
+   {
        /* we have to unbind the column */
        stmt->bindings[icol].buflen = 0;
        stmt->bindings[icol].buffer = NULL;
-       stmt->bindings[icol].used =   NULL;
+       stmt->bindings[icol].used = NULL;
        stmt->bindings[icol].returntype = SQL_C_CHAR;
-   } else {
+   }
+   else
+   {
        /* ok, bind that column */
-       stmt->bindings[icol].buflen     = cbValueMax;
-       stmt->bindings[icol].buffer     = rgbValue;
-       stmt->bindings[icol].used       = pcbValue;
+       stmt->bindings[icol].buflen = cbValueMax;
+       stmt->bindings[icol].buffer = rgbValue;
+       stmt->bindings[icol].used = pcbValue;
        stmt->bindings[icol].returntype = fCType;
 
        mylog("       bound buffer[%d] = %u\n", icol, stmt->bindings[icol].buffer);
@@ -233,34 +259,37 @@ mylog("**** SQLBindCol: stmt = %u, icol = %d\n", stmt, icol);
    return SQL_SUCCESS;
 }
 
-/*      -       -       -       -       -       -       -       -       - */
+/*     -       -       -       -       -       -       -       -       - */
 
-/*  Returns the description of a parameter marker. */
+/* Returns the description of a parameter marker. */
 /* This function is listed as not being supported by SQLGetFunctions() because it is  */
 /* used to describe "parameter markers" (not bound parameters), in which case,  */
 /* the dbms should return info on the markers.  Since Postgres doesn't support that, */
 /* it is best to say this function is not supported and let the application assume a  */
 /* data type (most likely varchar). */
 
-RETCODE SQL_API SQLDescribeParam(
-        HSTMT      hstmt,
-        UWORD      ipar,
-        SWORD  FAR *pfSqlType,
-        UDWORD FAR *pcbColDef,
-        SWORD  FAR *pibScale,
-        SWORD  FAR *pfNullable)
+RETCODE SQL_API
+SQLDescribeParam(
+                HSTMT hstmt,
+                UWORD ipar,
+                SWORD FAR * pfSqlType,
+                UDWORD FAR * pcbColDef,
+                SWORD FAR * pibScale,
+                SWORD FAR * pfNullable)
 {
-StatementClass *stmt = (StatementClass *) hstmt;
-static char *func = "SQLDescribeParam";
+   StatementClass *stmt = (StatementClass *) hstmt;
+   static char *func = "SQLDescribeParam";
 
-   mylog( "%s: entering...\n", func);
+   mylog("%s: entering...\n", func);
 
-   if( ! stmt) {
+   if (!stmt)
+   {
        SC_log_error(func, "", NULL);
        return SQL_INVALID_HANDLE;
    }
 
-   if( (ipar < 1) || (ipar > stmt->parameters_allocated) ) {
+   if ((ipar < 1) || (ipar > stmt->parameters_allocated))
+   {
        stmt->errormsg = "Invalid parameter number for SQLDescribeParam.";
        stmt->errornumber = STMT_BAD_PARAMETER_NUMBER_ERROR;
        SC_log_error(func, "", stmt);
@@ -269,41 +298,45 @@ static char *func = "SQLDescribeParam";
 
    ipar--;
 
-   /*  This implementation is not very good, since it is supposed to describe */
-   /*  parameter markers, not bound parameters.  */
-   if(pfSqlType)
+   /*
+    * This implementation is not very good, since it is supposed to
+    * describe
+    */
+   /* parameter markers, not bound parameters.  */
+   if (pfSqlType)
        *pfSqlType = stmt->parameters[ipar].SQLType;
 
-   if(pcbColDef)
+   if (pcbColDef)
        *pcbColDef = stmt->parameters[ipar].precision;
 
-   if(pibScale)
+   if (pibScale)
        *pibScale = stmt->parameters[ipar].scale;
 
-   if(pfNullable)
+   if (pfNullable)
        *pfNullable = pgtype_nullable(stmt, stmt->parameters[ipar].paramType);
 
    return SQL_SUCCESS;
 }
 
-/*      -       -       -       -       -       -       -       -       - */
+/*     -       -       -       -       -       -       -       -       - */
 
-/*      Sets multiple values (arrays) for the set of parameter markers. */
+/*     Sets multiple values (arrays) for the set of parameter markers. */
 
-RETCODE SQL_API SQLParamOptions(
-        HSTMT      hstmt,
-        UDWORD     crow,
-        UDWORD FAR *pirow)
+RETCODE SQL_API
+SQLParamOptions(
+               HSTMT hstmt,
+               UDWORD crow,
+               UDWORD FAR * pirow)
 {
-static char *func = "SQLParamOptions";
+   static char *func = "SQLParamOptions";
 
-   mylog( "%s: entering...\n", func);
+   mylog("%s: entering...\n", func);
 
    SC_log_error(func, "Function not implemented", (StatementClass *) hstmt);
    return SQL_ERROR;
 }
 
-/*      -       -       -       -       -       -       -       -       - */
+/*     -       -       -       -       -       -       -       -       - */
 
 /* This function should really talk to the dbms to determine the number of  */
 /* "parameter markers" (not bound parameters) in the statement.  But, since */
@@ -312,43 +345,51 @@ static char *func = "SQLParamOptions";
 /* like it does for SQLDescribeParam is that some applications don't care and try  */
 /* to call it anyway. */
 /* If the statement does not have parameters, it should just return 0. */
-RETCODE SQL_API SQLNumParams(
-        HSTMT      hstmt,
-        SWORD  FAR *pcpar)
+RETCODE SQL_API
+SQLNumParams(
+            HSTMT hstmt,
+            SWORD FAR * pcpar)
 {
-StatementClass *stmt = (StatementClass *) hstmt;
-char in_quote = FALSE;
-unsigned int i;
-static char *func = "SQLNumParams";
+   StatementClass *stmt = (StatementClass *) hstmt;
+   char        in_quote = FALSE;
+   unsigned int i;
+   static char *func = "SQLNumParams";
 
-   mylog( "%s: entering...\n", func);
+   mylog("%s: entering...\n", func);
 
-   if(!stmt) {
+   if (!stmt)
+   {
        SC_log_error(func, "", NULL);
        return SQL_INVALID_HANDLE;
    }
 
    if (pcpar)
        *pcpar = 0;
-   else {
+   else
+   {
        SC_log_error(func, "pcpar was null", stmt);
        return SQL_ERROR;
    }
 
 
-   if(!stmt->statement) {
+   if (!stmt->statement)
+   {
        /* no statement has been allocated */
        stmt->errormsg = "SQLNumParams called with no statement ready.";
        stmt->errornumber = STMT_SEQUENCE_ERROR;
        SC_log_error(func, "", stmt);
        return SQL_ERROR;
-   } else {
+   }
+   else
+   {
 
-       for(i=0; i < strlen(stmt->statement); i++) {
+       for (i = 0; i < strlen(stmt->statement); i++)
+       {
 
-           if(stmt->statement[i] == '?' && !in_quote)
+           if (stmt->statement[i] == '?' && !in_quote)
                (*pcpar)++;
-           else {
+           else
+           {
                if (stmt->statement[i] == '\'')
                    in_quote = (in_quote ? FALSE : TRUE);
            }
@@ -359,20 +400,20 @@ static char *func = "SQLNumParams";
 }
 
 /********************************************************************
- *   Bindings Implementation
+ *  Bindings Implementation
  */
 BindInfoClass *
 create_empty_bindings(int num_columns)
 {
-BindInfoClass *new_bindings;
-int i;
+   BindInfoClass *new_bindings;
+   int         i;
 
-   new_bindings = (BindInfoClass *)malloc(num_columns * sizeof(BindInfoClass));
-   if(!new_bindings) {
+   new_bindings = (BindInfoClass *) malloc(num_columns * sizeof(BindInfoClass));
+   if (!new_bindings)
        return 0;
-   }
 
-   for(i=0; i < num_columns; i++) {
+   for (i = 0; i < num_columns; i++)
+   {
        new_bindings[i].buflen = 0;
        new_bindings[i].buffer = NULL;
        new_bindings[i].used = NULL;
@@ -383,23 +424,26 @@ int i;
 }
 
 void
-extend_bindings(StatementClass *stmt, int num_columns)
+extend_bindings(StatementClass * stmt, int num_columns)
 {
-static char *func="extend_bindings";
-BindInfoClass *new_bindings;
-int i;
+   static char *func = "extend_bindings";
+   BindInfoClass *new_bindings;
+   int         i;
 
-mylog("%s: entering ... stmt=%u, bindings_allocated=%d, num_columns=%d\n", func, stmt, stmt->bindings_allocated, num_columns);
+   mylog("%s: entering ... stmt=%u, bindings_allocated=%d, num_columns=%d\n", func, stmt, stmt->bindings_allocated, num_columns);
 
    /* if we have too few, allocate room for more, and copy the old */
    /* entries into the new structure */
-   if(stmt->bindings_allocated < num_columns) {
+   if (stmt->bindings_allocated < num_columns)
+   {
 
        new_bindings = create_empty_bindings(num_columns);
-       if ( ! new_bindings) {
-           mylog("%s: unable to create %d new bindings from %d old bindings\n", func, num_columns, stmt->bindings_allocated);
+       if (!new_bindings)
+       {
+           mylog("%s: unable to create %d new bindings from %d old bindings\n", func, num_columns, stmt->bindings_allocated);
 
-           if (stmt->bindings) {
+           if (stmt->bindings)
+           {
                free(stmt->bindings);
                stmt->bindings = NULL;
            }
@@ -407,8 +451,9 @@ mylog("%s: entering ... stmt=%u, bindings_allocated=%d, num_columns=%d\n", func,
            return;
        }
 
-       if(stmt->bindings) {
-           for(i=0; i<stmt->bindings_allocated; i++)
+       if (stmt->bindings)
+       {
+           for (i = 0; i < stmt->bindings_allocated; i++)
                new_bindings[i] = stmt->bindings[i];
 
            free(stmt->bindings);
@@ -417,14 +462,14 @@ mylog("%s: entering ... stmt=%u, bindings_allocated=%d, num_columns=%d\n", func,
        stmt->bindings = new_bindings;
        stmt->bindings_allocated = num_columns;
 
-    } 
-   /*  There is no reason to zero out extra bindings if there are */
-   /*  more than needed.  If an app has allocated extra bindings,  */
-   /*  let it worry about it by unbinding those columns. */
+   }
+   /* There is no reason to zero out extra bindings if there are */
+   /* more than needed.  If an app has allocated extra bindings,  */
+   /* let it worry about it by unbinding those columns. */
 
-   /*  SQLBindCol(1..) ... SQLBindCol(10...)   # got 10 bindings */
-   /*  SQLExecDirect(...)  # returns 5 cols */
-   /*  SQLExecDirect(...)  # returns 10 cols  (now OK) */
+   /* SQLBindCol(1..) ... SQLBindCol(10...)   # got 10 bindings */
+   /* SQLExecDirect(...)  # returns 5 cols */
+   /* SQLExecDirect(...)  # returns 10 cols  (now OK) */
 
    mylog("exit extend_bindings\n");
 }
diff --git a/bind.h b/bind.h
index 39e594f34601c286b0d92123541b99e682f286d9..11ac37a0af5617b42eade3df7947451e06b76fc3 100644 (file)
--- a/bind.h
+++ b/bind.h
@@ -1,9 +1,9 @@
 
-/* File:            bind.h
+/* File:           bind.h
  *
- * Description:     See "bind.c"
+ * Description:        See "bind.c"
  *
- * Comments:        See "notice.txt" for copyright and license information.
+ * Comments:       See "notice.txt" for copyright and license information.
  *
  */
 
 /*
  * BindInfoClass -- stores information about a bound column
  */
-struct BindInfoClass_ {
-   Int4 buflen;        /* size of buffer */
-   Int4 data_left;     /* amount of data left to read (SQLGetData) */
-   char *buffer;       /* pointer to the buffer */
-   Int4 *used;         /* used space in the buffer (for strings not counting the '\0') */
-   Int2 returntype;    /* kind of conversion to be applied when returning (SQL_C_DEFAULT, SQL_C_CHAR...) */
+struct BindInfoClass_
+{
+   Int4        buflen;         /* size of buffer */
+   Int4        data_left;      /* amount of data left to read
+                                * (SQLGetData) */
+   char       *buffer;         /* pointer to the buffer */
+   Int4       *used;           /* used space in the buffer (for strings
+                                * not counting the '\0') */
+   Int2        returntype;     /* kind of conversion to be applied when
+                                * returning (SQL_C_DEFAULT,
+                                * SQL_C_CHAR...) */
 };
 
 /*
  * ParameterInfoClass -- stores information about a bound parameter
  */
-struct ParameterInfoClass_ {
-   Int4 buflen;
-   char *buffer;
-   Int4 *used;
-   Int2 paramType;
-   Int2 CType;
-   Int2 SQLType;
-   UInt4 precision;
-   Int2 scale;
-   Oid  lobj_oid;
-   Int4 *EXEC_used;        /* amount of data OR the oid of the large object */
-   char *EXEC_buffer;      /* the data or the FD of the large object */
-   char data_at_exec;
+struct ParameterInfoClass_
+{
+   Int4        buflen;
+   char       *buffer;
+   Int4       *used;
+   Int2        paramType;
+   Int2        CType;
+   Int2        SQLType;
+   UInt4       precision;
+   Int2        scale;
+   Oid         lobj_oid;
+   Int4       *EXEC_used;      /* amount of data OR the oid of the large
+                                * object */
+   char       *EXEC_buffer;    /* the data or the FD of the large object */
+   char        data_at_exec;
 };
 
 BindInfoClass *create_empty_bindings(int num_columns);
-void extend_bindings(StatementClass *stmt, int num_columns);
+void       extend_bindings(StatementClass * stmt, int num_columns);
 
 #endif
index 75fdd9f4f6884a84ad420dbf494a51b8723a75e1..4969846e14b0d6263990ecac5b9dd10af2fde9b4 100644 (file)
@@ -1,13 +1,13 @@
-/* Module:          columninfo.c
+/* Module:         columninfo.c
  *
- * Description:     This module contains routines related to 
- *                  reading and storing the field information from a query.
+ * Description:        This module contains routines related to
+ *                 reading and storing the field information from a query.
  *
- * Classes:         ColumnInfoClass (Functions prefix: "CI_")
+ * Classes:            ColumnInfoClass (Functions prefix: "CI_")
  *
- * API functions:   none
+ * API functions:  none
  *
- * Comments:        See "notice.txt" for copyright and license information.
+ * Comments:       See "notice.txt" for copyright and license information.
  *
  */
 
 ColumnInfoClass *
 CI_Constructor()
 {
-ColumnInfoClass *rv;
+   ColumnInfoClass *rv;
 
    rv = (ColumnInfoClass *) malloc(sizeof(ColumnInfoClass));
 
-   if (rv) {
+   if (rv)
+   {
        rv->num_fields = 0;
        rv->name = NULL;
        rv->adtid = NULL;
@@ -37,28 +38,28 @@ ColumnInfoClass *rv;
 }
 
 void
-CI_Destructor(ColumnInfoClass *self)
+CI_Destructor(ColumnInfoClass * self)
 {
    CI_free_memory(self);
 
    free(self);
 }
 
-/*  Read in field descriptions.
-    If self is not null, then also store the information.
+/* Read in field descriptions.
+   If self is not null, then also store the information.
    If self is null, then just read, don't store.
 */
 char
-CI_read_fields(ColumnInfoClass *self, ConnectionClass *conn)
+CI_read_fields(ColumnInfoClass * self, ConnectionClass * conn)
 {
-Int2 lf;
-int new_num_fields;
-Oid new_adtid;
-Int2 new_adtsize;
-Int4 new_atttypmod = -1;
-char new_field_name[MAX_MESSAGE_LEN+1];
-SocketClass *sock;
-ConnInfo *ci;
+   Int2        lf;
+   int         new_num_fields;
+   Oid         new_adtid;
+   Int2        new_adtsize;
+   Int4        new_atttypmod = -1;
+   char        new_field_name[MAX_MESSAGE_LEN + 1];
+   SocketClass *sock;
+   ConnInfo   *ci;
 
    sock = CC_get_socket(conn);
    ci = &conn->connInfo;
@@ -68,24 +69,27 @@ ConnInfo *ci;
 
    mylog("num_fields = %d\n", new_num_fields);
 
-   if (self) {     /* according to that allocate memory */
+   if (self)
+   {                           /* according to that allocate memory */
        CI_set_num_fields(self, new_num_fields);
    }
 
    /* now read in the descriptions */
-   for(lf = 0; lf < new_num_fields; lf++) {
+   for (lf = 0; lf < new_num_fields; lf++)
+   {
 
        SOCK_get_string(sock, new_field_name, MAX_MESSAGE_LEN);
        new_adtid = (Oid) SOCK_get_int(sock, 4);
        new_adtsize = (Int2) SOCK_get_int(sock, 2);
 
-       /*  If 6.4 protocol, then read the atttypmod field */
-       if (PG_VERSION_GE(conn, 6.4)) {
+       /* If 6.4 protocol, then read the atttypmod field */
+       if (PG_VERSION_GE(conn, 6.4))
+       {
 
            mylog("READING ATTTYPMOD\n");
            new_atttypmod = (Int4) SOCK_get_int(sock, 4);
 
-           /*  Subtract the header length */
+           /* Subtract the header length */
            new_atttypmod -= 4;
            if (new_atttypmod < 0)
                new_atttypmod = -1;
@@ -104,17 +108,18 @@ ConnInfo *ci;
 
 
 void
-CI_free_memory(ColumnInfoClass *self)
+CI_free_memory(ColumnInfoClass * self)
 {
-register Int2 lf;
-int num_fields = self->num_fields;
+   register Int2 lf;
+   int         num_fields = self->num_fields;
 
-   for (lf = 0; lf < num_fields; lf++) {
-       if( self->name[lf])
-           free (self->name[lf]);
+   for (lf = 0; lf < num_fields; lf++)
+   {
+       if (self->name[lf])
+           free(self->name[lf]);
    }
 
-   /*  Safe to call even if null */
+   /* Safe to call even if null */
    free(self->name);
    free(self->adtid);
    free(self->adtsize);
@@ -124,35 +129,33 @@ int num_fields = self->num_fields;
 }
 
 void
-CI_set_num_fields(ColumnInfoClass *self, int new_num_fields)
+CI_set_num_fields(ColumnInfoClass * self, int new_num_fields)
 {
-   CI_free_memory(self);   /* always safe to call */
+   CI_free_memory(self);       /* always safe to call */
 
    self->num_fields = new_num_fields;
 
-   self->name = (char **) malloc (sizeof(char *) * self->num_fields);
-   self->adtid = (Oid *) malloc (sizeof(Oid) * self->num_fields);
-   self->adtsize = (Int2 *) malloc (sizeof(Int2) * self->num_fields);
+   self->name = (char **) malloc(sizeof(char *) * self->num_fields);
+   self->adtid = (Oid *) malloc(sizeof(Oid) * self->num_fields);
+   self->adtsize = (Int2 *) malloc(sizeof(Int2) * self->num_fields);
    self->display_size = (Int2 *) malloc(sizeof(Int2) * self->num_fields);
    self->atttypmod = (Int4 *) malloc(sizeof(Int4) * self->num_fields);
 }
 
 void
-CI_set_field_info(ColumnInfoClass *self, int field_num, char *new_name, 
-                                      Oid new_adtid, Int2 new_adtsize, Int4 new_atttypmod)
+CI_set_field_info(ColumnInfoClass * self, int field_num, char *new_name,
+                 Oid new_adtid, Int2 new_adtsize, Int4 new_atttypmod)
 {
-    
+
    /* check bounds */
-   if((field_num < 0) || (field_num >= self->num_fields)) {
+   if ((field_num < 0) || (field_num >= self->num_fields))
        return;
-   }
 
    /* store the info */
-   self->name[field_num] = strdup(new_name);  
+   self->name[field_num] = strdup(new_name);
    self->adtid[field_num] = new_adtid;
    self->adtsize[field_num] = new_adtsize;
    self->atttypmod[field_num] = new_atttypmod;
 
    self->display_size[field_num] = 0;
 }
-
index 3ec1cc92d50e3edee351f108a9dfed30f65f091c..43b21473b7004183adad604b1b9ca1e659f7d261 100644 (file)
@@ -1,9 +1,9 @@
 
-/* File:            columninfo.h
+/* File:           columninfo.h
  *
- * Description:     See "columninfo.c"
+ * Description:        See "columninfo.c"
  *
- * Comments:        See "notice.txt" for copyright and license information.
+ * Comments:       See "notice.txt" for copyright and license information.
  *
  */
 
 
 #include "psqlodbc.h"
 
-struct ColumnInfoClass_ {
-   Int2    num_fields;
-   char    **name;             /* list of type names */
-   Oid     *adtid;             /* list of type ids */
-   Int2    *adtsize;           /* list type sizes */
-   Int2    *display_size;      /* the display size (longest row) */
-   Int4    *atttypmod;         /* the length of bpchar/varchar */
+struct ColumnInfoClass_
+{
+   Int2        num_fields;
+   char      **name;           /* list of type names */
+   Oid        *adtid;          /* list of type ids */
+   Int2       *adtsize;        /* list type sizes */
+   Int2       *display_size;   /* the display size (longest row) */
+   Int4       *atttypmod;      /* the length of bpchar/varchar */
 };
 
 #define CI_get_num_fields(self)            (self->num_fields)
@@ -29,15 +30,15 @@ struct ColumnInfoClass_ {
 #define CI_get_atttypmod(self, col)        (self->atttypmod[col])
 
 ColumnInfoClass *CI_Constructor(void);
-void CI_Destructor(ColumnInfoClass *self);
-void CI_free_memory(ColumnInfoClass *self);
-char CI_read_fields(ColumnInfoClass *self, ConnectionClass *conn);
+void       CI_Destructor(ColumnInfoClass * self);
+void       CI_free_memory(ColumnInfoClass * self);
+char       CI_read_fields(ColumnInfoClass * self, ConnectionClass * conn);
 
 /* functions for setting up the fields from within the program, */
 /* without reading from a socket */
-void CI_set_num_fields(ColumnInfoClass *self, int new_num_fields);
-void CI_set_field_info(ColumnInfoClass *self, int field_num, char *new_name, 
-                       Oid new_adtid, Int2 new_adtsize, Int4 atttypmod);
+void       CI_set_num_fields(ColumnInfoClass * self, int new_num_fields);
+void CI_set_field_info(ColumnInfoClass * self, int field_num, char *new_name,
+                 Oid new_adtid, Int2 new_adtsize, Int4 atttypmod);
 
 
 #endif
index cc09c4aa2fdcf798d5db41793fe37c53debc0b99..aa283f48820220d87e1565566ebfe10ff308825d 100644 (file)
@@ -1,14 +1,14 @@
-/* Module:          connection.c
+/* Module:         connection.c
  *
- * Description:     This module contains routines related to 
- *                  connecting to and disconnecting from the Postgres DBMS.
+ * Description:        This module contains routines related to
+ *                 connecting to and disconnecting from the Postgres DBMS.
  *
- * Classes:         ConnectionClass (Functions prefix: "CC_")
+ * Classes:            ConnectionClass (Functions prefix: "CC_")
  *
- * API functions:   SQLAllocConnect, SQLConnect, SQLDisconnect, SQLFreeConnect,
- *                  SQLBrowseConnect(NI)
+ * API functions:  SQLAllocConnect, SQLConnect, SQLDisconnect, SQLFreeConnect,
+ *                 SQLBrowseConnect(NI)
  *
- * Comments:        See "notice.txt" for copyright and license information.
+ * Comments:       See "notice.txt" for copyright and license information.
  *
  */
 
 #include <odbcinst.h>
 #endif
 
-#define STMT_INCREMENT 16  /* how many statement holders to allocate at a time */
+#define STMT_INCREMENT 16      /* how many statement holders to allocate
+                                * at a time */
 
 #define PRN_NULLCHECK
 
 extern GLOBAL_VALUES globals;
 
 
-RETCODE SQL_API SQLAllocConnect(
-                                HENV     henv,
-                                HDBC FAR *phdbc)
+RETCODE SQL_API
+SQLAllocConnect(
+               HENV henv,
+               HDBC FAR * phdbc)
 {
-EnvironmentClass *env = (EnvironmentClass *)henv;
-ConnectionClass *conn;
-static char *func="SQLAllocConnect";
+   EnvironmentClass *env = (EnvironmentClass *) henv;
+   ConnectionClass *conn;
+   static char *func = "SQLAllocConnect";
 
-   mylog( "%s: entering...\n", func);
+   mylog("%s: entering...\n", func);
 
    conn = CC_Constructor();
    mylog("**** %s: henv = %u, conn = %u\n", func, henv, conn);
 
-    if( ! conn) {
-        env->errormsg = "Couldn't allocate memory for Connection object.";
-        env->errornumber = ENV_ALLOC_ERROR;
+   if (!conn)
+   {
+       env->errormsg = "Couldn't allocate memory for Connection object.";
+       env->errornumber = ENV_ALLOC_ERROR;
        *phdbc = SQL_NULL_HDBC;
        EN_log_error(func, "", env);
-        return SQL_ERROR;
-    }
+       return SQL_ERROR;
+   }
 
-    if ( ! EN_add_connection(env, conn)) {
-        env->errormsg = "Maximum number of connections exceeded.";
-        env->errornumber = ENV_ALLOC_ERROR;
-        CC_Destructor(conn);
+   if (!EN_add_connection(env, conn))
+   {
+       env->errormsg = "Maximum number of connections exceeded.";
+       env->errornumber = ENV_ALLOC_ERROR;
+       CC_Destructor(conn);
        *phdbc = SQL_NULL_HDBC;
        EN_log_error(func, "", env);
-        return SQL_ERROR;
-    }
+       return SQL_ERROR;
+   }
 
    *phdbc = (HDBC) conn;
 
-    return SQL_SUCCESS;
+   return SQL_SUCCESS;
 }
 
 
-/*      -       -       -       -       -       -       -       -       - */
+/*     -       -       -       -       -       -       -       -       - */
 
-RETCODE SQL_API SQLConnect(
-                           HDBC      hdbc,
-                           UCHAR FAR *szDSN,
-                           SWORD     cbDSN,
-                           UCHAR FAR *szUID,
-                           SWORD     cbUID,
-                           UCHAR FAR *szAuthStr,
-                           SWORD     cbAuthStr)
+RETCODE SQL_API
+SQLConnect(
+          HDBC hdbc,
+          UCHAR FAR * szDSN,
+          SWORD cbDSN,
+          UCHAR FAR * szUID,
+          SWORD cbUID,
+          UCHAR FAR * szAuthStr,
+          SWORD cbAuthStr)
 {
-ConnectionClass *conn = (ConnectionClass *) hdbc;
-ConnInfo *ci;
-static char *func = "SQLConnect";
+   ConnectionClass *conn = (ConnectionClass *) hdbc;
+   ConnInfo   *ci;
+   static char *func = "SQLConnect";
 
-   mylog( "%s: entering...\n", func);
+   mylog("%s: entering...\n", func);
 
-   if ( ! conn) {
+   if (!conn)
+   {
        CC_log_error(func, "", NULL);
        return SQL_INVALID_HANDLE;
    }
@@ -95,14 +101,15 @@ static char *func = "SQLConnect";
 
    make_string(szDSN, cbDSN, ci->dsn);
 
-   /*  get the values for the DSN from the registry */
+   /* get the values for the DSN from the registry */
    getDSNinfo(ci, CONN_OVERWRITE);
-   /*  initialize pg_version from connInfo.protocol    */
-   CC_initialize_pg_version(conn); 
-   
-   /*  override values from DSN info with UID and authStr(pwd) 
-       This only occurs if the values are actually there.
-   */
+   /* initialize pg_version from connInfo.protocol    */
+   CC_initialize_pg_version(conn);
+
+   /*
+    * override values from DSN info with UID and authStr(pwd) This only
+    * occurs if the values are actually there.
+    */
    make_string(szUID, cbUID, ci->username);
    make_string(szAuthStr, cbAuthStr, ci->password);
 
@@ -111,54 +118,59 @@ static char *func = "SQLConnect";
 
    qlog("conn = %u, %s(DSN='%s', UID='%s', PWD='%s')\n", conn, func, ci->dsn, ci->username, ci->password);
 
-   if ( CC_connect(conn, FALSE) <= 0) {
-       /*  Error messages are filled in */
+   if (CC_connect(conn, FALSE) <= 0)
+   {
+       /* Error messages are filled in */
        CC_log_error(func, "Error on CC_connect", conn);
        return SQL_ERROR;
    }
 
-   mylog( "%s: returning...\n", func);
+   mylog("%s: returning...\n", func);
 
    return SQL_SUCCESS;
 }
 
-/*      -       -       -       -       -       -       -       -       - */
+/*     -       -       -       -       -       -       -       -       - */
 
-RETCODE SQL_API SQLBrowseConnect(
-        HDBC      hdbc,
-        UCHAR FAR *szConnStrIn,
-        SWORD     cbConnStrIn,
-        UCHAR FAR *szConnStrOut,
-        SWORD     cbConnStrOutMax,
-        SWORD FAR *pcbConnStrOut)
+RETCODE SQL_API
+SQLBrowseConnect(
+                HDBC hdbc,
+                UCHAR FAR * szConnStrIn,
+                SWORD cbConnStrIn,
+                UCHAR FAR * szConnStrOut,
+                SWORD cbConnStrOutMax,
+                SWORD FAR * pcbConnStrOut)
 {
-static char *func="SQLBrowseConnect";
+   static char *func = "SQLBrowseConnect";
 
-   mylog( "%s: entering...\n", func);
+   mylog("%s: entering...\n", func);
 
    return SQL_SUCCESS;
 }
 
-/*      -       -       -       -       -       -       -       -       - */
+/*     -       -       -       -       -       -       -       -       - */
 
 /* Drop any hstmts open on hdbc and disconnect from database */
-RETCODE SQL_API SQLDisconnect(
-        HDBC      hdbc)
+RETCODE SQL_API
+SQLDisconnect(
+             HDBC hdbc)
 {
-ConnectionClass *conn = (ConnectionClass *) hdbc;
-static char *func = "SQLDisconnect";
+   ConnectionClass *conn = (ConnectionClass *) hdbc;
+   static char *func = "SQLDisconnect";
 
 
-   mylog( "%s: entering...\n", func);
+   mylog("%s: entering...\n", func);
 
-   if ( ! conn) {
+   if (!conn)
+   {
        CC_log_error(func, "", NULL);
        return SQL_INVALID_HANDLE;
    }
 
    qlog("conn=%u, %s\n", conn, func);
 
-   if (conn->status == CONN_EXECUTING) {
+   if (conn->status == CONN_EXECUTING)
+   {
        conn->errornumber = CONN_IN_USE;
        conn->errormsg = "A transaction is currently being executed";
        CC_log_error(func, "", conn);
@@ -167,7 +179,7 @@ static char *func = "SQLDisconnect";
 
    mylog("%s: about to CC_cleanup\n", func);
 
-   /*  Close the connection and free statements */
+   /* Close the connection and free statements */
    CC_cleanup(conn);
 
    mylog("%s: done CC_cleanup\n", func);
@@ -177,24 +189,27 @@ static char *func = "SQLDisconnect";
 }
 
 
-/*      -       -       -       -       -       -       -       -       - */
+/*     -       -       -       -       -       -       -       -       - */
 
-RETCODE SQL_API SQLFreeConnect(
-        HDBC      hdbc)
+RETCODE SQL_API
+SQLFreeConnect(
+              HDBC hdbc)
 {
-ConnectionClass *conn = (ConnectionClass *) hdbc;
-static char *func = "SQLFreeConnect";
+   ConnectionClass *conn = (ConnectionClass *) hdbc;
+   static char *func = "SQLFreeConnect";
 
-   mylog( "%s: entering...\n", func);
+   mylog("%s: entering...\n", func);
    mylog("**** in %s: hdbc=%u\n", func, hdbc);
 
-   if ( ! conn) {
+   if (!conn)
+   {
        CC_log_error(func, "", NULL);
        return SQL_INVALID_HANDLE;
    }
 
-   /*  Remove the connection from the environment */
-   if ( ! EN_remove_connection(conn->henv, conn)) {
+   /* Remove the connection from the environment */
+   if (!EN_remove_connection(conn->henv, conn))
+   {
        conn->errornumber = CONN_IN_USE;
        conn->errormsg = "A transaction is currently being executed";
        CC_log_error(func, "", conn);
@@ -211,35 +226,37 @@ static char *func = "SQLFreeConnect";
 
 /*
 *
-*       IMPLEMENTATION CONNECTION CLASS
+*      IMPLEMENTATION CONNECTION CLASS
 *
 */
 
-ConnectionClass *CC_Constructor()
+ConnectionClass *
+CC_Constructor()
 {
-ConnectionClass *rv;
+   ConnectionClass *rv;
 
-    rv = (ConnectionClass *)malloc(sizeof(ConnectionClass));
+   rv = (ConnectionClass *) malloc(sizeof(ConnectionClass));
 
-    if (rv != NULL) {
+   if (rv != NULL)
+   {
 
-       rv->henv = NULL; /* not yet associated with an environment */
+       rv->henv = NULL;        /* not yet associated with an environment */
 
-        rv->errormsg = NULL;
-        rv->errornumber = 0;
+       rv->errormsg = NULL;
+       rv->errornumber = 0;
        rv->errormsg_created = FALSE;
 
-        rv->status = CONN_NOT_CONNECTED;
-        rv->transact_status = CONN_IN_AUTOCOMMIT; /* autocommit by default */
+       rv->status = CONN_NOT_CONNECTED;
+       rv->transact_status = CONN_IN_AUTOCOMMIT;       /* autocommit by default */
 
        memset(&rv->connInfo, 0, sizeof(ConnInfo));
 
        rv->sock = SOCK_Constructor();
-       if ( ! rv->sock)
+       if (!rv->sock)
            return NULL;
 
-       rv->stmts = (StatementClass **) malloc( sizeof(StatementClass *) * STMT_INCREMENT);
-       if ( ! rv->stmts)
+       rv->stmts = (StatementClass **) malloc(sizeof(StatementClass *) * STMT_INCREMENT);
+       if (!rv->stmts)
            return NULL;
        memset(rv->stmts, 0, sizeof(StatementClass *) * STMT_INCREMENT);
 
@@ -259,18 +276,18 @@ ConnectionClass *rv;
        rv->pg_version_major = 0;
        rv->pg_version_minor = 0;
 
-       /*  Initialize statement options to defaults */
-       /*  Statements under this conn will inherit these options */
+       /* Initialize statement options to defaults */
+       /* Statements under this conn will inherit these options */
 
        InitializeStatementOptions(&rv->stmtOptions);
 
-    } 
-    return rv;
+   }
+   return rv;
 }
 
 
 char
-CC_Destructor(ConnectionClass *self)
+CC_Destructor(ConnectionClass * self)
 {
 
    mylog("enter CC_Destructor, self=%u\n", self);
@@ -278,22 +295,27 @@ CC_Destructor(ConnectionClass *self)
    if (self->status == CONN_EXECUTING)
        return 0;
 
-   CC_cleanup(self);   /* cleanup socket and statements */
+   CC_cleanup(self);           /* cleanup socket and statements */
 
    mylog("after CC_Cleanup\n");
 
-   /*  Free up statement holders */
-   if (self->stmts) {
+   /* Free up statement holders */
+   if (self->stmts)
+   {
        free(self->stmts);
        self->stmts = NULL;
    }
    mylog("after free statement holders\n");
 
-   /*  Free cached table info */
-   if (self->col_info) {
-       int i;
-       for (i = 0; i < self->ntables; i++) {
-           if (self->col_info[i]->result)      /*  Free the SQLColumns result structure */
+   /* Free cached table info */
+   if (self->col_info)
+   {
+       int         i;
+
+       for (i = 0; i < self->ntables; i++)
+       {
+           if (self->col_info[i]->result)      /* Free the SQLColumns
+                                                * result structure */
                QR_Destructor(self->col_info[i]->result);
 
            free(self->col_info[i]);
@@ -310,14 +332,16 @@ CC_Destructor(ConnectionClass *self)
 
 /* Return how many cursors are opened on this connection */
 int
-CC_cursor_count(ConnectionClass *self)
+CC_cursor_count(ConnectionClass * self)
 {
-StatementClass *stmt;
-int i, count = 0;
+   StatementClass *stmt;
+   int         i,
+               count = 0;
 
    mylog("CC_cursor_count: self=%u, num_stmts=%d\n", self, self->num_stmts);
 
-   for (i = 0; i < self->num_stmts; i++) {
+   for (i = 0; i < self->num_stmts; i++)
+   {
        stmt = self->stmts[i];
        if (stmt && stmt->result && stmt->result->cursor)
            count++;
@@ -328,22 +352,23 @@ int i, count = 0;
    return count;
 }
 
-void 
-CC_clear_error(ConnectionClass *self)
+void
+CC_clear_error(ConnectionClass * self)
 {
-   self->errornumber = 0; 
-   self->errormsg = NULL; 
+   self->errornumber = 0;
+   self->errormsg = NULL;
    self->errormsg_created = FALSE;
 }
 
 /* Used to cancel a transaction */
 /* We are almost always in the middle of a transaction. */
 char
-CC_abort(ConnectionClass *self)
+CC_abort(ConnectionClass * self)
 {
-QResultClass *res;
+   QResultClass *res;
 
-   if ( CC_is_in_trans(self)) {
+   if (CC_is_in_trans(self))
+   {
        res = NULL;
 
        mylog("CC_abort:  sending ABORT!\n");
@@ -363,10 +388,10 @@ QResultClass *res;
 
 /* This is called by SQLDisconnect also */
 char
-CC_cleanup(ConnectionClass *self)
+CC_cleanup(ConnectionClass * self)
 {
-int i;
-StatementClass *stmt;
+   int         i;
+   StatementClass *stmt;
 
    if (self->status == CONN_EXECUTING)
        return FALSE;
@@ -381,28 +406,32 @@ StatementClass *stmt;
 
    mylog("after CC_abort\n");
 
-   /*  This actually closes the connection to the dbase */
-   if (self->sock) {
-       SOCK_Destructor(self->sock);
+   /* This actually closes the connection to the dbase */
+   if (self->sock)
+   {
+       SOCK_Destructor(self->sock);
        self->sock = NULL;
    }
 
    mylog("after SOCK destructor\n");
 
-   /*  Free all the stmts on this connection */
-   for (i = 0; i < self->num_stmts; i++) {
+   /* Free all the stmts on this connection */
+   for (i = 0; i < self->num_stmts; i++)
+   {
        stmt = self->stmts[i];
-       if (stmt) {
+       if (stmt)
+       {
            stmt->hdbc = NULL;  /* prevent any more dbase interactions */
            SC_Destructor(stmt);
            self->stmts[i] = NULL;
        }
    }
 
-   /*  Check for translation dll */
+   /* Check for translation dll */
 #ifdef WIN32
-   if ( self->translation_handle) {
-       FreeLibrary (self->translation_handle);
+   if (self->translation_handle)
+   {
+       FreeLibrary(self->translation_handle);
        self->translation_handle = NULL;
    }
 #endif
@@ -412,37 +441,40 @@ StatementClass *stmt;
 }
 
 int
-CC_set_translation (ConnectionClass *self)
+CC_set_translation(ConnectionClass * self)
 {
 
 #ifdef WIN32
 
-   if (self->translation_handle != NULL) {
-       FreeLibrary (self->translation_handle);
+   if (self->translation_handle != NULL)
+   {
+       FreeLibrary(self->translation_handle);
        self->translation_handle = NULL;
    }
 
    if (self->connInfo.translation_dll[0] == 0)
        return TRUE;
 
-   self->translation_option = atoi (self->connInfo.translation_option);
-   self->translation_handle = LoadLibrary (self->connInfo.translation_dll);
+   self->translation_option = atoi(self->connInfo.translation_option);
+   self->translation_handle = LoadLibrary(self->connInfo.translation_dll);
 
-   if (self->translation_handle == NULL) {
+   if (self->translation_handle == NULL)
+   {
        self->errornumber = CONN_UNABLE_TO_LOAD_DLL;
        self->errormsg = "Could not load the translation DLL.";
        return FALSE;
    }
 
    self->DataSourceToDriver
-    = (DataSourceToDriverProc) GetProcAddress (self->translation_handle,
+       = (DataSourceToDriverProc) GetProcAddress(self->translation_handle,
                                                "SQLDataSourceToDriver");
 
    self->DriverToDataSource
-    = (DriverToDataSourceProc) GetProcAddress (self->translation_handle,
+       = (DriverToDataSourceProc) GetProcAddress(self->translation_handle,
                                                "SQLDriverToDataSource");
 
-   if (self->DataSourceToDriver == NULL || self->DriverToDataSource == NULL) {
+   if (self->DataSourceToDriver == NULL || self->DriverToDataSource == NULL)
+   {
        self->errornumber = CONN_UNABLE_TO_LOAD_DLL;
        self->errormsg = "Could not find translation DLL functions.";
        return FALSE;
@@ -451,54 +483,57 @@ CC_set_translation (ConnectionClass *self)
    return TRUE;
 }
 
-char 
-CC_connect(ConnectionClass *self, char do_password)
+char
+CC_connect(ConnectionClass * self, char do_password)
 {
-StartupPacket sp;
-QResultClass *res;
-SocketClass *sock;
-ConnInfo *ci = &(self->connInfo);
-int areq = -1;
-int beresp;
-char msgbuffer[ERROR_MSG_LENGTH]; 
-char salt[2];
-static char *func="CC_connect";
+   StartupPacket sp;
+   QResultClass *res;
+   SocketClass *sock;
+   ConnInfo   *ci = &(self->connInfo);
+   int         areq = -1;
+   int         beresp;
+   char        msgbuffer[ERROR_MSG_LENGTH];
+   char        salt[2];
+   static char *func = "CC_connect";
 
    mylog("%s: entering...\n", func);
 
-   if ( do_password)
+   if (do_password)
 
        sock = self->sock;      /* already connected, just authenticate */
 
-   else {
+   else
+   {
 
        qlog("Global Options: Version='%s', fetch=%d, socket=%d, unknown_sizes=%d, max_varchar_size=%d, max_longvarchar_size=%d\n",
-           POSTGRESDRIVERVERSION,
-           globals.fetch_max, 
-           globals.socket_buffersize, 
-           globals.unknown_sizes, 
-           globals.max_varchar_size, 
-           globals.max_longvarchar_size);
+            POSTGRESDRIVERVERSION,
+            globals.fetch_max,
+            globals.socket_buffersize,
+            globals.unknown_sizes,
+            globals.max_varchar_size,
+            globals.max_longvarchar_size);
        qlog("                disable_optimizer=%d, ksqo=%d, unique_index=%d, use_declarefetch=%d\n",
-           globals.disable_optimizer,
-           globals.ksqo,
-           globals.unique_index,
-           globals.use_declarefetch);
+            globals.disable_optimizer,
+            globals.ksqo,
+            globals.unique_index,
+            globals.use_declarefetch);
        qlog("                text_as_longvarchar=%d, unknowns_as_longvarchar=%d, bools_as_char=%d\n",
-           globals.text_as_longvarchar, 
-           globals.unknowns_as_longvarchar, 
-           globals.bools_as_char);
+            globals.text_as_longvarchar,
+            globals.unknowns_as_longvarchar,
+            globals.bools_as_char);
        qlog("                extra_systable_prefixes='%s', conn_settings='%s'\n",
-           globals.extra_systable_prefixes, 
-           globals.conn_settings);
+            globals.extra_systable_prefixes,
+            globals.conn_settings);
 
-       if (self->status != CONN_NOT_CONNECTED) {
+       if (self->status != CONN_NOT_CONNECTED)
+       {
            self->errormsg = "Already connected.";
            self->errornumber = CONN_OPENDB_ERROR;
            return 0;
        }
 
-       if ( ci->server[0] == '\0' || ci->port[0] == '\0' || ci->database[0] == '\0') {
+       if (ci->server[0] == '\0' || ci->port[0] == '\0' || ci->database[0] == '\0')
+       {
            self->errornumber = CONN_INIREAD_ERROR;
            self->errormsg = "Missing server name, port, or database name in call to CC_connect.";
            return 0;
@@ -506,15 +541,18 @@ static char *func="CC_connect";
 
        mylog("CC_connect(): DSN = '%s', server = '%s', port = '%s', database = '%s', username = '%s', password='%s'\n", ci->dsn, ci->server, ci->port, ci->database, ci->username, ci->password);
 
-       /* If the socket was closed for some reason (like a SQLDisconnect, but no SQLFreeConnect
-           then create a socket now.
-       */
-       if ( ! self->sock) {
+       /*
+        * If the socket was closed for some reason (like a SQLDisconnect,
+        * but no SQLFreeConnect then create a socket now.
+        */
+       if (!self->sock)
+       {
            self->sock = SOCK_Constructor();
-           if ( ! self->sock) {
-                self->errornumber = CONNECTION_SERVER_NOT_REACHED;
-                self->errormsg = "Could not open a socket to the server";
-                return 0;
+           if (!self->sock)
+           {
+               self->errornumber = CONNECTION_SERVER_NOT_REACHED;
+               self->errormsg = "Could not open a socket to the server";
+               return 0;
            }
        }
 
@@ -523,7 +561,8 @@ static char *func="CC_connect";
        mylog("connecting to the server socket...\n");
 
        SOCK_connect_to(sock, (short) atoi(ci->port), ci->server);
-       if (SOCK_get_errcode(sock) != 0) {
+       if (SOCK_get_errcode(sock) != 0)
+       {
            mylog("connection to the server socket failed.\n");
            self->errornumber = CONNECTION_SERVER_NOT_REACHED;
            self->errormsg = "Could not connect to the server";
@@ -536,7 +575,7 @@ static char *func="CC_connect";
        mylog("sizeof startup packet = %d\n", sizeof(StartupPacket));
 
        /* Send length of Authentication Block */
-       SOCK_put_int(sock, 4+sizeof(StartupPacket), 4); 
+       SOCK_put_int(sock, 4 + sizeof(StartupPacket), 4);
 
        sp.protoVersion = (ProtocolVersion) htonl(PG_PROTOCOL_LATEST);
 
@@ -548,7 +587,8 @@ static char *func="CC_connect";
 
        mylog("sent the authentication block.\n");
 
-       if (sock->errornumber != 0) {
+       if (sock->errornumber != 0)
+       {
            mylog("couldn't send the authentication block properly.\n");
            self->errornumber = CONN_INVALID_AUTHENTICATION;
            self->errormsg = "Sending the authentication packet failed";
@@ -561,100 +601,107 @@ static char *func="CC_connect";
 
 
    /* *************************************************** */
-   /*  Now get the authentication request from backend */
+   /* Now get the authentication request from backend */
    /* *************************************************** */
 
-   do {
+   do
+   {
 
        if (do_password)
            beresp = 'R';
        else
            beresp = SOCK_get_char(sock);
 
-       switch(beresp) {
-       case 'E':
-           mylog("auth got 'E'\n");
+       switch (beresp)
+       {
+           case 'E':
+               mylog("auth got 'E'\n");
 
-           SOCK_get_string(sock, msgbuffer, ERROR_MSG_LENGTH);
-           self->errornumber = CONN_INVALID_AUTHENTICATION;
-           self->errormsg = msgbuffer;
-           qlog("ERROR from backend during authentication: '%s'\n", self->errormsg);
-           return 0;
-       case 'R':
+               SOCK_get_string(sock, msgbuffer, ERROR_MSG_LENGTH);
+               self->errornumber = CONN_INVALID_AUTHENTICATION;
+               self->errormsg = msgbuffer;
+               qlog("ERROR from backend during authentication: '%s'\n", self->errormsg);
+               return 0;
+           case 'R':
 
-           if (do_password) {
-               mylog("in 'R' do_password\n");
-               areq = AUTH_REQ_PASSWORD;
-               do_password = FALSE;
-           }
-           else {
-               mylog("auth got 'R'\n");
+               if (do_password)
+               {
+                   mylog("in 'R' do_password\n");
+                   areq = AUTH_REQ_PASSWORD;
+                   do_password = FALSE;
+               }
+               else
+               {
+                   mylog("auth got 'R'\n");
 
-               areq = SOCK_get_int(sock, 4);
-               if (areq == AUTH_REQ_CRYPT)
-                   SOCK_get_n_char(sock, salt, 2);
+                   areq = SOCK_get_int(sock, 4);
+                   if (areq == AUTH_REQ_CRYPT)
+                       SOCK_get_n_char(sock, salt, 2);
 
-               mylog("areq = %d\n", areq);
-           }
-           switch(areq) {
-           case AUTH_REQ_OK:
-               break;
+                   mylog("areq = %d\n", areq);
+               }
+               switch (areq)
+               {
+                   case AUTH_REQ_OK:
+                       break;
 
-           case AUTH_REQ_KRB4:
-               self->errormsg = "Kerberos 4 authentication not supported";
-               self->errornumber = CONN_AUTH_TYPE_UNSUPPORTED;
-               return 0;
+                   case AUTH_REQ_KRB4:
+                       self->errormsg = "Kerberos 4 authentication not supported";
+                       self->errornumber = CONN_AUTH_TYPE_UNSUPPORTED;
+                       return 0;
 
-           case AUTH_REQ_KRB5:
-               self->errormsg = "Kerberos 5 authentication not supported";
-               self->errornumber = CONN_AUTH_TYPE_UNSUPPORTED;
-               return 0;
+                   case AUTH_REQ_KRB5:
+                       self->errormsg = "Kerberos 5 authentication not supported";
+                       self->errornumber = CONN_AUTH_TYPE_UNSUPPORTED;
+                       return 0;
 
-           case AUTH_REQ_PASSWORD:
-               mylog("in AUTH_REQ_PASSWORD\n");
+                   case AUTH_REQ_PASSWORD:
+                       mylog("in AUTH_REQ_PASSWORD\n");
 
-               if (ci->password[0] == '\0') {
-                   self->errornumber = CONNECTION_NEED_PASSWORD;
-                   self->errormsg = "A password is required for this connection.";
-                   return -1;  /* need password */
-               }
+                       if (ci->password[0] == '\0')
+                       {
+                           self->errornumber = CONNECTION_NEED_PASSWORD;
+                           self->errormsg = "A password is required for this connection.";
+                           return -1;  /* need password */
+                       }
 
-               mylog("past need password\n");
+                       mylog("past need password\n");
 
-               SOCK_put_int(sock, 4+strlen(ci->password)+1, 4);
-               SOCK_put_n_char(sock, ci->password, strlen(ci->password) + 1);
-               SOCK_flush_output(sock);
+                       SOCK_put_int(sock, 4 + strlen(ci->password) + 1, 4);
+                       SOCK_put_n_char(sock, ci->password, strlen(ci->password) + 1);
+                       SOCK_flush_output(sock);
 
-               mylog("past flush\n");
-               break;
+                       mylog("past flush\n");
+                       break;
 
-           case AUTH_REQ_CRYPT:
-               self->errormsg = "Password crypt authentication not supported";
-               self->errornumber = CONN_AUTH_TYPE_UNSUPPORTED;
-               return 0;
+                   case AUTH_REQ_CRYPT:
+                       self->errormsg = "Password crypt authentication not supported";
+                       self->errornumber = CONN_AUTH_TYPE_UNSUPPORTED;
+                       return 0;
 
+                   default:
+                       self->errormsg = "Unknown authentication type";
+                       self->errornumber = CONN_AUTH_TYPE_UNSUPPORTED;
+                       return 0;
+               }
+               break;
            default:
-               self->errormsg = "Unknown authentication type";
-               self->errornumber = CONN_AUTH_TYPE_UNSUPPORTED;
+               self->errormsg = "Unexpected protocol character during authentication";
+               self->errornumber = CONN_INVALID_AUTHENTICATION;
                return 0;
-           }
-           break;
-       default:
-           self->errormsg = "Unexpected protocol character during authentication";
-           self->errornumber = CONN_INVALID_AUTHENTICATION;
-           return 0;
        }
 
-   } while (areq != AUTH_REQ_OK);      
+   } while (areq != AUTH_REQ_OK);
 
-   CC_clear_error(self);   /* clear any password error */
+   CC_clear_error(self);       /* clear any password error */
 
    /* send an empty query in order to find out whether the specified */
    /* database really exists on the server machine */
    mylog("sending an empty query...\n");
 
    res = CC_send_query(self, " ", NULL);
-   if ( res == NULL || QR_get_status(res) != PGRES_EMPTY_QUERY) {
+   if (res == NULL || QR_get_status(res) != PGRES_EMPTY_QUERY)
+   {
        mylog("got no result from the empty query.  (probably database does not exist)\n");
        self->errornumber = CONNECTION_NO_SUCH_DATABASE;
        self->errormsg = "The database does not exist on the server\nor user authentication failed.";
@@ -667,21 +714,25 @@ static char *func="CC_connect";
 
    mylog("empty query seems to be OK.\n");
 
-   CC_set_translation (self);
+   CC_set_translation(self);
 
    /**********************************************/
    /*******   Send any initial settings  *********/
    /**********************************************/
 
-   /*  Since these functions allocate statements, and since the connection is not
-       established yet, it would violate odbc state transition rules.  Therefore,
-       these functions call the corresponding local function instead.
-   */
+   /*
+    * Since these functions allocate statements, and since the connection
+    * is not established yet, it would violate odbc state transition
+    * rules.  Therefore, these functions call the corresponding local
+    * function instead.
+    */
    CC_send_settings(self);
-   CC_lookup_lo(self);     /* a hack to get the oid of our large object oid type */
-   CC_lookup_pg_version(self); /* Get PostgreSQL version for SQLGetInfo use */
+   CC_lookup_lo(self);         /* a hack to get the oid of our large
+                                * object oid type */
+   CC_lookup_pg_version(self); /* Get PostgreSQL version for SQLGetInfo
+                                * use */
 
-   CC_clear_error(self);   /* clear any initial command errors */
+   CC_clear_error(self);       /* clear any initial command errors */
    self->status = CONN_CONNECTED;
 
    mylog("%s: returning...\n", func);
@@ -691,14 +742,16 @@ static char *func="CC_connect";
 }
 
 char
-CC_add_statement(ConnectionClass *self, StatementClass *stmt)
+CC_add_statement(ConnectionClass * self, StatementClass * stmt)
 {
-int i;
+   int         i;
 
    mylog("CC_add_statement: self=%u, stmt=%u\n", self, stmt);
 
-   for (i = 0; i < self->num_stmts; i++) {
-       if ( ! self->stmts[i]) {
+   for (i = 0; i < self->num_stmts; i++)
+   {
+       if (!self->stmts[i])
+       {
            stmt->hdbc = self;
            self->stmts[i] = stmt;
            return TRUE;
@@ -706,8 +759,8 @@ int i;
    }
 
    /* no more room -- allocate more memory */
-   self->stmts = (StatementClass **) realloc( self->stmts, sizeof(StatementClass *) * (STMT_INCREMENT + self->num_stmts));
-   if ( ! self->stmts)
+   self->stmts = (StatementClass **) realloc(self->stmts, sizeof(StatementClass *) * (STMT_INCREMENT + self->num_stmts));
+   if (!self->stmts)
        return FALSE;
 
    memset(&self->stmts[self->num_stmts], 0, sizeof(StatementClass *) * STMT_INCREMENT);
@@ -720,13 +773,15 @@ int i;
    return TRUE;
 }
 
-char 
-CC_remove_statement(ConnectionClass *self, StatementClass *stmt)
+char
+CC_remove_statement(ConnectionClass * self, StatementClass * stmt)
 {
-int i;
+   int         i;
 
-   for (i = 0; i < self->num_stmts; i++) {
-       if (self->stmts[i] == stmt && stmt->status != STMT_EXECUTING) {
+   for (i = 0; i < self->num_stmts; i++)
+   {
+       if (self->stmts[i] == stmt && stmt->status != STMT_EXECUTING)
+       {
            self->stmts[i] = NULL;
            return TRUE;
        }
@@ -739,11 +794,11 @@ int i;
    error message with its socket error message.
 */
 char *
-CC_create_errormsg(ConnectionClass *self)
+CC_create_errormsg(ConnectionClass * self)
 {
-SocketClass *sock = self->sock;
-int pos;
-static char msg[4096];
+   SocketClass *sock = self->sock;
+   int         pos;
+   static char msg[4096];
 
    mylog("enter CC_create_errormsg\n");
 
@@ -754,7 +809,8 @@ static char msg[4096];
 
    mylog("msg = '%s'\n", msg);
 
-   if (sock && sock->errormsg && sock->errormsg[0] != '\0') {
+   if (sock && sock->errormsg && sock->errormsg[0] != '\0')
+   {
        pos = strlen(msg);
        sprintf(&msg[pos], ";\n%s", sock->errormsg);
    }
@@ -764,20 +820,22 @@ static char msg[4096];
 }
 
 
-char 
-CC_get_error(ConnectionClass *self, int *number, char **message)
+char
+CC_get_error(ConnectionClass * self, int *number, char **message)
 {
-int rv;
+   int         rv;
 
    mylog("enter CC_get_error\n");
 
-   /*  Create a very informative errormsg if it hasn't been done yet. */
-   if ( ! self->errormsg_created) {
+   /* Create a very informative errormsg if it hasn't been done yet. */
+   if (!self->errormsg_created)
+   {
        self->errormsg = CC_create_errormsg(self);
        self->errormsg_created = TRUE;
    }
 
-   if (self->errornumber) {
+   if (self->errornumber)
+   {
        *number = self->errornumber;
        *message = self->errormsg;
    }
@@ -796,25 +854,29 @@ int rv;
    needs to be re-filled).
 
    The "cursor" is used by SQLExecute to associate a statement handle as the cursor name
-   (i.e., C3326857) for SQL select statements.  This cursor is then used in future 
+   (i.e., C3326857) for SQL select statements.  This cursor is then used in future
    'declare cursor C3326857 for ...' and 'fetch 100 in C3326857' statements.
 */
 QResultClass *
-CC_send_query(ConnectionClass *self, char *query, QueryInfo *qi)
+CC_send_query(ConnectionClass * self, char *query, QueryInfo * qi)
 {
-QResultClass *result_in, *res = NULL;
-char swallow;
-int id;
-SocketClass *sock = self->sock;
-static char msgbuffer[MAX_MESSAGE_LEN+1];
-char cmdbuffer[MAX_MESSAGE_LEN+1]; /* QR_set_command() dups this string so dont need static */
+   QResultClass *result_in,
+              *res = NULL;
+   char        swallow;
+   int         id;
+   SocketClass *sock = self->sock;
+   static char msgbuffer[MAX_MESSAGE_LEN + 1];
+   char        cmdbuffer[MAX_MESSAGE_LEN + 1]; /* QR_set_command() dups
+                                                * this string so dont
+                                                * need static */
 
 
    mylog("send_query(): conn=%u, query='%s'\n", self, query);
    qlog("conn=%u, query='%s'\n", self, query);
 
    /* Indicate that we are sending a query to the backend */
-   if(strlen(query) > MAX_MESSAGE_LEN-2) {
+   if (strlen(query) > MAX_MESSAGE_LEN - 2)
+   {
        self->errornumber = CONNECTION_MSG_TOO_LONG;
        self->errormsg = "Query string is too long";
        return NULL;
@@ -823,7 +885,8 @@ char cmdbuffer[MAX_MESSAGE_LEN+1];  /* QR_set_command() dups this string so dont
    if ((NULL == query) || (query[0] == '\0'))
        return NULL;
 
-   if (SOCK_get_errcode(sock) != 0) {
+   if (SOCK_get_errcode(sock) != 0)
+   {
        self->errornumber = CONNECTION_COULD_NOT_SEND;
        self->errormsg = "Could not send Query to backend";
        CC_set_no_trans(self);
@@ -831,7 +894,8 @@ char cmdbuffer[MAX_MESSAGE_LEN+1];  /* QR_set_command() dups this string so dont
    }
 
    SOCK_put_char(sock, 'Q');
-   if (SOCK_get_errcode(sock) != 0) {
+   if (SOCK_get_errcode(sock) != 0)
+   {
        self->errornumber = CONNECTION_COULD_NOT_SEND;
        self->errormsg = "Could not send Query to backend";
        CC_set_no_trans(self);
@@ -841,7 +905,8 @@ char cmdbuffer[MAX_MESSAGE_LEN+1];  /* QR_set_command() dups this string so dont
    SOCK_put_string(sock, query);
    SOCK_flush_output(sock);
 
-   if (SOCK_get_errcode(sock) != 0) {
+   if (SOCK_get_errcode(sock) != 0)
+   {
        self->errornumber = CONNECTION_COULD_NOT_SEND;
        self->errormsg = "Could not send Query to backend";
        CC_set_no_trans(self);
@@ -850,11 +915,13 @@ char cmdbuffer[MAX_MESSAGE_LEN+1];    /* QR_set_command() dups this string so dont
 
    mylog("send_query: done sending query\n");
 
-   while(1) {
+   while (1)
+   {
        /* what type of message is coming now ? */
        id = SOCK_get_char(sock);
 
-       if ((SOCK_get_errcode(sock) != 0) || (id == EOF)) {
+       if ((SOCK_get_errcode(sock) != 0) || (id == EOF))
+       {
            self->errornumber = CONNECTION_NO_RESPONSE;
            self->errormsg = "No response from the backend";
            if (res)
@@ -867,211 +934,237 @@ char cmdbuffer[MAX_MESSAGE_LEN+1];  /* QR_set_command() dups this string so dont
 
        mylog("send_query: got id = '%c'\n", id);
 
-       switch (id) {
-       case 'A' : /* Asynchronous Messages are ignored */
-           (void)SOCK_get_int(sock, 4); /* id of notification */
-           SOCK_get_string(sock, msgbuffer, MAX_MESSAGE_LEN);
-           /* name of the relation the message comes from */
-           break;
-       case 'C' : /* portal query command, no tuples returned */
-           /* read in the return message from the backend */
-           SOCK_get_string(sock, cmdbuffer, MAX_MESSAGE_LEN);
-           if (SOCK_get_errcode(sock) != 0) {
-               self->errornumber = CONNECTION_NO_RESPONSE;
-               self->errormsg = "No response from backend while receiving a portal query command";
-               mylog("send_query: 'C' - %s\n", self->errormsg);
-               CC_set_no_trans(self);
-               return NULL;
-           } else {
-
-               char clear = 0;
-
-               mylog("send_query: ok - 'C' - %s\n", cmdbuffer);
-
-               if (res == NULL)    /* allow for "show" style notices */
-                   res = QR_Constructor();
-
-               mylog("send_query: setting cmdbuffer = '%s'\n", cmdbuffer);
-
-               /*  Only save the first command */
-               QR_set_status(res, PGRES_COMMAND_OK);
-               QR_set_command(res, cmdbuffer);
-
-               /* (Quotation from the original comments)
-                   since backend may produce more than one result for some commands
-                   we need to poll until clear
-                   so we send an empty query, and keep reading out of the pipe
-                   until an 'I' is received
-               */
-
-               SOCK_put_string(sock, "Q ");
-               SOCK_flush_output(sock);
-
-               while( ! clear) {
-                   id = SOCK_get_char(sock);
-                   switch(id) {
-                   case 'I':
-                       (void) SOCK_get_char(sock);
-                       clear = TRUE;
-                       break;
-                   case 'Z':
-                       break;
-                   case 'C':
-                       SOCK_get_string(sock, cmdbuffer, ERROR_MSG_LENGTH);
-                       qlog("Command response: '%s'\n", cmdbuffer);
-                       break;
-                   case 'N':
-                       SOCK_get_string(sock, cmdbuffer, ERROR_MSG_LENGTH);
-                       qlog("NOTICE from backend during clear: '%s'\n", cmdbuffer);
-                       break;
-                   case 'E':
-                       SOCK_get_string(sock, cmdbuffer, ERROR_MSG_LENGTH);
-                       qlog("ERROR from backend during clear: '%s'\n", cmdbuffer);
-                       /* We must report this type of error as well
-                          (practically for reference integrity violation
-                          error reporting, from PostgreSQL 7.0).
-                          (Zoltan Kovacs, 04/26/2000)
-                       */
-                       self->errormsg = cmdbuffer;
-                       if ( ! strncmp(self->errormsg, "FATAL", 5)) {
-                           self->errornumber = CONNECTION_SERVER_REPORTED_ERROR;
-                           CC_set_no_trans(self);
-                           }
-                       else 
-                           self->errornumber = CONNECTION_SERVER_REPORTED_WARNING;
-                       QR_set_status(res, PGRES_NONFATAL_ERROR);
-                       break;
+       switch (id)
+       {
+           case 'A':           /* Asynchronous Messages are ignored */
+               (void) SOCK_get_int(sock, 4);   /* id of notification */
+               SOCK_get_string(sock, msgbuffer, MAX_MESSAGE_LEN);
+               /* name of the relation the message comes from */
+               break;
+           case 'C':           /* portal query command, no tuples
+                                * returned */
+               /* read in the return message from the backend */
+               SOCK_get_string(sock, cmdbuffer, MAX_MESSAGE_LEN);
+               if (SOCK_get_errcode(sock) != 0)
+               {
+                   self->errornumber = CONNECTION_NO_RESPONSE;
+                   self->errormsg = "No response from backend while receiving a portal query command";
+                   mylog("send_query: 'C' - %s\n", self->errormsg);
+                   CC_set_no_trans(self);
+                   return NULL;
+               }
+               else
+               {
+
+                   char        clear = 0;
+
+                   mylog("send_query: ok - 'C' - %s\n", cmdbuffer);
+
+                   if (res == NULL)    /* allow for "show" style notices */
+                       res = QR_Constructor();
+
+                   mylog("send_query: setting cmdbuffer = '%s'\n", cmdbuffer);
+
+                   /* Only save the first command */
+                   QR_set_status(res, PGRES_COMMAND_OK);
+                   QR_set_command(res, cmdbuffer);
+
+                   /*
+                    * (Quotation from the original comments) since
+                    * backend may produce more than one result for some
+                    * commands we need to poll until clear so we send an
+                    * empty query, and keep reading out of the pipe until
+                    * an 'I' is received
+                    */
+
+                   SOCK_put_string(sock, "Q ");
+                   SOCK_flush_output(sock);
+
+                   while (!clear)
+                   {
+                       id = SOCK_get_char(sock);
+                       switch (id)
+                       {
+                           case 'I':
+                               (void) SOCK_get_char(sock);
+                               clear = TRUE;
+                               break;
+                           case 'Z':
+                               break;
+                           case 'C':
+                               SOCK_get_string(sock, cmdbuffer, ERROR_MSG_LENGTH);
+                               qlog("Command response: '%s'\n", cmdbuffer);
+                               break;
+                           case 'N':
+                               SOCK_get_string(sock, cmdbuffer, ERROR_MSG_LENGTH);
+                               qlog("NOTICE from backend during clear: '%s'\n", cmdbuffer);
+                               break;
+                           case 'E':
+                               SOCK_get_string(sock, cmdbuffer, ERROR_MSG_LENGTH);
+                               qlog("ERROR from backend during clear: '%s'\n", cmdbuffer);
+
+                               /*
+                                * We must report this type of error as
+                                * well (practically for reference
+                                * integrity violation error reporting,
+                                * from PostgreSQL 7.0). (Zoltan Kovacs,
+                                * 04/26/2000)
+                                */
+                               self->errormsg = cmdbuffer;
+                               if (!strncmp(self->errormsg, "FATAL", 5))
+                               {
+                                   self->errornumber = CONNECTION_SERVER_REPORTED_ERROR;
+                                   CC_set_no_trans(self);
+                               }
+                               else
+                                   self->errornumber = CONNECTION_SERVER_REPORTED_WARNING;
+                               QR_set_status(res, PGRES_NONFATAL_ERROR);
+                               break;
+                       }
                    }
+
+                   mylog("send_query: returning res = %u\n", res);
+                   return res;
                }
-               
-               mylog("send_query: returning res = %u\n", res);
-               return res;
-           }
-       case 'K':   /* Secret key (6.4 protocol) */
-           (void)SOCK_get_int(sock, 4); /* pid */
-           (void)SOCK_get_int(sock, 4); /* key */
+           case 'K':           /* Secret key (6.4 protocol) */
+               (void) SOCK_get_int(sock, 4);   /* pid */
+               (void) SOCK_get_int(sock, 4);   /* key */
 
-           break;
-       case 'Z':   /* Backend is ready for new query (6.4) */
-           break;
-       case 'N' : /* NOTICE: */
-           SOCK_get_string(sock, cmdbuffer, ERROR_MSG_LENGTH);
+               break;
+           case 'Z':           /* Backend is ready for new query (6.4) */
+               break;
+           case 'N':           /* NOTICE: */
+               SOCK_get_string(sock, cmdbuffer, ERROR_MSG_LENGTH);
 
-           res = QR_Constructor();
-           QR_set_status(res, PGRES_NONFATAL_ERROR);
-           QR_set_notice(res, cmdbuffer);  /* will dup this string */
+               res = QR_Constructor();
+               QR_set_status(res, PGRES_NONFATAL_ERROR);
+               QR_set_notice(res, cmdbuffer);  /* will dup this string */
 
-           mylog("~~~ NOTICE: '%s'\n", cmdbuffer);
-           qlog("NOTICE from backend during send_query: '%s'\n", cmdbuffer);
+               mylog("~~~ NOTICE: '%s'\n", cmdbuffer);
+               qlog("NOTICE from backend during send_query: '%s'\n", cmdbuffer);
 
-           continue;       /* dont return a result -- continue reading */
+               continue;       /* dont return a result -- continue
+                                * reading */
 
-       case 'I' : /* The server sends an empty query */
+           case 'I':           /* The server sends an empty query */
                /* There is a closing '\0' following the 'I', so we eat it */
-           swallow = SOCK_get_char(sock);
-           if ((swallow != '\0') || SOCK_get_errcode(sock) != 0) {
-               self->errornumber = CONNECTION_BACKEND_CRAZY;
-               self->errormsg = "Unexpected protocol character from backend (send_query - I)";
-               res = QR_Constructor();
-               QR_set_status(res, PGRES_FATAL_ERROR);
-               return res;
-           } else {
-               /* We return the empty query */
-               res = QR_Constructor();
-               QR_set_status(res, PGRES_EMPTY_QUERY);
-               return res;
-           }
-           break;
-       case 'E' : 
-           SOCK_get_string(sock, msgbuffer, ERROR_MSG_LENGTH);
-
-           /*  Remove a newline */
-           if (msgbuffer[0] != '\0' && msgbuffer[strlen(msgbuffer)-1] == '\n')
-               msgbuffer[strlen(msgbuffer)-1] = '\0';
+               swallow = SOCK_get_char(sock);
+               if ((swallow != '\0') || SOCK_get_errcode(sock) != 0)
+               {
+                   self->errornumber = CONNECTION_BACKEND_CRAZY;
+                   self->errormsg = "Unexpected protocol character from backend (send_query - I)";
+                   res = QR_Constructor();
+                   QR_set_status(res, PGRES_FATAL_ERROR);
+                   return res;
+               }
+               else
+               {
+                   /* We return the empty query */
+                   res = QR_Constructor();
+                   QR_set_status(res, PGRES_EMPTY_QUERY);
+                   return res;
+               }
+               break;
+           case 'E':
+               SOCK_get_string(sock, msgbuffer, ERROR_MSG_LENGTH);
 
-           self->errormsg = msgbuffer;
+               /* Remove a newline */
+               if (msgbuffer[0] != '\0' && msgbuffer[strlen(msgbuffer) - 1] == '\n')
+                   msgbuffer[strlen(msgbuffer) - 1] = '\0';
 
-           mylog("send_query: 'E' - %s\n", self->errormsg);
-           qlog("ERROR from backend during send_query: '%s'\n", self->errormsg);
+               self->errormsg = msgbuffer;
 
-           /* We should report that an error occured. Zoltan */
-           res = QR_Constructor();
+               mylog("send_query: 'E' - %s\n", self->errormsg);
+               qlog("ERROR from backend during send_query: '%s'\n", self->errormsg);
 
-           if ( ! strncmp(self->errormsg, "FATAL", 5)) {
-               self->errornumber = CONNECTION_SERVER_REPORTED_ERROR;
-               CC_set_no_trans(self);
-               QR_set_status(res, PGRES_FATAL_ERROR);
-           }
-           else {
-               self->errornumber = CONNECTION_SERVER_REPORTED_WARNING;
-               QR_set_status(res, PGRES_NONFATAL_ERROR);
-           }
+               /* We should report that an error occured. Zoltan */
+               res = QR_Constructor();
 
-           return res; /* instead of NULL. Zoltan */
+               if (!strncmp(self->errormsg, "FATAL", 5))
+               {
+                   self->errornumber = CONNECTION_SERVER_REPORTED_ERROR;
+                   CC_set_no_trans(self);
+                   QR_set_status(res, PGRES_FATAL_ERROR);
+               }
+               else
+               {
+                   self->errornumber = CONNECTION_SERVER_REPORTED_WARNING;
+                   QR_set_status(res, PGRES_NONFATAL_ERROR);
+               }
 
-       case 'P' : /* get the Portal name */
-           SOCK_get_string(sock, msgbuffer, MAX_MESSAGE_LEN);
-           break;
-       case 'T': /* Tuple results start here */
-           result_in = qi ? qi->result_in : NULL;
+               return res;     /* instead of NULL. Zoltan */
 
-           if ( result_in == NULL) {
-               result_in = QR_Constructor();
-               mylog("send_query: 'T' no result_in: res = %u\n", result_in);
-               if ( ! result_in) {
-                   self->errornumber = CONNECTION_COULD_NOT_RECEIVE;
-                   self->errormsg = "Could not create result info in send_query.";
-                   return NULL;
-               }
+           case 'P':           /* get the Portal name */
+               SOCK_get_string(sock, msgbuffer, MAX_MESSAGE_LEN);
+               break;
+           case 'T':           /* Tuple results start here */
+               result_in = qi ? qi->result_in : NULL;
+
+               if (result_in == NULL)
+               {
+                   result_in = QR_Constructor();
+                   mylog("send_query: 'T' no result_in: res = %u\n", result_in);
+                   if (!result_in)
+                   {
+                       self->errornumber = CONNECTION_COULD_NOT_RECEIVE;
+                       self->errormsg = "Could not create result info in send_query.";
+                       return NULL;
+                   }
 
-               if (qi)
-                   QR_set_cache_size(result_in, qi->row_size);
+                   if (qi)
+                       QR_set_cache_size(result_in, qi->row_size);
 
-               if ( ! QR_fetch_tuples(result_in, self, qi ? qi->cursor : NULL)) {
-                   self->errornumber = CONNECTION_COULD_NOT_RECEIVE;
-                   self->errormsg = QR_get_message(result_in);
-                   return NULL;
+                   if (!QR_fetch_tuples(result_in, self, qi ? qi->cursor : NULL))
+                   {
+                       self->errornumber = CONNECTION_COULD_NOT_RECEIVE;
+                       self->errormsg = QR_get_message(result_in);
+                       return NULL;
+                   }
                }
-           }
-           else {  /* next fetch, so reuse an existing result */
-               if ( ! QR_fetch_tuples(result_in, NULL, NULL)) {
-                   self->errornumber = CONNECTION_COULD_NOT_RECEIVE;
-                   self->errormsg = QR_get_message(result_in);
-                   return NULL;
+               else
+               {               /* next fetch, so reuse an existing result */
+                   if (!QR_fetch_tuples(result_in, NULL, NULL))
+                   {
+                       self->errornumber = CONNECTION_COULD_NOT_RECEIVE;
+                       self->errormsg = QR_get_message(result_in);
+                       return NULL;
+                   }
                }
-           }
 
-           return result_in;
-       case 'D': /* Copy in command began successfully */
-           res = QR_Constructor();
-           QR_set_status(res, PGRES_COPY_IN);
-           return res;
-       case 'B': /* Copy out command began successfully */
-           res = QR_Constructor();
-           QR_set_status(res, PGRES_COPY_OUT);
-           return res;
-       default:
-           self->errornumber = CONNECTION_BACKEND_CRAZY;
-           self->errormsg = "Unexpected protocol character from backend (send_query)";
-           CC_set_no_trans(self);
+               return result_in;
+           case 'D':           /* Copy in command began successfully */
+               res = QR_Constructor();
+               QR_set_status(res, PGRES_COPY_IN);
+               return res;
+           case 'B':           /* Copy out command began successfully */
+               res = QR_Constructor();
+               QR_set_status(res, PGRES_COPY_OUT);
+               return res;
+           default:
+               self->errornumber = CONNECTION_BACKEND_CRAZY;
+               self->errormsg = "Unexpected protocol character from backend (send_query)";
+               CC_set_no_trans(self);
 
-           mylog("send_query: error - %s\n", self->errormsg);
-           return NULL;
+               mylog("send_query: error - %s\n", self->errormsg);
+               return NULL;
        }
    }
 }
 
 int
-CC_send_function(ConnectionClass *self, int fnid, void *result_buf, int *actual_result_len, int result_is_int, LO_ARG *args, int nargs)
+CC_send_function(ConnectionClass * self, int fnid, void *result_buf, int *actual_result_len, int result_is_int, LO_ARG * args, int nargs)
 {
-char id, c, done;
-SocketClass *sock = self->sock;
-static char msgbuffer[MAX_MESSAGE_LEN+1];
-int i;
+   char        id,
+               c,
+               done;
+   SocketClass *sock = self->sock;
+   static char msgbuffer[MAX_MESSAGE_LEN + 1];
+   int         i;
 
    mylog("send_function(): conn=%u, fnid=%d, result_is_int=%d, nargs=%d\n", self, fnid, result_is_int, nargs);
 
-   if (SOCK_get_errcode(sock) != 0) {
+   if (SOCK_get_errcode(sock) != 0)
+   {
        self->errornumber = CONNECTION_COULD_NOT_SEND;
        self->errormsg = "Could not send function to backend";
        CC_set_no_trans(self);
@@ -1079,24 +1172,26 @@ int i;
    }
 
    SOCK_put_string(sock, "F ");
-   if (SOCK_get_errcode(sock) != 0) {
+   if (SOCK_get_errcode(sock) != 0)
+   {
        self->errornumber = CONNECTION_COULD_NOT_SEND;
        self->errormsg = "Could not send function to backend";
        CC_set_no_trans(self);
        return FALSE;
    }
 
-   SOCK_put_int(sock, fnid, 4); 
-   SOCK_put_int(sock, nargs, 4); 
+   SOCK_put_int(sock, fnid, 4);
+   SOCK_put_int(sock, nargs, 4);
 
    mylog("send_function: done sending function\n");
 
-   for (i = 0; i < nargs; ++i) {
+   for (i = 0; i < nargs; ++i)
+   {
 
        mylog("  arg[%d]: len = %d, isint = %d, integer = %d, ptr = %u\n", i, args[i].len, args[i].isint, args[i].u.integer, args[i].u.ptr);
 
        SOCK_put_int(sock, args[i].len, 4);
-       if (args[i].isint) 
+       if (args[i].isint)
            SOCK_put_int(sock, args[i].u.integer, 4);
        else
            SOCK_put_n_char(sock, (char *) args[i].u.ptr, args[i].len);
@@ -1108,159 +1203,169 @@ int i;
    mylog("  after flush output\n");
 
    done = FALSE;
-   while ( ! done) {
+   while (!done)
+   {
        id = SOCK_get_char(sock);
        mylog("   got id = %c\n", id);
 
-       switch(id) {
-       case 'V':
-           done = TRUE;
-           break;      /* ok */
+       switch (id)
+       {
+           case 'V':
+               done = TRUE;
+               break;          /* ok */
 
-       case 'N':
-           SOCK_get_string(sock, msgbuffer, ERROR_MSG_LENGTH);
-           mylog("send_function(V): 'N' - %s\n", msgbuffer);
-           /*  continue reading */
-           break;
+           case 'N':
+               SOCK_get_string(sock, msgbuffer, ERROR_MSG_LENGTH);
+               mylog("send_function(V): 'N' - %s\n", msgbuffer);
+               /* continue reading */
+               break;
 
-       case 'E':
-           SOCK_get_string(sock, msgbuffer, ERROR_MSG_LENGTH);
-           self->errormsg = msgbuffer;
+           case 'E':
+               SOCK_get_string(sock, msgbuffer, ERROR_MSG_LENGTH);
+               self->errormsg = msgbuffer;
 
-           mylog("send_function(V): 'E' - %s\n", self->errormsg);
-           qlog("ERROR from backend during send_function: '%s'\n", self->errormsg);
+               mylog("send_function(V): 'E' - %s\n", self->errormsg);
+               qlog("ERROR from backend during send_function: '%s'\n", self->errormsg);
 
-           return FALSE;
+               return FALSE;
 
-       case 'Z':
-           break;
+           case 'Z':
+               break;
 
-       default:
-           self->errornumber = CONNECTION_BACKEND_CRAZY;
-           self->errormsg = "Unexpected protocol character from backend (send_function, args)";
-           CC_set_no_trans(self);
+           default:
+               self->errornumber = CONNECTION_BACKEND_CRAZY;
+               self->errormsg = "Unexpected protocol character from backend (send_function, args)";
+               CC_set_no_trans(self);
 
-           mylog("send_function: error - %s\n", self->errormsg);
-           return FALSE;
+               mylog("send_function: error - %s\n", self->errormsg);
+               return FALSE;
        }
    }
 
    id = SOCK_get_char(sock);
-   for (;;) {
-       switch (id) {
-       case 'G':   /* function returned properly */
-           mylog("  got G!\n");
+   for (;;)
+   {
+       switch (id)
+       {
+           case 'G':           /* function returned properly */
+               mylog("  got G!\n");
 
-           *actual_result_len = SOCK_get_int(sock, 4);
-           mylog("  actual_result_len = %d\n", *actual_result_len);
+               *actual_result_len = SOCK_get_int(sock, 4);
+               mylog("  actual_result_len = %d\n", *actual_result_len);
 
-           if (result_is_int)
-               *((int *) result_buf) = SOCK_get_int(sock, 4);
-           else
-               SOCK_get_n_char(sock, (char *) result_buf, *actual_result_len);
+               if (result_is_int)
+                   *((int *) result_buf) = SOCK_get_int(sock, 4);
+               else
+                   SOCK_get_n_char(sock, (char *) result_buf, *actual_result_len);
 
-           mylog("  after get result\n");
+               mylog("  after get result\n");
 
-           c = SOCK_get_char(sock);    /* get the last '0' */
+               c = SOCK_get_char(sock);        /* get the last '0' */
 
-           mylog("   after get 0\n");
+               mylog("   after get 0\n");
 
-           return TRUE;
+               return TRUE;
 
-       case 'E':
-           SOCK_get_string(sock, msgbuffer, ERROR_MSG_LENGTH);
-           self->errormsg = msgbuffer;
+           case 'E':
+               SOCK_get_string(sock, msgbuffer, ERROR_MSG_LENGTH);
+               self->errormsg = msgbuffer;
 
-           mylog("send_function(G): 'E' - %s\n", self->errormsg);
-           qlog("ERROR from backend during send_function: '%s'\n", self->errormsg);
+               mylog("send_function(G): 'E' - %s\n", self->errormsg);
+               qlog("ERROR from backend during send_function: '%s'\n", self->errormsg);
 
-           return FALSE;
+               return FALSE;
 
-       case 'N':
-           SOCK_get_string(sock, msgbuffer, ERROR_MSG_LENGTH);
+           case 'N':
+               SOCK_get_string(sock, msgbuffer, ERROR_MSG_LENGTH);
 
-           mylog("send_function(G): 'N' - %s\n", msgbuffer);
-           qlog("NOTICE from backend during send_function: '%s'\n", msgbuffer);
+               mylog("send_function(G): 'N' - %s\n", msgbuffer);
+               qlog("NOTICE from backend during send_function: '%s'\n", msgbuffer);
 
-           continue;       /* dont return a result -- continue reading */
+               continue;       /* dont return a result -- continue
+                                * reading */
 
-       case '0':   /* empty result */
-           return TRUE;
+           case '0':           /* empty result */
+               return TRUE;
 
-       default:
-           self->errornumber = CONNECTION_BACKEND_CRAZY;
-           self->errormsg = "Unexpected protocol character from backend (send_function, result)";
-           CC_set_no_trans(self);
+           default:
+               self->errornumber = CONNECTION_BACKEND_CRAZY;
+               self->errormsg = "Unexpected protocol character from backend (send_function, result)";
+               CC_set_no_trans(self);
 
-           mylog("send_function: error - %s\n", self->errormsg);
-           return FALSE;
+               mylog("send_function: error - %s\n", self->errormsg);
+               return FALSE;
        }
    }
 }
 
 
 char
-CC_send_settings(ConnectionClass *self)
+CC_send_settings(ConnectionClass * self)
 {
-  /* char ini_query[MAX_MESSAGE_LEN]; */
-ConnInfo *ci = &(self->connInfo);
+   /* char ini_query[MAX_MESSAGE_LEN]; */
+   ConnInfo   *ci = &(self->connInfo);
+
 /* QResultClass *res; */
-HSTMT hstmt;
-StatementClass *stmt;
-RETCODE result;
-char status = TRUE;
-char *cs, *ptr;
-static char *func="CC_send_settings";
+   HSTMT       hstmt;
+   StatementClass *stmt;
+   RETCODE     result;
+   char        status = TRUE;
+   char       *cs,
+              *ptr;
+   static char *func = "CC_send_settings";
 
 
    mylog("%s: entering...\n", func);
 
-/* This function must use the local odbc API functions since the odbc state 
+/* This function must use the local odbc API functions since the odbc state
    has not transitioned to "connected" yet.
 */
 
-   result = SQLAllocStmt( self, &hstmt);
-   if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
+   result = SQLAllocStmt(self, &hstmt);
+   if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
        return FALSE;
-   }
    stmt = (StatementClass *) hstmt;
 
-   stmt->internal = TRUE;  /* ensure no BEGIN/COMMIT/ABORT stuff */
+   stmt->internal = TRUE;      /* ensure no BEGIN/COMMIT/ABORT stuff */
 
-   /*  Set the Datestyle to the format the driver expects it to be in */
+   /* Set the Datestyle to the format the driver expects it to be in */
    result = SQLExecDirect(hstmt, "set DateStyle to 'ISO'", SQL_NTS);
-   if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
+   if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
        status = FALSE;
 
    mylog("%s: result %d, status %d from set DateStyle\n", func, result, status);
 
-   /*  Disable genetic optimizer based on global flag */
-   if (globals.disable_optimizer) {
+   /* Disable genetic optimizer based on global flag */
+   if (globals.disable_optimizer)
+   {
        result = SQLExecDirect(hstmt, "set geqo to 'OFF'", SQL_NTS);
-       if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
+       if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
            status = FALSE;
 
        mylog("%s: result %d, status %d from set geqo\n", func, result, status);
-   
+
    }
 
-   /*  KSQO */
-   if (globals.ksqo) {
+   /* KSQO */
+   if (globals.ksqo)
+   {
        result = SQLExecDirect(hstmt, "set ksqo to 'ON'", SQL_NTS);
-       if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
+       if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
            status = FALSE;
 
        mylog("%s: result %d, status %d from set ksqo\n", func, result, status);
-   
+
    }
 
-   /*  Global settings */
-   if (globals.conn_settings[0] != '\0') {
+   /* Global settings */
+   if (globals.conn_settings[0] != '\0')
+   {
        cs = strdup(globals.conn_settings);
        ptr = strtok(cs, ";");
-       while (ptr) {
+       while (ptr)
+       {
            result = SQLExecDirect(hstmt, ptr, SQL_NTS);
-           if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
+           if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
                status = FALSE;
 
            mylog("%s: result %d, status %d from '%s'\n", func, result, status, ptr);
@@ -1270,14 +1375,16 @@ static char *func="CC_send_settings";
 
        free(cs);
    }
-   
-   /*  Per Datasource settings */
-   if (ci->conn_settings[0] != '\0') {
+
+   /* Per Datasource settings */
+   if (ci->conn_settings[0] != '\0')
+   {
        cs = strdup(ci->conn_settings);
        ptr = strtok(cs, ";");
-       while (ptr) {
+       while (ptr)
+       {
            result = SQLExecDirect(hstmt, ptr, SQL_NTS);
-           if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
+           if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
                status = FALSE;
 
            mylog("%s: result %d, status %d from '%s'\n", func, result, status, ptr);
@@ -1299,38 +1406,40 @@ static char *func="CC_send_settings";
    will go away and the define 'PG_TYPE_LO' will be updated.
 */
 void
-CC_lookup_lo(ConnectionClass *self) 
+CC_lookup_lo(ConnectionClass * self)
 {
-HSTMT hstmt;
-StatementClass *stmt;
-RETCODE result;
-static char *func = "CC_lookup_lo";
+   HSTMT       hstmt;
+   StatementClass *stmt;
+   RETCODE     result;
+   static char *func = "CC_lookup_lo";
 
-   mylog( "%s: entering...\n", func);
+   mylog("%s: entering...\n", func);
 
-/* This function must use the local odbc API functions since the odbc state 
+/* This function must use the local odbc API functions since the odbc state
    has not transitioned to "connected" yet.
 */
-   result = SQLAllocStmt( self, &hstmt);
-   if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
+   result = SQLAllocStmt(self, &hstmt);
+   if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
        return;
-   }
    stmt = (StatementClass *) hstmt;
 
    result = SQLExecDirect(hstmt, "select oid from pg_type where typname='" PG_TYPE_LO_NAME "'", SQL_NTS);
-   if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
+   if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
+   {
        SQLFreeStmt(hstmt, SQL_DROP);
        return;
    }
 
    result = SQLFetch(hstmt);
-   if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
+   if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
+   {
        SQLFreeStmt(hstmt, SQL_DROP);
        return;
    }
 
    result = SQLGetData(hstmt, 1, SQL_C_SLONG, &self->lobj_type, sizeof(self->lobj_type), NULL);
-   if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
+   if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
+   {
        SQLFreeStmt(hstmt, SQL_DROP);
        return;
    }
@@ -1346,53 +1455,57 @@ static char *func = "CC_lookup_lo";
    h-inoue 01-2-2001
 */
 void
-CC_initialize_pg_version(ConnectionClass *self) 
+CC_initialize_pg_version(ConnectionClass * self)
 {
-   strcpy(self->pg_version, self->connInfo.protocol); 
+   strcpy(self->pg_version, self->connInfo.protocol);
    self->pg_version_number = (float) 6.4;
    self->pg_version_major = 6;
    self->pg_version_minor = 4;
 }
+
 /* This function gets the version of PostgreSQL that we're connected to.
-    This is used to return the correct info in SQLGetInfo
+   This is used to return the correct info in SQLGetInfo
    DJP - 25-1-2001
 */
 void
-CC_lookup_pg_version(ConnectionClass *self) 
+CC_lookup_pg_version(ConnectionClass * self)
 {
-HSTMT hstmt;
-StatementClass *stmt;
-RETCODE result;
-char   szVersion[32];
-int    major, minor;
-static char *func = "CC_lookup_pg_version";
+   HSTMT       hstmt;
+   StatementClass *stmt;
+   RETCODE     result;
+   char        szVersion[32];
+   int         major,
+               minor;
+   static char *func = "CC_lookup_pg_version";
 
-   mylog( "%s: entering...\n", func);
+   mylog("%s: entering...\n", func);
 
-/* This function must use the local odbc API functions since the odbc state 
+/* This function must use the local odbc API functions since the odbc state
    has not transitioned to "connected" yet.
 */
-   result = SQLAllocStmt( self, &hstmt);
-   if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
+   result = SQLAllocStmt(self, &hstmt);
+   if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
        return;
-   }
    stmt = (StatementClass *) hstmt;
 
-   /*  get the server's version if possible    */
+   /* get the server's version if possible  */
    result = SQLExecDirect(hstmt, "select version()", SQL_NTS);
-   if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
+   if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
+   {
        SQLFreeStmt(hstmt, SQL_DROP);
        return;
    }
 
    result = SQLFetch(hstmt);
-   if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
+   if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
+   {
        SQLFreeStmt(hstmt, SQL_DROP);
        return;
    }
 
    result = SQLGetData(hstmt, 1, SQL_C_CHAR, self->pg_version, MAX_INFO_STRING, NULL);
-   if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
+   if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
+   {
        SQLFreeStmt(hstmt, SQL_DROP);
        return;
    }
@@ -1400,7 +1513,8 @@ static char *func = "CC_lookup_pg_version";
    /* Extract the Major and Minor numbers from the string. */
    /* This assumes the string starts 'Postgresql X.X' */
    strcpy(szVersion, "0.0");
-   if (sscanf(self->pg_version, "%*s %d.%d", &major, &minor) >= 2) {
+   if (sscanf(self->pg_version, "%*s %d.%d", &major, &minor) >= 2)
+   {
        sprintf(szVersion, "%d.%d", major, minor);
        self->pg_version_major = major;
        self->pg_version_minor = minor;
@@ -1416,29 +1530,31 @@ static char *func = "CC_lookup_pg_version";
 }
 
 void
-CC_log_error(char *func, char *desc, ConnectionClass *self)
+CC_log_error(char *func, char *desc, ConnectionClass * self)
 {
 #ifdef PRN_NULLCHECK
 #define nullcheck(a) (a ? a : "(NULL)")
 #endif
 
-   if (self) {
-       qlog("CONN ERROR: func=%s, desc='%s', errnum=%d, errmsg='%s'\n", func, desc, self->errornumber, nullcheck (self->errormsg));
-       mylog("CONN ERROR: func=%s, desc='%s', errnum=%d, errmsg='%s'\n", func, desc, self->errornumber, nullcheck (self->errormsg));
+   if (self)
+   {
+       qlog("CONN ERROR: func=%s, desc='%s', errnum=%d, errmsg='%s'\n", func, desc, self->errornumber, nullcheck(self->errormsg));
+       mylog("CONN ERROR: func=%s, desc='%s', errnum=%d, errmsg='%s'\n", func, desc, self->errornumber, nullcheck(self->errormsg));
        qlog("            ------------------------------------------------------------\n");
        qlog("            henv=%u, conn=%u, status=%u, num_stmts=%d\n", self->henv, self, self->status, self->num_stmts);
        qlog("            sock=%u, stmts=%u, lobj_type=%d\n", self->sock, self->stmts, self->lobj_type);
 
        qlog("            ---------------- Socket Info -------------------------------\n");
-       if (self->sock) {
-       SocketClass *sock = self->sock;
-       qlog("            socket=%d, reverse=%d, errornumber=%d, errormsg='%s'\n", sock->socket, sock->reverse, sock->errornumber, nullcheck(sock->errormsg));
-       qlog("            buffer_in=%u, buffer_out=%u\n", sock->buffer_in, sock->buffer_out);
-       qlog("            buffer_filled_in=%d, buffer_filled_out=%d, buffer_read_in=%d\n", sock->buffer_filled_in, sock->buffer_filled_out, sock->buffer_read_in);
+       if (self->sock)
+       {
+           SocketClass *sock = self->sock;
+
+           qlog("            socket=%d, reverse=%d, errornumber=%d, errormsg='%s'\n", sock->socket, sock->reverse, sock->errornumber, nullcheck(sock->errormsg));
+           qlog("            buffer_in=%u, buffer_out=%u\n", sock->buffer_in, sock->buffer_out);
+           qlog("            buffer_filled_in=%d, buffer_filled_out=%d, buffer_read_in=%d\n", sock->buffer_filled_in, sock->buffer_filled_out, sock->buffer_read_in);
        }
    }
    else
        qlog("INVALID CONNECTION HANDLE ERROR: func=%s, desc='%s'\n", func, desc);
 #undef PRN_NULLCHECK
 }
-
index 9169583e457272426207023dfcabc8563ff89cdf..7bd22f00677714768c212642f7b1677dd64889ea 100644 (file)
@@ -1,9 +1,9 @@
 
-/* File:            connection.h
+/* File:           connection.h
  *
- * Description:     See "connection.c"
+ * Description:        See "connection.c"
  *
- * Comments:        See "notice.txt" for copyright and license information.
+ * Comments:       See "notice.txt" for copyright and license information.
  *
  */
 
 #endif
 
 
-typedef enum {
-    CONN_NOT_CONNECTED,      /* Connection has not been established */
-    CONN_CONNECTED,      /* Connection is up and has been established */
-    CONN_DOWN,            /* Connection is broken */
-    CONN_EXECUTING     /* the connection is currently executing a statement */
-} CONN_Status;
+typedef enum
+{
+   CONN_NOT_CONNECTED,         /* Connection has not been established */
+   CONN_CONNECTED,             /* Connection is up and has been
+                                * established */
+   CONN_DOWN,                  /* Connection is broken */
+   CONN_EXECUTING              /* the connection is currently executing a
+                                * statement */
+}          CONN_Status;
 
 /* These errors have general sql error state */
 #define CONNECTION_SERVER_NOT_REACHED 101
@@ -50,7 +53,7 @@ typedef enum {
 #define CONN_INIREAD_ERROR 201
 #define CONN_OPENDB_ERROR 202
 #define CONN_STMT_ALLOC_ERROR 203
-#define CONN_IN_USE 204 
+#define CONN_IN_USE 204
 #define CONN_UNSUPPORTED_OPTION 205
 /* Used by SetConnectoption to indicate unsupported options */
 #define CONN_INVALID_ARGUMENT_NO 206
@@ -110,38 +113,39 @@ typedef unsigned int ProtocolVersion;
 /* This startup packet is to support latest Postgres protocol */
 typedef struct _StartupPacket
 {
-   ProtocolVersion protoVersion;
-   char            database[SM_DATABASE];
-   char            user[SM_USER];
-   char            options[SM_OPTIONS];
-   char            unused[SM_UNUSED];
-   char            tty[SM_TTY];
+   ProtocolVersion protoVersion;
+   char        database[SM_DATABASE];
+   char        user[SM_USER];
+   char        options[SM_OPTIONS];
+   char        unused[SM_UNUSED];
+   char        tty[SM_TTY];
 } StartupPacket;
 
 
 /* Structure to hold all the connection attributes for a specific
    connection (used for both registry and file, DSN and DRIVER)
 */
-typedef struct {
-   char    dsn[MEDIUM_REGISTRY_LEN];
-   char    desc[MEDIUM_REGISTRY_LEN];
-   char    driver[MEDIUM_REGISTRY_LEN];
-   char    server[MEDIUM_REGISTRY_LEN];
-   char    database[MEDIUM_REGISTRY_LEN];
-   char    username[MEDIUM_REGISTRY_LEN];
-   char    password[MEDIUM_REGISTRY_LEN];
-   char    conn_settings[LARGE_REGISTRY_LEN];
-   char    protocol[SMALL_REGISTRY_LEN];
-   char    port[SMALL_REGISTRY_LEN];
-   char    onlyread[SMALL_REGISTRY_LEN];   
-   char    fake_oid_index[SMALL_REGISTRY_LEN];
-   char    show_oid_column[SMALL_REGISTRY_LEN];
-   char    row_versioning[SMALL_REGISTRY_LEN];
-   char    show_system_tables[SMALL_REGISTRY_LEN];
-   char    translation_dll[MEDIUM_REGISTRY_LEN];
-   char    translation_option[SMALL_REGISTRY_LEN];
-   char    focus_password;
-} ConnInfo;
+typedef struct
+{
+   char        dsn[MEDIUM_REGISTRY_LEN];
+   char        desc[MEDIUM_REGISTRY_LEN];
+   char        driver[MEDIUM_REGISTRY_LEN];
+   char        server[MEDIUM_REGISTRY_LEN];
+   char        database[MEDIUM_REGISTRY_LEN];
+   char        username[MEDIUM_REGISTRY_LEN];
+   char        password[MEDIUM_REGISTRY_LEN];
+   char        conn_settings[LARGE_REGISTRY_LEN];
+   char        protocol[SMALL_REGISTRY_LEN];
+   char        port[SMALL_REGISTRY_LEN];
+   char        onlyread[SMALL_REGISTRY_LEN];
+   char        fake_oid_index[SMALL_REGISTRY_LEN];
+   char        show_oid_column[SMALL_REGISTRY_LEN];
+   char        row_versioning[SMALL_REGISTRY_LEN];
+   char        show_system_tables[SMALL_REGISTRY_LEN];
+   char        translation_dll[MEDIUM_REGISTRY_LEN];
+   char        translation_option[SMALL_REGISTRY_LEN];
+   char        focus_password;
+}          ConnInfo;
 
 /*
  * Macros to compare the server's version with a specified version
@@ -160,15 +164,15 @@ typedef struct {
 #define SERVER_VERSION_LE(conn, major, minor) (! SERVER_VERSION_GT(conn, major, minor))
 #define SERVER_VERSION_LT(conn, major, minor) (! SERVER_VERSION_GE(conn, major, minor))
 /*#if ! defined(HAVE_CONFIG_H) || defined(HAVE_STRINGIZE)*/
-#define    STRING_AFTER_DOT(string)    (strchr(#string, '.') + 1)
+#define STRING_AFTER_DOT(string)   (strchr(#string, '.') + 1)
 /*#else
-#define    STRING_AFTER_DOT(str)   (strchr("str", '.') + 1)
+#define STRING_AFTER_DOT(str)  (strchr("str", '.') + 1)
 #endif*/
 /*
  * Simplified macros to compare the server's version with a
  *     specified version
  * Note: Never pass a variable as the second parameter.
- *       It must be a decimal constant of the form %d.%d . 
+ *       It must be a decimal constant of the form %d.%d .
  */
 #define PG_VERSION_GT(conn, ver) \
  (SERVER_VERSION_GT(conn, (int) ver, atoi(STRING_AFTER_DOT(ver))))
@@ -180,9 +184,10 @@ typedef struct {
 #define PG_VERSION_LT(conn, ver) (! PG_VERSION_GE(conn, ver))
 
 /* This is used to store cached table information in the connection */
-struct col_info {
-   QResultClass    *result;
-   char            name[MAX_TABLE_LEN+1];
+struct col_info
+{
+   QResultClass *result;
+   char        name[MAX_TABLE_LEN + 1];
 };
 
  /* Translation DLL entry points */
@@ -194,52 +199,58 @@ struct col_info {
 #define HINSTANCE void *
 #endif
 
-typedef BOOL (FAR WINAPI *DataSourceToDriverProc) (UDWORD,
-                   SWORD,
-                   PTR,
-                   SDWORD,
-                   PTR,
-                   SDWORD,
-                   SDWORD FAR *,
-                   UCHAR FAR *,
-                   SWORD,
-                   SWORD FAR *);
-
-typedef BOOL (FAR WINAPI *DriverToDataSourceProc) (UDWORD,
-                   SWORD,
-                   PTR,
-                   SDWORD,
-                   PTR,
-                   SDWORD,
-                   SDWORD FAR *,
-                   UCHAR FAR *,
-                   SWORD,
-                   SWORD FAR *);
+typedef BOOL(FAR WINAPI * DataSourceToDriverProc) (UDWORD,
+                                          SWORD,
+                                          PTR,
+                                          SDWORD,
+                                          PTR,
+                                          SDWORD,
+                                          SDWORD FAR *,
+                                          UCHAR FAR *,
+                                          SWORD,
+                                          SWORD FAR *);
+
+typedef BOOL(FAR WINAPI * DriverToDataSourceProc) (UDWORD,
+                                          SWORD,
+                                          PTR,
+                                          SDWORD,
+                                          PTR,
+                                          SDWORD,
+                                          SDWORD FAR *,
+                                          UCHAR FAR *,
+                                          SWORD,
+                                          SWORD FAR *);
 
 /*******   The Connection handle   ************/
-struct ConnectionClass_ {
-   HENV            henv;                   /* environment this connection was created on */
+struct ConnectionClass_
+{
+   HENV        henv;           /* environment this connection was created
+                                * on */
    StatementOptions stmtOptions;
-   char            *errormsg;
-   int             errornumber;
-   CONN_Status     status;
-   ConnInfo        connInfo;
-   StatementClass  **stmts;
-   int             num_stmts;
-   SocketClass     *sock;
-   int             lobj_type;
-   int             ntables;
-   COL_INFO        **col_info;
-   long            translation_option;
-   HINSTANCE       translation_handle;
-   DataSourceToDriverProc  DataSourceToDriver;
-   DriverToDataSourceProc  DriverToDataSource;
-   char            transact_status;        /* Is a transaction is currently in progress */
-   char            errormsg_created;       /* has an informative error msg been created?  */
-   char            pg_version[MAX_INFO_STRING];    /* Version of PostgreSQL we're connected to - DJP 25-1-2001 */
-   float           pg_version_number;
-   Int2            pg_version_major;
-   Int2            pg_version_minor;
+   char       *errormsg;
+   int         errornumber;
+   CONN_Status status;
+   ConnInfo    connInfo;
+   StatementClass **stmts;
+   int         num_stmts;
+   SocketClass *sock;
+   int         lobj_type;
+   int         ntables;
+   COL_INFO  **col_info;
+   long        translation_option;
+   HINSTANCE   translation_handle;
+   DataSourceToDriverProc DataSourceToDriver;
+   DriverToDataSourceProc DriverToDataSource;
+   char        transact_status;/* Is a transaction is currently in
+                                * progress */
+   char        errormsg_created;       /* has an informative error msg
+                                        * been created?  */
+   char        pg_version[MAX_INFO_STRING];    /* Version of PostgreSQL
+                                                * we're connected to -
+                                                * DJP 25-1-2001 */
+   float       pg_version_number;
+   Int2        pg_version_major;
+   Int2        pg_version_minor;
 };
 
 
@@ -252,31 +263,31 @@ struct ConnectionClass_ {
 #define CC_is_onlyread(x)  (x->connInfo.onlyread[0] == '1')
 
 
-/*  for CC_DSN_info */
+/* for CC_DSN_info */
 #define CONN_DONT_OVERWRITE        0
-#define CONN_OVERWRITE         1 
+#define CONN_OVERWRITE         1
 
 
 /* prototypes */
 ConnectionClass *CC_Constructor(void);
-char CC_Destructor(ConnectionClass *self);
-int CC_cursor_count(ConnectionClass *self);
-char CC_cleanup(ConnectionClass *self);
-char CC_abort(ConnectionClass *self);
-int CC_set_translation (ConnectionClass *self);
-char CC_connect(ConnectionClass *self, char do_password);
-char CC_add_statement(ConnectionClass *self, StatementClass *stmt);
-char CC_remove_statement(ConnectionClass *self, StatementClass *stmt);
-char CC_get_error(ConnectionClass *self, int *number, char **message);
-QResultClass *CC_send_query(ConnectionClass *self, char *query, QueryInfo *qi);
-void CC_clear_error(ConnectionClass *self);
-char *CC_create_errormsg(ConnectionClass *self);
-int CC_send_function(ConnectionClass *conn, int fnid, void *result_buf, int *actual_result_len, int result_is_int, LO_ARG *argv, int nargs);
-char CC_send_settings(ConnectionClass *self);
-void CC_lookup_lo(ConnectionClass *conn);
-void CC_lookup_pg_version(ConnectionClass *conn);
-void CC_initialize_pg_version(ConnectionClass *conn);
-void CC_log_error(char *func, char *desc, ConnectionClass *self);
+char       CC_Destructor(ConnectionClass * self);
+int            CC_cursor_count(ConnectionClass * self);
+char       CC_cleanup(ConnectionClass * self);
+char       CC_abort(ConnectionClass * self);
+int            CC_set_translation(ConnectionClass * self);
+char       CC_connect(ConnectionClass * self, char do_password);
+char       CC_add_statement(ConnectionClass * self, StatementClass * stmt);
+char       CC_remove_statement(ConnectionClass * self, StatementClass * stmt);
+char       CC_get_error(ConnectionClass * self, int *number, char **message);
+QResultClass *CC_send_query(ConnectionClass * self, char *query, QueryInfo * qi);
+void       CC_clear_error(ConnectionClass * self);
+char      *CC_create_errormsg(ConnectionClass * self);
+int            CC_send_function(ConnectionClass * conn, int fnid, void *result_buf, int *actual_result_len, int result_is_int, LO_ARG * argv, int nargs);
+char       CC_send_settings(ConnectionClass * self);
+void       CC_lookup_lo(ConnectionClass * conn);
+void       CC_lookup_pg_version(ConnectionClass * conn);
+void       CC_initialize_pg_version(ConnectionClass * conn);
+void       CC_log_error(char *func, char *desc, ConnectionClass * self);
 
 
 #endif
index f033ce4b3ff86962fde8453f76fe026721085ed6..8542936d5c701b6321aa9a0b98ba8c5ea7335447 100644 (file)
--- a/convert.c
+++ b/convert.c
@@ -1,17 +1,17 @@
-/* Module:         convert.c
+/* Module:        convert.c
  *
- * Description:       This module contains routines related to 
- *                 converting parameters and columns into requested data types.
- *                 Parameters are converted from their SQL_C data types into
- *                 the appropriate postgres type.  Columns are converted from
- *                 their postgres type (SQL type) into the appropriate SQL_C 
- *                 data type.
+ * Description:    This module contains routines related to
+ *                converting parameters and columns into requested data types.
+ *                Parameters are converted from their SQL_C data types into
+ *                the appropriate postgres type.  Columns are converted from
+ *                their postgres type (SQL type) into the appropriate SQL_C
+ *                data type.
  *
- * Classes:        n/a
+ * Classes:           n/a
  *
  * API functions:  none
  *
- * Comments:       See "notice.txt" for copyright and license information.
+ * Comments:      See "notice.txt" for copyright and license information.
  *
  */
 
@@ -52,6 +52,7 @@
 #endif
 #ifndef SCHAR
 typedef signed char SCHAR;
+
 #endif
 #endif
 
@@ -63,76 +64,76 @@ extern GLOBAL_VALUES globals;
  *  http://www.merant.com/datadirect/download/docs/odbc16/Odbcref/rappc.htm
  * - thomas 2000-04-03
  */
-char *mapFuncs[][2] = {
-/* { "ASCII",       "ascii"      }, */
-   { "CHAR",        "ichar"      },
-   { "CONCAT",      "textcat"    },
+char      *mapFuncs[][2] = {
+/* { "ASCII",       "ascii"      }, */
+   {"CHAR", "ichar"},
+   {"CONCAT", "textcat"},
 /* { "DIFFERENCE",  "difference" }, */
-/* { "INSERT",      "insert"     }, */
-   { "LCASE",       "lower"      },
-   { "LEFT",        "ltrunc"     },
-   { "LOCATE",      "strpos"     },
-   { "LENGTH",      "char_length"},
-/* { "LTRIM",       "ltrim"      }, */
-   { "RIGHT",       "rtrunc"     },
-/* { "REPEAT",      "repeat"     }, */
-/* { "REPLACE",     "replace"    }, */
-/* { "RTRIM",       "rtrim"      }, */
-/* { "SOUNDEX",     "soundex"    }, */
-   { "SUBSTRING",   "substr"     },
-   { "UCASE",       "upper"      },
-
-/* { "ABS",         "abs"        }, */
-/* { "ACOS",        "acos"       }, */
-/* { "ASIN",        "asin"       }, */
-/* { "ATAN",        "atan"       }, */
-/* { "ATAN2",       "atan2"      }, */
-   { "CEILING",     "ceil"       },
-/* { "COS",         "cos"        }, */
-/* { "COT",         "cot"        }, */
-/* { "DEGREES",     "degrees"    }, */
-/* { "EXP",         "exp"        }, */
-/* { "FLOOR",       "floor"      }, */
-   { "LOG",         "ln"         },
-   { "LOG10",       "log"        },
-/* { "MOD",         "mod"        }, */
-/* { "PI",          "pi"         }, */
-   { "POWER",       "pow"        },
-/* { "RADIANS",     "radians"    }, */
-   { "RAND",        "random"     },
-/* { "ROUND",       "round"      }, */
-/* { "SIGN",        "sign"       }, */
-/* { "SIN",         "sin"        }, */
-/* { "SQRT",        "sqrt"       }, */
-/* { "TAN",         "tan"        }, */
-   { "TRUNCATE",    "trunc"      },
-
-/* { "CURDATE",     "curdate"    }, */
-/* { "CURTIME",     "curtime"    }, */
-/* { "DAYNAME",     "dayname"    }, */
+/* { "INSERT",      "insert"     }, */
+   {"LCASE", "lower"},
+   {"LEFT", "ltrunc"},
+   {"LOCATE", "strpos"},
+   {"LENGTH", "char_length"},
+/* { "LTRIM",       "ltrim"      }, */
+   {"RIGHT", "rtrunc"},
+/* { "REPEAT",      "repeat"     }, */
+/* { "REPLACE",     "replace"    }, */
+/* { "RTRIM",       "rtrim"      }, */
+/* { "SOUNDEX",     "soundex"    }, */
+   {"SUBSTRING", "substr"},
+   {"UCASE", "upper"},
+
+/* { "ABS",         "abs"        }, */
+/* { "ACOS",        "acos"       }, */
+/* { "ASIN",        "asin"       }, */
+/* { "ATAN",        "atan"       }, */
+/* { "ATAN2",       "atan2"      }, */
+   {"CEILING", "ceil"},
+/* { "COS",         "cos"        }, */
+/* { "COT",         "cot"        }, */
+/* { "DEGREES",     "degrees"    }, */
+/* { "EXP",         "exp"        }, */
+/* { "FLOOR",       "floor"      }, */
+   {"LOG", "ln"},
+   {"LOG10", "log"},
+/* { "MOD",         "mod"        }, */
+/* { "PI",          "pi"         }, */
+   {"POWER", "pow"},
+/* { "RADIANS",     "radians"    }, */
+   {"RAND", "random"},
+/* { "ROUND",       "round"      }, */
+/* { "SIGN",        "sign"       }, */
+/* { "SIN",         "sin"        }, */
+/* { "SQRT",        "sqrt"       }, */
+/* { "TAN",         "tan"        }, */
+   {"TRUNCATE", "trunc"},
+
+/* { "CURDATE",     "curdate"    }, */
+/* { "CURTIME",     "curtime"    }, */
+/* { "DAYNAME",     "dayname"    }, */
 /* { "DAYOFMONTH",  "dayofmonth" }, */
-/* { "DAYOFWEEK",   "dayofweek"  }, */
-/* { "DAYOFYEAR",   "dayofyear"  }, */
-/* { "HOUR",        "hour"       }, */
-/* { "MINUTE",      "minute"     }, */
-/* { "MONTH",       "month"      }, */
-/* { "MONTHNAME",   "monthname"  }, */
-/* { "NOW",         "now"        }, */
-/* { "QUARTER",     "quarter"    }, */
-/* { "SECOND",      "second"     }, */
-/* { "WEEK",        "week"       }, */
-/* { "YEAR",        "year"       }, */
-
-/* { "DATABASE",    "database"   }, */
-   { "IFNULL",      "coalesce"   },
-   { "USER",        "odbc_user"  },
-   {    0,             0         }
+/* { "DAYOFWEEK",   "dayofweek"  }, */
+/* { "DAYOFYEAR",   "dayofyear"  }, */
+/* { "HOUR",        "hour"       }, */
+/* { "MINUTE",      "minute"     }, */
+/* { "MONTH",       "month"      }, */
+/* { "MONTHNAME",   "monthname"  }, */
+/* { "NOW",         "now"        }, */
+/* { "QUARTER",     "quarter"    }, */
+/* { "SECOND",      "second"     }, */
+/* { "WEEK",        "week"       }, */
+/* { "YEAR",        "year"       }, */
+
+/* { "DATABASE",    "database"   }, */
+   {"IFNULL", "coalesce"},
+   {"USER", "odbc_user"},
+   {0, 0}
 };
 
-char *mapFunction(char *func);
+char      *mapFunction(char *func);
 unsigned int conv_from_octal(unsigned char *s);
 unsigned int conv_from_hex(unsigned char *s);
-char *conv_to_octal(unsigned char val);
+char      *conv_to_octal(unsigned char val);
 
 /********      A Guide for date/time/timestamp conversions    **************
 
@@ -144,47 +145,52 @@ char *conv_to_octal(unsigned char val);
            PG_TYPE_TIME    SQL_C_DEFAULT       SQL_C_TIME
            PG_TYPE_TIME    SQL_C_TIME          SQL_C_TIME
            PG_TYPE_TIME    SQL_C_TIMESTAMP     SQL_C_TIMESTAMP     (date = current date)
-           PG_TYPE_ABSTIME SQL_C_DEFAULT       SQL_C_TIMESTAMP
-           PG_TYPE_ABSTIME SQL_C_DATE          SQL_C_DATE          (time is truncated)
-           PG_TYPE_ABSTIME SQL_C_TIME          SQL_C_TIME          (date is truncated)
-           PG_TYPE_ABSTIME SQL_C_TIMESTAMP     SQL_C_TIMESTAMP     
+           PG_TYPE_ABSTIME SQL_C_DEFAULT       SQL_C_TIMESTAMP
+           PG_TYPE_ABSTIME SQL_C_DATE          SQL_C_DATE          (time is truncated)
+           PG_TYPE_ABSTIME SQL_C_TIME          SQL_C_TIME          (date is truncated)
+           PG_TYPE_ABSTIME SQL_C_TIMESTAMP     SQL_C_TIMESTAMP
 ******************************************************************************/
 
 
 /* This is called by SQLFetch() */
 int
-copy_and_convert_field_bindinfo(StatementClass *stmt, Int4 field_type, void *value, int col)
+copy_and_convert_field_bindinfo(StatementClass * stmt, Int4 field_type, void *value, int col)
 {
-BindInfoClass *bic = &(stmt->bindings[col]);
+   BindInfoClass *bic = &(stmt->bindings[col]);
 
-   return copy_and_convert_field(stmt, field_type, value, (Int2)bic->returntype, (PTR)bic->buffer,
-                                (SDWORD)bic->buflen, (SDWORD *)bic->used);
+   return copy_and_convert_field(stmt, field_type, value, (Int2) bic->returntype, (PTR) bic->buffer,
+                            (SDWORD) bic->buflen, (SDWORD *) bic->used);
 }
 
 /* This is called by SQLGetData() */
 int
-copy_and_convert_field(StatementClass *stmt, Int4 field_type, void *value, Int2 fCType, 
-                      PTR rgbValue, SDWORD cbValueMax, SDWORD *pcbValue)
+copy_and_convert_field(StatementClass * stmt, Int4 field_type, void *value, Int2 fCType,
+                      PTR rgbValue, SDWORD cbValueMax, SDWORD * pcbValue)
 {
-   Int4 len = 0, copy_len = 0;
+   Int4        len = 0,
+               copy_len = 0;
    SIMPLE_TIME st;
-   time_t t = time(NULL);
-   struct tm *tim;
-   int pcbValueOffset, rgbValueOffset;
-   char *rgbValueBindRow, *ptr;
-   int bind_row = stmt->bind_row;
-   int bind_size = stmt->options.bind_size;
-   int result = COPY_OK;
-   char tempBuf[TEXT_FIELD_SIZE+5];
+   time_t      t = time(NULL);
+   struct tm  *tim;
+   int         pcbValueOffset,
+               rgbValueOffset;
+   char       *rgbValueBindRow,
+              *ptr;
+   int         bind_row = stmt->bind_row;
+   int         bind_size = stmt->options.bind_size;
+   int         result = COPY_OK;
+   char        tempBuf[TEXT_FIELD_SIZE + 5];
 
 /* rgbValueOffset is *ONLY* for character and binary data */
 /* pcbValueOffset is for computing any pcbValue location */
 
-   if (bind_size > 0) {
+   if (bind_size > 0)
+   {
 
        pcbValueOffset = rgbValueOffset = (bind_size * bind_row);
    }
-   else {
+   else
+   {
 
        pcbValueOffset = bind_row * sizeof(SDWORD);
        rgbValueOffset = bind_row * cbValueMax;
@@ -193,31 +199,33 @@ copy_and_convert_field(StatementClass *stmt, Int4 field_type, void *value, Int2
 
    memset(&st, 0, sizeof(SIMPLE_TIME));
 
-   /*  Initialize current date */
+   /* Initialize current date */
    tim = localtime(&t);
    st.m = tim->tm_mon + 1;
    st.d = tim->tm_mday;
    st.y = tim->tm_year + 1900;
 
-   mylog("copy_and_convert: field_type = %d, fctype = %d, value = '%s', cbValueMax=%d\n", field_type, fCType,  (value==NULL)?"<NULL>":value, cbValueMax);
+   mylog("copy_and_convert: field_type = %d, fctype = %d, value = '%s', cbValueMax=%d\n", field_type, fCType, (value == NULL) ? "<NULL>" : value, cbValueMax);
 
-   if ( ! value) {
-        /* handle a null just by returning SQL_NULL_DATA in pcbValue, */
-        /* and doing nothing to the buffer.                           */
-        if(pcbValue) {
+   if (!value)
+   {
+       /* handle a null just by returning SQL_NULL_DATA in pcbValue, */
+       /* and doing nothing to the buffer.                           */
+       if (pcbValue)
            *(SDWORD *) ((char *) pcbValue + pcbValueOffset) = SQL_NULL_DATA;
-        }
        return COPY_OK;
    }
 
 
-   if (stmt->hdbc->DataSourceToDriver != NULL) {
-       int length = strlen (value);
-       stmt->hdbc->DataSourceToDriver (stmt->hdbc->translation_option,
-                                       SQL_CHAR,
-                                       value, length,
-                                       value, length, NULL,
-                                       NULL, 0, NULL);
+   if (stmt->hdbc->DataSourceToDriver != NULL)
+   {
+       int         length = strlen(value);
+
+       stmt->hdbc->DataSourceToDriver(stmt->hdbc->translation_option,
+                                      SQL_CHAR,
+                                      value, length,
+                                      value, length, NULL,
+                                      NULL, 0, NULL);
    }
 
 
@@ -225,108 +233,128 @@ copy_and_convert_field(StatementClass *stmt, Int4 field_type, void *value, Int2
        First convert any specific postgres types into more
        useable data.
 
-       NOTE: Conversions from PG char/varchar of a date/time/timestamp 
-       value to SQL_C_DATE,SQL_C_TIME, SQL_C_TIMESTAMP not supported 
+       NOTE: Conversions from PG char/varchar of a date/time/timestamp
+       value to SQL_C_DATE,SQL_C_TIME, SQL_C_TIMESTAMP not supported
    *********************************************************************/
-   switch(field_type) {
-   /*  $$$ need to add parsing for date/time/timestamp strings in PG_TYPE_CHAR,VARCHAR $$$ */
-   case PG_TYPE_DATE:
-       sscanf(value, "%4d-%2d-%2d", &st.y, &st.m, &st.d);
-       break;
-
-   case PG_TYPE_TIME:
-       sscanf(value, "%2d:%2d:%2d", &st.hh, &st.mm, &st.ss);
-       break;
-
-   case PG_TYPE_ABSTIME:
-   case PG_TYPE_DATETIME:
-   case PG_TYPE_TIMESTAMP:
-       if (strnicmp(value, "invalid", 7) != 0) {
-           sscanf(value, "%4d-%2d-%2d %2d:%2d:%2d", &st.y, &st.m, &st.d, &st.hh, &st.mm, &st.ss);
-
-       } else {    /* The timestamp is invalid so set something conspicuous, like the epoch */
-           t = 0;
-           tim = localtime(&t);
-           st.m = tim->tm_mon + 1;
-           st.d = tim->tm_mday;
-           st.y = tim->tm_year + 1900;
-           st.hh = tim->tm_hour;
-           st.mm = tim->tm_min;
-           st.ss = tim->tm_sec;
-       }
-       break;
-
-   case PG_TYPE_BOOL: {        /* change T/F to 1/0 */
-       char *s = (char *) value;
-       if (s[0] == 'T' || s[0] == 't') 
-           s[0] = '1';
-       else 
-           s[0] = '0';
-       }
-       break;
-
-   /* This is for internal use by SQLStatistics() */
-   case PG_TYPE_INT2VECTOR: {
-       int nval, i;
-       char *vp;
-       /* this is an array of eight integers */
-       short *short_array = (short *) ( (char *) rgbValue + rgbValueOffset);
-
-       len = 16;
-       vp = value;
-       nval = 0;
-       for (i = 0; i < 8; i++)
-       {
-           if (sscanf(vp, "%hd", &short_array[i]) != 1)
-               break;
+   switch (field_type)
+   {
 
-           nval++;
+           /*
+            * $$$ need to add parsing for date/time/timestamp strings in
+            * PG_TYPE_CHAR,VARCHAR $$$
+            */
+       case PG_TYPE_DATE:
+           sscanf(value, "%4d-%2d-%2d", &st.y, &st.m, &st.d);
+           break;
 
-           /* skip the current token */
-           while ((*vp != '\0') && (! isspace((unsigned char) *vp))) vp++;
-           /* and skip the space to the next token */
-           while ((*vp != '\0') && (isspace((unsigned char) *vp))) vp++;
-           if (*vp == '\0')
-               break;
-       }
+       case PG_TYPE_TIME:
+           sscanf(value, "%2d:%2d:%2d", &st.hh, &st.mm, &st.ss);
+           break;
 
-       for (i = nval; i < 8; i++)
-       {
-           short_array[i] = 0;
-       }
+       case PG_TYPE_ABSTIME:
+       case PG_TYPE_DATETIME:
+       case PG_TYPE_TIMESTAMP:
+           if (strnicmp(value, "invalid", 7) != 0)
+           {
+               sscanf(value, "%4d-%2d-%2d %2d:%2d:%2d", &st.y, &st.m, &st.d, &st.hh, &st.mm, &st.ss);
+
+           }
+           else
+           {                   /* The timestamp is invalid so set
+                                * something conspicuous, like the epoch */
+               t = 0;
+               tim = localtime(&t);
+               st.m = tim->tm_mon + 1;
+               st.d = tim->tm_mday;
+               st.y = tim->tm_year + 1900;
+               st.hh = tim->tm_hour;
+               st.mm = tim->tm_min;
+               st.ss = tim->tm_sec;
+           }
+           break;
+
+       case PG_TYPE_BOOL:
+           {                   /* change T/F to 1/0 */
+               char       *s = (char *) value;
+
+               if (s[0] == 'T' || s[0] == 't')
+                   s[0] = '1';
+               else
+                   s[0] = '0';
+           }
+           break;
+
+           /* This is for internal use by SQLStatistics() */
+       case PG_TYPE_INT2VECTOR:
+           {
+               int         nval,
+                           i;
+               char       *vp;
+
+               /* this is an array of eight integers */
+               short      *short_array = (short *) ((char *) rgbValue + rgbValueOffset);
+
+               len = 16;
+               vp = value;
+               nval = 0;
+               for (i = 0; i < 8; i++)
+               {
+                   if (sscanf(vp, "%hd", &short_array[i]) != 1)
+                       break;
+
+                   nval++;
+
+                   /* skip the current token */
+                   while ((*vp != '\0') && (!isspace((unsigned char) *vp)))
+                       vp++;
+                   /* and skip the space to the next token */
+                   while ((*vp != '\0') && (isspace((unsigned char) *vp)))
+                       vp++;
+                   if (*vp == '\0')
+                       break;
+               }
+
+               for (i = nval; i < 8; i++)
+                   short_array[i] = 0;
 
 #if 0
-       sscanf(value, "%hd %hd %hd %hd %hd %hd %hd %hd",
-           &short_array[0],
-           &short_array[1],
-           &short_array[2],
-           &short_array[3],
-           &short_array[4],
-           &short_array[5],
-           &short_array[6],
-           &short_array[7]);
+               sscanf(value, "%hd %hd %hd %hd %hd %hd %hd %hd",
+                      &short_array[0],
+                      &short_array[1],
+                      &short_array[2],
+                      &short_array[3],
+                      &short_array[4],
+                      &short_array[5],
+                      &short_array[6],
+                      &short_array[7]);
 #endif
 
-       /*  There is no corresponding fCType for this. */
-       if(pcbValue)
-           *(SDWORD *) ((char *) pcbValue + pcbValueOffset) = len;
+               /* There is no corresponding fCType for this. */
+               if (pcbValue)
+                   *(SDWORD *) ((char *) pcbValue + pcbValueOffset) = len;
 
-       return COPY_OK;     /* dont go any further or the data will be trashed */
-   }
+               return COPY_OK; /* dont go any further or the data will be
+                                * trashed */
+           }
 
-   /* This is a large object OID, which is used to store LONGVARBINARY objects. */
-   case PG_TYPE_LO:
+           /*
+            * This is a large object OID, which is used to store
+            * LONGVARBINARY objects.
+            */
+       case PG_TYPE_LO:
 
-       return convert_lo( stmt, value, fCType, ((char *) rgbValue + rgbValueOffset), cbValueMax, (SDWORD *) ((char *) pcbValue + pcbValueOffset));
+           return convert_lo(stmt, value, fCType, ((char *) rgbValue + rgbValueOffset), cbValueMax, (SDWORD *) ((char *) pcbValue + pcbValueOffset));
 
-   default:
+       default:
 
-       if (field_type == stmt->hdbc->lobj_type)    /* hack until permanent type available */
-           return convert_lo( stmt, value, fCType, ((char *) rgbValue + rgbValueOffset), cbValueMax, (SDWORD *) ((char *) pcbValue + pcbValueOffset));
+           if (field_type == stmt->hdbc->lobj_type)    /* hack until permanent
+                                                        * type available */
+               return convert_lo(stmt, value, fCType, ((char *) rgbValue + rgbValueOffset), cbValueMax, (SDWORD *) ((char *) pcbValue + pcbValueOffset));
    }
 
-   /*  Change default into something useable */
-   if (fCType == SQL_C_DEFAULT) {
+   /* Change default into something useable */
+   if (fCType == SQL_C_DEFAULT)
+   {
        fCType = pgtype_to_ctype(stmt, field_type);
 
        mylog("copy_and_convert, SQL_C_DEFAULT: fCType = %d\n", fCType);
@@ -335,297 +363,318 @@ copy_and_convert_field(StatementClass *stmt, Int4 field_type, void *value, Int2
 
    rgbValueBindRow = (char *) rgbValue + rgbValueOffset;
 
-    if(fCType == SQL_C_CHAR) {
+   if (fCType == SQL_C_CHAR)
+   {
 
 
-       /*  Special character formatting as required */
-       /*  These really should return error if cbValueMax is not big enough. */
-       switch(field_type) {
-       case PG_TYPE_DATE:
-           len = 10;
-           if (cbValueMax > len)
-               sprintf(rgbValueBindRow, "%.4d-%.2d-%.2d", st.y, st.m, st.d);
-           break;
+       /* Special character formatting as required */
 
-       case PG_TYPE_TIME:
-           len = 8;
-           if (cbValueMax > len)
-               sprintf(rgbValueBindRow, "%.2d:%.2d:%.2d", st.hh, st.mm, st.ss);
-           break;
-
-       case PG_TYPE_ABSTIME:
-       case PG_TYPE_DATETIME:
-       case PG_TYPE_TIMESTAMP:
-           len = 19;
-           if (cbValueMax > len)
-               sprintf(rgbValueBindRow, "%.4d-%.2d-%.2d %.2d:%.2d:%.2d", 
-                   st.y, st.m, st.d, st.hh, st.mm, st.ss);
-           break;
+       /*
+        * These really should return error if cbValueMax is not big
+        * enough.
+        */
+       switch (field_type)
+       {
+           case PG_TYPE_DATE:
+               len = 10;
+               if (cbValueMax > len)
+                   sprintf(rgbValueBindRow, "%.4d-%.2d-%.2d", st.y, st.m, st.d);
+               break;
 
-       case PG_TYPE_BOOL:
-           len = 1;
-           if (cbValueMax > len) {
-               strcpy(rgbValueBindRow, value);
-               mylog("PG_TYPE_BOOL: rgbValueBindRow = '%s'\n", rgbValueBindRow);
-           }
-           break;
+           case PG_TYPE_TIME:
+               len = 8;
+               if (cbValueMax > len)
+                   sprintf(rgbValueBindRow, "%.2d:%.2d:%.2d", st.hh, st.mm, st.ss);
+               break;
 
-       /*  Currently, data is SILENTLY TRUNCATED for BYTEA and character data
-           types if there is not enough room in cbValueMax because the driver 
-           can't handle multiple calls to SQLGetData for these, yet.  Most likely,
-           the buffer passed in will be big enough to handle the maximum limit of 
-           postgres, anyway.
+           case PG_TYPE_ABSTIME:
+           case PG_TYPE_DATETIME:
+           case PG_TYPE_TIMESTAMP:
+               len = 19;
+               if (cbValueMax > len)
+                   sprintf(rgbValueBindRow, "%.4d-%.2d-%.2d %.2d:%.2d:%.2d",
+                           st.y, st.m, st.d, st.hh, st.mm, st.ss);
+               break;
 
-           LongVarBinary types are handled correctly above, observing truncation
-           and all that stuff since there is essentially no limit on the large
-           object used to store those.
-       */
-       case PG_TYPE_BYTEA:     /* convert binary data to hex strings (i.e, 255 = "FF") */
-           len = convert_pgbinary_to_char(value, rgbValueBindRow, cbValueMax);
+           case PG_TYPE_BOOL:
+               len = 1;
+               if (cbValueMax > len)
+               {
+                   strcpy(rgbValueBindRow, value);
+                   mylog("PG_TYPE_BOOL: rgbValueBindRow = '%s'\n", rgbValueBindRow);
+               }
+               break;
 
-           /***** THIS IS NOT PROPERLY IMPLEMENTED *****/
-           break;
+               /*
+                * Currently, data is SILENTLY TRUNCATED for BYTEA and
+                * character data types if there is not enough room in
+                * cbValueMax because the driver can't handle multiple
+                * calls to SQLGetData for these, yet.  Most likely, the
+                * buffer passed in will be big enough to handle the
+                * maximum limit of postgres, anyway.
+                *
+                * LongVarBinary types are handled correctly above, observing
+                * truncation and all that stuff since there is
+                * essentially no limit on the large object used to store
+                * those.
+                */
+           case PG_TYPE_BYTEA:/* convert binary data to hex strings
+                                * (i.e, 255 = "FF") */
+               len = convert_pgbinary_to_char(value, rgbValueBindRow, cbValueMax);
+
+               /***** THIS IS NOT PROPERLY IMPLEMENTED *****/
+               break;
 
-       default:
-           /*  convert linefeeds to carriage-return/linefeed */
-           len = convert_linefeeds(value, tempBuf, sizeof(tempBuf));
-           ptr = tempBuf;
-
-           mylog("DEFAULT: len = %d, ptr = '%s'\n", len, ptr);
-
-           if (stmt->current_col >= 0) {
-               if (stmt->bindings[stmt->current_col].data_left == 0)
-                   return COPY_NO_DATA_FOUND;
-               else if (stmt->bindings[stmt->current_col].data_left > 0) {
-                   ptr += len - stmt->bindings[stmt->current_col].data_left;
-                   len = stmt->bindings[stmt->current_col].data_left;
+           default:
+               /* convert linefeeds to carriage-return/linefeed */
+               len = convert_linefeeds(value, tempBuf, sizeof(tempBuf));
+               ptr = tempBuf;
+
+               mylog("DEFAULT: len = %d, ptr = '%s'\n", len, ptr);
+
+               if (stmt->current_col >= 0)
+               {
+                   if (stmt->bindings[stmt->current_col].data_left == 0)
+                       return COPY_NO_DATA_FOUND;
+                   else if (stmt->bindings[stmt->current_col].data_left > 0)
+                   {
+                       ptr += len - stmt->bindings[stmt->current_col].data_left;
+                       len = stmt->bindings[stmt->current_col].data_left;
+                   }
+                   else
+                       stmt->bindings[stmt->current_col].data_left = strlen(ptr);
                }
-               else
-                   stmt->bindings[stmt->current_col].data_left = strlen(ptr);
-           }
 
-           if (cbValueMax > 0) {
-               
-               copy_len = (len >= cbValueMax) ? cbValueMax -1 : len;
+               if (cbValueMax > 0)
+               {
+
+                   copy_len = (len >= cbValueMax) ? cbValueMax - 1 : len;
 
-               /*  Copy the data */
-               strncpy_null(rgbValueBindRow, ptr, copy_len + 1);
+                   /* Copy the data */
+                   strncpy_null(rgbValueBindRow, ptr, copy_len + 1);
 
-               /*  Adjust data_left for next time */
-               if (stmt->current_col >= 0) {
-                   stmt->bindings[stmt->current_col].data_left -= copy_len;
+                   /* Adjust data_left for next time */
+                   if (stmt->current_col >= 0)
+                       stmt->bindings[stmt->current_col].data_left -= copy_len;
                }
-           }
 
-           /*  Finally, check for truncation so that proper status can be returned */
-           if ( len >= cbValueMax)
-               result = COPY_RESULT_TRUNCATED;
+               /*
+                * Finally, check for truncation so that proper status can
+                * be returned
+                */
+               if (len >= cbValueMax)
+                   result = COPY_RESULT_TRUNCATED;
 
 
-           mylog("    SQL_C_CHAR, default: len = %d, cbValueMax = %d, rgbValueBindRow = '%s'\n", len, cbValueMax, rgbValueBindRow);
-           break;
+               mylog("    SQL_C_CHAR, default: len = %d, cbValueMax = %d, rgbValueBindRow = '%s'\n", len, cbValueMax, rgbValueBindRow);
+               break;
        }
 
 
-    } else {
+   }
+   else
+   {
 
-       /*  for SQL_C_CHAR, it's probably ok to leave currency symbols in.  But
-           to convert to numeric types, it is necessary to get rid of those.
-       */
+       /*
+        * for SQL_C_CHAR, it's probably ok to leave currency symbols in.
+        * But to convert to numeric types, it is necessary to get rid of
+        * those.
+        */
        if (field_type == PG_TYPE_MONEY)
            convert_money(value);
 
-       switch(fCType) {
-       case SQL_C_DATE:
-           len = 6;
-           {
-           DATE_STRUCT *ds;
-           
-           if (bind_size > 0) {
-               ds = (DATE_STRUCT *) ((char *) rgbValue + (bind_row * bind_size));
-           } else {
-               ds = (DATE_STRUCT *) rgbValue + bind_row;
-           }
-           ds->year = st.y;
-           ds->month = st.m;
-           ds->day = st.d;
-           }
-           break;
+       switch (fCType)
+       {
+           case SQL_C_DATE:
+               len = 6;
+               {
+                   DATE_STRUCT *ds;
+
+                   if (bind_size > 0)
+                       ds = (DATE_STRUCT *) ((char *) rgbValue + (bind_row * bind_size));
+                   else
+                       ds = (DATE_STRUCT *) rgbValue + bind_row;
+                   ds->year = st.y;
+                   ds->month = st.m;
+                   ds->day = st.d;
+               }
+               break;
 
-       case SQL_C_TIME:
-           len = 6;
-           {
-           TIME_STRUCT *ts;
-           
-           if (bind_size > 0) {
-               ts = (TIME_STRUCT *) ((char *) rgbValue + (bind_row * bind_size));
-           } else {
-               ts = (TIME_STRUCT *) rgbValue + bind_row;
-           }
-           ts->hour = st.hh;
-           ts->minute = st.mm;
-           ts->second = st.ss;
-           }
-           break;
+           case SQL_C_TIME:
+               len = 6;
+               {
+                   TIME_STRUCT *ts;
+
+                   if (bind_size > 0)
+                       ts = (TIME_STRUCT *) ((char *) rgbValue + (bind_row * bind_size));
+                   else
+                       ts = (TIME_STRUCT *) rgbValue + bind_row;
+                   ts->hour = st.hh;
+                   ts->minute = st.mm;
+                   ts->second = st.ss;
+               }
+               break;
 
-       case SQL_C_TIMESTAMP:                   
-           len = 16;
-           {
-           TIMESTAMP_STRUCT *ts;
-           if (bind_size > 0) {
-               ts = (TIMESTAMP_STRUCT *) ((char *) rgbValue + (bind_row * bind_size));
-           } else {
-               ts = (TIMESTAMP_STRUCT *) rgbValue + bind_row;
-           }
-           ts->year = st.y;
-           ts->month = st.m;
-           ts->day = st.d;
-           ts->hour = st.hh;
-           ts->minute = st.mm;
-           ts->second = st.ss;
-           ts->fraction = 0;
-           }
-           break;
+           case SQL_C_TIMESTAMP:
+               len = 16;
+               {
+                   TIMESTAMP_STRUCT *ts;
+
+                   if (bind_size > 0)
+                       ts = (TIMESTAMP_STRUCT *) ((char *) rgbValue + (bind_row * bind_size));
+                   else
+                       ts = (TIMESTAMP_STRUCT *) rgbValue + bind_row;
+                   ts->year = st.y;
+                   ts->month = st.m;
+                   ts->day = st.d;
+                   ts->hour = st.hh;
+                   ts->minute = st.mm;
+                   ts->second = st.ss;
+                   ts->fraction = 0;
+               }
+               break;
 
-       case SQL_C_BIT:
-           len = 1;
-           if (bind_size > 0) {
-               *(UCHAR *) ((char *) rgbValue + (bind_row * bind_size)) = atoi(value);
-           } else {
-               *((UCHAR *)rgbValue + bind_row) = atoi(value);
-           }
-           /* mylog("SQL_C_BIT: val = %d, cb = %d, rgb=%d\n", atoi(value), cbValueMax, *((UCHAR *)rgbValue)); */
-           break;
+           case SQL_C_BIT:
+               len = 1;
+               if (bind_size > 0)
+                   *(UCHAR *) ((char *) rgbValue + (bind_row * bind_size)) = atoi(value);
+               else
+                   *((UCHAR *) rgbValue + bind_row) = atoi(value);
 
-       case SQL_C_STINYINT:
-       case SQL_C_TINYINT:
-           len = 1;
-           if (bind_size > 0) {
-               *(SCHAR *) ((char *) rgbValue + (bind_row * bind_size)) = atoi(value);
-           } else {
-               *((SCHAR *) rgbValue + bind_row) = atoi(value);
-           }
-           break;
+               /*
+                * mylog("SQL_C_BIT: val = %d, cb = %d, rgb=%d\n",
+                * atoi(value), cbValueMax, *((UCHAR *)rgbValue));
+                */
+               break;
 
-       case SQL_C_UTINYINT:
-           len = 1;
-           if (bind_size > 0) {
-               *(UCHAR *) ((char *) rgbValue + (bind_row * bind_size)) = atoi(value);
-           } else {
-               *((UCHAR *) rgbValue + bind_row) = atoi(value);
-           }
-           break;
+           case SQL_C_STINYINT:
+           case SQL_C_TINYINT:
+               len = 1;
+               if (bind_size > 0)
+                   *(SCHAR *) ((char *) rgbValue + (bind_row * bind_size)) = atoi(value);
+               else
+                   *((SCHAR *) rgbValue + bind_row) = atoi(value);
+               break;
 
-       case SQL_C_FLOAT:
-           len = 4;
-           if (bind_size > 0) {
-               *(SFLOAT *) ((char *) rgbValue + (bind_row * bind_size)) = (float) atof(value);
-           } else {
-               *((SFLOAT *)rgbValue + bind_row) = (float) atof(value);
-           }
-           break;
+           case SQL_C_UTINYINT:
+               len = 1;
+               if (bind_size > 0)
+                   *(UCHAR *) ((char *) rgbValue + (bind_row * bind_size)) = atoi(value);
+               else
+                   *((UCHAR *) rgbValue + bind_row) = atoi(value);
+               break;
 
-       case SQL_C_DOUBLE:
-           len = 8;
-           if (bind_size > 0) {
-               *(SDOUBLE *) ((char *) rgbValue + (bind_row * bind_size)) = atof(value);
-           } else {
-               *((SDOUBLE *)rgbValue + bind_row) = atof(value);
-           }
-           break;
+           case SQL_C_FLOAT:
+               len = 4;
+               if (bind_size > 0)
+                   *(SFLOAT *) ((char *) rgbValue + (bind_row * bind_size)) = (float) atof(value);
+               else
+                   *((SFLOAT *) rgbValue + bind_row) = (float) atof(value);
+               break;
 
-       case SQL_C_SSHORT:
-       case SQL_C_SHORT:
-           len = 2;
-           if (bind_size > 0) {
-               *(SWORD *) ((char *) rgbValue + (bind_row * bind_size)) = atoi(value);
-           } else {
-               *((SWORD *)rgbValue + bind_row) = atoi(value);
-           }
-           break;
+           case SQL_C_DOUBLE:
+               len = 8;
+               if (bind_size > 0)
+                   *(SDOUBLE *) ((char *) rgbValue + (bind_row * bind_size)) = atof(value);
+               else
+                   *((SDOUBLE *) rgbValue + bind_row) = atof(value);
+               break;
 
-       case SQL_C_USHORT:
-           len = 2;
-           if (bind_size > 0) {
-               *(UWORD *) ((char *) rgbValue + (bind_row * bind_size)) = atoi(value);
-           } else {
-               *((UWORD *)rgbValue + bind_row) = atoi(value);
-           }
-           break;
+           case SQL_C_SSHORT:
+           case SQL_C_SHORT:
+               len = 2;
+               if (bind_size > 0)
+                   *(SWORD *) ((char *) rgbValue + (bind_row * bind_size)) = atoi(value);
+               else
+                   *((SWORD *) rgbValue + bind_row) = atoi(value);
+               break;
 
-       case SQL_C_SLONG:
-       case SQL_C_LONG:
-           len = 4;
-           if (bind_size > 0) {
-               *(SDWORD *) ((char *) rgbValue + (bind_row * bind_size)) = atol(value);
-           } else {
-               *((SDWORD *)rgbValue + bind_row) = atol(value);
-           }
-           break;
+           case SQL_C_USHORT:
+               len = 2;
+               if (bind_size > 0)
+                   *(UWORD *) ((char *) rgbValue + (bind_row * bind_size)) = atoi(value);
+               else
+                   *((UWORD *) rgbValue + bind_row) = atoi(value);
+               break;
 
-       case SQL_C_ULONG:
-           len = 4;
-           if (bind_size > 0) {
-               *(UDWORD *) ((char *) rgbValue + (bind_row * bind_size)) = atol(value);
-           } else {
-               *((UDWORD *)rgbValue + bind_row) = atol(value);
-           }
-           break;
+           case SQL_C_SLONG:
+           case SQL_C_LONG:
+               len = 4;
+               if (bind_size > 0)
+                   *(SDWORD *) ((char *) rgbValue + (bind_row * bind_size)) = atol(value);
+               else
+                   *((SDWORD *) rgbValue + bind_row) = atol(value);
+               break;
 
-       case SQL_C_BINARY:  
+           case SQL_C_ULONG:
+               len = 4;
+               if (bind_size > 0)
+                   *(UDWORD *) ((char *) rgbValue + (bind_row * bind_size)) = atol(value);
+               else
+                   *((UDWORD *) rgbValue + bind_row) = atol(value);
+               break;
 
-           /*  truncate if necessary */
-           /*  convert octal escapes to bytes */
+           case SQL_C_BINARY:
 
-           len = convert_from_pgbinary(value, tempBuf, sizeof(tempBuf));
-           ptr = tempBuf;
+               /* truncate if necessary */
+               /* convert octal escapes to bytes */
 
-           if (stmt->current_col >= 0) {
+               len = convert_from_pgbinary(value, tempBuf, sizeof(tempBuf));
+               ptr = tempBuf;
 
-               /*  No more data left for this column */
-               if (stmt->bindings[stmt->current_col].data_left == 0)
-                   return COPY_NO_DATA_FOUND;
+               if (stmt->current_col >= 0)
+               {
 
-               /*  Second (or more) call to SQLGetData so move the pointer */
-               else if (stmt->bindings[stmt->current_col].data_left > 0) {
-                   ptr += len - stmt->bindings[stmt->current_col].data_left;
-                   len = stmt->bindings[stmt->current_col].data_left;
-               }
+                   /* No more data left for this column */
+                   if (stmt->bindings[stmt->current_col].data_left == 0)
+                       return COPY_NO_DATA_FOUND;
 
-               /*  First call to SQLGetData so initialize data_left */
-               else    
-                   stmt->bindings[stmt->current_col].data_left = len;
+                   /*
+                    * Second (or more) call to SQLGetData so move the
+                    * pointer
+                    */
+                   else if (stmt->bindings[stmt->current_col].data_left > 0)
+                   {
+                       ptr += len - stmt->bindings[stmt->current_col].data_left;
+                       len = stmt->bindings[stmt->current_col].data_left;
+                   }
 
-           }
+                   /* First call to SQLGetData so initialize data_left */
+                   else
+                       stmt->bindings[stmt->current_col].data_left = len;
+
+               }
 
-           if (cbValueMax > 0) {
-               copy_len = (len > cbValueMax) ? cbValueMax : len;
+               if (cbValueMax > 0)
+               {
+                   copy_len = (len > cbValueMax) ? cbValueMax : len;
 
-               /*  Copy the data */
-               memcpy(rgbValueBindRow, ptr, copy_len);
+                   /* Copy the data */
+                   memcpy(rgbValueBindRow, ptr, copy_len);
 
-               /*  Adjust data_left for next time */
-               if (stmt->current_col >= 0) {
-                   stmt->bindings[stmt->current_col].data_left -= copy_len;
+                   /* Adjust data_left for next time */
+                   if (stmt->current_col >= 0)
+                       stmt->bindings[stmt->current_col].data_left -= copy_len;
                }
-           }
 
-           /*  Finally, check for truncation so that proper status can be returned */
-           if ( len > cbValueMax)
-               result = COPY_RESULT_TRUNCATED;
+               /*
+                * Finally, check for truncation so that proper status can
+                * be returned
+                */
+               if (len > cbValueMax)
+                   result = COPY_RESULT_TRUNCATED;
 
-           mylog("SQL_C_BINARY: len = %d, copy_len = %d\n", len, copy_len);
-           break;
-           
-       default:
-           return COPY_UNSUPPORTED_TYPE;
+               mylog("SQL_C_BINARY: len = %d, copy_len = %d\n", len, copy_len);
+               break;
+
+           default:
+               return COPY_UNSUPPORTED_TYPE;
        }
    }
 
-    /* store the length of what was copied, if there's a place for it */
-    if(pcbValue) {
-        *(SDWORD *) ((char *)pcbValue + pcbValueOffset) = len;
-   }
+   /* store the length of what was copied, if there's a place for it */
+   if (pcbValue)
+       *(SDWORD *) ((char *) pcbValue + pcbValueOffset) = len;
 
    return result;
 
@@ -637,82 +686,98 @@ copy_and_convert_field(StatementClass *stmt, Int4 field_type, void *value, Int2
    This function no longer does any dynamic memory allocation!
 */
 int
-copy_statement_with_parameters(StatementClass *stmt)
+copy_statement_with_parameters(StatementClass * stmt)
 {
-static char *func="copy_statement_with_parameters";
-unsigned int opos, npos, oldstmtlen;
-char param_string[128], tmp[256], cbuf[TEXT_FIELD_SIZE+5];
-int param_number;
-Int2 param_ctype, param_sqltype;
-char *old_statement = stmt->statement;
-char *new_statement = stmt->stmt_with_params;
-SIMPLE_TIME st;
-time_t t = time(NULL);
-struct tm *tim;
-SDWORD used;
-char *buffer, *buf;
-char in_quote = FALSE;
-Oid  lobj_oid;
-int lobj_fd, retval;
-
-
-   if ( ! old_statement) {
+   static char *func = "copy_statement_with_parameters";
+   unsigned int opos,
+               npos,
+               oldstmtlen;
+   char        param_string[128],
+               tmp[256],
+               cbuf[TEXT_FIELD_SIZE + 5];
+   int         param_number;
+   Int2        param_ctype,
+               param_sqltype;
+   char       *old_statement = stmt->statement;
+   char       *new_statement = stmt->stmt_with_params;
+   SIMPLE_TIME st;
+   time_t      t = time(NULL);
+   struct tm  *tim;
+   SDWORD      used;
+   char       *buffer,
+              *buf;
+   char        in_quote = FALSE;
+   Oid         lobj_oid;
+   int         lobj_fd,
+               retval;
+
+
+   if (!old_statement)
+   {
        SC_log_error(func, "No statement string", stmt);
        return SQL_ERROR;
    }
 
    memset(&st, 0, sizeof(SIMPLE_TIME));
 
-   /*  Initialize current date */
+   /* Initialize current date */
    tim = localtime(&t);
    st.m = tim->tm_mon + 1;
    st.d = tim->tm_mday;
    st.y = tim->tm_year + 1900;
 
-   /*  If the application hasn't set a cursor name, then generate one */
-   if ( stmt->cursor_name[0] == '\0')
+   /* If the application hasn't set a cursor name, then generate one */
+   if (stmt->cursor_name[0] == '\0')
        sprintf(stmt->cursor_name, "SQL_CUR%p", stmt);
 
-   /*  For selects, prepend a declare cursor to the statement */
-   if (stmt->statement_type == STMT_TYPE_SELECT && globals.use_declarefetch) {
+   /* For selects, prepend a declare cursor to the statement */
+   if (stmt->statement_type == STMT_TYPE_SELECT && globals.use_declarefetch)
+   {
        sprintf(new_statement, "declare %s cursor for ", stmt->cursor_name);
        npos = strlen(new_statement);
    }
-   else {
+   else
+   {
        new_statement[0] = '0';
        npos = 0;
    }
 
-    param_number = -1;
+   param_number = -1;
 
    oldstmtlen = strlen(old_statement);
 
-    for (opos = 0; opos < oldstmtlen; opos++) {
+   for (opos = 0; opos < oldstmtlen; opos++)
+   {
 
-       /*  Squeeze carriage-return/linefeed pairs to linefeed only */
-       if (old_statement[opos] == '\r' && opos+1 < oldstmtlen &&
-           old_statement[opos+1] == '\n') {
+       /* Squeeze carriage-return/linefeed pairs to linefeed only */
+       if (old_statement[opos] == '\r' && opos + 1 < oldstmtlen &&
+           old_statement[opos + 1] == '\n')
            continue;
-       }
 
-       /*  Handle literals (date, time, timestamp) and ODBC scalar functions */
-       else if (old_statement[opos] == '{') {
-           char *esc;
-           char *begin = &old_statement[opos + 1];
-           char *end = strchr(begin, '}');
+       /*
+        * Handle literals (date, time, timestamp) and ODBC scalar
+        * functions
+        */
+       else if (old_statement[opos] == '{')
+       {
+           char       *esc;
+           char       *begin = &old_statement[opos + 1];
+           char       *end = strchr(begin, '}');
 
-           if ( ! end)
+           if (!end)
                continue;
 
            *end = '\0';
 
            esc = convert_escape(begin);
-           if (esc) {
+           if (esc)
+           {
                memcpy(&new_statement[npos], esc, strlen(esc));
                npos += strlen(esc);
            }
-           else {      /* it's not a valid literal so just copy */
-               *end = '}'; 
+           else
+           {                   /* it's not a valid literal so just copy */
+               *end = '}';
                new_statement[npos++] = old_statement[opos];
                continue;
            }
@@ -724,12 +789,15 @@ int lobj_fd, retval;
            continue;
        }
 
-       /*  Can you have parameter markers inside of quotes?  I dont think so.
-           All the queries I've seen expect the driver to put quotes if needed.
-       */
+       /*
+        * Can you have parameter markers inside of quotes?  I dont think
+        * so. All the queries I've seen expect the driver to put quotes
+        * if needed.
+        */
        else if (old_statement[opos] == '?' && !in_quote)
-           ;   /* ok */
-       else {
+           ;                   /* ok */
+       else
+       {
            if (old_statement[opos] == '\'')
                in_quote = (in_quote ? FALSE : TRUE);
 
@@ -740,363 +808,404 @@ int lobj_fd, retval;
 
 
        /****************************************************/
-       /*       Its a '?' parameter alright                */
+       /* Its a '?' parameter alright                */
        /****************************************************/
 
        param_number++;
 
-       if (param_number >= stmt->parameters_allocated)
+       if (param_number >= stmt->parameters_allocated)
            break;
 
-       /*  Assign correct buffers based on data at exec param or not */
-       if ( stmt->parameters[param_number].data_at_exec) {
+       /* Assign correct buffers based on data at exec param or not */
+       if (stmt->parameters[param_number].data_at_exec)
+       {
            used = stmt->parameters[param_number].EXEC_used ? *stmt->parameters[param_number].EXEC_used : SQL_NTS;
            buffer = stmt->parameters[param_number].EXEC_buffer;
        }
-       else {
+       else
+       {
            used = stmt->parameters[param_number].used ? *stmt->parameters[param_number].used : SQL_NTS;
            buffer = stmt->parameters[param_number].buffer;
        }
 
-       /*  Handle NULL parameter data */
-       if (used == SQL_NULL_DATA) {
+       /* Handle NULL parameter data */
+       if (used == SQL_NULL_DATA)
+       {
            strcpy(&new_statement[npos], "NULL");
            npos += 4;
            continue;
        }
 
-       /*  If no buffer, and it's not null, then what the hell is it? 
-           Just leave it alone then.
-       */
-       if ( ! buffer) {
+       /*
+        * If no buffer, and it's not null, then what the hell is it? Just
+        * leave it alone then.
+        */
+       if (!buffer)
+       {
            new_statement[npos++] = '?';
            continue;
        }
 
        param_ctype = stmt->parameters[param_number].CType;
        param_sqltype = stmt->parameters[param_number].SQLType;
-       
+
        mylog("copy_statement_with_params: from(fcType)=%d, to(fSqlType)=%d\n", param_ctype, param_sqltype);
-       
+
        /* replace DEFAULT with something we can use */
-       if(param_ctype == SQL_C_DEFAULT)
+       if (param_ctype == SQL_C_DEFAULT)
            param_ctype = sqltype_to_default_ctype(param_sqltype);
 
        buf = NULL;
        param_string[0] = '\0';
        cbuf[0] = '\0';
 
-       
-       /*  Convert input C type to a neutral format */
-       switch(param_ctype) {
-       case SQL_C_BINARY:
-       case SQL_C_CHAR:
-           buf = buffer;
-           break;
 
-       case SQL_C_DOUBLE:
-           sprintf(param_string, "%f", 
-                *((SDOUBLE *) buffer));
-           break;
+       /* Convert input C type to a neutral format */
+       switch (param_ctype)
+       {
+           case SQL_C_BINARY:
+           case SQL_C_CHAR:
+               buf = buffer;
+               break;
 
-       case SQL_C_FLOAT:
-           sprintf(param_string, "%f", 
-                *((SFLOAT *) buffer));
-           break;
+           case SQL_C_DOUBLE:
+               sprintf(param_string, "%f",
+                       *((SDOUBLE *) buffer));
+               break;
 
-       case SQL_C_SLONG:
-       case SQL_C_LONG:
-           sprintf(param_string, "%ld",
-               *((SDWORD *) buffer));
-           break;
+           case SQL_C_FLOAT:
+               sprintf(param_string, "%f",
+                       *((SFLOAT *) buffer));
+               break;
 
-       case SQL_C_SSHORT:
-       case SQL_C_SHORT:
-           sprintf(param_string, "%d",
-               *((SWORD *) buffer));
-           break;
+           case SQL_C_SLONG:
+           case SQL_C_LONG:
+               sprintf(param_string, "%ld",
+                       *((SDWORD *) buffer));
+               break;
 
-       case SQL_C_STINYINT:
-       case SQL_C_TINYINT:
-           sprintf(param_string, "%d",
-               *((SCHAR *) buffer));
-           break;
+           case SQL_C_SSHORT:
+           case SQL_C_SHORT:
+               sprintf(param_string, "%d",
+                       *((SWORD *) buffer));
+               break;
 
-       case SQL_C_ULONG:
-           sprintf(param_string, "%lu",
-               *((UDWORD *) buffer));
-           break;
+           case SQL_C_STINYINT:
+           case SQL_C_TINYINT:
+               sprintf(param_string, "%d",
+                       *((SCHAR *) buffer));
+               break;
 
-       case SQL_C_USHORT:
-           sprintf(param_string, "%u",
-               *((UWORD *) buffer));
-           break;
+           case SQL_C_ULONG:
+               sprintf(param_string, "%lu",
+                       *((UDWORD *) buffer));
+               break;
 
-       case SQL_C_UTINYINT:
-           sprintf(param_string, "%u",
-               *((UCHAR *) buffer));
-           break;
+           case SQL_C_USHORT:
+               sprintf(param_string, "%u",
+                       *((UWORD *) buffer));
+               break;
 
-       case SQL_C_BIT: {
-           int i = *((UCHAR *) buffer);
-           
-           sprintf(param_string, "%d", i ? 1 : 0);
-           break;
-                       }
+           case SQL_C_UTINYINT:
+               sprintf(param_string, "%u",
+                       *((UCHAR *) buffer));
+               break;
 
-       case SQL_C_DATE: {
-           DATE_STRUCT *ds = (DATE_STRUCT *) buffer;
-           st.m = ds->month;
-           st.d = ds->day;
-           st.y = ds->year;
+           case SQL_C_BIT:
+               {
+                   int         i = *((UCHAR *) buffer);
 
-           break;
-                        }
+                   sprintf(param_string, "%d", i ? 1 : 0);
+                   break;
+               }
 
-       case SQL_C_TIME: {
-           TIME_STRUCT *ts = (TIME_STRUCT *) buffer;
-           st.hh = ts->hour;
-           st.mm = ts->minute;
-           st.ss = ts->second;
+           case SQL_C_DATE:
+               {
+                   DATE_STRUCT *ds = (DATE_STRUCT *) buffer;
 
-           break;
-                        }
+                   st.m = ds->month;
+                   st.d = ds->day;
+                   st.y = ds->year;
 
-       case SQL_C_TIMESTAMP: {
-           TIMESTAMP_STRUCT *tss = (TIMESTAMP_STRUCT *) buffer;
-           st.m = tss->month;
-           st.d = tss->day;
-           st.y = tss->year;
-           st.hh = tss->hour;
-           st.mm = tss->minute;
-           st.ss = tss->second;
+                   break;
+               }
 
-           mylog("m=%d,d=%d,y=%d,hh=%d,mm=%d,ss=%d\n", st.m, st.d, st.y, st.hh, st.mm, st.ss);
+           case SQL_C_TIME:
+               {
+                   TIME_STRUCT *ts = (TIME_STRUCT *) buffer;
 
-           break;
+                   st.hh = ts->hour;
+                   st.mm = ts->minute;
+                   st.ss = ts->second;
 
-                             }
-       default:
-           /* error */
-           stmt->errormsg = "Unrecognized C_parameter type in copy_statement_with_parameters";
-           stmt->errornumber = STMT_NOT_IMPLEMENTED_ERROR;
-           new_statement[npos] = '\0';   /* just in case */
-           SC_log_error(func, "", stmt);
-           return SQL_ERROR;
-       }
+                   break;
+               }
 
-       /*  Now that the input data is in a neutral format, convert it to
-           the desired output format (sqltype)
-       */
+           case SQL_C_TIMESTAMP:
+               {
+                   TIMESTAMP_STRUCT *tss = (TIMESTAMP_STRUCT *) buffer;
 
-       switch(param_sqltype) {
-       case SQL_CHAR:
-       case SQL_VARCHAR:
-       case SQL_LONGVARCHAR:
+                   st.m = tss->month;
+                   st.d = tss->day;
+                   st.y = tss->year;
+                   st.hh = tss->hour;
+                   st.mm = tss->minute;
+                   st.ss = tss->second;
 
-           new_statement[npos++] = '\'';   /*    Open Quote */
+                   mylog("m=%d,d=%d,y=%d,hh=%d,mm=%d,ss=%d\n", st.m, st.d, st.y, st.hh, st.mm, st.ss);
 
-           /* it was a SQL_C_CHAR */
-           if (buf) {
-               convert_special_chars(buf, &new_statement[npos], used);
-               npos += strlen(&new_statement[npos]);
-           }
+                   break;
 
-           /* it was a numeric type */
-           else if (param_string[0] != '\0') { 
-               strcpy(&new_statement[npos], param_string);
-               npos += strlen(param_string);
-           }
+               }
+           default:
+               /* error */
+               stmt->errormsg = "Unrecognized C_parameter type in copy_statement_with_parameters";
+               stmt->errornumber = STMT_NOT_IMPLEMENTED_ERROR;
+               new_statement[npos] = '\0';     /* just in case */
+               SC_log_error(func, "", stmt);
+               return SQL_ERROR;
+       }
 
-           /* it was date,time,timestamp -- use m,d,y,hh,mm,ss */
-           else {
-               sprintf(tmp, "%.4d-%.2d-%.2d %.2d:%.2d:%.2d",
-                   st.y, st.m, st.d, st.hh, st.mm, st.ss);
+       /*
+        * Now that the input data is in a neutral format, convert it to
+        * the desired output format (sqltype)
+        */
 
-               strcpy(&new_statement[npos], tmp);
-               npos += strlen(tmp);
-           }
+       switch (param_sqltype)
+       {
+           case SQL_CHAR:
+           case SQL_VARCHAR:
+           case SQL_LONGVARCHAR:
 
-           new_statement[npos++] = '\'';   /*    Close Quote */
+               new_statement[npos++] = '\'';   /* Open Quote */
 
-           break;
+               /* it was a SQL_C_CHAR */
+               if (buf)
+               {
+                   convert_special_chars(buf, &new_statement[npos], used);
+                   npos += strlen(&new_statement[npos]);
+               }
 
-       case SQL_DATE:
-           if (buf) {  /* copy char data to time */
-               my_strcpy(cbuf, sizeof(cbuf), buf, used);
-               parse_datetime(cbuf, &st);
-           }
+               /* it was a numeric type */
+               else if (param_string[0] != '\0')
+               {
+                   strcpy(&new_statement[npos], param_string);
+                   npos += strlen(param_string);
+               }
 
-           sprintf(tmp, "'%.4d-%.2d-%.2d'", st.y, st.m, st.d);
+               /* it was date,time,timestamp -- use m,d,y,hh,mm,ss */
+               else
+               {
+                   sprintf(tmp, "%.4d-%.2d-%.2d %.2d:%.2d:%.2d",
+                           st.y, st.m, st.d, st.hh, st.mm, st.ss);
 
-           strcpy(&new_statement[npos], tmp);
-           npos += strlen(tmp);
-           break;
+                   strcpy(&new_statement[npos], tmp);
+                   npos += strlen(tmp);
+               }
 
-       case SQL_TIME:
-           if (buf) {  /* copy char data to time */
-               my_strcpy(cbuf, sizeof(cbuf), buf, used);
-               parse_datetime(cbuf, &st);
-           }
+               new_statement[npos++] = '\'';   /* Close Quote */
 
-           sprintf(tmp, "'%.2d:%.2d:%.2d'", st.hh, st.mm, st.ss);
+               break;
 
-           strcpy(&new_statement[npos], tmp);
-           npos += strlen(tmp);
-           break;
+           case SQL_DATE:
+               if (buf)
+               {               /* copy char data to time */
+                   my_strcpy(cbuf, sizeof(cbuf), buf, used);
+                   parse_datetime(cbuf, &st);
+               }
 
-       case SQL_TIMESTAMP:
+               sprintf(tmp, "'%.4d-%.2d-%.2d'", st.y, st.m, st.d);
 
-           if (buf) {
-               my_strcpy(cbuf, sizeof(cbuf), buf, used);
-               parse_datetime(cbuf, &st);
-           }
+               strcpy(&new_statement[npos], tmp);
+               npos += strlen(tmp);
+               break;
 
-           sprintf(tmp, "'%.4d-%.2d-%.2d %.2d:%.2d:%.2d'",
-               st.y, st.m, st.d, st.hh, st.mm, st.ss);
+           case SQL_TIME:
+               if (buf)
+               {               /* copy char data to time */
+                   my_strcpy(cbuf, sizeof(cbuf), buf, used);
+                   parse_datetime(cbuf, &st);
+               }
 
-           strcpy(&new_statement[npos], tmp);
-           npos += strlen(tmp);
+               sprintf(tmp, "'%.2d:%.2d:%.2d'", st.hh, st.mm, st.ss);
 
-           break;
+               strcpy(&new_statement[npos], tmp);
+               npos += strlen(tmp);
+               break;
 
-       case SQL_BINARY:
-       case SQL_VARBINARY:         /* non-ascii characters should be converted to octal */
-           new_statement[npos++] = '\'';   /*    Open Quote */
+           case SQL_TIMESTAMP:
 
-           mylog("SQL_VARBINARY: about to call convert_to_pgbinary, used = %d\n", used);
+               if (buf)
+               {
+                   my_strcpy(cbuf, sizeof(cbuf), buf, used);
+                   parse_datetime(cbuf, &st);
+               }
 
-           npos += convert_to_pgbinary(buf, &new_statement[npos], used);
+               sprintf(tmp, "'%.4d-%.2d-%.2d %.2d:%.2d:%.2d'",
+                       st.y, st.m, st.d, st.hh, st.mm, st.ss);
 
-           new_statement[npos++] = '\'';   /*    Close Quote */
-           
-           break;
+               strcpy(&new_statement[npos], tmp);
+               npos += strlen(tmp);
 
-       case SQL_LONGVARBINARY:     
+               break;
 
-           if ( stmt->parameters[param_number].data_at_exec) {
+           case SQL_BINARY:
+           case SQL_VARBINARY:/* non-ascii characters should be
+                                * converted to octal */
+               new_statement[npos++] = '\'';   /* Open Quote */
 
-               lobj_oid = stmt->parameters[param_number].lobj_oid;
+               mylog("SQL_VARBINARY: about to call convert_to_pgbinary, used = %d\n", used);
 
-           }
-           else {
-  
-               /* begin transaction if needed */
-               if(!CC_is_in_trans(stmt->hdbc)) {
-                   QResultClass *res;
-                   char ok;
-
-                   res = CC_send_query(stmt->hdbc, "BEGIN", NULL);
-                   if (!res) {
-                       stmt->errormsg = "Could not begin (in-line) a transaction";
-                       stmt->errornumber = STMT_EXEC_ERROR;
-                       SC_log_error(func, "", stmt);
-                       return SQL_ERROR;
-                   }
-                   ok = QR_command_successful(res);
-                   QR_Destructor(res);
-                   if (!ok) {
-                       stmt->errormsg = "Could not begin (in-line) a transaction";
-                       stmt->errornumber = STMT_EXEC_ERROR;
-                       SC_log_error(func, "", stmt);
-                       return SQL_ERROR;
-                   }
+               npos += convert_to_pgbinary(buf, &new_statement[npos], used);
 
-                   CC_set_in_trans(stmt->hdbc);
-               }
+               new_statement[npos++] = '\'';   /* Close Quote */
 
-               /*  store the oid */
-               lobj_oid = lo_creat(stmt->hdbc, INV_READ | INV_WRITE);
-               if (lobj_oid == 0) {
-                   stmt->errornumber = STMT_EXEC_ERROR;
-                   stmt->errormsg = "Couldnt create (in-line) large object.";
-                   SC_log_error(func, "", stmt);
-                   return SQL_ERROR;
-               }
+               break;
 
-               /*  store the fd */
-               lobj_fd = lo_open(stmt->hdbc, lobj_oid, INV_WRITE);
-               if ( lobj_fd < 0) {
-                   stmt->errornumber = STMT_EXEC_ERROR;
-                   stmt->errormsg = "Couldnt open (in-line) large object for writing.";
-                   SC_log_error(func, "", stmt);
-                   return SQL_ERROR;
-               }
+           case SQL_LONGVARBINARY:
 
-               retval = lo_write(stmt->hdbc, lobj_fd, buffer, used);
+               if (stmt->parameters[param_number].data_at_exec)
+               {
 
-               lo_close(stmt->hdbc, lobj_fd);
+                   lobj_oid = stmt->parameters[param_number].lobj_oid;
 
-               /* commit transaction if needed */
-               if (!globals.use_declarefetch && CC_is_in_autocommit(stmt->hdbc)) {
-                   QResultClass *res;
-                   char ok;
+               }
+               else
+               {
+
+                   /* begin transaction if needed */
+                   if (!CC_is_in_trans(stmt->hdbc))
+                   {
+                       QResultClass *res;
+                       char        ok;
+
+                       res = CC_send_query(stmt->hdbc, "BEGIN", NULL);
+                       if (!res)
+                       {
+                           stmt->errormsg = "Could not begin (in-line) a transaction";
+                           stmt->errornumber = STMT_EXEC_ERROR;
+                           SC_log_error(func, "", stmt);
+                           return SQL_ERROR;
+                       }
+                       ok = QR_command_successful(res);
+                       QR_Destructor(res);
+                       if (!ok)
+                       {
+                           stmt->errormsg = "Could not begin (in-line) a transaction";
+                           stmt->errornumber = STMT_EXEC_ERROR;
+                           SC_log_error(func, "", stmt);
+                           return SQL_ERROR;
+                       }
+
+                       CC_set_in_trans(stmt->hdbc);
+                   }
 
-                   res = CC_send_query(stmt->hdbc, "COMMIT", NULL);
-                   if (!res) {
-                       stmt->errormsg = "Could not commit (in-line) a transaction";
+                   /* store the oid */
+                   lobj_oid = lo_creat(stmt->hdbc, INV_READ | INV_WRITE);
+                   if (lobj_oid == 0)
+                   {
                        stmt->errornumber = STMT_EXEC_ERROR;
+                       stmt->errormsg = "Couldnt create (in-line) large object.";
                        SC_log_error(func, "", stmt);
                        return SQL_ERROR;
                    }
-                   ok = QR_command_successful(res);
-                   QR_Destructor(res);
-                   if (!ok) {
-                       stmt->errormsg = "Could not commit (in-line) a transaction";
+
+                   /* store the fd */
+                   lobj_fd = lo_open(stmt->hdbc, lobj_oid, INV_WRITE);
+                   if (lobj_fd < 0)
+                   {
                        stmt->errornumber = STMT_EXEC_ERROR;
+                       stmt->errormsg = "Couldnt open (in-line) large object for writing.";
                        SC_log_error(func, "", stmt);
                        return SQL_ERROR;
                    }
 
-                   CC_set_no_trans(stmt->hdbc);
-               }
-           }
+                   retval = lo_write(stmt->hdbc, lobj_fd, buffer, used);
 
-           /*  the oid of the large object -- just put that in for the
-               parameter marker -- the data has already been sent to the large object
-           */
-           sprintf(param_string, "'%d'", lobj_oid);
-           strcpy(&new_statement[npos], param_string);
-           npos += strlen(param_string);
+                   lo_close(stmt->hdbc, lobj_fd);
 
-           break;
+                   /* commit transaction if needed */
+                   if (!globals.use_declarefetch && CC_is_in_autocommit(stmt->hdbc))
+                   {
+                       QResultClass *res;
+                       char        ok;
 
-           /*  because of no conversion operator for bool and int4, SQL_BIT */
-           /*  must be quoted (0 or 1 is ok to use inside the quotes) */
+                       res = CC_send_query(stmt->hdbc, "COMMIT", NULL);
+                       if (!res)
+                       {
+                           stmt->errormsg = "Could not commit (in-line) a transaction";
+                           stmt->errornumber = STMT_EXEC_ERROR;
+                           SC_log_error(func, "", stmt);
+                           return SQL_ERROR;
+                       }
+                       ok = QR_command_successful(res);
+                       QR_Destructor(res);
+                       if (!ok)
+                       {
+                           stmt->errormsg = "Could not commit (in-line) a transaction";
+                           stmt->errornumber = STMT_EXEC_ERROR;
+                           SC_log_error(func, "", stmt);
+                           return SQL_ERROR;
+                       }
 
-       default:        /* a numeric type or SQL_BIT */
-           if (param_sqltype == SQL_BIT)
-               new_statement[npos++] = '\'';   /*    Open Quote */
+                       CC_set_no_trans(stmt->hdbc);
+                   }
+               }
 
-           if (buf) {
-               my_strcpy(&new_statement[npos], sizeof(stmt->stmt_with_params) - npos, buf, used);
-               npos += strlen(&new_statement[npos]);
-           }
-           else {
+               /*
+                * the oid of the large object -- just put that in for the
+                * parameter marker -- the data has already been sent to
+                * the large object
+                */
+               sprintf(param_string, "'%d'", lobj_oid);
                strcpy(&new_statement[npos], param_string);
                npos += strlen(param_string);
-           }
 
-           if (param_sqltype == SQL_BIT)
-               new_statement[npos++] = '\'';   /*    Close Quote */
+               break;
 
-           break;
+               /*
+                * because of no conversion operator for bool and int4,
+                * SQL_BIT
+                */
+               /* must be quoted (0 or 1 is ok to use inside the quotes) */
+
+           default:            /* a numeric type or SQL_BIT */
+               if (param_sqltype == SQL_BIT)
+                   new_statement[npos++] = '\'';       /* Open Quote */
+
+               if (buf)
+               {
+                   my_strcpy(&new_statement[npos], sizeof(stmt->stmt_with_params) - npos, buf, used);
+                   npos += strlen(&new_statement[npos]);
+               }
+               else
+               {
+                   strcpy(&new_statement[npos], param_string);
+                   npos += strlen(param_string);
+               }
+
+               if (param_sqltype == SQL_BIT)
+                   new_statement[npos++] = '\'';       /* Close Quote */
+
+               break;
 
        }
 
-   }   /* end, for */
+   }                           /* end, for */
 
    /* make sure new_statement is always null-terminated */
    new_statement[npos] = '\0';
 
 
-   if(stmt->hdbc->DriverToDataSource != NULL) {
-       int length = strlen (new_statement);
-       stmt->hdbc->DriverToDataSource (stmt->hdbc->translation_option,
-                                       SQL_CHAR,
-                                       new_statement, length,
-                                       new_statement, length, NULL,
-                                       NULL, 0, NULL);
+   if (stmt->hdbc->DriverToDataSource != NULL)
+   {
+       int         length = strlen(new_statement);
+
+       stmt->hdbc->DriverToDataSource(stmt->hdbc->translation_option,
+                                      SQL_CHAR,
+                                      new_statement, length,
+                                      new_statement, length, NULL,
+                                      NULL, 0, NULL);
    }
 
 
@@ -1106,10 +1215,10 @@ int lobj_fd, retval;
 char *
 mapFunction(char *func)
 {
-int i;
+   int         i;
 
    for (i = 0; mapFuncs[i][0]; i++)
-       if ( ! stricmp(mapFuncs[i][0], func))
+       if (!stricmp(mapFuncs[i][0], func))
            return mapFuncs[i][1];
 
    return NULL;
@@ -1121,34 +1230,40 @@ int i;
 char *
 convert_escape(char *value)
 {
-static char escape[1024];
-char key[33];
+   static char escape[1024];
+   char        key[33];
 
    /* Separate off the key, skipping leading and trailing whitespace */
-   while ((*value != '\0') && isspace((unsigned char) *value)) value++;
+   while ((*value != '\0') && isspace((unsigned char) *value))
+       value++;
    sscanf(value, "%32s", key);
-   while ((*value != '\0') && (! isspace((unsigned char) *value))) value++;
-   while ((*value != '\0') && isspace((unsigned char) *value)) value++;
+   while ((*value != '\0') && (!isspace((unsigned char) *value)))
+       value++;
+   while ((*value != '\0') && isspace((unsigned char) *value))
+       value++;
 
    mylog("convert_escape: key='%s', val='%s'\n", key, value);
 
-   if ( (strcmp(key, "d") == 0) ||
-        (strcmp(key, "t") == 0) ||
-        (strcmp(key, "ts") == 0)) {
+   if ((strcmp(key, "d") == 0) ||
+       (strcmp(key, "t") == 0) ||
+       (strcmp(key, "ts") == 0))
+   {
        /* Literal; return the escape part as-is */
-       strncpy(escape, value, sizeof(escape)-1);
+       strncpy(escape, value, sizeof(escape) - 1);
    }
-   else if (strcmp(key, "fn") == 0) {
-       /* Function invocation
-        * Separate off the func name,
-        * skipping trailing whitespace.
+   else if (strcmp(key, "fn") == 0)
+   {
+
+       /*
+        * Function invocation Separate off the func name, skipping
+        * trailing whitespace.
         */
-       char *funcEnd = value;
-       char svchar;
-       char *mapFunc;
+       char       *funcEnd = value;
+       char        svchar;
+       char       *mapFunc;
 
        while ((*funcEnd != '\0') && (*funcEnd != '(') &&
-              (! isspace((unsigned char) *funcEnd)))
+              (!isspace((unsigned char) *funcEnd)))
            funcEnd++;
        svchar = *funcEnd;
        *funcEnd = '\0';
@@ -1157,28 +1272,33 @@ char key[33];
        while ((*funcEnd != '\0') && isspace((unsigned char) *funcEnd))
            funcEnd++;
 
-       /* We expect left parenthesis here,
-        * else return fn body as-is since it is
-        * one of those "function constants".
+       /*
+        * We expect left parenthesis here, else return fn body as-is
+        * since it is one of those "function constants".
         */
-       if (*funcEnd != '(') {
-           strncpy(escape, value, sizeof(escape)-1);
+       if (*funcEnd != '(')
+       {
+           strncpy(escape, value, sizeof(escape) - 1);
            return escape;
        }
        mapFunc = mapFunction(key);
-       /* We could have mapFunction() return key if not in table...
-        * - thomas 2000-04-03
+
+       /*
+        * We could have mapFunction() return key if not in table... -
+        * thomas 2000-04-03
         */
-       if (mapFunc == NULL) {
+       if (mapFunc == NULL)
+       {
            /* If unrecognized function name, return fn body as-is */
-           strncpy(escape, value, sizeof(escape)-1);
+           strncpy(escape, value, sizeof(escape) - 1);
            return escape;
        }
        /* copy mapped name and remaining input string */
        strcpy(escape, mapFunc);
-       strncat(escape, funcEnd, sizeof(escape)-1-strlen(mapFunc));
+       strncat(escape, funcEnd, sizeof(escape) - 1 - strlen(mapFunc));
    }
-   else {
+   else
+   {
        /* Bogus key, leave untranslated */
        return NULL;
    }
@@ -1191,11 +1311,13 @@ char key[33];
 char *
 convert_money(char *s)
 {
-size_t i = 0, out = 0;
+   size_t      i = 0,
+               out = 0;
 
-   for (i = 0; i < strlen(s); i++) {
+   for (i = 0; i < strlen(s); i++)
+   {
        if (s[i] == '$' || s[i] == ',' || s[i] == ')')
-           ; /* skip these characters */
+           ;                   /* skip these characters */
        else if (s[i] == '(')
            s[out++] = '-';
        else
@@ -1210,19 +1332,25 @@ size_t i = 0, out = 0;
 /* This function parses a character string for date/time info and fills in SIMPLE_TIME */
 /* It does not zero out SIMPLE_TIME in case it is desired to initialize it with a value */
 char
-parse_datetime(char *buf, SIMPLE_TIME *st)
+parse_datetime(char *buf, SIMPLE_TIME * st)
 {
-int y,m,d,hh,mm,ss;
-int nf;
-   
+   int         y,
+               m,
+               d,
+               hh,
+               mm,
+               ss;
+   int         nf;
+
    y = m = d = hh = mm = ss = 0;
 
-   if (buf[4] == '-')  /* year first */
-       nf = sscanf(buf, "%4d-%2d-%2d %2d:%2d:%2d", &y,&m,&d,&hh,&mm,&ss);
+   if (buf[4] == '-')          /* year first */
+       nf = sscanf(buf, "%4d-%2d-%2d %2d:%2d:%2d", &y, &m, &d, &hh, &mm, &ss);
    else
-       nf = sscanf(buf, "%2d-%2d-%4d %2d:%2d:%2d", &m,&d,&y,&hh,&mm,&ss);
+       nf = sscanf(buf, "%2d-%2d-%4d %2d:%2d:%2d", &m, &d, &y, &hh, &mm, &ss);
 
-   if (nf == 5 || nf == 6) {
+   if (nf == 5 || nf == 6)
+   {
        st->y = y;
        st->m = m;
        st->d = d;
@@ -1233,12 +1361,13 @@ int nf;
        return TRUE;
    }
 
-   if (buf[4] == '-')  /* year first */
+   if (buf[4] == '-')          /* year first */
        nf = sscanf(buf, "%4d-%2d-%2d", &y, &m, &d);
    else
        nf = sscanf(buf, "%2d-%2d-%4d", &m, &d, &y);
 
-   if (nf == 3) {
+   if (nf == 3)
+   {
        st->y = y;
        st->m = m;
        st->d = d;
@@ -1247,7 +1376,8 @@ int nf;
    }
 
    nf = sscanf(buf, "%2d:%2d:%2d", &hh, &mm, &ss);
-   if (nf == 2 || nf == 3) {
+   if (nf == 2 || nf == 3)
+   {
        st->hh = hh;
        st->mm = mm;
        st->ss = ss;
@@ -1262,12 +1392,16 @@ int nf;
 int
 convert_linefeeds(char *si, char *dst, size_t max)
 {
-size_t i = 0, out = 0;
+   size_t      i = 0,
+               out = 0;
 
-   for (i = 0; i < strlen(si) && out < max - 1; i++) {
-       if (si[i] == '\n') {
-           /*  Only add the carriage-return if needed */
-           if (i > 0 && si[i-1] == '\r') {
+   for (i = 0; i < strlen(si) && out < max - 1; i++)
+   {
+       if (si[i] == '\n')
+       {
+           /* Only add the carriage-return if needed */
+           if (i > 0 && si[i - 1] == '\r')
+           {
                dst[out++] = si[i];
                continue;
            }
@@ -1282,15 +1416,17 @@ size_t i = 0, out = 0;
    return out;
 }
 
-/* Change carriage-return/linefeed to just linefeed 
+/* Change carriage-return/linefeed to just linefeed
    Plus, escape any special characters.
 */
 char *
 convert_special_chars(char *si, char *dst, int used)
 {
-size_t i = 0, out = 0, max;
-static char sout[TEXT_FIELD_SIZE+5];
-char *p;
+   size_t      i = 0,
+               out = 0,
+               max;
+   static char sout[TEXT_FIELD_SIZE + 5];
+   char       *p;
 
    if (dst)
        p = dst;
@@ -1304,8 +1440,9 @@ char *p;
    else
        max = used;
 
-   for (i = 0; i < max; i++) {
-       if (si[i] == '\r' && i+1 < strlen(si) && si[i+1] == '\n') 
+   for (i = 0; i < max; i++)
+   {
+       if (si[i] == '\r' && i + 1 < strlen(si) && si[i + 1] == '\n')
            continue;
        else if (si[i] == '\'' || si[i] == '\\')
            p[out++] = '\\';
@@ -1329,11 +1466,11 @@ convert_pgbinary_to_char(char *value, char *rgbValue, int cbValueMax)
 unsigned int
 conv_from_octal(unsigned char *s)
 {
-int i, y=0;
+   int         i,
+               y = 0;
 
-   for (i = 1; i <= 3; i++) {
-       y += (s[i] - 48) * (int) pow(8, 3-i);
-   }
+   for (i = 1; i <= 3; i++)
+       y += (s[i] - 48) * (int) pow(8, 3 - i);
 
    return y;
 
@@ -1342,18 +1479,21 @@ int i, y=0;
 unsigned int
 conv_from_hex(unsigned char *s)
 {
-int i, y=0, val;
+   int         i,
+               y = 0,
+               val;
 
-   for (i = 1; i <= 2; i++) {
+   for (i = 1; i <= 2; i++)
+   {
 
-        if (s[i] >= 'a' && s[i] <= 'f')
-            val = s[i] - 'a' + 10;
-        else if (s[i] >= 'A' && s[i] <= 'F')
-            val = s[i] - 'A' + 10;
-        else
-            val = s[i] - '0';
+       if (s[i] >= 'a' && s[i] <= 'f')
+           val = s[i] - 'a' + 10;
+       else if (s[i] >= 'A' && s[i] <= 'F')
+           val = s[i] - 'A' + 10;
+       else
+           val = s[i] - '0';
 
-       y += val * (int) pow(16, 2-i);
+       y += val * (int) pow(16, 2 - i);
    }
 
    return y;
@@ -1363,23 +1503,24 @@ int i, y=0, val;
 int
 convert_from_pgbinary(unsigned char *value, unsigned char *rgbValue, int cbValueMax)
 {
-size_t i;
-int o=0;
+   size_t      i;
+   int         o = 0;
 
-   
-   for (i = 0; i < strlen(value); ) {
-       if (value[i] == '\\') {
+
+   for (i = 0; i < strlen(value);)
+   {
+       if (value[i] == '\\')
+       {
            rgbValue[o] = conv_from_octal(&value[i]);
            i += 4;
        }
-       else {
+       else
            rgbValue[o] = value[i++];
-       }
        mylog("convert_from_pgbinary: i=%d, rgbValue[%d] = %d, %c\n", i, o, rgbValue[o], rgbValue[o]);
        o++;
    }
 
-   rgbValue[o] = '\0'; /* extra protection */
+   rgbValue[o] = '\0';         /* extra protection */
 
    return o;
 }
@@ -1388,14 +1529,15 @@ int o=0;
 char *
 conv_to_octal(unsigned char val)
 {
-int i;
-static char x[6];
+   int         i;
+   static char x[6];
 
    x[0] = '\\';
    x[1] = '\\';
    x[5] = '\0';
 
-   for (i = 4; i > 1; i--) {
+   for (i = 4; i > 1; i--)
+   {
        x[i] = (val & 7) + 48;
        val >>= 3;
    }
@@ -1407,16 +1549,18 @@ static char x[6];
 int
 convert_to_pgbinary(unsigned char *in, char *out, int len)
 {
-int i, o=0;
+   int         i,
+               o = 0;
 
 
-   for (i = 0; i < len; i++) {
+   for (i = 0; i < len; i++)
+   {
        mylog("convert_to_pgbinary: in[%d] = %d, %c\n", i, in[i], in[i]);
-       if ( isalnum(in[i]) || in[i] == ' ') {
+       if (isalnum(in[i]) || in[i] == ' ')
            out[o++] = in[i];
-       }
-       else {
-           strcpy(&out[o], conv_to_octal(in[i])); 
+       else
+       {
+           strcpy(&out[o], conv_to_octal(in[i]));
            o += 5;
        }
 
@@ -1431,17 +1575,20 @@ int i, o=0;
 void
 encode(char *in, char *out)
 {
-   unsigned int i, o = 0;
+   unsigned int i,
+               o = 0;
 
-   for (i = 0; i < strlen(in); i++) {
-       if ( in[i] == '+') {
+   for (i = 0; i < strlen(in); i++)
+   {
+       if (in[i] == '+')
+       {
            sprintf(&out[o], "%%2B");
            o += 3;
        }
-       else if ( isspace((unsigned char) in[i])) {
+       else if (isspace((unsigned char) in[i]))
            out[o++] = '+';
-       }
-       else if ( ! isalnum((unsigned char) in[i])) {
+       else if (!isalnum((unsigned char) in[i]))
+       {
            sprintf(&out[o], "%%%02x", (unsigned char) in[i]);
            o += 3;
        }
@@ -1455,14 +1602,17 @@ encode(char *in, char *out)
 void
 decode(char *in, char *out)
 {
-unsigned int i, o = 0;
+   unsigned int i,
+               o = 0;
 
-   for (i = 0; i < strlen(in); i++) { 
+   for (i = 0; i < strlen(in); i++)
+   {
        if (in[i] == '+')
            out[o++] = ' ';
-       else if (in[i] == '%') {
+       else if (in[i] == '%')
+       {
            sprintf(&out[o++], "%c", conv_from_hex(&in[i]));
-           i+=2;
+           i += 2;
        }
        else
            out[o++] = in[i];
@@ -1482,45 +1632,53 @@ unsigned int i, o = 0;
 
    CURRENTLY, ONLY LONGVARBINARY is handled, since that is the only
    data type currently mapped to a PG_TYPE_LO.  But, if any other types
-   are desired to map to a large object (PG_TYPE_LO), then that would 
+   are desired to map to a large object (PG_TYPE_LO), then that would
    need to be handled here.  For example, LONGVARCHAR could possibly be
    mapped to PG_TYPE_LO someday, instead of PG_TYPE_TEXT as it is now.
 */
 int
-convert_lo(StatementClass *stmt, void *value, Int2 fCType, PTR rgbValue, 
-          SDWORD cbValueMax, SDWORD *pcbValue)
+convert_lo(StatementClass * stmt, void *value, Int2 fCType, PTR rgbValue,
+          SDWORD cbValueMax, SDWORD * pcbValue)
 {
-   Oid oid;
-   int retval, result, left = -1;
+   Oid         oid;
+   int         retval,
+               result,
+               left = -1;
    BindInfoClass *bindInfo = NULL;
 
 
 /* If using SQLGetData, then current_col will be set */
-   if (stmt->current_col >= 0) {
+   if (stmt->current_col >= 0)
+   {
        bindInfo = &stmt->bindings[stmt->current_col];
        left = bindInfo->data_left;
    }
 
-   /*  if this is the first call for this column,
-       open the large object for reading 
-   */
+   /*
+    * if this is the first call for this column, open the large object
+    * for reading
+    */
 
-   if ( ! bindInfo || bindInfo->data_left == -1) {
+   if (!bindInfo || bindInfo->data_left == -1)
+   {
 
        /* begin transaction if needed */
-       if(!CC_is_in_trans(stmt->hdbc)) {
+       if (!CC_is_in_trans(stmt->hdbc))
+       {
            QResultClass *res;
-           char ok;
+           char        ok;
 
            res = CC_send_query(stmt->hdbc, "BEGIN", NULL);
-           if (!res) {
+           if (!res)
+           {
                stmt->errormsg = "Could not begin (in-line) a transaction";
                stmt->errornumber = STMT_EXEC_ERROR;
                return COPY_GENERAL_ERROR;
            }
            ok = QR_command_successful(res);
            QR_Destructor(res);
-           if (!ok) {
+           if (!ok)
+           {
                stmt->errormsg = "Could not begin (in-line) a transaction";
                stmt->errornumber = STMT_EXEC_ERROR;
                return COPY_GENERAL_ERROR;
@@ -1531,53 +1689,59 @@ convert_lo(StatementClass *stmt, void *value, Int2 fCType, PTR rgbValue,
 
        oid = atoi(value);
        stmt->lobj_fd = lo_open(stmt->hdbc, oid, INV_READ);
-       if (stmt->lobj_fd < 0) {
+       if (stmt->lobj_fd < 0)
+       {
            stmt->errornumber = STMT_EXEC_ERROR;
            stmt->errormsg = "Couldnt open large object for reading.";
            return COPY_GENERAL_ERROR;
        }
 
-       /*  Get the size */
+       /* Get the size */
        retval = lo_lseek(stmt->hdbc, stmt->lobj_fd, 0L, SEEK_END);
-       if (retval >= 0) {
+       if (retval >= 0)
+       {
 
            left = lo_tell(stmt->hdbc, stmt->lobj_fd);
            if (bindInfo)
                bindInfo->data_left = left;
 
-           /*  return to beginning */
+           /* return to beginning */
            lo_lseek(stmt->hdbc, stmt->lobj_fd, 0L, SEEK_SET);
        }
    }
 
-   if (left == 0) {
+   if (left == 0)
        return COPY_NO_DATA_FOUND;
-   }
 
-   if (stmt->lobj_fd < 0) {
+   if (stmt->lobj_fd < 0)
+   {
        stmt->errornumber = STMT_EXEC_ERROR;
        stmt->errormsg = "Large object FD undefined for multiple read.";
        return COPY_GENERAL_ERROR;
    }
 
    retval = lo_read(stmt->hdbc, stmt->lobj_fd, (char *) rgbValue, cbValueMax);
-   if (retval < 0) {
+   if (retval < 0)
+   {
        lo_close(stmt->hdbc, stmt->lobj_fd);
 
        /* commit transaction if needed */
-       if (!globals.use_declarefetch && CC_is_in_autocommit(stmt->hdbc)) {
+       if (!globals.use_declarefetch && CC_is_in_autocommit(stmt->hdbc))
+       {
            QResultClass *res;
-           char ok;
+           char        ok;
 
            res = CC_send_query(stmt->hdbc, "COMMIT", NULL);
-           if (!res) {
+           if (!res)
+           {
                stmt->errormsg = "Could not commit (in-line) a transaction";
                stmt->errornumber = STMT_EXEC_ERROR;
                return COPY_GENERAL_ERROR;
            }
            ok = QR_command_successful(res);
            QR_Destructor(res);
-           if (!ok) {
+           if (!ok)
+           {
                stmt->errormsg = "Could not commit (in-line) a transaction";
                stmt->errornumber = STMT_EXEC_ERROR;
                return COPY_GENERAL_ERROR;
@@ -1602,27 +1766,31 @@ convert_lo(StatementClass *stmt, void *value, Int2 fCType, PTR rgbValue,
        *pcbValue = left < 0 ? SQL_NO_TOTAL : left;
 
 
-   if (bindInfo && bindInfo->data_left > 0) 
+   if (bindInfo && bindInfo->data_left > 0)
        bindInfo->data_left -= retval;
 
 
-   if (! bindInfo || bindInfo->data_left == 0) {
+   if (!bindInfo || bindInfo->data_left == 0)
+   {
        lo_close(stmt->hdbc, stmt->lobj_fd);
 
        /* commit transaction if needed */
-       if (!globals.use_declarefetch && CC_is_in_autocommit(stmt->hdbc)) {
+       if (!globals.use_declarefetch && CC_is_in_autocommit(stmt->hdbc))
+       {
            QResultClass *res;
-           char ok;
+           char        ok;
 
            res = CC_send_query(stmt->hdbc, "COMMIT", NULL);
-           if (!res) {
+           if (!res)
+           {
                stmt->errormsg = "Could not commit (in-line) a transaction";
                stmt->errornumber = STMT_EXEC_ERROR;
                return COPY_GENERAL_ERROR;
            }
            ok = QR_command_successful(res);
            QR_Destructor(res);
-           if (!ok) {
+           if (!ok)
+           {
                stmt->errormsg = "Could not commit (in-line) a transaction";
                stmt->errornumber = STMT_EXEC_ERROR;
                return COPY_GENERAL_ERROR;
@@ -1631,7 +1799,7 @@ convert_lo(StatementClass *stmt, void *value, Int2 fCType, PTR rgbValue,
            CC_set_no_trans(stmt->hdbc);
        }
 
-       stmt->lobj_fd = -1; /* prevent further reading */
+       stmt->lobj_fd = -1;     /* prevent further reading */
    }
 
 
index 7fd8254779075d9b2e4caa6fdc65e0d08024f51d..1660f8084f2eeae39fc821965f89850e1faf0345 100644 (file)
--- a/convert.h
+++ b/convert.h
@@ -1,9 +1,9 @@
 
-/* File:            convert.h
+/* File:           convert.h
  *
- * Description:     See "convert.c"
+ * Description:        See "convert.c"
  *
- * Comments:        See "notice.txt" for copyright and license information.
+ * Comments:       See "notice.txt" for copyright and license information.
  *
  */
 
 #include "psqlodbc.h"
 
 /* copy_and_convert results */
-#define COPY_OK                      0
-#define COPY_UNSUPPORTED_TYPE        1
+#define COPY_OK                         0
+#define COPY_UNSUPPORTED_TYPE       1
 #define COPY_UNSUPPORTED_CONVERSION  2
-#define COPY_RESULT_TRUNCATED        3
-#define COPY_GENERAL_ERROR           4
-#define COPY_NO_DATA_FOUND           5
-
-typedef struct {
-   int m;
-   int d;
-   int y;
-   int hh;
-   int mm;
-   int ss;
-} SIMPLE_TIME;
-
-int copy_and_convert_field_bindinfo(StatementClass *stmt, Int4 field_type, void *value, int col);
-int copy_and_convert_field(StatementClass *stmt, Int4 field_type, void *value, Int2 fCType, 
-                          PTR rgbValue, SDWORD cbValueMax, SDWORD *pcbValue);
-
-int copy_statement_with_parameters(StatementClass *stmt);
-char *convert_escape(char *value);
-char *convert_money(char *s);
-char parse_datetime(char *buf, SIMPLE_TIME *st);
-int convert_linefeeds(char *s, char *dst, size_t max);
-char *convert_special_chars(char *si, char *dst, int used);
-
-int convert_pgbinary_to_char(char *value, char *rgbValue, int cbValueMax);
-int convert_from_pgbinary(unsigned char *value, unsigned char *rgbValue, int cbValueMax);
-int convert_to_pgbinary(unsigned char *in, char *out, int len);
-void encode(char *in, char *out);
-void decode(char *in, char *out);
-int convert_lo(StatementClass *stmt, void *value, Int2 fCType, PTR rgbValue, 
-          SDWORD cbValueMax, SDWORD *pcbValue);
+#define COPY_RESULT_TRUNCATED       3
+#define COPY_GENERAL_ERROR          4
+#define COPY_NO_DATA_FOUND          5
+
+typedef struct
+{
+   int         m;
+   int         d;
+   int         y;
+   int         hh;
+   int         mm;
+   int         ss;
+}          SIMPLE_TIME;
+
+int            copy_and_convert_field_bindinfo(StatementClass * stmt, Int4 field_type, void *value, int col);
+int copy_and_convert_field(StatementClass * stmt, Int4 field_type, void *value, Int2 fCType,
+                    PTR rgbValue, SDWORD cbValueMax, SDWORD * pcbValue);
+
+int            copy_statement_with_parameters(StatementClass * stmt);
+char      *convert_escape(char *value);
+char      *convert_money(char *s);
+char       parse_datetime(char *buf, SIMPLE_TIME * st);
+int            convert_linefeeds(char *s, char *dst, size_t max);
+char      *convert_special_chars(char *si, char *dst, int used);
+
+int            convert_pgbinary_to_char(char *value, char *rgbValue, int cbValueMax);
+int            convert_from_pgbinary(unsigned char *value, unsigned char *rgbValue, int cbValueMax);
+int            convert_to_pgbinary(unsigned char *in, char *out, int len);
+void       encode(char *in, char *out);
+void       decode(char *in, char *out);
+int convert_lo(StatementClass * stmt, void *value, Int2 fCType, PTR rgbValue,
+          SDWORD cbValueMax, SDWORD * pcbValue);
 
 #endif
index 2bbf46faea94bb43826656125179c7dffca1af69..5f8e276a0ab17948928cc466c63ecd1233dcb922 100644 (file)
@@ -1,17 +1,17 @@
-/* Module:          dlg_specific.c
+/* Module:         dlg_specific.c
  *
- * Description:     This module contains any specific code for handling
- *                  dialog boxes such as driver/datasource options.  Both the
- *                  ConfigDSN() and the SQLDriverConnect() functions use 
- *                  functions in this module.  If you were to add a new option
- *                  to any dialog box, you would most likely only have to change
- *                  things in here rather than in 2 separate places as before.
+ * Description:        This module contains any specific code for handling
+ *                 dialog boxes such as driver/datasource options.  Both the
+ *                 ConfigDSN() and the SQLDriverConnect() functions use
+ *                 functions in this module.  If you were to add a new option
+ *                 to any dialog box, you would most likely only have to change
+ *                 things in here rather than in 2 separate places as before.
  *
- * Classes:         none
+ * Classes:            none
  *
- * API functions:   none
+ * API functions:  none
  *
- * Comments:        See "notice.txt" for copyright and license information.
+ * Comments:       See "notice.txt" for copyright and license information.
  *
  */
 
 #endif
 
 #ifndef WIN32
-# include <string.h>
-# include "gpps.h"
-# define SQLGetPrivateProfileString(a,b,c,d,e,f) GetPrivateProfileString(a,b,c,d,e,f)
-# define SQLWritePrivateProfileString(a,b,c,d) WritePrivateProfileString(a,b,c,d)
-# ifndef HAVE_STRICMP
-#  define stricmp(s1,s2)      strcasecmp(s1,s2)
-#  define strnicmp(s1,s2,n)   strncasecmp(s1,s2,n)
-# endif
+#include <string.h>
+#include "gpps.h"
+#define SQLGetPrivateProfileString(a,b,c,d,e,f) GetPrivateProfileString(a,b,c,d,e,f)
+#define SQLWritePrivateProfileString(a,b,c,d) WritePrivateProfileString(a,b,c,d)
+#ifndef HAVE_STRICMP
+#define stricmp(s1,s2)     strcasecmp(s1,s2)
+#define strnicmp(s1,s2,n)  strncasecmp(s1,s2,n)
+#endif
 #endif
 
 #include "dlg_specific.h"
@@ -47,10 +47,15 @@ extern GLOBAL_VALUES globals;
 
 #ifdef WIN32
 void
-SetDlgStuff(HWND hdlg, ConnInfo *ci)
+SetDlgStuff(HWND hdlg, ConnInfo * ci)
 {
-   /*  If driver attribute NOT present, then set the datasource name and description */
-   if (ci->driver[0] == '\0') {
+
+   /*
+    * If driver attribute NOT present, then set the datasource name and
+    * description
+    */
+   if (ci->driver[0] == '\0')
+   {
        SetDlgItemText(hdlg, IDC_DSNAME, ci->dsn);
        SetDlgItemText(hdlg, IDC_DESC, ci->desc);
    }
@@ -62,8 +67,8 @@ SetDlgStuff(HWND hdlg, ConnInfo *ci)
    SetDlgItemText(hdlg, IDC_PORT, ci->port);
 }
 
-void 
-GetDlgStuff(HWND hdlg, ConnInfo *ci)
+void
+GetDlgStuff(HWND hdlg, ConnInfo * ci)
 {
    GetDlgItemText(hdlg, IDC_DESC, ci->desc, sizeof(ci->desc));
 
@@ -76,286 +81,296 @@ GetDlgStuff(HWND hdlg, ConnInfo *ci)
 
 
 
-int CALLBACK driver_optionsProc(HWND   hdlg,
-                           WORD   wMsg,
-                           WPARAM wParam,
-                           LPARAM lParam)
+int CALLBACK
+driver_optionsProc(HWND hdlg,
+                  WORD wMsg,
+                  WPARAM wParam,
+                  LPARAM lParam)
 {
-   switch (wMsg) {
-   case WM_INITDIALOG:
-
-       CheckDlgButton(hdlg, DRV_COMMLOG, globals.commlog);
-       CheckDlgButton(hdlg, DRV_OPTIMIZER, globals.disable_optimizer);
-       CheckDlgButton(hdlg, DRV_KSQO, globals.ksqo);
-       CheckDlgButton(hdlg, DRV_UNIQUEINDEX, globals.unique_index);
-       CheckDlgButton(hdlg, DRV_READONLY, globals.onlyread);
-       CheckDlgButton(hdlg, DRV_USEDECLAREFETCH, globals.use_declarefetch);
-
-       /*  Unknown (Default) Data Type sizes */
-       switch(globals.unknown_sizes) {
-       case UNKNOWNS_AS_DONTKNOW:
-           CheckDlgButton(hdlg, DRV_UNKNOWN_DONTKNOW, 1);
-           break;
-       case UNKNOWNS_AS_LONGEST:
-           CheckDlgButton(hdlg, DRV_UNKNOWN_LONGEST, 1);
-           break;
-       case UNKNOWNS_AS_MAX:
-       default:
-           CheckDlgButton(hdlg, DRV_UNKNOWN_MAX, 1);
-           break;
-       }
-
-       CheckDlgButton(hdlg, DRV_TEXT_LONGVARCHAR, globals.text_as_longvarchar);
-       CheckDlgButton(hdlg, DRV_UNKNOWNS_LONGVARCHAR, globals.unknowns_as_longvarchar);
-       CheckDlgButton(hdlg, DRV_BOOLS_CHAR, globals.bools_as_char);
-
-       CheckDlgButton(hdlg, DRV_PARSE, globals.parse);
+   switch (wMsg)
+   {
+           case WM_INITDIALOG:
+
+           CheckDlgButton(hdlg, DRV_COMMLOG, globals.commlog);
+           CheckDlgButton(hdlg, DRV_OPTIMIZER, globals.disable_optimizer);
+           CheckDlgButton(hdlg, DRV_KSQO, globals.ksqo);
+           CheckDlgButton(hdlg, DRV_UNIQUEINDEX, globals.unique_index);
+           CheckDlgButton(hdlg, DRV_READONLY, globals.onlyread);
+           CheckDlgButton(hdlg, DRV_USEDECLAREFETCH, globals.use_declarefetch);
+
+           /* Unknown (Default) Data Type sizes */
+           switch (globals.unknown_sizes)
+           {
+               case UNKNOWNS_AS_DONTKNOW:
+                   CheckDlgButton(hdlg, DRV_UNKNOWN_DONTKNOW, 1);
+                   break;
+               case UNKNOWNS_AS_LONGEST:
+                   CheckDlgButton(hdlg, DRV_UNKNOWN_LONGEST, 1);
+                   break;
+               case UNKNOWNS_AS_MAX:
+               default:
+                   CheckDlgButton(hdlg, DRV_UNKNOWN_MAX, 1);
+                   break;
+           }
 
-       CheckDlgButton(hdlg, DRV_CANCELASFREESTMT, globals.cancel_as_freestmt);
+           CheckDlgButton(hdlg, DRV_TEXT_LONGVARCHAR, globals.text_as_longvarchar);
+           CheckDlgButton(hdlg, DRV_UNKNOWNS_LONGVARCHAR, globals.unknowns_as_longvarchar);
+           CheckDlgButton(hdlg, DRV_BOOLS_CHAR, globals.bools_as_char);
 
-       SetDlgItemInt(hdlg, DRV_CACHE_SIZE, globals.fetch_max, FALSE);
-       SetDlgItemInt(hdlg, DRV_VARCHAR_SIZE, globals.max_varchar_size, FALSE);
-       SetDlgItemInt(hdlg, DRV_LONGVARCHAR_SIZE, globals.max_longvarchar_size, TRUE);
+           CheckDlgButton(hdlg, DRV_PARSE, globals.parse);
 
-       SetDlgItemText(hdlg, DRV_EXTRASYSTABLEPREFIXES, globals.extra_systable_prefixes);
+           CheckDlgButton(hdlg, DRV_CANCELASFREESTMT, globals.cancel_as_freestmt);
 
-       /*  Driver Connection Settings */
-       SetDlgItemText(hdlg, DRV_CONNSETTINGS, globals.conn_settings);
+           SetDlgItemInt(hdlg, DRV_CACHE_SIZE, globals.fetch_max, FALSE);
+           SetDlgItemInt(hdlg, DRV_VARCHAR_SIZE, globals.max_varchar_size, FALSE);
+           SetDlgItemInt(hdlg, DRV_LONGVARCHAR_SIZE, globals.max_longvarchar_size, TRUE);
 
-       break; 
+           SetDlgItemText(hdlg, DRV_EXTRASYSTABLEPREFIXES, globals.extra_systable_prefixes);
 
-   case WM_COMMAND:
-       switch (GET_WM_COMMAND_ID(wParam, lParam)) {
-       case IDOK:
+           /* Driver Connection Settings */
+           SetDlgItemText(hdlg, DRV_CONNSETTINGS, globals.conn_settings);
 
-           globals.commlog = IsDlgButtonChecked(hdlg, DRV_COMMLOG);
-           globals.disable_optimizer = IsDlgButtonChecked(hdlg, DRV_OPTIMIZER);
-           globals.ksqo = IsDlgButtonChecked(hdlg, DRV_KSQO);
-           globals.unique_index = IsDlgButtonChecked(hdlg, DRV_UNIQUEINDEX);
-           globals.onlyread = IsDlgButtonChecked(hdlg, DRV_READONLY);
-           globals.use_declarefetch = IsDlgButtonChecked(hdlg, DRV_USEDECLAREFETCH);
+           break;
 
-           /*  Unknown (Default) Data Type sizes */
-           if (IsDlgButtonChecked(hdlg, DRV_UNKNOWN_MAX))
-               globals.unknown_sizes = UNKNOWNS_AS_MAX;
-           else if (IsDlgButtonChecked(hdlg, DRV_UNKNOWN_DONTKNOW))
-               globals.unknown_sizes = UNKNOWNS_AS_DONTKNOW;
-           else if (IsDlgButtonChecked(hdlg, DRV_UNKNOWN_LONGEST))
-               globals.unknown_sizes = UNKNOWNS_AS_LONGEST;
-           else
-               globals.unknown_sizes = UNKNOWNS_AS_MAX;
-
-           globals.text_as_longvarchar = IsDlgButtonChecked(hdlg, DRV_TEXT_LONGVARCHAR);
-           globals.unknowns_as_longvarchar = IsDlgButtonChecked(hdlg, DRV_UNKNOWNS_LONGVARCHAR);
-           globals.bools_as_char = IsDlgButtonChecked(hdlg, DRV_BOOLS_CHAR);
-
-           globals.parse = IsDlgButtonChecked(hdlg, DRV_PARSE);
-
-           globals.cancel_as_freestmt = IsDlgButtonChecked(hdlg, DRV_CANCELASFREESTMT);
-
-           globals.fetch_max = GetDlgItemInt(hdlg, DRV_CACHE_SIZE, NULL, FALSE);
-           globals.max_varchar_size = GetDlgItemInt(hdlg, DRV_VARCHAR_SIZE, NULL, FALSE);
-           globals.max_longvarchar_size= GetDlgItemInt(hdlg, DRV_LONGVARCHAR_SIZE, NULL, TRUE);    /* allows for SQL_NO_TOTAL */
-
-           GetDlgItemText(hdlg, DRV_EXTRASYSTABLEPREFIXES, globals.extra_systable_prefixes, sizeof(globals.extra_systable_prefixes));
-
-           /*  Driver Connection Settings */
-           GetDlgItemText(hdlg, DRV_CONNSETTINGS, globals.conn_settings, sizeof(globals.conn_settings));
-
-           updateGlobals();
-
-           /*  fall through */
-
-       case IDCANCEL:
-           EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam) == IDOK);
-           return TRUE;
-
-       case IDDEFAULTS:
-           CheckDlgButton(hdlg, DRV_COMMLOG, DEFAULT_COMMLOG);
-           CheckDlgButton(hdlg, DRV_OPTIMIZER, DEFAULT_OPTIMIZER);
-           CheckDlgButton(hdlg, DRV_KSQO, DEFAULT_KSQO);
-           CheckDlgButton(hdlg, DRV_UNIQUEINDEX, DEFAULT_UNIQUEINDEX);
-           CheckDlgButton(hdlg, DRV_READONLY, DEFAULT_READONLY);
-           CheckDlgButton(hdlg, DRV_USEDECLAREFETCH, DEFAULT_USEDECLAREFETCH);
-   
-           CheckDlgButton(hdlg, DRV_PARSE, DEFAULT_PARSE);
-           CheckDlgButton(hdlg, DRV_CANCELASFREESTMT, DEFAULT_CANCELASFREESTMT);
-
-           /*  Unknown Sizes */
-           CheckDlgButton(hdlg, DRV_UNKNOWN_DONTKNOW, 0);
-           CheckDlgButton(hdlg, DRV_UNKNOWN_LONGEST, 0);
-           CheckDlgButton(hdlg, DRV_UNKNOWN_MAX, 0);
-           switch(DEFAULT_UNKNOWNSIZES) {
-           case UNKNOWNS_AS_DONTKNOW:
-               CheckDlgButton(hdlg, DRV_UNKNOWN_DONTKNOW, 1);
-               break;
-           case UNKNOWNS_AS_LONGEST:
-               CheckDlgButton(hdlg, DRV_UNKNOWN_LONGEST, 1);
-               break;
-           case UNKNOWNS_AS_MAX:
-               CheckDlgButton(hdlg, DRV_UNKNOWN_MAX, 1);
-               break;
+       case WM_COMMAND:
+           switch (GET_WM_COMMAND_ID(wParam, lParam))
+           {
+               case IDOK:
+
+                   globals.commlog = IsDlgButtonChecked(hdlg, DRV_COMMLOG);
+                   globals.disable_optimizer = IsDlgButtonChecked(hdlg, DRV_OPTIMIZER);
+                   globals.ksqo = IsDlgButtonChecked(hdlg, DRV_KSQO);
+                   globals.unique_index = IsDlgButtonChecked(hdlg, DRV_UNIQUEINDEX);
+                   globals.onlyread = IsDlgButtonChecked(hdlg, DRV_READONLY);
+                   globals.use_declarefetch = IsDlgButtonChecked(hdlg, DRV_USEDECLAREFETCH);
+
+                   /* Unknown (Default) Data Type sizes */
+                   if (IsDlgButtonChecked(hdlg, DRV_UNKNOWN_MAX))
+                       globals.unknown_sizes = UNKNOWNS_AS_MAX;
+                   else if (IsDlgButtonChecked(hdlg, DRV_UNKNOWN_DONTKNOW))
+                       globals.unknown_sizes = UNKNOWNS_AS_DONTKNOW;
+                   else if (IsDlgButtonChecked(hdlg, DRV_UNKNOWN_LONGEST))
+                       globals.unknown_sizes = UNKNOWNS_AS_LONGEST;
+                   else
+                       globals.unknown_sizes = UNKNOWNS_AS_MAX;
+
+                   globals.text_as_longvarchar = IsDlgButtonChecked(hdlg, DRV_TEXT_LONGVARCHAR);
+                   globals.unknowns_as_longvarchar = IsDlgButtonChecked(hdlg, DRV_UNKNOWNS_LONGVARCHAR);
+                   globals.bools_as_char = IsDlgButtonChecked(hdlg, DRV_BOOLS_CHAR);
+
+                   globals.parse = IsDlgButtonChecked(hdlg, DRV_PARSE);
+
+                   globals.cancel_as_freestmt = IsDlgButtonChecked(hdlg, DRV_CANCELASFREESTMT);
+
+                   globals.fetch_max = GetDlgItemInt(hdlg, DRV_CACHE_SIZE, NULL, FALSE);
+                   globals.max_varchar_size = GetDlgItemInt(hdlg, DRV_VARCHAR_SIZE, NULL, FALSE);
+                   globals.max_longvarchar_size = GetDlgItemInt(hdlg, DRV_LONGVARCHAR_SIZE, NULL, TRUE);       /* allows for
+                                                                                                                * SQL_NO_TOTAL */
+
+                   GetDlgItemText(hdlg, DRV_EXTRASYSTABLEPREFIXES, globals.extra_systable_prefixes, sizeof(globals.extra_systable_prefixes));
+
+                   /* Driver Connection Settings */
+                   GetDlgItemText(hdlg, DRV_CONNSETTINGS, globals.conn_settings, sizeof(globals.conn_settings));
+
+                   updateGlobals();
+
+                   /* fall through */
+
+               case IDCANCEL:
+                   EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam) == IDOK);
+                   return TRUE;
+
+               case IDDEFAULTS:
+                   CheckDlgButton(hdlg, DRV_COMMLOG, DEFAULT_COMMLOG);
+                   CheckDlgButton(hdlg, DRV_OPTIMIZER, DEFAULT_OPTIMIZER);
+                   CheckDlgButton(hdlg, DRV_KSQO, DEFAULT_KSQO);
+                   CheckDlgButton(hdlg, DRV_UNIQUEINDEX, DEFAULT_UNIQUEINDEX);
+                   CheckDlgButton(hdlg, DRV_READONLY, DEFAULT_READONLY);
+                   CheckDlgButton(hdlg, DRV_USEDECLAREFETCH, DEFAULT_USEDECLAREFETCH);
+
+                   CheckDlgButton(hdlg, DRV_PARSE, DEFAULT_PARSE);
+                   CheckDlgButton(hdlg, DRV_CANCELASFREESTMT, DEFAULT_CANCELASFREESTMT);
+
+                   /* Unknown Sizes */
+                   CheckDlgButton(hdlg, DRV_UNKNOWN_DONTKNOW, 0);
+                   CheckDlgButton(hdlg, DRV_UNKNOWN_LONGEST, 0);
+                   CheckDlgButton(hdlg, DRV_UNKNOWN_MAX, 0);
+                   switch (DEFAULT_UNKNOWNSIZES)
+                   {
+                       case UNKNOWNS_AS_DONTKNOW:
+                           CheckDlgButton(hdlg, DRV_UNKNOWN_DONTKNOW, 1);
+                           break;
+                       case UNKNOWNS_AS_LONGEST:
+                           CheckDlgButton(hdlg, DRV_UNKNOWN_LONGEST, 1);
+                           break;
+                       case UNKNOWNS_AS_MAX:
+                           CheckDlgButton(hdlg, DRV_UNKNOWN_MAX, 1);
+                           break;
+                   }
+
+                   CheckDlgButton(hdlg, DRV_TEXT_LONGVARCHAR, DEFAULT_TEXTASLONGVARCHAR);
+                   CheckDlgButton(hdlg, DRV_UNKNOWNS_LONGVARCHAR, DEFAULT_UNKNOWNSASLONGVARCHAR);
+                   CheckDlgButton(hdlg, DRV_BOOLS_CHAR, DEFAULT_BOOLSASCHAR);
+
+                   SetDlgItemInt(hdlg, DRV_CACHE_SIZE, FETCH_MAX, FALSE);
+                   SetDlgItemInt(hdlg, DRV_VARCHAR_SIZE, MAX_VARCHAR_SIZE, FALSE);
+                   SetDlgItemInt(hdlg, DRV_LONGVARCHAR_SIZE, TEXT_FIELD_SIZE, TRUE);
+
+                   SetDlgItemText(hdlg, DRV_EXTRASYSTABLEPREFIXES, DEFAULT_EXTRASYSTABLEPREFIXES);
+
+                   /* Driver Connection Settings */
+                   SetDlgItemText(hdlg, DRV_CONNSETTINGS, "");
+
+                   break;
            }
 
-           CheckDlgButton(hdlg, DRV_TEXT_LONGVARCHAR, DEFAULT_TEXTASLONGVARCHAR);
-           CheckDlgButton(hdlg, DRV_UNKNOWNS_LONGVARCHAR, DEFAULT_UNKNOWNSASLONGVARCHAR);
-           CheckDlgButton(hdlg, DRV_BOOLS_CHAR, DEFAULT_BOOLSASCHAR);
-
-           SetDlgItemInt(hdlg, DRV_CACHE_SIZE, FETCH_MAX, FALSE);
-           SetDlgItemInt(hdlg, DRV_VARCHAR_SIZE, MAX_VARCHAR_SIZE, FALSE);
-           SetDlgItemInt(hdlg, DRV_LONGVARCHAR_SIZE, TEXT_FIELD_SIZE, TRUE);
-
-           SetDlgItemText(hdlg, DRV_EXTRASYSTABLEPREFIXES, DEFAULT_EXTRASYSTABLEPREFIXES);
-
-           /*  Driver Connection Settings */
-           SetDlgItemText(hdlg, DRV_CONNSETTINGS, "");
-
-           break;
-       }
-
    }
 
    return FALSE;
 }
 
-int CALLBACK ds_optionsProc(HWND   hdlg,
-                           WORD   wMsg,
-                           WPARAM wParam,
-                           LPARAM lParam)
+int CALLBACK
+ds_optionsProc(HWND hdlg,
+              WORD wMsg,
+              WPARAM wParam,
+              LPARAM lParam)
 {
-ConnInfo *ci;
-char buf[128];
-
-   switch (wMsg) {
-   case WM_INITDIALOG:
-       ci = (ConnInfo *) lParam;       
-       SetWindowLong(hdlg, DWL_USER, lParam);  /* save for OK */
-
-       /*  Change window caption */
-       if (ci->driver[0])
-           SetWindowText(hdlg, "Advanced Options (Connection)");
-       else {
-           sprintf(buf, "Advanced Options (%s)", ci->dsn);
-           SetWindowText(hdlg, buf);
-       }
+   ConnInfo   *ci;
+   char        buf[128];
+
+   switch (wMsg)
+   {
+       case WM_INITDIALOG:
+           ci = (ConnInfo *) lParam;
+           SetWindowLong(hdlg, DWL_USER, lParam);      /* save for OK */
+
+           /* Change window caption */
+           if (ci->driver[0])
+               SetWindowText(hdlg, "Advanced Options (Connection)");
+           else
+           {
+               sprintf(buf, "Advanced Options (%s)", ci->dsn);
+               SetWindowText(hdlg, buf);
+           }
 
-       /*  Readonly */
-       CheckDlgButton(hdlg, DS_READONLY, atoi(ci->onlyread));
+           /* Readonly */
+           CheckDlgButton(hdlg, DS_READONLY, atoi(ci->onlyread));
 
-       /*  Protocol */
-       CheckDlgButton(hdlg, DS_PG64, 1);
+           /* Protocol */
+           CheckDlgButton(hdlg, DS_PG64, 1);
 
 
 
-       CheckDlgButton(hdlg, DS_SHOWOIDCOLUMN, atoi(ci->show_oid_column));
-       CheckDlgButton(hdlg, DS_FAKEOIDINDEX, atoi(ci->fake_oid_index));
-       CheckDlgButton(hdlg, DS_ROWVERSIONING, atoi(ci->row_versioning));
-       CheckDlgButton(hdlg, DS_SHOWSYSTEMTABLES, atoi(ci->show_system_tables));
+           CheckDlgButton(hdlg, DS_SHOWOIDCOLUMN, atoi(ci->show_oid_column));
+           CheckDlgButton(hdlg, DS_FAKEOIDINDEX, atoi(ci->fake_oid_index));
+           CheckDlgButton(hdlg, DS_ROWVERSIONING, atoi(ci->row_versioning));
+           CheckDlgButton(hdlg, DS_SHOWSYSTEMTABLES, atoi(ci->show_system_tables));
 
-       EnableWindow(GetDlgItem(hdlg, DS_FAKEOIDINDEX), atoi(ci->show_oid_column));
+           EnableWindow(GetDlgItem(hdlg, DS_FAKEOIDINDEX), atoi(ci->show_oid_column));
 
-       /*  Datasource Connection Settings */
-       SetDlgItemText(hdlg, DS_CONNSETTINGS, ci->conn_settings);
-       break; 
+           /* Datasource Connection Settings */
+           SetDlgItemText(hdlg, DS_CONNSETTINGS, ci->conn_settings);
+           break;
 
 
-   case WM_COMMAND:
-       switch (GET_WM_COMMAND_ID(wParam, lParam)) {
-       case DS_SHOWOIDCOLUMN:
-           mylog("WM_COMMAND: DS_SHOWOIDCOLUMN\n");
-           EnableWindow(GetDlgItem(hdlg, DS_FAKEOIDINDEX), IsDlgButtonChecked(hdlg, DS_SHOWOIDCOLUMN));
-           return TRUE;
+       case WM_COMMAND:
+           switch (GET_WM_COMMAND_ID(wParam, lParam))
+           {
+               case DS_SHOWOIDCOLUMN:
+                   mylog("WM_COMMAND: DS_SHOWOIDCOLUMN\n");
+                   EnableWindow(GetDlgItem(hdlg, DS_FAKEOIDINDEX), IsDlgButtonChecked(hdlg, DS_SHOWOIDCOLUMN));
+                   return TRUE;
 
 
-       case IDOK: 
+               case IDOK:
 
-           ci = (ConnInfo *)GetWindowLong(hdlg, DWL_USER);
-           mylog("IDOK: got ci = %u\n", ci);
+                   ci = (ConnInfo *) GetWindowLong(hdlg, DWL_USER);
+                   mylog("IDOK: got ci = %u\n", ci);
 
-           /*  Readonly */
-           sprintf(ci->onlyread, "%d", IsDlgButtonChecked(hdlg, DS_READONLY));
+                   /* Readonly */
+                   sprintf(ci->onlyread, "%d", IsDlgButtonChecked(hdlg, DS_READONLY));
 
-           /*  Protocol */
-           strcpy(ci->protocol, PG64);
+                   /* Protocol */
+                   strcpy(ci->protocol, PG64);
 
-           sprintf(ci->show_system_tables, "%d", IsDlgButtonChecked(hdlg, DS_SHOWSYSTEMTABLES));
+                   sprintf(ci->show_system_tables, "%d", IsDlgButtonChecked(hdlg, DS_SHOWSYSTEMTABLES));
 
-           sprintf(ci->row_versioning, "%d", IsDlgButtonChecked(hdlg, DS_ROWVERSIONING));
+                   sprintf(ci->row_versioning, "%d", IsDlgButtonChecked(hdlg, DS_ROWVERSIONING));
 
-           /*  OID Options*/
-           sprintf(ci->fake_oid_index, "%d", IsDlgButtonChecked(hdlg, DS_FAKEOIDINDEX));
-           sprintf(ci->show_oid_column, "%d", IsDlgButtonChecked(hdlg, DS_SHOWOIDCOLUMN));
+                   /* OID Options */
+                   sprintf(ci->fake_oid_index, "%d", IsDlgButtonChecked(hdlg, DS_FAKEOIDINDEX));
+                   sprintf(ci->show_oid_column, "%d", IsDlgButtonChecked(hdlg, DS_SHOWOIDCOLUMN));
 
-           /*  Datasource Connection Settings */
-           GetDlgItemText(hdlg, DS_CONNSETTINGS, ci->conn_settings, sizeof(ci->conn_settings));
+                   /* Datasource Connection Settings */
+                   GetDlgItemText(hdlg, DS_CONNSETTINGS, ci->conn_settings, sizeof(ci->conn_settings));
 
 
-           /*  fall through */
+                   /* fall through */
 
-       case IDCANCEL:
-           EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam) == IDOK);
-           return TRUE;
-       }
+               case IDCANCEL:
+                   EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam) == IDOK);
+                   return TRUE;
+           }
    }
 
    return FALSE;
 }
 
-#endif /* WIN32 */
+#endif  /* WIN32 */
 
 void
-makeConnectString(char *connect_string, ConnInfo *ci)
+makeConnectString(char *connect_string, ConnInfo * ci)
 {
-char got_dsn = (ci->dsn[0] != '\0');
-char encoded_conn_settings[LARGE_REGISTRY_LEN];
+   char        got_dsn = (ci->dsn[0] != '\0');
+   char        encoded_conn_settings[LARGE_REGISTRY_LEN];
 
-   /*  fundamental info */
+   /* fundamental info */
    sprintf(connect_string, "%s=%s;DATABASE=%s;SERVER=%s;PORT=%s;UID=%s;PWD=%s",
-       got_dsn ? "DSN" : "DRIVER", 
-       got_dsn ? ci->dsn :