rc_t write_statistic_into_tab( KDirectory *dir, statistic * data, const KNamelist *schema_list, const char *output_file_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 ) { VTable * my_table; rc = VDBManagerCreateTable( my_manager, &my_table, my_schema, "NCBI:align:tbl:qstat", kcmInit | kcmParents, output_file_path ); if ( rc != 0 ) LogErr( klogInt, rc, "VDBManagerCreateTable() failed\n" ); else { rc = write_statistic_cmn( my_table, data, written, show_progress ); VTableRelease( my_table ); } VSchemaRelease( my_schema ); } VDBManagerRelease( my_manager ); } return rc; }
schema_p new_schema ( const char *name ) { tbl_p tbl = (tbl_p) malloc (sizeof (tbl_desc_struct)); tbl->sch = make_schema ( name ); tbl->sch->tbl = tbl; tbl->num_records = 0; tbl->current_pg = NULL; tbl->next = db_tables; db_tables = tbl; return tbl->sch; }
SyncMetadataManager::SyncMetadataManager(std::string path, bool should_encrypt, util::Optional<std::vector<char>> encryption_key) { constexpr uint64_t SCHEMA_VERSION = 1; std::lock_guard<std::mutex> lock(m_metadata_lock); Realm::Config config; config.path = std::move(path); config.schema = make_schema(); config.schema_version = SCHEMA_VERSION; config.schema_mode = SchemaMode::Automatic; #if REALM_PLATFORM_APPLE if (should_encrypt && !encryption_key) { encryption_key = keychain::metadata_realm_encryption_key(); } #endif if (should_encrypt) { if (!encryption_key) { throw std::invalid_argument("Metadata Realm encryption was specified, but no encryption key was provided."); } config.encryption_key = std::move(*encryption_key); } // Open the Realm. SharedRealm realm = Realm::get_shared_realm(config); // Get data about the (hardcoded) schemas. DescriptorRef descriptor = ObjectStore::table_for_object_type(realm->read_group(), c_sync_userMetadata)->get_descriptor(); m_user_schema = { descriptor->get_column_index(c_sync_identity), descriptor->get_column_index(c_sync_marked_for_removal), descriptor->get_column_index(c_sync_user_token), descriptor->get_column_index(c_sync_auth_server_url), descriptor->get_column_index(c_sync_user_is_admin), }; descriptor = ObjectStore::table_for_object_type(realm->read_group(), c_sync_fileActionMetadata)->get_descriptor(); m_file_action_schema = { descriptor->get_column_index(c_sync_original_name), descriptor->get_column_index(c_sync_new_name), descriptor->get_column_index(c_sync_action), descriptor->get_column_index(c_sync_url), descriptor->get_column_index(c_sync_identity) }; m_metadata_config = std::move(config); }
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; }