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 - / myodbc3 | pharvey | 10 Mar |