rc_t vdb_info( Vector * schema_list, dump_format_t format, const VDBManager *mgr, const char * acc_or_path, struct num_gen * rows ) { rc_t rc = 0; VSchema * schema = NULL; vdh_parse_schema( mgr, &schema, schema_list ); if ( format == df_sql ) rc = vdb_info_print_sql_header( acc_or_path ); if ( rows != NULL && !num_gen_empty( rows ) ) { const struct num_gen_iter * iter; rc = num_gen_iterator_make( rows, &iter ); if ( rc == 0 ) { int64_t max_row; rc = num_gen_iterator_max( iter, &max_row ); if ( rc == 0 ) { int64_t id; uint8_t digits = digits_of( max_row ); while ( rc == 0 && num_gen_iterator_next( iter, &id, &rc ) ) { char acc[ 64 ]; size_t num_writ; rc_t rc1 = -1; switch ( digits ) { case 1 : rc1 = string_printf ( acc, sizeof acc, &num_writ, "%s%ld", acc_or_path, id ); break; case 2 : rc1 = string_printf ( acc, sizeof acc, &num_writ, "%s%.02ld", acc_or_path, id ); break; case 3 : rc1 = string_printf ( acc, sizeof acc, &num_writ, "%s%.03ld", acc_or_path, id ); break; case 4 : rc1 = string_printf ( acc, sizeof acc, &num_writ, "%s%.04ld", acc_or_path, id ); break; case 5 : rc1 = string_printf ( acc, sizeof acc, &num_writ, "%s%.05ld", acc_or_path, id ); break; case 6 : rc1 = string_printf ( acc, sizeof acc, &num_writ, "%s%.06ld", acc_or_path, id ); break; case 7 : rc1 = string_printf ( acc, sizeof acc, &num_writ, "%s%.07ld", acc_or_path, id ); break; case 8 : rc1 = string_printf ( acc, sizeof acc, &num_writ, "%s%.08ld", acc_or_path, id ); break; case 9 : rc1 = string_printf ( acc, sizeof acc, &num_writ, "%s%.09ld", acc_or_path, id ); break; } if ( rc1 == 0 ) rc = vdb_info_1( schema, format, mgr, acc, acc_or_path ); } } num_gen_iterator_destroy( iter ); } } else rc = vdb_info_1( schema, format, mgr, acc_or_path, acc_or_path ); if ( schema != NULL ) VSchemaRelease( schema ); return rc; }
rc_t num_gen_range_check( num_gen* self, const int64_t first, const uint64_t count ) { /* if the user did not specify a row-range, take all rows */ if ( num_gen_empty( self ) ) return num_gen_add( self, first, count ); /* if the user did specify a row-range, check the boundaries */ else return num_gen_trim( self, first, count ); }
static rc_t read_loop( statistic * data, context *ctx, statistic_reader *reader, const VCursor *my_cursor ) { int64_t first; uint64_t count; rc_t rc = query_reader_rowrange( reader, &first, &count ); if ( rc != 0 ) LogErr( klogInt, rc, "query_statistic_rowrange() failed\n" ); else { if ( num_gen_empty( ctx->row_generator ) ) { rc = num_gen_add( ctx->row_generator, first, count ); if ( rc != 0 ) LogErr( klogInt, rc, "num_gen_add() failed() failed\n" ); } else { rc = num_gen_trim( ctx->row_generator, first, count ); if ( rc != 0 ) LogErr( klogInt, rc, "num_gen_trim() failed() failed\n" ); } if ( rc == 0 ) { const num_gen_iter *iter; rc = num_gen_iterator_make( ctx->row_generator, &iter ); if ( rc != 0 ) LogErr( klogInt, rc, "num_gen_iterator_make() failed\n" ); else { uint64_t row_id; progressbar * progress; rc = make_progressbar( &progress ); if ( rc != 0 ) LogErr( klogInt, rc, "make_progressbar() failed\n" ); else { uint8_t fract_digits = calc_fract_digits( iter ); uint32_t percent; row_input row_data; while ( ( num_gen_iterator_next( iter, &row_id ) == 0 )&& ( rc == 0 ) ) { rc = Quitting(); if ( rc == 0 ) { /* ******************************************** */ rc = reader_get_data( reader, &row_data, row_id ); if ( rc == 0 ) { rc = extract_statistic_from_row( data, &row_data, row_id ); } /* ******************************************** */ if ( ctx->show_progress ) if ( num_gen_iterator_percent( iter, fract_digits, &percent ) == 0 ) update_progressbar( progress, fract_digits, percent ); } } destroy_progressbar( progress ); if ( ctx->show_progress ) OUTMSG(( "\n" )); } num_gen_iterator_destroy( iter ); } } } return rc; }