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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
9893c5a2
Commit
9893c5a2
authored
Nov 13, 2010
by
Vladislav Vaintroub
Browse files
Options
Browse Files
Download
Plain Diff
merge
parents
f0c2b9c5
3fa437cf
Changes
8
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
1353 additions
and
8 deletions
+1353
-8
mysql-test/r/ps.result
mysql-test/r/ps.result
+504
-0
mysql-test/t/ps.test
mysql-test/t/ps.test
+6
-0
mysql-test/t/wl4435_generated.inc
mysql-test/t/wl4435_generated.inc
+588
-0
sql/item.cc
sql/item.cc
+2
-7
sql/sp_rcontext.h
sql/sp_rcontext.h
+1
-0
sql/sql_prepare.cc
sql/sql_prepare.cc
+1
-1
support-files/mysql.spec.sh
support-files/mysql.spec.sh
+1
-0
tests/mysql_client_test.c
tests/mysql_client_test.c
+250
-0
No files found.
mysql-test/r/ps.result
View file @
9893c5a2
This diff is collapsed.
Click to expand it.
mysql-test/t/ps.test
View file @
9893c5a2
...
...
@@ -3296,6 +3296,12 @@ SELECT @a;
DROP
PROCEDURE
p1
;
DROP
PROCEDURE
p2
;
###########################################################################
--
source
t
/
wl4435_generated
.
inc
###########################################################################
--
echo
--
echo
# End of WL#4435.
...
...
mysql-test/t/wl4435_generated.inc
0 → 100644
View file @
9893c5a2
This diff is collapsed.
Click to expand it.
sql/item.cc
View file @
9893c5a2
...
...
@@ -226,8 +226,6 @@ bool Item::val_bool()
*/
String
*
Item
::
val_str_ascii
(
String
*
str
)
{
DBUG_ASSERT
(
fixed
==
1
);
if
(
!
(
collation
.
collation
->
state
&
MY_CS_NONASCII
))
return
val_str
(
str
);
...
...
@@ -3459,19 +3457,16 @@ Item_param::set_value(THD *thd, sp_rcontext *ctx, Item **it)
str_value
.
charset
());
collation
.
set
(
str_value
.
charset
(),
DERIVATION_COERCIBLE
);
decimals
=
0
;
param_type
=
MYSQL_TYPE_STRING
;
break
;
}
case
REAL_RESULT
:
set_double
(
arg
->
val_real
());
param_type
=
MYSQL_TYPE_DOUBLE
;
break
;
case
INT_RESULT
:
set_int
(
arg
->
val_int
(),
arg
->
max_length
);
param_type
=
MYSQL_TYPE_LONG
;
break
;
case
DECIMAL_RESULT
:
...
...
@@ -3483,8 +3478,6 @@ Item_param::set_value(THD *thd, sp_rcontext *ctx, Item **it)
return
TRUE
;
set_decimal
(
dv
);
param_type
=
MYSQL_TYPE_NEWDECIMAL
;
break
;
}
...
...
@@ -3516,6 +3509,7 @@ void
Item_param
::
set_out_param_info
(
Send_field
*
info
)
{
m_out_param_info
=
info
;
param_type
=
m_out_param_info
->
type
;
}
...
...
@@ -3561,6 +3555,7 @@ void Item_param::make_field(Send_field *field)
field
->
org_table_name
=
m_out_param_info
->
org_table_name
;
field
->
col_name
=
m_out_param_info
->
col_name
;
field
->
org_col_name
=
m_out_param_info
->
org_col_name
;
field
->
length
=
m_out_param_info
->
length
;
field
->
charsetnr
=
m_out_param_info
->
charsetnr
;
field
->
flags
=
m_out_param_info
->
flags
;
...
...
sql/sp_rcontext.h
View file @
9893c5a2
...
...
@@ -220,6 +220,7 @@ private:
during execution.
*/
bool
m_return_value_set
;
/**
TRUE if the context is created for a sub-statement.
*/
...
...
sql/sql_prepare.cc
View file @
9893c5a2
...
...
@@ -1185,7 +1185,7 @@ static bool insert_params_from_vars_with_log(Prepared_statement *stmt,
uint32
length
=
0
;
THD
*
thd
=
stmt
->
thd
;
DBUG_ENTER
(
"insert_params_from_vars"
);
DBUG_ENTER
(
"insert_params_from_vars
_with_log
"
);
if
(
query
->
copy
(
stmt
->
query
(),
stmt
->
query_length
(),
default_charset_info
))
DBUG_RETURN
(
1
);
...
...
support-files/mysql.spec.sh
View file @
9893c5a2
...
...
@@ -335,6 +335,7 @@ For a description of MySQL see the base MySQL RPM or http://www.mysql.com/
%package
-n
MySQL-shared%
{
product_suffix
}
Summary: MySQL - Shared libraries
Group: Applications/Databases
Provides: mysql-shared
Obsoletes: MySQL-shared-community
%description
-n
MySQL-shared%
{
product_suffix
}
...
...
tests/mysql_client_test.c
View file @
9893c5a2
...
...
@@ -2103,6 +2103,255 @@ static void test_wl4435_2()
}
#define WL4435_TEST(sql_type, sql_value, \
c_api_in_type, c_api_out_type, \
c_type, c_type_ext, \
printf_args, assert_condition) \
\
do { \
int rc; \
MYSQL_STMT *ps; \
MYSQL_BIND psp; \
MYSQL_RES *rs_metadata; \
MYSQL_FIELD *fields; \
c_type pspv c_type_ext; \
my_bool psp_null; \
\
bzero(&pspv, sizeof (pspv)); \
\
rc= mysql_query(mysql, "DROP PROCEDURE IF EXISTS p1"); \
myquery(rc); \
\
rc= mysql_query(mysql, \
"CREATE PROCEDURE p1(OUT v " sql_type ") SET v = " sql_value ";"); \
myquery(rc); \
\
ps = mysql_simple_prepare(mysql, "CALL p1(?)"); \
check_stmt(ps); \
\
bzero(&psp, sizeof (psp)); \
psp.buffer_type= c_api_in_type; \
psp.is_null= &psp_null; \
psp.buffer= (char *) &pspv; \
psp.buffer_length= sizeof (psp); \
\
rc= mysql_stmt_bind_param(ps, &psp); \
check_execute(ps, rc); \
\
rc= mysql_stmt_execute(ps); \
check_execute(ps, rc); \
\
DIE_UNLESS(mysql->server_status & SERVER_PS_OUT_PARAMS); \
DIE_UNLESS(mysql_stmt_field_count(ps) == 1); \
\
rs_metadata= mysql_stmt_result_metadata(ps); \
fields= mysql_fetch_fields(rs_metadata); \
\
rc= mysql_stmt_bind_result(ps, &psp); \
check_execute(ps, rc); \
\
rc= mysql_stmt_fetch(ps); \
DIE_UNLESS(rc == 0); \
\
DIE_UNLESS(fields[0].type == c_api_out_type); \
printf printf_args; \
printf("; in type: %d; out type: %d\n", \
(int) c_api_in_type, (int) c_api_out_type); \
\
rc= mysql_stmt_fetch(ps); \
DIE_UNLESS(rc == MYSQL_NO_DATA); \
\
rc= mysql_stmt_next_result(ps); \
DIE_UNLESS(rc == 0); \
\
mysql_stmt_free_result(ps); \
mysql_stmt_close(ps); \
\
DIE_UNLESS(assert_condition); \
\
} while (0)
static
void
test_wl4435_3
()
{
char
tmp
[
255
];
puts
(
""
);
// The following types are not supported:
// - ENUM
// - SET
//
// The following types are supported but can not be used for
// OUT-parameters:
// - MEDIUMINT;
// - BIT(..);
//
// The problem is that those types are not supported for IN-parameters,
// and OUT-parameters should be bound as IN-parameters before execution.
//
// The following types should not be used:
// - MYSQL_TYPE_YEAR (use MYSQL_TYPE_SHORT instead);
// - MYSQL_TYPE_TINY_BLOB, MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB
// (use MYSQL_TYPE_BLOB instead);
WL4435_TEST
(
"TINYINT"
,
"127"
,
MYSQL_TYPE_TINY
,
MYSQL_TYPE_TINY
,
char
,
,
(
" - TINYINT / char / MYSQL_TYPE_TINY:
\t\t\t
%d"
,
(
int
)
pspv
),
pspv
==
127
);
WL4435_TEST
(
"SMALLINT"
,
"32767"
,
MYSQL_TYPE_SHORT
,
MYSQL_TYPE_SHORT
,
short
,
,
(
" - SMALLINT / short / MYSQL_TYPE_SHORT:
\t\t
%d"
,
(
int
)
pspv
),
pspv
==
32767
);
WL4435_TEST
(
"INT"
,
"2147483647"
,
MYSQL_TYPE_LONG
,
MYSQL_TYPE_LONG
,
int
,
,
(
" - INT / int / MYSQL_TYPE_LONG:
\t\t\t
%d"
,
pspv
),
pspv
==
2147483647l
);
WL4435_TEST
(
"BIGINT"
,
"9223372036854775807"
,
MYSQL_TYPE_LONGLONG
,
MYSQL_TYPE_LONGLONG
,
long
long
,
,
(
" - BIGINT / long long / MYSQL_TYPE_LONGLONG:
\t\t
%lld"
,
pspv
),
pspv
==
9223372036854775807ll
);
WL4435_TEST
(
"TIMESTAMP"
,
"'2007-11-18 15:01:02'"
,
MYSQL_TYPE_TIMESTAMP
,
MYSQL_TYPE_TIMESTAMP
,
MYSQL_TIME
,
,
(
" - TIMESTAMP / MYSQL_TIME / MYSQL_TYPE_TIMESTAMP:
\t
"
"%.4d-%.2d-%.2d %.2d:%.2d:%.2d"
,
(
int
)
pspv
.
year
,
(
int
)
pspv
.
month
,
(
int
)
pspv
.
day
,
(
int
)
pspv
.
hour
,
(
int
)
pspv
.
minute
,
(
int
)
pspv
.
second
),
pspv
.
year
==
2007
&&
pspv
.
month
==
11
&&
pspv
.
day
==
18
&&
pspv
.
hour
==
15
&&
pspv
.
minute
==
1
&&
pspv
.
second
==
2
);
WL4435_TEST
(
"DATETIME"
,
"'1234-11-12 12:34:59'"
,
MYSQL_TYPE_DATETIME
,
MYSQL_TYPE_DATETIME
,
MYSQL_TIME
,
,
(
" - DATETIME / MYSQL_TIME / MYSQL_TYPE_DATETIME:
\t
"
"%.4d-%.2d-%.2d %.2d:%.2d:%.2d"
,
(
int
)
pspv
.
year
,
(
int
)
pspv
.
month
,
(
int
)
pspv
.
day
,
(
int
)
pspv
.
hour
,
(
int
)
pspv
.
minute
,
(
int
)
pspv
.
second
),
pspv
.
year
==
1234
&&
pspv
.
month
==
11
&&
pspv
.
day
==
12
&&
pspv
.
hour
==
12
&&
pspv
.
minute
==
34
&&
pspv
.
second
==
59
);
WL4435_TEST
(
"TIME"
,
"'123:45:01'"
,
MYSQL_TYPE_TIME
,
MYSQL_TYPE_TIME
,
MYSQL_TIME
,
,
(
" - TIME / MYSQL_TIME / MYSQL_TYPE_TIME:
\t\t
"
"%.3d:%.2d:%.2d"
,
(
int
)
pspv
.
hour
,
(
int
)
pspv
.
minute
,
(
int
)
pspv
.
second
),
pspv
.
hour
==
123
&&
pspv
.
minute
==
45
&&
pspv
.
second
==
1
);
WL4435_TEST
(
"DATE"
,
"'1234-11-12'"
,
MYSQL_TYPE_DATE
,
MYSQL_TYPE_DATE
,
MYSQL_TIME
,
,
(
" - DATE / MYSQL_TIME / MYSQL_TYPE_DATE:
\t\t
"
"%.4d-%.2d-%.2d"
,
(
int
)
pspv
.
year
,
(
int
)
pspv
.
month
,
(
int
)
pspv
.
day
),
pspv
.
year
==
1234
&&
pspv
.
month
==
11
&&
pspv
.
day
==
12
);
WL4435_TEST
(
"YEAR"
,
"'2010'"
,
MYSQL_TYPE_SHORT
,
MYSQL_TYPE_YEAR
,
short
,
,
(
" - YEAR / short / MYSQL_TYPE_SHORT:
\t\t\t
%.4d"
,
(
int
)
pspv
),
pspv
==
2010
);
WL4435_TEST
(
"FLOAT(7, 4)"
,
"123.4567"
,
MYSQL_TYPE_FLOAT
,
MYSQL_TYPE_FLOAT
,
float
,
,
(
" - FLOAT / float / MYSQL_TYPE_FLOAT:
\t\t\t
%g"
,
(
double
)
pspv
),
pspv
-
123
.
4567
<
0
.
0001
);
WL4435_TEST
(
"DOUBLE(8, 5)"
,
"123.45678"
,
MYSQL_TYPE_DOUBLE
,
MYSQL_TYPE_DOUBLE
,
double
,
,
(
" - DOUBLE / double / MYSQL_TYPE_DOUBLE:
\t\t
%g"
,
(
double
)
pspv
),
pspv
-
123
.
45678
<
0
.
00001
);
WL4435_TEST
(
"DECIMAL(9, 6)"
,
"123.456789"
,
MYSQL_TYPE_NEWDECIMAL
,
MYSQL_TYPE_NEWDECIMAL
,
char
,
[
255
],
(
" - DECIMAL / char[] / MYSQL_TYPE_NEWDECIMAL:
\t\t
'%s'"
,
(
char
*
)
pspv
),
!
strcmp
(
pspv
,
"123.456789"
));
WL4435_TEST
(
"CHAR(32)"
,
"REPEAT('C', 16)"
,
MYSQL_TYPE_STRING
,
MYSQL_TYPE_STRING
,
char
,
[
255
],
(
" - CHAR(32) / char[] / MYSQL_TYPE_STRING:
\t\t
'%s'"
,
(
char
*
)
pspv
),
!
strcmp
(
pspv
,
"CCCCCCCCCCCCCCCC"
));
WL4435_TEST
(
"VARCHAR(32)"
,
"REPEAT('V', 16)"
,
MYSQL_TYPE_VAR_STRING
,
MYSQL_TYPE_VAR_STRING
,
char
,
[
255
],
(
" - VARCHAR(32) / char[] / MYSQL_TYPE_VAR_STRING:
\t
'%s'"
,
(
char
*
)
pspv
),
!
strcmp
(
pspv
,
"VVVVVVVVVVVVVVVV"
));
WL4435_TEST
(
"TINYTEXT"
,
"REPEAT('t', 16)"
,
MYSQL_TYPE_TINY_BLOB
,
MYSQL_TYPE_BLOB
,
char
,
[
255
],
(
" - TINYTEXT / char[] / MYSQL_TYPE_TINY_BLOB:
\t\t
'%s'"
,
(
char
*
)
pspv
),
!
strcmp
(
pspv
,
"tttttttttttttttt"
));
WL4435_TEST
(
"TEXT"
,
"REPEAT('t', 16)"
,
MYSQL_TYPE_BLOB
,
MYSQL_TYPE_BLOB
,
char
,
[
255
],
(
" - TEXT / char[] / MYSQL_TYPE_BLOB:
\t\t\t
'%s'"
,
(
char
*
)
pspv
),
!
strcmp
(
pspv
,
"tttttttttttttttt"
));
WL4435_TEST
(
"MEDIUMTEXT"
,
"REPEAT('t', 16)"
,
MYSQL_TYPE_MEDIUM_BLOB
,
MYSQL_TYPE_BLOB
,
char
,
[
255
],
(
" - MEDIUMTEXT / char[] / MYSQL_TYPE_MEDIUM_BLOB:
\t
'%s'"
,
(
char
*
)
pspv
),
!
strcmp
(
pspv
,
"tttttttttttttttt"
));
WL4435_TEST
(
"LONGTEXT"
,
"REPEAT('t', 16)"
,
MYSQL_TYPE_LONG_BLOB
,
MYSQL_TYPE_BLOB
,
char
,
[
255
],
(
" - LONGTEXT / char[] / MYSQL_TYPE_LONG_BLOB:
\t\t
'%s'"
,
(
char
*
)
pspv
),
!
strcmp
(
pspv
,
"tttttttttttttttt"
));
WL4435_TEST
(
"BINARY(32)"
,
"REPEAT('
\1
', 16)"
,
MYSQL_TYPE_STRING
,
MYSQL_TYPE_STRING
,
char
,
[
255
],
(
" - BINARY(32) / char[] / MYSQL_TYPE_STRING:
\t\t
'%s'"
,
(
char
*
)
pspv
),
memset
(
tmp
,
1
,
16
)
&&
!
memcmp
(
tmp
,
pspv
,
16
));
WL4435_TEST
(
"VARBINARY(32)"
,
"REPEAT('
\1
', 16)"
,
MYSQL_TYPE_VAR_STRING
,
MYSQL_TYPE_VAR_STRING
,
char
,
[
255
],
(
" - VARBINARY(32) / char[] / MYSQL_TYPE_VAR_STRING:
\t
'%s'"
,
(
char
*
)
pspv
),
memset
(
tmp
,
1
,
16
)
&&
!
memcmp
(
tmp
,
pspv
,
16
));
WL4435_TEST
(
"TINYBLOB"
,
"REPEAT('
\2
', 16)"
,
MYSQL_TYPE_TINY_BLOB
,
MYSQL_TYPE_BLOB
,
char
,
[
255
],
(
" - TINYBLOB / char[] / MYSQL_TYPE_TINY_BLOB:
\t\t
'%s'"
,
(
char
*
)
pspv
),
memset
(
tmp
,
2
,
16
)
&&
!
memcmp
(
tmp
,
pspv
,
16
));
WL4435_TEST
(
"BLOB"
,
"REPEAT('
\2
', 16)"
,
MYSQL_TYPE_BLOB
,
MYSQL_TYPE_BLOB
,
char
,
[
255
],
(
" - BLOB / char[] / MYSQL_TYPE_BLOB:
\t\t\t
'%s'"
,
(
char
*
)
pspv
),
memset
(
tmp
,
2
,
16
)
&&
!
memcmp
(
tmp
,
pspv
,
16
));
WL4435_TEST
(
"MEDIUMBLOB"
,
"REPEAT('
\2
', 16)"
,
MYSQL_TYPE_MEDIUM_BLOB
,
MYSQL_TYPE_BLOB
,
char
,
[
255
],
(
" - MEDIUMBLOB / char[] / MYSQL_TYPE_MEDIUM_BLOB:
\t
'%s'"
,
(
char
*
)
pspv
),
memset
(
tmp
,
2
,
16
)
&&
!
memcmp
(
tmp
,
pspv
,
16
));
WL4435_TEST
(
"LONGBLOB"
,
"REPEAT('
\2
', 16)"
,
MYSQL_TYPE_LONG_BLOB
,
MYSQL_TYPE_BLOB
,
char
,
[
255
],
(
" - LONGBLOB / char[] / MYSQL_TYPE_LONG_BLOB:
\t\t
'%s'"
,
(
char
*
)
pspv
),
memset
(
tmp
,
2
,
16
)
&&
!
memcmp
(
tmp
,
pspv
,
16
));
}
/* Test simple prepare field results */
static
void
test_prepare_field_result
()
...
...
@@ -19468,6 +19717,7 @@ static struct my_tests_st my_tests[]= {
{
"test_wl4284_1"
,
test_wl4284_1
},
{
"test_wl4435"
,
test_wl4435
},
{
"test_wl4435_2"
,
test_wl4435_2
},
{
"test_wl4435_3"
,
test_wl4435_3
},
{
"test_bug38486"
,
test_bug38486
},
{
"test_bug33831"
,
test_bug33831
},
{
"test_bug40365"
,
test_bug40365
},
...
...
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