From fd0518f6a4617a8fc224a5839c00b53dee891fc2 Mon Sep 17 00:00:00 2001 From: prabatuty Date: Fri, 1 May 2009 07:38:46 +0000 Subject: [PATCH] commiting changes from enterprise version for V2.4 --- include/os.h | 1 + src/jdbc/JSqlStatement.cxx | 14 +++++++++----- src/odbc/odbcCommon.cxx | 2 +- src/storage/AggTableImpl.cxx | 2 +- src/storage/Expression.cxx | 1 + src/storage/HashIndex.cxx | 19 ++++++++++++++----- src/storage/PredicateImpl.cxx | 4 ++-- src/storage/Process.cxx | 10 +++++++++- src/storage/TableDef.cxx | 2 +- src/storage/TableImpl.cxx | 2 +- src/storage/TreeIndex.cxx | 3 +-- 11 files changed, 41 insertions(+), 19 deletions(-) diff --git a/include/os.h b/include/os.h index aac2f9b6..4d867cb5 100644 --- a/include/os.h +++ b/include/os.h @@ -36,6 +36,7 @@ #include #include #include +#include #if defined(solaris) #include #endif diff --git a/src/jdbc/JSqlStatement.cxx b/src/jdbc/JSqlStatement.cxx index b132e177..36dc36d6 100644 --- a/src/jdbc/JSqlStatement.cxx +++ b/src/jdbc/JSqlStatement.cxx @@ -689,7 +689,9 @@ JNIEXPORT jstring JNICALL Java_csql_jdbc_JSqlStatement_getParamFldName FieldInfo *field = new FieldInfo(); DbRetVal rv = s->getParamFldInfo(pos,field); if(rv!=OK)return NULL; - return( env->NewStringUTF( (char*) field->fldName ) ); + _jstring *name = env->NewStringUTF( (char*) field->fldName ); + delete field; + return name; } /* @@ -740,8 +742,9 @@ JNIEXPORT jint JNICALL Java_csql_jdbc_JSqlStatement_getType FieldInfo *field = new FieldInfo(); DbRetVal rv = s->getParamFldInfo(pos,field); if(rv!=OK)return 100; - return(field->type ); - + int type = field->type; + delete field; + return type; } /* @@ -885,8 +888,9 @@ JNIEXPORT jstring JNICALL Java_csql_jdbc_JSqlStatement_getProjFldName AbsSqlStatement *s = (AbsSqlStatement*) env->GetLongField( obj, fid ); FieldInfo *field = new FieldInfo(); s->getProjFldInfo(pos,field); - //delete field; - return ( env->NewStringUTF( (char*) field->fldName )); + _jstring *name = env->NewStringUTF( (char*) field->fldName ); + delete field; + return name; } diff --git a/src/odbc/odbcCommon.cxx b/src/odbc/odbcCommon.cxx index 712116d0..13218321 100644 --- a/src/odbc/odbcCommon.cxx +++ b/src/odbc/odbcCommon.cxx @@ -140,7 +140,7 @@ DataType getCSqlType( SQLSMALLINT type ) case SQL_C_LONG: case SQL_C_SLONG: case SQL_C_ULONG: - return typeLong; + return typeInt; case SQL_C_FLOAT: return typeFloat; case SQL_C_DOUBLE: diff --git a/src/storage/AggTableImpl.cxx b/src/storage/AggTableImpl.cxx index 9b295fd8..144a4894 100644 --- a/src/storage/AggTableImpl.cxx +++ b/src/storage/AggTableImpl.cxx @@ -318,7 +318,7 @@ DbRetVal AggTableImpl::closeScan() } aggNodes.reset(); aggNodeMap.removeAll(); - tableHdl->closeScan(); + if(tableHdl) tableHdl->closeScan(); } DbRetVal AggTableImpl::close() diff --git a/src/storage/Expression.cxx b/src/storage/Expression.cxx index 47dc62b0..d8a49e95 100644 --- a/src/storage/Expression.cxx +++ b/src/storage/Expression.cxx @@ -71,6 +71,7 @@ void Expression::setExpr(Expression *exp1, ArithOperator op, Expression *exp2) void *Expression::evaluate(DataType type,bool &result) { calVal=AllDataType::alloc(type,IDENTIFIER_LENGTH); + AllDataType::memoryset(calVal, type); char *rhsResult = NULL , *lhsResult = NULL; if (NULL != lhs) { diff --git a/src/storage/HashIndex.cxx b/src/storage/HashIndex.cxx index d572546a..a74b9cd4 100644 --- a/src/storage/HashIndex.cxx +++ b/src/storage/HashIndex.cxx @@ -116,6 +116,7 @@ DbRetVal HashIndex::insert(TableImpl *tbl, Transaction *tr, void *indexPtr, Inde int offset = info->fldOffset; DataType type = info->type; char *keyBuffer = (char*) malloc(info->compLength); + memset(keyBuffer, 0, info->compLength); void *keyStartBuffer = keyBuffer, *keyPtr; FieldIterator iter = info->idxFldList.getIterator(); while(iter.hasElement()) @@ -244,8 +245,8 @@ DbRetVal HashIndex::remove(TableImpl *tbl, Transaction *tr, void *indexPtr, Inde ChunkIterator citer = CatalogTableINDEX::getIterator(indexPtr); Bucket* buckets = (Bucket*)citer.nextElement(); - char *keyBuffer = (char*) malloc(info->compLength); + memset(keyBuffer, 0, info->compLength); void *keyStartBuffer = keyBuffer, *keyPtr; FieldIterator iter = info->idxFldList.getIterator(); while(iter.hasElement()) @@ -327,6 +328,7 @@ DbRetVal HashIndex::update(TableImpl *tbl, Transaction *tr, void *indexPtr, Inde //creating old key value buffer for composite primary keys char *oldKeyBuffer = (char*) malloc(info->compLength); + memset(oldKeyBuffer, 0, info->compLength); void *oldKeyStartBuffer = oldKeyBuffer; FieldIterator iter = info->idxFldList.getIterator(); while(iter.hasElement()) { @@ -340,8 +342,13 @@ DbRetVal HashIndex::update(TableImpl *tbl, Transaction *tr, void *indexPtr, Inde //Iterate through the bind list and check FieldIterator idxFldIter = info->idxFldList.getIterator(); char *keyBindBuffer ; - if(type==typeBinary) keyBindBuffer = (char*) malloc(2 * info->compLength); - else keyBindBuffer = (char*) malloc(info->compLength); + if(type==typeBinary) { + keyBindBuffer = (char*) malloc(2 * info->compLength); + memset(keyBindBuffer, 0, 2 * info->compLength); + }else { + keyBindBuffer = (char*) malloc(info->compLength); + memset(keyBindBuffer, 0, info->compLength); + } void *keyStartBuffer = (void*) keyBindBuffer; bool keyUpdated = false; @@ -563,7 +570,9 @@ DbRetVal HashIndex::deleteLogicalUndoLog(Database *sysdb, void *data) Chunk *hChunk = (Chunk *) ((CINDEX *)info->indexPtr_)->hashNodeChunk_; HashIndexNode *head = (HashIndexNode *)((Bucket *)info->bucket_)->bucketList_; BucketList list(head); - list.remove(hChunk, tbl->db_, info->keyPtr_); - ((Bucket *)info->bucket_)->bucketList_ = list.getBucketListHead(); + DbRetVal rc = list.remove(hChunk, tbl->db_, info->keyPtr_); + if (SplCase == rc) { + ((Bucket *)info->bucket_)->bucketList_ = list.getBucketListHead(); + } return OK; } diff --git a/src/storage/PredicateImpl.cxx b/src/storage/PredicateImpl.cxx index 26167a9c..62acfa16 100644 --- a/src/storage/PredicateImpl.cxx +++ b/src/storage/PredicateImpl.cxx @@ -482,7 +482,7 @@ DbRetVal PredicateImpl::evaluate(bool &result) while (fIter.hasElement()) { def = (JoinProjFieldInfo*) fIter.nextElement(); - if (NULL != def->appBuf) { + if (NULL != def->bindBuf) { if (0 == strcmp(fldName1, def->tabFieldName)) { val1 = (char*)def->bindBuf; @@ -506,7 +506,7 @@ DbRetVal PredicateImpl::evaluate(bool &result) while (fIter.hasElement()) { def = (JoinProjFieldInfo*) fIter.nextElement(); - if (NULL != def->appBuf) { + if (NULL != def->bindBuf) { if (0 == strcmp(fldName2, def->tabFieldName)) { val2 = (char*)def->bindBuf; diff --git a/src/storage/Process.cxx b/src/storage/Process.cxx index 796beaed..718456ac 100644 --- a/src/storage/Process.cxx +++ b/src/storage/Process.cxx @@ -72,6 +72,10 @@ DbRetVal ProcessManager::registerThread() if (OK != rv) { printError(rv,"Unable to get process table mutex"); + printError(rv,"Recovery may be going on. Retry after some time."); + mutex.getLock(-1, false); + noThreads--; + mutex.releaseLock(-1, false); return rv; } pid_t pid; @@ -150,7 +154,7 @@ DbRetVal ProcessManager::deregisterThread(int procSlot) { if (pInfo->has_[muti] != NULL) { - printError(ErrSysFatal, "Probable data corruption.some mutexes are not freed %x %s\n", pInfo->has_[muti], pInfo->has_[muti]->name); + printError(ErrSysFatal, "Probable data corruption.some mutexes are not freed %x \n", pInfo->has_[muti]); pInfo->has_[muti]->releaseLock(procSlot); return ErrSysFatal; } @@ -227,6 +231,10 @@ DbRetVal ProcessManager::removeMutex(Mutex *mut, int pslot) } } printError(ErrSysInternal, "Mutex could not be found in the list %s", mut->name); + void *array[10]; + size_t size; + size = backtrace(array, 10); + backtrace_symbols_fd(array, size, 2); return ErrSysInternal; } diff --git a/src/storage/TableDef.cxx b/src/storage/TableDef.cxx index 499eba01..918a6895 100644 --- a/src/storage/TableDef.cxx +++ b/src/storage/TableDef.cxx @@ -33,7 +33,7 @@ int TableDef::addField(const char *name, DataType type, size_t length, if (name == NULL) return (int)ErrBadArg; if(strlen(name)>64) { - printError(ErrBadRange,"Field name shpuldnot exceed 64 character"); + printError(ErrBadRange,"Field name should not exceed 64 character"); return (int)ErrBadRange; } // The following code checks for duplicates diff --git a/src/storage/TableImpl.cxx b/src/storage/TableImpl.cxx index 2ffd9e31..3924ba3f 100644 --- a/src/storage/TableImpl.cxx +++ b/src/storage/TableImpl.cxx @@ -242,7 +242,7 @@ DbRetVal TableImpl::execute() { if (NULL != iter) { - printError(ErrAlready,"Scan already open:Close and re execute"); + //printError(ErrAlready,"Scan already open:Close and re execute"); return ErrAlready; } DbRetVal ret = OK; diff --git a/src/storage/TreeIndex.cxx b/src/storage/TreeIndex.cxx index 153dc6b9..56a86d38 100644 --- a/src/storage/TreeIndex.cxx +++ b/src/storage/TreeIndex.cxx @@ -445,8 +445,7 @@ DbRetVal TreeIndex::remove(TableImpl *tbl, Transaction *tr, void *indexPtr, Inde TreeNode *start = (TreeNode*) iptr->hashNodeChunk_; TreeNode *iter = locateNode(start, tuple, indInfo); if (NULL == iter) return OK; //element not found - removeElement(tbl->getDB(), iter, tuple, info); - return OK; + return removeElement(tbl->getDB(), iter, tuple, info); } TreeNode* TreeIndex::locateNode(TreeNode *iter, void *tuple, IndexInfo *indInfo) { -- 2.11.4.GIT