| 713 | } |
| 714 | |
| 715 | void mysql_sql_parse_index(Field_Description *field_desp) { |
| 716 | INDEX_FIELD * field_index = new INDEX_FIELD(field_desp); |
| 717 | TABLE_LIST * table = find_table(field_desp->field_name); |
| 718 | if (table->index_field_head == NULL) { |
| 719 | table->index_field_head = field_index; |
| 720 | } else { |
| 721 | INDEX_FIELD *index = table->index_field_head; |
| 722 | INDEX_FIELD *prev = NULL; |
| 723 | while (index != NULL) { |
| 724 | if (strcasecmp(index->index_field->field_name->field_name, |
| 725 | field_index->index_field->field_name->field_name) == 0) |
| 726 | break; //如果已存在相同字段,则直接退出 |
| 727 | if (index->index_field->operator_type == Item_func::EQ_FUNC) { |
| 728 | if (field_desp->operator_type == Item_func::EQ_FUNC |
| 729 | && index->index_field->cardinality |
| 730 | < field_desp->cardinality) { |
| 731 | if (prev == NULL) |
| 732 | table->index_field_head = field_index; |
| 733 | else |
| 734 | prev->next_field = field_index; |
| 735 | field_index->next_field = index; |
| 736 | break; |
| 737 | } else if (index->next_field == NULL) { |
| 738 | index->next_field = field_index; |
| 739 | break; |
| 740 | } |
| 741 | } else { |
| 742 | if (field_desp->operator_type == Item_func::EQ_FUNC) { |
| 743 | if (prev == NULL) |
| 744 | table->index_field_head = field_index; |
| 745 | else |
| 746 | prev->next_field = field_index; |
| 747 | field_index->next_field = index; |
| 748 | break; |
| 749 | } else if (index->index_field->cardinality |
| 750 | < field_desp->cardinality) { |
| 751 | prev->next_field = field_index; |
| 752 | if (ICP_VERSION == 1) |
| 753 | field_index->next_field = index; |
| 754 | break; |
| 755 | } |
| 756 | } |
| 757 | prev = index; |
| 758 | index = index->next_field; |
| 759 | } |
| 760 | } |
| 761 | } |
| 762 | |
| 763 | void mysql_sql_parse_field(Item_field *field, |
| 764 | Item_func::Functype func_item_type, const char * field_print) { |
no test coverage detected