Loading mysql-test/r/handler.result +12 −0 Original line number Diff line number Diff line Loading @@ -191,3 +191,15 @@ Ok handler t close; use test; drop table t1; create table t1 ( a int, b int, INDEX a (a) ); insert into t1 values (1,2), (2,1); handler t1 open; handler t1 read a=(1) where b=2; a b 1 2 handler t1 read a=(1) where b=3; a b handler t1 read a=(1) where b=1; a b handler t1 close; drop table t1; mysql-test/t/handler.test +12 −0 Original line number Diff line number Diff line Loading @@ -123,3 +123,15 @@ handler t close; use test; drop table t1; # # BUG#3649 # create table t1 ( a int, b int, INDEX a (a) ); insert into t1 values (1,2), (2,1); handler t1 open; handler t1 read a=(1) where b=2; handler t1 read a=(1) where b=3; handler t1 read a=(1) where b=1; handler t1 close; drop table t1; sql/sql_class.h +1 −1 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ class Load_log_event; class Slave_log_event; enum enum_enable_or_disable { LEAVE_AS_IS, ENABLE, DISABLE }; enum enum_ha_read_modes { RFIRST, RNEXT, RPREV, RLAST, RKEY }; enum enum_ha_read_modes { RFIRST, RNEXT, RPREV, RLAST, RKEY, RNEXT_SAME }; enum enum_duplicates { DUP_ERROR, DUP_REPLACE, DUP_IGNORE }; enum enum_log_type { LOG_CLOSED, LOG_TO_BE_OPENED, LOG_NORMAL, LOG_NEW, LOG_BIN}; enum enum_delay_key_write { DELAY_KEY_WRITE_NONE, DELAY_KEY_WRITE_ON, Loading sql/sql_handler.cc +23 −15 Original line number Diff line number Diff line Loading @@ -103,7 +103,7 @@ int mysql_ha_closeall(THD *thd, TABLE_LIST *tables) } static enum enum_ha_read_modes rkey_to_rnext[]= { RNEXT, RNEXT, RPREV, RNEXT, RPREV, RNEXT, RPREV }; { RNEXT_SAME, RNEXT, RPREV, RNEXT, RPREV, RNEXT, RPREV }; int mysql_ha_read(THD *thd, TABLE_LIST *tables, Loading Loading @@ -151,6 +151,11 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables, HANDLER_TABLES_HACK(thd); MYSQL_LOCK *lock=mysql_lock_tables(thd,&tables->table,1); HANDLER_TABLES_HACK(thd); byte *key; uint key_len; LINT_INIT(key); LINT_INIT(key_len); if (!lock) goto err0; // mysql_lock_tables() printed error message already Loading Loading @@ -183,13 +188,16 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables, DBUG_ASSERT(keyname != 0); err=table->file->index_prev(table->record[0]); break; case RNEXT_SAME: /* Continue scan on "(keypart1,keypart2,...)=(c1, c2, ...) */ DBUG_ASSERT(keyname != 0); err= table->file->index_next_same(table->record[0], key, key_len); 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), Loading Loading
mysql-test/r/handler.result +12 −0 Original line number Diff line number Diff line Loading @@ -191,3 +191,15 @@ Ok handler t close; use test; drop table t1; create table t1 ( a int, b int, INDEX a (a) ); insert into t1 values (1,2), (2,1); handler t1 open; handler t1 read a=(1) where b=2; a b 1 2 handler t1 read a=(1) where b=3; a b handler t1 read a=(1) where b=1; a b handler t1 close; drop table t1;
mysql-test/t/handler.test +12 −0 Original line number Diff line number Diff line Loading @@ -123,3 +123,15 @@ handler t close; use test; drop table t1; # # BUG#3649 # create table t1 ( a int, b int, INDEX a (a) ); insert into t1 values (1,2), (2,1); handler t1 open; handler t1 read a=(1) where b=2; handler t1 read a=(1) where b=3; handler t1 read a=(1) where b=1; handler t1 close; drop table t1;
sql/sql_class.h +1 −1 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ class Load_log_event; class Slave_log_event; enum enum_enable_or_disable { LEAVE_AS_IS, ENABLE, DISABLE }; enum enum_ha_read_modes { RFIRST, RNEXT, RPREV, RLAST, RKEY }; enum enum_ha_read_modes { RFIRST, RNEXT, RPREV, RLAST, RKEY, RNEXT_SAME }; enum enum_duplicates { DUP_ERROR, DUP_REPLACE, DUP_IGNORE }; enum enum_log_type { LOG_CLOSED, LOG_TO_BE_OPENED, LOG_NORMAL, LOG_NEW, LOG_BIN}; enum enum_delay_key_write { DELAY_KEY_WRITE_NONE, DELAY_KEY_WRITE_ON, Loading
sql/sql_handler.cc +23 −15 Original line number Diff line number Diff line Loading @@ -103,7 +103,7 @@ int mysql_ha_closeall(THD *thd, TABLE_LIST *tables) } static enum enum_ha_read_modes rkey_to_rnext[]= { RNEXT, RNEXT, RPREV, RNEXT, RPREV, RNEXT, RPREV }; { RNEXT_SAME, RNEXT, RPREV, RNEXT, RPREV, RNEXT, RPREV }; int mysql_ha_read(THD *thd, TABLE_LIST *tables, Loading Loading @@ -151,6 +151,11 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables, HANDLER_TABLES_HACK(thd); MYSQL_LOCK *lock=mysql_lock_tables(thd,&tables->table,1); HANDLER_TABLES_HACK(thd); byte *key; uint key_len; LINT_INIT(key); LINT_INIT(key_len); if (!lock) goto err0; // mysql_lock_tables() printed error message already Loading Loading @@ -183,13 +188,16 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables, DBUG_ASSERT(keyname != 0); err=table->file->index_prev(table->record[0]); break; case RNEXT_SAME: /* Continue scan on "(keypart1,keypart2,...)=(c1, c2, ...) */ DBUG_ASSERT(keyname != 0); err= table->file->index_next_same(table->record[0], key, key_len); 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), Loading