mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
Bug #30355: Incorrect ordering of UDF results
There's currently no way of knowing the determinicity of an UDF. And the optimizer and the sequence() UDFs were making wrong assumptions about what the is_const member means. Plus there was no implementation of update_system_tables() causing the optimizer to overwrite the information returned by the <udf>_init function. Fixed by equating the assumptions about the semantics of is_const and providing a implementation of update_used_tables(). Added a TODO item for the UDF API change needed to make a better implementation.
This commit is contained in:
@ -648,13 +648,11 @@ my_bool sequence_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
|
||||
return 1;
|
||||
}
|
||||
bzero(initid->ptr,sizeof(longlong));
|
||||
/*
|
||||
Fool MySQL to think that this function is a constant
|
||||
This will ensure that MySQL only evalutes the function
|
||||
when the rows are sent to the client and not before any ORDER BY
|
||||
clauses
|
||||
/*
|
||||
sequence() is a non-deterministic function : it has different value
|
||||
even if called with the same arguments.
|
||||
*/
|
||||
initid->const_item=1;
|
||||
initid->const_item=0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user