Windows上的MySQL UDF开发
2024-07-24 12:54:49
供稿:网友
曾以为windows版本的mysql存在不能使用udf的bug诸提交了一个bug报告。不过
似乎发现是我搞错了,mysql的技术支持人员给了非常完美的解答,同大家分享
一下。下边是原文回复 :)
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 ystem32 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)
画蛇添足的作下简要中文说明。
抱歉,这并不是一个bug。下面我粘贴一个以前为某个客户做的简例,假设你有了
vc++,源码分发,并且有一个正常运行的mysql服务器。
我将创建一个udf它将一个名字:
注意:例子非常简陋,目的是让你了解该如何处理手头的udf。
- 打开 mysqld.dsw 工作区。
- 添加新项目到这个工作区
- project name: my_udf // 项目名称:my_udf
- 选择 win32 dynamic-link library // win32动态连接库
- 点击 ok
- 选择 an empty dll project // 一个空dll项目
- 点击 finish
- 点击 ok
- 添加新文件 my_udf.cpp 到项目中:
#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);
// 兼容c
}
char *my_name(udf_init *initid, udf_args *args, char *is_null,
char *error)
{
char * me = "my name";
return me;
// 调用此udf将返回 my name
}
- 按 ctrl+n 来创建一个新文件。
- 选择 text 类型
- file name: my_udf.def file://文件名:my_udf.def
- 按照下边的内容编辑文件。
library udf_example
description 'example using udf with vc++'
version 1.0
exports
my_name
- 右击my_udf项目并选择settings
- 点 c/c++ 选项卡
- 选择 general
- 添加宏 have_dlope 到预处理器定义
- 选择 preprocessor
- 添加头文件路径: additional include directories
例如: ../include
- 按 f7 去编译成 dll.
- 复制 my_udf.dll 到环境变量path定义过的目录
比如 /winnt ystem32 。
- 打开mysql客户端
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)
ok!欢迎大家来mysql板交流udf设计经验!我的电子邮件是[email protected],
手机13706410308。同时,我们mysql板准备开始系统化持续性翻译mysql文档,
希望大家多多支持共同完成这一项目。
hearticy
2003年5月17日于中国济南
本文来源于网页设计爱好者web开发社区http://www.html.org.cn收集整理,欢迎访问。