static rc_t OpenTableAndCursor(VDatabase *db, VTable **ptbl, VCursor **pcurs, uint32_t cid[], unsigned ncols) { rc_t rc = VDatabaseCreateTable(db, ptbl, "READ_STATS", kcmCreate | kcmMD5, "READ_STATS"); if (rc == 0) { rc = VTableColumnCreateParams(*ptbl, kcmCreate, kcsCRC32, 0); if (rc == 0) { rc = VTableCreateCursorWrite(*ptbl, &pcurs, kcmInsert); if (rc == 0) { unsigned i; for (i = 0; i < ncols && rc == 0; ++i) { rc = VCursorAddColumn(*pcurs, &cid[i], column_name[i]); } if (rc == 0) { rc = VCursorOpen(*pcurs); if (rc == 0) return 0; } VCursorRelease(*pcurs); } } VTableRelease(*ptbl); } *pcurs = NULL; *ptbl = NULL; return rc; }
static rc_t SaveObjects ( const ObjectTable* data, VDatabase* db ) { VTable* tbl; rc_t rc = VDatabaseCreateTable(db, &tbl, "object_inst", kcmCreate | kcmMD5, "OBJECTS"); if (rc == 0) { rc_t rc2; VCursor *cur; rc = VTableCreateCursorWrite( tbl, &cur, kcmInsert ); 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) { rc = VCursorOpen( cur ); if (rc == 0) { const Object* obj = (const Object*)BSTreeFirst(data); while (rc == 0 && obj != NULL) { rc = VCursorOpenRow( cur ); if (rc == 0) rc = VCursorWrite( cur, id_idx, sizeof(obj->id) * 8, &obj->id, 0, 1); if (rc == 0) rc = VCursorWrite( cur, name_idx, StringLength(obj->name) * 8, obj->name->addr, 0, 1); if (rc == 0) rc = VCursorWrite( cur, proj_idx, StringLength(obj->project) * 8, obj->project->addr, 0, 1); if (rc == 0) rc = VCursorWrite( cur, dname_idx, StringLength(obj->display_name) * 8, obj->display_name->addr, 0, 1); if (rc == 0) rc = VCursorWrite( cur, size_idx, sizeof(obj->size) * 8, &obj->size, 0, 1); if (rc == 0) rc = VCursorWrite( cur, csum_idx, StringLength(obj->encryption_key) * 8, obj->encryption_key->addr, 0, 1); if (rc == 0) rc = VCursorWrite( cur, enc_idx, StringLength(obj->encryption_key) * 8, obj->encryption_key->addr, 0, 1); if (rc == 0) rc = VCursorCommitRow( cur ); if (rc == 0) rc = VCursorCloseRow( cur ); obj = (const Object*)BSTNodeNext(&obj->dad); } if (rc == 0) rc = VCursorCommit( cur ); } } rc2 = VCursorRelease(cur); if (rc == 0) rc = rc2; } rc2 = VTableRelease(tbl); if (rc == 0) rc = rc2; } return rc; }
static rc_t SaveProjects( const ProjectTable* data, VDatabase* db ) { VTable* tbl; rc_t rc = VDatabaseCreateTable(db, &tbl, "project_inst", kcmCreate | kcmMD5, "PROJECTS"); if (rc == 0) { rc_t rc2; VCursor *cur; rc = VTableCreateCursorWrite( tbl, &cur, kcmInsert ); if (rc == 0) { uint32_t id_idx, name_idx, dl_idx, enc_idx; rc = VCursorAddColumn( cur, &id_idx, "id" ); rc = VCursorAddColumn( cur, &name_idx, "name" ); rc = VCursorAddColumn( cur, &dl_idx, "download_ticket" ); rc = VCursorAddColumn( cur, &enc_idx, "encryption_key" ); if (rc == 0) { rc = VCursorOpen( cur ); if (rc == 0) { const Project* p = (const Project*)BSTreeFirst(data); while (rc == 0 && p != NULL) { rc = VCursorOpenRow( cur ); if (rc == 0) rc = VCursorWrite( cur, id_idx, sizeof(p->id) * 8, &p->id, 0, 1); if (rc == 0) rc = VCursorWrite( cur, name_idx, StringLength(p->name) * 8, p->name->addr, 0, 1); if (rc == 0) rc = VCursorWrite( cur, dl_idx, StringLength(p->download_ticket) * 8, p->download_ticket->addr, 0, 1); if (rc == 0) rc = VCursorWrite( cur, enc_idx, StringLength(p->encryption_key) * 8, p->encryption_key->addr, 0, 1); if (rc == 0) rc = VCursorCommitRow( cur ); if (rc == 0) rc = VCursorCloseRow( cur ); p = (const Project*)BSTNodeNext(&p->dad); } if (rc == 0) rc = VCursorCommit( cur ); } } rc2 = VCursorRelease(cur); if (rc == 0) rc = rc2; } rc2 = VTableRelease(tbl); if (rc == 0) rc = rc2; } return rc; }
rc_t write_statistic_into_db( KDirectory *dir, statistic * data, const KNamelist *schema_list, const char *src_path, uint64_t * written, bool show_progress ) { VDBManager *my_manager; rc_t rc; if ( written != NULL ) *written = 0; rc = VDBManagerMakeUpdate ( &my_manager, dir ); if ( rc != 0 ) LogErr( klogInt, rc, "VDBManagerMakeUpdate() failed\n" ); else { VSchema * my_schema; rc = make_schema( schema_list, my_manager, &my_schema ); if ( rc == 0 ) { VDatabase *my_database; rc = VDBManagerOpenDBUpdate( my_manager, &my_database, my_schema, src_path ); if ( rc != 0 ) LogErr( klogInt, rc, "VDBManagerOpenDBUpdate() failed\n" ); else { VTable * my_table; rc = VDatabaseCreateTable( my_database, &my_table, "QUAL_STAT", kcmOpen | kcmParents, "QUAL_STAT" ); if ( rc !=0 ) LogErr( klogInt, rc, "VDatabaseCreateTable() failed\n" ); else { rc = write_statistic_cmn( my_table, data, written, show_progress ); VTableRelease( my_table ); } VDatabaseRelease( my_database ); } VSchemaRelease( my_schema ); } VDBManagerRelease( my_manager ); } return rc; }
rc_t KMain ( int argc, char *argv [] ) { VDBManager *vmgr; rc_t rc = VDBManagerMakeUpdate ( & vmgr, NULL ); if ( rc != 0 ) LOGERR ( klogInt, rc, "failed to make update manager" ); else { VSchema *vschema; rc = VDBManagerMakeSchema ( vmgr, & vschema ); if ( rc != 0 ) LOGERR ( klogInt, rc, "failed to make empty schema" ); else { const char *file = "align/align.vschema"; #if _DEBUGGING VSchemaListSymtab ( vschema ); #endif rc = VSchemaParseFile ( vschema, "align/align.vschema" ); #if _DEBUGGING VSchemaListSymtab ( vschema ); #endif if ( rc != 0 ) { pLOGERR ( klogErr, rc, "failed to parse schema file '$(file)'" , "file=%s" , file ); } else { VDatabase *vdb; const char *path = "test-ac-db"; const char *typespec = "NCBI:align:db:alignment"; rc = VDBManagerCreateDB ( vmgr, & vdb, vschema, typespec, kcmInit, path ); if ( rc != 0 ) { pLOGERR ( klogInt, rc, "failed to create '$(typespec)' db at '$(path)'" , "typespec=%s,path=%s" , typespec , path ); } else { VTable *vtbl; const char *member = "align"; path = member; rc = VDatabaseCreateTable ( vdb, & vtbl, member, kcmInit, path ); if ( rc != 0 ) { pLOGERR ( klogInt, rc, "failed to create '$(member)' table at '$(path)'" , "member=%s,path=%s" , member , path ); } else { printf ( "done\n" ); VTableRelease ( vtbl ); } VDatabaseRelease ( vdb ); } } VSchemaRelease ( vschema ); } VDBManagerRelease ( vmgr ); } return rc; }