Loading mysql-test/r/grant.result +22 −0 Original line number Diff line number Diff line Loading @@ -1129,4 +1129,26 @@ DROP USER mysqltest_1@localhost; DROP DATABASE db27878; use test; DROP TABLE t1; drop table if exists test; Warnings: Note 1051 Unknown table 'test' drop function if exists test_function; Warnings: Note 1305 FUNCTION test_function does not exist drop view if exists v1; Warnings: Note 1051 Unknown table 'test.v1' create table test (col1 varchar(30)); create function test_function() returns varchar(30) begin declare tmp varchar(30); select col1 from test limit 1 into tmp; return '1'; end| create view v1 as select test.* from test where test.col1=test_function(); grant update (col1) on v1 to 'greg'@'localhost'; drop user 'greg'@'localhost'; drop view v1; drop table test; drop function test_function; End of 5.0 tests mysql-test/r/range.result +39 −0 Original line number Diff line number Diff line Loading @@ -1166,3 +1166,42 @@ EXPLAIN SELECT a FROM t1 WHERE a='b' OR a='B'; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 range a a 35 NULL 3 Using where; Using index DROP TABLE t1; CREATE TABLE t1 (f1 TINYINT(11) UNSIGNED NOT NULL, PRIMARY KEY (f1)); INSERT INTO t1 VALUES (127),(254),(0),(1),(255); SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 256; COUNT(*) 5 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 256.0; COUNT(*) 5 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 255; COUNT(*) 4 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < -1; COUNT(*) 0 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -1; COUNT(*) 5 DROP TABLE t1; CREATE TABLE t1 ( f1 TINYINT(11) NOT NULL, PRIMARY KEY (f1)); INSERT INTO t1 VALUES (127),(126),(0),(-128),(-127); SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 128; COUNT(*) 5 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 128.0; COUNT(*) 5 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 127; COUNT(*) 4 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -129; COUNT(*) 5 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -129.0; COUNT(*) 5 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -128; COUNT(*) 4 DROP TABLE t1; mysql-test/t/grant.test +22 −0 Original line number Diff line number Diff line Loading @@ -1153,4 +1153,26 @@ DROP DATABASE db27878; use test; DROP TABLE t1; # # Bug #33201 Crash occurs when granting update privilege on one column of a view # drop table if exists test; drop function if exists test_function; drop view if exists v1; create table test (col1 varchar(30)); delimiter |; create function test_function() returns varchar(30) begin declare tmp varchar(30); select col1 from test limit 1 into tmp; return '1'; end| delimiter ;| create view v1 as select test.* from test where test.col1=test_function(); grant update (col1) on v1 to 'greg'@'localhost'; drop user 'greg'@'localhost'; drop view v1; drop table test; drop function test_function; --echo End of 5.0 tests mysql-test/t/range.test +46 −0 Original line number Diff line number Diff line Loading @@ -972,4 +972,50 @@ EXPLAIN SELECT a FROM t1 WHERE a='b' OR a='B'; DROP TABLE t1; # # Bug #34731: highest possible value for INT erroneously filtered by WHERE # # test UNSIGNED. only occurs when indexed. CREATE TABLE t1 (f1 TINYINT(11) UNSIGNED NOT NULL, PRIMARY KEY (f1)); INSERT INTO t1 VALUES (127),(254),(0),(1),(255); # test upper bound # count 5 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 256; SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 256.0; # count 4 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 255; # show we don't fiddle with lower bound on UNSIGNED # count 0 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < -1; # count 5 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -1; DROP TABLE t1; # test signed. only occurs when index. CREATE TABLE t1 ( f1 TINYINT(11) NOT NULL, PRIMARY KEY (f1)); INSERT INTO t1 VALUES (127),(126),(0),(-128),(-127); # test upper bound # count 5 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 128; SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 128.0; # count 4 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 127; # test lower bound # count 5 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -129; SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -129.0; # count 4 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -128; DROP TABLE t1; # End of 5.0 tests sql/opt_range.cc +54 −36 Original line number Diff line number Diff line Loading @@ -4405,12 +4405,13 @@ get_mm_leaf(PARAM *param, COND *conf_func, Field *field, KEY_PART *key_part, field->type() == FIELD_TYPE_DATETIME)) field->table->in_use->variables.sql_mode|= MODE_INVALID_DATES; err= value->save_in_field_no_warnings(field, 1); if (err > 0 && field->cmp_type() != value->result_type()) if (err > 0) { if (field->cmp_type() != value->result_type()) { if ((type == Item_func::EQ_FUNC || type == Item_func::EQUAL_FUNC) && value->result_type() == item_cmp_type(field->result_type(), value->result_type())) { tree= new (alloc) SEL_ARG(field, 0, 0); tree->type= SEL_ARG::IMPOSSIBLE; Loading Loading @@ -4450,7 +4451,24 @@ get_mm_leaf(PARAM *param, COND *conf_func, Field *field, KEY_PART *key_part, goto end; } } if (err < 0) /* guaranteed at this point: err > 0; field and const of same type If an integer got bounded (e.g. to within 0..255 / -128..127) for < or >, set flags as for <= or >= (no NEAR_MAX / NEAR_MIN) */ else if (err == 1 && field->result_type() == INT_RESULT) { if (type == Item_func::LT_FUNC && (value->val_int() > 0)) type = Item_func::LE_FUNC; else if (type == Item_func::GT_FUNC && !((Field_num*)field)->unsigned_flag && !((Item_int*)value)->unsigned_flag && (value->val_int() < 0)) type = Item_func::GE_FUNC; } } else if (err < 0) { field->table->in_use->variables.sql_mode= orig_sql_mode; /* This happens when we try to insert a NULL field in a not null column */ Loading Loading
mysql-test/r/grant.result +22 −0 Original line number Diff line number Diff line Loading @@ -1129,4 +1129,26 @@ DROP USER mysqltest_1@localhost; DROP DATABASE db27878; use test; DROP TABLE t1; drop table if exists test; Warnings: Note 1051 Unknown table 'test' drop function if exists test_function; Warnings: Note 1305 FUNCTION test_function does not exist drop view if exists v1; Warnings: Note 1051 Unknown table 'test.v1' create table test (col1 varchar(30)); create function test_function() returns varchar(30) begin declare tmp varchar(30); select col1 from test limit 1 into tmp; return '1'; end| create view v1 as select test.* from test where test.col1=test_function(); grant update (col1) on v1 to 'greg'@'localhost'; drop user 'greg'@'localhost'; drop view v1; drop table test; drop function test_function; End of 5.0 tests
mysql-test/r/range.result +39 −0 Original line number Diff line number Diff line Loading @@ -1166,3 +1166,42 @@ EXPLAIN SELECT a FROM t1 WHERE a='b' OR a='B'; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 range a a 35 NULL 3 Using where; Using index DROP TABLE t1; CREATE TABLE t1 (f1 TINYINT(11) UNSIGNED NOT NULL, PRIMARY KEY (f1)); INSERT INTO t1 VALUES (127),(254),(0),(1),(255); SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 256; COUNT(*) 5 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 256.0; COUNT(*) 5 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 255; COUNT(*) 4 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < -1; COUNT(*) 0 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -1; COUNT(*) 5 DROP TABLE t1; CREATE TABLE t1 ( f1 TINYINT(11) NOT NULL, PRIMARY KEY (f1)); INSERT INTO t1 VALUES (127),(126),(0),(-128),(-127); SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 128; COUNT(*) 5 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 128.0; COUNT(*) 5 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 127; COUNT(*) 4 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -129; COUNT(*) 5 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -129.0; COUNT(*) 5 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -128; COUNT(*) 4 DROP TABLE t1;
mysql-test/t/grant.test +22 −0 Original line number Diff line number Diff line Loading @@ -1153,4 +1153,26 @@ DROP DATABASE db27878; use test; DROP TABLE t1; # # Bug #33201 Crash occurs when granting update privilege on one column of a view # drop table if exists test; drop function if exists test_function; drop view if exists v1; create table test (col1 varchar(30)); delimiter |; create function test_function() returns varchar(30) begin declare tmp varchar(30); select col1 from test limit 1 into tmp; return '1'; end| delimiter ;| create view v1 as select test.* from test where test.col1=test_function(); grant update (col1) on v1 to 'greg'@'localhost'; drop user 'greg'@'localhost'; drop view v1; drop table test; drop function test_function; --echo End of 5.0 tests
mysql-test/t/range.test +46 −0 Original line number Diff line number Diff line Loading @@ -972,4 +972,50 @@ EXPLAIN SELECT a FROM t1 WHERE a='b' OR a='B'; DROP TABLE t1; # # Bug #34731: highest possible value for INT erroneously filtered by WHERE # # test UNSIGNED. only occurs when indexed. CREATE TABLE t1 (f1 TINYINT(11) UNSIGNED NOT NULL, PRIMARY KEY (f1)); INSERT INTO t1 VALUES (127),(254),(0),(1),(255); # test upper bound # count 5 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 256; SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 256.0; # count 4 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 255; # show we don't fiddle with lower bound on UNSIGNED # count 0 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < -1; # count 5 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -1; DROP TABLE t1; # test signed. only occurs when index. CREATE TABLE t1 ( f1 TINYINT(11) NOT NULL, PRIMARY KEY (f1)); INSERT INTO t1 VALUES (127),(126),(0),(-128),(-127); # test upper bound # count 5 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 128; SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 128.0; # count 4 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 127; # test lower bound # count 5 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -129; SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -129.0; # count 4 SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -128; DROP TABLE t1; # End of 5.0 tests
sql/opt_range.cc +54 −36 Original line number Diff line number Diff line Loading @@ -4405,12 +4405,13 @@ get_mm_leaf(PARAM *param, COND *conf_func, Field *field, KEY_PART *key_part, field->type() == FIELD_TYPE_DATETIME)) field->table->in_use->variables.sql_mode|= MODE_INVALID_DATES; err= value->save_in_field_no_warnings(field, 1); if (err > 0 && field->cmp_type() != value->result_type()) if (err > 0) { if (field->cmp_type() != value->result_type()) { if ((type == Item_func::EQ_FUNC || type == Item_func::EQUAL_FUNC) && value->result_type() == item_cmp_type(field->result_type(), value->result_type())) { tree= new (alloc) SEL_ARG(field, 0, 0); tree->type= SEL_ARG::IMPOSSIBLE; Loading Loading @@ -4450,7 +4451,24 @@ get_mm_leaf(PARAM *param, COND *conf_func, Field *field, KEY_PART *key_part, goto end; } } if (err < 0) /* guaranteed at this point: err > 0; field and const of same type If an integer got bounded (e.g. to within 0..255 / -128..127) for < or >, set flags as for <= or >= (no NEAR_MAX / NEAR_MIN) */ else if (err == 1 && field->result_type() == INT_RESULT) { if (type == Item_func::LT_FUNC && (value->val_int() > 0)) type = Item_func::LE_FUNC; else if (type == Item_func::GT_FUNC && !((Field_num*)field)->unsigned_flag && !((Item_int*)value)->unsigned_flag && (value->val_int() < 0)) type = Item_func::GE_FUNC; } } else if (err < 0) { field->table->in_use->variables.sql_mode= orig_sql_mode; /* This happens when we try to insert a NULL field in a not null column */ Loading