MCPcopy Create free account
hub / github.com/MariaDB/server / key_check_without_overlaps

Function key_check_without_overlaps

sql/sql_table.cc:2850–2909  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2848
2849
2850static
2851my_bool key_check_without_overlaps(THD *thd, HA_CREATE_INFO *create_info,
2852 Alter_info *alter_info,
2853 Key &key)
2854{
2855 DBUG_ENTER("key_check_without_overlaps");
2856 if (!key.without_overlaps)
2857 DBUG_RETURN(FALSE);
2858 // append_system_key_parts is already called, so we should check all the
2859 // columns except the last two.
2860 const auto &period_start= create_info->period_info.period.start;
2861 const auto &period_end= create_info->period_info.period.end;
2862 List_iterator<Key_part_spec> part_it_forwarded(key.columns);
2863 List_iterator<Key_part_spec> part_it(key.columns);
2864 part_it_forwarded++;
2865 part_it_forwarded++;
2866 while (part_it_forwarded++)
2867 {
2868 Key_part_spec *key_part= part_it++;
2869
2870 if (period_start.streq(key_part->field_name)
2871 || period_end.streq(key_part->field_name))
2872 {
2873 my_error(ER_KEY_CONTAINS_PERIOD_FIELDS, MYF(0), key.name.str,
2874 key_part->field_name.str);
2875 DBUG_RETURN(TRUE);
2876 }
2877 }
2878
2879 if (key.key_create_info.algorithm == HA_KEY_ALG_HASH ||
2880 key.key_create_info.algorithm == HA_KEY_ALG_LONG_HASH)
2881
2882 {
2883 my_error(ER_KEY_CANT_HAVE_WITHOUT_OVERLAPS, MYF(0), key.name.str);
2884 DBUG_RETURN(TRUE);
2885 }
2886 for (Key &key2: alter_info->key_list)
2887 {
2888 if (key2.type != Key::FOREIGN_KEY)
2889 continue;
2890 DBUG_ASSERT(&key != &key2);
2891 const Foreign_key &fk= (Foreign_key&)key2;
2892 if (fk.update_opt != FK_OPTION_CASCADE)
2893 continue;
2894 for (Key_part_spec& kp: key.columns)
2895 {
2896 for (Key_part_spec& kp2: fk.columns)
2897 {
2898 if (kp.field_name.streq(kp2.field_name))
2899 {
2900 my_error(ER_KEY_CANT_HAVE_WITHOUT_OVERLAPS, MYF(0), key.name.str);
2901 DBUG_RETURN(TRUE);
2902 }
2903 }
2904 }
2905 }
2906 create_info->period_info.unique_keys++;
2907

Callers 1

Calls 2

my_errorFunction · 0.85
streqMethod · 0.45

Tested by

no test coverage detected