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 <stdlib.h>
#include <stdio.h>
#include <string.h>
#ifdef __WIN__
@@ -125,10 +127,10 @@
#else
#include <my_global.h>
#include <my_sys.h>
+#include <m_string.h> // To get strmov()
#endif
#include <mysql.h>
-#include <m_ctype.h>
-#include <m_string.h> // To get strmov()
+#include <ctype.h>
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-Bt sdlenou 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 bibliothque partage '%-.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 "No pode abrir biblioteca compartilhada '%-.64s' (erro no. '%d' - '%-.64s')"
+ cze "Nemohu otev-Bt sdlenou 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 bibliothque partage '%-.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 "No 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-Bt 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'
Cu[Ɍ©t¯鎖ªł«܂¹",
- est "Ei leia funktsiooni '%-.64s' antud teegis"
- fre "Impossible de trouver la fonction '%-.64s' dans la bibliothque"
- 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 "No pode encontrar a funo '%-.64s' na biblioteca"
- rum "Nu pot gasi functia '%-.64s' in libraria"
- rus " '%-.64s' "
- serbian "Ne mogu da pronadjem funkciju '%-.64s' u biblioteci"
- slo "Nemem njs» funkciu '%-.64s' v kni¾nici"
- spa "No puedo encontrar funcin '%-.64s' en libraria"
- swe "Hittar inte funktionen '%-.64s' in det dynamiska biblioteket"
- ukr " æ '%-.64s' ¦̦æ"
+ cze "Nemohu naj-Bt 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'
Cu[Ɍ©t¯鎖ªł«܂¹",
+ est "Ei leia funktsiooni '%-.128s' antud teegis"
+ fre "Impossible de trouver la fonction '%-.128s' dans la bibliothque"
+ 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 "No pode encontrar a funo '%-.128s' na biblioteca"
+ rum "Nu pot gasi functia '%-.128s' in libraria"
+ rus " '%-.128s' "
+ serbian "Ne mogu da pronadjem funkciju '%-.128s' u biblioteci"
+ slo "Nemem njs» funkciu '%-.128s' v kni¾nici"
+ spa "No puedo encontrar funcin '%-.128s' en libraria"
+ swe "Hittar inte funktionen '%-.128s' in det dynamiska biblioteket"
+ ukr " æ '%-.128s' ¦̦æ"
ER_FUNCTION_NOT_DEFINED
cze "Funkce '%-.64s' nen-B definovna"
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;
| Thread |
|---|
| • bk commit into 5.0 tree (msvensson:1.2050) BUG#17261 | msvensson | 10 Mar |