bool QgsOgrFeatureIterator::close() { if ( !mConn ) return false; iteratorClosed(); // Will for example release SQLite3 statements if ( ogrLayer ) { OGR_L_ResetReading( ogrLayer ); } if ( mSubsetStringSet ) { OGR_DS_ReleaseResultSet( mConn->ds, ogrLayer ); } if ( mConn ) QgsOgrConnPool::instance()->releaseConnection( mConn ); mConn = nullptr; ogrLayer = nullptr; mClosed = true; return true; }
bool QgsMssqlFeatureIterator::close() { if ( mClosed ) return false; if ( mQuery ) { if ( !mQuery->isActive() ) { QgsDebugMsg( "QgsMssqlFeatureIterator::close on inactive query" ); return false; } mQuery->finish(); } if ( mQuery ) delete mQuery; if ( mDatabase.isOpen() ) mDatabase.close(); iteratorClosed(); mClosed = true; return true; }
bool QgsPostgresFeatureIterator::close() { if ( mClosed ) return false; mConn->closeCursor( mCursorName ); if ( !mIsTransactionConnection ) { QgsPostgresConnPool::instance()->releaseConnection( mConn ); } else { mConn->unlock(); } mConn = 0; while ( !mFeatureQueue.empty() ) { mFeatureQueue.dequeue(); } iteratorClosed(); mClosed = true; return true; }
QgsPostgresFeatureIterator::QgsPostgresFeatureIterator( QgsPostgresFeatureSource* source, bool ownSource, const QgsFeatureRequest& request ) : QgsAbstractFeatureIteratorFromSource( source, ownSource, request ) , mFeatureQueueSize( sFeatureQueueSize ) { mConn = QgsPostgresConnPool::instance()->acquireConnection( mSource->mConnInfo ); if ( !mConn ) { mClosed = true; iteratorClosed(); return; } mCursorName = mConn->uniqueCursorName(); QString whereClause; if ( request.filterType() == QgsFeatureRequest::FilterRect && !mSource->mGeometryColumn.isNull() ) { whereClause = whereClauseRect(); } else if ( request.filterType() == QgsFeatureRequest::FilterFid ) { whereClause = QgsPostgresUtils::whereClause( mRequest.filterFid(), mSource->mFields, mConn, mSource->mPrimaryKeyType, mSource->mPrimaryKeyAttrs, mSource->mShared ); } else if ( request.filterType() == QgsFeatureRequest::FilterFids ) { whereClause = QgsPostgresUtils::whereClause( mRequest.filterFids(), mSource->mFields, mConn, mSource->mPrimaryKeyType, mSource->mPrimaryKeyAttrs, mSource->mShared ); } if ( !mSource->mSqlWhereClause.isEmpty() ) { if ( !whereClause.isEmpty() ) whereClause += " AND "; whereClause += "(" + mSource->mSqlWhereClause + ")"; } if ( !declareCursor( whereClause ) ) { mClosed = true; iteratorClosed(); return; } mFetched = 0; }
bool QgsOgrFeatureIterator::close() { if ( mSharedDS ) { iteratorClosed(); mOgrLayer = nullptr; mSharedDS.reset(); mClosed = true; return true; } if ( !mConn ) return false; iteratorClosed(); // Will for example release SQLite3 statements if ( mOgrLayer ) { resetReading(); } if ( mOgrLayerOri ) { if ( mOgrLayer != mOgrLayerOri ) { GDALDatasetReleaseResultSet( mConn->ds, mOgrLayer ); } mOgrLayer = nullptr; mOgrLayerOri = nullptr; } if ( mConn ) { //QgsDebugMsg( "Feature iterator of " + mSource->mLayerName + ": releasing connection"); QgsOgrConnPool::instance()->releaseConnection( mConn ); } mConn = nullptr; mOgrLayer = nullptr; mClosed = true; return true; }
bool QgsGPXFeatureIterator::close() { if ( mClosed ) return false; iteratorClosed(); mClosed = true; return true; }
bool QgsDelimitedTextFeatureIterator::close() { if ( mClosed ) return false; iteratorClosed(); mFeatureIds = QList<QgsFeatureId>(); mClosed = true; return true; }
bool QgsVectorLayerFeatureIterator::close() { if ( mClosed ) return false; mProviderIterator.close(); iteratorClosed(); mClosed = true; return true; }
bool QgsVirtualLayerFeatureIterator::close() { if ( mClosed ) { return false; } // this call is absolutely needed iteratorClosed(); mClosed = true; return true; }
bool QgsMemoryFeatureIterator::close() { if ( mClosed ) return false; iteratorClosed(); delete mSelectRectGeom; mSelectRectGeom = NULL; mClosed = true; return true; }
bool QgsOgrFeatureIterator::close() { if ( mClosed ) return false; iteratorClosed(); if ( mSubsetStringSet ) { OGR_DS_ReleaseResultSet( mConn->ds, ogrLayer ); } QgsOgrConnPool::instance()->releaseConnection( mConn ); mConn = 0; mClosed = true; return true; }
bool QgsOgrFeatureIterator::close() { if ( mClosed ) return false; iteratorClosed(); if ( mSubsetStringSet ) { OGR_DS_ReleaseResultSet( ogrDataSource, ogrLayer ); } OGR_DS_Destroy( ogrDataSource ); mClosed = true; ogrDataSource = 0; return true; }
bool QgsSpatiaLiteFeatureIterator::close() { if ( mClosed ) return false; iteratorClosed(); if ( sqliteStatement ) { sqlite3_finalize( sqliteStatement ); sqliteStatement = NULL; } QgsSpatiaLiteConnPool::instance()->releaseConnection( mHandle ); mHandle = 0; mClosed = true; return true; }
bool QgsGrassFeatureIterator::close() { if ( mClosed ) return false; iteratorClosed(); // finalization Vect_destroy_line_struct( mPoints ); Vect_destroy_cats_struct( mCats ); Vect_destroy_list( mList ); free( mSelection ); sMutex.unlock(); mClosed = true; return true; }
bool QgsMssqlFeatureIterator::close() { if ( mClosed ) return false; if ( mQuery ) { if ( !mQuery->isActive() ) { QgsDebugMsg( "QgsMssqlFeatureIterator::close on inactive query" ); return false; } mQuery->finish(); } iteratorClosed(); mClosed = true; return true; }
QgsPostgresFeatureIterator::QgsPostgresFeatureIterator( QgsPostgresFeatureSource* source, bool ownSource, const QgsFeatureRequest& request ) : QgsAbstractFeatureIteratorFromSource<QgsPostgresFeatureSource>( source, ownSource, request ) , mFeatureQueueSize( sFeatureQueueSize ) , mFetched( 0 ) , mFetchGeometry( false ) , mExpressionCompiled( false ) , mOrderByCompiled( false ) , mLastFetch( false ) , mFilterRequiresGeometry( false ) { if ( !source->mTransactionConnection ) { mConn = QgsPostgresConnPool::instance()->acquireConnection( mSource->mConnInfo ); mIsTransactionConnection = false; } else { mConn = source->mTransactionConnection; mIsTransactionConnection = true; } if ( !mConn ) { mClosed = true; iteratorClosed(); return; } mCursorName = mConn->uniqueCursorName(); QString whereClause; bool limitAtProvider = ( mRequest.limit() >= 0 ); bool useFallbackWhereClause = false; QString fallbackWhereClause; if ( !request.filterRect().isNull() && !mSource->mGeometryColumn.isNull() ) { whereClause = whereClauseRect(); } if ( !mSource->mSqlWhereClause.isEmpty() ) { whereClause = QgsPostgresUtils::andWhereClauses( whereClause, '(' + mSource->mSqlWhereClause + ')' ); } if ( request.filterType() == QgsFeatureRequest::FilterFid ) { QString fidWhereClause = QgsPostgresUtils::whereClause( mRequest.filterFid(), mSource->mFields, mConn, mSource->mPrimaryKeyType, mSource->mPrimaryKeyAttrs, mSource->mShared ); whereClause = QgsPostgresUtils::andWhereClauses( whereClause, fidWhereClause ); } else if ( request.filterType() == QgsFeatureRequest::FilterFids ) { QString fidsWhereClause = QgsPostgresUtils::whereClause( mRequest.filterFids(), mSource->mFields, mConn, mSource->mPrimaryKeyType, mSource->mPrimaryKeyAttrs, mSource->mShared ); whereClause = QgsPostgresUtils::andWhereClauses( whereClause, fidsWhereClause ); } else if ( request.filterType() == QgsFeatureRequest::FilterExpression ) { // ensure that all attributes required for expression filter are being fetched if ( mRequest.flags() & QgsFeatureRequest::SubsetOfAttributes ) { QgsAttributeList attrs = mRequest.subsetOfAttributes(); Q_FOREACH ( const QString& field, request.filterExpression()->referencedColumns() ) { int attrIdx = mSource->mFields.fieldNameIndex( field ); if ( !attrs.contains( attrIdx ) ) attrs << attrIdx; } mRequest.setSubsetOfAttributes( attrs ); } mFilterRequiresGeometry = request.filterExpression()->needsGeometry(); if ( QSettings().value( "/qgis/compileExpressions", true ).toBool() ) { //IMPORTANT - this MUST be the last clause added! QgsPostgresExpressionCompiler compiler = QgsPostgresExpressionCompiler( source ); if ( compiler.compile( request.filterExpression() ) == QgsSqlExpressionCompiler::Complete ) { useFallbackWhereClause = true; fallbackWhereClause = whereClause; whereClause = QgsPostgresUtils::andWhereClauses( whereClause, compiler.result() ); mExpressionCompiled = true; mCompileStatus = Compiled; } else { limitAtProvider = false; } } else { limitAtProvider = false; } }
QgsPostgresFeatureIterator::QgsPostgresFeatureIterator( QgsPostgresFeatureSource* source, bool ownSource, const QgsFeatureRequest& request ) : QgsAbstractFeatureIteratorFromSource<QgsPostgresFeatureSource>( source, ownSource, request ) , mFeatureQueueSize( sFeatureQueueSize ) , mFetched( 0 ) , mFetchGeometry( false ) , mExpressionCompiled( false ) , mLastFetch( false ) { if ( !source->mTransactionConnection ) { mConn = QgsPostgresConnPool::instance()->acquireConnection( mSource->mConnInfo ); mIsTransactionConnection = false; } else { mConn = source->mTransactionConnection; mConn->lock(); mIsTransactionConnection = true; } if ( !mConn ) { mClosed = true; iteratorClosed(); return; } mCursorName = mConn->uniqueCursorName(); QString whereClause; if ( !request.filterRect().isNull() && !mSource->mGeometryColumn.isNull() ) { whereClause = whereClauseRect(); } if ( request.filterType() == QgsFeatureRequest::FilterFid ) { QString fidWhereClause = QgsPostgresUtils::whereClause( mRequest.filterFid(), mSource->mFields, mConn, mSource->mPrimaryKeyType, mSource->mPrimaryKeyAttrs, mSource->mShared ); whereClause = QgsPostgresUtils::andWhereClauses( whereClause, fidWhereClause ); } else if ( request.filterType() == QgsFeatureRequest::FilterFids ) { QString fidsWhereClause = QgsPostgresUtils::whereClause( mRequest.filterFids(), mSource->mFields, mConn, mSource->mPrimaryKeyType, mSource->mPrimaryKeyAttrs, mSource->mShared ); whereClause = QgsPostgresUtils::andWhereClauses( whereClause, fidsWhereClause ); } else if ( request.filterType() == QgsFeatureRequest::FilterExpression && QSettings().value( "/qgis/compileExpressions", true ).toBool() ) { QgsPostgresExpressionCompiler compiler = QgsPostgresExpressionCompiler( source ); if ( compiler.compile( request.filterExpression() ) == QgsSqlExpressionCompiler::Complete ) { whereClause = QgsPostgresUtils::andWhereClauses( whereClause, compiler.result() ); mExpressionCompiled = true; } } if ( !mSource->mSqlWhereClause.isEmpty() ) { if ( !whereClause.isEmpty() ) whereClause += " AND "; whereClause += '(' + mSource->mSqlWhereClause + ')'; } if ( !declareCursor( whereClause ) ) { mClosed = true; iteratorClosed(); return; } mFetched = 0; }