rc_t AlignRefTableCursor(const VTable* table, const VCursor *native_curs, const VCursor** ref_cursor,const VTable **reftbl) { rc_t rc = 0; char ref_tbl_name[512] = "REFERENCE"; const KMetadata* meta; const VCursor *curs; if( (rc = VTableOpenMetadataRead(table, &meta)) == 0 ) { const KMDataNode* node; if( (rc = KMetadataOpenNodeRead(meta, &node, "CONFIG/REF_TABLE")) == 0 ) { size_t sz; rc = KMDataNodeReadCString(node, ref_tbl_name, sizeof(ref_tbl_name), &sz); ref_tbl_name[sz] = '\0'; KMDataNodeRelease(node); } KMetadataRelease(meta); } rc = VCursorLinkedCursorGet(native_curs,ref_tbl_name,&curs); if(rc != 0){ const VDatabase *db; const VTable *tbl; /* get at the parent database */ rc = VTableOpenParentRead ( table, & db ); if(rc != 0) return rc; /* open the table */ rc = VDatabaseOpenTableRead ( db, &tbl, ref_tbl_name); VDatabaseRelease ( db ); if(rc != 0) return rc; /* create a cursor */ rc = VTableCreateCachedCursorRead(tbl, &curs,256*1024*1024); if(reftbl){ *reftbl = tbl; } else { VTableRelease(tbl); } if(rc != 0) return rc; rc = VCursorPermitPostOpenAdd( curs ); if(rc != 0) return rc; rc = VCursorOpen( curs ); if(rc != 0) return rc; if(native_curs){ rc = VCursorLinkedCursorSet(native_curs,ref_tbl_name,curs); } if(rc != 0) return rc; } else { VCursorAddRef(curs); } *ref_cursor = curs; return 0; }
rc_t SRATableFillOut ( SRATable *self, bool update ) { rc_t rc; /* require these operations to succeed */ rc = VCursorPermitPostOpenAdd(self->curs); if ( rc != 0 ) return rc; rc = VCursorOpen(self->curs); if ( rc != 0 ) return rc; self -> curs_open = true; if ( ! update ) rc = SRATableLoadMetadata(self); return rc; }
void CVDBCursor::Init(const CVDBTable& table) { if ( *this ) { NCBI_THROW2(CSraException, eInvalidState, "Cannot init VDB cursor again", RC(rcApp, rcCursor, rcConstructing, rcSelf, rcOpen)); } if ( rc_t rc = VTableCreateCursorRead(table, x_InitPtr()) ) { *x_InitPtr() = 0; NCBI_THROW2(CSraException, eInitFailed, "Cannot create VDB cursor", rc); } if ( rc_t rc = VCursorPermitPostOpenAdd(*this) ) { NCBI_THROW2(CSraException, eInitFailed, "Cannot allow VDB cursor post open column add", rc); } if ( rc_t rc = VCursorOpen(*this) ) { NCBI_THROW2(CSraException, eInitFailed, "Cannot open VDB cursor", rc); } m_Table = table; }