diff options
author | unknown <serg@serg.mysql.com> | 2003-01-21 19:24:34 +0100 |
---|---|---|
committer | unknown <serg@serg.mysql.com> | 2003-01-21 19:24:34 +0100 |
commit | d0f1d4a75e7fdff18f2f870336322e67c3d3eb6b (patch) | |
tree | 2c7d9d1b4d148a8335c0f806f6c7bc3dcab8e3ce /myisam/mi_create.c | |
parent | bb805867b2a92603e327d5b7f965f54c3a8e82ce (diff) | |
download | mariadb-git-d0f1d4a75e7fdff18f2f870336322e67c3d3eb6b.tar.gz |
Two-level index structure for FULLTEXT indexes
myisam/ftdefs.h:
intermediate cleanup checkin
myisam/mi_create.c:
intermediate cleanup checkin
myisam/myisamchk.c:
intermediate cleanup checkin
myisam/ft_parser.c:
intermediate cleanup checkin
myisam/ft_update.c:
intermediate cleanup checkin
myisam/mi_update.c:
intermediate cleanup checkin
mysql-test/r/fulltext.result:
stopword test
mysql-test/t/fulltext.test:
stopword test
mysys/mulalloc.c:
function comments clarified
include/my_handler.h:
get_key_length_rdonly utility macro
include/myisam.h:
this kind of hacks bites :)
myisam/ft_dump.c:
bugfix
myisam/mi_open.c:
bugfix
myisam/sort.c:
bugfixing
myisam/mi_rnext.c:
not a solution at all, but a temporary fix to make
mi_rnext to work on ft2 index. (only ft_dump uses mi_rnext
on fulltext indexes for now).
myisam/ft_boolean_search.c:
ft_sintXkorr, ft_intXstore
myisam/ft_nlq_search.c:
ft_sintXkorr, ft_intXstore
myisam/fulltext.h:
ft_sintXkorr, ft_intXstore
myisam/mi_check.c:
ft_sintXkorr, ft_intXstore
myisam/ft_static.c:
two-level tree support in wi_write()
myisam/mi_write.c:
two-level tree support in wi_write()
myisam/myisamdef.h:
two-level tree support in wi_write()
myisam/mi_delete.c:
support for ft2 in mi_delete
mysql-test/r/fulltext2.result:
support for ft2 in mi_delete
mysql-test/t/fulltext2.test:
support for ft2 in mi_delete
Diffstat (limited to 'myisam/mi_create.c')
-rw-r--r-- | myisam/mi_create.c | 45 |
1 files changed, 11 insertions, 34 deletions
diff --git a/myisam/mi_create.c b/myisam/mi_create.c index 8087d17904a..c270e83a328 100644 --- a/myisam/mi_create.c +++ b/myisam/mi_create.c @@ -44,7 +44,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs, uint fields,length,max_key_length,packed,pointer, key_length,info_length,key_segs,options,min_key_length_skipp, base_pos,varchar_count,long_varchar_count,varchar_length, - max_key_block_length,unique_key_parts,offset; + max_key_block_length,unique_key_parts,fulltext_keys,offset; ulong reclength, real_reclength,min_pack_length; char filename[FN_REFLEN],linkname[FN_REFLEN], *linkname_ptr; ulong pack_reclength; @@ -223,6 +223,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs, reclength+=long_varchar_count; /* We need space for this! */ max_key_length=0; tot_length=0 ; key_segs=0; + fulltext_keys=0; max_key_block_length=0; share.state.rec_per_key_part=rec_per_key_part; share.state.key_root=key_root; @@ -242,14 +243,14 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs, if (keydef->flag & HA_SPATIAL) { /* BAR TODO to support 3D and more dimensions in the future */ - uint sp_segs=SPDIMS*2; + uint sp_segs=SPDIMS*2; keydef->flag=HA_SPATIAL; if (flags & HA_DONT_TOUCH_DATA) { - /* + /* called by myisamchk - i.e. table structure was taken from - MYI file and SPATIAL key *do has* additional sp_segs keysegs. + MYI file and SPATIAL key *does have* additional sp_segs keysegs. We'd better delete them now */ keydef->keysegs-=sp_segs; @@ -271,20 +272,11 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs, min_key_length_skipp+=SPLEN*2*SPDIMS; } else - if (keydef->flag & HA_FULLTEXT) /* SerG */ + if (keydef->flag & HA_FULLTEXT) { keydef->flag=HA_FULLTEXT | HA_PACK_KEY | HA_VAR_LENGTH_KEY; options|=HA_OPTION_PACK_KEYS; /* Using packed keys */ - if (flags & HA_DONT_TOUCH_DATA) - { - /* called by myisamchk - i.e. table structure was taken from - MYI file and FULLTEXT key *do has* additional FT_SEGS keysegs. - We'd better delete them now - */ - keydef->keysegs-=FT_SEGS; - } - for (j=0, keyseg=keydef->seg ; (int) j < keydef->keysegs ; j++, keyseg++) { @@ -295,19 +287,11 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs, goto err; } } - keydef->keysegs+=FT_SEGS; + fulltext_keys++; key_length+= HA_FT_MAXLEN+HA_FT_WLEN; -#ifdef EVAL_RUN - key_length++; -#endif - length++; /* At least one length byte */ min_key_length_skipp+=HA_FT_MAXLEN; -#if HA_FT_MAXLEN >= 255 - min_key_length_skipp+=2; /* prefix may be 3 bytes */ - length+=2; -#endif } else { @@ -473,8 +457,9 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs, mi_get_pointer_length((tot_length + max_key_block_length * keys * MI_INDEX_BLOCK_MARGIN) / MI_MIN_KEY_BLOCK_LENGTH, 3); - share.base.keys= share.state.header.keys = keys; + share.base.keys= share.state.header.keys= keys; share.state.header.uniques= uniques; + share.state.header.fulltext_keys= fulltext_keys; mi_int2store(share.state.header.key_parts,key_segs); mi_int2store(share.state.header.unique_key_parts,unique_key_parts); @@ -566,7 +551,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs, linkname_ptr=0; create_flag=MY_DELETE_OLD; } - if ((dfile= + if ((dfile= my_create_with_symlink(linkname_ptr, filename, 0,O_RDWR | O_TRUNC, MYF(MY_WME | create_flag))) < 0) @@ -590,21 +575,13 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs, /* Write key and keyseg definitions */ for (i=0 ; i < share.base.keys - uniques; i++) { - uint ft_segs=(keydefs[i].flag & HA_FULLTEXT) ? FT_SEGS : 0; uint sp_segs=(keydefs[i].flag & HA_SPATIAL) ? 2*SPDIMS : 0; if (mi_keydef_write(file, &keydefs[i])) goto err; - for (j=0 ; j < keydefs[i].keysegs-ft_segs-sp_segs ; j++) + for (j=0 ; j < keydefs[i].keysegs-sp_segs ; j++) if (mi_keyseg_write(file, &keydefs[i].seg[j])) goto err; - for (j=0 ; j < ft_segs ; j++) - { - HA_KEYSEG seg=ft_keysegs[j]; - seg.language= keydefs[i].seg[0].language; - if (mi_keyseg_write(file, &seg)) - goto err; - } for (j=0 ; j < sp_segs ; j++) { HA_KEYSEG sseg; |