diff options
author | unknown <monty@mysql.com/narttu.mysql.fi> | 2007-01-18 21:38:14 +0200 |
---|---|---|
committer | unknown <monty@mysql.com/narttu.mysql.fi> | 2007-01-18 21:38:14 +0200 |
commit | 345959c660d7401c9dc991a2c572ba145d6e199c (patch) | |
tree | 0ff418a13c85f8e38c089046968b0d09cf583e4b /storage/maria/ma_unique.c | |
parent | e8524352dc79e9231fd2c2d835bf0e479ba6e77a (diff) | |
download | mariadb-git-345959c660d7401c9dc991a2c572ba145d6e199c.tar.gz |
Implementation of rows-in-block
- Fixes some things missed in myisam->maria port
- Moved variables that holds the state for the current row to 'cur_row'
- Changed most uchar * to byte * to be able to remove a lot of casts
- Removed RAID support
- Added CHECK for rows-in-block
- Added allocate_dynamic() for easier usage of dynamic rows when we know how many entries we will need
- Reorder columns after CREATE for more optimal row storage (for rows-in-block)
- Removed flag 'RRND_PRESERVER_LASTINX' (not needed)
- Extended ma_test_all.sh to test more completely all row formats
- New structs and variables to hold rows-in-block and bitmap information
- Added org_data_file_type in header to allow easy restore of old record format when doing maria_pack / maria_chk -u
- More virtual functions to handle different row types
- Pointer to row is now MARIA_RECORD_POS instead of my_off_t
- New header signature for MARIA index files
- Fixed bugs in ma_test1.c and ma_test2.c
- All key and row blocks are now of same size
- We now only have one link chain for deleted key blocks
include/m_string.h:
Define bzero_if_purify
include/maria.h:
Implementation of rows-in-block
include/my_base.h:
Implementation of rows-in-block
include/my_handler.h:
Cleanup macros
Added size_to_store_key_length()
include/my_sys.h:
Added 'allocate_dynamic()'
include/myisamchk.h:
Implementation of rows-in-block
mysys/array.c:
Added allocate_dynamic()
mysys/mf_keycache.c:
Moved DBUG_ENTER to it's right position
mysys/my_pread.c:
Ensure my_errno is always set
sql/filesort.cc:
Fixed some compiler warnings
sql/gen_lex_hash.cc:
Removed not needed 'inline'
sql/ha_maria.cc:
Implementation of rows-in-block
Fixed compiler warnings
sql/mysqld.cc:
Fixed setting of wrong variable
sql/uniques.cc:
Fixed compiler warnings
storage/maria/Makefile.am:
Implementation of rows-in-block
storage/maria/ma_check.c:
Removed RAID functions
Added support for CHECK of rows-in-blocks rows
storage/maria/ma_checksum.c:
Implementation of rows-in-block
storage/maria/ma_close.c:
Implementation of rows-in-block
storage/maria/ma_create.c:
Implementation of rows-in-block:
- Reorder columns
- All key blocks are now of same size
- Removed old RAID support
storage/maria/ma_dbug.c:
Implementation of rows-in-block
storage/maria/ma_delete.c:
Implementation of rows-in-block
storage/maria/ma_delete_all.c:
Implementation of rows-in-block
storage/maria/ma_dynrec.c:
info->rec_buff is now allocated through _ma_alloc_buffer()
Use new info->cur_row structure
storage/maria/ma_extra.c:
Implementation of rows-in-block
storage/maria/ma_ft_boolean_search.c:
Removed compiler warnings
Indentation fixes
storage/maria/ma_ft_nlq_search.c:
Removed compiler warnings
Indentation fixes
storage/maria/ma_ft_update.c:
Removed some casts
storage/maria/ma_fulltext.h:
Changed pointer type
storage/maria/ma_info.c:
Implementation of rows-in-block
More general _ma_report_error()
storage/maria/ma_init.c:
Implementation of rows-in-block
storage/maria/ma_key.c:
Implementation of rows-in-block
Removed some casts
storage/maria/ma_keycache.c:
Fixed DBUG entry
storage/maria/ma_locking.c:
Implementation of rows-in-block
storage/maria/ma_open.c:
Implementation of rows-in-block
storage/maria/ma_packrec.c:
Indentation fixes
Changed uchar * to byte * to make it possible to remove some casts
storage/maria/ma_page.c:
Implementation of rows-in-block
storage/maria/ma_range.c:
Implementation of rows-in-block
storage/maria/ma_rfirst.c:
Implementation of rows-in-block
storage/maria/ma_rkey.c:
Implementation of rows-in-block
Indentation fixes
storage/maria/ma_rlast.c:
Implementation of rows-in-block
storage/maria/ma_rnext.c:
Implementation of rows-in-block
storage/maria/ma_rnext_same.c:
Implementation of rows-in-block
storage/maria/ma_rprev.c:
Implementation of rows-in-block
storage/maria/ma_rrnd.c:
Implementation of rows-in-block
Removed flag 'RRND_PRESERVER_LASTINX', by not resetting lastinx (This is reset by maria_scan_init())
storage/maria/ma_rsame.c:
Implementation of rows-in-block
storage/maria/ma_rsamepos.c:
Implementation of rows-in-block
storage/maria/ma_rt_index.c:
Implementation of rows-in-block
storage/maria/ma_rt_index.h:
Implementation of rows-in-block
storage/maria/ma_rt_key.c:
Implementation of rows-in-block
storage/maria/ma_rt_key.h:
Implementation of rows-in-block
storage/maria/ma_rt_mbr.c:
Implementation of rows-in-block
storage/maria/ma_rt_mbr.h:
Implementation of rows-in-block
storage/maria/ma_rt_split.c:
Implementation of rows-in-block
storage/maria/ma_rt_test.c:
Indentation fix
storage/maria/ma_scan.c:
Implementation of rows-in-block
Added 'maria_scan_end()'
storage/maria/ma_search.c:
Implementation of rows-in-block
storage/maria/ma_sort.c:
Indentation fixes
uchar -> byte to be able to remove some casts
storage/maria/ma_sp_defs.h:
uchar * -> byte *
storage/maria/ma_sp_key.c:
uchar * -> byte *
storage/maria/ma_sp_test.c:
Indentation fixes
storage/maria/ma_static.c:
New header signature for MARIA
storage/maria/ma_statrec.c:
int -> my_bool functions
my_off_t -> MARIA_RECORD_POS
Fixed argument order for _ma_read_static_record()
storage/maria/ma_test1.c:
Implementation of rows-in-block
Fixed some bugs in VARCHAR and BLOB testing
storage/maria/ma_test2.c:
Implementation of rows-in-block
Fixed bug in BLOB testing
storage/maria/ma_test3.c:
Implementation of rows-in-block
storage/maria/ma_test_all.sh:
Run all tests with dynamic, static and block row formats
(For the moment we skip REPAIR test of rows-in-block as this is not yet implemented)
storage/maria/ma_unique.c:
Implementation of rows-in-block
storage/maria/ma_update.c:
Implementation of rows-in-block
storage/maria/ma_write.c:
Implementation of rows-in-block
Write of row is split into two parts, as rows-in-block format require us to do write of row before keys (to get row position) in contrast to all other row formats
storage/maria/maria_chk.c:
Implementation of rows-in-block
storage/maria/maria_def.h:
Implementation of rows-in-block
- New structs and variables to hold rows-in-block and bitmap information
- Added org_data_file_type in header to allow easy restore of old record format when doing maria_pack / maria_chk -u
- More virtual functions to handle different row types
- Pointer to row is now MARIA_RECORD_POS instead of my_off_t
- uchar -> byte for many parameters to avoid casts
storage/maria/maria_ftdump.c:
Implementation of rows-in-block
storage/maria/maria_pack.c:
Implementation of rows-in-block
storage/myisam/mi_check.c:
Added new row types into switch to avoid compiler warnings
Added some casts to avoid warnings after changing type of lastkey and buff
storage/myisam/mi_create.c:
Fix that 'pack_fields' is calculated correctly
storage/myisam/mi_rsamepos.c:
Implementation of rows-in-block
storage/myisam/mi_test2.c:
Fixed wrong printf
storage/myisam/sort.c:
uchar * -> byte *
support-files/magic:
Added support for Maria files
Fided wrong entry's for MyISAM files
storage/maria/ma_bitmap.c:
New BitKeeper file ``storage/maria/ma_bitmap.c''
storage/maria/ma_blockrec.c:
New BitKeeper file ``storage/maria/ma_blockrec.c''
storage/maria/ma_blockrec.h:
New BitKeeper file ``storage/maria/ma_blockrec.h''
Diffstat (limited to 'storage/maria/ma_unique.c')
-rw-r--r-- | storage/maria/ma_unique.c | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/storage/maria/ma_unique.c b/storage/maria/ma_unique.c index bc1aa71966b..8348bfbd84b 100644 --- a/storage/maria/ma_unique.c +++ b/storage/maria/ma_unique.c @@ -22,10 +22,11 @@ my_bool _ma_check_unique(MARIA_HA *info, MARIA_UNIQUEDEF *def, byte *record, ha_checksum unique_hash, my_off_t disk_pos) { - my_off_t lastpos=info->lastpos; + my_off_t lastpos=info->cur_row.lastpos; MARIA_KEYDEF *key= &info->s->keyinfo[def->key]; - uchar *key_buff=info->lastkey2; + byte *key_buff= info->lastkey2; DBUG_ENTER("_ma_check_unique"); + DBUG_PRINT("enter",("unique_hash: %lu", unique_hash)); maria_unique_store(record+key->seg->start, unique_hash); _ma_make_key(info,def->key,key_buff,record,0); @@ -33,24 +34,25 @@ my_bool _ma_check_unique(MARIA_HA *info, MARIA_UNIQUEDEF *def, byte *record, /* The above changed info->lastkey2. Inform maria_rnext_same(). */ info->update&= ~HA_STATE_RNEXT_SAME; - if (_ma_search(info,info->s->keyinfo+def->key,key_buff,MARIA_UNIQUE_HASH_LENGTH, + if (_ma_search(info,info->s->keyinfo+def->key,key_buff, + MARIA_UNIQUE_HASH_LENGTH, SEARCH_FIND,info->s->state.key_root[def->key])) { info->page_changed=1; /* Can't optimize read next */ - info->lastpos= lastpos; + info->cur_row.lastpos= lastpos; DBUG_RETURN(0); /* No matching rows */ } for (;;) { - if (info->lastpos != disk_pos && - !(*info->s->compare_unique)(info,def,record,info->lastpos)) + if (info->cur_row.lastpos != disk_pos && + !(*info->s->compare_unique)(info,def,record,info->cur_row.lastpos)) { my_errno=HA_ERR_FOUND_DUPP_UNIQUE; info->errkey= (int) def->key; - info->dupp_key_pos= info->lastpos; - info->page_changed=1; /* Can't optimize read next */ - info->lastpos=lastpos; + info->dup_key_pos= info->cur_row.lastpos; + info->page_changed= 1; /* Can't optimize read next */ + info->cur_row.lastpos= lastpos; DBUG_PRINT("info",("Found duplicate")); DBUG_RETURN(1); /* Found identical */ } @@ -60,8 +62,8 @@ my_bool _ma_check_unique(MARIA_HA *info, MARIA_UNIQUEDEF *def, byte *record, memcmp((char*) info->lastkey, (char*) key_buff, MARIA_UNIQUE_HASH_LENGTH)) { - info->page_changed=1; /* Can't optimize read next */ - info->lastpos=lastpos; + info->page_changed= 1; /* Can't optimize read next */ + info->cur_row.lastpos= lastpos; DBUG_RETURN(0); /* end of tree */ } } @@ -144,11 +146,11 @@ ha_checksum _ma_unique_hash(MARIA_UNIQUEDEF *def, const byte *record) RETURN 0 if both rows have equal unique value - # Rows are different + 1 Rows are different */ -int _ma_unique_comp(MARIA_UNIQUEDEF *def, const byte *a, const byte *b, - my_bool null_are_equal) +my_bool _ma_unique_comp(MARIA_UNIQUEDEF *def, const byte *a, const byte *b, + my_bool null_are_equal) { const byte *pos_a, *pos_b, *end; HA_KEYSEG *keyseg; |