1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

MDEV-13964 Parameter data type control for Item_real_func

This commit is contained in:
Alexander Barkov
2017-09-29 20:14:55 +04:00
parent 7131a0a803
commit dc41bc14e0
3 changed files with 198 additions and 0 deletions

View File

@ -4668,5 +4668,92 @@ ERROR HY000: Illegal parameter data type varchar for operation 'st_touches'
SELECT MBRTOUCHES(POINT(1,1), 'test'); SELECT MBRTOUCHES(POINT(1,1), 'test');
ERROR HY000: Illegal parameter data type varchar for operation 'st_touches' ERROR HY000: Illegal parameter data type varchar for operation 'st_touches'
# #
# MDEV-13964 Parameter data type control for Item_real_func
#
SELECT EXP(POINT(1,1));
ERROR HY000: Illegal parameter data type geometry for operation 'exp'
SELECT LN(POINT(1,1));
ERROR HY000: Illegal parameter data type geometry for operation 'ln'
SELECT LOG2(POINT(1,1));
ERROR HY000: Illegal parameter data type geometry for operation 'log2'
SELECT LOG10(POINT(1,1));
ERROR HY000: Illegal parameter data type geometry for operation 'log10'
SELECT SQRT(POINT(1,1));
ERROR HY000: Illegal parameter data type geometry for operation 'sqrt'
SELECT ACOS(POINT(1,1));
ERROR HY000: Illegal parameter data type geometry for operation 'acos'
SELECT ASIN(POINT(1,1));
ERROR HY000: Illegal parameter data type geometry for operation 'asin'
SELECT COS(POINT(1,1));
ERROR HY000: Illegal parameter data type geometry for operation 'cos'
SELECT SIN(POINT(1,1));
ERROR HY000: Illegal parameter data type geometry for operation 'sin'
SELECT TAN(POINT(1,1));
ERROR HY000: Illegal parameter data type geometry for operation 'tan'
SELECT COT(POINT(1,1));
ERROR HY000: Illegal parameter data type geometry for operation 'cot'
SELECT LOG(POINT(1,1));
ERROR HY000: Illegal parameter data type geometry for operation 'log'
SELECT LOG(POINT(1,1),POINT(1,1));
ERROR HY000: Illegal parameter data type geometry for operation 'log'
SELECT LOG(1, POINT(1,1));
ERROR HY000: Illegal parameter data type geometry for operation 'log'
SELECT ATAN(POINT(1,1));
ERROR HY000: Illegal parameter data type geometry for operation 'atan'
SELECT ATAN(POINT(1,1),POINT(1,1));
ERROR HY000: Illegal parameter data type geometry for operation 'atan'
SELECT ATAN(1, POINT(1,1));
ERROR HY000: Illegal parameter data type geometry for operation 'atan'
SELECT POW(POINT(1,1),POINT(1,1));
ERROR HY000: Illegal parameter data type geometry for operation 'pow'
SELECT RAND(POINT(1,1));
ERROR HY000: Illegal parameter data type geometry for operation 'rand'
SELECT RADIANS(POINT(1,1));
ERROR HY000: Illegal parameter data type geometry for operation 'radians'
SELECT DEGREES(POINT(1,1));
ERROR HY000: Illegal parameter data type geometry for operation 'degrees'
SELECT EXP(ROW(1,1));
ERROR HY000: Illegal parameter data type row for operation 'exp'
SELECT LN(ROW(1,1));
ERROR HY000: Illegal parameter data type row for operation 'ln'
SELECT LOG2(ROW(1,1));
ERROR HY000: Illegal parameter data type row for operation 'log2'
SELECT LOG10(ROW(1,1));
ERROR HY000: Illegal parameter data type row for operation 'log10'
SELECT SQRT(ROW(1,1));
ERROR HY000: Illegal parameter data type row for operation 'sqrt'
SELECT ACOS(ROW(1,1));
ERROR HY000: Illegal parameter data type row for operation 'acos'
SELECT ASIN(ROW(1,1));
ERROR HY000: Illegal parameter data type row for operation 'asin'
SELECT COS(ROW(1,1));
ERROR HY000: Illegal parameter data type row for operation 'cos'
SELECT SIN(ROW(1,1));
ERROR HY000: Illegal parameter data type row for operation 'sin'
SELECT TAN(ROW(1,1));
ERROR HY000: Illegal parameter data type row for operation 'tan'
SELECT COT(ROW(1,1));
ERROR HY000: Illegal parameter data type row for operation 'cot'
SELECT LOG(ROW(1,1));
ERROR HY000: Illegal parameter data type row for operation 'log'
SELECT LOG(ROW(1,1),ROW(1,1));
ERROR HY000: Illegal parameter data type row for operation 'log'
SELECT LOG(1, ROW(1,1));
ERROR HY000: Illegal parameter data type row for operation 'log'
SELECT ATAN(ROW(1,1));
ERROR HY000: Illegal parameter data type row for operation 'atan'
SELECT ATAN(ROW(1,1),ROW(1,1));
ERROR HY000: Illegal parameter data type row for operation 'atan'
SELECT ATAN(1, ROW(1,1));
ERROR HY000: Illegal parameter data type row for operation 'atan'
SELECT POW(ROW(1,1),ROW(1,1));
ERROR HY000: Illegal parameter data type row for operation 'pow'
SELECT RAND(ROW(1,1));
ERROR HY000: Illegal parameter data type row for operation 'rand'
SELECT RADIANS(ROW(1,1));
ERROR HY000: Illegal parameter data type row for operation 'radians'
SELECT DEGREES(ROW(1,1));
ERROR HY000: Illegal parameter data type row for operation 'degrees'
#
# End of 10.3 tests # End of 10.3 tests
# #

View File

@ -2689,6 +2689,111 @@ SELECT MBRTOUCHES('test', POINT(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION --error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT MBRTOUCHES(POINT(1,1), 'test'); SELECT MBRTOUCHES(POINT(1,1), 'test');
--echo #
--echo # MDEV-13964 Parameter data type control for Item_real_func
--echo #
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT EXP(POINT(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT LN(POINT(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT LOG2(POINT(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT LOG10(POINT(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT SQRT(POINT(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT ACOS(POINT(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT ASIN(POINT(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT COS(POINT(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT SIN(POINT(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT TAN(POINT(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT COT(POINT(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT LOG(POINT(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT LOG(POINT(1,1),POINT(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT LOG(1, POINT(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT ATAN(POINT(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT ATAN(POINT(1,1),POINT(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT ATAN(1, POINT(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT POW(POINT(1,1),POINT(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT RAND(POINT(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT RADIANS(POINT(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT DEGREES(POINT(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT EXP(ROW(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT LN(ROW(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT LOG2(ROW(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT LOG10(ROW(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT SQRT(ROW(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT ACOS(ROW(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT ASIN(ROW(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT COS(ROW(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT SIN(ROW(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT TAN(ROW(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT COT(ROW(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT LOG(ROW(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT LOG(ROW(1,1),ROW(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT LOG(1, ROW(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT ATAN(ROW(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT ATAN(ROW(1,1),ROW(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT ATAN(1, ROW(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT POW(ROW(1,1),ROW(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT RAND(ROW(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT RADIANS(ROW(1,1));
--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
SELECT DEGREES(ROW(1,1));
--echo # --echo #
--echo # End of 10.3 tests --echo # End of 10.3 tests
--echo # --echo #

View File

@ -1178,6 +1178,8 @@ public:
class Item_dec_func :public Item_real_func class Item_dec_func :public Item_real_func
{ {
bool check_arguments() const
{ return check_argument_types_can_return_real(0, arg_count); }
public: public:
Item_dec_func(THD *thd, Item *a): Item_real_func(thd, a) {} Item_dec_func(THD *thd, Item *a): Item_real_func(thd, a) {}
Item_dec_func(THD *thd, Item *a, Item *b): Item_real_func(thd, a, b) {} Item_dec_func(THD *thd, Item *a, Item *b): Item_real_func(thd, a, b) {}
@ -1403,6 +1405,8 @@ class Item_func_rand :public Item_real_func
{ {
struct my_rnd_struct *rand; struct my_rnd_struct *rand;
bool first_eval; // TRUE if val_real() is called 1st time bool first_eval; // TRUE if val_real() is called 1st time
bool check_arguments() const
{ return check_argument_types_can_return_int(0, arg_count); }
public: public:
Item_func_rand(THD *thd, Item *a): Item_func_rand(THD *thd, Item *a):
Item_real_func(thd, a), rand(0), first_eval(TRUE) {} Item_real_func(thd, a), rand(0), first_eval(TRUE) {}
@ -1441,6 +1445,8 @@ class Item_func_units :public Item_real_func
{ {
char *name; char *name;
double mul,add; double mul,add;
bool check_arguments() const
{ return check_argument_types_can_return_real(0, arg_count); }
public: public:
Item_func_units(THD *thd, char *name_arg, Item *a, double mul_arg, Item_func_units(THD *thd, char *name_arg, Item *a, double mul_arg,
double add_arg): double add_arg):