mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
Bug#18761: constant expression as UDF parameters not passed in as constant
The code that set up data to be passed to user-defined functions was very old and analyzed the "Type" of the data that was passed into the UDF, when it really should analyze the "return_type", which is hard-coded for simple Items and works correctly for complex ones like functions. --- Added test at Sergei's behest.
This commit is contained in:
@@ -115,3 +115,38 @@ DROP FUNCTION sequence;
|
||||
DROP FUNCTION lookup;
|
||||
DROP FUNCTION reverse_lookup;
|
||||
DROP FUNCTION avgcost;
|
||||
CREATE FUNCTION is_const RETURNS STRING SONAME "UDF_EXAMPLE_LIB";
|
||||
select
|
||||
is_const(3) as const,
|
||||
is_const(3.14) as const,
|
||||
is_const('fnord') as const,
|
||||
is_const(2+3) as const,
|
||||
is_const(rand()) as 'nc rand()',
|
||||
is_const(sin(3.14)) as const,
|
||||
is_const(upper('test')) as const;
|
||||
const const const const nc rand() const const
|
||||
const const const const not const const const
|
||||
create table bug18761 (n int);
|
||||
insert into bug18761 values (null),(2);
|
||||
select
|
||||
is_const(3) as const,
|
||||
is_const(3.14) as const,
|
||||
is_const('fnord') as const,
|
||||
is_const(2+3) as const,
|
||||
is_const(2+n) as 'nc 2+n ',
|
||||
is_const(sin(n)) as 'nc sin(n)',
|
||||
is_const(sin(3.14)) as const,
|
||||
is_const(upper('test')) as const,
|
||||
is_const(rand()) as 'nc rand()',
|
||||
is_const(n) as 'nc n ',
|
||||
is_const(is_const(n)) as 'nc ic?(n)',
|
||||
is_const(is_const('c')) as const
|
||||
from
|
||||
bug18761;
|
||||
const const const const nc 2+n nc sin(n) const const nc rand() nc n nc ic?(n) const
|
||||
const const const const not const not const const const not const not const not const const
|
||||
const const const const not const not const const const not const not const not const const
|
||||
drop table bug18761;
|
||||
select is_const((1,2,3));
|
||||
ERROR 21000: Operand should contain 1 column(s)
|
||||
drop function if exists is_const;
|
||||
|
||||
Reference in New Issue
Block a user