* @brief setup a csv reader * * @param reader */
| 286 | * @param reader |
| 287 | */ |
| 288 | void csv_setup_reader(reader_t *const reader) { |
| 289 | unsigned char options = CSV_APPEND_NULL; |
| 290 | reader->trace_format = TXT_TRACE_FORMAT; |
| 291 | reader_init_param_t *init_params = &reader->init_params; |
| 292 | |
| 293 | csv_params_t *csv_params = (csv_params_t *)malloc(sizeof(csv_params_t)); |
| 294 | memset(csv_params, 0, sizeof(csv_params_t)); |
| 295 | reader->reader_params = csv_params; |
| 296 | csv_params->curr_field_idx = 1; |
| 297 | |
| 298 | csv_params->time_field_idx = init_params->time_field; |
| 299 | csv_params->obj_id_field_idx = init_params->obj_id_field; |
| 300 | csv_params->obj_size_field_idx = init_params->obj_size_field; |
| 301 | csv_params->op_field_idx = init_params->op_field; |
| 302 | csv_params->ttl_field_idx = init_params->ttl_field; |
| 303 | csv_params->cnt_field_idx = init_params->cnt_field; |
| 304 | csv_params->tenant_field_idx = init_params->tenant_field; |
| 305 | csv_params->n_feature_fields = init_params->n_feature_fields; |
| 306 | for (int i = 0; i < csv_params->n_feature_fields; i++) { |
| 307 | csv_params->feature_fields[i] = init_params->feature_fields[i]; |
| 308 | } |
| 309 | |
| 310 | csv_params->csv_parser = |
| 311 | (struct csv_parser *)malloc(sizeof(struct csv_parser)); |
| 312 | csv_params->n_obj_id_is_num = 0; |
| 313 | csv_params->n_obj_id_is_not_num = 0; |
| 314 | |
| 315 | if (csv_init(csv_params->csv_parser, options) != 0) { |
| 316 | fprintf(stderr, "Failed to initialize csv parser\n"); |
| 317 | exit(1); |
| 318 | } |
| 319 | |
| 320 | /* if we setup something here, then we must setup in the reset_reader func */ |
| 321 | if (init_params->delimiter == '\0') { |
| 322 | char delim = csv_detect_delimiter(reader); |
| 323 | csv_params->delimiter = delim; |
| 324 | } else { |
| 325 | csv_params->delimiter = init_params->delimiter; |
| 326 | } |
| 327 | csv_set_delim(csv_params->csv_parser, csv_params->delimiter); |
| 328 | |
| 329 | if (!init_params->has_header_set) { |
| 330 | csv_params->has_header = csv_detect_header(reader); |
| 331 | } else { |
| 332 | csv_params->has_header = init_params->has_header; |
| 333 | } |
| 334 | if (csv_params->has_header) { |
| 335 | ssize_t read_size = |
| 336 | getline(&reader->line_buf, &reader->line_buf_size, reader->file); |
| 337 | reader->trace_start_offset = read_size; |
| 338 | } |
| 339 | } |
| 340 | |
| 341 | /** |
| 342 | * @brief read one request from a csv file |
no test coverage detected