Mysql UDF

Mysql UDF (User-Defined Function Interface),可以用于Mysql功能扩展。
一般来说使用C/C++实现。


    这里实现一个名字为fx_msg的function.
主要功能是开启一个线程进行监听sockt连接,
当调用此函数时将指定的消息发送到socket连接上.


select FX_MSG(CMD[,PARM1,PARM2...]);

初始化 FX_MSG 监听环境
CMD:INIT PARM:int MAX_Conn , int PORT

关闭所有连接,关才监听
CMD:CLOSE

查看当前连接Client信息
CMD:LISTCLIENT

查看当前版本信息
CMD:VERSION

还设想了一些功能,懒得做了。。。
.....

 

 

布置开发环境.
不喜欢 M$ 的 VC (也是不太会用)(-:
还是用eclipse习惯。哈哈。。。。

呵呵,操作系统还是比较习惯用XP.....


eclipse 3.3 CDT 用来起还是相当不
错(-: .  不过它只是一个编辑器,
不具备编译功能。

download cygwin 做为cygwin编译器.
注意安装的时候要 选中 开发工具中
的 gcc / g++ 等。

要做mysql的UDF当然需要mysql的一些
头文件 ,去mysql.com下载mysql的原
码包。 解开,里面有个include目录。
使用这个就可以了。
不过我使用的时候里面有几个和mysql
版本号相关的预编译宏编译不过,不知道
为啥了,手动处理一下。该删的删,该改
的改。

 

闲话少说,动手:

A. eclipse 新建一个Shared Library工程 。
呵呵,别建搞错了。默认可不是这个(-:

B.选择工具链:Cygwin GCC

C.Project Properties中把mysql的include包含进来

原代码:

时间紧任务急,大概的功能可能实现了.


以上 代码在
root@fes-middle01 so]# gcc --version
gcc (GCC) 3.4.6 20060404 (Red Hat 3.4.6-3)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[root@fes-middle01 mysql]# bin/mysql -uroot -pskywest
Welcome to the MySQL monitor.  Commands end with ; or /g.
Your MySQL connection id is 3 to server version: 5.0.22-max

中编译运行通过.

 


编译方法:
gcc -I. -O0 -g3 -Wall -c -fmessage-length=0 -ofxmsg.o fxmsg.c
gcc -I. -O0 -g3 -Wall -c -fmessage-length=0 -ocmd_close.o cmd_close.c
gcc -I. -O0 -g3 -Wall -c -fmessage-length=0 -ocmd_init.o cmd_init.c
gcc -I. -O0 -g3 -Wall -c -fmessage-length=0 -ocmd_send.o cmd_send.c
gcc -I. -O0 -g3 -Wall -c -fmessage-length=0 -otools.o tools.c
gcc -shared -oFXMSG.so fxmsg.o cmd_send.o cmd_init.o cmd_close.o tools.o

将生成的so文件放到 /usr/lib中
cp FXMSG.so /usr/lib

建立 fx_msg function.
CREATE FUNCTION fx_msg RETURNS STRING SONAME ; FXMSG.so;

删除时候用:
DROP FUNCTION fx_msg;

posted on 2008-07-18 11:38  天之南  阅读(617)  评论(0)    收藏  举报

导航