From 0f017b0a56a928b86ef2eb3f047d5fb076318d3a Mon Sep 17 00:00:00 2001 From: prabatuty Date: Thu, 17 Mar 2011 01:03:53 +0000 Subject: [PATCH] reorg for cache modulew --- include/CacheTableLoader.h | 2 ++ src/cache/CacheTableLoader.cxx | 82 +++++++++++++++++++++++++++++++++--------- 2 files changed, 67 insertions(+), 17 deletions(-) diff --git a/include/CacheTableLoader.h b/include/CacheTableLoader.h index 561c89c6..eb8b9a39 100644 --- a/include/CacheTableLoader.h +++ b/include/CacheTableLoader.h @@ -42,6 +42,8 @@ class DllExport CacheTableLoader bool prepareCreateIndexStatement(SQLHSTMT hstmtmeta, char *crtIdxStmt, TDBInfo tdbName, HashIndexInitInfo *inf); DbRetVal prepareCreateTableStatement(char *crtTblStmt, SQLHSTMT hstmt, HashIndexInitInfo *inf, int totalFields, TDBInfo tdbName, bool &isKeyFld); void prepareInsertStatement(AbsSqlStatement *stmt, List *fNameList, char *insStmt); + DbRetVal hasRecords(DatabaseManager *dbMgr,const char* tableName); + DbRetVal connect(void *&, void*&, void*&, char*, char*); bool shouldForce; public: CacheTableLoader() diff --git a/src/cache/CacheTableLoader.cxx b/src/cache/CacheTableLoader.cxx index 401d4ea8..cc7908aa 100644 --- a/src/cache/CacheTableLoader.cxx +++ b/src/cache/CacheTableLoader.cxx @@ -36,24 +36,14 @@ DbRetVal CacheTableLoader::load(bool tabDefinition) DatabaseManager *dbMgr = con->getConnObject().getDatabaseManager(); dbMgr->setCanTakeCheckPoint(false); if (tabDefinition == false) { - Table *tbl = dbMgr->openTable(tableName); - if (tbl == NULL) { - dbMgr->setCanTakeCheckPoint(true); - conn->disconnect(); - delete stmt; - delete conn; - return ErrNotExists; - } - if (tbl->numTuples()) { - printError(ErrNotEmpty, "The table '\%s\' is not empty", tableName); - dbMgr->closeTable(tbl); + rv = hasRecords(dbMgr, tableName); + if (OK != rv) { dbMgr->setCanTakeCheckPoint(true); conn->disconnect(); delete stmt; delete conn; return ErrNotEmpty; } - dbMgr->closeTable(tbl); } conn->beginTrans(); rv = load(conn, stmt, tabDefinition); @@ -65,6 +55,60 @@ DbRetVal CacheTableLoader::load(bool tabDefinition) delete conn; return rv; } +DbRetVal CacheTableLoader::hasRecords(DatabaseManager *dbMgr, const char* tableName) +{ + Table *tbl = dbMgr->openTable(tableName); + if (tbl == NULL) { + printError(ErrNotEmpty, "The table '\%s\' is not found", tableName); + return ErrNotExists; + } + if (tbl->numTuples()) { + printError(ErrNotEmpty, "The table '\%s\' is not empty", tableName); + dbMgr->closeTable(tbl); + return ErrNotEmpty; + } + dbMgr->closeTable(tbl); + return OK; +} +DbRetVal CacheTableLoader::connect(SQLHENV &henv, SQLHDBC &hdbc, SQLHSTMT &hstmt, char *dsn, char* stmtBuf) +{ + SQLCHAR outstr[1024]; + SQLSMALLINT outstrlen; + int retValue =0; + retValue = SQLAllocHandle (SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); + if (retValue) { + printError(ErrSysInit, "Unable to allocate ODBC handle \n"); + return ErrSysInit; + } + SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void *) SQL_OV_ODBC3, 0); + retValue = SQLAllocHandle (SQL_HANDLE_DBC, henv, &hdbc); + if (retValue) { + printError(ErrSysInit, "Unable to allocate ODBC handle \n"); + return ErrSysInit; + } + retValue = SQLDriverConnect(hdbc, NULL, (SQLCHAR*)dsn, SQL_NTS, + outstr, sizeof(outstr), &outstrlen, + SQL_DRIVER_NOPROMPT); + if (SQL_SUCCEEDED(retValue)) { + printDebug(DM_Gateway, "Connected to target database using dsn = %s\n", dsn); + } else { + printError(ErrSysInit, "Failed to connect to target database\n"); + return ErrSysInit; + } + + retValue=SQLAllocHandle (SQL_HANDLE_STMT, hdbc, &hstmt); + if (retValue) { + printError(ErrSysInit, "Unable to allocate ODBC handle \n"); + return ErrSysInit; + } + + retValue = SQLPrepare (hstmt, (unsigned char *) stmtBuf, SQL_NTS); + if (retValue) { + printError(ErrSysInit, "Unable to Prepare ODBC statement \n"); + return ErrSysInit; + } + return OK; +} DbRetVal CacheTableLoader::load(AbsSqlConnection *conn, AbsSqlStatement *stmt, bool tabDefinition) { @@ -77,10 +121,13 @@ DbRetVal CacheTableLoader::load(AbsSqlConnection *conn, AbsSqlStatement *stmt, b SqlConnection *con = (SqlConnection *) conn->getInnerConnection(); DatabaseManager *dbMgr = con->getConnObject().getDatabaseManager(); + SQLHENV henv; + SQLHDBC hdbc; + SQLHSTMT hstmt; + int retValue =0; - SQLCHAR outstr[1024]; + /*SQLCHAR outstr[1024]; SQLSMALLINT outstrlen; - int retValue =0; SQLHENV henv; SQLHDBC hdbc; SQLHSTMT hstmt; @@ -111,13 +158,14 @@ DbRetVal CacheTableLoader::load(AbsSqlConnection *conn, AbsSqlStatement *stmt, b return ErrSysInit; } - char stmtBuf[1024]; - generateCacheTableStatement(stmtBuf); retValue = SQLPrepare (hstmt, (unsigned char *) stmtBuf, SQL_NTS); if (retValue) { printError(ErrSysInit, "Unable to Prepare ODBC statement \n"); return ErrSysInit; - } + }*/ + char stmtBuf[1024]; + generateCacheTableStatement(stmtBuf); + connect(henv, hdbc, hstmt, dsn, stmtBuf); int nRecordsToFetch = Conf::config.getNoOfRowsToFetchFromTDB(); int nFetchedRecords = 0; SQLUSMALLINT *rowStatus = (SQLUSMALLINT *) -- 2.11.4.GIT