mirror of
https://github.com/MariaDB/server.git
synced 2026-05-06 15:15:34 +02:00
Merge with 4.0.3
Some simple optimzations, more comments and indentation changes. Add ` around database in 'use database' in binary log. Moved max_error_count and max_warning_count to variables struct. Removed SHOW_WARNS_COUNT and SHOW_ERRORS_COUNT calls. Changed string functions to use character set of first string argument as default return characterset (Each string function can change the above assumption if needed) BitKeeper/etc/ignore: auto-union BitKeeper/etc/logging_ok: auto-union BUILD/SETUP.sh: Auto merged BitKeeper/deleted/.del-getopt.h~a9ae679fa84f395: Auto merged BitKeeper/deleted/.del-getvar.c~2a29ff383970fd31: Auto merged Docs/manual.texi: Auto merged SSL/cacert.pem: Auto merged SSL/client-cert.pem: Auto merged SSL/client-key.pem: Auto merged SSL/server-cert.pem: Auto merged SSL/server-key.pem: Auto merged client/mysqldump.c: Auto merged include/my_base.h: Auto merged include/my_sys.h: Auto merged include/mysql_com.h: Auto merged isam/isamlog.c: Auto merged isam/pack_isam.c: Auto merged libmysqld/lib_sql.cc: Auto merged myisam/ft_dump.c: Auto merged myisam/ft_parser.c: Auto merged myisam/ft_static.c: Auto merged myisam/ft_test1.c: Auto merged myisam/ft_update.c: Auto merged myisam/mi_create.c: Auto merged myisam/mi_key.c: Auto merged myisam/mi_open.c: Auto merged myisam/mi_static.c: Auto merged myisam/mi_test1.c: Auto merged myisam/mi_test2.c: Auto merged myisam/mi_test3.c: Auto merged myisam/mi_update.c: Auto merged myisam/mi_write.c: Auto merged myisam/myisamchk.c: Auto merged myisam/myisamdef.h: Auto merged myisam/myisamlog.c: Auto merged myisam/myisampack.c: Auto merged mysql-test/mysql-test-run.sh: Auto merged mysql-test/r/create.result: Auto merged mysql-test/r/fulltext.result: Auto merged mysql-test/r/func_math.result: Auto merged mysql-test/r/innodb.result: Auto merged mysql-test/r/merge.result: Auto merged mysql-test/r/myisam.result: Auto merged mysql-test/r/select.result: Auto merged mysql-test/r/select_found.result: Auto merged mysql-test/r/union.result: Auto merged mysql-test/t/create.test: Auto merged mysql-test/t/myisam.test: Auto merged mysql-test/t/select_found.test: Auto merged mysql-test/t/union.test: Auto merged mysys/default.c: Auto merged mysys/mf_iocache2.c: Auto merged mysys/my_error.c: Auto merged mysys/my_init.c: Auto merged scripts/mysql_config.sh: Auto merged sql/convert.cc: Auto merged sql/filesort.cc: Auto merged sql/gen_lex_hash.cc: Auto merged sql/ha_berkeley.cc: Auto merged sql/ha_innodb.cc: Auto merged sql/ha_myisam.cc: Auto merged sql/handler.cc: Auto merged sql/handler.h: Auto merged sql/hostname.cc: Auto merged sql/item.cc: Auto merged sql/item_sum.cc: Auto merged sql/item_sum.h: Auto merged sql/item_timefunc.cc: Auto merged sql/item_timefunc.h: Auto merged sql/key.cc: Auto merged sql/log.cc: Auto merged sql/net_pkg.cc: Auto merged sql/opt_range.cc: Auto merged sql/opt_range.h: Auto merged sql/opt_sum.cc: Auto merged sql/repl_failsafe.cc: Auto merged sql/slave.cc: Auto merged sql/sql_cache.cc: Auto merged sql/sql_db.cc: Auto merged sql/sql_handler.cc: Auto merged sql/sql_insert.cc: Auto merged sql/sql_lex.cc: Auto merged sql/sql_load.cc: Auto merged sql/sql_string.cc: Auto merged sql/sql_table.cc: Auto merged sql/sql_test.cc: Auto merged sql/time.cc: Auto merged sql/unireg.cc: Auto merged strings/Makefile.am: Auto merged strings/ctype-latin1_de.c: Auto merged strings/ctype-tis620.c: Auto merged tools/mysqlmanager.c: Auto merged BitKeeper/deleted/.del-sslopt-case.h~224c80e75dad4997: merge with 4.0.3 BitKeeper/triggers/post-commit: merge with 4.0.3 client/mysql.cc: merge with 4.0.3 + simple optimsation client/mysqltest.c: merge with 4.0.3 (Indentation change) configure.in: merge with 4.0.3 extra/resolve_stack_dump.c: merge with 4.0.3 (Indentation change) include/Makefile.am: merge with 4.0.3 include/myisam.h: merge with 4.0.3 (Indentation change) include/mysql.h: merge with 4.0.3 (removed not used structure) include/mysqld_error.h: merge with 4.0.3 libmysql/Makefile.shared: merge with 4.0.3 libmysql/libmysql.c: merge with 4.0.3 (Indentation change) libmysqld/Makefile.am: merge with 4.0.3 myisam/ft_boolean_search.c: merge with 4.0.3 (Indentation change) myisam/ft_nlq_search.c: merge with 4.0.3 (Indentation change) myisam/mi_check.c: merge with 4.0.3 myisam/mi_search.c: merge with 4.0.3 myisam/mi_unique.c: merge with 4.0.3 mysys/Makefile.am: merge with 4.0.3 mysys/mf_casecnv.c: merge with 4.0.3 sql-bench/server-cfg.sh: Removed 8000 max row limit for Innodb sql/Makefile.am: merge with 4.0.3 sql/field.cc: Indentation cleanup Changed sprintf -> my_sprintf sql/field.h: merge with 4.0.3 sql/ha_heap.cc: merge with 4.0.3 (Indentation change) sql/item.h: merge with 4.0.3 (Indentation change) sql/item_cmpfunc.cc: merge with 4.0.3 sql/item_cmpfunc.h: Removed size_of() from items Indentation cleanup sql/item_create.cc: merge sql/item_create.h: merge sql/item_func.cc: Added comments Changed string functions to use character set of first string argument as default return characterset Simple optimizations. Removed return of uninitalized variable. sql/item_func.h: merge sql/item_strfunc.cc: merge with 4.0.3 (Indentation change) sql/item_strfunc.h: removed size_of() sql/item_uniq.h: removed size_of() sql/lex.h: merge with 4.0.3 (Indentation change) sql/log_event.cc: Add ` around database in 'use database' in binary log. sql/mysql_priv.h: merge with 4.0.3 sql/mysqld.cc: merge with 4.0.3 (Indentation change) sql/share/czech/errmsg.txt: merge sql/share/danish/errmsg.txt: merge sql/share/dutch/errmsg.txt: merge sql/share/english/errmsg.txt: merge sql/share/estonian/errmsg.txt: merge sql/share/french/errmsg.txt: merge sql/share/german/errmsg.txt: merge sql/share/greek/errmsg.txt: merge sql/share/hungarian/errmsg.txt: merge sql/share/italian/errmsg.txt: merge sql/share/japanese/errmsg.txt: merge sql/share/korean/errmsg.txt: merge sql/share/norwegian-ny/errmsg.txt: merge sql/share/norwegian/errmsg.txt: merge sql/share/polish/errmsg.txt: merge sql/share/portuguese/errmsg.txt: merge sql/share/romanian/errmsg.txt: merge sql/share/russian/errmsg.txt: merge sql/share/slovak/errmsg.txt: merge sql/share/spanish/errmsg.txt: merge sql/share/swedish/errmsg.txt: merge sql/share/ukrainian/errmsg.txt: merge sql/sql_acl.cc: merge with 4.0.3 sql/sql_base.cc: More comments Fixed bug in send_fields() when using convert sql/sql_class.cc: merge sql/sql_class.h: Merge with 4.0.3 Moved max_error_count and max_warning_count to variables struct. sql/sql_delete.cc: merge with 4.0.3 (Indentation change) sql/sql_lex.h: merge with 4.0.3 sql/sql_parse.cc: Removed SHOW_WARNS_COUNT and SHOW_ERRORS_COUNT. (Should be retrived from variables) sql/sql_select.cc: merge with 4.0.3 sql/sql_show.cc: merge with 4.0.3 sql/sql_union.cc: merge with 4.0.3 sql/sql_update.cc: merge with 4.0.3 sql/sql_yacc.yy: merge with 4.0.3 Indentation cleanup sql/structs.h: merge with 4.0.3 sql/table.cc: merge with 4.0.3 sql/table.h: merge with 4.0.3
This commit is contained in:
commit
9421f1dae9
331 changed files with 71903 additions and 4597 deletions
204
sql/ha_heap.cc
204
sql/ha_heap.cc
|
|
@ -33,69 +33,12 @@ const char **ha_heap::bas_ext() const
|
|||
|
||||
int ha_heap::open(const char *name, int mode, uint test_if_locked)
|
||||
{
|
||||
uint key,parts,mem_per_row=0;
|
||||
ulong max_rows;
|
||||
HP_KEYDEF *keydef;
|
||||
HP_KEYSEG *seg;
|
||||
THD *thd= current_thd;
|
||||
|
||||
for (key=parts=0 ; key < table->keys ; key++)
|
||||
parts+=table->key_info[key].key_parts;
|
||||
|
||||
if (!(keydef=(HP_KEYDEF*) my_malloc(table->keys*sizeof(HP_KEYDEF)+
|
||||
parts*sizeof(HP_KEYSEG),MYF(MY_WME))))
|
||||
return my_errno;
|
||||
seg=my_reinterpret_cast(HP_KEYSEG*) (keydef+table->keys);
|
||||
for (key=0 ; key < table->keys ; key++)
|
||||
if (!(file= heap_open(name, mode)) && my_errno == ENOENT)
|
||||
{
|
||||
KEY *pos=table->key_info+key;
|
||||
KEY_PART_INFO *key_part= pos->key_part;
|
||||
KEY_PART_INFO *key_part_end= key_part+pos->key_parts;
|
||||
|
||||
mem_per_row += (pos->key_length + (sizeof(char*) * 2));
|
||||
|
||||
keydef[key].keysegs=(uint) pos->key_parts;
|
||||
keydef[key].flag = (pos->flags & (HA_NOSAME | HA_NULL_ARE_EQUAL));
|
||||
keydef[key].seg=seg;
|
||||
|
||||
for (; key_part != key_part_end ; key_part++, seg++)
|
||||
{
|
||||
uint flag=key_part->key_type;
|
||||
Field *field=key_part->field;
|
||||
if (!f_is_packed(flag) &&
|
||||
f_packtype(flag) == (int) FIELD_TYPE_DECIMAL &&
|
||||
!(flag & FIELDFLAG_BINARY))
|
||||
seg->type= (int) HA_KEYTYPE_TEXT;
|
||||
else
|
||||
seg->type= (int) HA_KEYTYPE_BINARY;
|
||||
seg->start=(uint) key_part->offset;
|
||||
seg->length=(uint) key_part->length;
|
||||
if (field->null_ptr)
|
||||
{
|
||||
seg->null_bit=field->null_bit;
|
||||
seg->null_pos= (uint) (field->null_ptr-
|
||||
(uchar*) table->record[0]);
|
||||
}
|
||||
else
|
||||
{
|
||||
seg->null_bit=0;
|
||||
seg->null_pos=0;
|
||||
}
|
||||
}
|
||||
if (!create(name, table, NULL))
|
||||
file= heap_open(name, mode);
|
||||
}
|
||||
mem_per_row += MY_ALIGN(table->reclength+1, sizeof(char*));
|
||||
max_rows = (ulong) (thd->variables.max_heap_table_size / mem_per_row);
|
||||
file=heap_open(name,mode,
|
||||
table->keys,keydef,
|
||||
table->reclength,
|
||||
((table->max_rows < max_rows && table->max_rows) ?
|
||||
table->max_rows : max_rows),
|
||||
table->min_rows);
|
||||
my_free((gptr) keydef,MYF(0));
|
||||
if (file)
|
||||
info(HA_STATUS_NO_LOCK | HA_STATUS_CONST | HA_STATUS_VARIABLE);
|
||||
ref_length=sizeof(HEAP_PTR);
|
||||
return (!file ? errno : 0);
|
||||
return (file ? 0 : 1);
|
||||
}
|
||||
|
||||
int ha_heap::close(void)
|
||||
|
|
@ -125,25 +68,21 @@ int ha_heap::delete_row(const byte * buf)
|
|||
return heap_delete(file,buf);
|
||||
}
|
||||
|
||||
int ha_heap::index_read(byte * buf, const byte * key,
|
||||
uint key_len __attribute__((unused)),
|
||||
enum ha_rkey_function find_flag
|
||||
__attribute__((unused)))
|
||||
int ha_heap::index_read(byte * buf, const byte * key, uint key_len,
|
||||
enum ha_rkey_function find_flag)
|
||||
{
|
||||
statistic_increment(ha_read_key_count,&LOCK_status);
|
||||
int error=heap_rkey(file,buf,active_index, key);
|
||||
table->status=error ? STATUS_NOT_FOUND: 0;
|
||||
statistic_increment(ha_read_key_count, &LOCK_status);
|
||||
int error = heap_rkey(file,buf,active_index, key, key_len, find_flag);
|
||||
table->status = error ? STATUS_NOT_FOUND : 0;
|
||||
return error;
|
||||
}
|
||||
|
||||
int ha_heap::index_read_idx(byte * buf, uint index, const byte * key,
|
||||
uint key_len __attribute__((unused)),
|
||||
enum ha_rkey_function find_flag
|
||||
__attribute__((unused)))
|
||||
uint key_len, enum ha_rkey_function find_flag)
|
||||
{
|
||||
statistic_increment(ha_read_key_count,&LOCK_status);
|
||||
int error=heap_rkey(file, buf, index, key);
|
||||
table->status=error ? STATUS_NOT_FOUND: 0;
|
||||
statistic_increment(ha_read_key_count, &LOCK_status);
|
||||
int error = heap_rkey(file, buf, index, key, key_len, find_flag);
|
||||
table->status = error ? STATUS_NOT_FOUND : 0;
|
||||
return error;
|
||||
}
|
||||
|
||||
|
|
@ -167,7 +106,7 @@ int ha_heap::index_prev(byte * buf)
|
|||
int ha_heap::index_first(byte * buf)
|
||||
{
|
||||
statistic_increment(ha_read_first_count,&LOCK_status);
|
||||
int error=heap_rfirst(file, buf);
|
||||
int error=heap_rfirst(file, buf, active_index);
|
||||
table->status=error ? STATUS_NOT_FOUND: 0;
|
||||
return error;
|
||||
}
|
||||
|
|
@ -175,7 +114,7 @@ int ha_heap::index_first(byte * buf)
|
|||
int ha_heap::index_last(byte * buf)
|
||||
{
|
||||
statistic_increment(ha_read_last_count,&LOCK_status);
|
||||
int error=heap_rlast(file, buf);
|
||||
int error=heap_rlast(file, buf, active_index);
|
||||
table->status=error ? STATUS_NOT_FOUND: 0;
|
||||
return error;
|
||||
}
|
||||
|
|
@ -255,7 +194,6 @@ THR_LOCK_DATA **ha_heap::store_lock(THD *thd,
|
|||
return to;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
We have to ignore ENOENT entries as the HEAP table is created on open and
|
||||
not when doing a CREATE on the table.
|
||||
|
|
@ -272,7 +210,6 @@ int ha_heap::rename_table(const char * from, const char * to)
|
|||
return heap_rename(from,to);
|
||||
}
|
||||
|
||||
|
||||
ha_rows ha_heap::records_in_range(int inx,
|
||||
const byte *start_key,uint start_key_len,
|
||||
enum ha_rkey_function start_search_flag,
|
||||
|
|
@ -280,18 +217,111 @@ ha_rows ha_heap::records_in_range(int inx,
|
|||
enum ha_rkey_function end_search_flag)
|
||||
{
|
||||
KEY *pos=table->key_info+inx;
|
||||
if (start_key_len != end_key_len ||
|
||||
start_key_len != pos->key_length ||
|
||||
start_search_flag != HA_READ_KEY_EXACT ||
|
||||
end_search_flag != HA_READ_AFTER_KEY)
|
||||
return HA_POS_ERROR; // Can't only use exact keys
|
||||
return 10; // Good guess
|
||||
if (pos->algorithm == HA_KEY_ALG_BTREE)
|
||||
{
|
||||
return hp_rb_records_in_range(file, inx, start_key, start_key_len,
|
||||
start_search_flag, end_key, end_key_len,
|
||||
end_search_flag);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (start_key_len != end_key_len ||
|
||||
start_key_len != pos->key_length ||
|
||||
start_search_flag != HA_READ_KEY_EXACT ||
|
||||
end_search_flag != HA_READ_AFTER_KEY)
|
||||
return HA_POS_ERROR; // Can't only use exact keys
|
||||
return 10; // Good guess
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int ha_heap::create(const char *name, TABLE *form, HA_CREATE_INFO *create_info)
|
||||
|
||||
int ha_heap::create(const char *name, TABLE *table,
|
||||
HA_CREATE_INFO *create_info)
|
||||
{
|
||||
uint key, parts, mem_per_row= 0;
|
||||
ulong max_rows;
|
||||
HP_KEYDEF *keydef;
|
||||
HA_KEYSEG *seg;
|
||||
char buff[FN_REFLEN];
|
||||
return heap_create(fn_format(buff,name,"","",4+2));
|
||||
int error;
|
||||
|
||||
for (key= parts= 0; key < table->keys; key++)
|
||||
{
|
||||
parts+= table->key_info[key].key_parts;
|
||||
if (table->key_info[key].algorithm == HA_KEY_ALG_BTREE)
|
||||
parts++; /* additional HA_KEYTYPE_END keyseg */
|
||||
}
|
||||
|
||||
if (!(keydef= (HP_KEYDEF*) my_malloc(table->keys * sizeof(HP_KEYDEF) +
|
||||
parts * sizeof(HA_KEYSEG),
|
||||
MYF(MY_WME))))
|
||||
return my_errno;
|
||||
seg= my_reinterpret_cast(HA_KEYSEG*) (keydef + table->keys);
|
||||
for (key= 0; key < table->keys; key++)
|
||||
{
|
||||
KEY *pos= table->key_info+key;
|
||||
KEY_PART_INFO *key_part= pos->key_part;
|
||||
KEY_PART_INFO *key_part_end= key_part + pos->key_parts;
|
||||
|
||||
mem_per_row+= (pos->key_length + (sizeof(char*) * 2));
|
||||
|
||||
keydef[key].keysegs= (uint) pos->key_parts;
|
||||
keydef[key].flag= (pos->flags & (HA_NOSAME | HA_NULL_ARE_EQUAL));
|
||||
keydef[key].seg= seg;
|
||||
keydef[key].algorithm= ((pos->algorithm == HA_KEY_ALG_UNDEF) ?
|
||||
HA_KEY_ALG_HASH : pos->algorithm);
|
||||
|
||||
for (; key_part != key_part_end; key_part++, seg++)
|
||||
{
|
||||
uint flag= key_part->key_type;
|
||||
Field *field= key_part->field;
|
||||
if (pos->algorithm == HA_KEY_ALG_BTREE)
|
||||
seg->type= field->key_type();
|
||||
else
|
||||
{
|
||||
if (!f_is_packed(flag) &&
|
||||
f_packtype(flag) == (int) FIELD_TYPE_DECIMAL &&
|
||||
!(flag & FIELDFLAG_BINARY))
|
||||
seg->type= (int) HA_KEYTYPE_TEXT;
|
||||
else
|
||||
seg->type= (int) HA_KEYTYPE_BINARY;
|
||||
}
|
||||
seg->start= (uint) key_part->offset;
|
||||
seg->length= (uint) key_part->length;
|
||||
seg->flag = 0;
|
||||
seg->charset= field->binary() ? NULL : ((Field_str*)field)->charset();
|
||||
if (field->null_ptr)
|
||||
{
|
||||
seg->null_bit= field->null_bit;
|
||||
seg->null_pos= (uint) (field->null_ptr - (uchar*) table->record[0]);
|
||||
}
|
||||
else
|
||||
{
|
||||
seg->null_bit= 0;
|
||||
seg->null_pos= 0;
|
||||
}
|
||||
}
|
||||
if (pos->algorithm == HA_KEY_ALG_BTREE)
|
||||
{
|
||||
/* additional HA_KEYTYPE_END keyseg */
|
||||
seg->type= HA_KEYTYPE_END;
|
||||
seg->length= sizeof(byte*);
|
||||
seg->flag= 0;
|
||||
seg->null_bit= 0;
|
||||
seg++;
|
||||
}
|
||||
}
|
||||
mem_per_row+= MY_ALIGN(table->reclength + 1, sizeof(char*));
|
||||
max_rows = (ulong) (current_thd->variables.max_heap_table_size /
|
||||
mem_per_row);
|
||||
error= heap_create(fn_format(buff,name,"","",4+2),
|
||||
table->keys,keydef, table->reclength,
|
||||
((table->max_rows < max_rows && table->max_rows) ?
|
||||
table->max_rows : max_rows),
|
||||
table->min_rows);
|
||||
my_free((gptr) keydef, MYF(0));
|
||||
if (file)
|
||||
info(HA_STATUS_NO_LOCK | HA_STATUS_CONST | HA_STATUS_VARIABLE);
|
||||
ref_length= sizeof(HEAP_PTR);
|
||||
return (error);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue