In the last episode (Nov 04), Stefan Kuhn said: > I have a weired (for me at least) problem with a user defined function, > written in C. The function seems to return different results in different > runs (the code of the function does not contain random elements). > Basically, the function calculates a score based on a column in a table > and an input value. So I do something like this: > > select * from table order by udf(column, 'input_value') desc; > > For my understanding, this should give the same result always. But if I > run many statements (execution is from a java program and I can do it in > parallel threads) so that they overlap (the udf on a large table takes > 5-10 s on a slow machine), the results of some queries are different. If > I have enough time between statements, it seems to work, i. e. the > result is always the same. I would have thought the statements are > independent, even if executed on different jdbc connections in parallel. > > Does somebody have an idea? Or could somebody give an idea on debugging? > Normally I would try to debug the code to see what goes on, but how can I > do this in a udf? Can I log in the udf?
The first thing I would do is examine your UDF and ensure that it is thread-safe. No global variables, no static variables within functions, etc. Also make sure that any libc functions you call that are documented as non-threadsafe are wrapped by a mutex or otherwise protected against multiple simultaneous access. http://dev.mysql.com/doc/refman/5.5/en/adding-udf.html As for debugging, you should be able to write things to stderr which will show up in the mysql logfile, or you could open your own logfile and write to that. -- Dan Nelson dnel...@allantgroup.com -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/mysql