Loading mysql-test/r/null.result +19 −0 Original line number Diff line number Diff line Loading @@ -156,3 +156,22 @@ drop table t1; select cast(NULL as signed); cast(NULL as signed) NULL create table t1(i int, key(i)); insert into t1 values(1); insert into t1 select i*2 from t1; insert into t1 select i*2 from t1; insert into t1 select i*2 from t1; insert into t1 select i*2 from t1; insert into t1 select i*2 from t1; insert into t1 select i*2 from t1; insert into t1 select i*2 from t1; insert into t1 select i*2 from t1; insert into t1 select i*2 from t1; explain select * from t1 where i=2 or i is null; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ref_or_null i i 5 const 10 Using where; Using index alter table t1 change i i int not null; explain select * from t1 where i=2 or i is null; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ref i i 4 const 7 Using where; Using index drop table t1; sql/handler.cc +11 −11 Original line number Diff line number Diff line Loading @@ -472,7 +472,7 @@ int ha_release_temporary_latches(THD *thd) int ha_commit_trans(THD *thd, THD_TRANS* trans) { int error=0; DBUG_ENTER("ha_commit"); DBUG_ENTER("ha_commit_trans"); #ifdef USING_TRANSACTIONS if (opt_using_transactions) { Loading @@ -480,7 +480,7 @@ int ha_commit_trans(THD *thd, THD_TRANS* trans) bool operation_done= 0, need_start_waiters= 0; /* If transaction has done some updates to tables */ if (trans == &thd->transaction.all && if (trans == &thd->transaction.all && mysql_bin_log.is_open() && my_b_tell(&thd->transaction.trans_log)) { if (error= wait_if_global_read_lock(thd, 0, 0)) Loading Loading @@ -576,7 +576,7 @@ int ha_commit_trans(THD *thd, THD_TRANS* trans) int ha_rollback_trans(THD *thd, THD_TRANS *trans) { int error=0; DBUG_ENTER("ha_rollback"); DBUG_ENTER("ha_rollback_trans"); #ifdef USING_TRANSACTIONS if (opt_using_transactions) { Loading Loading @@ -868,7 +868,7 @@ my_off_t ha_get_ptr(byte *ptr, uint pack_length) int handler::ha_open(const char *name, int mode, int test_if_locked) { int error; DBUG_ENTER("handler::open"); DBUG_ENTER("handler::ha_open"); DBUG_PRINT("enter",("name: %s db_type: %d db_stat: %d mode: %d lock_test: %d", name, table->db_type, table->db_stat, mode, test_if_locked)); Loading Loading @@ -967,7 +967,7 @@ void handler::update_auto_increment() { longlong nr; THD *thd; DBUG_ENTER("update_auto_increment"); DBUG_ENTER("handler::update_auto_increment"); if (table->next_number_field->val_int() != 0 || table->auto_increment_field_not_null && current_thd->variables.sql_mode & MODE_NO_AUTO_VALUE_ON_ZERO) Loading Loading @@ -1025,7 +1025,7 @@ longlong handler::get_auto_increment() void handler::print_error(int error, myf errflag) { DBUG_ENTER("print_error"); DBUG_ENTER("handler::print_error"); DBUG_PRINT("enter",("error: %d",error)); int textno=ER_GET_ERRNO; Loading Loading @@ -1164,7 +1164,7 @@ bool handler::get_error_message(int error, String* buf) uint handler::get_dup_key(int error) { DBUG_ENTER("get_dup_key"); DBUG_ENTER("handler::get_dup_key"); table->file->errkey = (uint) -1; if (error == HA_ERR_FOUND_DUPP_KEY || error == HA_ERR_FOUND_DUPP_UNIQUE) info(HA_STATUS_ERRKEY | HA_STATUS_NO_LOCK); Loading Loading
mysql-test/r/null.result +19 −0 Original line number Diff line number Diff line Loading @@ -156,3 +156,22 @@ drop table t1; select cast(NULL as signed); cast(NULL as signed) NULL create table t1(i int, key(i)); insert into t1 values(1); insert into t1 select i*2 from t1; insert into t1 select i*2 from t1; insert into t1 select i*2 from t1; insert into t1 select i*2 from t1; insert into t1 select i*2 from t1; insert into t1 select i*2 from t1; insert into t1 select i*2 from t1; insert into t1 select i*2 from t1; insert into t1 select i*2 from t1; explain select * from t1 where i=2 or i is null; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ref_or_null i i 5 const 10 Using where; Using index alter table t1 change i i int not null; explain select * from t1 where i=2 or i is null; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ref i i 4 const 7 Using where; Using index drop table t1;
sql/handler.cc +11 −11 Original line number Diff line number Diff line Loading @@ -472,7 +472,7 @@ int ha_release_temporary_latches(THD *thd) int ha_commit_trans(THD *thd, THD_TRANS* trans) { int error=0; DBUG_ENTER("ha_commit"); DBUG_ENTER("ha_commit_trans"); #ifdef USING_TRANSACTIONS if (opt_using_transactions) { Loading @@ -480,7 +480,7 @@ int ha_commit_trans(THD *thd, THD_TRANS* trans) bool operation_done= 0, need_start_waiters= 0; /* If transaction has done some updates to tables */ if (trans == &thd->transaction.all && if (trans == &thd->transaction.all && mysql_bin_log.is_open() && my_b_tell(&thd->transaction.trans_log)) { if (error= wait_if_global_read_lock(thd, 0, 0)) Loading Loading @@ -576,7 +576,7 @@ int ha_commit_trans(THD *thd, THD_TRANS* trans) int ha_rollback_trans(THD *thd, THD_TRANS *trans) { int error=0; DBUG_ENTER("ha_rollback"); DBUG_ENTER("ha_rollback_trans"); #ifdef USING_TRANSACTIONS if (opt_using_transactions) { Loading Loading @@ -868,7 +868,7 @@ my_off_t ha_get_ptr(byte *ptr, uint pack_length) int handler::ha_open(const char *name, int mode, int test_if_locked) { int error; DBUG_ENTER("handler::open"); DBUG_ENTER("handler::ha_open"); DBUG_PRINT("enter",("name: %s db_type: %d db_stat: %d mode: %d lock_test: %d", name, table->db_type, table->db_stat, mode, test_if_locked)); Loading Loading @@ -967,7 +967,7 @@ void handler::update_auto_increment() { longlong nr; THD *thd; DBUG_ENTER("update_auto_increment"); DBUG_ENTER("handler::update_auto_increment"); if (table->next_number_field->val_int() != 0 || table->auto_increment_field_not_null && current_thd->variables.sql_mode & MODE_NO_AUTO_VALUE_ON_ZERO) Loading Loading @@ -1025,7 +1025,7 @@ longlong handler::get_auto_increment() void handler::print_error(int error, myf errflag) { DBUG_ENTER("print_error"); DBUG_ENTER("handler::print_error"); DBUG_PRINT("enter",("error: %d",error)); int textno=ER_GET_ERRNO; Loading Loading @@ -1164,7 +1164,7 @@ bool handler::get_error_message(int error, String* buf) uint handler::get_dup_key(int error) { DBUG_ENTER("get_dup_key"); DBUG_ENTER("handler::get_dup_key"); table->file->errkey = (uint) -1; if (error == HA_ERR_FOUND_DUPP_KEY || error == HA_ERR_FOUND_DUPP_UNIQUE) info(HA_STATUS_ERRKEY | HA_STATUS_NO_LOCK); Loading