List:Commits« Previous MessageNext Message »
From:pharvey Date:March 10 2006 8:13am
Subject:Connector/ODBC 3.51 commit: r46 - / myodbc3
View as plain text  
Modified:
   ChangeLog
   myodbc3/execute.c
   myodbc3/options.c
   myodbc3/utility.c
Log:
BUG 14639: connection lost now being handled better


Modified: ChangeLog
===================================================================
--- ChangeLog	2006-03-09 06:22:51 UTC (rev 45)
+++ ChangeLog	2006-03-10 08:13:24 UTC (rev 46)
@@ -7,6 +7,9 @@
 22-FEB-2006 (3.51.13): pharvey@stripped
 ---------------------------------------------
 
+-- SQL_ATTR_CONNECTION_DEAD now calls mysql_ping everytime
+-- lost connection once again detected (prob. need to make 
+   CHECK_IF_ALIVE a connection/dsn option to make even better)    
 -- added MYODBCBrowser to distro
 -- now handles statements embraced by {} (removes the braces)
 -- fixed the windows-specifie problem with GUI and SQL_DRIVER_PROMPT

Modified: myodbc3/execute.c
===================================================================
--- myodbc3/execute.c	2006-03-09 06:22:51 UTC (rev 45)
+++ myodbc3/execute.c	2006-03-10 08:13:24 UTC (rev 46)
@@ -78,12 +78,10 @@
     }
     MYLOG_QUERY(stmt, query);
     pthread_mutex_lock(&stmt->dbc->lock);
-    if ( check_if_server_is_alive(stmt->dbc) )
+    if ( check_if_server_is_alive( stmt->dbc ) )
     {
-        set_stmt_error(stmt,"HYT00",mysql_error(&stmt->dbc->mysql),
-                       mysql_errno(&stmt->dbc->mysql));
-        translate_error(stmt->error.sqlstate,MYERR_S1000,
-                        mysql_errno(&stmt->dbc->mysql));
+        set_stmt_error( stmt, "08S01" /* "HYT00" */, mysql_error(
&stmt->dbc->mysql ), mysql_errno( &stmt->dbc->mysql ) );
+        translate_error( stmt->error.sqlstate,MYERR_08S01 /* S1000 */, mysql_errno(
&stmt->dbc->mysql ) );
         goto exit;
     }
 
@@ -119,7 +117,7 @@
         goto exit;
     }
     MYODBCDbgPrint("info",("result set columns: %d, rows: %lld",
-                       stmt->result->field_count, stmt->result->row_count));
+                           stmt->result->field_count,
stmt->result->row_count));
     fix_result_types(stmt);
     error= SQL_SUCCESS;
 
@@ -142,9 +140,9 @@
     ulong nead= 0;
     MYODBCDbgEnter("extend_buffer");
     MYODBCDbgPrint("enter",("current_length: %ld  length: %ld  buffer_length: %ld",
-                        (ulong) (to - (char*) net->buff),
-                        (ulong) length,
-                        (ulong) net->max_packet));
+                            (ulong) (to - (char*) net->buff),
+                            (ulong) length,
+                            (ulong) net->max_packet));
 
     if ( !to ||
          (nead= (ulong) (to - (char*) net->buff)+length) > net->max_packet-10 )
@@ -155,7 +153,7 @@
         if ( pkt_length > max_allowed_packet )
         {
             MYODBCDbgPrint("error",("Needed %ld but max_allowed_packet is %ld",
-                                pkt_length,max_allowed_packet));
+                                    pkt_length,max_allowed_packet));
             MYODBCDbgReturn2(0);     /* Too large packet */
         }
         if ( !(buff= (uchar*) my_realloc((char*) net->buff,pkt_length,
@@ -178,7 +176,7 @@
 {
     MYODBCDbgEnter("add_to_buffer");
     MYODBCDbgPrint("enter",("from: '%-.32s'  length: %ld",
-                        from ? from: "<null>", (long int) length));
+                            from ? from: "<null>", (long int) length));
     if ( !(to= extend_buffer(net,to,length)) )
         MYODBCDbgReturn2(0);
     memcpy(to,from,length);
@@ -325,10 +323,10 @@
         length= *param->actual_len;
     }
     MYODBCDbgPrint("info",
-               ("param: 0x%lx  ctype: %d  SqlType: %d  data: 0x%lx  length: %d 
actual_len: %d  pos_in_query: %p",
-                param,param->CType,param->SqlType,data,length,
-                param->actual_len ? *param->actual_len : 0,
-                param->pos_in_query));
+                   ("param: 0x%lx  ctype: %d  SqlType: %d  data: 0x%lx  length: %d 
actual_len: %d  pos_in_query: %p",
+                    param,param->CType,param->SqlType,data,length,
+                    param->actual_len ? *param->actual_len : 0,
+                    param->pos_in_query));
 
     switch ( param->CType )
     {
@@ -397,17 +395,17 @@
             data= buff;
             break;
         case SQL_C_FLOAT:
-            if( param->SqlType != SQL_NUMERIC && param->SqlType !=
SQL_DECIMAL )
+            if ( param->SqlType != SQL_NUMERIC && param->SqlType !=
SQL_DECIMAL )
                 sprintf(buff,"%.17e",*((float*) data));
-			else
+            else
                 // We should perpare this data for string comparison
                 sprintf(buff,"%.15e",*((float*) data));
             length= strlen(data= buff);
             break;
         case SQL_C_DOUBLE:
-            if( param->SqlType != SQL_NUMERIC && param->SqlType !=
SQL_DECIMAL )
+            if ( param->SqlType != SQL_NUMERIC && param->SqlType !=
SQL_DECIMAL )
                 sprintf(buff,"%.17e",*((double*) data));
-			else
+            else
                 // We should perpare this data for string comparison
                 sprintf(buff,"%.15e",*((double*) data));
             length= strlen(data= buff);
@@ -694,9 +692,9 @@
     ulong offset= 0;
     MYODBCDbgEnter("SQLNativeSql");
     MYODBCDbgReturn(copy_lresult(SQL_HANDLE_DBC, hdbc,
-                                    szSqlStr,cbSqlStrMax,pcbSqlStr,
-                                    (char*) szSqlStrIn, cbSqlStrIn,0L,0L,
-                                    &offset,0));
+                                 szSqlStr,cbSqlStrMax,pcbSqlStr,
+                                 (char*) szSqlStrIn, cbSqlStrIn,0L,0L,
+                                 &offset,0));
 }
 
 

Modified: myodbc3/options.c
===================================================================
--- myodbc3/options.c	2006-03-09 06:22:51 UTC (rev 45)
+++ myodbc3/options.c	2006-03-10 08:13:24 UTC (rev 46)
@@ -46,6 +46,7 @@
  ****************************************************************************/
 
 #include "myodbc3.h"
+#include "errmsg.h"
 
 /*
   @type    : myodbc3 internal
@@ -53,119 +54,120 @@
 */
 
 static SQLRETURN set_constmt_attr(SQLSMALLINT  HandleType,
-				  SQLHANDLE    Handle,
-				  STMT_OPTIONS *options,
-				  SQLINTEGER   Attribute,
-				  SQLPOINTER   ValuePtr)
+                                  SQLHANDLE    Handle,
+                                  STMT_OPTIONS *options,
+                                  SQLINTEGER   Attribute,
+                                  SQLPOINTER   ValuePtr)
 {
-  MYODBCDbgEnter("set_constmt_attr");
+    MYODBCDbgEnter("set_constmt_attr");
 
-  switch(Attribute) {
+    switch (Attribute)
+    {
+        
+        case SQL_ATTR_ASYNC_ENABLE:
+            if ((SQLUINTEGER)ValuePtr == SQL_ASYNC_ENABLE_ON)
+                MYODBCDbgReturn(set_handle_error(HandleType,Handle,MYERR_01S02,
+                                                 "Doesn't support asynchronous, changed
to default",0));
+            break;
 
-  case SQL_ATTR_ASYNC_ENABLE:
-    if ((SQLUINTEGER)ValuePtr == SQL_ASYNC_ENABLE_ON)
-      MYODBCDbgReturn(set_handle_error(HandleType,Handle,MYERR_01S02,
-				   "Doesn't support asynchronous, changed to default",0));
-    break;
+        case SQL_ATTR_CURSOR_SENSITIVITY:
+            if ((SQLUINTEGER)ValuePtr != SQL_UNSPECIFIED)
+            {
+                MYODBCDbgReturn(set_handle_error(HandleType,Handle,MYERR_01S02,
+                                                 "Option value changed to default cursor
sensitivity(unspecified)",0));
+            }
+            break;
 
-  case SQL_ATTR_CURSOR_SENSITIVITY:
-    if ((SQLUINTEGER)ValuePtr != SQL_UNSPECIFIED)
-    {
-      MYODBCDbgReturn(set_handle_error(HandleType,Handle,MYERR_01S02,
-				   "Option value changed to default cursor sensitivity(unspecified)",0));
-    }
-    break;
+        case SQL_ATTR_CURSOR_TYPE:
+            if (((STMT FAR*)Handle)->dbc->flag & FLAG_FORWARD_CURSOR)
+            {
+                options->cursor_type= SQL_CURSOR_FORWARD_ONLY;
+                if ((SQLUINTEGER) ValuePtr != SQL_CURSOR_FORWARD_ONLY)
+                    MYODBCDbgReturn(set_handle_error(HandleType,Handle,MYERR_01S02,
+                                                     "Forcing the use of forward-only
cursor)",0));
+            }
+            else if (((STMT FAR*)Handle)->dbc->flag & FLAG_DYNAMIC_CURSOR)
+            {
+                if ((SQLUINTEGER) ValuePtr != SQL_CURSOR_KEYSET_DRIVEN)
+                    options->cursor_type= (SQLUINTEGER)ValuePtr;
 
-  case SQL_ATTR_CURSOR_TYPE:
-    if (((STMT FAR*)Handle)->dbc->flag & FLAG_FORWARD_CURSOR)
-    {
-      options->cursor_type= SQL_CURSOR_FORWARD_ONLY;
-      if ((SQLUINTEGER) ValuePtr != SQL_CURSOR_FORWARD_ONLY)
-	MYODBCDbgReturn(set_handle_error(HandleType,Handle,MYERR_01S02,
-				     "Forcing the use of forward-only cursor)",0));
-    }
-    else if (((STMT FAR*)Handle)->dbc->flag & FLAG_DYNAMIC_CURSOR)
-    {
-      if ((SQLUINTEGER) ValuePtr != SQL_CURSOR_KEYSET_DRIVEN)
-	options->cursor_type= (SQLUINTEGER)ValuePtr;
+                else
+                {
+                    options->cursor_type= SQL_CURSOR_STATIC;
+                    MYODBCDbgReturn(set_handle_error(HandleType,Handle,MYERR_01S02,
+                                                     "Option value changed to default
static cursor",0));
+                }
+            }
+            else
+            {
+                if ((SQLUINTEGER) ValuePtr == SQL_CURSOR_FORWARD_ONLY ||
+                    (SQLUINTEGER) ValuePtr == SQL_CURSOR_STATIC)
+                    options->cursor_type= (SQLUINTEGER)ValuePtr;
 
-      else
-      {
-	options->cursor_type= SQL_CURSOR_STATIC;
-	MYODBCDbgReturn(set_handle_error(HandleType,Handle,MYERR_01S02,
-				     "Option value changed to default static cursor",0));
-      }
-    }
-    else
-    {
-      if ((SQLUINTEGER) ValuePtr == SQL_CURSOR_FORWARD_ONLY ||
-	  (SQLUINTEGER) ValuePtr == SQL_CURSOR_STATIC)
-	options->cursor_type= (SQLUINTEGER)ValuePtr;
+                else
+                {
+                    options->cursor_type= SQL_CURSOR_STATIC;
+                    MYODBCDbgReturn(set_handle_error(HandleType,Handle,MYERR_01S02,
+                                                     "Option value changed to default
static cursor",0));
+                }
+            }
+            break;
 
-      else
-      {
-	options->cursor_type= SQL_CURSOR_STATIC;
-	MYODBCDbgReturn(set_handle_error(HandleType,Handle,MYERR_01S02,
-				     "Option value changed to default static cursor",0));
-      }
-    }
-    break;
+        case SQL_ATTR_MAX_LENGTH:
+            options->max_length= (SQLUINTEGER) ValuePtr;
+            break;
 
-  case SQL_ATTR_MAX_LENGTH:
-    options->max_length= (SQLUINTEGER) ValuePtr;
-    break;
+        case SQL_ATTR_MAX_ROWS:
+            options->max_rows= (SQLUINTEGER) ValuePtr;
+            break;
 
-  case SQL_ATTR_MAX_ROWS:
-    options->max_rows= (SQLUINTEGER) ValuePtr;
-    break;
+        case SQL_ATTR_METADATA_ID:
+            if ((SQLUINTEGER)ValuePtr == SQL_TRUE)
+                MYODBCDbgReturn(set_handle_error(HandleType,Handle,MYERR_01S02,
+                                                 "Doesn't support SQL_ATTR_METADATA_ID to
true, changed to default",0));
+            break;
 
-  case SQL_ATTR_METADATA_ID:
-    if ((SQLUINTEGER)ValuePtr == SQL_TRUE)
-      MYODBCDbgReturn(set_handle_error(HandleType,Handle,MYERR_01S02,
-				   "Doesn't support SQL_ATTR_METADATA_ID to true, changed to default",0));
-    break;
+        case SQL_ATTR_RETRIEVE_DATA:
+            MYODBCDbgPrint("info",("SQL_ATTR_RETRIEVE_DATA value is ignored"));
+            break;
 
-  case SQL_ATTR_RETRIEVE_DATA:
-    MYODBCDbgPrint("info",("SQL_ATTR_RETRIEVE_DATA value is ignored"));
-    break;
+        case SQL_ATTR_ROW_BIND_TYPE:
+            options->bind_type= (SQLUINTEGER) ValuePtr;
+            break;
 
-  case SQL_ATTR_ROW_BIND_TYPE:
-    options->bind_type= (SQLUINTEGER) ValuePtr;
-    break;
+        case SQL_ATTR_SIMULATE_CURSOR:
+            if ((SQLUINTEGER)ValuePtr != SQL_SC_TRY_UNIQUE)
+                MYODBCDbgReturn(set_handle_error(HandleType,Handle,MYERR_01S02,
+                                                 "Option value changed to default cursor
simulation",0));
+            break;
 
-  case SQL_ATTR_SIMULATE_CURSOR:
-    if ((SQLUINTEGER)ValuePtr != SQL_SC_TRY_UNIQUE)
-      MYODBCDbgReturn(set_handle_error(HandleType,Handle,MYERR_01S02,
-				   "Option value changed to default cursor simulation",0));
-    break;
+        case SQL_ATTR_ROW_BIND_OFFSET_PTR:
+            options->bind_offset= (SQLINTEGER *)ValuePtr;
+            break;
 
-  case SQL_ATTR_ROW_BIND_OFFSET_PTR:
-    options->bind_offset= (SQLINTEGER *)ValuePtr;
-    break;
+        case 1226:/* MS SQL Server Extension */
+        case 1227:
+        case 1228:
+            break;
 
-  case 1226:/* MS SQL Server Extension */
-  case 1227:
-  case 1228:
-    break;
+        case SQL_ATTR_QUERY_TIMEOUT:
+        case SQL_ATTR_KEYSET_SIZE:
+        case SQL_ATTR_CONCURRENCY:
+        case SQL_ATTR_NOSCAN:
+        case SQL_ATTR_ROW_OPERATION_PTR: /* need to support this ....*/
+            MYODBCDbgPrint("info",("Attribute, %d is ignored", Attribute));
+            break;
 
-  case SQL_ATTR_QUERY_TIMEOUT:
-  case SQL_ATTR_KEYSET_SIZE:
-  case SQL_ATTR_CONCURRENCY:
-  case SQL_ATTR_NOSCAN:
-  case SQL_ATTR_ROW_OPERATION_PTR: /* need to support this ....*/
-    MYODBCDbgPrint("info",("Attribute, %d is ignored", Attribute));
-    break;
+        case SQL_ATTR_FETCH_BOOKMARK_PTR:
+        case SQL_ATTR_USE_BOOKMARKS:
+            MYODBCDbgReturn(set_handle_error(HandleType,Handle,MYERR_S1C00,NULL,0));
+            break;
 
-  case SQL_ATTR_FETCH_BOOKMARK_PTR:
-  case SQL_ATTR_USE_BOOKMARKS:
-    MYODBCDbgReturn(set_handle_error(HandleType,Handle,MYERR_S1C00,NULL,0));
-    break;
-
-  default:
-    MYODBCDbgPrint("info",("Attribute, %d is ignored", Attribute));
-    break;
-  }
-  MYODBCDbgReturn(SQL_SUCCESS);
+        default:
+            MYODBCDbgPrint("info",("Attribute, %d is ignored", Attribute));
+            break;
+    }
+    MYODBCDbgReturn(SQL_SUCCESS);
 }
 
 
@@ -176,95 +178,96 @@
 
 static SQLRETURN
 get_constmt_attr(SQLSMALLINT  HandleType,
-		 SQLHANDLE    Handle,
-		 STMT_OPTIONS *options,
-		 SQLINTEGER   Attribute,
-		 SQLPOINTER   ValuePtr,
-		 SQLINTEGER   *StringLengthPtr __attribute__((unused)))
+                 SQLHANDLE    Handle,
+                 STMT_OPTIONS *options,
+                 SQLINTEGER   Attribute,
+                 SQLPOINTER   ValuePtr,
+                 SQLINTEGER   *StringLengthPtr __attribute__((unused)))
 {
-  MYODBCDbgEnter("get_constmt_attr");
+    MYODBCDbgEnter("get_constmt_attr");
 
-  switch(Attribute) {
+    switch (Attribute)
+    {
+        
+        case SQL_ATTR_ASYNC_ENABLE:
+            *((SQLUINTEGER *) ValuePtr)= SQL_ASYNC_ENABLE_OFF;
+            break;
 
-  case SQL_ATTR_ASYNC_ENABLE:
-    *((SQLUINTEGER *) ValuePtr)= SQL_ASYNC_ENABLE_OFF;
-    break;
+        case SQL_ATTR_CURSOR_SENSITIVITY:
+            *((SQLUINTEGER *) ValuePtr)= SQL_UNSPECIFIED;
+            break;
 
-  case SQL_ATTR_CURSOR_SENSITIVITY:
-    *((SQLUINTEGER *) ValuePtr)= SQL_UNSPECIFIED;
-    break;
+        case SQL_ATTR_CURSOR_TYPE:
+            *((SQLUINTEGER *) ValuePtr)= options->cursor_type;
+            break;
 
-  case SQL_ATTR_CURSOR_TYPE:
-    *((SQLUINTEGER *) ValuePtr)= options->cursor_type;
-    break;
+        case SQL_ATTR_MAX_LENGTH:
+            *((SQLUINTEGER *) ValuePtr)= options->max_length;
+            break;
 
-  case SQL_ATTR_MAX_LENGTH:
-    *((SQLUINTEGER *) ValuePtr)= options->max_length;
-    break;
+        case SQL_ATTR_MAX_ROWS:
+            *((SQLUINTEGER *) ValuePtr)= options->max_rows;
+            break;
 
-  case SQL_ATTR_MAX_ROWS:
-    *((SQLUINTEGER *) ValuePtr)= options->max_rows;
-    break;
+        case SQL_ATTR_METADATA_ID:
+            *((SQLUINTEGER *) ValuePtr)= SQL_FALSE;
+            break;
 
-  case SQL_ATTR_METADATA_ID:
-    *((SQLUINTEGER *) ValuePtr)= SQL_FALSE;
-    break;
+        case SQL_ATTR_QUERY_TIMEOUT:
+            *((SQLUINTEGER *) ValuePtr)= SQL_QUERY_TIMEOUT_DEFAULT;
+            break;
 
-  case SQL_ATTR_QUERY_TIMEOUT:
-    *((SQLUINTEGER *) ValuePtr)= SQL_QUERY_TIMEOUT_DEFAULT;
-    break;
+        case SQL_ATTR_RETRIEVE_DATA:
+            *((SQLUINTEGER *) ValuePtr)= SQL_RD_DEFAULT;
+            break;
 
-  case SQL_ATTR_RETRIEVE_DATA:
-    *((SQLUINTEGER *) ValuePtr)= SQL_RD_DEFAULT;
-    break;
+        case SQL_ATTR_ROW_BIND_TYPE:
+            *((SQLUINTEGER *) ValuePtr)= options->bind_type;
+            break;
 
-  case SQL_ATTR_ROW_BIND_TYPE:
-    *((SQLUINTEGER *) ValuePtr)= options->bind_type;
-    break;
+        case SQL_ATTR_SIMULATE_CURSOR:
+            *((SQLUINTEGER *) ValuePtr)= SQL_SC_TRY_UNIQUE;
+            break;
 
-  case SQL_ATTR_SIMULATE_CURSOR:
-    *((SQLUINTEGER *) ValuePtr)= SQL_SC_TRY_UNIQUE;
-    break;
+        case SQL_ATTR_CONCURRENCY:
+            *((SQLUINTEGER *) ValuePtr)= SQL_CONCUR_READ_ONLY;
+            break;
 
-  case SQL_ATTR_CONCURRENCY:
-    *((SQLUINTEGER *) ValuePtr)= SQL_CONCUR_READ_ONLY;
-    break;
+        case SQL_KEYSET_SIZE:
+            *((SQLUINTEGER *) ValuePtr)= 0L;
+            break;
 
-  case SQL_KEYSET_SIZE:
-    *((SQLUINTEGER *) ValuePtr)= 0L;
-    break;
+        case SQL_ROWSET_SIZE:
+            *(SQLUINTEGER *)ValuePtr= options->rows_in_set;
+            break;
 
-  case SQL_ROWSET_SIZE:
-    *(SQLUINTEGER *)ValuePtr= options->rows_in_set;
-    break;
+        case SQL_NOSCAN:
+            *((SQLUINTEGER *) ValuePtr)= SQL_NOSCAN_ON;
+            break;
 
-  case SQL_NOSCAN:
-    *((SQLUINTEGER *) ValuePtr)= SQL_NOSCAN_ON;
-    break;
+        case SQL_ATTR_ROW_BIND_OFFSET_PTR:
+            *((SQLINTEGER *) ValuePtr)= options->bind_offset ?
+                                        *(options->bind_offset):
+                                        0;
+            break;
 
-  case SQL_ATTR_ROW_BIND_OFFSET_PTR:
-    *((SQLINTEGER *) ValuePtr)= options->bind_offset ?
-      *(options->bind_offset):
-      0;
-    break;
+        case SQL_ATTR_ROW_OPERATION_PTR: /* need to support this ....*/
+            MYODBCDbgPrint("info",("Attribute, %d is ignored", Attribute));
+            MYODBCDbgReturn(SQL_SUCCESS_WITH_INFO);
 
-  case SQL_ATTR_ROW_OPERATION_PTR: /* need to support this ....*/
-    MYODBCDbgPrint("info",("Attribute, %d is ignored", Attribute));
-    MYODBCDbgReturn(SQL_SUCCESS_WITH_INFO);
+        case SQL_ATTR_FETCH_BOOKMARK_PTR:
+        case SQL_ATTR_USE_BOOKMARKS:
+            MYODBCDbgReturn(set_handle_error(HandleType,Handle,MYERR_S1C00,NULL,0));
 
-  case SQL_ATTR_FETCH_BOOKMARK_PTR:
-  case SQL_ATTR_USE_BOOKMARKS:
-    MYODBCDbgReturn(set_handle_error(HandleType,Handle,MYERR_S1C00,NULL,0));
+        case 1226:/* MS SQL Server Extension */
+        case 1227:
+        case 1228:
+            break;
 
-  case 1226:/* MS SQL Server Extension */
-  case 1227:
-  case 1228:
-    break;
-
-  default:
-    MYODBCDbgPrint("error",("Invalid attribute/option identifier:%d", Attribute));
-  }
-  MYODBCDbgReturn(SQL_SUCCESS);
+        default:
+            MYODBCDbgPrint("error",("Invalid attribute/option identifier:%d",
Attribute));
+    }
+    MYODBCDbgReturn(SQL_SUCCESS);
 }
 
 
@@ -288,7 +291,7 @@
         
         case SQL_ATTR_ACCESS_MODE:
             MYODBCDbgPrint("info",("SQL_ATTR_ACCESS_MODE %ld ignored",
-                               (SQLUINTEGER)ValuePtr));
+                                   (SQLUINTEGER)ValuePtr));
             break;
 
         case SQL_ATTR_AUTOCOMMIT:
@@ -301,7 +304,7 @@
                 }
                 if (!(trans_supported(dbc)) || (dbc->flag & FLAG_NO_TRANSACTIONS))
                     MYODBCDbgReturn(set_conn_error(dbc,MYERR_S1C00,
-                                               "Transactions are not enabled", 4000));
+                                                   "Transactions are not enabled",
4000));
 
                 if (autocommit_on(dbc))
                     MYODBCDbgReturn(odbc_stmt(dbc,"SET AUTOCOMMIT=0"));
@@ -319,7 +322,7 @@
             {
                 uint timeout= (SQLUINTEGER)ValuePtr;
                 MYODBCDbgReturn(mysql_options(&dbc->mysql,
MYSQL_OPT_CONNECT_TIMEOUT,
-                                          (const char *)&timeout));
+                                              (const char *)&timeout));
             }
             break;
 
@@ -360,7 +363,7 @@
             if ((dbc->flag & FLAG_FORWARD_CURSOR) &&
                 (SQLUINTEGER)ValuePtr != SQL_CUR_USE_ODBC)
                 MYODBCDbgReturn(set_conn_error(hdbc,MYERR_01S02,
-                                           "Forcing the Driver Manager to use ODBC cursor
library",0));
+                                               "Forcing the Driver Manager to use ODBC
cursor library",0));
             break;
 
         case SQL_OPT_TRACE:
@@ -422,117 +425,120 @@
   @purpose : returns the connection attribute values
 */
 
-static SQLRETURN get_con_attr(SQLHDBC	 hdbc,
-			      SQLINTEGER Attribute,
-			      SQLPOINTER ValuePtr,
-			      SQLINTEGER BufferLength,
-			      SQLINTEGER *StringLengthPtr)
+static SQLRETURN get_con_attr(SQLHDBC    hdbc,
+                              SQLINTEGER Attribute,
+                              SQLPOINTER ValuePtr,
+                              SQLINTEGER BufferLength,
+                              SQLINTEGER *StringLengthPtr)
 {
-  DBC FAR *dbc= (DBC FAR*) hdbc;
-  SQLRETURN result= SQL_SUCCESS;
-  SQLINTEGER strlen;
-  SQLPOINTER vparam= 0;
-  MYODBCDbgEnter("SQLGetConnectAttr");
-  MYODBCDbgPrint("enter",
-	     ("Atrr: %d, ValuePtr: 0x%lx, BufLen: %d, StrLenPtr: 0x%lx",
-	      Attribute,ValuePtr,BufferLength, StringLengthPtr));
+    DBC FAR *dbc= (DBC FAR*) hdbc;
+    SQLRETURN result= SQL_SUCCESS;
+    SQLINTEGER strlen;
+    SQLPOINTER vparam= 0;
+    MYODBCDbgEnter("SQLGetConnectAttr");
+    MYODBCDbgPrint("enter",
+                   ("Atrr: %d, ValuePtr: 0x%lx, BufLen: %d, StrLenPtr: 0x%lx",
+                    Attribute,ValuePtr,BufferLength, StringLengthPtr));
 
-  if (!ValuePtr)
-    ValuePtr= vparam;
+    if (!ValuePtr)
+        ValuePtr= vparam;
 
-  if (!StringLengthPtr)
-    StringLengthPtr= &strlen;
+    if (!StringLengthPtr)
+        StringLengthPtr= &strlen;
 
-  switch(Attribute) {
+    switch (Attribute)
+    {
+        
+        case SQL_ATTR_ACCESS_MODE:
+            *((SQLUINTEGER *) ValuePtr)= SQL_MODE_READ_WRITE;
+            break;
 
-  case SQL_ATTR_ACCESS_MODE:
-    *((SQLUINTEGER *) ValuePtr)= SQL_MODE_READ_WRITE;
-    break;
+        case SQL_ATTR_AUTO_IPD:
+            *((SQLUINTEGER *) ValuePtr)= SQL_FALSE;
+            break;
 
-  case SQL_ATTR_AUTO_IPD:
-    *((SQLUINTEGER *) ValuePtr)= SQL_FALSE;
-    break;
+        case SQL_ATTR_AUTOCOMMIT:
+            *((SQLUINTEGER *)ValuePtr)= (autocommit_on(dbc) ||
+                                         !(trans_supported(dbc)) ?
+                                         SQL_AUTOCOMMIT_ON :
+                                         SQL_AUTOCOMMIT_OFF);
+            break;
 
-  case SQL_ATTR_AUTOCOMMIT:
-    *((SQLUINTEGER *)ValuePtr)= (autocommit_on(dbc) ||
-				 !(trans_supported(dbc)) ?
-				 SQL_AUTOCOMMIT_ON :
-				 SQL_AUTOCOMMIT_OFF);
-    break;
+        case SQL_ATTR_CONNECTION_DEAD:
+            {
+                if ( mysql_ping( &dbc->mysql ) && mysql_errno(
&dbc->mysql ) == CR_SERVER_LOST )
+                    *((SQLUINTEGER *) ValuePtr)= SQL_CD_TRUE;
+                else
+                    *((SQLUINTEGER *) ValuePtr)= SQL_CD_FALSE;
+            }
+            break;
 
-  case SQL_ATTR_CONNECTION_DEAD:
-    if (check_if_server_is_alive(dbc))
-      *((SQLUINTEGER *) ValuePtr)= SQL_CD_TRUE;
-    else
-      *((SQLUINTEGER *) ValuePtr)= SQL_CD_FALSE;
-    break;
-
-  case SQL_ATTR_CONNECTION_TIMEOUT:
+        case SQL_ATTR_CONNECTION_TIMEOUT:
 #if MYSQL_VERSION_ID < 40003
-    *((SQLUINTEGER *) ValuePtr)= dbc->mysql.net.timeout;
+            *((SQLUINTEGER *) ValuePtr)= dbc->mysql.net.timeout;
 #else
-    *((SQLUINTEGER *) ValuePtr)= dbc->mysql.net.read_timeout;
+            *((SQLUINTEGER *) ValuePtr)= dbc->mysql.net.read_timeout;
 #endif
-    break;
+            break;
 
-    case SQL_ATTR_CURRENT_CATALOG:
+        case SQL_ATTR_CURRENT_CATALOG:
 
-    if (reget_current_catalog(dbc))
-    {
-        result= SQL_ERROR;
-    }
-    else
-    {
-        *StringLengthPtr= (SQLSMALLINT) (strmake((char*)ValuePtr,dbc->database,
-                             BufferLength) -
-                         (char*) ValuePtr);
-    }
-    break;
+            if (reget_current_catalog(dbc))
+            {
+                result= SQL_ERROR;
+            }
+            else
+            {
+                *StringLengthPtr= (SQLSMALLINT)
(strmake((char*)ValuePtr,dbc->database,
+                                                         BufferLength) -
+                                                 (char*) ValuePtr);
+            }
+            break;
 
-  case SQL_ATTR_LOGIN_TIMEOUT:
-    *((SQLUINTEGER *) ValuePtr)= dbc->login_timeout;
-    break;
+        case SQL_ATTR_LOGIN_TIMEOUT:
+            *((SQLUINTEGER *) ValuePtr)= dbc->login_timeout;
+            break;
 
-  case SQL_ATTR_ODBC_CURSORS:
-    if ((dbc->flag & FLAG_FORWARD_CURSOR))
-      *((SQLUINTEGER *) ValuePtr)= SQL_CUR_USE_ODBC;
-    else
-      *((SQLUINTEGER *) ValuePtr)= SQL_CUR_USE_IF_NEEDED;
-    break;
+        case SQL_ATTR_ODBC_CURSORS:
+            if ((dbc->flag & FLAG_FORWARD_CURSOR))
+                *((SQLUINTEGER *) ValuePtr)= SQL_CUR_USE_ODBC;
+            else
+                *((SQLUINTEGER *) ValuePtr)= SQL_CUR_USE_IF_NEEDED;
+            break;
 
-  case SQL_OPT_TRACE:
-  case SQL_OPT_TRACEFILE:
-  case SQL_QUIET_MODE:
-  case SQL_TRANSLATE_DLL:
-  case SQL_TRANSLATE_OPTION:
-  {
-    char buff[100];
-    sprintf(buff,
-	    "Suppose to get this attribute '%d' through driver manager, not by the driver",
-	    (int) Attribute);
-    result= set_conn_error(hdbc,MYERR_01S02,buff,0);
-    break;
-  }
+        case SQL_OPT_TRACE:
+        case SQL_OPT_TRACEFILE:
+        case SQL_QUIET_MODE:
+        case SQL_TRANSLATE_DLL:
+        case SQL_TRANSLATE_OPTION:
+            {
+                char buff[100];
+                sprintf(buff,
+                        "Suppose to get this attribute '%d' through driver manager, not
by the driver",
+                        (int) Attribute);
+                result= set_conn_error(hdbc,MYERR_01S02,buff,0);
+                break;
+            }
 
-  case SQL_ATTR_PACKET_SIZE:
-    *((SQLUINTEGER *) ValuePtr)= dbc->mysql.net.max_packet;
-    break;
+        case SQL_ATTR_PACKET_SIZE:
+            *((SQLUINTEGER *) ValuePtr)= dbc->mysql.net.max_packet;
+            break;
 
-  case SQL_ATTR_TXN_ISOLATION:
-    *((SQLINTEGER *) ValuePtr)= dbc->txn_isolation;
-    break;
+        case SQL_ATTR_TXN_ISOLATION:
+            *((SQLINTEGER *) ValuePtr)= dbc->txn_isolation;
+            break;
 
-    /*
-      3.x driver doesn't support any statement attributes
-      at connection level, but to make sure all 2.x apps
-      works fine...lets support it..nothing to loose..
-    */
-  default:
-    result= get_constmt_attr(2,dbc,&dbc->stmt_options,
-			     Attribute,ValuePtr,
-			     StringLengthPtr);
-  }
-  MYODBCDbgReturn(result);
+            /*
+              3.x driver doesn't support any statement attributes
+              at connection level, but to make sure all 2.x apps
+              works fine...lets support it..nothing to loose..
+            */
+        default:
+            result= get_constmt_attr(2,dbc,&dbc->stmt_options,
+                                     Attribute,ValuePtr,
+                                     StringLengthPtr);
+    }
+    MYODBCDbgReturn(result);
 }
 
 
@@ -542,88 +548,89 @@
 */
 
 static SQLRETURN
-set_stmt_attr(SQLHSTMT	 hstmt,
-	      SQLINTEGER Attribute,
-	      SQLPOINTER ValuePtr,
-	      SQLINTEGER StringLengthPtr __attribute__((unused)))
+set_stmt_attr(SQLHSTMT   hstmt,
+              SQLINTEGER Attribute,
+              SQLPOINTER ValuePtr,
+              SQLINTEGER StringLengthPtr __attribute__((unused)))
 {
-  STMT FAR *stmt= (STMT FAR*) hstmt;
-  SQLRETURN result= SQL_SUCCESS;
-  STMT_OPTIONS *options= &stmt->stmt_options;
-  MYODBCDbgEnter("SQLSetStmtAttr");
-  MYODBCDbgPrint("enter",
-	     ("Atrr: %d, ValuePtr: 0x%lx, StrLenPtr: %d",
-	      Attribute,ValuePtr,StringLengthPtr));
+    STMT FAR *stmt= (STMT FAR*) hstmt;
+    SQLRETURN result= SQL_SUCCESS;
+    STMT_OPTIONS *options= &stmt->stmt_options;
+    MYODBCDbgEnter("SQLSetStmtAttr");
+    MYODBCDbgPrint("enter",
+                   ("Atrr: %d, ValuePtr: 0x%lx, StrLenPtr: %d",
+                    Attribute,ValuePtr,StringLengthPtr));
 
-  switch (Attribute) {
+    switch (Attribute)
+    {
+        
+        case SQL_ATTR_CURSOR_SCROLLABLE:
+            if ((SQLUINTEGER)ValuePtr == SQL_NONSCROLLABLE &&
+                options->cursor_type != SQL_CURSOR_FORWARD_ONLY)
+                options->cursor_type= SQL_CURSOR_FORWARD_ONLY;
 
-  case SQL_ATTR_CURSOR_SCROLLABLE:
-    if ((SQLUINTEGER)ValuePtr == SQL_NONSCROLLABLE &&
-	options->cursor_type != SQL_CURSOR_FORWARD_ONLY)
-      options->cursor_type= SQL_CURSOR_FORWARD_ONLY;
+            else if ((SQLUINTEGER)ValuePtr == SQL_SCROLLABLE &&
+                     options->cursor_type == SQL_CURSOR_FORWARD_ONLY)
+                options->cursor_type= SQL_CURSOR_STATIC;
+            break;
 
-    else if ((SQLUINTEGER)ValuePtr == SQL_SCROLLABLE &&
-	     options->cursor_type == SQL_CURSOR_FORWARD_ONLY)
-      options->cursor_type= SQL_CURSOR_STATIC;
-    break;
+        case SQL_ATTR_AUTO_IPD:
+            if ((SQLUINTEGER) ValuePtr != SQL_FALSE)
+                MYODBCDbgReturn(set_error(hstmt,MYERR_01S02,
+                                          "Option value changed to default auto ipd",0));
+            break;
 
-  case SQL_ATTR_AUTO_IPD:
-    if ((SQLUINTEGER) ValuePtr != SQL_FALSE)
-      MYODBCDbgReturn(set_error(hstmt,MYERR_01S02,
-			    "Option value changed to default auto ipd",0));
-    break;
+        case SQL_ATTR_PARAM_STATUS_PTR: /* need to support this ....*/
+            options->paramStatusPtr= (SQLUSMALLINT *)ValuePtr;
+            break;
 
-  case SQL_ATTR_PARAM_STATUS_PTR: /* need to support this ....*/
-    options->paramStatusPtr= (SQLUSMALLINT *)ValuePtr;
-    break;
+        case SQL_ATTR_PARAMS_PROCESSED_PTR: /* need to support this ....*/
+            options->paramProcessedPtr= (SQLUINTEGER *)ValuePtr;
+            break;
 
-  case SQL_ATTR_PARAMS_PROCESSED_PTR: /* need to support this ....*/
-    options->paramProcessedPtr= (SQLUINTEGER *)ValuePtr;
-    break;
+        case SQL_ATTR_PARAMSET_SIZE:
+            if ((SQLUINTEGER)ValuePtr != 1)
+                MYODBCDbgReturn(set_error(hstmt,MYERR_01S02,
+                                          "Option value changed to default parameter
size",
+                                          0));
+            break;
 
-  case SQL_ATTR_PARAMSET_SIZE:
-    if ((SQLUINTEGER)ValuePtr != 1)
-      MYODBCDbgReturn(set_error(hstmt,MYERR_01S02,
-			    "Option value changed to default parameter size",
-			    0));
-    break;
+        case SQL_ATTR_ROW_ARRAY_SIZE:
+        case SQL_ROWSET_SIZE:
+            options->rows_in_set= (SQLUINTEGER)ValuePtr;
+            break;
 
-  case SQL_ATTR_ROW_ARRAY_SIZE:
-  case SQL_ROWSET_SIZE:
-    options->rows_in_set= (SQLUINTEGER)ValuePtr;
-    break;
+        case SQL_ATTR_ROW_NUMBER:
+            MYODBCDbgReturn(set_error(hstmt,MYERR_S1000,
+                                      "Trying to set read-only attribute",0));
+            break;
 
-  case SQL_ATTR_ROW_NUMBER:
-    MYODBCDbgReturn(set_error(hstmt,MYERR_S1000,
-			  "Trying to set read-only attribute",0));
-    break;
+        case SQL_ATTR_ROW_OPERATION_PTR:
+            options->rowOperationPtr= (SQLUSMALLINT *)ValuePtr;
+            break;
 
-  case SQL_ATTR_ROW_OPERATION_PTR:
-    options->rowOperationPtr= (SQLUSMALLINT *)ValuePtr;
-    break;
+        case SQL_ATTR_ROW_STATUS_PTR:
+            options->rowStatusPtr= (SQLUSMALLINT *)ValuePtr;
+            break;
 
-  case SQL_ATTR_ROW_STATUS_PTR:
-    options->rowStatusPtr= (SQLUSMALLINT *)ValuePtr;
-    break;
+        case SQL_ATTR_ROWS_FETCHED_PTR:
+            options->rowsFetchedPtr= (SQLUINTEGER *)ValuePtr;
+            break;
 
-  case SQL_ATTR_ROWS_FETCHED_PTR:
-    options->rowsFetchedPtr= (SQLUINTEGER *)ValuePtr;
-    break;
+        case SQL_ATTR_SIMULATE_CURSOR:
+            options->simulateCursor= (SQLUINTEGER)ValuePtr;
+            break;
 
-  case SQL_ATTR_SIMULATE_CURSOR:
-    options->simulateCursor= (SQLUINTEGER)ValuePtr;
-    break;
-
-    /*
-      3.x driver doesn't support any statement attributes
-      at connection level, but to make sure all 2.x apps
-      works fine...lets support it..nothing to loose..
-    */
-  default:
-    result= set_constmt_attr(3,hstmt,options,
-			     Attribute,ValuePtr);
-  }
-  MYODBCDbgReturn(result);
+            /*
+              3.x driver doesn't support any statement attributes
+              at connection level, but to make sure all 2.x apps
+              works fine...lets support it..nothing to loose..
+            */
+        default:
+            result= set_constmt_attr(3,hstmt,options,
+                                     Attribute,ValuePtr);
+    }
+    MYODBCDbgReturn(result);
 }
 
 
@@ -633,114 +640,115 @@
 */
 
 static SQLRETURN get_stmt_attr(SQLHSTMT   hstmt,
-			       SQLINTEGER Attribute,
-			       SQLPOINTER ValuePtr,
-			       SQLINTEGER BufferLength __attribute__((unused)),
-			       SQLINTEGER *StringLengthPtr)
+                               SQLINTEGER Attribute,
+                               SQLPOINTER ValuePtr,
+                               SQLINTEGER BufferLength __attribute__((unused)),
+                               SQLINTEGER *StringLengthPtr)
 {
-  SQLRETURN result= SQL_SUCCESS;
-  STMT FAR *stmt= (STMT FAR*) hstmt;
-  STMT_OPTIONS *options= &stmt->stmt_options;
-  SQLPOINTER vparam;
-  SQLINTEGER strlen;
-  MYODBCDbgEnter("SQLGetStmtAttr");
-  MYODBCDbgPrint("enter",
-	     ("Atrr: %d, ValuePtr: 0x%lx, BufLen: %d, StrLenPtr: 0x%lx",
-	      Attribute,ValuePtr,BufferLength,StringLengthPtr));
+    SQLRETURN result= SQL_SUCCESS;
+    STMT FAR *stmt= (STMT FAR*) hstmt;
+    STMT_OPTIONS *options= &stmt->stmt_options;
+    SQLPOINTER vparam;
+    SQLINTEGER strlen;
+    MYODBCDbgEnter("SQLGetStmtAttr");
+    MYODBCDbgPrint("enter",
+                   ("Atrr: %d, ValuePtr: 0x%lx, BufLen: %d, StrLenPtr: 0x%lx",
+                    Attribute,ValuePtr,BufferLength,StringLengthPtr));
 
-  if (!ValuePtr)
-    ValuePtr= &vparam;
+    if (!ValuePtr)
+        ValuePtr= &vparam;
 
-  if (!StringLengthPtr)
-    StringLengthPtr= &strlen;
+    if (!StringLengthPtr)
+        StringLengthPtr= &strlen;
 
-  switch(Attribute) {
+    switch (Attribute)
+    {
+        
+        case SQL_ATTR_CURSOR_SCROLLABLE:
+            if (options->cursor_type == SQL_CURSOR_FORWARD_ONLY)
+                *(SQLUINTEGER*)ValuePtr= SQL_NONSCROLLABLE;
+            else
+                *(SQLUINTEGER*)ValuePtr= SQL_SCROLLABLE;
+            break;
 
-  case SQL_ATTR_CURSOR_SCROLLABLE:
-    if (options->cursor_type == SQL_CURSOR_FORWARD_ONLY)
-      *(SQLUINTEGER*)ValuePtr= SQL_NONSCROLLABLE;
-    else
-      *(SQLUINTEGER*)ValuePtr= SQL_SCROLLABLE;
-    break;
+        case SQL_ATTR_AUTO_IPD:
+            *(SQLUINTEGER *)ValuePtr= SQL_FALSE;
+            break;
 
-  case SQL_ATTR_AUTO_IPD:
-    *(SQLUINTEGER *)ValuePtr= SQL_FALSE;
-    break;
+        case SQL_ATTR_PARAM_STATUS_PTR: /* need to support this ....*/
+            ValuePtr= (SQLUSMALLINT *)options->paramStatusPtr;
+            break;
 
-  case SQL_ATTR_PARAM_STATUS_PTR: /* need to support this ....*/
-    ValuePtr= (SQLUSMALLINT *)options->paramStatusPtr;
-    break;
+        case SQL_ATTR_PARAMS_PROCESSED_PTR: /* need to support this ....*/
+            ValuePtr= (SQLUSMALLINT *)options->paramProcessedPtr;
+            break;
 
-  case SQL_ATTR_PARAMS_PROCESSED_PTR: /* need to support this ....*/
-    ValuePtr= (SQLUSMALLINT *)options->paramProcessedPtr;
-    break;
+        case SQL_ATTR_PARAMSET_SIZE:
+            *(SQLUINTEGER *)ValuePtr= 1;
+            break;
 
-  case SQL_ATTR_PARAMSET_SIZE:
-    *(SQLUINTEGER *)ValuePtr= 1;
-    break;
+        case SQL_ATTR_ROW_ARRAY_SIZE:
+            *(SQLUINTEGER *)ValuePtr= options->rows_in_set;
+            break;
 
-  case SQL_ATTR_ROW_ARRAY_SIZE:
-    *(SQLUINTEGER *)ValuePtr= options->rows_in_set;
-    break;
+        case SQL_ATTR_ROW_NUMBER:
+            *(SQLUINTEGER *)ValuePtr= stmt->current_row+1;
+            break;
 
-  case SQL_ATTR_ROW_NUMBER:
-    *(SQLUINTEGER *)ValuePtr= stmt->current_row+1;
-    break;
+        case SQL_ATTR_ROW_OPERATION_PTR: /* need to support this ....*/
+            ValuePtr= (SQLUSMALLINT *)options->rowOperationPtr;
+            break;
 
-  case SQL_ATTR_ROW_OPERATION_PTR: /* need to support this ....*/
-    ValuePtr= (SQLUSMALLINT *)options->rowOperationPtr;
-    break;
+        case SQL_ATTR_ROW_STATUS_PTR:
+            ValuePtr= (SQLUSMALLINT *)options->rowStatusPtr;
+            break;
 
-  case SQL_ATTR_ROW_STATUS_PTR:
-    ValuePtr= (SQLUSMALLINT *)options->rowStatusPtr;
-    break;
+        case SQL_ATTR_ROWS_FETCHED_PTR:
+            ValuePtr= (SQLUINTEGER *)options->rowsFetchedPtr;
+            break;
 
-  case SQL_ATTR_ROWS_FETCHED_PTR:
-    ValuePtr= (SQLUINTEGER *)options->rowsFetchedPtr;
-    break;
+        case SQL_ATTR_SIMULATE_CURSOR:
+            ValuePtr= (SQLUSMALLINT *)options->simulateCursor;
+            break;
 
-  case SQL_ATTR_SIMULATE_CURSOR:
-    ValuePtr= (SQLUSMALLINT *)options->simulateCursor;
-    break;
+            /*
+              To make iODBC and MS ODBC DM to work, return the following cases
+              as success, by just allocating...else
+              - iODBC is hanging at the time of stmt allocation
+              - MS ODB DM is crashing at the time of stmt allocation
+            */
+        case SQL_ATTR_APP_ROW_DESC:
+            *(SQLPOINTER *)ValuePtr= &stmt->ard;
+            *StringLengthPtr= sizeof(SQL_IS_POINTER);
+            break;
 
-    /*
-      To make iODBC and MS ODBC DM to work, return the following cases
-      as success, by just allocating...else
-      - iODBC is hanging at the time of stmt allocation
-      - MS ODB DM is crashing at the time of stmt allocation
-    */
-  case SQL_ATTR_APP_ROW_DESC:
-    *(SQLPOINTER *)ValuePtr= &stmt->ard;
-    *StringLengthPtr= sizeof(SQL_IS_POINTER);
-    break;
+        case SQL_ATTR_IMP_ROW_DESC:
+            *(SQLPOINTER *)ValuePtr= &stmt->ird;
+            *StringLengthPtr= sizeof(SQL_IS_POINTER);
+            break;
 
-  case SQL_ATTR_IMP_ROW_DESC:
-    *(SQLPOINTER *)ValuePtr= &stmt->ird;
-    *StringLengthPtr= sizeof(SQL_IS_POINTER);
-    break;
+        case SQL_ATTR_APP_PARAM_DESC:
+            *(SQLPOINTER *)ValuePtr= &stmt->apd;
+            *StringLengthPtr= sizeof(SQL_IS_POINTER);
+            break;
 
-  case SQL_ATTR_APP_PARAM_DESC:
-    *(SQLPOINTER *)ValuePtr= &stmt->apd;
-    *StringLengthPtr= sizeof(SQL_IS_POINTER);
-    break;
+        case SQL_ATTR_IMP_PARAM_DESC:
+            *(SQLPOINTER *)ValuePtr= &stmt->ipd;
+            *StringLengthPtr= sizeof(SQL_IS_POINTER);
+            break;
 
-  case SQL_ATTR_IMP_PARAM_DESC:
-    *(SQLPOINTER *)ValuePtr= &stmt->ipd;
-    *StringLengthPtr= sizeof(SQL_IS_POINTER);
-    break;
+            /*
+              3.x driver doesn't support any statement attributes
+              at connection level, but to make sure all 2.x apps
+              works fine...lets support it..nothing to loose..
+            */
+        default:
+            result= get_constmt_attr(3,hstmt,options,
+                                     Attribute,ValuePtr,
+                                     StringLengthPtr);
+    }
 
-    /*
-      3.x driver doesn't support any statement attributes
-      at connection level, but to make sure all 2.x apps
-      works fine...lets support it..nothing to loose..
-    */
-  default:
-    result= get_constmt_attr(3,hstmt,options,
-			     Attribute,ValuePtr,
-			     StringLengthPtr);
-  }
-
-  MYODBCDbgReturn(result);
+    MYODBCDbgReturn(result);
 }
 
 
@@ -753,11 +761,11 @@
                                        SQLUSMALLINT fOption,
                                        SQLULEN      vParam )
 {
-  SQLRETURN result= SQL_SUCCESS;
-  MYODBCDbgEnter("SQLSetConnectOption");
+    SQLRETURN result= SQL_SUCCESS;
+    MYODBCDbgEnter("SQLSetConnectOption");
 
-  result= set_con_attr(hdbc,fOption,(SQLPOINTER)vParam,SQL_NTS);
-  MYODBCDbgReturn(result);
+    result= set_con_attr(hdbc,fOption,(SQLPOINTER)vParam,SQL_NTS);
+    MYODBCDbgReturn(result);
 }
 
 
@@ -767,13 +775,13 @@
 */
 
 SQLRETURN SQL_API SQLGetConnectOption(SQLHDBC hdbc,SQLUSMALLINT fOption,
-				      SQLPOINTER vParam)
+                                      SQLPOINTER vParam)
 {
-  SQLRETURN result= SQL_SUCCESS;
-  MYODBCDbgEnter("SQLGetConnectOption");
+    SQLRETURN result= SQL_SUCCESS;
+    MYODBCDbgEnter("SQLGetConnectOption");
 
-  result= get_con_attr(hdbc,fOption,vParam,SQL_NTS,(SQLINTEGER *)NULL);
-  MYODBCDbgReturn(result);
+    result= get_con_attr(hdbc,fOption,vParam,SQL_NTS,(SQLINTEGER *)NULL);
+    MYODBCDbgReturn(result);
 }
 
 
@@ -786,11 +794,11 @@
                                     SQLUSMALLINT    fOption,
                                     SQLULEN         vParam )
 {
-  SQLRETURN result= SQL_SUCCESS;
-  MYODBCDbgEnter("SQLSetStmtOption");
+    SQLRETURN result= SQL_SUCCESS;
+    MYODBCDbgEnter("SQLSetStmtOption");
 
-  result= set_stmt_attr(hstmt,fOption,(SQLPOINTER)vParam,SQL_NTS);
-  MYODBCDbgReturn(result);
+    result= set_stmt_attr(hstmt,fOption,(SQLPOINTER)vParam,SQL_NTS);
+    MYODBCDbgReturn(result);
 }
 
 
@@ -800,13 +808,13 @@
 */
 
 SQLRETURN SQL_API SQLGetStmtOption(SQLHSTMT hstmt,SQLUSMALLINT fOption,
-				   SQLPOINTER vParam)
+                                   SQLPOINTER vParam)
 {
-  SQLRETURN result= SQL_SUCCESS;
-  MYODBCDbgEnter("SQLGetStmtOption");
+    SQLRETURN result= SQL_SUCCESS;
+    MYODBCDbgEnter("SQLGetStmtOption");
 
-  result= get_stmt_attr(hstmt,fOption,vParam,SQL_NTS,(SQLINTEGER *)NULL);
-  MYODBCDbgReturn(result);
+    result= get_stmt_attr(hstmt,fOption,vParam,SQL_NTS,(SQLINTEGER *)NULL);
+    MYODBCDbgReturn(result);
 }
 
 
@@ -816,31 +824,32 @@
 */
 
 SQLRETURN SQL_API
-SQLSetEnvAttr(SQLHENV	 henv,
-	      SQLINTEGER Attribute,
-	      SQLPOINTER ValuePtr,
-	      SQLINTEGER StringLength __attribute__((unused)))
+SQLSetEnvAttr(SQLHENV    henv,
+              SQLINTEGER Attribute,
+              SQLPOINTER ValuePtr,
+              SQLINTEGER StringLength __attribute__((unused)))
 {
-  MYODBCDbgEnter("SQLSetEnvAttr");
-  MYODBCDbgPrint("enter",("Atrr: %d, ValuePtr: 0x%lx",Attribute,ValuePtr));
+    MYODBCDbgEnter("SQLSetEnvAttr");
+    MYODBCDbgPrint("enter",("Atrr: %d, ValuePtr: 0x%lx",Attribute,ValuePtr));
 
-  if (((ENV FAR *)henv)->connections)
-    MYODBCDbgReturn(set_env_error(henv,MYERR_S1010,NULL,0));
+    if (((ENV FAR *)henv)->connections)
+        MYODBCDbgReturn(set_env_error(henv,MYERR_S1010,NULL,0));
 
-  switch (Attribute) {
+    switch (Attribute)
+    {
+        
+        case SQL_ATTR_ODBC_VERSION:
+            ((ENV FAR *)henv)->odbc_ver= (SQLINTEGER)ValuePtr;
+            break;
 
-  case SQL_ATTR_ODBC_VERSION:
-    ((ENV FAR *)henv)->odbc_ver= (SQLINTEGER)ValuePtr;
-    break;
+        case SQL_ATTR_OUTPUT_NTS:
+            if ((SQLINTEGER)ValuePtr == SQL_TRUE)
+                break;
 
-  case SQL_ATTR_OUTPUT_NTS:
-    if ((SQLINTEGER)ValuePtr == SQL_TRUE)
-      break;
-
-  default:
-    MYODBCDbgReturn(set_env_error(henv,MYERR_S1C00,NULL,0));
-  }
-  MYODBCDbgReturn(SQL_SUCCESS);
+        default:
+            MYODBCDbgReturn(set_env_error(henv,MYERR_S1C00,NULL,0));
+    }
+    MYODBCDbgReturn(SQL_SUCCESS);
 }
 
 
@@ -886,11 +895,11 @@
 */
 
 SQLRETURN SQL_API SQLSetConnectAttr(SQLHDBC hdbc,
-				    SQLINTEGER Attribute,
-				    SQLPOINTER ValuePtr,
-				    SQLINTEGER StringLength)
+                                    SQLINTEGER Attribute,
+                                    SQLPOINTER ValuePtr,
+                                    SQLINTEGER StringLength)
 {
-  return set_con_attr(hdbc,Attribute, ValuePtr,StringLength);
+    return set_con_attr(hdbc,Attribute, ValuePtr,StringLength);
 }
 
 /*
@@ -899,13 +908,13 @@
 */
 
 SQLRETURN SQL_API SQLGetConnectAttr(SQLHDBC hdbc,
-				    SQLINTEGER Attribute,
-				    SQLPOINTER ValuePtr,
-				    SQLINTEGER BufferLength,
-				    SQLINTEGER *StringLengthPtr)
+                                    SQLINTEGER Attribute,
+                                    SQLPOINTER ValuePtr,
+                                    SQLINTEGER BufferLength,
+                                    SQLINTEGER *StringLengthPtr)
 {
-  return get_con_attr(hdbc,Attribute, ValuePtr,BufferLength,
-		      StringLengthPtr);
+    return get_con_attr(hdbc,Attribute, ValuePtr,BufferLength,
+                        StringLengthPtr);
 }
 
 /*
@@ -914,11 +923,11 @@
 */
 
 SQLRETURN SQL_API SQLSetStmtAttr(SQLHSTMT   hstmt,
-				 SQLINTEGER Attribute,
-				 SQLPOINTER ValuePtr,
-				 SQLINTEGER StringLength)
+                                 SQLINTEGER Attribute,
+                                 SQLPOINTER ValuePtr,
+                                 SQLINTEGER StringLength)
 {
-  return set_stmt_attr(hstmt, Attribute, ValuePtr, StringLength);
+    return set_stmt_attr(hstmt, Attribute, ValuePtr, StringLength);
 }
 
 /*
@@ -926,11 +935,11 @@
   @purpose : returns the statement attribute values
 */
 SQLRETURN SQL_API SQLGetStmtAttr(SQLHSTMT   hstmt,
-				 SQLINTEGER Attribute,
-				 SQLPOINTER ValuePtr,
-				 SQLINTEGER BufferLength,
-				 SQLINTEGER *StringLengthPtr)
+                                 SQLINTEGER Attribute,
+                                 SQLPOINTER ValuePtr,
+                                 SQLINTEGER BufferLength,
+                                 SQLINTEGER *StringLengthPtr)
 {
-  return get_stmt_attr(hstmt,Attribute, ValuePtr,BufferLength,
-		       StringLengthPtr);
+    return get_stmt_attr(hstmt,Attribute, ValuePtr,BufferLength,
+                         StringLengthPtr);
 }

Modified: myodbc3/utility.c
===================================================================
--- myodbc3/utility.c	2006-03-09 06:22:51 UTC (rev 45)
+++ myodbc3/utility.c	2006-03-10 08:13:24 UTC (rev 46)
@@ -928,17 +928,36 @@
   the server is up with mysql_ping (to force a reconnect)
 */
 
-int check_if_server_is_alive(DBC FAR *dbc)
+int check_if_server_is_alive( DBC FAR *dbc )
 {
-    time_t seconds= (time_t) time((time_t*) 0);
+    time_t seconds= (time_t) time( (time_t*)0 );
     int result= 0;
-    if ( (ulong) (seconds - dbc->last_query_time) >= CHECK_IF_ALIVE )
+
+    if ( (ulong)(seconds - dbc->last_query_time) >= CHECK_IF_ALIVE )
     {
-        if ( mysql_ping(&dbc->mysql) &&
-             mysql_errno(&dbc->mysql) == CR_SERVER_GONE_ERROR )
-            result= 1;
+        if ( mysql_ping( &dbc->mysql ) )
+        {
+            /*  BUG: 14639
+
+                A. The 4.1 doc says when mysql_ping() fails we can get one
+                of the following errors from mysql_errno();
+
+                    CR_COMMANDS_OUT_OF_SYNC
+                    CR_SERVER_GONE_ERROR
+                    CR_UNKNOWN_ERROR   
+
+                But if you do a mysql_ping() after bringing down the server
+                you get CR_SERVER_LOST.
+
+                PAH - 9.MAR.06
+            */
+            
+            if ( mysql_errno( &dbc->mysql ) == CR_SERVER_LOST )
+                result = 1;
+        }
     }
-    dbc->last_query_time= seconds;
+    dbc->last_query_time = seconds;
+
     return result;
 }
 

Thread
Connector/ODBC 3.51 commit: r46 - / myodbc3pharvey10 Mar