OGRFeature *OGRMySQLLayer::GetNextRawFeature() { /* -------------------------------------------------------------------- */ /* Do we need to establish an initial query? */ /* -------------------------------------------------------------------- */ if( iNextShapeId == 0 && hResultSet == NULL ) { CPLAssert( pszQueryStatement != NULL ); poDS->RequestLongResult( this ); if( mysql_query( poDS->GetConn(), pszQueryStatement ) ) { poDS->ReportError( pszQueryStatement ); return NULL; } hResultSet = mysql_use_result( poDS->GetConn() ); if( hResultSet == NULL ) { poDS->ReportError( "mysql_use_result() failed on query." ); return FALSE; } } /* -------------------------------------------------------------------- */ /* Fetch next record. */ /* -------------------------------------------------------------------- */ char **papszRow; unsigned long *panLengths; papszRow = mysql_fetch_row( hResultSet ); if( papszRow == NULL ) { ResetReading(); return NULL; } panLengths = mysql_fetch_lengths( hResultSet ); /* -------------------------------------------------------------------- */ /* Process record. */ /* -------------------------------------------------------------------- */ OGRFeature *poFeature = RecordToFeature( papszRow, panLengths ); iNextShapeId++; return poFeature; }
OGRFeature *OGRIngresLayer::GetNextRawFeature() { /* -------------------------------------------------------------------- */ /* Do we need to establish an initial query? */ /* -------------------------------------------------------------------- */ if( iNextShapeId == 0 && poResultSet == NULL ) { CPLAssert( osQueryStatement.size() != 0 ); poDS->EstablishActiveLayer( this ); poResultSet = new OGRIngresStatement( poDS->GetTransaction() ); /* -------------------------------------------------------------------- */ /* Binding Filter Geometry */ /* -------------------------------------------------------------------- */ if (m_poFilterGeom) { BindQueryGeometry(poResultSet); } if( !poResultSet->ExecuteSQL( osQueryStatement ) ) return NULL; } /* -------------------------------------------------------------------- */ /* Fetch next record. */ /* -------------------------------------------------------------------- */ char **papszRow = poResultSet->GetRow(); if( papszRow == NULL ) { ResetReading(); return NULL; } /* -------------------------------------------------------------------- */ /* Process record. */ /* -------------------------------------------------------------------- */ OGRFeature *poFeature = RecordToFeature( papszRow ); iNextShapeId++; return poFeature; }
OGRFeature *OGRIngresLayer::GetNextRawFeature() { /* -------------------------------------------------------------------- */ /* Do we need to establish an initial query? */ /* -------------------------------------------------------------------- */ if( iNextShapeId == 0 && poResultSet == NULL ) { CPLAssert( !osQueryStatement.empty() ); poDS->EstablishActiveLayer( this ); poResultSet = new OGRIngresStatement( poDS->GetConn() ); if( !poResultSet->ExecuteSQL( osQueryStatement ) ) return NULL; } /* -------------------------------------------------------------------- */ /* Fetch next record. */ /* -------------------------------------------------------------------- */ char **papszRow = poResultSet->GetRow(); if( papszRow == NULL ) { ResetReading(); return NULL; } /* -------------------------------------------------------------------- */ /* Process record. */ /* -------------------------------------------------------------------- */ OGRFeature *poFeature = RecordToFeature( papszRow ); iNextShapeId++; return poFeature; }
OGRFeature *OGRIngresTableLayer::GetFeature( long nFeatureId ) { if( pszFIDColumn == NULL ) return OGRIngresLayer::GetFeature( nFeatureId ); /* -------------------------------------------------------------------- */ /* Discard any existing resultset. */ /* -------------------------------------------------------------------- */ ResetReading(); /* -------------------------------------------------------------------- */ /* Prepare query command that will just fetch the one record of */ /* interest. */ /* -------------------------------------------------------------------- */ char *pszFieldList = BuildFields(); char *pszCommand = (char *) CPLMalloc(strlen(pszFieldList)+2000); sprintf( pszCommand, "SELECT %s FROM %s WHERE %s = %ld", pszFieldList, poFeatureDefn->GetName(), pszFIDColumn, nFeatureId ); CPLFree( pszFieldList ); /* -------------------------------------------------------------------- */ /* Issue the command. */ /* -------------------------------------------------------------------- */ if( ingres_query( poDS->GetConn(), pszCommand ) ) { poDS->ReportError( pszCommand ); return NULL; } CPLFree( pszCommand ); hResultSet = ingres_store_result( poDS->GetConn() ); if( hResultSet == NULL ) { poDS->ReportError( "ingres_store_result() failed on query." ); return NULL; } /* -------------------------------------------------------------------- */ /* Fetch the result record. */ /* -------------------------------------------------------------------- */ char **papszRow; unsigned long *panLengths; papszRow = ingres_fetch_row( hResultSet ); if( papszRow == NULL ) return NULL; panLengths = ingres_fetch_lengths( hResultSet ); /* -------------------------------------------------------------------- */ /* Transform into a feature. */ /* -------------------------------------------------------------------- */ iNextShapeId = nFeatureId; OGRFeature *poFeature = RecordToFeature( papszRow, panLengths ); iNextShapeId = 0; /* -------------------------------------------------------------------- */ /* Cleanup */ /* -------------------------------------------------------------------- */ if( hResultSet != NULL ) ingres_free_result( hResultSet ); hResultSet = NULL; return poFeature; }
OGRFeature *OGRMySQLTableLayer::GetFeature( GIntBig nFeatureId ) { if( pszFIDColumn == NULL ) return OGRMySQLLayer::GetFeature( nFeatureId ); /* -------------------------------------------------------------------- */ /* Discard any existing resultset. */ /* -------------------------------------------------------------------- */ ResetReading(); /* -------------------------------------------------------------------- */ /* Prepare query command that will just fetch the one record of */ /* interest. */ /* -------------------------------------------------------------------- */ char *pszFieldList = BuildFields(); CPLString osCommand; osCommand.Printf( "SELECT %s FROM `%s` WHERE `%s` = " CPL_FRMT_GIB, pszFieldList, poFeatureDefn->GetName(), pszFIDColumn, nFeatureId ); CPLFree( pszFieldList ); /* -------------------------------------------------------------------- */ /* Issue the command. */ /* -------------------------------------------------------------------- */ if( mysql_query( poDS->GetConn(), osCommand ) ) { poDS->ReportError( osCommand ); return NULL; } hResultSet = mysql_store_result( poDS->GetConn() ); if( hResultSet == NULL ) { poDS->ReportError( "mysql_store_result() failed on query." ); return NULL; } /* -------------------------------------------------------------------- */ /* Fetch the result record. */ /* -------------------------------------------------------------------- */ char **papszRow; unsigned long *panLengths; papszRow = mysql_fetch_row( hResultSet ); if( papszRow == NULL ) return NULL; panLengths = mysql_fetch_lengths( hResultSet ); /* -------------------------------------------------------------------- */ /* Transform into a feature. */ /* -------------------------------------------------------------------- */ iNextShapeId = nFeatureId; OGRFeature *poFeature = RecordToFeature( papszRow, panLengths ); iNextShapeId = 0; /* -------------------------------------------------------------------- */ /* Cleanup */ /* -------------------------------------------------------------------- */ if( hResultSet != NULL ) mysql_free_result( hResultSet ); hResultSet = NULL; return poFeature; }