diff options
author | unknown <vvaintroub/Wlad@vaio.> | 2008-01-10 13:21:53 +0100 |
---|---|---|
committer | unknown <vvaintroub/Wlad@vaio.> | 2008-01-10 13:21:53 +0100 |
commit | ce8de7afdffd46507f000048a17722f81eec7688 (patch) | |
tree | 9bd52862a62e97454cd29e245d4e68d9a9175211 /storage | |
parent | 9b9175ff752957d32a3c532fed0ed52123efa234 (diff) | |
download | mariadb-git-ce8de7afdffd46507f000048a17722f81eec7688.tar.gz |
Windows fixes
-new option WITH_MARIA_STORAGE_ENGINE for config.js
-correct build errors
-build test executables
-downport changes for atomic functions from 5.2
-remove LOCK_uuid_generator from C++ files to avoid linker errors
-new function my_uuid2str()
BitKeeper/deleted/.del-x86-msvc.h:
Delete: include/atomic/x86-msvc.h
CMakeLists.txt:
Windows fixes:
-New option WITH_MARIA_STORAGE_ENGINE
-Add unit tests
include/Makefile.am:
replace x86-msvc.h with generic-msvc.h
include/config-win.h:
my_chmod() support
include/my_atomic.h:
Downport my_atomic from 5.2 tree
include/my_bit.h:
Correct unresolved symbol errors on Windows
include/my_pthread.h:
pthread_mutex_unlock now returns 0 (was void previously)
defined PTHREAD_STACK_MIN
include/my_sys.h:
New function my_uuid2str()
define MY_UUID_STRING_LENGTH
include/atomic/nolock.h:
Downport my_atomic from 5.2 tree
libmysqld/CMakeLists.txt:
New option WITH_MARIA_STORAGE_ENGINE
mysys/CMakeLists.txt:
Add missing files
mysys/lf_dynarray.c:
Fix compiler errors on Windows
mysys/my_getncpus.c:
Windows port
mysys/my_uuid.c:
Windows fixes: there is no random() on Windows, use ANSI rand()
New function my_uuid2str()
mysys/my_winthread.c:
Downport from 5.2 tree
-Call my_thread_end() before pthread_exit()
-Avoid crash if pthread_create is called with NULL attributes
sql/CMakeLists.txt:
Link mysqld with Maria storage engine
sql/item_func.cc:
Remove LOCK_uuid_generator from C++ to avoid linker errors.
Use dedicated mutex for short uuids
sql/item_strfunc.cc:
Use my_uuid() and my_uuid2str() functions from mysys.
sql/item_strfunc.h:
Define MY_UUID_STRING_LENGTH in my_sys.h
sql/mysql_priv.h:
LOCK_uuid_generator must be declared as extern "C"
sql/mysqld.cc:
Init and destroy LOCK_uuid_short mutex
storage/maria/CMakeLists.txt:
-Use the same source files as in Makefile.am
-Build test binaries
storage/maria/ha_maria.cc:
snprintf->my_snprintf
storage/maria/lockman.c:
Fix compiler error on Windows
storage/maria/ma_check.c:
Fix compiler error on Windows
storage/maria/ma_loghandler.c:
Fix compile errors
my_open()/my_sync() do not work for directories on Windows
storage/maria/ma_recovery.c:
Fix compile error on Windows
storage/maria/ma_test2.c:
Rename variable to avoid naming conflict with Microsoft C runtime
function
storage/maria/ma_test3.c:
Fix build errors on Windows
storage/maria/tablockman.c:
Fix build errors on Windows
storage/maria/unittest/Makefile.am:
Add CMakeLists.txt
storage/maria/unittest/ma_pagecache_consist.c:
Fix build errors on Windows
remove loop from get_len()
storage/maria/unittest/ma_pagecache_single.c:
Fix build errors on Windows
storage/maria/unittest/ma_test_loghandler-t.c:
Windows fixes
-Avoid division by 0 in expressions like
x/(RAND_MAX/y), where y is larger than RAND_MAX(==0x7fff on Windows)
storage/maria/unittest/ma_test_loghandler_multigroup-t.c:
Windows fixes
-Avoid division by 0 in expressions like
x/(RAND_MAX/y), where y is larger than RAND_MAX(==0x7fff on Windows)
-remove loop in get_len()
storage/maria/unittest/ma_test_loghandler_multithread-t.c:
Windows fixes
-Avoid division by 0 in expressions like
x/(RAND_MAX/y), where y is larger than RAND_MAX(==0x7fff on Windows)
-remove loop in get_len()
storage/maria/unittest/ma_test_loghandler_noflush-t.c:
Fix build errors on Windows
storage/maria/unittest/test_file.c:
Correct the code to get file size on Windows.
stat() information can be outdated and thus cannot be trusted.
On Vista,stat() returns file size=0 until the file is closed at the
first time.
storage/myisam/CMakeLists.txt:
Fix compiler errors on Windows
Build test executables
storage/myisam/mi_test2.c:
Rename variable to avoid naming conflict with Microsoft C runtime
function
storage/myisam/mi_test3.c:
Fix build errors on Windows
strings/CMakeLists.txt:
Add missing file
unittest/unit.pl:
Windows:
downport unittest changes from 5.2 bk tree
unittest/mysys/Makefile.am:
Windows:
downport unittest changes from 5.2 bk tree
unittest/mysys/my_atomic-t.c:
Windows:
downport unittest changes from 5.2 bk tree
unittest/mytap/Makefile.am:
Windows:
downport unittest changes from 5.2 bk tree
unittest/mytap/tap.c:
Windows:
downport unittest changes from 5.2 bk tree
win/configure.js:
Add WITH_MARIA_STORAGE_ENGINE configure option
unittest/mytap/CMakeLists.txt:
Add missing file
unittest/mysys/CMakeLists.txt:
Add missing file
storage/maria/unittest/CMakeLists.txt:
Add missing file
BitKeeper/etc/ignore:
Added comments maria-win.patch to the ignore list
include/atomic/generic-msvc.h:
Implement atomic operations with MSVC intrinsics
Diffstat (limited to 'storage')
-rw-r--r-- | storage/maria/CMakeLists.txt | 63 | ||||
-rw-r--r-- | storage/maria/ha_maria.cc | 4 | ||||
-rw-r--r-- | storage/maria/lockman.c | 3 | ||||
-rw-r--r-- | storage/maria/ma_check.c | 2 | ||||
-rw-r--r-- | storage/maria/ma_loghandler.c | 37 | ||||
-rw-r--r-- | storage/maria/ma_recovery.c | 3 | ||||
-rw-r--r-- | storage/maria/ma_test2.c | 20 | ||||
-rw-r--r-- | storage/maria/ma_test3.c | 10 | ||||
-rw-r--r-- | storage/maria/tablockman.c | 6 | ||||
-rw-r--r-- | storage/maria/unittest/CMakeLists.txt | 97 | ||||
-rw-r--r-- | storage/maria/unittest/Makefile.am | 2 | ||||
-rw-r--r-- | storage/maria/unittest/ma_pagecache_consist.c | 16 | ||||
-rw-r--r-- | storage/maria/unittest/ma_pagecache_single.c | 4 | ||||
-rw-r--r-- | storage/maria/unittest/ma_test_loghandler-t.c | 27 | ||||
-rw-r--r-- | storage/maria/unittest/ma_test_loghandler_multigroup-t.c | 13 | ||||
-rw-r--r-- | storage/maria/unittest/ma_test_loghandler_multithread-t.c | 14 | ||||
-rw-r--r-- | storage/maria/unittest/ma_test_loghandler_noflush-t.c | 3 | ||||
-rw-r--r-- | storage/maria/unittest/test_file.c | 28 | ||||
-rwxr-xr-x | storage/myisam/CMakeLists.txt | 16 | ||||
-rw-r--r-- | storage/myisam/mi_test2.c | 12 | ||||
-rw-r--r-- | storage/myisam/mi_test3.c | 10 |
21 files changed, 283 insertions, 107 deletions
diff --git a/storage/maria/CMakeLists.txt b/storage/maria/CMakeLists.txt index 17d3aa53839..13e8444b7e0 100644 --- a/storage/maria/CMakeLists.txt +++ b/storage/maria/CMakeLists.txt @@ -21,38 +21,61 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/zlib ${CMAKE_SOURCE_DIR}/sql ${CMAKE_SOURCE_DIR}/regex ${CMAKE_SOURCE_DIR}/extra/yassl/include) -SET(MARIA_SOURCES ft_maria.c ha_maria.cc lockman.c ma_bitmap.c ma_blockrec.c - ma_cache.c ma_changed.c ma_check.c ma_checkpoint.c ma_checksum.c - ma_close.c ma_commit.c ma_control_file.c ma_create.c ma_dbug.c - ma_delete.c ma_delete_all.c ma_delete_table.c ma_dynrec.c - ma_extra.c ma_ft_boolean_search.c ma_ft_eval.c ma_ft_nlq_search.c - ma_ft_parser.c ma_ft_stem.c ma_ft_test1.c ma_ft_update.c ma_info.c - ma_init.c ma_key.c ma_keycache.c ma_least_recently_dirtied.c - ma_locking.c ma_loghandler.c ma_open.c ma_packrec.c ma_page.c - ma_pagecache.c ma_pagecaches.c ma_panic.c ma_preload.c ma_range.c - ma_recovery.c ma_rename.c ma_rfirst.c ma_rkey.c ma_rlast.c - ma_rnext.c ma_rnext_same.c ma_rprev.c ma_rrnd.c ma_rsame.c - ma_rsamepos.c ma_rt_index.c ma_rt_key.c ma_rt_mbr.c ma_rt_split.c - ma_rt_test.c ma_scan.c ma_search.c ma_sort.c ma_sp_key.c - ma_sp_test.c ma_static.c ma_statrec.c - ma_unique.c ma_update.c ma_write.c tablockman.c trnman.c - ha_maria.h maria_def.h) +SET(MARIA_SOURCES ma_init.c ma_open.c ma_extra.c ma_info.c ma_rkey.c + ma_rnext.c ma_rnext_same.c + ma_search.c ma_page.c ma_key_recover.c ma_key.c + ma_locking.c + ma_rrnd.c ma_scan.c ma_cache.c + ma_statrec.c ma_packrec.c ma_dynrec.c + ma_blockrec.c ma_bitmap.c + ma_update.c ma_write.c ma_unique.c + ma_delete.c + ma_rprev.c ma_rfirst.c ma_rlast.c ma_rsame.c + ma_rsamepos.c ma_panic.c ma_close.c ma_create.c + ma_range.c ma_dbug.c ma_checksum.c + ma_changed.c ma_static.c ma_delete_all.c + ma_delete_table.c ma_rename.c ma_check.c + ma_keycache.c ma_preload.c ma_ft_parser.c + ma_ft_update.c ma_ft_boolean_search.c + ma_ft_nlq_search.c ft_maria.c ma_sort.c + ha_maria.cc trnman.c lockman.c tablockman.c + ma_rt_index.c ma_rt_key.c ma_rt_mbr.c ma_rt_split.c + ma_sp_key.c ma_control_file.c ma_loghandler.c + ma_pagecache.c ma_pagecaches.c + ma_checkpoint.c ma_recovery.c ma_commit.c ma_pagecrc.c + ha_maria.h maria_def.h +) IF(NOT SOURCE_SUBLIBS) ADD_LIBRARY(maria ${MARIA_SOURCES}) ADD_EXECUTABLE(maria_ftdump maria_ftdump.c) -TARGET_LINK_LIBRARIES(maria_ftdump maria myisam mysys debug dbug strings zlib wsock32) +TARGET_LINK_LIBRARIES(maria_ftdump maria myisam mysys dbug strings zlib wsock32) ADD_EXECUTABLE(maria_chk maria_chk.c) -TARGET_LINK_LIBRARIES(maria_chk maria myisam mysys debug dbug strings zlib wsock32) +TARGET_LINK_LIBRARIES(maria_chk maria myisam mysys dbug strings zlib wsock32) ADD_EXECUTABLE(maria_read_log maria_read_log.c) -TARGET_LINK_LIBRARIES(maria_read_log maria myisam mysys debug dbug strings zlib wsock32) +TARGET_LINK_LIBRARIES(maria_read_log maria myisam mysys dbug strings zlib wsock32) ADD_EXECUTABLE(maria_pack maria_pack.c) -TARGET_LINK_LIBRARIES(maria_pack maria myisam mysys debug dbug strings zlib wsock32) +TARGET_LINK_LIBRARIES(maria_pack maria myisam mysys dbug strings zlib wsock32) + +ADD_EXECUTABLE(ma_test1 ma_test1.c) +TARGET_LINK_LIBRARIES(ma_test1 maria myisam mysys dbug strings zlib wsock32) + +ADD_EXECUTABLE(ma_test2 ma_test2.c) +TARGET_LINK_LIBRARIES(ma_test2 maria myisam mysys dbug strings zlib wsock32) + +ADD_EXECUTABLE(ma_test3 ma_test3.c) +TARGET_LINK_LIBRARIES(ma_test3 maria myisam mysys dbug strings zlib wsock32) + +ADD_EXECUTABLE(ma_rt_test ma_rt_test.c) +TARGET_LINK_LIBRARIES(ma_rt_test maria myisam mysys dbug strings zlib wsock32) + +ADD_EXECUTABLE(ma_sp_test ma_sp_test.c) +TARGET_LINK_LIBRARIES(ma_sp_test maria myisam mysys dbug strings zlib wsock32) IF(EMBED_MANIFESTS) MYSQL_EMBED_MANIFEST("maria_ftdump" "asInvoker") diff --git a/storage/maria/ha_maria.cc b/storage/maria/ha_maria.cc index 4e7d2b04471..59ad55c743f 100644 --- a/storage/maria/ha_maria.cc +++ b/storage/maria/ha_maria.cc @@ -2586,7 +2586,7 @@ bool maria_show_status(handlerton *hton, { status= error; status_len= sizeof(error); - length= snprintf(object, SHOW_MSG_LEN, "Size unknown ; %s", file); + length= my_snprintf(object, SHOW_MSG_LEN, "Size unknown ; %s", file); } else { @@ -2605,7 +2605,7 @@ bool maria_show_status(handlerton *hton, status= needed; status_len= sizeof(needed); } - length= snprintf(object, SHOW_MSG_LEN, "Size %12lu ; %s", + length= my_snprintf(object, SHOW_MSG_LEN, "Size %12lu ; %s", (ulong) stat->st_size, file); } diff --git a/storage/maria/lockman.c b/storage/maria/lockman.c index 88642461216..4c5f69ce7f9 100644 --- a/storage/maria/lockman.c +++ b/storage/maria/lockman.c @@ -690,8 +690,7 @@ enum lockman_getlock_result lockman_getlock(LOCKMAN *lm, LOCK_OWNER *lo, /* yuck. waiting */ deadline= my_getsystime() + lm->lock_timeout * 10000; - timeout.tv_sec= deadline/10000000; - timeout.tv_nsec= (deadline % 10000000) * 100; + set_timespec_nsec(timeout,lm->lock_timeout * 1000000); do { pthread_cond_timedwait(wait_for_lo->cond, wait_for_lo->mutex, &timeout); diff --git a/storage/maria/ma_check.c b/storage/maria/ma_check.c index da6b6d0aa57..ef34b6f082d 100644 --- a/storage/maria/ma_check.c +++ b/storage/maria/ma_check.c @@ -4362,8 +4362,8 @@ static int sort_get_next_record(MARIA_SORT_PARAM *sort_param) case DYNAMIC_RECORD: { uchar *to; - LINT_INIT(to); ha_checksum checksum= 0; + LINT_INIT(to); pos=sort_param->pos; searching=(sort_param->fix_datafile && (param->testflag & T_EXTEND)); diff --git a/storage/maria/ma_loghandler.c b/storage/maria/ma_loghandler.c index 98a03727fca..ee9d39ee006 100644 --- a/storage/maria/ma_loghandler.c +++ b/storage/maria/ma_loghandler.c @@ -18,6 +18,17 @@ #include "ma_blockrec.h" /* for some constants and in-write hooks */ #include "ma_key_recover.h" /* For some in-write hooks */ +/* + On Windows, neither my_open() nor my_sync() work for directories. + Also there is no need to flush filesystem changes ,i.e to sync() + directories. +*/ +#ifdef __WIN__ +#define sync_dir(A,B) 0 +#else +#define sync_dir(A,B) my_sync(A,B) +#endif + /** @file @brief Module which writes and reads to a transaction log @@ -788,7 +799,7 @@ static File create_logfile_by_number_no_cache(uint32 file_no) DBUG_RETURN(-1); } if (sync_log_dir >= TRANSLOG_SYNC_DIR_NEWFILE && - my_sync(log_descriptor.directory_fd, MYF(MY_WME | MY_IGNORE_BADFD))) + sync_dir(log_descriptor.directory_fd, MYF(MY_WME | MY_IGNORE_BADFD))) { DBUG_PRINT("error", ("Error %d during syncing directory '%s'", errno, log_descriptor.directory)); @@ -1116,11 +1127,11 @@ static void translog_mark_file_unfinished(uint32 file) { int place, i; struct st_file_counter fc, *fc_ptr; - fc.file= file; fc.counter= 1; DBUG_ENTER("translog_mark_file_unfinished"); DBUG_PRINT("enter", ("file: %lu", (ulong) file)); + fc.file= file; fc.counter= 1; pthread_mutex_lock(&log_descriptor.unfinished_files_lock); if (log_descriptor.unfinished_files.elements == 0) @@ -2447,7 +2458,7 @@ translog_check_sector_protection(uchar *page, TRANSLOG_FILE *file) { uint i, offset; uchar *table= page + page_overhead[page[TRANSLOG_PAGE_FLAGS]] - - TRANSLOG_PAGE_SIZE / DISK_DRIVE_SECTOR_SIZE; ; + TRANSLOG_PAGE_SIZE / DISK_DRIVE_SECTOR_SIZE; uint8 current= table[0]; DBUG_ENTER("translog_check_sector_protection"); @@ -2989,7 +3000,7 @@ static my_bool translog_truncate_log(TRANSLOG_ADDRESS addr) my_sync(fd, MYF(MY_WME)) || my_close(fd, MYF(MY_WME)) || (sync_log_dir >= TRANSLOG_SYNC_DIR_ALWAYS && - my_sync(log_descriptor.directory_fd, MYF(MY_WME | MY_IGNORE_BADFD)))) + sync_dir(log_descriptor.directory_fd, MYF(MY_WME | MY_IGNORE_BADFD)))) DBUG_RETURN(1); /* fix the horizon */ @@ -3121,7 +3132,7 @@ my_bool translog_init_with_table(const char *directory, /* Directory to store files */ unpack_dirname(log_descriptor.directory, directory); - +#ifndef __WIN__ if ((log_descriptor.directory_fd= my_open(log_descriptor.directory, O_RDONLY, MYF(MY_WME))) < 0) { @@ -3130,7 +3141,7 @@ my_bool translog_init_with_table(const char *directory, errno, log_descriptor.directory)); DBUG_RETURN(1); } - +#endif log_descriptor.in_buffers_only= LSN_IMPOSSIBLE; DBUG_ASSERT(log_file_max_size % TRANSLOG_PAGE_SIZE == 0 && log_file_max_size >= TRANSLOG_MIN_FILE_SIZE); @@ -3596,7 +3607,7 @@ my_bool translog_init_with_table(const char *directory, if (unlikely(LSN_OFFSET(page_addr) == TRANSLOG_PAGE_SIZE)) { uint32 file_no= LSN_FILE_NO(page_addr); - bool last_page_ok; + my_bool last_page_ok; /* it is beginning of the current file */ if (unlikely(file_no == 1)) { @@ -5155,9 +5166,9 @@ translog_write_variable_record_mgroup(LSN *lsn, } else if (chunk3_pages) { + uchar chunk3_header[3]; DBUG_PRINT("info", ("chunk 3")); DBUG_ASSERT(full_pages == 0); - uchar chunk3_header[3]; chunk3_pages= 0; chunk3_header[0]= TRANSLOG_CHUNK_LNGTH; int2store(chunk3_header + 1, chunk3_size); @@ -6491,9 +6502,9 @@ int translog_read_next_record_header(TRANSLOG_SCANNER_DATA *scanner, { uint8 chunk_type; translog_size_t res; - buff->groups_no= 0; /* to be sure that we will free it right */ DBUG_ENTER("translog_read_next_record_header"); + buff->groups_no= 0; /* to be sure that we will free it right */ DBUG_PRINT("enter", ("scanner: 0x%lx", (ulong) scanner)); DBUG_PRINT("info", ("Scanner: Cur: (%lu,0x%lx) Hrz: (%lu,0x%lx) " "Lst: (%lu,0x%lx) Offset: %u(%x) fixed: %d", @@ -7088,7 +7099,7 @@ my_bool translog_flush(TRANSLOG_ADDRESS lsn) ((LSN_OFFSET(log_descriptor.previous_flush_horizon) - 1) / TRANSLOG_PAGE_SIZE) != ((LSN_OFFSET(flush_horizon) - 1) / TRANSLOG_PAGE_SIZE))) - rc|= my_sync(log_descriptor.directory_fd, MYF(MY_WME | MY_IGNORE_BADFD)); + rc|= sync_dir(log_descriptor.directory_fd, MYF(MY_WME | MY_IGNORE_BADFD)); log_descriptor.previous_flush_horizon= flush_horizon; out: pthread_mutex_unlock(&log_descriptor.log_flush_lock); @@ -7125,6 +7136,9 @@ int translog_assign_id_to_share(MARIA_HA *tbl_info, TRN *trn) pthread_mutex_lock(&share->intern_lock); if (likely(share->id == 0)) { + LSN lsn; + LEX_STRING log_array[TRANSLOG_INTERNAL_PARTS + 2]; + uchar log_data[FILEID_STORE_SIZE]; /* Inspired by set_short_trid() of trnman.c */ uint i= share->kfile.file % SHARE_ID_MAX + 1; do @@ -7144,9 +7158,6 @@ int translog_assign_id_to_share(MARIA_HA *tbl_info, TRN *trn) i= 1; /* scan the whole array */ } while (share->id == 0); DBUG_PRINT("info", ("id_to_share: 0x%lx -> %u", (ulong)share, share->id)); - LSN lsn; - LEX_STRING log_array[TRANSLOG_INTERNAL_PARTS + 2]; - uchar log_data[FILEID_STORE_SIZE]; log_array[TRANSLOG_INTERNAL_PARTS + 0].str= (char*) log_data; log_array[TRANSLOG_INTERNAL_PARTS + 0].length= sizeof(log_data); /* diff --git a/storage/maria/ma_recovery.c b/storage/maria/ma_recovery.c index 4c8910ce632..8a7376dda5a 100644 --- a/storage/maria/ma_recovery.c +++ b/storage/maria/ma_recovery.c @@ -2859,9 +2859,10 @@ static LSN parse_checkpoint_record(LSN lsn) { pgcache_page_no_t page_id; LSN rec_lsn; + uint32 is_index; uint16 table_id= uint2korr(ptr); ptr+= 2; - uint32 is_index= ptr[0]; + is_index= ptr[0]; ptr++; page_id= uint4korr(ptr); ptr+= 4; diff --git a/storage/maria/ma_test2.c b/storage/maria/ma_test2.c index 6b6a1e8079d..ff005c38ab7 100644 --- a/storage/maria/ma_test2.c +++ b/storage/maria/ma_test2.c @@ -45,7 +45,7 @@ static void put_blob_in_record(uchar *blob_pos,char **blob_buffer, static void copy_key(MARIA_HA *info, uint inx, uchar *record, uchar *key); static int verbose= 0, testflag= 0, first_key= 0, async_io= 0, pagecacheing= 0; -static int write_cacheing= 0, locking= 0, rec_pointer_size= 0, pack_fields= 1; +static int write_cacheing= 0, do_locking= 0, rec_pointer_size= 0, pack_fields= 1; static int silent= 0, opt_quick_mode= 0, transactional= 0, skip_update= 0; static int die_in_middle_of_transaction= 0; static int pack_seg= HA_SPACE_PACK, pack_type= HA_PACK_KEY, remove_count= -1; @@ -242,7 +242,7 @@ int main(int argc, char *argv[]) goto err; if (!silent) printf("- Writing key:s\n"); - if (locking) + if (do_locking) maria_lock_database(file,F_WRLCK); if (write_cacheing) maria_extra(file,HA_EXTRA_WRITE_CACHE,0); @@ -316,7 +316,10 @@ int main(int argc, char *argv[]) printf("- Delete\n"); if (srand_arg) srand(srand_arg); - for (i=0 ; i<recant/10 ; i++) + if (!update_count) + update_count= recant/10; + + for (i=0 ; i < update_count ; i++) { for (j=rnd(1000)+1 ; j>0 && key1[j] == 0 ; j--) ; if (j != 0) @@ -453,8 +456,9 @@ int main(int argc, char *argv[]) goto err; } { + int skr; info.recpos= maria_position(file); - int skr=maria_rnext(file,read_record2,0); + skr= maria_rnext(file,read_record2,0); if ((skr && my_errno != HA_ERR_END_OF_FILE) || maria_rprev(file,read_record2,0) || memcmp(read_record,read_record2,reclength) != 0 || @@ -784,7 +788,7 @@ int main(int argc, char *argv[]) printf("- maria_extra(CACHE) + maria_rrnd.... + maria_extra(NO_CACHE)\n"); if (maria_reset(file) || maria_extra(file,HA_EXTRA_CACHE,0)) { - if (locking || (!use_blob && !pack_fields)) + if (do_locking || (!use_blob && !pack_fields)) { puts("got error from maria_extra(HA_EXTRA_CACHE)"); goto err; @@ -963,9 +967,9 @@ end: puts("Write cacheing used"); if (write_cacheing) puts("quick mode"); - if (async_io && locking) + if (async_io && do_locking) puts("Asyncron io with locking used"); - else if (locking) + else if (do_locking) puts("Locking used"); if (use_blob) puts("blobs used"); @@ -1036,7 +1040,7 @@ static void get_options(int argc, char **argv) srand(srand_arg= atoi(pos)); break; case 'L': - locking=1; + do_locking=1; break; case 'a': /* use asyncron io */ async_io=1; diff --git a/storage/maria/ma_test3.c b/storage/maria/ma_test3.c index de8b4c83a51..8dd631380a0 100644 --- a/storage/maria/ma_test3.c +++ b/storage/maria/ma_test3.c @@ -15,7 +15,7 @@ /* Test av locking */ -#ifndef __NETWARE__ +#if !(defined (__NETWARE_) || defined (_WIN32)) /*no fork() in Windows*/ #include "maria.h" #include <sys/types.h> @@ -488,14 +488,14 @@ int test_update(MARIA_HA *file,int id,int lock_type) return 0; } -#else /* __NETWARE__ */ +#else /* __NETWARE__ || __WIN__ */ #include <stdio.h> -main() +int main() { - fprintf(stderr,"this test has not been ported to NetWare\n"); + fprintf(stderr,"this test has not been ported to Netware or Windows\n"); return 0; } -#endif /* __NETWARE__ */ +#endif /* __NETWARE__|| __WIN__ */ diff --git a/storage/maria/tablockman.c b/storage/maria/tablockman.c index 1fd9ed6ec72..1bb8889aaa7 100644 --- a/storage/maria/tablockman.c +++ b/storage/maria/tablockman.c @@ -273,7 +273,6 @@ tablockman_getlock(TABLOCKMAN *lm, TABLE_LOCK_OWNER *lo, { TABLE_LOCK *old, *new, *blocker, *blocker2; TABLE_LOCK_OWNER *wait_for; - ulonglong deadline; struct timespec timeout; enum lockman_lock_type new_lock; enum lockman_getlock_result res; @@ -434,9 +433,8 @@ tablockman_getlock(TABLOCKMAN *lm, TABLE_LOCK_OWNER *lo, } lo->waiting_lock= new; - deadline= my_getsystime() + lm->lock_timeout * 10000; - timeout.tv_sec= deadline/10000000; - timeout.tv_nsec= (deadline % 10000000) * 100; + set_timespec_nsec(timeout,lm->lock_timeout * 1000000); + } /* diff --git a/storage/maria/unittest/CMakeLists.txt b/storage/maria/unittest/CMakeLists.txt new file mode 100644 index 00000000000..bdf0e981f5a --- /dev/null +++ b/storage/maria/unittest/CMakeLists.txt @@ -0,0 +1,97 @@ +# Copyright (C) 2007 MySQL AB +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") +SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") + +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/zlib + ${CMAKE_SOURCE_DIR}/unittest/mytap) +LINK_LIBRARIES(maria myisam mytap mysys dbug strings wsock32 zlib) + +ADD_EXECUTABLE(ma_test_loghandler_t + ma_test_loghandler-t.c ma_maria_log_cleanup.c ma_loghandler_examples.c) +ADD_EXECUTABLE(ma_test_loghandler_multigroup_t + ma_test_loghandler_multigroup-t.c ma_maria_log_cleanup.c ma_loghandler_examples.c) +ADD_EXECUTABLE(ma_test_loghandler_multithread_t + ma_test_loghandler_multithread-t.c ma_maria_log_cleanup.c ma_loghandler_examples.c) +ADD_EXECUTABLE(ma_test_loghandler_pagecache_t + ma_test_loghandler_pagecache-t.c ma_maria_log_cleanup.c ma_loghandler_examples.c) +ADD_EXECUTABLE(ma_test_loghandler_long_t_big + ma_test_loghandler-t.c ma_maria_log_cleanup.c ma_loghandler_examples.c) +SET_TARGET_PROPERTIES(ma_test_loghandler_long_t_big PROPERTIES COMPILE_FLAGS "-DLONG_LOG_TEST") + +ADD_EXECUTABLE(ma_test_loghandler_noflush_t + ma_test_loghandler_noflush-t.c ma_maria_log_cleanup.c ma_loghandler_examples.c) +ADD_EXECUTABLE(ma_test_loghandler_first_lsn_t + ma_test_loghandler_first_lsn-t.c ma_maria_log_cleanup.c ma_loghandler_examples.c) +ADD_EXECUTABLE(ma_test_loghandler_max_lsn_t + ma_test_loghandler_max_lsn-t.c ma_maria_log_cleanup.c ma_loghandler_examples.c) +ADD_EXECUTABLE(ma_test_loghandler_purge_t + ma_test_loghandler_purge-t.c ma_maria_log_cleanup.c ma_loghandler_examples.c) +ADD_EXECUTABLE(ma_test_loghandler_readonly_t + ma_test_loghandler_multigroup-t.c ma_maria_log_cleanup.c ma_loghandler_examples.c) +SET_TARGET_PROPERTIES(ma_test_loghandler_readonly_t PROPERTIES COMPILE_FLAGS "-DREADONLY_TEST") + + +SET(ma_pagecache_single_src ma_pagecache_single.c test_file.c test_file.h) +SET(ma_pagecache_consist_src ma_pagecache_consist.c test_file.c test_file.h) +SET(ma_pagecache_common_cppflags "-DEXTRA_DEBUG -DPAGECACHE_DEBUG -DMAIN") + +ADD_EXECUTABLE(ma_pagecache_single_1k_t ${ma_pagecache_single_src}) +SET_TARGET_PROPERTIES(ma_pagecache_single_1k_t + PROPERTIES COMPILE_FLAGS "${ma_pagecache_common_cppflags} -DPAGE_SIZE=1024") + +ADD_EXECUTABLE(ma_pagecache_single_8k_t ${ma_pagecache_single_src}) +SET_TARGET_PROPERTIES(ma_pagecache_single_8k_t + PROPERTIES COMPILE_FLAGS "${ma_pagecache_common_cppflags} -DPAGE_SIZE=8192") + +ADD_EXECUTABLE(ma_pagecache_single_64k_t_big ${ma_pagecache_single_src}) +SET_TARGET_PROPERTIES(ma_pagecache_single_64k_t_big + PROPERTIES COMPILE_FLAGS "${ma_pagecache_common_cppflags} -DPAGE_SIZE=65536") + +ADD_EXECUTABLE(ma_pagecache_consist_1k_t ${ma_pagecache_consist_src}) +SET_TARGET_PROPERTIES(ma_pagecache_consist_1k_t + PROPERTIES COMPILE_FLAGS "${ma_pagecache_common_cppflags} -DPAGE_SIZE=1024") + +ADD_EXECUTABLE(ma_pagecache_consist_64k_t_big ${ma_pagecache_consist_src}) +SET_TARGET_PROPERTIES(ma_pagecache_consist_64k_t_big + PROPERTIES COMPILE_FLAGS "${ma_pagecache_common_cppflags} -DPAGE_SIZE=65536") + +ADD_EXECUTABLE(ma_pagecache_consist_1kHC_t + ${ma_pagecache_consist_src}) +SET_TARGET_PROPERTIES(ma_pagecache_consist_1kHC_t + PROPERTIES COMPILE_FLAGS "${ma_pagecache_common_cppflags} -DPAGE_SIZE=1024 -DTEST_HIGH_CONCURENCY") +ADD_EXECUTABLE(ma_pagecache_consist_64kHC_t_big + ${ma_pagecache_consist_src}) +SET_TARGET_PROPERTIES(ma_pagecache_consist_64kHC_t_big + PROPERTIES COMPILE_FLAGS "${ma_pagecache_common_cppflags} -DPAGE_SIZE=65536 -DTEST_HIGH_CONCURENCY") +ADD_EXECUTABLE(ma_pagecache_consist_1kRD_t ${ma_pagecache_consist_src}) +SET_TARGET_PROPERTIES(ma_pagecache_consist_1kRD_t + PROPERTIES COMPILE_FLAGS "${ma_pagecache_common_cppflags} -DPAGE_SIZE=1024 -DTEST_READERS") +ADD_EXECUTABLE(ma_pagecache_consist_64kRD_t_big ${ma_pagecache_consist_src}) +SET_TARGET_PROPERTIES(ma_pagecache_consist_64kRD_t_big + PROPERTIES COMPILE_FLAGS "${ma_pagecache_common_cppflags} -DPAGE_SIZE=65536 -DTEST_READERS") +ADD_EXECUTABLE(ma_pagecache_consist_1kWR_t ${ma_pagecache_consist_src}) +SET_TARGET_PROPERTIES(ma_pagecache_consist_1kWR_t + PROPERTIES COMPILE_FLAGS "${ma_pagecache_common_cppflags} -DPAGE_SIZE=1024 -DTEST_WRITERS") +ADD_EXECUTABLE(ma_pagecache_consist_64kWR_t_big ${ma_pagecache_consist_src}) +SET_TARGET_PROPERTIES(ma_pagecache_consist_64kWR_t_big + PROPERTIES COMPILE_FLAGS "${ma_pagecache_common_cppflags} -DPAGE_SIZE=65536 -DTEST_WRITERS") + + + + + + diff --git a/storage/maria/unittest/Makefile.am b/storage/maria/unittest/Makefile.am index 89b700dc792..fd4a8c99ed2 100644 --- a/storage/maria/unittest/Makefile.am +++ b/storage/maria/unittest/Makefile.am @@ -18,7 +18,7 @@ AM_CPPFLAGS = @ZLIB_INCLUDES@ -I$(top_builddir)/include \ -I$(top_srcdir)/include -I$(top_srcdir)/unittest/mytap INCLUDES = @ZLIB_INCLUDES@ -I$(top_builddir)/include \ -I$(top_srcdir)/include -I$(top_srcdir)/unittest/mytap - +EXTRA_DIST = CMakeLists.txt # Only reason to link with libmyisam.a here is that it's where some fulltext # pieces are (but soon we'll remove fulltext dependencies from Maria). LDADD= $(top_builddir)/unittest/mytap/libmytap.a \ diff --git a/storage/maria/unittest/ma_pagecache_consist.c b/storage/maria/unittest/ma_pagecache_consist.c index a2c9ac92939..70c3dd67ba6 100644 --- a/storage/maria/unittest/ma_pagecache_consist.c +++ b/storage/maria/unittest/ma_pagecache_consist.c @@ -95,13 +95,7 @@ dummy_fail_callback(uchar* data_ptr __attribute__((unused))) static uint get_len(uint limit) { - uint32 rec_len; - do - { - rec_len= random() / - (RAND_MAX / limit); - } while (rec_len >= limit || rec_len == 0); - return rec_len; + return (uint)((ulonglong)rand()*(limit-1)/RAND_MAX); } @@ -275,9 +269,10 @@ void writer(int num) static void *test_thread_reader(void *arg) { int param=*((int*) arg); + DBUG_ENTER("test_reader"); my_thread_init(); - DBUG_ENTER("test_reader"); + DBUG_PRINT("enter", ("param: %d", param)); reader(param); @@ -295,9 +290,9 @@ static void *test_thread_reader(void *arg) static void *test_thread_writer(void *arg) { int param=*((int*) arg); + DBUG_ENTER("test_writer"); my_thread_init(); - DBUG_ENTER("test_writer"); DBUG_PRINT("enter", ("param: %d", param)); writer(param); @@ -334,7 +329,7 @@ int main(int argc __attribute__((unused)), } #endif - + { DBUG_ENTER("main"); DBUG_PRINT("info", ("Main thread: %s\n", my_thread_name())); if ((file1.file= my_open(file1_name, @@ -470,4 +465,5 @@ int main(int argc __attribute__((unused)), DBUG_PRINT("info", ("Program end")); DBUG_RETURN(exit_status()); + } } diff --git a/storage/maria/unittest/ma_pagecache_single.c b/storage/maria/unittest/ma_pagecache_single.c index 16d608ec808..c4efda7d8cf 100644 --- a/storage/maria/unittest/ma_pagecache_single.c +++ b/storage/maria/unittest/ma_pagecache_single.c @@ -577,6 +577,7 @@ static void *test_thread(void *arg) #endif my_thread_init(); + { DBUG_ENTER("test_thread"); DBUG_PRINT("enter", ("param: %d", param)); @@ -602,6 +603,7 @@ static void *test_thread(void *arg) free((uchar*) arg); my_thread_end(); DBUG_RETURN(0); + } } @@ -626,6 +628,7 @@ int main(int argc __attribute__((unused)), DBUG_SET_INITIAL(default_dbug_option); } #endif + { DBUG_ENTER("main"); DBUG_PRINT("info", ("Main thread: %s\n", my_thread_name())); if ((tmp_file= my_open(file2_name, O_CREAT | O_TRUNC | O_RDWR, @@ -728,4 +731,5 @@ int main(int argc __attribute__((unused)), DBUG_PRINT("info", ("Program end")); DBUG_RETURN(exit_status()); + } } diff --git a/storage/maria/unittest/ma_test_loghandler-t.c b/storage/maria/unittest/ma_test_loghandler-t.c index 13104f565c4..779400834be 100644 --- a/storage/maria/unittest/ma_test_loghandler-t.c +++ b/storage/maria/unittest/ma_test_loghandler-t.c @@ -46,6 +46,14 @@ static TRN *trn= &dummy_transaction_object; */ /* + Generate random value in the range (0,LONG_BUFFER_SIZE) +*/ +static uint32 rand_buffer_size() +{ + return (uint32)((ulonglong)rand()*(LONG_BUFFER_SIZE + 1)/RAND_MAX); +} + +/* Check that the buffer filled correctly SYNOPSIS @@ -58,6 +66,7 @@ static TRN *trn= &dummy_transaction_object; 1 - Error */ + static my_bool check_content(uchar *ptr, ulong length) { ulong i; @@ -88,7 +97,7 @@ static my_bool check_content(uchar *ptr, ulong length) void read_ok(TRANSLOG_HEADER_BUFFER *rec) { char buff[80]; - snprintf(buff, sizeof(buff), "read record type: %u LSN: (%lu,0x%lx)", + my_snprintf(buff, sizeof(buff), "read record type: %u LSN: (%lu,0x%lx)", rec->type, LSN_IN_PARTS(rec->lsn)); ok(1, buff); } @@ -188,7 +197,7 @@ int main(int argc __attribute__((unused)), char *argv[]) plan(((ITERATIONS - 1) * 4 + 1)*2 + ITERATIONS - 1 + 1); - srandom(122334817L); + srand(122334817L); long_tr_id[5]= 0xff; @@ -232,7 +241,7 @@ int main(int argc __attribute__((unused)), char *argv[]) } ok(1, "write LOGREC_FIXED_RECORD_1LSN_EXAMPLE"); lsn_store(lsn_buff, lsn_base); - if ((rec_len= random() / (RAND_MAX / (LONG_BUFFER_SIZE + 1))) < 12) + if ((rec_len= rand_buffer_size()) < 12) rec_len= 12; parts[TRANSLOG_INTERNAL_PARTS + 0].str= (char*)lsn_buff; parts[TRANSLOG_INTERNAL_PARTS + 0].length= LSN_STORE_SIZE; @@ -272,7 +281,7 @@ int main(int argc __attribute__((unused)), char *argv[]) ok(1, "write LOGREC_FIXED_RECORD_2LSN_EXAMPLE"); lsn_store(lsn_buff, lsn_base); lsn_store(lsn_buff + LSN_STORE_SIZE, first_lsn); - if ((rec_len= random() / (RAND_MAX / (LONG_BUFFER_SIZE + 1))) < 19) + if ((rec_len= rand_buffer_size()) < 19) rec_len= 19; parts[TRANSLOG_INTERNAL_PARTS + 0].str= (char*)lsn_buff; parts[TRANSLOG_INTERNAL_PARTS + 0].length= 14; @@ -310,7 +319,7 @@ int main(int argc __attribute__((unused)), char *argv[]) lsn_base= lsn; - if ((rec_len= random() / (RAND_MAX / (LONG_BUFFER_SIZE + 1))) < 9) + if ((rec_len= rand_buffer_size()) < 9) rec_len= 9; parts[TRANSLOG_INTERNAL_PARTS + 0].str= (char*)long_buffer; parts[TRANSLOG_INTERNAL_PARTS + 0].length= rec_len; @@ -345,7 +354,7 @@ int main(int argc __attribute__((unused)), char *argv[]) } ok(1, "flush"); - srandom(122334817L); + srand(122334817L); rc= 1; @@ -475,7 +484,7 @@ int main(int argc __attribute__((unused)), char *argv[]) { LSN ref; ref= lsn_korr(rec.header); - if ((rec_len= random() / (RAND_MAX / (LONG_BUFFER_SIZE + 1))) < 12) + if ((rec_len= rand_buffer_size()) < 12) rec_len= 12; if (rec.type != LOGREC_VARIABLE_RECORD_1LSN_EXAMPLE || rec.short_trid != (i % 0xFFFF) || @@ -516,7 +525,7 @@ int main(int argc __attribute__((unused)), char *argv[]) LSN ref1, ref2; ref1= lsn_korr(rec.header); ref2= lsn_korr(rec.header + LSN_STORE_SIZE); - if ((rec_len= random() / (RAND_MAX / (LONG_BUFFER_SIZE + 1))) < 19) + if ((rec_len= rand_buffer_size()) < 19) rec_len= 19; if (rec.type != LOGREC_VARIABLE_RECORD_2LSN_EXAMPLE || rec.short_trid != (i % 0xFFFF) || @@ -584,7 +593,7 @@ int main(int argc __attribute__((unused)), char *argv[]) translog_free_record_header(&rec); len= translog_read_next_record_header(&scanner, &rec); - if ((rec_len= random() / (RAND_MAX / (LONG_BUFFER_SIZE + 1))) < 9) + if ((rec_len= rand_buffer_size()) < 9) rec_len= 9; if (rec.type != LOGREC_VARIABLE_RECORD_0LSN_EXAMPLE || rec.short_trid != (i % 0xFFFF) || diff --git a/storage/maria/unittest/ma_test_loghandler_multigroup-t.c b/storage/maria/unittest/ma_test_loghandler_multigroup-t.c index 61ae3f2a277..265826588ae 100644 --- a/storage/maria/unittest/ma_test_loghandler_multigroup-t.c +++ b/storage/maria/unittest/ma_test_loghandler_multigroup-t.c @@ -114,13 +114,8 @@ static my_bool read_and_check_content(TRANSLOG_HEADER_BUFFER *rec, static uint32 get_len() { - uint32 rec_len; - do - { - rec_len= random() / - (RAND_MAX / (LONG_BUFFER_SIZE - MIN_REC_LENGTH - 1)) + MIN_REC_LENGTH; - } while (rec_len >= LONG_BUFFER_SIZE); - return rec_len; + return (uint32) + ((ulonglong)rand()*(LONG_BUFFER_SIZE - MIN_REC_LENGTH - 1)/RAND_MAX)+ MIN_REC_LENGTH; } int main(int argc __attribute__((unused)), char *argv[]) @@ -196,7 +191,7 @@ int main(int argc __attribute__((unused)), char *argv[]) plan(((ITERATIONS - 1) * 4 + 1) * 2); - srandom(122334817L); + srand(122334817L); long_tr_id[5]= 0xff; @@ -356,7 +351,7 @@ int main(int argc __attribute__((unused)), char *argv[]) exit(1); } - srandom(122334817L); + srand(122334817L); rc= 1; diff --git a/storage/maria/unittest/ma_test_loghandler_multithread-t.c b/storage/maria/unittest/ma_test_loghandler_multithread-t.c index 1fa3da98a38..a4e1e2da52c 100644 --- a/storage/maria/unittest/ma_test_loghandler_multithread-t.c +++ b/storage/maria/unittest/ma_test_loghandler_multithread-t.c @@ -46,13 +46,9 @@ static uchar *long_buffer; static uint32 get_len() { - uint32 rec_len; - do - { - rec_len= random() / - (RAND_MAX / (LONG_BUFFER_SIZE - MIN_REC_LENGTH - 1)) + MIN_REC_LENGTH; - } while (rec_len >= LONG_BUFFER_SIZE); - return rec_len; + return MIN_REC_LENGTH + + (uint32)(((ulonglong)rand())* + (LONG_BUFFER_SIZE - MIN_REC_LENGTH - 1)/RAND_MAX); } @@ -129,8 +125,8 @@ void writer(int num) for (i= 0; i < ITERATIONS; i++) { uint len= get_len(); - lens[num][i]= len; LEX_STRING parts[TRANSLOG_INTERNAL_PARTS + 1]; + lens[num][i]= len; int2store(long_tr_id, num); int4store(long_tr_id + 2, i); @@ -293,7 +289,7 @@ int main(int argc __attribute__((unused)), /* Suppressing of automatic record writing */ dummy_transaction_object.first_undo_lsn|= TRANSACTION_LOGGED_LONG_ID; - srandom(122334817L); + srand(122334817L); { LEX_STRING parts[TRANSLOG_INTERNAL_PARTS + 1]; uchar long_tr_id[6]= diff --git a/storage/maria/unittest/ma_test_loghandler_noflush-t.c b/storage/maria/unittest/ma_test_loghandler_noflush-t.c index 08a5de57b13..87a2221f7d6 100644 --- a/storage/maria/unittest/ma_test_loghandler_noflush-t.c +++ b/storage/maria/unittest/ma_test_loghandler_noflush-t.c @@ -27,6 +27,7 @@ int main(int argc __attribute__((unused)), char *argv[]) LSN first_lsn; TRANSLOG_HEADER_BUFFER rec; LEX_STRING parts[TRANSLOG_INTERNAL_PARTS + 1]; + translog_size_t len; MY_INIT(argv[0]); @@ -90,7 +91,7 @@ int main(int argc __attribute__((unused)), char *argv[]) exit(1); } - translog_size_t len= translog_read_record_header(first_lsn, &rec); + len= translog_read_record_header(first_lsn, &rec); if (len == 0) { fprintf(stderr, "translog_read_record_header failed (%d)\n", errno); diff --git a/storage/maria/unittest/test_file.c b/storage/maria/unittest/test_file.c index 215fd54a819..3650c7c50c5 100644 --- a/storage/maria/unittest/test_file.c +++ b/storage/maria/unittest/test_file.c @@ -23,13 +23,38 @@ int test_file(PAGECACHE_FILE file, char *file_name, off_t size, size_t buff_size, struct file_desc *desc) { - MY_STAT stat_buff, *stat; unsigned char *buffr= my_malloc(buff_size, MYF(0)); off_t pos= 0; size_t byte; int step= 0; int res= 1; /* ok */ +#ifdef __WIN__ + /* + On Windows, the info returned by stat(), specifically file length + is not necessarily current, because this is the behavior of + underlying FindFirstFile() function. + */ + WIN32_FILE_ATTRIBUTE_DATA file_attr; + LARGE_INTEGER li; + if(GetFileAttributesEx(file_name, GetFileExInfoStandard, &file_attr) == 0) + { + diag("Can't GetFileAttributesEx %s (errno: %d)\n", file_name, + GetLastError()); + res= 0; + goto err; + } + li.HighPart= file_attr.nFileSizeHigh; + li.LowPart= file_attr.nFileSizeLow; + if(li.QuadPart != size) + { + diag("file %s size is %llu (should be %llu)\n", + file_name, (ulonglong)size, (ulonglong)li.QuadPart); + res= 0; /* failed */ + /* continue to get more information */ + } +#else + MY_STAT stat_buff, *stat; if ((stat= my_stat(file_name, &stat_buff, MYF(0))) == NULL) { diag("Can't stat() %s (errno: %d)\n", file_name, errno); @@ -43,6 +68,7 @@ int test_file(PAGECACHE_FILE file, char *file_name, res= 0; /* failed */ /* continue to get more information */ } +#endif /* check content */ my_seek(file.file, 0, SEEK_SET, MYF(MY_WME)); diff --git a/storage/myisam/CMakeLists.txt b/storage/myisam/CMakeLists.txt index 9d91bf0560a..3d1fb4ba583 100755 --- a/storage/myisam/CMakeLists.txt +++ b/storage/myisam/CMakeLists.txt @@ -24,6 +24,7 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/zlib SET(MYISAM_SOURCES ft_boolean_search.c ft_nlq_search.c ft_parser.c ft_static.c ft_stem.c ha_myisam.cc + ft_myisam.c ft_stopwords.c ft_update.c mi_cache.c mi_changed.c mi_check.c mi_checksum.c mi_close.c mi_create.c mi_dbug.c mi_delete.c mi_delete_all.c mi_delete_table.c mi_dynrec.c mi_extra.c mi_info.c @@ -50,6 +51,21 @@ IF(NOT SOURCE_SUBLIBS) ADD_EXECUTABLE(myisampack myisampack.c) TARGET_LINK_LIBRARIES(myisampack myisam mysys debug dbug strings zlib wsock32) + ADD_EXECUTABLE(mi_test1 mi_test1.c) + TARGET_LINK_LIBRARIES(mi_test1 myisam mysys debug dbug strings zlib wsock32) + + ADD_EXECUTABLE(mi_test2 mi_test2.c) + TARGET_LINK_LIBRARIES(mi_test2 myisam mysys debug dbug strings zlib wsock32) + + ADD_EXECUTABLE(mi_test3 mi_test3.c) + TARGET_LINK_LIBRARIES(mi_test3 myisam mysys debug dbug strings zlib wsock32) + + ADD_EXECUTABLE(sp_test sp_test.c) + TARGET_LINK_LIBRARIES(sp_test myisam mysys debug dbug strings zlib wsock32) + + ADD_EXECUTABLE(rt_test rt_test.c) + TARGET_LINK_LIBRARIES(rt_test myisam mysys debug dbug strings zlib wsock32) + IF(EMBED_MANIFESTS) MYSQL_EMBED_MANIFEST("myisam_ftdump" "asInvoker") MYSQL_EMBED_MANIFEST("myisamchk" "asInvoker") diff --git a/storage/myisam/mi_test2.c b/storage/myisam/mi_test2.c index e75a09702ce..5804af736df 100644 --- a/storage/myisam/mi_test2.c +++ b/storage/myisam/mi_test2.c @@ -43,7 +43,7 @@ static void copy_key(struct st_myisam_info *info,uint inx, uchar *record,uchar *key); static int verbose=0,testflag=0, - first_key=0,async_io=0,key_cacheing=0,write_cacheing=0,locking=0, + first_key=0,async_io=0,key_cacheing=0,write_cacheing=0,do_locking=0, rec_pointer_size=0,pack_fields=1,use_log=0,silent=0, opt_quick_mode=0; static int pack_seg=HA_SPACE_PACK,pack_type=HA_PACK_KEY,remove_count=-1, @@ -222,7 +222,7 @@ int main(int argc, char *argv[]) printf("- Writing key:s\n"); if (key_cacheing) init_key_cache(dflt_key_cache,key_cache_block_size,key_cache_size,0,0); - if (locking) + if (do_locking) mi_lock_database(file,F_WRLCK); if (write_cacheing) mi_extra(file,HA_EXTRA_WRITE_CACHE,0); @@ -713,7 +713,7 @@ int main(int argc, char *argv[]) printf("- mi_extra(CACHE) + mi_rrnd.... + mi_extra(NO_CACHE)\n"); if (mi_reset(file) || mi_extra(file,HA_EXTRA_CACHE,0)) { - if (locking || (!use_blob && !pack_fields)) + if (do_locking || (!use_blob && !pack_fields)) { puts("got error from mi_extra(HA_EXTRA_CACHE)"); goto end; @@ -833,9 +833,9 @@ end: puts("Write cacheing used"); if (write_cacheing) puts("quick mode"); - if (async_io && locking) + if (async_io && do_locking) puts("Asyncron io with locking used"); - else if (locking) + else if (do_locking) puts("Locking used"); if (use_blob) puts("blobs used"); @@ -904,7 +904,7 @@ static void get_options(int argc, char **argv) use_log=1; break; case 'L': - locking=1; + do_locking=1; break; case 'A': /* use asyncron io */ async_io=1; diff --git a/storage/myisam/mi_test3.c b/storage/myisam/mi_test3.c index 5bdc33b8518..93f2b10fd3e 100644 --- a/storage/myisam/mi_test3.c +++ b/storage/myisam/mi_test3.c @@ -15,7 +15,7 @@ /* Test av locking */ -#ifndef __NETWARE__ +#if !(defined (__NETWARE_) || defined (_WIN32)) /*no fork() in Windows*/ #include "myisam.h" #include <sys/types.h> @@ -488,14 +488,14 @@ int test_update(MI_INFO *file,int id,int lock_type) return 0; } -#else /* __NETWARE__ */ +#else /* __NETWARE__ || __WIN__*/ #include <stdio.h> -main() +int main() { - fprintf(stderr,"this test has not been ported to NetWare\n"); + fprintf(stderr,"this test has not been ported to NetWare or Windows\n"); return 0; } -#endif /* __NETWARE__ */ +#endif /* __NETWARE__ || __WIN__ */ |