Loading acinclude.m4 +31 −0 Original line number Diff line number Diff line Loading @@ -1458,6 +1458,37 @@ dnl --------------------------------------------------------------------------- dnl END OF MYSQL_CHECK_ARCHIVE SECTION dnl --------------------------------------------------------------------------- dnl --------------------------------------------------------------------------- dnl Macro: MYSQL_CHECK_CSVDB dnl Sets HAVE_CSV_DB if --with-csv-storage-engine is used dnl --------------------------------------------------------------------------- AC_DEFUN([MYSQL_CHECK_CSVDB], [ AC_ARG_WITH([csv-storage-engine], [ --with-csv-storage-engine Enable the CSV Storage Engine], [csvdb="$withval"], [csvdb=no]) AC_MSG_CHECKING([for csv storage engine]) case "$csvdb" in yes ) AC_DEFINE([HAVE_CSV_DB], [1], [Builds the CSV Storage Engine]) AC_MSG_RESULT([yes]) [csvdb=yes] ;; * ) AC_MSG_RESULT([no]) [csvdb=no] ;; esac ]) dnl --------------------------------------------------------------------------- dnl END OF MYSQL_CHECK_CSV SECTION dnl --------------------------------------------------------------------------- dnl --------------------------------------------------------------------------- dnl Macro: MYSQL_CHECK_NDBCLUSTER dnl Sets HAVE_NDBCLUSTER_DB if --with-ndbcluster is used Loading configure.in +1 −0 Original line number Diff line number Diff line Loading @@ -2740,6 +2740,7 @@ MYSQL_CHECK_BDB MYSQL_CHECK_INNODB MYSQL_CHECK_EXAMPLEDB MYSQL_CHECK_ARCHIVEDB MYSQL_CHECK_CSVDB MYSQL_CHECK_NDBCLUSTER # If we have threads generate some library functions and test programs Loading include/m_ctype.h +3 −1 Original line number Diff line number Diff line Loading @@ -393,6 +393,8 @@ extern my_bool my_parse_charset_xml(const char *bug, uint len, ((s)->coll->like_range((s), (a), (b), (c), (d), (e), (f), (g), (h), (i), (j))) #define my_wildcmp(cs,s,se,w,we,e,o,m) ((cs)->coll->wildcmp((cs),(s),(se),(w),(we),(e),(o),(m))) #define my_strcasecmp(s, a, b) ((s)->coll->strcasecmp((s), (a), (b))) #define my_charpos(cs, b, e, num) (cs)->cset->charpos((cs), (const char*) (b), (const char *)(e), (num)) #define use_mb(s) ((s)->cset->ismbchar != NULL) #define my_ismbchar(s, a, b) ((s)->cset->ismbchar((s), (a), (b))) Loading myisam/mi_key.c +52 −61 Original line number Diff line number Diff line Loading @@ -25,6 +25,10 @@ #define CHECK_KEYS #define FIX_LENGTH if (length > char_length) \ char_length= my_charpos(cs, pos, pos+length, char_length); \ set_if_smaller(char_length,length); \ static int _mi_put_key_in_record(MI_INFO *info,uint keynr,byte *record); /* Loading @@ -32,15 +36,13 @@ static int _mi_put_key_in_record(MI_INFO *info,uint keynr,byte *record); ** Ret: Length of key */ #define my_charpos(cs, b, e, num)\ (cs)->cset->charpos((cs), (const char*) (b), (const char *)(e), (num)) uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key, const byte *record, my_off_t filepos) { byte *pos,*end; uchar *start; reg1 HA_KEYSEG *keyseg; my_bool is_unique=info->s->keyinfo[keynr].flag & HA_NOSAME; DBUG_ENTER("_mi_make_key"); if(info->s->keyinfo[keynr].flag & HA_SPATIAL) Loading @@ -61,7 +63,7 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key, enum ha_base_keytype type=(enum ha_base_keytype) keyseg->type; uint length=keyseg->length; uint char_length; CHARSET_INFO *cs; CHARSET_INFO *cs=keyseg->charset; if (keyseg->null_bit) { Loading @@ -73,14 +75,7 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key, *key++=1; /* Not NULL */ } char_length= (cs= keyseg->charset) && (cs->mbmaxlen > 1) ? length / cs->mbmaxlen : 0; if (info->s->keyinfo[keynr].flag & HA_FULLTEXT) { /* Ask Serg to make a better fix */ char_length= 0; } char_length= (is_unique && cs && cs->mbmaxlen > 1) ? length/cs->mbmaxlen : length; pos= (byte*) record+keyseg->start; if (keyseg->flag & HA_SPACE_PACK) Loading @@ -97,14 +92,10 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key, pos++; } length=(uint) (end-pos); if (char_length && length > char_length) { char_length= my_charpos(cs, pos, pos+length, char_length); set_if_smaller(length, char_length); } store_key_length_inc(key,length); memcpy((byte*) key,(byte*) pos,(size_t) length); key+=length; FIX_LENGTH; store_key_length_inc(key,char_length); memcpy((byte*) key,(byte*) pos,(size_t) char_length); key+=char_length; continue; } if (keyseg->flag & HA_VAR_LENGTH) Loading @@ -112,9 +103,10 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key, uint tmp_length=uint2korr(pos); pos+=2; /* Skip VARCHAR length */ set_if_smaller(length,tmp_length); store_key_length_inc(key,length); memcpy((byte*) key, pos, length); key+= length; FIX_LENGTH; store_key_length_inc(key,char_length); memcpy((byte*) key,(byte*) pos,(size_t) char_length); key+= char_length; continue; } else if (keyseg->flag & HA_BLOB_PART) Loading @@ -122,16 +114,10 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key, uint tmp_length=_mi_calc_blob_length(keyseg->bit_start,pos); memcpy_fixed((byte*) &pos,pos+keyseg->bit_start,sizeof(char*)); set_if_smaller(length,tmp_length); #if NOT_YET_BLOB_PART if (char_length && length > char_length) { char_length= my_charpos(cs, pos, pos+length, char_length); set_if_smaller(length, char_length); } #endif store_key_length_inc(key,length); memcpy((byte*) key, pos, length); key+= length; FIX_LENGTH; store_key_length_inc(key,char_length); memcpy((byte*) key,(byte*) pos,(size_t) char_length); key+= char_length; continue; } else if (keyseg->flag & HA_SWAP_KEY) Loading Loading @@ -168,14 +154,10 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key, } continue; } #ifdef NOT_YET_FIXED_LENGTH_KEY if (char_length && length > char_length) { char_length= my_charpos(cs, pos, pos+length, char_length); set_if_smaller(length, char_length); } #endif memcpy((byte*) key, pos, length); FIX_LENGTH; memcpy((byte*) key, pos, char_length); if (length > char_length) bfill(key+char_length, length-char_length, ' '); key+= length; } _mi_dpointer(info,key,filepos); Loading Loading @@ -209,19 +191,21 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key, uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, uchar *old, uint k_length, HA_KEYSEG **last_used_keyseg) { uint length; uchar *pos,*end,*start_key=key; reg1 HA_KEYSEG *keyseg; enum ha_base_keytype type; uchar *start_key=key; HA_KEYSEG *keyseg; my_bool is_unique=info->s->keyinfo[keynr].flag & HA_NOSAME; DBUG_ENTER("_mi_pack_key"); start_key=key; for (keyseg=info->s->keyinfo[keynr].seg ; keyseg->type && (int) k_length > 0; old+=keyseg->length, keyseg++) { length=min((uint) keyseg->length,(uint) k_length); type=(enum ha_base_keytype) keyseg->type; enum ha_base_keytype type=(enum ha_base_keytype) keyseg->type; uint length=min((uint) keyseg->length,(uint) k_length); uint char_length; uchar *pos; CHARSET_INFO *cs=keyseg->charset; if (keyseg->null_bit) { k_length--; Loading @@ -231,10 +215,11 @@ uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, uchar *old, continue; /* Found NULL */ } } char_length= (is_unique && cs && cs->mbmaxlen > 1) ? length/cs->mbmaxlen : length; pos=old; if (keyseg->flag & HA_SPACE_PACK) { end=pos+length; uchar *end=pos+length; if (type != HA_KEYTYPE_NUM) { while (end > pos && end[-1] == ' ') Loading @@ -247,9 +232,10 @@ uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, uchar *old, } k_length-=length; length=(uint) (end-pos); store_key_length_inc(key,length); memcpy((byte*) key,pos,(size_t) length); key+= length; FIX_LENGTH; store_key_length_inc(key,char_length); memcpy((byte*) key,pos,(size_t) char_length); key+= char_length; continue; } else if (keyseg->flag & (HA_VAR_LENGTH | HA_BLOB_PART)) Loading @@ -257,11 +243,13 @@ uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, uchar *old, /* Length of key-part used with mi_rkey() always 2 */ uint tmp_length=uint2korr(pos); k_length-= 2+length; pos+=2; set_if_smaller(length,tmp_length); /* Safety */ store_key_length_inc(key,length); FIX_LENGTH; store_key_length_inc(key,char_length); old+=2; /* Skip length */ memcpy((byte*) key, pos+2,(size_t) length); key+= length; memcpy((byte*) key, pos,(size_t) char_length); key+= char_length; continue; } else if (keyseg->flag & HA_SWAP_KEY) Loading @@ -274,7 +262,10 @@ uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, uchar *old, } continue; } memcpy((byte*) key,pos,(size_t) length); FIX_LENGTH; memcpy((byte*) key, pos, char_length); if (length > char_length) bfill(key+char_length, length-char_length, ' '); key+= length; k_length-=length; } Loading mysql-test/include/have_csv.inc 0 → 100644 +4 −0 Original line number Diff line number Diff line -- require r/have_csv.require disable_query_log; show variables like "have_csv"; enable_query_log; Loading
acinclude.m4 +31 −0 Original line number Diff line number Diff line Loading @@ -1458,6 +1458,37 @@ dnl --------------------------------------------------------------------------- dnl END OF MYSQL_CHECK_ARCHIVE SECTION dnl --------------------------------------------------------------------------- dnl --------------------------------------------------------------------------- dnl Macro: MYSQL_CHECK_CSVDB dnl Sets HAVE_CSV_DB if --with-csv-storage-engine is used dnl --------------------------------------------------------------------------- AC_DEFUN([MYSQL_CHECK_CSVDB], [ AC_ARG_WITH([csv-storage-engine], [ --with-csv-storage-engine Enable the CSV Storage Engine], [csvdb="$withval"], [csvdb=no]) AC_MSG_CHECKING([for csv storage engine]) case "$csvdb" in yes ) AC_DEFINE([HAVE_CSV_DB], [1], [Builds the CSV Storage Engine]) AC_MSG_RESULT([yes]) [csvdb=yes] ;; * ) AC_MSG_RESULT([no]) [csvdb=no] ;; esac ]) dnl --------------------------------------------------------------------------- dnl END OF MYSQL_CHECK_CSV SECTION dnl --------------------------------------------------------------------------- dnl --------------------------------------------------------------------------- dnl Macro: MYSQL_CHECK_NDBCLUSTER dnl Sets HAVE_NDBCLUSTER_DB if --with-ndbcluster is used Loading
configure.in +1 −0 Original line number Diff line number Diff line Loading @@ -2740,6 +2740,7 @@ MYSQL_CHECK_BDB MYSQL_CHECK_INNODB MYSQL_CHECK_EXAMPLEDB MYSQL_CHECK_ARCHIVEDB MYSQL_CHECK_CSVDB MYSQL_CHECK_NDBCLUSTER # If we have threads generate some library functions and test programs Loading
include/m_ctype.h +3 −1 Original line number Diff line number Diff line Loading @@ -393,6 +393,8 @@ extern my_bool my_parse_charset_xml(const char *bug, uint len, ((s)->coll->like_range((s), (a), (b), (c), (d), (e), (f), (g), (h), (i), (j))) #define my_wildcmp(cs,s,se,w,we,e,o,m) ((cs)->coll->wildcmp((cs),(s),(se),(w),(we),(e),(o),(m))) #define my_strcasecmp(s, a, b) ((s)->coll->strcasecmp((s), (a), (b))) #define my_charpos(cs, b, e, num) (cs)->cset->charpos((cs), (const char*) (b), (const char *)(e), (num)) #define use_mb(s) ((s)->cset->ismbchar != NULL) #define my_ismbchar(s, a, b) ((s)->cset->ismbchar((s), (a), (b))) Loading
myisam/mi_key.c +52 −61 Original line number Diff line number Diff line Loading @@ -25,6 +25,10 @@ #define CHECK_KEYS #define FIX_LENGTH if (length > char_length) \ char_length= my_charpos(cs, pos, pos+length, char_length); \ set_if_smaller(char_length,length); \ static int _mi_put_key_in_record(MI_INFO *info,uint keynr,byte *record); /* Loading @@ -32,15 +36,13 @@ static int _mi_put_key_in_record(MI_INFO *info,uint keynr,byte *record); ** Ret: Length of key */ #define my_charpos(cs, b, e, num)\ (cs)->cset->charpos((cs), (const char*) (b), (const char *)(e), (num)) uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key, const byte *record, my_off_t filepos) { byte *pos,*end; uchar *start; reg1 HA_KEYSEG *keyseg; my_bool is_unique=info->s->keyinfo[keynr].flag & HA_NOSAME; DBUG_ENTER("_mi_make_key"); if(info->s->keyinfo[keynr].flag & HA_SPATIAL) Loading @@ -61,7 +63,7 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key, enum ha_base_keytype type=(enum ha_base_keytype) keyseg->type; uint length=keyseg->length; uint char_length; CHARSET_INFO *cs; CHARSET_INFO *cs=keyseg->charset; if (keyseg->null_bit) { Loading @@ -73,14 +75,7 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key, *key++=1; /* Not NULL */ } char_length= (cs= keyseg->charset) && (cs->mbmaxlen > 1) ? length / cs->mbmaxlen : 0; if (info->s->keyinfo[keynr].flag & HA_FULLTEXT) { /* Ask Serg to make a better fix */ char_length= 0; } char_length= (is_unique && cs && cs->mbmaxlen > 1) ? length/cs->mbmaxlen : length; pos= (byte*) record+keyseg->start; if (keyseg->flag & HA_SPACE_PACK) Loading @@ -97,14 +92,10 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key, pos++; } length=(uint) (end-pos); if (char_length && length > char_length) { char_length= my_charpos(cs, pos, pos+length, char_length); set_if_smaller(length, char_length); } store_key_length_inc(key,length); memcpy((byte*) key,(byte*) pos,(size_t) length); key+=length; FIX_LENGTH; store_key_length_inc(key,char_length); memcpy((byte*) key,(byte*) pos,(size_t) char_length); key+=char_length; continue; } if (keyseg->flag & HA_VAR_LENGTH) Loading @@ -112,9 +103,10 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key, uint tmp_length=uint2korr(pos); pos+=2; /* Skip VARCHAR length */ set_if_smaller(length,tmp_length); store_key_length_inc(key,length); memcpy((byte*) key, pos, length); key+= length; FIX_LENGTH; store_key_length_inc(key,char_length); memcpy((byte*) key,(byte*) pos,(size_t) char_length); key+= char_length; continue; } else if (keyseg->flag & HA_BLOB_PART) Loading @@ -122,16 +114,10 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key, uint tmp_length=_mi_calc_blob_length(keyseg->bit_start,pos); memcpy_fixed((byte*) &pos,pos+keyseg->bit_start,sizeof(char*)); set_if_smaller(length,tmp_length); #if NOT_YET_BLOB_PART if (char_length && length > char_length) { char_length= my_charpos(cs, pos, pos+length, char_length); set_if_smaller(length, char_length); } #endif store_key_length_inc(key,length); memcpy((byte*) key, pos, length); key+= length; FIX_LENGTH; store_key_length_inc(key,char_length); memcpy((byte*) key,(byte*) pos,(size_t) char_length); key+= char_length; continue; } else if (keyseg->flag & HA_SWAP_KEY) Loading Loading @@ -168,14 +154,10 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key, } continue; } #ifdef NOT_YET_FIXED_LENGTH_KEY if (char_length && length > char_length) { char_length= my_charpos(cs, pos, pos+length, char_length); set_if_smaller(length, char_length); } #endif memcpy((byte*) key, pos, length); FIX_LENGTH; memcpy((byte*) key, pos, char_length); if (length > char_length) bfill(key+char_length, length-char_length, ' '); key+= length; } _mi_dpointer(info,key,filepos); Loading Loading @@ -209,19 +191,21 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key, uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, uchar *old, uint k_length, HA_KEYSEG **last_used_keyseg) { uint length; uchar *pos,*end,*start_key=key; reg1 HA_KEYSEG *keyseg; enum ha_base_keytype type; uchar *start_key=key; HA_KEYSEG *keyseg; my_bool is_unique=info->s->keyinfo[keynr].flag & HA_NOSAME; DBUG_ENTER("_mi_pack_key"); start_key=key; for (keyseg=info->s->keyinfo[keynr].seg ; keyseg->type && (int) k_length > 0; old+=keyseg->length, keyseg++) { length=min((uint) keyseg->length,(uint) k_length); type=(enum ha_base_keytype) keyseg->type; enum ha_base_keytype type=(enum ha_base_keytype) keyseg->type; uint length=min((uint) keyseg->length,(uint) k_length); uint char_length; uchar *pos; CHARSET_INFO *cs=keyseg->charset; if (keyseg->null_bit) { k_length--; Loading @@ -231,10 +215,11 @@ uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, uchar *old, continue; /* Found NULL */ } } char_length= (is_unique && cs && cs->mbmaxlen > 1) ? length/cs->mbmaxlen : length; pos=old; if (keyseg->flag & HA_SPACE_PACK) { end=pos+length; uchar *end=pos+length; if (type != HA_KEYTYPE_NUM) { while (end > pos && end[-1] == ' ') Loading @@ -247,9 +232,10 @@ uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, uchar *old, } k_length-=length; length=(uint) (end-pos); store_key_length_inc(key,length); memcpy((byte*) key,pos,(size_t) length); key+= length; FIX_LENGTH; store_key_length_inc(key,char_length); memcpy((byte*) key,pos,(size_t) char_length); key+= char_length; continue; } else if (keyseg->flag & (HA_VAR_LENGTH | HA_BLOB_PART)) Loading @@ -257,11 +243,13 @@ uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, uchar *old, /* Length of key-part used with mi_rkey() always 2 */ uint tmp_length=uint2korr(pos); k_length-= 2+length; pos+=2; set_if_smaller(length,tmp_length); /* Safety */ store_key_length_inc(key,length); FIX_LENGTH; store_key_length_inc(key,char_length); old+=2; /* Skip length */ memcpy((byte*) key, pos+2,(size_t) length); key+= length; memcpy((byte*) key, pos,(size_t) char_length); key+= char_length; continue; } else if (keyseg->flag & HA_SWAP_KEY) Loading @@ -274,7 +262,10 @@ uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, uchar *old, } continue; } memcpy((byte*) key,pos,(size_t) length); FIX_LENGTH; memcpy((byte*) key, pos, char_length); if (length > char_length) bfill(key+char_length, length-char_length, ' '); key+= length; k_length-=length; } Loading
mysql-test/include/have_csv.inc 0 → 100644 +4 −0 Original line number Diff line number Diff line -- require r/have_csv.require disable_query_log; show variables like "have_csv"; enable_query_log;