Skip to content

Commit

Permalink
Fix for ODBC-87. 64 bit driver crashes accessing Excel 64bit 2010
Browse files Browse the repository at this point in the history
  • Loading branch information
alexpotapchenko committed Nov 3, 2010
1 parent 1b63308 commit 68b1200
Show file tree
Hide file tree
Showing 10 changed files with 43 additions and 43 deletions.
2 changes: 1 addition & 1 deletion IscDbc/Connection.h
Expand Up @@ -670,7 +670,7 @@ class ResultSet

virtual void setPosRowInSet(int posRow) = 0;
virtual int getPosRowInSet() = 0;
virtual int* getSqlDataOffsetPtr() = 0;
virtual size_t* getSqlDataOffsetPtr() = 0;
virtual bool readStaticCursor() = 0;
virtual bool nextFetch() = 0;
virtual bool setCurrentRowInBufferStaticCursor(int nRow) = 0;
Expand Down
2 changes: 1 addition & 1 deletion IscDbc/IscResultSet.cpp
Expand Up @@ -504,7 +504,7 @@ int IscResultSet::getPosRowInSet()
return activePosRowInSet;
}

int* IscResultSet::getSqlDataOffsetPtr()
size_t* IscResultSet::getSqlDataOffsetPtr()
{
return &sqldataOffsetPtr;
}
Expand Down
4 changes: 2 additions & 2 deletions IscDbc/IscResultSet.h
Expand Up @@ -172,7 +172,7 @@ class IscResultSet : public ResultSet, public IscStatementMetaData
virtual Statement *getStatement();
virtual void setPosRowInSet(int posRow);
virtual int getPosRowInSet();
virtual int *getSqlDataOffsetPtr();
virtual size_t *getSqlDataOffsetPtr();
virtual bool readStaticCursor();
virtual bool readFromSystemCatalog();
virtual bool nextFetch();
Expand All @@ -197,7 +197,7 @@ class IscResultSet : public ResultSet, public IscStatementMetaData
LinkedList blobs;
LinkedList clobs;
int activePosRowInSet;
int sqldataOffsetPtr;
size_t sqldataOffsetPtr;
enStatysActivePositionRow statysPositionRow;
};

Expand Down
4 changes: 2 additions & 2 deletions IscDbc/Sqlda.cpp
Expand Up @@ -168,7 +168,7 @@ class CDataStaticCursor
char * pt = listBlocks[n] + (var->sqldata - sqlvar[0].sqldata);
for (int l = 0; nRow < countAllRows && l < countRowsInBlock[n]; ++l, pt += lenRow, ++nRow)
{
if ( pt && *(long*)pt )
if ( pt && *(intptr_t*)pt )
{
free ( ((CAttrArray *)*(intptr_t*)pt)->arrBufData );
delete (CAttrArray *)*(intptr_t*)pt;
Expand Down Expand Up @@ -211,7 +211,7 @@ class CDataStaticCursor
{
XSQLVAR * var = sqlvar + numColumnBlob[n];
if ( *var->sqlind == -1 )
*(long*)var->sqldata = (long)0;
*(intptr_t*)var->sqldata = 0;
else if ( (var->sqltype & ~1) == SQL_ARRAY )
{
CAttrArray * ptArr = new CAttrArray;
Expand Down
4 changes: 2 additions & 2 deletions OdbcConvert.cpp
Expand Up @@ -99,7 +99,7 @@ void OdbcConvert::setZeroColumn(DescRecord * to, long rowNumber)
*indicatorTo = sizeof(long);
}

void OdbcConvert::setBindOffsetPtrTo(SQLINTEGER *bindOffsetPtr, SQLINTEGER *bindOffsetPtrInd)
void OdbcConvert::setBindOffsetPtrTo(SQLLEN *bindOffsetPtr, SQLLEN *bindOffsetPtrInd)
{
if( bindOffsetPtr )
bindOffsetPtrTo = bindOffsetPtr;
Expand All @@ -112,7 +112,7 @@ void OdbcConvert::setBindOffsetPtrTo(SQLINTEGER *bindOffsetPtr, SQLINTEGER *bind
bindOffsetPtrIndTo = &tempBindOffsetPtr;
}

void OdbcConvert::setBindOffsetPtrFrom(SQLINTEGER *bindOffsetPtr, SQLINTEGER *bindOffsetPtrInd)
void OdbcConvert::setBindOffsetPtrFrom(SQLLEN *bindOffsetPtr, SQLLEN *bindOffsetPtrInd)
{
if( bindOffsetPtr )
bindOffsetPtrFrom = bindOffsetPtr;
Expand Down
16 changes: 8 additions & 8 deletions OdbcConvert.h
Expand Up @@ -54,11 +54,11 @@ class OdbcConvert
{
OdbcStatement *parentStmt;
bool bIdentity;
SQLINTEGER tempBindOffsetPtr;
SQLINTEGER *bindOffsetPtrTo;
SQLINTEGER *bindOffsetPtrIndTo;
SQLINTEGER *bindOffsetPtrFrom;
SQLINTEGER *bindOffsetPtrIndFrom;
SQLLEN tempBindOffsetPtr;
SQLLEN *bindOffsetPtrTo;
SQLLEN *bindOffsetPtrIndTo;
SQLLEN *bindOffsetPtrFrom;
SQLLEN *bindOffsetPtrIndFrom;

public:
bool statusReturnData;
Expand All @@ -78,8 +78,8 @@ class OdbcConvert
OdbcConvert(OdbcStatement * parent);

void setZeroColumn(DescRecord * to, long rowNumber);
void setBindOffsetPtrTo(SQLINTEGER *bindOffsetPtr, SQLINTEGER *bindOffsetPtrInd);
void setBindOffsetPtrFrom(SQLINTEGER *bindOffsetPtr, SQLINTEGER *bindOffsetPtrInd);
void setBindOffsetPtrTo(SQLLEN *bindOffsetPtr, SQLLEN *bindOffsetPtrInd);
void setBindOffsetPtrFrom(SQLLEN *bindOffsetPtr, SQLLEN *bindOffsetPtrInd);
ADRESS_FUNCTION getAdressFunction(DescRecord * from, DescRecord * to);
inline SQLPOINTER getAdressBindDataFrom(char * pointer);
inline SQLLEN *getAdressBindIndFrom(char * pointer);
Expand All @@ -88,7 +88,7 @@ class OdbcConvert

public:
bool isIdentity(){ return bIdentity; }
SQLINTEGER &getBindOffsetPtrTo() { return *bindOffsetPtrTo; }
SQLLEN &getBindOffsetPtrTo() { return *bindOffsetPtrTo; }
int notYetImplemented(DescRecord * from, DescRecord * to);

// Guid
Expand Down
8 changes: 4 additions & 4 deletions OdbcDesc.cpp
Expand Up @@ -57,7 +57,7 @@ OdbcDesc::OdbcDesc(OdbcDescType type, OdbcConnection *connect)
headAllocType = SQL_DESC_ALLOC_AUTO;
headArraySize = 1;
headArrayStatusPtr = (SQLUSMALLINT*)NULL;
headBindOffsetPtr = (SQLINTEGER*)NULL;
headBindOffsetPtr = (SQLLEN*)NULL;
headRowsProcessedPtr = (SQLULEN*)NULL;
headCount = 0;
headBindType = SQL_BIND_BY_COLUMN;
Expand Down Expand Up @@ -86,7 +86,7 @@ void OdbcDesc::setDefaultImplDesc (StatementMetaData * ptMetaDataOut, StatementM
headAllocType = SQL_DESC_ALLOC_AUTO;
headArraySize = 1;
headArrayStatusPtr = (SQLUSMALLINT*)NULL;
headBindOffsetPtr = (SQLINTEGER*)NULL;
headBindOffsetPtr = (SQLLEN*)NULL;
headRowsProcessedPtr = (SQLULEN*)NULL;
headCount = 0;

Expand Down Expand Up @@ -415,7 +415,7 @@ SQLRETURN OdbcDesc::sqlGetDescField(int recNumber, int fieldId, SQLPOINTER ptr,
case odtApplicationParameter:
case odtApplicationRow:
if (ptr)
*(SQLINTEGER **)ptr = headBindOffsetPtr,
*(SQLLEN **)ptr = headBindOffsetPtr,
size = sizeof (SQLINTEGER *);
break;
default:
Expand Down Expand Up @@ -905,7 +905,7 @@ SQLRETURN OdbcDesc::sqlSetDescField(int recNumber, int fieldId, SQLPOINTER value
case odtApplication:
case odtApplicationParameter:
case odtApplicationRow:
headBindOffsetPtr = (SQLINTEGER*)value;
headBindOffsetPtr = (SQLLEN*)value;
break;
default:
return sqlReturn (SQL_ERROR, "HY091", "Invalid descriptor field identifier");
Expand Down
2 changes: 1 addition & 1 deletion OdbcDesc.h
Expand Up @@ -122,7 +122,7 @@ class OdbcDesc : public OdbcObject
SQLSMALLINT headAllocType;
SQLUINTEGER headArraySize;
SQLUSMALLINT *headArrayStatusPtr;
SQLINTEGER *headBindOffsetPtr;
SQLLEN *headBindOffsetPtr;
SQLINTEGER headBindType;
SQLSMALLINT headCount;
SQLULEN *headRowsProcessedPtr;
Expand Down
38 changes: 19 additions & 19 deletions OdbcStatement.cpp
Expand Up @@ -538,7 +538,7 @@ void OdbcStatement::setResultSet(ResultSet * results, bool fromSystemCatalog)
resultSet = results;
isResultSetFromSystemCatalog = fromSystemCatalog;
metaData = resultSet->getMetaData();
sqldataOutOffsetPtr = (SQLINTEGER*) resultSet->getSqlDataOffsetPtr();
sqldataOutOffsetPtr = (SQLLEN*) resultSet->getSqlDataOffsetPtr();

if ( !statement->isActive() )
{
Expand Down Expand Up @@ -739,8 +739,8 @@ SQLRETURN OdbcStatement::fetchData()
SQLUSMALLINT *statusPtr = implementationRowDescriptor->headArrayStatusPtr ? implementationRowDescriptor->headArrayStatusPtr
: NULL;
int nCountRow = applicationRowDescriptor->headArraySize;
SQLINTEGER *&bindOffsetPtr = applicationRowDescriptor->headBindOffsetPtr;
SQLINTEGER *bindOffsetPtrSave = bindOffsetPtr;
SQLLEN *&bindOffsetPtr = applicationRowDescriptor->headBindOffsetPtr;
SQLLEN *bindOffsetPtrSave = bindOffsetPtr;

try
{
Expand All @@ -749,7 +749,7 @@ SQLRETURN OdbcStatement::fetchData()
if ( !eof )
{
int rowBindType = applicationRowDescriptor->headBindType;
SQLINTEGER bindOffsetPtrTmp = bindOffsetPtr ? *bindOffsetPtr : 0;
SQLLEN bindOffsetPtrTmp = bindOffsetPtr ? *bindOffsetPtr : 0;
bindOffsetPtr = &bindOffsetPtrTmp;

if ( schemaFetchData )
Expand All @@ -771,8 +771,8 @@ SQLRETURN OdbcStatement::fetchData()
}
else // if ( schemaExtendedFetchData )
{
SQLINTEGER bindOffsetPtrData = 0;
SQLINTEGER bindOffsetPtrInd = 0;
SQLLEN bindOffsetPtrData = 0;
SQLLEN bindOffsetPtrInd = 0;
convert->setBindOffsetPtrTo(&bindOffsetPtrData, &bindOffsetPtrInd);
while ( nRow < nCountRow && (resultSet->*fetchNext)() )
{
Expand Down Expand Up @@ -875,7 +875,7 @@ char *strDebOrientFetch[]=

SQLRETURN OdbcStatement::sqlFetchScrollCursorStatic(int orientation, int offset)
{
SQLINTEGER *&bindOffsetPtr = applicationRowDescriptor->headBindOffsetPtr;
SQLLEN *&bindOffsetPtr = applicationRowDescriptor->headBindOffsetPtr;
int rowsetSize = applicationRowDescriptor->headArraySize;
bool bFetchAbsolute;
SQLULEN rowCount;
Expand Down Expand Up @@ -1074,10 +1074,10 @@ SQLRETURN OdbcStatement::sqlFetchScrollCursorStatic(int orientation, int offset)
}
else // if ( !eof )
{
SQLINTEGER *bindOffsetPtrSave = bindOffsetPtr;
SQLLEN *bindOffsetPtrSave = bindOffsetPtr;
SQLUSMALLINT *statusPtr = implementationRowDescriptor->headArrayStatusPtr ? implementationRowDescriptor->headArrayStatusPtr
: NULL;
SQLINTEGER bindOffsetPtrTmp = bindOffsetPtr ? *bindOffsetPtr : 0;
SQLLEN bindOffsetPtrTmp = bindOffsetPtr ? *bindOffsetPtr : 0;
int rowBindType = applicationRowDescriptor->headBindType;

bindOffsetPtr = &bindOffsetPtrTmp;
Expand All @@ -1102,8 +1102,8 @@ SQLRETURN OdbcStatement::sqlFetchScrollCursorStatic(int orientation, int offset)
}
else
{
SQLINTEGER bindOffsetPtrData = 0;
SQLINTEGER bindOffsetPtrInd = 0;
SQLLEN bindOffsetPtrData = 0;
SQLLEN bindOffsetPtrInd = 0;
convert->setBindOffsetPtrTo(&bindOffsetPtrData, &bindOffsetPtrInd);
while ( nRow < rowsetSize && rowNumber < sqlDiagCursorRowCount )
{
Expand Down Expand Up @@ -2828,9 +2828,9 @@ SQLRETURN OdbcStatement::executeStatementParamArray()
: NULL;
int rowSize = applicationParamDescriptor->headBindType;
int nCountRow = applicationParamDescriptor->headArraySize;
SQLINTEGER *&headBindOffsetPtr = applicationParamDescriptor->headBindOffsetPtr;
SQLINTEGER *bindOffsetPtrSave = headBindOffsetPtr;
SQLINTEGER bindOffsetPtrTmp = headBindOffsetPtr ? *headBindOffsetPtr : 0;
SQLLEN *&headBindOffsetPtr = applicationParamDescriptor->headBindOffsetPtr;
SQLLEN *bindOffsetPtrSave = headBindOffsetPtr;
SQLLEN bindOffsetPtrTmp = headBindOffsetPtr ? *headBindOffsetPtr : 0;
bool arrayColumnWiseBinding = rowSize == SQL_PARAM_BIND_BY_COLUMN;

headBindOffsetPtr = &bindOffsetPtrTmp;
Expand Down Expand Up @@ -3008,7 +3008,7 @@ SQLRETURN OdbcStatement::sqlParamData(SQLPOINTER *ptr)
return sqlReturn (SQL_ERROR, "HY000", "General error :: OdbcStatement::sqlParamData");

DescRecord *binding = applicationParamDescriptor->getDescRecord ( parameterNeedData );
SQLINTEGER *bindOffsetPtr = applicationParamDescriptor->headBindOffsetPtr;
SQLLEN *bindOffsetPtr = applicationParamDescriptor->headBindOffsetPtr;

*(uintptr_t*)ptr = GETBOUNDADDRESS(binding);

Expand Down Expand Up @@ -3169,8 +3169,8 @@ inline
SQLRETURN OdbcStatement::returnDataFromExtendedFetch()
{
SQLRETURN retCode, ret = SQL_SUCCESS;
SQLINTEGER &bindOffsetPtrTo = convert->getBindOffsetPtrTo();
SQLINTEGER &currentRow = *applicationRowDescriptor->headBindOffsetPtr;
SQLLEN &bindOffsetPtrTo = convert->getBindOffsetPtrTo();
SQLLEN &currentRow = *applicationRowDescriptor->headBindOffsetPtr;
int count = listBindOut->GetCount();
convert->statusReturnData = true;

Expand Down Expand Up @@ -3223,7 +3223,7 @@ SQLRETURN OdbcStatement::sqlSetStmtAttr(int attribute, SQLPOINTER ptr, int lengt
break;

case SQL_ATTR_PARAM_BIND_OFFSET_PTR:// 17
applicationParamDescriptor->headBindOffsetPtr = (SQLINTEGER*)ptr;
applicationParamDescriptor->headBindOffsetPtr = (SQLLEN*)ptr;
TRACE02(SQL_ATTR_PARAM_BIND_OFFSET_PTR,(intptr_t) ptr);
break;

Expand Down Expand Up @@ -3259,7 +3259,7 @@ SQLRETURN OdbcStatement::sqlSetStmtAttr(int attribute, SQLPOINTER ptr, int lengt
break;

case SQL_ATTR_ROW_BIND_OFFSET_PTR: // 23
applicationRowDescriptor->headBindOffsetPtr = (SQLINTEGER*)ptr;
applicationRowDescriptor->headBindOffsetPtr = (SQLLEN*)ptr;
TRACE02(SQL_ATTR_ROW_BIND_OFFSET_PTR,(intptr_t) ptr);
break;

Expand Down
6 changes: 3 additions & 3 deletions OdbcStatement.h
Expand Up @@ -178,14 +178,14 @@ class OdbcStatement : public OdbcObject
bool schemaFetchData;

SQLLEN fetchRetData;
SQLINTEGER *sqldataOutOffsetPtr;
SQLLEN *sqldataOutOffsetPtr;
SQLUINTEGER enableAutoIPD;
SQLINTEGER useBookmarks;
SQLINTEGER cursorSensitivity;
SQLPOINTER fetchBookmarkPtr;
SQLUINTEGER noscanSQL;
SQLINTEGER bindOffsetColumnWiseBinding;
SQLINTEGER bindOffsetIndColumnWiseBinding;
SQLLEN bindOffsetColumnWiseBinding;
SQLLEN bindOffsetIndColumnWiseBinding;
int currency;
int cursorType;
int cursorScrollable;
Expand Down

0 comments on commit 68b1200

Please sign in to comment.