Commit 0469dd49 authored by bell@sanja.is.com.ua's avatar bell@sanja.is.com.ua

Merge sanja.is.com.ua:/home/bell/mysql/mysql-4.1

into sanja.is.com.ua:/home/bell/mysql/work-select-4.1
parents a662f7e1 9a837a87
......@@ -309,9 +309,6 @@
/* Use MySQL RAID */
#undef USE_RAID
/* Use strcoll() functions when comparing and sorting. */
#undef USE_STRCOLL
/* Program version */
#undef VERSION
......
......@@ -576,7 +576,6 @@ int sortcmp(const String *x,const String *y)
const char *t= y->ptr();
uint32 x_len=x->length(),y_len=y->length(),len=min(x_len,y_len);
#ifdef USE_STRCOLL
if (use_strnxfrm(x->str_charset))
{
#ifndef CMP_ENDSPACE
......@@ -590,7 +589,6 @@ int sortcmp(const String *x,const String *y)
}
else
{
#endif /* USE_STRCOLL */
x_len-=len; // For easy end space test
y_len-=len;
if (x->str_charset->sort_order)
......@@ -633,9 +631,7 @@ int sortcmp(const String *x,const String *y)
#else
return (int) (x_len-y_len);
#endif /* CMP_ENDSPACE */
#ifdef USE_STRCOLL
}
#endif
}
......
......@@ -2256,9 +2256,6 @@ then
AC_DEFINE(USE_MB_IDENT)
fi
# Temporary hack for USE_STRCOLL
AC_DEFINE(USE_STRCOLL)
AC_SUBST(default_charset)
AC_DEFINE_UNQUOTED(DEFAULT_CHARSET_NAME,"$default_charset")
......
......@@ -53,9 +53,7 @@ uint _nisam_make_key(register N_INFO *info, uint keynr, uchar *key, const char *
}
*key++= (uchar) (length=(uint) (end-pos));
memcpy((byte*) key,(byte*) pos,(size_t) length);
#ifdef USE_STRCOLL
if (!use_strnxfrm(default_charset_info))
#endif
{
if (type == HA_KEYTYPE_TEXT)
my_tosort(default_charset_info,(byte*) key,length);
......@@ -66,9 +64,7 @@ uint _nisam_make_key(register N_INFO *info, uint keynr, uchar *key, const char *
{
memcpy((byte*) key,(byte*) record+keyseg->base.start,
(size_t) keyseg->base.length);
#ifdef USE_STRCOLL
if (!use_strnxfrm(default_charset_info))
#endif
{
if (type == HA_KEYTYPE_TEXT)
my_tosort(default_charset_info,(byte*) key,(uint) keyseg->base.length);
......@@ -149,9 +145,7 @@ uint _nisam_pack_key(register N_INFO *info, uint keynr, uchar *key, uchar *old,
}
else
memcpy((byte*) key,old,(size_t) length);
#ifdef USE_STRCOLL
if (!use_strnxfrm(default_charset_info))
#endif
{
if (type == HA_KEYTYPE_TEXT)
my_tosort(default_charset_info,(byte*) key,length);
......
......@@ -331,7 +331,6 @@ int _nisam_key_cmp(register N_KEYSEG *keyseg, register uchar *a, register uchar
(int) *as : b_length;
end= a+ min(key_length,(uint) length);
#ifdef USE_STRCOLL
if (use_strnxfrm(default_charset_info)) {
if (((enum ha_base_keytype) keyseg->base.type) == HA_KEYTYPE_BINARY)
{
......@@ -349,7 +348,6 @@ int _nisam_key_cmp(register N_KEYSEG *keyseg, register uchar *a, register uchar
}
}
else
#endif
{
while (a < end)
if ((flag= (int) *a++ - (int) *b++))
......@@ -382,7 +380,6 @@ int _nisam_key_cmp(register N_KEYSEG *keyseg, register uchar *a, register uchar
}
else
{
#ifdef USE_STRCOLL
if (use_strnxfrm(default_charset_info)) {
if (((enum ha_base_keytype) keyseg->base.type) == HA_KEYTYPE_BINARY)
{
......@@ -400,7 +397,6 @@ int _nisam_key_cmp(register N_KEYSEG *keyseg, register uchar *a, register uchar
}
}
else
#endif
{
while (a < end)
if ((flag= (int) *a++ - (int) *b++))
......
......@@ -123,11 +123,9 @@ ha_rows filesort(THD *thd, TABLE *table, SORT_FIELD *sortorder, uint s_length,
if (param.sort_length == param.ref_length && records > param.max_rows)
records=param.max_rows; /* purecov: inspected */
#ifdef USE_STRCOLL
if (use_strnxfrm(charset) &&
!(param.tmp_buffer=my_malloc(param.sort_length,MYF(MY_WME))))
goto err;
#endif
memavl= thd->variables.sortbuff_size;
while (memavl >= MIN_SORT_MEMORY)
......@@ -200,10 +198,8 @@ ha_rows filesort(THD *thd, TABLE *table, SORT_FIELD *sortorder, uint s_length,
error =0;
err:
#ifdef USE_STRCOLL
if (param.tmp_buffer)
x_free(param.tmp_buffer);
#endif
x_free((gptr) sort_keys);
x_free((gptr) buffpek);
close_cached_file(&tempfile);
......@@ -494,7 +490,6 @@ static void make_sortkey(register SORTPARAM *param,
diff=0; /* purecov: inspected */
length=sort_field->length;
}
#ifdef USE_STRCOLL
if (use_strnxfrm(cs))
{
if (item->binary())
......@@ -520,15 +515,12 @@ static void make_sortkey(register SORTPARAM *param,
}
else
{
#endif
if (res->ptr() != (char*) to)
memcpy(to,res->ptr(),length);
bzero((char *)to+length,diff);
if (!item->binary())
my_tosort(cs, (char*) to,length);
#ifdef USE_STRCOLL
}
#endif
break;
}
case INT_RESULT:
......@@ -930,34 +922,27 @@ sortlength(SORT_FIELD *sortorder, uint s_length)
else
{
sortorder->length=sortorder->field->pack_length();
#ifdef USE_STRCOLL
if (!sortorder->field->binary())
{
CHARSET_INFO *cs=sortorder->field->charset();
if (use_strnxfrm(cs))
sortorder->length= sortorder->length*cs->strxfrm_multiply;
}
#endif
}
if (sortorder->field->maybe_null())
length++; // Place for NULL marker
}
else
{
#ifdef USE_STRCOLL
#endif
switch ((sortorder->result_type=sortorder->item->result_type())) {
case STRING_RESULT:
sortorder->length=sortorder->item->max_length;
#ifdef USE_STRCOLL
if (!sortorder->item->binary())
{
CHARSET_INFO *cs=sortorder->item->charset();
if (use_strnxfrm(cs))
sortorder->length= sortorder->length*cs->strxfrm_multiply;
}
#endif
break;
case INT_RESULT:
#if SIZEOF_LONG_LONG > 4
......
......@@ -4,7 +4,7 @@
<charsets>
<charset name="">
<charset name="cp1256">
<ctype>
<map>
......
......@@ -2476,7 +2476,9 @@ TABLE_COUNTER_TYPE Query_cache::is_cacheable(THD *thd, uint32 query_len,
(tables_used->db_length == 5 &&
#ifdef FN_NO_CASE_SENCE
// TODO: latin1 charset should be replaced with system charset
my_strncasecmp(my_charset_latin1,tables_used->db,"mysql",5) == 0
my_strncasecmp(&my_charset_latin1,
tables_used->db,
"mysql",5) == 0
#else
tables_used->db[0]=='m' &&
tables_used->db[1]=='y' &&
......
......@@ -38,9 +38,7 @@ typedef struct st_sort_param {
SORT_FIELD *end;
uchar *unique_buff;
bool not_killable;
#ifdef USE_STRCOLL
char* tmp_buffer;
#endif
} SORTPARAM;
......
......@@ -577,7 +577,6 @@ int sortcmp(const String *x,const String *y)
const char *t= y->ptr();
uint32 x_len=x->length(),y_len=y->length(),len=min(x_len,y_len);
#ifdef USE_STRCOLL
if (use_strnxfrm(x->str_charset))
{
#ifndef CMP_ENDSPACE
......@@ -591,7 +590,6 @@ int sortcmp(const String *x,const String *y)
}
else
{
#endif /* USE_STRCOLL */
x_len-=len; // For easy end space test
y_len-=len;
if (x->str_charset->sort_order)
......@@ -634,9 +632,7 @@ int sortcmp(const String *x,const String *y)
#else
return (int) (x_len-y_len);
#endif /* CMP_ENDSPACE */
#ifdef USE_STRCOLL
}
#endif
}
......
......@@ -25,12 +25,9 @@
#include <m_ctype.h>
#include <my_xml.h>
#define CHARSETS_SUBDIR "sql/share/charsets"
#define CTYPE_TABLE_SIZE 257
#define TO_LOWER_TABLE_SIZE 256
#define TO_UPPER_TABLE_SIZE 256
#define SORT_ORDER_TABLE_SIZE 256
#define ROW_LEN 16
#define ROW16_LEN 8
#define MAX_BUF 16*1024
static CHARSET_INFO all_charsets[256];
......@@ -45,12 +42,30 @@ print_array(FILE *f, const char *set, const char *name, uchar *a, int n)
for (i=0 ;i<n ; i++)
{
fprintf(f,"0x%02X%s%s",a[i], (i+1<n) ? "," :"", i % 16 ? "" : "\n");
fprintf(f,"0x%02X",a[i]);
fprintf(f, (i+1<n) ? "," :"" );
fprintf(f, ((i+1) % ROW_LEN == n % ROW_LEN) ? "\n" : "" );
}
fprintf(f,"};\n\n");
}
void
print_array16(FILE *f, const char *set, const char *name, uint16 *a, int n)
{
int i;
fprintf(f,"uchar %s_%s[] = {\n", name, set);
for (i=0 ;i<n ; i++)
{
fprintf(f,"0x%04X",a[i]);
fprintf(f, (i+1<n) ? "," :"" );
fprintf(f, ((i+1) % ROW16_LEN == n % ROW16_LEN) ? "\n" : "" );
}
fprintf(f,"};\n\n");
}
static int get_charset_number(const char *charset_name)
{
......@@ -261,10 +276,13 @@ main(int argc, char **argv __attribute__((unused)))
{
if (simple_cs_is_full(cs))
{
print_array(f, cs->name, "ctype", cs->ctype, CTYPE_TABLE_SIZE);
print_array(f, cs->name, "to_lower", cs->to_lower, TO_LOWER_TABLE_SIZE);
print_array(f, cs->name, "to_upper", cs->to_upper, TO_UPPER_TABLE_SIZE);
print_array(f, cs->name, "sort_order", cs->sort_order, SORT_ORDER_TABLE_SIZE);
fprintf(f,"#ifdef HAVE_CHARSET_%s\n",cs->csname);
print_array(f, cs->name, "ctype", cs->ctype, MY_CS_CTYPE_TABLE_SIZE);
print_array(f, cs->name, "to_lower", cs->to_lower, MY_CS_TO_LOWER_TABLE_SIZE);
print_array(f, cs->name, "to_upper", cs->to_upper, MY_CS_TO_UPPER_TABLE_SIZE);
print_array(f, cs->name, "sort_order", cs->sort_order, MY_CS_SORT_ORDER_TABLE_SIZE);
print_array16(f, cs->name, "to_uni", cs->tab_to_uni, MY_CS_TO_UNI_TABLE_SIZE);
fprintf(f,"#endif\n");
fprintf(f,"\n");
}
}
......
......@@ -19,7 +19,7 @@
#include "m_ctype.h"
static uint16 latin1_uni[256]={
static my_wc_t latin1_uni[256]={
0,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
......@@ -72,12 +72,6 @@ static uchar uni_latin1[]={
0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF};
static MY_UNI_IDX idx_uni_latin1[]={
{0x0000,0x00FF,uni_latin1},
{0,0,NULL}
};
static uchar ctype_latin1[] = {
0,
32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32,
......@@ -156,6 +150,31 @@ static uchar sort_order_latin1[] = {
};
static
int my_mb_wc_latin1(CHARSET_INFO *cs __attribute__((unused)),
my_wc_t *wc,
const unsigned char *str,
const unsigned char *end)
{
if (str >= end)
return MY_CS_TOOFEW(0);
return ((wc[0]= latin1_uni[*str]) || (!str[0])) ? 1 : MY_CS_ILSEQ;
}
static
int my_wc_mb_latin1(CHARSET_INFO *cs __attribute__((unused)),
my_wc_t wc,
unsigned char *str,
unsigned char *end)
{
if (str >= end)
return MY_CS_TOOSMALL;
return ((wc < 256) && ((str[0]=uni_latin1[wc]) || (!wc))) ? 1 : MY_CS_ILUNI;
}
CHARSET_INFO my_charset_latin1 =
{
8, /* number */
......@@ -167,8 +186,8 @@ CHARSET_INFO my_charset_latin1 =
to_lower_latin1,
to_upper_latin1,
sort_order_latin1,
latin1_uni, /* tab_to_uni */
idx_uni_latin1, /* tab_from_uni */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
2, /* strxfrm_multiply */
my_strnncoll_simple,
my_strnxfrm_simple,
......@@ -178,8 +197,8 @@ CHARSET_INFO my_charset_latin1 =
NULL, /* ismbchar */
NULL, /* ismbhead */
NULL, /* mbcharlen */
my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */
my_mb_wc_latin1, /* mb_wc */
my_wc_mb_latin1, /* wc_mb */
my_caseup_str_8bit,
my_casedn_str_8bit,
my_caseup_8bit,
......
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