static rc_t RestoreReadMake ( RestoreRead **objp, const VTable *tbl, const VCursor* native_curs ) { rc_t rc; char name[]="PRIMARY_ALIGNMENT"; /* create the object */ RestoreRead *obj = malloc ( sizeof * obj ); memset(obj,0,sizeof * obj); if ( obj == NULL ) { *objp=0; rc = RC ( rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted ); } else { rc = VCursorLinkedCursorGet(native_curs,name,&obj->curs); if(rc == 0){ VCursorAddRef(obj->curs); } else { /* get at the parent database */ const VDatabase *db; rc = VTableOpenParentRead ( tbl, & db ); if ( rc == 0 ) { const VTable *patbl; /* open the primary alignment table */ rc = VDatabaseOpenTableRead ( db, & patbl, name ); VDatabaseRelease ( db ); if ( rc == 0 ) { /* create a cursor */ rc = VTableCreateCachedCursorRead( patbl, &obj->curs, 32*1024*1024UL ); VTableRelease ( patbl ); if ( rc == 0 ) { /* add columns to cursor */ rc = VCursorAddColumn ( obj -> curs, & obj -> read_idx, "( INSDC:4na:bin ) READ" ); if ( rc == 0 ) { rc = VCursorOpen ( obj -> curs ); if ( rc == 0 ) { VCursorLinkedCursorSet( native_curs, name, obj->curs ); SUB_DEBUG( ( "SUB.Make in 'seq-restore-read.c'\n" ) ); * objp = obj; return 0; } } VCursorRelease ( obj -> curs ); } } } free ( obj ); } } return rc; }
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; }
static rc_t open_RR_cursor( Read_Restorer * obj, const VTable *tbl, const VCursor* native_curs, const char * tablename ) { rc_t rc = VCursorLinkedCursorGet( native_curs, tablename, &obj->curs ); if ( rc != 0 ) { /* get at the parent database */ const VDatabase *db; rc = VTableOpenParentRead ( tbl, & db ); if ( rc == 0 ) { const VTable *patbl; /* open the primary alignment table */ rc = VDatabaseOpenTableRead ( db, & patbl, tablename ); VDatabaseRelease ( db ); if ( rc == 0 ) { /* create a cursor */ rc = VTableCreateCachedCursorRead( patbl, &obj->curs, 32*1024*1024UL ); /* rc = VTableCreateCursorRead( patbl, &obj->curs ); */ VTableRelease ( patbl ); if ( rc == 0 ) rc = VCursorLinkedCursorSet( native_curs, tablename, obj->curs ); } } } if ( rc == 0 ) { /* add columns to cursor */ rc = VCursorAddColumn ( obj -> curs, & obj -> read_idx, "( INSDC:4na:bin ) READ" ); if ( GetRCState(rc) == rcExists ) rc = 0; if ( rc == 0 ) { rc = VCursorOpen ( obj -> curs ); } } return rc; }