From 6cca9a0fd3cc4b5eee9436a422394ec574c7d43c Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 10 Aug 2005 13:45:05 +0500 Subject: [PATCH] Fix for bug #10499 (Function creation with GEOMETRY return) mysql-test/r/gis.result: test result fixed mysql-test/t/gis.test: test case sql/sp_head.cc: m_geom_returns is sent to make_field sql/sp_head.h: m_geom_returns declared sql/sql_yacc.yy: m_geom_returns initializing added --- mysql-test/r/gis.result | 9 +++++++++ mysql-test/t/gis.test | 9 +++++++++ sql/sp_head.cc | 2 +- sql/sp_head.h | 1 + sql/sql_yacc.yy | 3 ++- 5 files changed, 22 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/gis.result b/mysql-test/r/gis.result index dfe375fd694..ba6c44dfb03 100644 --- a/mysql-test/r/gis.result +++ b/mysql-test/r/gis.result @@ -670,3 +670,12 @@ create trigger t1_bu before update on t1 for each row set new.s1 = null; insert into t1 values (null,null); ERROR 23000: Column 's1' cannot be null drop table t1; +create function fn3 () returns point return GeomFromText("point(1 1)"); +show create function fn3; +Function sql_mode Create Function +fn3 CREATE FUNCTION `test`.`fn3`() RETURNS point +return GeomFromText("point(1 1)") +select astext(fn3()); +astext(fn3()) +POINT(1 1) +drop function fn3; diff --git a/mysql-test/t/gis.test b/mysql-test/t/gis.test index 202042d0257..412bdc3314b 100644 --- a/mysql-test/t/gis.test +++ b/mysql-test/t/gis.test @@ -383,3 +383,12 @@ create trigger t1_bu before update on t1 for each row set new.s1 = null; --error 1048 insert into t1 values (null,null); drop table t1; + +# +# Bug #10499 (function creation with GEOMETRY datatype) +# +create function fn3 () returns point return GeomFromText("point(1 1)"); +show create function fn3; +select astext(fn3()); +drop function fn3; + diff --git a/sql/sp_head.cc b/sql/sp_head.cc index 3a386356335..1d171b3e42f 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -558,7 +558,7 @@ sp_head::make_field(uint max_length, const char *name, TABLE *dummy) field= ::make_field((char *)0, !m_returns_len ? max_length : m_returns_len, (uchar *)"", 0, m_returns_pack, m_returns, m_returns_cs, - (enum Field::geometry_type)0, Field::NONE, + m_geom_returns, Field::NONE, m_returns_typelib, name ? name : (const char *)m_name.str, dummy); thd->mem_root= tmp_mem_root; diff --git a/sql/sp_head.h b/sql/sp_head.h index e15b68be158..4e461b576e8 100644 --- a/sql/sp_head.h +++ b/sql/sp_head.h @@ -110,6 +110,7 @@ public: int m_type; // TYPE_ENUM_FUNCTION or TYPE_ENUM_PROCEDURE enum enum_field_types m_returns; // For FUNCTIONs only + Field::geometry_type m_geom_returns; CHARSET_INFO *m_returns_cs; // For FUNCTIONs only TYPELIB *m_returns_typelib; // For FUNCTIONs only uint m_returns_len; // For FUNCTIONs only diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index b680787b9a3..efe15531610 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -1437,7 +1437,7 @@ create_function_tail: sp_prepare_create_field(YYTHD, new_field); if (prepare_create_field(new_field, &unused1, &unused2, &unused2, - 0)) + HA_CAN_GEOMETRY)) YYABORT; sp->m_returns= new_field->sql_type; @@ -1445,6 +1445,7 @@ create_function_tail: sp->m_returns_len= new_field->length; sp->m_returns_pack= new_field->pack_flag; sp->m_returns_typelib= new_field->interval; + sp->m_geom_returns= new_field->geom_type; new_field->interval= NULL; bzero((char *)&lex->sp_chistics, sizeof(st_sp_chistics));