| 504 | } |
| 505 | |
| 506 | int db_ctl::load_tbl_idxes(void) |
| 507 | { |
| 508 | const char* sql = "select id_idx, id_db, id_tbl, unique, type from tbl_tbl_idx"; |
| 509 | if ((ctl_conn_->sql_select(sql)) == false) |
| 510 | { |
| 511 | logger_error("sql(%s) error", sql); |
| 512 | return -1; |
| 513 | } |
| 514 | |
| 515 | const std::vector<acl::db_row*>* rows = ctl_conn_->get_rows(); |
| 516 | if (rows == NULL) |
| 517 | { |
| 518 | logger_warn("tbl_tbl_idx empty"); |
| 519 | return 0; |
| 520 | } |
| 521 | |
| 522 | unsigned int id_idx, id_db, id_tbl, unique, type; |
| 523 | |
| 524 | size_t i; |
| 525 | for (i = 0; i < rows->size(); i++) |
| 526 | { |
| 527 | const acl::db_row* row = (*rows)[i]; |
| 528 | if ((id_idx = row->field_int("id_idx", -1)) == |
| 529 | (unsigned int) -1) |
| 530 | { |
| 531 | logger_warn("id_idx invalid"); |
| 532 | continue; |
| 533 | } |
| 534 | else if ((id_db = row->field_int("id_db", -1)) == |
| 535 | (unsigned int) -1) |
| 536 | { |
| 537 | logger_warn("id_db invalid"); |
| 538 | continue; |
| 539 | } |
| 540 | else if ((id_tbl = row->field_int("id_tbl", -1)) == |
| 541 | (unsigned int) -1) |
| 542 | { |
| 543 | logger_warn("id_tbl invalid"); |
| 544 | continue; |
| 545 | } |
| 546 | type = row->field_int("type", -1); |
| 547 | if (type < IDX_TYPE_STR || type > IDX_TYPE_INT64) |
| 548 | { |
| 549 | logger_warn("type(%d) invalid", type); |
| 550 | continue; |
| 551 | } |
| 552 | |
| 553 | unique = row->field_int("unique"); |
| 554 | TBL_IDX* idx = (TBL_IDX*) acl_mymalloc(sizeof(TBL_IDX)); |
| 555 | idx->id_idx = id_idx; |
| 556 | idx->id_db = id_db; |
| 557 | idx->id_tbl = id_tbl; |
| 558 | idx->unique = unique ? true : false; |
| 559 | idx->type = (idx_type_t) type; |
| 560 | tbl_idxes_.push_back(idx); |
| 561 | } |
| 562 | |
| 563 | ctl_conn_->free_result(); |
nothing calls this directly
no test coverage detected