Commit 11b2abb2 authored by unknown's avatar unknown

Merge mysql.com:/home/wax/mysql/mysql-4.1

into mysql.com:/home/wax/mysql/mysql-4.1group_concat

parents 4254ab9d 330e3b1f
...@@ -792,3 +792,16 @@ libmysql/my_time.c ...@@ -792,3 +792,16 @@ libmysql/my_time.c
libmysqld/my_time.c libmysqld/my_time.c
sql/mysql_tzinfo_to_sql sql/mysql_tzinfo_to_sql
sql/mysql_tzinfo_to_sql.cc sql/mysql_tzinfo_to_sql.cc
ndb/src/cw/cpcd/ndb_cpcd
ndb/src/kernel/ndbd
ndb/src/kernel/blocks/backup/restore/ndb_restore
ndb/src/mgmclient/ndb_mgm
ndb/src/mgmsrv/ndb_mgmd
ndb/tools/ndb_delete_all
ndb/tools/ndb_desc
ndb/tools/ndb_drop_index
ndb/tools/ndb_drop_table
ndb/tools/ndb_select_all
ndb/tools/ndb_select_count
ndb/tools/ndb_show_tables
ndb/tools/ndb_waiter
...@@ -1449,7 +1449,7 @@ then ...@@ -1449,7 +1449,7 @@ then
if [ -z "$USE_RUNNING_NDBCLUSTER" ] if [ -z "$USE_RUNNING_NDBCLUSTER" ]
then then
echo "Starting ndbcluster" echo "Starting ndbcluster"
./ndb/ndbcluster --port-base=$NDBCLUSTER_PORT --small --diskless --initial --data-dir=$MYSQL_TEST_DIR/var || exit 1 ./ndb/ndbcluster --port-base=$NDBCLUSTER_PORT --small --initial --data-dir=$MYSQL_TEST_DIR/var || exit 1
NDB_CONNECTSTRING="host=localhost:$NDBCLUSTER_PORT" NDB_CONNECTSTRING="host=localhost:$NDBCLUSTER_PORT"
export NDB_CONNECTSTRING export NDB_CONNECTSTRING
else else
......
...@@ -1548,6 +1548,116 @@ Z,z,Ź,ź,Ż,ż ...@@ -1548,6 +1548,116 @@ Z,z,Ź,ź,Ż,ż
ǁ ǁ
ǂ ǂ
ǃ ǃ
select group_concat(c1 order by c1) from t1 group by c1 collate utf8_slovak_ci;
group_concat(c1 order by c1)
÷
×
A,a,À,Á,Â,Ã,Å,à,á,â,ã,å,Ā,ā,Ă,ă,Ą,ą,Ǎ,ǎ,Ǟ,ǟ,Ǡ,ǡ,Ǻ,ǻ
AA,Aa,aA,aa
Ä,ä
Æ,æ,Ǣ,ǣ,Ǽ,ǽ
B,b
ƀ
Ɓ
Ƃ,ƃ
C,c,Ç,ç,Ć,ć,Ĉ,ĉ,Ċ,ċ
cH
Č,č
Ƈ,ƈ
D,d,Ď,ď
DZ,Dz,dZ,dz,DŽ,Dž,dž,DZ,Dz,dz
Đ,đ
Ɖ
Ɗ
Ƌ,ƌ
Ð,ð
E,e,È,É,Ê,Ë,è,é,ê,ë,Ē,ē,Ĕ,ĕ,Ė,ė,Ę,ę,Ě,ě
Ǝ,ǝ
Ə
Ɛ
F,f
Ƒ,ƒ
G,g,Ĝ,ĝ,Ğ,ğ,Ġ,ġ,Ģ,ģ,Ǧ,ǧ,Ǵ,ǵ
Ǥ,ǥ
Ɠ
Ɣ
Ƣ,ƣ
H,h,Ĥ,ĥ
CH,Ch,ch
ƕ,Ƕ
Ħ,ħ
I,i,Ì,Í,Î,Ï,ì,í,î,ï,Ĩ,ĩ,Ī,ī,Ĭ,ĭ,Į,į,İ,Ǐ,ǐ
IJ,Ij,iJ,ij,IJ,ij
ı
Ɨ
Ɩ
J,j,Ĵ,ĵ,ǰ
K,k,Ķ,ķ,Ǩ,ǩ
Ƙ,ƙ
L,l,Ĺ,ĺ,Ļ,ļ,Ľ,ľ
Ŀ,ŀ
LJ,Lj,lJ,lj,LJ,Lj,lj
LL,Ll,lL,ll
Ł,ł
ƚ
ƛ
M,m
N,n,Ñ,ñ,Ń,ń,Ņ,ņ,Ň,ň,Ǹ,ǹ
NJ,Nj,nJ,nj,NJ,Nj,nj
Ɲ
ƞ
Ŋ,ŋ
O,o,Ò,Ó,Õ,Ö,ò,ó,õ,ö,Ō,ō,Ŏ,ŏ,Ő,ő,Ơ,ơ,Ǒ,ǒ,Ǫ,ǫ,Ǭ,ǭ
OE,Oe,oE,oe,Œ,œ
Ô,ô
Ø,ø,Ǿ,ǿ
Ɔ
Ɵ
P,p
Ƥ,ƥ
Q,q
ĸ
R,r,Ŕ,ŕ,Ŗ,ŗ,Ř,ř
RR,Rr,rR,rr
Ʀ
S,s,Ś,ś,Ŝ,ŝ,Ş,ş,ſ
SS,Ss,sS,ss,ß
Š,š
Ʃ
ƪ
T,t,Ţ,ţ,Ť,ť
ƾ
Ŧ,ŧ
ƫ
Ƭ,ƭ
Ʈ
U,u,Ù,Ú,Û,Ü,ù,ú,û,ü,Ũ,ũ,Ū,ū,Ŭ,ŭ,Ů,ů,Ű,ű,Ų,ų,Ư,ư,Ǔ,ǔ,Ǖ,ǖ,Ǘ,ǘ,Ǚ,ǚ,Ǜ,ǜ
Ɯ
Ʊ
V,v
Ʋ
W,w,Ŵ,ŵ
X,x
Y,y,Ý,ý,ÿ,Ŷ,ŷ,Ÿ
Ƴ,ƴ
Z,z,Ź,ź,Ż,ż
ƍ
Ž,ž
Ƶ,ƶ
Ʒ,Ǯ,ǯ
Ƹ,ƹ
ƺ
Þ,þ
ƿ,Ƿ
ƻ
Ƨ,ƨ
Ƽ,ƽ
Ƅ,ƅ
ʼn
ǀ
ǁ
ǂ
ǃ
select group_concat(c1 order by c1) from t1 group by c1 collate utf8_spanish2_ci; select group_concat(c1 order by c1) from t1 group by c1 collate utf8_spanish2_ci;
group_concat(c1 order by c1) group_concat(c1 order by c1)
÷ ÷
......
...@@ -176,7 +176,7 @@ select group_concat(c1 order by c1) from t1 group by c1 collate utf8_turkish_ci; ...@@ -176,7 +176,7 @@ select group_concat(c1 order by c1) from t1 group by c1 collate utf8_turkish_ci;
select group_concat(c1 order by c1) from t1 group by c1 collate utf8_czech_ci; select group_concat(c1 order by c1) from t1 group by c1 collate utf8_czech_ci;
select group_concat(c1 order by c1) from t1 group by c1 collate utf8_danish_ci; select group_concat(c1 order by c1) from t1 group by c1 collate utf8_danish_ci;
select group_concat(c1 order by c1) from t1 group by c1 collate utf8_lithuanian_ci; select group_concat(c1 order by c1) from t1 group by c1 collate utf8_lithuanian_ci;
--select group_concat(c1 order by c1) from t1 group by c1 collate utf8_slovak_ci; select group_concat(c1 order by c1) from t1 group by c1 collate utf8_slovak_ci;
select group_concat(c1 order by c1) from t1 group by c1 collate utf8_spanish2_ci; select group_concat(c1 order by c1) from t1 group by c1 collate utf8_spanish2_ci;
select group_concat(c1 order by c1) from t1 group by c1 collate utf8_roman_ci; select group_concat(c1 order by c1) from t1 group by c1 collate utf8_roman_ci;
...@@ -29,10 +29,10 @@ ...@@ -29,10 +29,10 @@
to disk, if neccessary. This is handled in find_key_block(). to disk, if neccessary. This is handled in find_key_block().
With the new free list, the blocks can have three temperatures: With the new free list, the blocks can have three temperatures:
hot, warm and cold (which is free). This is remembered in the block header hot, warm and cold (which is free). This is remembered in the block header
by the enum BLOCK_TEMPERATURE temperature variable. Remembering the by the enum BLOCK_TEMPERATURE temperature variable. Remembering the
temperature is neccessary to correctly count the number of warm blocks, temperature is neccessary to correctly count the number of warm blocks,
which is required to decide when blocks are allowed to become hot. Whenever which is required to decide when blocks are allowed to become hot. Whenever
a block is inserted to another (sub-)chain, we take the old and new a block is inserted to another (sub-)chain, we take the old and new
temperature into account to decide if we got one more or less warm block. temperature into account to decide if we got one more or less warm block.
blocks_unused is the sum of never used blocks in the pool and of currently blocks_unused is the sum of never used blocks in the pool and of currently
free blocks. blocks_used is the number of blocks fetched from the pool and free blocks. blocks_used is the number of blocks fetched from the pool and
...@@ -475,13 +475,13 @@ int resize_key_cache(KEY_CACHE *keycache, uint key_cache_block_size, ...@@ -475,13 +475,13 @@ int resize_key_cache(KEY_CACHE *keycache, uint key_cache_block_size,
if (!keycache->key_cache_inited) if (!keycache->key_cache_inited)
DBUG_RETURN(keycache->disk_blocks); DBUG_RETURN(keycache->disk_blocks);
if(key_cache_block_size == keycache->key_cache_block_size && if(key_cache_block_size == keycache->key_cache_block_size &&
use_mem == keycache->key_cache_mem_size) use_mem == keycache->key_cache_mem_size)
{ {
change_key_cache_param(keycache, division_limit, age_threshold); change_key_cache_param(keycache, division_limit, age_threshold);
DBUG_RETURN(keycache->disk_blocks); DBUG_RETURN(keycache->disk_blocks);
} }
keycache_pthread_mutex_lock(&keycache->cache_lock); keycache_pthread_mutex_lock(&keycache->cache_lock);
...@@ -504,7 +504,7 @@ int resize_key_cache(KEY_CACHE *keycache, uint key_cache_block_size, ...@@ -504,7 +504,7 @@ int resize_key_cache(KEY_CACHE *keycache, uint key_cache_block_size,
goto finish; goto finish;
} }
keycache->resize_in_flush= 0; keycache->resize_in_flush= 0;
keycache->can_be_used= 0; keycache->can_be_used= 0;
while (keycache->cnt_for_resize_op) while (keycache->cnt_for_resize_op)
{ {
keycache_pthread_cond_wait(&thread->suspend, &keycache->cache_lock); keycache_pthread_cond_wait(&thread->suspend, &keycache->cache_lock);
...@@ -540,9 +540,9 @@ static inline void inc_counter_for_resize_op(KEY_CACHE *keycache) ...@@ -540,9 +540,9 @@ static inline void inc_counter_for_resize_op(KEY_CACHE *keycache)
*/ */
static inline void dec_counter_for_resize_op(KEY_CACHE *keycache) static inline void dec_counter_for_resize_op(KEY_CACHE *keycache)
{ {
struct st_my_thread_var *last_thread; struct st_my_thread_var *last_thread;
if (!--keycache->cnt_for_resize_op && if (!--keycache->cnt_for_resize_op &&
(last_thread= keycache->resize_queue.last_thread)) (last_thread= keycache->resize_queue.last_thread))
keycache_pthread_cond_signal(&last_thread->next->suspend); keycache_pthread_cond_signal(&last_thread->next->suspend);
} }
...@@ -551,7 +551,7 @@ static inline void dec_counter_for_resize_op(KEY_CACHE *keycache) ...@@ -551,7 +551,7 @@ static inline void dec_counter_for_resize_op(KEY_CACHE *keycache)
SYNOPSIS SYNOPSIS
change_key_cache_param() change_key_cache_param()
keycache pointer to a key cache data structure keycache pointer to a key cache data structure
division_limit new division limit (if not zero) division_limit new division limit (if not zero)
age_threshold new age threshold (if not zero) age_threshold new age threshold (if not zero)
...@@ -625,7 +625,7 @@ writes: %ld r_requests: %ld reads: %ld", ...@@ -625,7 +625,7 @@ writes: %ld r_requests: %ld reads: %ld",
if (cleanup) if (cleanup)
{ {
pthread_mutex_destroy(&keycache->cache_lock); pthread_mutex_destroy(&keycache->cache_lock);
keycache->key_cache_inited= 0; keycache->key_cache_inited= keycache->can_be_used= 0;
KEYCACHE_DEBUG_CLOSE; KEYCACHE_DEBUG_CLOSE;
} }
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
...@@ -1315,7 +1315,7 @@ restart: ...@@ -1315,7 +1315,7 @@ restart:
return 0; return 0;
} }
if (!(block->status & BLOCK_IN_FLUSH)) if (!(block->status & BLOCK_IN_FLUSH))
{ {
hash_link->requests--; hash_link->requests--;
/* /*
Remove block to invalidate the page in the block buffer Remove block to invalidate the page in the block buffer
...@@ -1326,9 +1326,9 @@ restart: ...@@ -1326,9 +1326,9 @@ restart:
buffer. Still we are guaranteed not to have any readers buffer. Still we are guaranteed not to have any readers
of the key part we are writing into until the block is of the key part we are writing into until the block is
removed from the cache as we set the BLOCL_REASSIGNED removed from the cache as we set the BLOCL_REASSIGNED
flag (see the code below that handles reading requests). flag (see the code below that handles reading requests).
*/ */
free_block(keycache, block); free_block(keycache, block);
return 0; return 0;
} }
/* Wait intil the page is flushed on disk */ /* Wait intil the page is flushed on disk */
...@@ -1348,7 +1348,7 @@ restart: ...@@ -1348,7 +1348,7 @@ restart:
free_block(keycache, block); free_block(keycache, block);
return 0; return 0;
} }
if (page_status == PAGE_READ && if (page_status == PAGE_READ &&
(block->status & (BLOCK_IN_SWITCH | BLOCK_REASSIGNED))) (block->status & (BLOCK_IN_SWITCH | BLOCK_REASSIGNED)))
{ {
...@@ -1693,7 +1693,7 @@ byte *key_cache_read(KEY_CACHE *keycache, ...@@ -1693,7 +1693,7 @@ byte *key_cache_read(KEY_CACHE *keycache,
do do
{ {
keycache_pthread_mutex_lock(&keycache->cache_lock); keycache_pthread_mutex_lock(&keycache->cache_lock);
if (!keycache->can_be_used) if (!keycache->can_be_used)
{ {
keycache_pthread_mutex_unlock(&keycache->cache_lock); keycache_pthread_mutex_unlock(&keycache->cache_lock);
goto no_key_cache; goto no_key_cache;
...@@ -1829,7 +1829,7 @@ int key_cache_insert(KEY_CACHE *keycache, ...@@ -1829,7 +1829,7 @@ int key_cache_insert(KEY_CACHE *keycache,
{ {
uint offset; uint offset;
keycache_pthread_mutex_lock(&keycache->cache_lock); keycache_pthread_mutex_lock(&keycache->cache_lock);
if (!keycache->can_be_used) if (!keycache->can_be_used)
{ {
keycache_pthread_mutex_unlock(&keycache->cache_lock); keycache_pthread_mutex_unlock(&keycache->cache_lock);
DBUG_RETURN(0); DBUG_RETURN(0);
...@@ -1873,7 +1873,7 @@ int key_cache_insert(KEY_CACHE *keycache, ...@@ -1873,7 +1873,7 @@ int key_cache_insert(KEY_CACHE *keycache,
error= (block->status & BLOCK_ERROR); error= (block->status & BLOCK_ERROR);
dec_counter_for_resize_op(keycache); dec_counter_for_resize_op(keycache);
keycache_pthread_mutex_unlock(&keycache->cache_lock); keycache_pthread_mutex_unlock(&keycache->cache_lock);
...@@ -1953,7 +1953,7 @@ int key_cache_write(KEY_CACHE *keycache, ...@@ -1953,7 +1953,7 @@ int key_cache_write(KEY_CACHE *keycache,
{ {
uint offset; uint offset;
keycache_pthread_mutex_lock(&keycache->cache_lock); keycache_pthread_mutex_lock(&keycache->cache_lock);
if (!keycache->can_be_used) if (!keycache->can_be_used)
{ {
keycache_pthread_mutex_unlock(&keycache->cache_lock); keycache_pthread_mutex_unlock(&keycache->cache_lock);
goto no_key_cache; goto no_key_cache;
...@@ -2028,7 +2028,7 @@ int key_cache_write(KEY_CACHE *keycache, ...@@ -2028,7 +2028,7 @@ int key_cache_write(KEY_CACHE *keycache,
dec_counter_for_resize_op(keycache); dec_counter_for_resize_op(keycache);
keycache_pthread_mutex_unlock(&keycache->cache_lock); keycache_pthread_mutex_unlock(&keycache->cache_lock);
next_block: next_block:
buff+= read_length; buff+= read_length;
filepos+= read_length; filepos+= read_length;
...@@ -2149,7 +2149,7 @@ static int flush_cached_blocks(KEY_CACHE *keycache, ...@@ -2149,7 +2149,7 @@ static int flush_cached_blocks(KEY_CACHE *keycache,
if (!last_errno) if (!last_errno)
last_errno= errno ? errno : -1; last_errno= errno ? errno : -1;
} }
/* /*
Let to proceed for possible waiting requests to write to the block page. Let to proceed for possible waiting requests to write to the block page.
It might happen only during an operation to resize the key cache. It might happen only during an operation to resize the key cache.
*/ */
......
...@@ -114,6 +114,8 @@ ...@@ -114,6 +114,8 @@
</map> </map>
</collation> </collation>
<collation name="cp852_bin" flag="binary"/>
</charset> </charset>
</charsets> </charsets>
...@@ -1171,6 +1171,15 @@ static my_bool create_fromuni(CHARSET_INFO *cs, void *(*alloc)(uint)) ...@@ -1171,6 +1171,15 @@ static my_bool create_fromuni(CHARSET_INFO *cs, void *(*alloc)(uint))
uni_idx idx[PLANE_NUM]; uni_idx idx[PLANE_NUM];
int i,n; int i,n;
/*
Check that Unicode map is loaded.
It can be not loaded when the collation is
listed in Index.xml but not specified
in the character set specific XML file.
*/
if (!cs->tab_to_uni)
return TRUE;
/* Clear plane statistics */ /* Clear plane statistics */
bzero(idx,sizeof(idx)); bzero(idx,sizeof(idx));
......
...@@ -6645,7 +6645,7 @@ static const char slovak[]= ...@@ -6645,7 +6645,7 @@ static const char slovak[]=
"& H < ch <<< Ch <<< CH" "& H < ch <<< Ch <<< CH"
"& O < \\u00F4 <<< \\u00D4" "& O < \\u00F4 <<< \\u00D4"
"& S < \\u0161 <<< \\u0160" "& S < \\u0161 <<< \\u0160"
"& Z < \\u017E <<< \\017D"; "& Z < \\u017E <<< \\u017D";
static const char spanish2[]= /* Also good for Asturian and Galician */ static const char spanish2[]= /* Also good for Asturian and Galician */
"&C < ch <<< Ch <<< CH" "&C < ch <<< Ch <<< CH"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment