summaryrefslogtreecommitdiff
path: root/storage/connect/odbconn.cpp
diff options
context:
space:
mode:
authorOlivier Bertrand <bertrandop@gmail.com>2013-07-11 17:44:15 +0200
committerOlivier Bertrand <bertrandop@gmail.com>2013-07-11 17:44:15 +0200
commitd24e1fc82a13f4f1e12fdd8ee8fdce3d01bd1f1e (patch)
tree20e5bf1bbe2c6bf3212686bf45e6a2432b36b3a3 /storage/connect/odbconn.cpp
parentb3ad9a97e984864c7809f0c2a2847ab35305488c (diff)
downloadmariadb-git-d24e1fc82a13f4f1e12fdd8ee8fdce3d01bd1f1e.tar.gz
- cleaning code and show some functions return code
modified: storage/connect/odbconn.cpp
Diffstat (limited to 'storage/connect/odbconn.cpp')
-rw-r--r--storage/connect/odbconn.cpp281
1 files changed, 20 insertions, 261 deletions
diff --git a/storage/connect/odbconn.cpp b/storage/connect/odbconn.cpp
index 69fddb2d9f8..4d16286ad76 100644
--- a/storage/connect/odbconn.cpp
+++ b/storage/connect/odbconn.cpp
@@ -1209,20 +1209,19 @@ int ODBConn::ExecDirectSQL(char *sql, ODBCCOL *tocols)
RETCODE rc;
HSTMT hstmt;
-//m_Recset = new(m_G) RECSET(this);
-//ASSERT(m_Recset);
-
try {
b = false;
if (m_hstmt) {
- /*RETCODE rc;*/
-
// All this did not seems to make sense and was been commented out
// if (IsOpen())
// Close(SQL_CLOSE);
- /*rc =*/ SQLFreeStmt(m_hstmt, SQL_CLOSE);
+ rc = SQLFreeStmt(m_hstmt, SQL_CLOSE);
+
+ if (trace && !Check(rc))
+ htrc("Error: SQLFreeStmt rc=%d\n", rc);
+
hstmt = m_hstmt;
m_hstmt = NULL;
ThrowDBX(MSG(SEQUENCE_ERROR));
@@ -1339,7 +1338,6 @@ int ODBConn::GetResultSize(char *sql, ODBCCOL *colp)
} // endfor n
} catch(DBX *x) {
-// strcpy(m_G->Message, x->m_ErrMsg[0]);
strcpy(m_G->Message, x->GetErrorMessage(0));
if (trace)
@@ -1515,7 +1513,6 @@ bool ODBConn::BindParam(ODBCCOL *colp)
#endif // 0
buf = colp->GetBuffer(0);
-// len = colp->GetBuflen();
len = IsTypeNum(colp->GetResultType()) ? 0 : colp->GetBuflen();
ct = GetSQLCType(colp->GetResultType());
sqlt = GetSQLType(colp->GetResultType());
@@ -1579,7 +1576,6 @@ bool ODBConn::GetDataSources(PQRYRES qrp)
rv = true;
} // end try/catch
-//SQLFreeEnv(m_henv);
Close();
return rv;
} // end of GetDataSources
@@ -1631,7 +1627,6 @@ bool ODBConn::GetDrivers(PQRYRES qrp)
rv = true;
} // end try/catch
-//SQLFreeEnv(m_henv);
Close();
return rv;
} // end of GetDrivers
@@ -1800,7 +1795,6 @@ int ODBConn::GetCatInfo(CATPARM *cap)
} else // ODBC Ver 3
rc = SQLFetch(hstmt);
-// if (!Check(rc))
if (rc == SQL_NO_DATA_FOUND) {
if (cap->Pat)
sprintf(m_G->Message, MSG(NO_TABCOL_DATA), cap->Tab, cap->Pat);
@@ -1836,270 +1830,35 @@ int ODBConn::GetCatInfo(CATPARM *cap)
/***********************************************************************/
void ODBConn::Close()
{
- /*RETCODE rc;*/
-
-#if 0
- // Close any open recordsets
- AfxLockGlobals(CRIT_ODBC);
- TRY
- {
- while (!m_listRecordsets.IsEmpty())
- {
- CRecordset* pSet = (CRecordset*)m_listRecordsets.GetHead();
- pSet->Close(); // will implicitly remove from list
- pSet->m_pDatabase = NULL;
- }
- }
- CATCH_ALL(e)
- {
- AfxUnlockGlobals(CRIT_ODBC);
- THROW_LAST();
- }
- END_CATCH_ALL
- AfxUnlockGlobals(CRIT_ODBC);
-#endif // 0
+ RETCODE rc;
if (m_hstmt) {
// Is required for multiple tables
- /*rc =*/ SQLFreeStmt(m_hstmt, SQL_DROP);
+ rc = SQLFreeStmt(m_hstmt, SQL_DROP);
m_hstmt = NULL;
} // endif m_hstmt
if (m_hdbc != SQL_NULL_HDBC) {
- /*rc =*/ SQLDisconnect(m_hdbc);
- /*rc =*/ SQLFreeConnect(m_hdbc);
- m_hdbc = SQL_NULL_HDBC;
+ rc = SQLDisconnect(m_hdbc);
-// AfxLockGlobals(CRIT_ODBC);
-// ASSERT(m_nAlloc != 0);
-// m_nAlloc--;
-// AfxUnlockGlobals(CRIT_ODBC);
- } // endif m_hdbc
+ if (trace && rc != SQL_SUCCESS)
+ htrc("Error: SQLDisconnect rc=%d\n", rc);
- if (m_henv != SQL_NULL_HENV) {
- if (trace) {
- RETCODE rc = SQLFreeEnv(m_henv);
-
- if (rc != SQL_SUCCESS) // Nothing we can do
- htrc("Error: SQLFreeEnv failure ignored in Close\n");
-
- } else
- SQLFreeEnv(m_henv);
+ rc = SQLFreeConnect(m_hdbc);
- m_henv = SQL_NULL_HENV;
- } // endif m_henv
+ if (trace && rc != SQL_SUCCESS)
+ htrc("Error: SQLFreeConnect rc=%d\n", rc);
- } // end of Close
-
-#if 0
-// Silently disconnect and free all ODBC resources.
-// Don't throw any exceptions
-void ODBConn::Free()
- {
- // Trap failures upon close
- try {
- Close();
- } catch(DBX*) {
- // Nothing we can do
- if (trace)
- htrc("Error: exception by Close ignored in Free\n");
-
-// DELETE_EXCEPTION(x);
- } // endcatch
+ m_hdbc = SQL_NULL_HDBC;
+ } // endif m_hdbc
- // free henv if refcount goes to 0
-//AfxLockGlobals(CRIT_ODBC);
if (m_henv != SQL_NULL_HENV) {
- ASSERT(m_nAlloc >= 0);
-
- if (m_nAlloc == 0) {
- // free last connection - release HENV
- if (trace) {
- RETCODE rc = SQLFreeEnv(m_henv);
-
- if (rc != SQL_SUCCESS) // Nothing we can do
- htrc("Error: SQLFreeEnv failure ignored in Free\n");
-
- } else
- SQLFreeEnv(m_henv);
+ rc = SQLFreeEnv(m_henv);
- m_henv = SQL_NULL_HENV;
- } // endif m_nAlloc
+ if (trace && rc != SQL_SUCCESS) // Nothing we can do
+ htrc("Error: SQLFreeEnv failure ignored in Close\n");
+
+ m_henv = SQL_NULL_HENV;
} // endif m_henv
-//AfxUnlockGlobals(CRIT_ODBC);
- } // end of Free
-
-//////////////////////////////////////////////////////////////////////////////
-// CRecordset helpers
-
-//id AFXAPI AfxSetCurrentRecord(int* plCurrentRecord, int nRows, RETCODE nRetCode);
-//id AFXAPI AfxSetRecordCount(int* plRecordCount, int lCurrentRecord,
-//bool bEOFSeen, RETCODE nRetCode);
-/***********************************************************************/
-/* RECSET class implementation */
-/***********************************************************************/
-RECSET::RECSET(ODBConn *dbcp)
- {
- m_pDB = dbcp;
- m_hstmt = SQL_NULL_HSTMT;
- m_OpenType = snapshot;
- m_Options = none;
-
-#if 0
- m_lOpen = AFX_RECORDSET_STATUS_UNKNOWN;
- m_nEditMode = noMode;
- m_nDefaultType = snapshot;
-
- m_bAppendable = false;
- m_bUpdatable = false;
- m_bScrollable = false;
- m_bRecordsetDb = false;
- m_bRebindParams = false;
- m_bLongBinaryColumns = false;
- m_nLockMode = optimistic;
- m_dwInitialGetDataLen = 0;
- m_rgODBCFieldInfos = NULL;
- m_rgFieldInfos = NULL;
- m_rgRowStatus = NULL;
- m_dwRowsetSize = 25;
- m_dwAllocatedRowsetSize = 0;
-
- m_nFields = 0;
- m_nParams = 0;
- m_nFieldsBound = 0;
- m_lCurrentRecord = AFX_CURRENT_RECORD_UNDEFINED;
- m_lRecordCount = 0;
- m_bUseUpdateSQL = false;
- m_bUseODBCCursorLib = false;
- m_nResultCols = -1;
- m_bCheckCacheForDirtyFields = true;
-
- m_pbFieldFlags = NULL;
- m_pbParamFlags = NULL;
- m_plParamLength = NULL;
- m_pvFieldProxy = NULL;
- m_pvParamProxy = NULL;
- m_nProxyFields = 0;
- m_nProxyParams = 0;
-
- m_hstmtUpdate = SQL_NULL_HSTMT;
-#endif // 0
- } // end of RECSET constructor
-
-RECSET::~RECSET()
- {
- try {
- if (m_hstmt) {
- if (trace && (m_dwOptions & useMultiRowFetch)) {
- htrc("WARNING: Close called implicitly from destructor\n");
- htrc("Use of multi row fetch requires explicit call\n");
- htrc("to Close or memory leaks will result\n");
- } // endif trace
-
- Close();
- } // endif m_hstmt
-
-// if (m_bRecordsetDb)
-// delete m_pDB; ??????
-
- m_pDB = NULL;
- } catch(DBX*) {
- // Nothing we can do
- if (trace)
- htrc("Error: Exception ignored in ~RECSET\n");
-
- } // endtry/catch
-
- } // end of ~RECSET
-
-/***********************************************************************/
-/* Open: this function does the following: */
-/* Allocates the hstmt, */
-/* Bind columns, */
-/* Execute the SQL statement */
-/***********************************************************************/
-bool RECSET::Open(PSZ sql, uint Type, DWORD options)
- {
- ASSERT(m_pDB && m_pDB->IsOpen());
- ASSERT(Type == DB_USE_DEFAULT_TYPE || Type == dynaset ||
- Type == snapshot || Type == forwardOnly || Type == dynamic);
-//ASSERT(!(options & readOnly && options & appendOnly));
-
- // Cache state info and allocate hstmt
- SetState(Type, sql, options);
-
- try {
- if (m_hstmt) {
- if (IsOpen())
- Close(SQL_CLOSE);
-
- } else {
- RETCODE rc = SQLAllocStmt(m_pDB->m_hdbc, &m_hstmt);
-
- if (!Check(rc))
- ThrowDBException(SQL_INVALID_HANDLE);
-
- } // endif m_hstmt
-
- m_pDB->OnSetOptions(m_hstmt);
-
- // Allocate the field/param status arrays, if necessary
-// bool bUnbound = false;
-
-// if (m_nFields > 0 || m_nParams > 0)
-// AllocStatusArrays();
-// else
-// bUnbound = true;
-
- // Build SQL and prep/execute or just execute direct
-// BuildSQL(sql);
- PrepareAndExecute(sql);
-
- // Cache some field info and prepare the rowset
- AllocAndCacheFieldInfo();
- AllocRowset();
-
- // If late binding, still need to allocate status arrays
-// if (bUnbound && (m_nFields > 0 || m_nParams > 0))
-// AllocStatusArrays();
-
- } catch(DBX *x) {
- Close(SQL_DROP);
-// strcpy(m_pDB->m_G->Message, x->GetErrorMessage[0]);
- strcpy(m_pDB->m_G->Message, x->GetErrorMessage(0));
- return true;
- } // endtry/catch
-
- return false;
- } // end of Open
-
-/***********************************************************************/
-/* Close a hstmt. */
-/***********************************************************************/
-void RECSET::Close(SWORD option)
- {
- if (m_hstmt != SQL_NULL_HSTMT) {
- RETCODE rc = SQLFreeStmt(m_hstmt, option);
-
- if (option == SQL_DROP)
- m_hstmt = SQL_NULL_HSTMT;
-
- } // endif m_hstmt
-
-#if 0
- m_lOpen = RECORDSET_STATUS_CLOSED;
- m_bBOF = true;
- m_bEOF = true;
- m_bDeleted = false;
- m_bAppendable = false;
- m_bUpdatable = false;
- m_bScrollable = false;
- m_bRebindParams = false;
- m_bLongBinaryColumns = false;
- m_nLockMode = optimistic;
- m_nFieldsBound = 0;
- m_nResultCols = -1;
-#endif // 0
} // end of Close
-#endif // 0