diff options
author | unknown <svoj@poseidon.ndb.mysql.com> | 2005-11-06 13:13:06 +0100 |
---|---|---|
committer | unknown <svoj@poseidon.ndb.mysql.com> | 2005-11-06 13:13:06 +0100 |
commit | 66002e452d7d12e1b8f5ebf720d01a0e0aed8c96 (patch) | |
tree | 593a4ed5caa4dcceddc324b221fd0228343c9c4a /sql/sql_udf.cc | |
parent | dbfe5a961ff419d8b515532cb1008ede6f6c6d69 (diff) | |
download | mariadb-git-66002e452d7d12e1b8f5ebf720d01a0e0aed8c96.tar.gz |
WL#2575 - Fulltext: Parser plugin for FTS
WL#2763 - MySQL plugin interface: step 1
Manual merge from CNET tree.
include/ft_global.h:
Default parser added.
include/my_global.h:
dlopen related code moved from sql_udf.cc into my_global.h
include/myisam.h:
Added fulltext parser to MI_KEYDEF
libmysqld/Makefile.am:
Added LIBDIR macro.
mysql-test/r/connect.result:
Test result fixed: added plugin table
mysql-test/r/information_schema.result:
Test result fixed: added plugin table.
mysql-test/r/mysqlcheck.result:
Test result fixed: added plugin table.
mysql-test/r/system_mysql_db.result:
Test fixed: added plugin table
mysql-test/t/system_mysql_db_fix.test:
Test fixed: added plugin table
scripts/mysql_create_system_tables.sh:
Added mysql.plugin table.
scripts/mysql_fix_privilege_tables.sql:
Added mysql.plugin table.
sql/Makefile.am:
Added LIBDIR macro.
sql/ha_myisam.cc:
Pass fulltext parser from sql to myisam layer.
sql/lex.h:
Plugin related symbols.
sql/mysqld.cc:
Initialize/deinitialize plugins, pass opt_plugin_dir.
plugin-dir renamed to plugin_dir.
plugin_dir is relative to mysql_home now.
sql/set_var.cc:
plugin_dir added to SHOW VARIABLES.
sql/share/errmsg.txt:
Plugin related error messages.
sql/sql_class.h:
Added parser to Key class.
Hold parser_name instead of plugin in Key class.
sql/sql_lex.h:
INSTALL/UNINSTALL PLUGIN commands.
sql/sql_parse.cc:
INSTALL/UNINSTALL PLUGIN commands.
sql/sql_show.cc:
SHOW CREATE TABLE: output parser name if index was created WITH PARSER.
sql/sql_table.cc:
Pass fulltext parser from yacc to sql layer.
sql/sql_udf.cc:
dlopen related code moved into my_global.h.
Implemented better check for UDF path.
UDF loads libraries that are under plugin_dir now.
sql/sql_yacc.yy:
INSTALL/UNINSTALL PLUGIN syntax.
Added WITH PARSER syntax to CREATE/ALTER TABLE/INDEX.
opt_fulltext_parser must allocate memory, since it will be used afterwards.
sql/table.cc:
Save/restore fulltext parser in extra data segment.
Added DBUG_PRINTs.
storage/myisam/ft_boolean_search.c:
Split functions so they can be used by fulltext parser.
Use fulltext parser if specified.
storage/myisam/ft_nlq_search.c:
Use fulltext parser.
storage/myisam/ft_parser.c:
Split functions so they can be used by fulltext parser.
Use fulltext parser if specified.
storage/myisam/ft_static.c:
Default fulltext parser added.
storage/myisam/ft_update.c:
Use fulltext parser.
storage/myisam/ftdefs.h:
FTB_PARAM moved into plugin.h and renamed to MYSQL_FTPARSER_BOOLEAN_INFO.
storage/myisam/mi_open.c:
Set default parser.
Diffstat (limited to 'sql/sql_udf.cc')
-rw-r--r-- | sql/sql_udf.cc | 51 |
1 files changed, 17 insertions, 34 deletions
diff --git a/sql/sql_udf.cc b/sql/sql_udf.cc index 726dcbb3541..2b98bbdaa9e 100644 --- a/sql/sql_udf.cc +++ b/sql/sql_udf.cc @@ -38,36 +38,10 @@ #ifdef HAVE_DLOPEN extern "C" { -#if defined(__WIN__) - void* dlsym(void* lib,const char* name) - { - return GetProcAddress((HMODULE)lib,name); - } - void* dlopen(const char* libname,int unused) - { - return LoadLibraryEx(libname,NULL,0); - } - void dlclose(void* lib) - { - FreeLibrary((HMODULE)lib); - } - -#elif !defined(OS2) -#include <dlfcn.h> -#endif - #include <stdarg.h> #include <hash.h> } -#ifndef RTLD_NOW -#define RTLD_NOW 1 // For FreeBSD 2.2.2 -#endif - -#ifndef HAVE_DLERROR -#define dlerror() "" -#endif - static bool initialized = 0; static MEM_ROOT mem; static HASH udf_hash; @@ -194,8 +168,10 @@ void udf_init() This is done to ensure that only approved dll from the system directories are used (to make this even remotely secure). */ - if (strchr(dl_name, '/') || - IF_WIN(strchr(dl_name, '\\'),0) || + if (my_strchr(files_charset_info, dl_name, + dl_name + strlen(dl_name), '/') || + IF_WIN(my_strchr(files_charset_info, dl_name, + dl_name + strlen(dl_name), '\\'),0) || strlen(name.str) > NAME_LEN) { sql_print_error("Invalid row in mysql.func table for function '%.64s'", @@ -214,10 +190,13 @@ void udf_init() void *dl = find_udf_dl(tmp->dl); if (dl == NULL) { - if (!(dl = dlopen(tmp->dl, RTLD_NOW))) + char dlpath[FN_REFLEN]; + strxnmov(dlpath, sizeof(dlpath) - 1, opt_plugin_dir, "/", tmp->dl, + NullS); + if (!(dl= dlopen(dlpath, RTLD_NOW))) { /* Print warning to log */ - sql_print_error(ER(ER_CANT_OPEN_LIBRARY), tmp->dl,errno,dlerror()); + sql_print_error(ER(ER_CANT_OPEN_LIBRARY), dlpath, errno, dlerror()); /* Keep the udf in the hash so that we can remove it later */ continue; } @@ -412,7 +391,9 @@ int mysql_create_function(THD *thd,udf_func *udf) This is done to ensure that only approved dll from the system directories are used (to make this even remotely secure). */ - if (strchr(udf->dl, '/') || IF_WIN(strchr(udf->dl, '\\'),0)) + if (my_strchr(files_charset_info, udf->dl, udf->dl + strlen(udf->dl), '/') || + IF_WIN(strchr(files_charset_info, udf->dl, + udf->dl + strlen(udf->dl), '\\'),0)) { my_message(ER_UDF_NO_PATHS, ER(ER_UDF_NO_PATHS), MYF(0)); DBUG_RETURN(1); @@ -431,12 +412,14 @@ int mysql_create_function(THD *thd,udf_func *udf) } if (!(dl = find_udf_dl(udf->dl))) { - if (!(dl = dlopen(udf->dl, RTLD_NOW))) + char dlpath[FN_REFLEN]; + strxnmov(dlpath, sizeof(dlpath) - 1, opt_plugin_dir, "/", udf->dl, NullS); + if (!(dl = dlopen(dlpath, RTLD_NOW))) { DBUG_PRINT("error",("dlopen of %s failed, error: %d (%s)", - udf->dl,errno,dlerror())); + dlpath, errno, dlerror())); my_error(ER_CANT_OPEN_LIBRARY, MYF(0), - udf->dl, errno, dlerror()); + dlpath, errno, dlerror()); goto err; } new_dl=1; |