rc_t CVDBCursor::OpenRowRc(TVDBRowId row_id) { CloseRow(); if ( rc_t rc = VCursorSetRowId(*this, row_id) ) { return rc; } if ( rc_t rc = VCursorOpenRow(*this) ) { return rc; } m_RowOpened = true; return 0; }
static rc_t copy_table ( const vtblcp_parms *pb, VCursor *dcurs, const VCursor *scurs, const vtblcp_column_map *cm, uint32_t count, uint32_t rdfilt_idx ) { /* open source */ rc_t rc = VCursorOpen ( scurs ); if ( rc != 0 ) LOGERR ( klogErr, rc, "failed to open source cursor" ); else { /* get row range */ int64_t row, last; uint64_t range_count; rc = VCursorIdRange ( scurs, 0, & row, & range_count ); last = row + range_count; if ( rc != 0 ) LOGERR ( klogInt, rc, "failed to determine row range for source cursor" ); else { /* open desination cursor */ rc = VCursorOpen ( dcurs ); if ( rc != 0 ) LOGERR ( klogErr, rc, "failed to open destination cursor" ); else { /* focus destination on initial source row */ rc = VCursorSetRowId ( dcurs, row ); if ( rc != 0 ) PLOGERR ( klogErr, (klogErr, rc, "failed to set destination cursor row to id '$(row)'", "row=%" LD64, row )); else { /* copy each row */ for ( ; row <= last; ++ row ) { rc = copy_row ( pb, dcurs, scurs, cm, count, rdfilt_idx, row ); if ( rc != 0 ) break; } /* commit changes */ if ( rc == 0 ) rc = VCursorCommit ( dcurs ); } } } } return rc; }
/* OpenSpot * opens an existing spot record from id * * "id" [ IN ] - 1-based spot id */ LIB_EXPORT rc_t CC SRATableOpenSpot( SRATable *self, spotid_t id ) { rc_t rc; if (self == NULL) return RC(RC_MODULE, RC_TARGET, rcOpening, rcSelf, rcNull); #if 0 /* TODO: translate spot id to row id */ rc = VCursorSetRowId(self->curs, id); if (rc == 0) { rc = VCursorOpenRow(self->curs); } #else rc = RC(RC_MODULE, RC_TARGET, rcOpening, rcFunction, rcUnsupported); #endif return rc; }
static rc_t LoadObjects ( ObjectTable* data, const VDatabase* db ) { const VTable* tbl; rc_t rc = VDatabaseOpenTableRead(db, &tbl, "OBJECTS"); if (rc == 0) { rc_t rc2; const VCursor *cur; rc = VTableCreateCachedCursorRead( tbl, &cur, CursorCacheSize ); if (rc == 0) { uint32_t id_idx, name_idx, proj_idx, dname_idx, size_idx, csum_idx, enc_idx; if (rc == 0) rc = VCursorAddColumn( cur, &id_idx, "id" ); if (rc == 0) rc = VCursorAddColumn( cur, &name_idx, "name" ); if (rc == 0) rc = VCursorAddColumn( cur, &proj_idx, "project" ); if (rc == 0) rc = VCursorAddColumn( cur, &dname_idx, "display_name" ); if (rc == 0) rc = VCursorAddColumn( cur, &size_idx, "size" ); if (rc == 0) rc = VCursorAddColumn( cur, &csum_idx, "checksum" ); if (rc == 0) rc = VCursorAddColumn( cur, &enc_idx, "encryption_key" ); if (rc == 0 && HasData(tbl)) { rc = VCursorOpen( cur ); if (rc == 0) { int64_t first; uint64_t count; rc = VCursorIdRange( cur, 0, &first, &count ); if (rc == 0) { uint64_t i; for (i=0; i < count; ++i) { const void* ptr; uint32_t elem_count; uint32_t id; String name; String project; String display_name; uint64_t size; String checksum; String encryption_key; rc = VCursorSetRowId(cur, first + i); if (rc == 0) rc = VCursorOpenRow( cur ); if (rc == 0) rc = VCursorCellData( cur, id_idx, NULL, &ptr, NULL, NULL); if (rc == 0) id = *(uint32_t*)ptr; if (rc == 0) rc = VCursorCellData( cur, name_idx, NULL, &ptr, NULL, &elem_count); if (rc == 0) StringInit(&name, (const char*)ptr, elem_count, elem_count); if (rc == 0) rc = VCursorCellData( cur, proj_idx, NULL, &ptr, NULL, &elem_count); if (rc == 0) StringInit(&project, (const char*)ptr, elem_count, elem_count); if (rc == 0) rc = VCursorCellData( cur, dname_idx, NULL, &ptr, NULL, &elem_count); if (rc == 0) StringInit(&display_name, (const char*)ptr, elem_count, elem_count); if (rc == 0) rc = VCursorCellData( cur, size_idx, NULL, &ptr, NULL, NULL); if (rc == 0) size = *(uint32_t*)ptr; if (rc == 0) rc = VCursorCellData( cur, enc_idx, NULL, &ptr, NULL, &elem_count); if (rc == 0) StringInit(&encryption_key, (const char*)ptr, elem_count, elem_count); if (rc == 0) rc = VCursorCellData( cur, csum_idx, NULL, &ptr, NULL, &elem_count); if (rc == 0) StringInit(&checksum, (const char*)ptr, elem_count, elem_count); if (rc == 0) rc = KeyRingDataInsertObject(data, id, &name, &project, &display_name, size, &checksum, &encryption_key); if (rc == 0) rc = VCursorCloseRow( cur ); if (rc != 0) break; } } } } rc2 = VCursorRelease(cur); if (rc == 0) rc = rc2; } rc2 = VTableRelease(tbl); if (rc == 0) rc = rc2; } return rc; }
static rc_t LoadProjects( ProjectTable* data, const VDatabase* db ) { const VTable* tbl; rc_t rc = VDatabaseOpenTableRead(db, &tbl, "PROJECTS"); if (rc == 0) { rc_t rc2; const VCursor *cur; rc = VTableCreateCachedCursorRead( tbl, &cur, CursorCacheSize ); if (rc == 0) { uint32_t id_idx, name_idx, dl_idx, enc_idx; rc = VCursorAddColumn( cur, &id_idx, "id" ); if (rc == 0) rc = VCursorAddColumn( cur, &name_idx, "name" ); if (rc == 0) rc = VCursorAddColumn( cur, &dl_idx, "download_ticket" ); if (rc == 0) rc = VCursorAddColumn( cur, &enc_idx, "encryption_key" ); if (rc == 0 && HasData(tbl)) { rc = VCursorOpen( cur ); if (rc == 0) { int64_t first; uint64_t count; rc = VCursorIdRange( cur, 0, &first, &count ); if (rc == 0) { uint64_t i; for (i=0; i < count; ++i) { const void* ptr; uint32_t elem_count; uint32_t id; String name; String download_ticket; String encryption_key; rc = VCursorSetRowId(cur, first + i); if (rc == 0) rc = VCursorOpenRow( cur ); if (rc == 0) rc = VCursorCellData( cur, id_idx, NULL, &ptr, NULL, NULL); if (rc == 0) id = *(uint32_t*)ptr; if (rc == 0) rc = VCursorCellData( cur, name_idx, NULL, &ptr, NULL, &elem_count); if (rc == 0) StringInit(&name, (const char*)ptr, elem_count, elem_count); if (rc == 0) rc = VCursorCellData( cur, dl_idx, NULL, &ptr, NULL, &elem_count); if (rc == 0) StringInit(&download_ticket, (const char*)ptr, elem_count, elem_count); if (rc == 0) rc = VCursorCellData( cur, enc_idx, NULL, &ptr, NULL, &elem_count); if (rc == 0) StringInit(&encryption_key, (const char*)ptr, elem_count, elem_count); if (rc == 0) rc = KeyRingDataInsertProject(data, id, &name, &download_ticket, &encryption_key); if (rc == 0) rc = VCursorCloseRow( cur ); if (rc != 0) break; } } } } rc2 = VCursorRelease(cur); if (rc == 0) rc = rc2; } rc2 = VTableRelease(tbl); if (rc == 0) rc = rc2; } return rc; }