Skip to content

Commit

Permalink
Fix for ODBC-106. Crash in SQLGetData with bookmarks
Browse files Browse the repository at this point in the history
  • Loading branch information
alexpotapchenko committed Feb 12, 2011
1 parent 7edda0f commit 1613540
Showing 1 changed file with 31 additions and 8 deletions.
39 changes: 31 additions & 8 deletions OdbcStatement.cpp
Expand Up @@ -1766,17 +1766,40 @@ SQLRETURN OdbcStatement::sqlDescribeCol(int col,

SQLRETURN OdbcStatement::prepareGetData(int column, DescRecord *recordARD)
{
DescRecord *recordIRD = implementationRowDescriptor->getDescRecord(column);
if ( implementationRowDescriptor->isDefined() )
{
if ( column > implementationRowDescriptor->headCount )
return sqlReturn (SQL_ERROR, "07009", "Invalid descriptor index");

if ( !recordIRD->isDefined )
implementationRowDescriptor->defFromMetaDataOut(column,recordIRD);
if ( !column )
{
DescRecord *imprec = implementationRowDescriptor->getDescRecord (column);
imprec->dataPtr = &rowNumber;
imprec->indicatorPtr = &indicatorRowNumber;
recordARD->initZeroColumn();
}
}

DescRecord *recordIRD = implementationRowDescriptor->getDescRecord(column);

if( recordARD->conciseType == SQL_C_DEFAULT )
if( !column )
{
recordARD->setDefault ( recordIRD );
recordARD->isZeroColumn = true;
recordIRD->isZeroColumn = true;
}
else
{
int length = recordARD->length;
recordIRD->setDefault(recordARD);
recordARD->length = length;
recordARD->conciseType = implementationRowDescriptor->getDefaultFromSQLToConciseType(recordIRD->type, recordARD->length);
if ( !recordIRD->isDefined )
implementationRowDescriptor->defFromMetaDataOut(column,recordIRD);

if( recordARD->conciseType == SQL_C_DEFAULT )
{
int length = recordARD->length;
recordIRD->setDefault(recordARD);
recordARD->length = length;
recordARD->conciseType = implementationRowDescriptor->getDefaultFromSQLToConciseType(recordIRD->type, recordARD->length);
}
}

recordARD->fnConv = convert->getAdressFunction(recordIRD,recordARD);
Expand Down

0 comments on commit 1613540

Please sign in to comment.