Bug #334 | UDF can't work | ||
---|---|---|---|
Submitted: | 27 Apr 2003 0:17 | Modified: | 16 May 2003 18:16 |
Reporter: | Meng Wang | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: User-defined functions ( UDF ) | Severity: | S4 (Feature request) |
Version: | 4.0.12 / 4.1.0 | OS: | Windows (windows 2000 / XP) |
Assigned to: | CPU Architecture: | Any |
[27 Apr 2003 0:17]
Meng Wang
[16 May 2003 18:16]
MySQL Verification Team
Sorry this isn't a bug. Below I pasted a sample I did sometime ago for another user: Ok. Assuming you have VC++ and the source distribution and a server running, I will create a UDF that returns a name: Note: the sample is ugly, but the purpose here is to show you how to handle the UDF. - Open the mysqld.dsw workspace. - Add New project to the workspace - Project name: my_udf - Select Win32 Dynamic-Link Library - Click OK - Select An Empty DLL project - Click Finish - Click OK - Add a new file called my_udf.cpp to the project: #include <stdlib.h> #include <winsock.h> #include <mysql.h> extern "C" { char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error); } char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) { char * me = "my name"; return me; } - Type Ctrl+N for to create a new file. - Select text type - File name: my_udf.def - Edit the above file with the below contents: LIBRARY UDF_EXAMPLE DESCRIPTION 'Example Using UDF with VC++' VERSION 1.0 EXPORTS my_name - Right Click the my_udf project and select Settings - Click the C/C++ tab - Select General in the Category Combo - Add the macro HAVE_DLOPEN to the PreProcessor definition - Select Preprocessor in the Category Combo - Add the include path to the text box: Additional Include directories e.g: ../include - Press F7 for to build the DLL. - Copy the my_udf.dll to the environment path directory: \winnt\system32 for example. - Start the mysql client and issue: C:\mysql-udf\bin>mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 to server version: 3.23.52-max-nt Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> CREATE FUNCTION my_name RETURNS STRING SONAME "my_udf.dll"; Query OK, 0 rows affected (0.08 sec) mysql> select my_name(); mysql> drop function my_name; Query OK, 0 rows affected (0.00 sec)