From: Date: March 10 2006 10:41am Subject: bk commit into 5.0 tree (msvensson:1.2050) BUG#17261 List-Archive: http://lists.mysql.com/commits/3687 X-Bug: 17261 Message-Id: <20060310094111.0B8D45454F@devsrv-b.mysql.com> Below is the list of changes that have just been committed into a local 5.0 repository of msvensson. When msvensson does a push these changes will be propagated to the main repository and, within 24 hours after the push, to the public repository. For information on how to access the public repository see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html ChangeSet 1.2050 06/03/10 10:41:04 msvensson@stripped +7 -0 Bug#17261 Passing a variable from a stored procedure to UDF crashes mysqld - Update of test toolsand Makefiles to make it possible to test always test udf's as part of the mysql test suite sql/udf_example.cc 1.20 06/03/10 10:41:00 msvensson@stripped +6 -4 Use isalpha instade of my_isalpha sql/sql_udf.cc 1.55 06/03/10 10:41:00 msvensson@stripped +1 -0 Add DBUG_PRINT just before dl_open sql/share/errmsg.txt 1.59 06/03/10 10:41:00 msvensson@stripped +38 -38 Update the max length of %s string from 64 to 128 sql/Makefile.am 1.115 06/03/10 10:41:00 msvensson@stripped +6 -4 Build shared library udf_example.so mysql-test/t/udf.test 1.2 06/03/10 10:41:00 msvensson@stripped +19 -11 Update tests The "--error 0" directives should actually be changed to the correct error number returned but that error number is lost. W e do however get the right error message and that is checked in the .result file. mysql-test/r/udf.result 1.2 06/03/10 10:41:00 msvensson@stripped +5 -5 Update test results mysql-test/mysql-test-run.pl 1.70 06/03/10 10:41:00 msvensson@stripped +8 -0 Add the path where mysqld will udf_example.so used by the udf test # This is a BitKeeper patch. What follows are the unified diffs for the # set of deltas contained in the patch. The rest of the patch, the part # that BitKeeper cares about, is below these diffs. # User: msvensson # Host: devsrv-b.mysql.com # Root: /space/magnus/bug17261/my50-bug17261 --- 1.114/sql/Makefile.am 2006-01-11 00:07:34 +01:00 +++ 1.115/sql/Makefile.am 2006-03-10 10:41:00 +01:00 @@ -153,10 +153,12 @@ lex_hash.h: gen_lex_hash$(EXEEXT) ./gen_lex_hash$(EXEEXT) > $@ -# For testing of udf_example.so; Works on platforms with gcc -# (This is not part of our build process but only provided as an example) -udf_example.so: udf_example.cc - $(CXXCOMPILE) -shared -o $@ $< +# For testing of udf_example.so +noinst_LTLIBRARIES= udf_example.la +udf_example_la_SOURCES= udf_example.cc +udf_example_la_CXXFLAGS= -DSTANDARD +udf_example_la_LDFLAGS= -module -rpath $(pkglibdir) + # Don't update the files from bitkeeper %::SCCS/s.% --- 1.54/sql/sql_udf.cc 2005-11-23 19:18:04 +01:00 +++ 1.55/sql/sql_udf.cc 2006-03-10 10:41:00 +01:00 @@ -432,6 +432,7 @@ } if (!(dl = find_udf_dl(udf->dl))) { + DBUG_PRINT("info", ("Calling dlopen, udf->dl: %s", udf->dl)); if (!(dl = dlopen(udf->dl, RTLD_NOW))) { DBUG_PRINT("error",("dlopen of %s failed, error: %d (%s)", --- 1.19/sql/udf_example.cc 2006-02-15 17:11:19 +01:00 +++ 1.20/sql/udf_example.cc 2006-03-10 10:41:00 +01:00 @@ -113,6 +113,8 @@ */ #ifdef STANDARD +/* STANDARD is defined, don't use any mysql functions */ +#include #include #include #ifdef __WIN__ @@ -125,10 +127,10 @@ #else #include #include +#include // To get strmov() #endif #include -#include -#include // To get strmov() +#include static pthread_mutex_t LOCK_hostname; @@ -289,8 +291,8 @@ for (n = ntrans + 1, n_end = ntrans + sizeof(ntrans)-2; word != w_end && n < n_end; word++ ) - if ( my_isalpha ( &my_charset_latin1, *word )) - *n++ = my_toupper ( &my_charset_latin1, *word ); + if ( isalpha ( *word )) + *n++ = toupper ( *word ); if ( n == ntrans + 1 ) /* return empty string if 0 bytes */ { --- 1.58/sql/share/errmsg.txt 2006-01-19 11:48:02 +01:00 +++ 1.59/sql/share/errmsg.txt 2006-03-10 10:41:00 +01:00 @@ -2978,23 +2978,23 @@ swe "Funktionen '%-.64s' finns redan" ukr "æÕÎËÃ¦Ñ '%-.64s' ×ÖÅ ¦ÓÎÕ¤" ER_CANT_OPEN_LIBRARY - cze "Nemohu otev-Bøít sdílenou knihovnu '%-.64s' (errno: %d %s)" - dan "Kan ikke åbne delt bibliotek '%-.64s' (errno: %d %s)" - nla "Kan shared library '%-.64s' niet openen (Errcode: %d %s)" - eng "Can't open shared library '%-.64s' (errno: %d %-.64s)" - jps "shared library '%-.64s' ‚ðŠJ‚­Ž–‚ª‚Å‚«‚Ü‚¹‚ñ (errno: %d %s)", - est "Ei suuda avada jagatud teeki '%-.64s' (veakood: %d %-.64s)" - fre "Impossible d'ouvrir la bibliothèque partagée '%-.64s' (errno: %d %s)" - ger "Kann Shared Library '%-.64s' nicht öffnen (Fehler: %d %-.64s)" - greek "Äåí åßíáé äõíáôÞ ç áíÜãíùóç ôçò shared library '%-.64s' (êùäéêüò ëÜèïõò: %d %s)" - hun "A(z) '%-.64s' megosztott konyvtar nem hasznalhato (hibakod: %d %s)" - ita "Impossibile aprire la libreria condivisa '%-.64s' (errno: %d %s)" - jpn "shared library '%-.64s' ¤ò³«¤¯»ö¤¬¤Ç¤­¤Þ¤»¤ó (errno: %d %s)" - kor "'%-.64s' °øÀ¯ ¶óÀ̹ö·¯¸®¸¦ ¿­¼ö ¾ø½À´Ï´Ù.(¿¡·¯¹øÈ£: %d %s)" - nor "Can't open shared library '%-.64s' (errno: %d %s)" - norwegian-ny "Can't open shared library '%-.64s' (errno: %d %s)" - pol "Can't open shared library '%-.64s' (errno: %d %s)" - por "Não pode abrir biblioteca compartilhada '%-.64s' (erro no. '%d' - '%-.64s')" + cze "Nemohu otev-Bøít sdílenou knihovnu '%-.64s' (errno: %d %-.128s)" + dan "Kan ikke åbne delt bibliotek '%-.64s' (errno: %d %-.128s)" + nla "Kan shared library '%-.64s' niet openen (Errcode: %d %-.128s)" + eng "Can't open shared library '%-.64s' (errno: %d %-.128s)" + jps "shared library '%-.64s' ‚ðŠJ‚­Ž–‚ª‚Å‚«‚Ü‚¹‚ñ (errno: %d %-.128s)", + est "Ei suuda avada jagatud teeki '%-.64s' (veakood: %d %-.128s)" + fre "Impossible d'ouvrir la bibliothèque partagée '%-.64s' (errno: %d %-.128s)" + ger "Kann Shared Library '%-.64s' nicht öffnen (Fehler: %d %-.128s)" + greek "Äåí åßíáé äõíáôÞ ç áíÜãíùóç ôçò shared library '%-.64s' (êùäéêüò ëÜèïõò: %d %-.128s)" + hun "A(z) '%-.64s' megosztott konyvtar nem hasznalhato (hibakod: %d %-.128s)" + ita "Impossibile aprire la libreria condivisa '%-.64s' (errno: %d %-.128s)" + jpn "shared library '%-.64s' ¤ò³«¤¯»ö¤¬¤Ç¤­¤Þ¤»¤ó (errno: %d %-.128s)" + kor "'%-.64s' °øÀ¯ ¶óÀ̹ö·¯¸®¸¦ ¿­¼ö ¾ø½À´Ï´Ù.(¿¡·¯¹øÈ£: %d %-.128s)" + nor "Can't open shared library '%-.64s' (errno: %d %-.128s)" + norwegian-ny "Can't open shared library '%-.64s' (errno: %d %-.128s)" + pol "Can't open shared library '%-.64s' (errno: %d %-.128s)" + por "Não pode abrir biblioteca compartilhada '%-.64s' (erro no. '%d' - '%-.128s')" rum "Nu pot deschide libraria shared '%-.64s' (Eroare: %d %-.64s)" rus "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÄÉÎÁÍÉÞÅÓËÕÀ ÂÉÂÌÉÏÔÅËÕ '%-.64s' (ÏÛÉÂËÁ: %d %-.64s)" serbian "Ne mogu da otvorim share-ovanu biblioteku '%-.64s' (errno: %d %-.64s)" @@ -3003,27 +3003,27 @@ swe "Kan inte öppna det dynamiska biblioteket '%-.64s' (Felkod: %d %s)" ukr "îÅ ÍÏÖÕ ×¦ÄËÒÉÔÉ ÒÏÚĦÌÀ×ÁÎÕ Â¦Â̦ÏÔÅËÕ '%-.64s' (ÐÏÍÉÌËÁ: %d %-.64s)" ER_CANT_FIND_DL_ENTRY - cze "Nemohu naj-Bít funkci '%-.64s' v knihovnì" - dan "Kan ikke finde funktionen '%-.64s' i bibliotek" - nla "Kan functie '%-.64s' niet in library vinden" - eng "Can't find function '%-.64s' in library" - jps "function '%-.64s' ‚ðƒ‰ƒCƒuƒ‰ƒŠ[’†‚ÉŒ©•t‚¯‚鎖‚ª‚Å‚«‚Ü‚¹‚ñ", - est "Ei leia funktsiooni '%-.64s' antud teegis" - fre "Impossible de trouver la fonction '%-.64s' dans la bibliothèque" - ger "Kann Funktion '%-.64s' in der Library nicht finden" - greek "Äåí åßíáé äõíáôÞ ç áíåýñåóç ôçò óõíÜñôçóçò '%-.64s' óôçí âéâëéïèÞêç" - hun "A(z) '%-.64s' fuggveny nem talalhato a konyvtarban" - ita "Impossibile trovare la funzione '%-.64s' nella libreria" - jpn "function '%-.64s' ¤ò¥é¥¤¥Ö¥é¥ê¡¼Ãæ¤Ë¸«ÉÕ¤±¤ë»ö¤¬¤Ç¤­¤Þ¤»¤ó" - kor "¶óÀ̹ö·¯¸®¿¡¼­ '%-.64s' ÇÔ¼ö¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù." - por "Não pode encontrar a função '%-.64s' na biblioteca" - rum "Nu pot gasi functia '%-.64s' in libraria" - rus "îÅ×ÏÚÍÏÖÎÏ ÏÔÙÓËÁÔØ ÆÕÎËÃÉÀ '%-.64s' × ÂÉÂÌÉÏÔÅËÅ" - serbian "Ne mogu da pronadjem funkciju '%-.64s' u biblioteci" - slo "Nemô¾em nájs» funkciu '%-.64s' v kni¾nici" - spa "No puedo encontrar función '%-.64s' en libraria" - swe "Hittar inte funktionen '%-.64s' in det dynamiska biblioteket" - ukr "îÅ ÍÏÖÕ ÚÎÁÊÔÉ ÆÕÎËæÀ '%-.64s' Õ Â¦Â̦ÏÔÅæ" + cze "Nemohu naj-Bít funkci '%-.128s' v knihovnì" + dan "Kan ikke finde funktionen '%-.128s' i bibliotek" + nla "Kan functie '%-.128s' niet in library vinden" + eng "Can't find function '%-.128s' in library" + jps "function '%-.128s' ‚ðƒ‰ƒCƒuƒ‰ƒŠ[’†‚ÉŒ©•t‚¯‚鎖‚ª‚Å‚«‚Ü‚¹‚ñ", + est "Ei leia funktsiooni '%-.128s' antud teegis" + fre "Impossible de trouver la fonction '%-.128s' dans la bibliothèque" + ger "Kann Funktion '%-.128s' in der Library nicht finden" + greek "Äåí åßíáé äõíáôÞ ç áíåýñåóç ôçò óõíÜñôçóçò '%-.128s' óôçí âéâëéïèÞêç" + hun "A(z) '%-.128s' fuggveny nem talalhato a konyvtarban" + ita "Impossibile trovare la funzione '%-.128s' nella libreria" + jpn "function '%-.128s' ¤ò¥é¥¤¥Ö¥é¥ê¡¼Ãæ¤Ë¸«ÉÕ¤±¤ë»ö¤¬¤Ç¤­¤Þ¤»¤ó" + kor "¶óÀ̹ö·¯¸®¿¡¼­ '%-.128s' ÇÔ¼ö¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù." + por "Não pode encontrar a função '%-.128s' na biblioteca" + rum "Nu pot gasi functia '%-.128s' in libraria" + rus "îÅ×ÏÚÍÏÖÎÏ ÏÔÙÓËÁÔØ ÆÕÎËÃÉÀ '%-.128s' × ÂÉÂÌÉÏÔÅËÅ" + serbian "Ne mogu da pronadjem funkciju '%-.128s' u biblioteci" + slo "Nemô¾em nájs» funkciu '%-.128s' v kni¾nici" + spa "No puedo encontrar función '%-.128s' en libraria" + swe "Hittar inte funktionen '%-.128s' in det dynamiska biblioteket" + ukr "îÅ ÍÏÖÕ ÚÎÁÊÔÉ ÆÕÎËæÀ '%-.128s' Õ Â¦Â̦ÏÔÅæ" ER_FUNCTION_NOT_DEFINED cze "Funkce '%-.64s' nen-Bí definována" dan "Funktionen '%-.64s' er ikke defineret" --- 1.69/mysql-test/mysql-test-run.pl 2006-02-12 04:33:44 +01:00 +++ 1.70/mysql-test/mysql-test-run.pl 2006-03-10 10:41:00 +01:00 @@ -1105,6 +1105,14 @@ } # -------------------------------------------------------------------------- + # Add the path where mysqld will find udf_example.so + # -------------------------------------------------------------------------- + $ENV{'LD_LIBRARY_PATH'}= + "$glob_basedir/sql/.libs" . + ($ENV{'LD_LIBRARY_PATH'} ? ":$ENV{'LD_LIBRARY_PATH'}" : ""); + + + # -------------------------------------------------------------------------- # Also command lines in .opt files may contain env vars # -------------------------------------------------------------------------- --- 1.1/mysql-test/r/udf.result 2006-02-15 17:11:20 +01:00 +++ 1.2/mysql-test/r/udf.result 2006-03-10 10:41:00 +01:00 @@ -10,7 +10,7 @@ CREATE AGGREGATE FUNCTION avgcost RETURNS REAL SONAME 'udf_example.so'; select myfunc_double(); -ERROR HY000: myfunc_double must have at least on argument +ERROR HY000: myfunc_double must have at least one argument select myfunc_double(1); myfunc_double(1) 49.00 @@ -59,18 +59,18 @@ metaphon('hello') HL CREATE PROCEDURE `XXX1`(in testval varchar(10)) -begin -select metaphon(testval); +begin +select metaphon(testval); end// call XXX1('hello'); metaphon(testval) HL drop procedure xxx1; CREATE PROCEDURE `XXX2`() -begin +begin declare testval varchar(10); set testval = 'hello'; -select metaphon(testval); +select metaphon(testval); end// call XXX2(); metaphon(testval) --- 1.1/mysql-test/t/udf.test 2006-02-15 17:11:20 +01:00 +++ 1.2/mysql-test/t/udf.test 2006-03-10 10:41:00 +01:00 @@ -1,7 +1,7 @@ --source include/have_udf.inc # -# To run this tests you need to compile "sql/udf_example.cc" into -# udf_example.so and setup LD_LIBRARY_PATH to point out where +# To run this tests the "sql/udf_example.cc" need to be compiled into +# udf_example.so and LD_LIBRARY_PATH should be setup to point out where # the library are. # @@ -10,7 +10,7 @@ drop table if exists t1; --enable_warnings -# +# # Create the example functions from udf_example # @@ -19,7 +19,7 @@ # myfunc_int does not have a myfunc_int_init function and can # not be loaded unless server is started with --allow-suspicious-udfs ---error 1127 +--error ER_CANT_FIND_DL_ENTRY CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME 'udf_example.so'; CREATE FUNCTION sequence RETURNS INTEGER SONAME "udf_example.so"; CREATE FUNCTION lookup RETURNS STRING SONAME 'udf_example.so'; @@ -28,19 +28,27 @@ CREATE AGGREGATE FUNCTION avgcost RETURNS REAL SONAME 'udf_example.so'; +--error 0 select myfunc_double(); select myfunc_double(1); select myfunc_double(78654); +--error 1305 select myfunc_int(); +--error 0 select lookup(); select lookup("127.0.0.1"); +--error 0 select lookup(127,0,0,1); select lookup("localhost"); +--error 0 select reverse_lookup(); select reverse_lookup("127.0.0.1"); +--error 0 select reverse_lookup(127,0,0,1); select reverse_lookup("localhost"); +--error 0 select avgcost(); +--error 0 select avgcost(100,23.76); create table t1(sum int, price float(24)); insert into t1 values(100, 50.00), (100, 100.00); @@ -54,12 +62,12 @@ # BUG#17261 Passing a variable from a stored procedure to UDF crashes mysqld #------------------------------------------------------------------------ -select metaphon('hello'); +select metaphon('hello'); delimiter //; CREATE PROCEDURE `XXX1`(in testval varchar(10)) -begin -select metaphon(testval); +begin +select metaphon(testval); end// delimiter ;// @@ -68,10 +76,10 @@ delimiter //; CREATE PROCEDURE `XXX2`() -begin +begin declare testval varchar(10); set testval = 'hello'; -select metaphon(testval); +select metaphon(testval); end// delimiter ;// @@ -79,13 +87,13 @@ drop procedure xxx2; -# +# # Drop the example functions from udf_example # DROP FUNCTION metaphon; DROP FUNCTION myfunc_double; ---error 1305 +--error ER_SP_DOES_NOT_EXIST DROP FUNCTION myfunc_int; DROP FUNCTION sequence; DROP FUNCTION lookup;