MCPcopy Create free account
hub / github.com/Meituan-Dianping/SQLAdvisor / mysql_sql_parse_index

Function mysql_sql_parse_index

sqladvisor/main.cc:715–761  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

713}
714
715void 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
763void mysql_sql_parse_field(Item_field *field,
764 Item_func::Functype func_item_type, const char * field_print) {

Callers 1

mysql_sql_parse_fieldFunction · 0.85

Calls 1

find_tableFunction · 0.85

Tested by

no test coverage detected