Windows上的MySQL UDF開發(fā)
2024-07-24 12:54:49
供稿:網友
曾以為windows版本的mysql存在不能使用udf的bug諸提交了一個bug報告。不過
似乎發(fā)現是我搞錯了,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++,源碼分發(fā),并且有一個正常運行的mysql服務器。
我將創(chuàng)建一個udf它將一個名字:
注意:例子非常簡陋,目的是讓你了解該如何處理手頭的udf。
- 打開 mysqld.dsw 工作區(qū)。
- 添加新項目到這個工作區(qū)
- project name: my_udf // 項目名稱:my_udf
- 選擇 win32 dynamic-link library // win32動態(tài)連接庫
- 點擊 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 來創(chuàng)建一個新文件。
- 選擇 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 到環(huán)境變量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板準備開始系統(tǒng)化持續(xù)性翻譯mysql文檔,
希望大家多多支持共同完成這一項目。
hearticy
2003年5月17日于中國濟南
本文來源于網頁設計愛好者web開發(fā)社區(qū)http://www.html.org.cn收集整理,歡迎訪問。