diff options
author | unknown <svoj@mysql.com/april.(none)> | 2007-03-13 18:11:47 +0400 |
---|---|---|
committer | unknown <svoj@mysql.com/april.(none)> | 2007-03-13 18:11:47 +0400 |
commit | 968d1695a76f153bfe2007ff63ed1cbeb8b63a59 (patch) | |
tree | 63faafb45210085d9f6afc7913c41db4a4d9b22d /sql/ha_myisam.cc | |
parent | 063c95e6f07a07a518f9ea8469dbd3e30b3a4a34 (diff) | |
parent | 969b71653d434ce1d3447f6c99c331a22ba4f846 (diff) | |
download | mariadb-git-968d1695a76f153bfe2007ff63ed1cbeb8b63a59.tar.gz |
Merge mysql.com:/home/svoj/devel/mysql/BUG26881/mysql-4.1-engines
into mysql.com:/home/svoj/devel/mysql/BUG26881/mysql-5.0-engines
myisam/mi_create.c:
Auto merged
mysql-test/t/merge.test:
Auto merged
sql/ha_myisam.cc:
Auto merged
sql/sql_parse.cc:
Use local.
mysql-test/r/merge.result:
SCCS merged
Diffstat (limited to 'sql/ha_myisam.cc')
-rw-r--r-- | sql/ha_myisam.cc | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/sql/ha_myisam.cc b/sql/ha_myisam.cc index dd00c91e4af..10d3dbb2ec5 100644 --- a/sql/ha_myisam.cc +++ b/sql/ha_myisam.cc @@ -342,6 +342,12 @@ int table2myisam(TABLE *table_arg, MI_KEYDEF **keydef_out, RETURN VALUE 0 - Equal definitions. 1 - Different definitions. + + TODO + - compare FULLTEXT keys; + - compare SPATIAL keys; + - compare FIELD_SKIP_ZERO which is converted to FIELD_NORMAL correctly + (should be corretly detected in table2myisam). */ int check_definition(MI_KEYDEF *t1_keyinfo, MI_COLUMNDEF *t1_recinfo, @@ -367,6 +373,28 @@ int check_definition(MI_KEYDEF *t1_keyinfo, MI_COLUMNDEF *t1_recinfo, { HA_KEYSEG *t1_keysegs= t1_keyinfo[i].seg; HA_KEYSEG *t2_keysegs= t2_keyinfo[i].seg; + if (t1_keyinfo[i].flag & HA_FULLTEXT && t2_keyinfo[i].flag & HA_FULLTEXT) + continue; + else if (t1_keyinfo[i].flag & HA_FULLTEXT || + t2_keyinfo[i].flag & HA_FULLTEXT) + { + DBUG_PRINT("error", ("Key %d has different definition", i)); + DBUG_PRINT("error", ("t1_fulltext= %d, t2_fulltext=%d", + test(t1_keyinfo[i].flag & HA_FULLTEXT), + test(t2_keyinfo[i].flag & HA_FULLTEXT))); + DBUG_RETURN(1); + } + if (t1_keyinfo[i].flag & HA_SPATIAL && t2_keyinfo[i].flag & HA_SPATIAL) + continue; + else if (t1_keyinfo[i].flag & HA_SPATIAL || + t2_keyinfo[i].flag & HA_SPATIAL) + { + DBUG_PRINT("error", ("Key %d has different definition", i)); + DBUG_PRINT("error", ("t1_spatial= %d, t2_spatial=%d", + test(t1_keyinfo[i].flag & HA_SPATIAL), + test(t2_keyinfo[i].flag & HA_SPATIAL))); + DBUG_RETURN(1); + } if (t1_keyinfo[i].keysegs != t2_keyinfo[i].keysegs || t1_keyinfo[i].key_alg != t2_keyinfo[i].key_alg) { @@ -403,7 +431,14 @@ int check_definition(MI_KEYDEF *t1_keyinfo, MI_COLUMNDEF *t1_recinfo, { MI_COLUMNDEF *t1_rec= &t1_recinfo[i]; MI_COLUMNDEF *t2_rec= &t2_recinfo[i]; - if (t1_rec->type != t2_rec->type || + /* + FIELD_SKIP_ZERO can be changed to FIELD_NORMAL in mi_create, + see NOTE1 in mi_create.c + */ + if ((t1_rec->type != t2_rec->type && + !(t1_rec->type == (int) FIELD_SKIP_ZERO && + t1_rec->length == 1 && + t2_rec->type == (int) FIELD_NORMAL)) || t1_rec->length != t2_rec->length || t1_rec->null_bit != t2_rec->null_bit) { |