Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
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;
}
Example #4
0
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;
}
Example #5
0
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;
}