Hello, 

I'm trying to build a UDF for MySQL 4.1.12. I'm running on Linux 
(FedoraFC1). My UDF function seemed to blow up the server so I went to the 
source and tried to build udf_example.cc. 

Using the precompiled binaries for Linux and using the source distribution 
for the same version (4.1.12) I was unable to build udf_example.cc as a 
shared object (I followed the instructions in the source -- they didnt work 
so I used what seemed to make the most sense for building my object). When 
building the shared object the compiler spits out a warning from 
asm/atomic.h (#warning Using kernel header in userland program. BAD!)

I'm using gcc version 3.3.2 20031022 (Red Hat Linux 3.3.2-1) on a Fedore 
Core 1 machine. I built the shared object with gcc -I/usr/include/mysql 
-shared -o udf_example.so udf_example.cc

When attempting to load a new function with the mysql cli client the client 
complains that the server has gone away and reconnects with connection id of 
1. Nothing is listed in mysql.funcs either. 

There needs to be better documentation of the process for building UDF's.

The code I need to run can be run nicely by MySQL but I can't declare a 
stored function as documented. The stored function is fairly simple: 

DELIMITER //

CREATE FUNCTION distance(z1 VARCHAR(10), z2 VARCHAR(10)) RETURNS REAL
BEGIN
DECLARE x REAL;
DECLARE y REAL;
DECALRE miles REAL;
SET x = 69.1*(lat - lat2);
SET y = 69.1*(lon1 - lon2) * COS(lon1*57.3);
SET miles = SQRT(x*x+y*y);
RETURN miles;
END
//

The mysql client spits back :
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual 
that corresponds to your MySQL server version for the right syntax to use 
near '(z1 VARCHAR(10), z2 VARCHAR(10)) RETURNS REAL

Using the example given in the documentation I get: 

mysql> CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50)
-> RETURN CONCAT('Hello, ',s,'!');
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual 
that corresponds to your MySQL server version for the right syntax to use 
near '(s CHAR(20)) RETURNS CHAR(50)
RETURN CONCAT('Hello, ',s,'!')' at line 1


DELIMITER ;
//

Can someone elucidate the mystery of either stored functions or UDF's? 

Thanks, in advance, 
Nic


-- 
Nic Stevens - [EMAIL PROTECTED]

Reply via email to