| 667 | */ |
| 668 | |
| 669 | static |
| 670 | int insert_server_record(TABLE *table, FOREIGN_SERVER *server) |
| 671 | { |
| 672 | int error; |
| 673 | DBUG_ENTER("insert_server_record"); |
| 674 | DBUG_ASSERT(!table->file->row_logging); |
| 675 | |
| 676 | table->use_all_columns(); |
| 677 | empty_record(table); |
| 678 | |
| 679 | /* set the field that's the PK to the value we're looking for */ |
| 680 | table->field[SERVER_NAME_FIELD]->store(server->server_name, |
| 681 | server->server_name_length, |
| 682 | system_charset_info); |
| 683 | |
| 684 | /* read index until record is that specified in server_name */ |
| 685 | if ((error= table->file->ha_index_read_idx_map(table->record[0], 0, |
| 686 | (uchar *)table->field[SERVER_NAME_FIELD]->ptr, |
| 687 | HA_WHOLE_KEY, HA_READ_KEY_EXACT))) |
| 688 | { |
| 689 | /* if not found, err */ |
| 690 | if (error != HA_ERR_KEY_NOT_FOUND && error != HA_ERR_END_OF_FILE) |
| 691 | { |
| 692 | table->file->print_error(error, MYF(0)); |
| 693 | error= 1; |
| 694 | } |
| 695 | /* store each field to be inserted */ |
| 696 | if ((error= store_server_fields(table, server))) |
| 697 | DBUG_RETURN(error); |
| 698 | |
| 699 | DBUG_PRINT("info",("record for server '%s' not found!", |
| 700 | server->server_name)); |
| 701 | /* write/insert the new server */ |
| 702 | if (unlikely(error=table->file->ha_write_row(table->record[0]))) |
| 703 | table->file->print_error(error, MYF(0)); |
| 704 | } |
| 705 | else |
| 706 | error= ER_FOREIGN_SERVER_EXISTS; |
| 707 | DBUG_RETURN(error); |
| 708 | } |
| 709 | |
| 710 | /* |
| 711 | SYNOPSIS |
no test coverage detected