本文整理汇总了C++中OGRLayer::RollbackTransaction方法的典型用法代码示例。如果您正苦于以下问题:C++ OGRLayer::RollbackTransaction方法的具体用法?C++ OGRLayer::RollbackTransaction怎么用?C++ OGRLayer::RollbackTransaction使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OGRLayer
的用法示例。
在下文中一共展示了OGRLayer::RollbackTransaction方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CPLError
//.........这里部分代码省略.........
if( poFeature == NULL )
break;
CPLErrorReset();
poDstFeature = OGRFeature::CreateFeature( poDstLayer->GetLayerDefn() );
if( poDstFeature->SetFrom( poFeature, TRUE ) != OGRERR_NONE )
{
delete poFeature;
CPLError( CE_Failure, CPLE_AppDefined,
"Unable to translate feature %ld from layer %s.\n",
poFeature->GetFID(), poSrcDefn->GetName() );
return poDstLayer;
}
poDstFeature->SetFID( poFeature->GetFID() );
OGRFeature::DestroyFeature( poFeature );
CPLErrorReset();
if( poDstLayer->CreateFeature( poDstFeature ) != OGRERR_NONE )
{
OGRFeature::DestroyFeature( poDstFeature );
return poDstLayer;
}
OGRFeature::DestroyFeature( poDstFeature );
}
}
else
{
int i, bStopTransfer = FALSE, bStopTransaction = FALSE;
int nFeatCount = 0; // Number of features in the temporary array
int nFeaturesToAdd = 0;
while( !bStopTransfer )
{
OGRFeature **papoDstFeature =
(OGRFeature **)CPLCalloc(sizeof(OGRFeature *), nGroupTransactions);
/* -------------------------------------------------------------------- */
/* Fill the array with features */
/* -------------------------------------------------------------------- */
for( nFeatCount = 0; nFeatCount < nGroupTransactions; nFeatCount++ )
{
poFeature = poSrcLayer->GetNextFeature();
if( poFeature == NULL )
{
bStopTransfer = 1;
break;
}
CPLErrorReset();
papoDstFeature[nFeatCount] =
OGRFeature::CreateFeature( poDstLayer->GetLayerDefn() );
if( papoDstFeature[nFeatCount]->SetFrom( poFeature, TRUE ) != OGRERR_NONE )
{
OGRFeature::DestroyFeature( poFeature );
CPLError( CE_Failure, CPLE_AppDefined,
"Unable to translate feature %ld from layer %s.\n",
poFeature->GetFID(), poSrcDefn->GetName() );
bStopTransfer = TRUE;
break;
}
papoDstFeature[nFeatCount]->SetFID( poFeature->GetFID() );
OGRFeature::DestroyFeature( poFeature );
}
nFeaturesToAdd = nFeatCount;
CPLErrorReset();
bStopTransaction = FALSE;
while( !bStopTransaction )
{
bStopTransaction = TRUE;
poDstLayer->StartTransaction();
for( i = 0; i < nFeaturesToAdd; i++ )
{
if( poDstLayer->CreateFeature( papoDstFeature[i] ) != OGRERR_NONE )
{
nFeaturesToAdd = i;
bStopTransfer = TRUE;
bStopTransaction = FALSE;
}
}
if( bStopTransaction )
poDstLayer->CommitTransaction();
else
poDstLayer->RollbackTransaction();
}
for( i = 0; i < nFeatCount; i++ )
OGRFeature::DestroyFeature( papoDstFeature[i] );
}
}
return poDstLayer;
}