summaryrefslogtreecommitdiff
path: root/sql/sql_handler.cc
diff options
context:
space:
mode:
authorunknown <monty@hundin.mysql.fi>2002-01-29 18:32:16 +0200
committerunknown <monty@hundin.mysql.fi>2002-01-29 18:32:16 +0200
commitd6a4362687434767d835713f174cd9bdd2656967 (patch)
treedc6d00358536a5dca27f806f929ab5e25a000c92 /sql/sql_handler.cc
parent741b75b1c7810a1f6425c81738499fe12bdbc309 (diff)
downloadmariadb-git-d6a4362687434767d835713f174cd9bdd2656967.tar.gz
New error messages
Test of unsigned BIGINT values Fixes for queries-per-hour Cleanup of replication code (comments and portability fixes) Make most of the binary log code 4G clean Changed syntax for GRANT ... QUERIES PER HOUR Docs/manual.texi: Fixed Changelog, upgrading to 4.0 and 4.1 TODO sections. Docs/mysqld_error.txt: Added error message. configure.in: Fix for autoconf 2.52 include/my_getopt.h: Portability fix. include/my_global.h: Portablity fix. include/mysqld_error.h: New error messages mysql-test/r/bigint.result: Test of unsigned BIGINT values. mysql-test/r/func_op.result: Test of unsigned BIGINT values. mysql-test/r/varbinary.result: Test of unsigned BIGINT values. mysql-test/t/bigint.test: Test of unsigned BIGINT values. sql/item_func.h: Optimized Item_int_func() usage. sql/lock.cc: Cleanup comments sql/log.cc: Cleanup sql/log_event.cc: Cleanup and portability fixes. sql/log_event.h: Cleanup and portability fixes. sql/mini_client.cc: Cleanup and portability fixes. sql/mysqld.cc: Fix for queries-per-hour sql/repl_failsafe.cc: Prepare for making binary log 2G clean. sql/share/czech/errmsg.txt: New error messages sql/share/danish/errmsg.txt: New error messages sql/share/dutch/errmsg.txt: New error messages sql/share/english/errmsg.txt: New error messages sql/share/estonian/errmsg.txt: New error messages sql/share/french/errmsg.txt: New error messages sql/share/german/errmsg.txt: New error messages sql/share/greek/errmsg.txt: New error messages sql/share/hungarian/errmsg.txt: New error messages sql/share/italian/errmsg.txt: New error messages sql/share/japanese/errmsg.txt: New error messages sql/share/korean/errmsg.txt: New error messages sql/share/norwegian-ny/errmsg.txt: New error messages sql/share/norwegian/errmsg.txt: New error messages sql/share/polish/errmsg.txt: New error messages sql/share/portuguese/errmsg.txt: New error messages sql/share/romanian/errmsg.txt: New error messages sql/share/russian/errmsg.txt: New error messages sql/share/slovak/errmsg.txt: New error messages sql/share/spanish/errmsg.txt: New error messages sql/share/swedish/errmsg.txt: New error messages sql/share/ukrainian/errmsg.txt: New error messages sql/slave.cc: Cleanup sql/slave.h: Cleanup sql/sql_acl.cc: Cleanup and removal of possible reserved words sql/sql_base.cc: More DBUG sql/sql_cache.cc: Cleanup & portability fixes sql/sql_class.h: Make binary log 4G clean sql/sql_delete.cc: More DBUG sql/sql_handler.cc: Cleanup & portability fixes sql/sql_parse.cc: Cleanup of queries-per-hours code sql/sql_rename.cc: Add missing DBUG_RETURN sql/sql_repl.cc: Cleanup & portability fixes sql/sql_select.cc: Cleanup & portability fixes sql/sql_show.cc: Cleanup & portability fixes sql/sql_update.cc: Small cleanup of multi-update-code (need second pass) sql/sql_yacc.yy: Changed syntax for GRANT ... QUERIES PER HOUR strings/str2int.c: Cleanup & portability fixes
Diffstat (limited to 'sql/sql_handler.cc')
-rw-r--r--sql/sql_handler.cc115
1 files changed, 58 insertions, 57 deletions
diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc
index 0c6b5599519..8f9d3474ce2 100644
--- a/sql/sql_handler.cc
+++ b/sql/sql_handler.cc
@@ -90,6 +90,7 @@ int mysql_ha_close(THD *thd, TABLE_LIST *tables, bool dont_send_ok)
static enum enum_ha_read_modes rkey_to_rnext[]=
{ RNEXT, RNEXT, RPREV, RNEXT, RPREV, RNEXT, RPREV };
+
int mysql_ha_read(THD *thd, TABLE_LIST *tables,
enum enum_ha_read_modes mode, char *keyname, List<Item> *key_expr,
enum ha_rkey_function ha_rkey_mode, Item *cond,
@@ -121,6 +122,7 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables,
List<Item> list;
list.push_front(new Item_field(NULL,NULL,"*"));
List_iterator<Item> it(list);
+ uint num_rows;
it++;
insert_fields(thd,tables,tables->db,tables->name,&it);
@@ -136,65 +138,64 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables,
if (!lock)
goto err0; // mysql_lock_tables() printed error message already
- for (uint num_rows=0; num_rows < select_limit; )
+ for (num_rows=0; num_rows < select_limit; )
{
- switch(mode)
+ switch(mode) {
+ case RFIRST:
+ err=keyname ?
+ table->file->index_first(table->record[0]) :
+ table->file->rnd_init(1) ||
+ table->file->rnd_next(table->record[0]);
+ mode=RNEXT;
+ break;
+ case RLAST:
+ DBUG_ASSERT(keyname != 0);
+ err=table->file->index_last(table->record[0]);
+ mode=RPREV;
+ break;
+ case RNEXT:
+ err=keyname ?
+ table->file->index_next(table->record[0]) :
+ table->file->rnd_next(table->record[0]);
+ break;
+ case RPREV:
+ DBUG_ASSERT(keyname != 0);
+ err=table->file->index_prev(table->record[0]);
+ break;
+ case RKEY:
{
- case RFIRST:
- err=keyname ?
- table->file->index_first(table->record[0]) :
- table->file->rnd_init(1) ||
- table->file->rnd_next(table->record[0]);
- mode=RNEXT;
- break;
- case RLAST:
- DBUG_ASSERT(keyname != 0);
- err=table->file->index_last(table->record[0]);
- mode=RPREV;
- break;
- case RNEXT:
- err=keyname ?
- table->file->index_next(table->record[0]) :
- table->file->rnd_next(table->record[0]);
- break;
- case RPREV:
- DBUG_ASSERT(keyname != 0);
- err=table->file->index_prev(table->record[0]);
- break;
- case RKEY:
- {
- DBUG_ASSERT(keyname != 0);
- KEY *keyinfo=table->key_info+keyno;
- KEY_PART_INFO *key_part=keyinfo->key_part;
- uint key_len;
- byte *key;
- if (key_expr->elements > keyinfo->key_parts)
- {
- my_printf_error(ER_TOO_MANY_KEY_PARTS,ER(ER_TOO_MANY_KEY_PARTS),
- MYF(0),keyinfo->key_parts);
- goto err;
- }
- List_iterator_fast<Item> it_ke(*key_expr);
- Item *item;
- for (key_len=0 ; (item=it_ke++) ; key_part++)
- {
- item->save_in_field(key_part->field);
- key_len+=key_part->store_length;
- }
- if (!(key= (byte*) sql_calloc(ALIGN_SIZE(key_len))))
- {
- send_error(&thd->net,ER_OUTOFMEMORY);
- goto err;
- }
- key_copy(key, table, keyno, key_len);
- err=table->file->index_read(table->record[0],
- key,key_len,ha_rkey_mode);
- mode=rkey_to_rnext[(int)ha_rkey_mode];
- break;
- }
- default:
- send_error(&thd->net,ER_ILLEGAL_HA);
- goto err;
+ DBUG_ASSERT(keyname != 0);
+ KEY *keyinfo=table->key_info+keyno;
+ KEY_PART_INFO *key_part=keyinfo->key_part;
+ uint key_len;
+ byte *key;
+ if (key_expr->elements > keyinfo->key_parts)
+ {
+ my_printf_error(ER_TOO_MANY_KEY_PARTS,ER(ER_TOO_MANY_KEY_PARTS),
+ MYF(0),keyinfo->key_parts);
+ goto err;
+ }
+ List_iterator_fast<Item> it_ke(*key_expr);
+ Item *item;
+ for (key_len=0 ; (item=it_ke++) ; key_part++)
+ {
+ item->save_in_field(key_part->field);
+ key_len+=key_part->store_length;
+ }
+ if (!(key= (byte*) sql_calloc(ALIGN_SIZE(key_len))))
+ {
+ send_error(&thd->net,ER_OUTOFMEMORY);
+ goto err;
+ }
+ key_copy(key, table, keyno, key_len);
+ err=table->file->index_read(table->record[0],
+ key,key_len,ha_rkey_mode);
+ mode=rkey_to_rnext[(int)ha_rkey_mode];
+ break;
+ }
+ default:
+ send_error(&thd->net,ER_ILLEGAL_HA);
+ goto err;
}
if (err)