mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 04:22:27 +01:00
Bug #6172 RAND(a) should only accept constant values as arguments(2nd version)
Argument of RAND function can be constant value only
This commit is contained in:
parent
f53de1f247
commit
61a5fac1cc
5 changed files with 43 additions and 28 deletions
|
@ -140,3 +140,8 @@ drop table t1;
|
||||||
select abs(-2) * -2;
|
select abs(-2) * -2;
|
||||||
abs(-2) * -2
|
abs(-2) * -2
|
||||||
-4
|
-4
|
||||||
|
create table t1 (i int);
|
||||||
|
insert into t1 values (1);
|
||||||
|
select rand(i) from t1;
|
||||||
|
ERROR HY000: Incorrect arguments to RAND
|
||||||
|
drop table t1;
|
||||||
|
|
|
@ -334,39 +334,37 @@ create table t1 (a int);
|
||||||
insert into t1 (a) values (1), (2), (3), (4);
|
insert into t1 (a) values (1), (2), (3), (4);
|
||||||
set @precision=10000000000;
|
set @precision=10000000000;
|
||||||
select rand(),
|
select rand(),
|
||||||
cast(rand(10)*@precision as unsigned integer),
|
cast(rand(10)*@precision as unsigned integer) from t1;
|
||||||
cast(rand(a)*@precision as unsigned integer) from t1;
|
rand() cast(rand(10)*@precision as unsigned integer)
|
||||||
rand() cast(rand(10)*@precision as unsigned integer) cast(rand(a)*@precision as unsigned integer)
|
- 6570515219
|
||||||
|
- 1282061302
|
||||||
|
- 6698761160
|
||||||
|
- 9647622201
|
||||||
|
prepare stmt from
|
||||||
|
"select rand(),
|
||||||
|
cast(rand(10)*@precision as unsigned integer),
|
||||||
|
cast(rand(?)*@precision as unsigned integer) from t1";
|
||||||
|
set @var=1;
|
||||||
|
execute stmt using @var;
|
||||||
|
rand() cast(rand(10)*@precision as unsigned integer) cast(rand(?)*@precision as unsigned integer)
|
||||||
- 6570515219 -
|
- 6570515219 -
|
||||||
- 1282061302 -
|
- 1282061302 -
|
||||||
- 6698761160 -
|
- 6698761160 -
|
||||||
- 9647622201 -
|
- 9647622201 -
|
||||||
prepare stmt from
|
|
||||||
"select rand(),
|
|
||||||
cast(rand(10)*@precision as unsigned integer),
|
|
||||||
cast(rand(a)*@precision as unsigned integer),
|
|
||||||
cast(rand(?)*@precision as unsigned integer) from t1";
|
|
||||||
set @var=1;
|
|
||||||
execute stmt using @var;
|
|
||||||
rand() cast(rand(10)*@precision as unsigned integer) cast(rand(a)*@precision as unsigned integer) cast(rand(?)*@precision as unsigned integer)
|
|
||||||
- 6570515219 - 4054035371
|
|
||||||
- 1282061302 - 8716141803
|
|
||||||
- 6698761160 - 1418603212
|
|
||||||
- 9647622201 - 944590960
|
|
||||||
set @var=2;
|
set @var=2;
|
||||||
execute stmt using @var;
|
execute stmt using @var;
|
||||||
rand() cast(rand(10)*@precision as unsigned integer) cast(rand(a)*@precision as unsigned integer) cast(rand(?)*@precision as unsigned integer)
|
rand() cast(rand(10)*@precision as unsigned integer) cast(rand(?)*@precision as unsigned integer)
|
||||||
- 6570515219 1559528654 6555866465
|
- 6570515219 6555866465
|
||||||
- 1282061302 6238114970 1223466192
|
- 1282061302 1223466192
|
||||||
- 6698761160 6511989195 6449731873
|
- 6698761160 6449731873
|
||||||
- 9647622201 3845601374 8578261098
|
- 9647622201 8578261098
|
||||||
set @var=3;
|
set @var=3;
|
||||||
execute stmt using @var;
|
execute stmt using @var;
|
||||||
rand() cast(rand(10)*@precision as unsigned integer) cast(rand(a)*@precision as unsigned integer) cast(rand(?)*@precision as unsigned integer)
|
rand() cast(rand(10)*@precision as unsigned integer) cast(rand(?)*@precision as unsigned integer)
|
||||||
- 6570515219 1559528654 9057697559
|
- 6570515219 9057697559
|
||||||
- 1282061302 6238114970 3730790581
|
- 1282061302 3730790581
|
||||||
- 6698761160 6511989195 1480860534
|
- 6698761160 1480860534
|
||||||
- 9647622201 3845601374 6211931236
|
- 9647622201 6211931236
|
||||||
drop table t1;
|
drop table t1;
|
||||||
deallocate prepare stmt;
|
deallocate prepare stmt;
|
||||||
create database mysqltest1;
|
create database mysqltest1;
|
||||||
|
|
|
@ -77,4 +77,13 @@ drop table t1;
|
||||||
#
|
#
|
||||||
select abs(-2) * -2;
|
select abs(-2) * -2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #6172 RAND(a) should only accept constant values as arguments
|
||||||
|
#
|
||||||
|
create table t1 (i int);
|
||||||
|
insert into t1 values (1);
|
||||||
|
--error 1210
|
||||||
|
select rand(i) from t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
|
@ -368,12 +368,10 @@ insert into t1 (a) values (1), (2), (3), (4);
|
||||||
set @precision=10000000000;
|
set @precision=10000000000;
|
||||||
--replace_column 1 - 3 -
|
--replace_column 1 - 3 -
|
||||||
select rand(),
|
select rand(),
|
||||||
cast(rand(10)*@precision as unsigned integer),
|
cast(rand(10)*@precision as unsigned integer) from t1;
|
||||||
cast(rand(a)*@precision as unsigned integer) from t1;
|
|
||||||
prepare stmt from
|
prepare stmt from
|
||||||
"select rand(),
|
"select rand(),
|
||||||
cast(rand(10)*@precision as unsigned integer),
|
cast(rand(10)*@precision as unsigned integer),
|
||||||
cast(rand(a)*@precision as unsigned integer),
|
|
||||||
cast(rand(?)*@precision as unsigned integer) from t1";
|
cast(rand(?)*@precision as unsigned integer) from t1";
|
||||||
set @var=1;
|
set @var=1;
|
||||||
--replace_column 1 - 3 -
|
--replace_column 1 - 3 -
|
||||||
|
|
|
@ -1038,6 +1038,11 @@ bool Item_func_rand::fix_fields(THD *thd, struct st_table_list *tables,
|
||||||
used_tables_cache|= RAND_TABLE_BIT;
|
used_tables_cache|= RAND_TABLE_BIT;
|
||||||
if (arg_count)
|
if (arg_count)
|
||||||
{ // Only use argument once in query
|
{ // Only use argument once in query
|
||||||
|
if (!args[0]->const_during_execution())
|
||||||
|
{
|
||||||
|
my_error(ER_WRONG_ARGUMENTS, MYF(0), "RAND");
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
Allocate rand structure once: we must use thd->current_arena
|
Allocate rand structure once: we must use thd->current_arena
|
||||||
to create rand in proper mem_root if it's a prepared statement or
|
to create rand in proper mem_root if it's a prepared statement or
|
||||||
|
|
Loading…
Reference in a new issue