static rc_t vdb_info_1( VSchema * schema, dump_format_t format, const VDBManager *mgr, const char * acc_or_path, const char * table_name ) { rc_t rc = 0; vdb_info_data data; memset( &data, 0, sizeof data ); data.s_platform = PT_NONE; data.acc = acc_or_path; /* #1 get path-type */ data.s_path_type = get_path_type( mgr, acc_or_path ); if ( data.s_path_type[ 0 ] == 'D' || data.s_path_type[ 0 ] == 'T' ) { rc_t rc1; /* #2 fork by table or database */ switch ( data.s_path_type[ 0 ] ) { case 'D' : vdb_info_db( &data, schema, mgr ); break; case 'T' : vdb_info_tab( &data, schema, mgr ); break; } /* try to resolve the path locally */ rc1 = resolve_accession( acc_or_path, data.path, sizeof data.path, false ); /* vdb-dump-helper.c */ if ( rc1 == 0 ) data.file_size = get_file_size( data.path, false ); else { /* try to resolve the path remotely */ rc1 = resolve_accession( acc_or_path, data.path, sizeof data.path, true ); /* vdb-dump-helper.c */ if ( rc1 == 0 ) { data.file_size = get_file_size( data.path, true ); /* try to find out the cache-file */ rc1 = resolve_cache( acc_or_path, data.cache, sizeof data.cache ); /* vdb-dump-helper.c */ if ( rc1 == 0 ) { /* try to find out cache completeness */ check_cache_comleteness( data.cache, &data.cache_percent, &data.bytes_in_cache ); } } } switch ( format ) { case df_xml : rc = vdb_info_print_xml( &data ); break; case df_json : rc = vdb_info_print_json( &data ); break; case df_csv : rc = vdb_info_print_sep( &data, ',' ); break; case df_tab : rc = vdb_info_print_sep( &data, '\t' ); break; case df_sql : rc = vdb_info_print_sql( table_name, &data ); break; default : rc = vdb_info_print_dflt( &data ); break; } } return rc; }
static rc_t report_references( const VDBManager *vdb_mgr, VFSManager * vfs_mgr, const char * spec, bool extended ) { const String * resolved = NULL; rc_t rc = resolve_accession( vfs_mgr, spec, &resolved ); if ( rc == 0 && resolved != NULL ) { rc = KOutMsg( "resolved into '%S'\n", resolved ); if ( rc == 0 ) { int path_type = ( VDBManagerPathType ( vdb_mgr, "%s", spec ) & ~ kptAlias ); switch( path_type ) { case kptDatabase : rc = report_ref_database( vdb_mgr, vfs_mgr, spec, extended ); break; case kptTable : KOutMsg( "cannot report references on a table-object\n" ); rc = RC ( rcApp, rcNoTarg, rcAccessing, rcParam, rcInvalid ); (void)LOGERR( klogErr, rc, "cannot report references on a table-object" ); break; default : KOutMsg( "the given object is not a vdb-database\n" ); rc = RC ( rcApp, rcNoTarg, rcAccessing, rcParam, rcInvalid ); (void)LOGERR( klogErr, rc, "the given object is not a vdb-database" ); break; } } StringWhack ( resolved ); } return rc; }
static rc_t report_ref_loc( const VDBManager *vdb_mgr, VFSManager * vfs_mgr, const char * seq_id ) { const String * path; rc_t rc = resolve_accession( vfs_mgr, seq_id, &path ); if ( rc == 0 ) { rc = KOutMsg( "location:\t%S\n", path ); if ( rc == 0 ) { uint32_t pt = VDBManagerPathType ( vdb_mgr, "%S", path ); const char * spt = path_type_2_str( pt ); rc = KOutMsg( "pathtype:\t%s\n", spt ); } free ( (void*) path ); } return rc; }
static rc_t vdb_info_1( VSchema * schema, dump_format_t format, const VDBManager *mgr, const char * acc_or_path, const char * table_name ) { rc_t rc = 0; vdb_info_data data; memset( &data, 0, sizeof data ); data.s_platform = PT_NONE; data.acc = acc_or_path; /* #1 get path-type */ data.s_path_type = get_path_type( mgr, acc_or_path ); if ( data.s_path_type[ 0 ] == 'D' || data.s_path_type[ 0 ] == 'T' ) { rc_t rc1; /* #2 fork by table or database */ switch ( data.s_path_type[ 0 ] ) { case 'D' : vdb_info_db( &data, schema, mgr ); break; case 'T' : vdb_info_tab( &data, schema, mgr ); break; } rc1 = resolve_accession( acc_or_path, data.path, sizeof data.path, false ); if ( rc1 == 0 ) data.file_size = get_file_size( data.path ); switch ( format ) { case df_xml : rc = vdb_info_print_xml( &data ); break; case df_json : rc = vdb_info_print_json( &data ); break; case df_csv : rc = vdb_info_print_sep( &data, ',' ); break; case df_tab : rc = vdb_info_print_sep( &data, '\t' ); break; case df_sql : rc = vdb_info_print_sql( table_name, &data ); break; default : rc = vdb_info_print_dflt( &data ); break; } } return rc; }
rc_t foreach_argument( Args * args, KDirectory *dir, bool div_by_spotgrp, bool * empty, rc_t ( CC * on_argument ) ( const char * path, const char * spot_group, void * data ), void * data ) { uint32_t count; rc_t rc = ArgsParamCount( args, &count ); if ( rc != 0 ) { LOGERR( klogInt, rc, "ArgsParamCount() failed" ); } else { uint32_t idx; if ( empty != NULL ) { *empty = ( count == 0 ); } for ( idx = 0; idx < count && rc == 0; ++idx ) { const char *param = NULL; rc = ArgsParamValue( args, idx, ¶m ); if ( rc != 0 ) { LOGERR( klogInt, rc, "ArgsParamvalue() failed" ); } else { char * path = NULL; char * spot_group = NULL; rc = split_argument_into_path_and_readgroup( param, &path, &spot_group ); if ( rc == 0 && path != NULL ) { /* in case there is no spotgroup-override from the commandline AND the option to divide by spot-group is set, let spot_group point to an empty string ---> divide by original spot-group! */ if ( spot_group == NULL && div_by_spotgrp ) { spot_group = calloc( 1, 1 ); } #if TOOLS_USE_SRAPATH != 0 if ( !is_this_a_filesystem_path( path ) ) { rc = resolve_accession( dir, &path ); } #endif if ( rc == 0 ) { rc = on_argument( path, spot_group, data ); } free( path ); if ( spot_group != NULL ) free( spot_group ); } } } } return rc; }