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 /sql/item_strfunc.cc | |
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 'sql/item_strfunc.cc')
-rw-r--r-- | sql/item_strfunc.cc | 110 |
1 files changed, 6 insertions, 104 deletions
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index bdcc488175e..9e16f388be0 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -3347,115 +3347,17 @@ err: } #endif -/* - UUID, as in - DCE 1.1: Remote Procedure Call, - Open Group Technical Standard Document Number C706, October 1997, - (supersedes C309 DCE: Remote Procedure Call 8/1994, - which was basis for ISO/IEC 11578:1996 specification) -*/ - -static struct my_rnd_struct uuid_rand; -static uint nanoseq; -static ulonglong uuid_time=0; -static char clock_seq_and_node_str[]="-0000-000000000000"; - -/** - number of 100-nanosecond intervals between - 1582-10-15 00:00:00.00 and 1970-01-01 00:00:00.00. -*/ -#define UUID_TIME_OFFSET ((ulonglong) 141427 * 24 * 60 * 60 * 1000 * 10 ) - -#define UUID_VERSION 0x1000 -#define UUID_VARIANT 0x8000 - -static void tohex(char *to, uint from, uint len) -{ - to+= len; - while (len--) - { - *--to= _dig_vec_lower[from & 15]; - from >>= 4; - } -} - -static void set_clock_seq_str() -{ - uint16 clock_seq= ((uint)(my_rnd(&uuid_rand)*16383)) | UUID_VARIANT; - tohex(clock_seq_and_node_str+1, clock_seq, 4); - nanoseq= 0; -} String *Item_func_uuid::val_str(String *str) { DBUG_ASSERT(fixed == 1); - char *s; - THD *thd= current_thd; + uchar guid[MY_UUID_SIZE]; - pthread_mutex_lock(&LOCK_uuid_generator); - if (! uuid_time) /* first UUID() call. initializing data */ - { - ulong tmp=sql_rnd_with_mutex(); - uchar mac[6]; - int i; - if (my_gethwaddr(mac)) - { - /* purecov: begin inspected */ - /* - generating random "hardware addr" - and because specs explicitly specify that it should NOT correlate - with a clock_seq value (initialized random below), we use a separate - my_rnd_init() here - */ - my_rnd_init(&uuid_rand, tmp + (ulong) thd, tmp + (ulong)global_query_id); - for (i=0; i < (int)sizeof(mac); i++) - mac[i]=(uchar)(my_rnd(&uuid_rand)*255); - /* purecov: end */ - } - s=clock_seq_and_node_str+sizeof(clock_seq_and_node_str)-1; - for (i=sizeof(mac)-1 ; i>=0 ; i--) - { - *--s=_dig_vec_lower[mac[i] & 15]; - *--s=_dig_vec_lower[mac[i] >> 4]; - } - my_rnd_init(&uuid_rand, tmp + (ulong) server_start_time, - tmp + (ulong) thd->status_var.bytes_sent); - set_clock_seq_str(); - } - - ulonglong tv=my_getsystime() + UUID_TIME_OFFSET + nanoseq; - if (unlikely(tv < uuid_time)) - set_clock_seq_str(); - else if (unlikely(tv == uuid_time)) - { - /* special protection from low-res system clocks */ - nanoseq++; - tv++; - } - else - { - if (nanoseq) - { - tv-=nanoseq; - nanoseq=0; - } - DBUG_ASSERT(tv > uuid_time); - } - uuid_time=tv; - pthread_mutex_unlock(&LOCK_uuid_generator); - - uint32 time_low= (uint32) (tv & 0xFFFFFFFF); - uint16 time_mid= (uint16) ((tv >> 32) & 0xFFFF); - uint16 time_hi_and_version= (uint16) ((tv >> 48) | UUID_VERSION); - - str->realloc(UUID_LENGTH+1); - str->length(UUID_LENGTH); + str->realloc(MY_UUID_STRING_LENGTH+1); + str->length(MY_UUID_STRING_LENGTH); str->set_charset(system_charset_info); - s=(char *) str->ptr(); - s[8]=s[13]='-'; - tohex(s, time_low, 8); - tohex(s+9, time_mid, 4); - tohex(s+14, time_hi_and_version, 4); - strmov(s+18, clock_seq_and_node_str); + my_uuid(guid); + my_uuid2str(guid, (char *)str->ptr()); + return str; } |