Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
0af09f10
Commit
0af09f10
authored
Dec 15, 2006
by
kaa@polly.local
Browse files
Options
Browse Files
Download
Plain Diff
Merge polly.local:/tmp/maint/bug24117/my50-bug24117
into polly.local:/tmp/maint/bug24117/my51-bug24117
parents
37d1d86d
4162e009
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
105 additions
and
0 deletions
+105
-0
include/typelib.h
include/typelib.h
+3
-0
mysql-test/r/sp.result
mysql-test/r/sp.result
+16
-0
mysql-test/t/sp.test
mysql-test/t/sp.test
+24
-0
mysys/typelib.c
mysys/typelib.c
+51
-0
sql/field.cc
sql/field.cc
+10
-0
sql/field.h
sql/field.h
+1
-0
No files found.
include/typelib.h
View file @
0af09f10
...
@@ -18,6 +18,8 @@
...
@@ -18,6 +18,8 @@
#ifndef _typelib_h
#ifndef _typelib_h
#define _typelib_h
#define _typelib_h
#include "my_alloc.h"
typedef
struct
st_typelib
{
/* Different types saved here */
typedef
struct
st_typelib
{
/* Different types saved here */
unsigned
int
count
;
/* How many types */
unsigned
int
count
;
/* How many types */
const
char
*
name
;
/* Name of typelib */
const
char
*
name
;
/* Name of typelib */
...
@@ -28,6 +30,7 @@ typedef struct st_typelib { /* Different types saved here */
...
@@ -28,6 +30,7 @@ typedef struct st_typelib { /* Different types saved here */
extern
int
find_type
(
char
*
x
,
TYPELIB
*
typelib
,
unsigned
int
full_name
);
extern
int
find_type
(
char
*
x
,
TYPELIB
*
typelib
,
unsigned
int
full_name
);
extern
void
make_type
(
char
*
to
,
unsigned
int
nr
,
TYPELIB
*
typelib
);
extern
void
make_type
(
char
*
to
,
unsigned
int
nr
,
TYPELIB
*
typelib
);
extern
const
char
*
get_type
(
TYPELIB
*
typelib
,
unsigned
int
nr
);
extern
const
char
*
get_type
(
TYPELIB
*
typelib
,
unsigned
int
nr
);
extern
TYPELIB
*
copy_typelib
(
MEM_ROOT
*
root
,
TYPELIB
*
from
);
extern
TYPELIB
sql_protocol_typelib
;
extern
TYPELIB
sql_protocol_typelib
;
...
...
mysql-test/r/sp.result
View file @
0af09f10
...
@@ -5708,4 +5708,20 @@ DROP TABLE bug23760, bug23760_log|
...
@@ -5708,4 +5708,20 @@ DROP TABLE bug23760, bug23760_log|
DROP PROCEDURE bug23760_update_log|
DROP PROCEDURE bug23760_update_log|
DROP PROCEDURE bug23760_test_row_count|
DROP PROCEDURE bug23760_test_row_count|
DROP FUNCTION bug23760_rc_test|
DROP FUNCTION bug23760_rc_test|
DROP PROCEDURE IF EXISTS bug24117|
DROP TABLE IF EXISTS t3|
CREATE TABLE t3(c1 ENUM('abc'))|
INSERT INTO t3 VALUES('abc')|
CREATE PROCEDURE bug24117()
BEGIN
DECLARE t3c1 ENUM('abc');
DECLARE mycursor CURSOR FOR SELECT c1 FROM t3;
OPEN mycursor;
FLUSH TABLES;
FETCH mycursor INTO t3c1;
CLOSE mycursor;
END|
CALL bug24117()|
DROP PROCEDURE bug24117|
DROP TABLE t3|
drop table t1,t2;
drop table t1,t2;
mysql-test/t/sp.test
View file @
0af09f10
...
@@ -6658,6 +6658,30 @@ DROP PROCEDURE bug23760_update_log|
...
@@ -6658,6 +6658,30 @@ DROP PROCEDURE bug23760_update_log|
DROP PROCEDURE bug23760_test_row_count|
DROP PROCEDURE bug23760_test_row_count|
DROP FUNCTION bug23760_rc_test|
DROP FUNCTION bug23760_rc_test|
#
# BUG#24117: server crash on a FETCH with a cursor on a table which is not in
# the table cache
#
--disable_warnings
DROP PROCEDURE IF EXISTS bug24117|
DROP TABLE IF EXISTS t3|
--enable_warnings
CREATE TABLE t3(c1 ENUM('abc'))|
INSERT INTO t3 VALUES('abc')|
CREATE PROCEDURE bug24117()
BEGIN
DECLARE t3c1 ENUM('abc');
DECLARE mycursor CURSOR FOR SELECT c1 FROM t3;
OPEN mycursor;
FLUSH TABLES;
FETCH mycursor INTO t3c1;
CLOSE mycursor;
END|
CALL bug24117()|
DROP PROCEDURE bug24117|
DROP TABLE t3|
#
#
# NOTE: The delimiter is `
|
`, and not `
;
`. It is changed to `
;
`
# NOTE: The delimiter is `
|
`, and not `
;
`. It is changed to `
;
`
# at the end of the file!
# at the end of the file!
...
...
mysys/typelib.c
View file @
0af09f10
...
@@ -119,3 +119,54 @@ const char *get_type(TYPELIB *typelib, uint nr)
...
@@ -119,3 +119,54 @@ const char *get_type(TYPELIB *typelib, uint nr)
return
(
typelib
->
type_names
[
nr
]);
return
(
typelib
->
type_names
[
nr
]);
return
"?"
;
return
"?"
;
}
}
/*
Create a copy of a specified TYPELIB structure.
SYNOPSIS
copy_typelib()
root pointer to a MEM_ROOT object for allocations
from pointer to a source TYPELIB structure
RETURN
pointer to the new TYPELIB structure on successful copy, or
NULL otherwise
*/
TYPELIB
*
copy_typelib
(
MEM_ROOT
*
root
,
TYPELIB
*
from
)
{
TYPELIB
*
to
;
uint
i
;
if
(
!
from
)
return
NULL
;
if
(
!
(
to
=
(
TYPELIB
*
)
alloc_root
(
root
,
sizeof
(
TYPELIB
))))
return
NULL
;
if
(
!
(
to
->
type_names
=
(
const
char
**
)
alloc_root
(
root
,
(
sizeof
(
char
*
)
+
sizeof
(
int
))
*
(
from
->
count
+
1
))))
return
NULL
;
to
->
type_lengths
=
(
unsigned
int
*
)(
to
->
type_names
+
from
->
count
+
1
);
to
->
count
=
from
->
count
;
if
(
from
->
name
)
{
if
(
!
(
to
->
name
=
strdup_root
(
root
,
from
->
name
)))
return
NULL
;
}
else
to
->
name
=
NULL
;
for
(
i
=
0
;
i
<
from
->
count
;
i
++
)
{
if
(
!
(
to
->
type_names
[
i
]
=
strmake_root
(
root
,
from
->
type_names
[
i
],
from
->
type_lengths
[
i
])))
return
NULL
;
to
->
type_lengths
[
i
]
=
from
->
type_lengths
[
i
];
}
to
->
type_names
[
to
->
count
]
=
NULL
;
to
->
type_lengths
[
to
->
count
]
=
0
;
return
to
;
}
sql/field.cc
View file @
0af09f10
...
@@ -7961,6 +7961,16 @@ void Field_enum::sql_type(String &res) const
...
@@ -7961,6 +7961,16 @@ void Field_enum::sql_type(String &res) const
}
}
Field
*
Field_enum
::
new_field
(
MEM_ROOT
*
root
,
struct
st_table
*
new_table
,
bool
keep_type
)
{
Field_enum
*
res
=
(
Field_enum
*
)
Field
::
new_field
(
root
,
new_table
,
keep_type
);
if
(
res
)
res
->
typelib
=
copy_typelib
(
root
,
typelib
);
return
res
;
}
/*
/*
set type.
set type.
This is a string which can have a collection of different values.
This is a string which can have a collection of different values.
...
...
sql/field.h
View file @
0af09f10
...
@@ -1350,6 +1350,7 @@ class Field_enum :public Field_str {
...
@@ -1350,6 +1350,7 @@ class Field_enum :public Field_str {
{
{
flags
|=
ENUM_FLAG
;
flags
|=
ENUM_FLAG
;
}
}
Field
*
new_field
(
MEM_ROOT
*
root
,
struct
st_table
*
new_table
,
bool
keep_type
);
enum_field_types
type
()
const
{
return
FIELD_TYPE_STRING
;
}
enum_field_types
type
()
const
{
return
FIELD_TYPE_STRING
;
}
enum
Item_result
cmp_type
()
const
{
return
INT_RESULT
;
}
enum
Item_result
cmp_type
()
const
{
return
INT_RESULT
;
}
enum
Item_result
cast_to_int_type
()
const
{
return
INT_RESULT
;
}
enum
Item_result
cast_to_int_type
()
const
{
return
INT_RESULT
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment