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
39b72750
Commit
39b72750
authored
Jan 16, 2007
by
msvensson@neptunus.(none)
Browse files
Options
Browse Files
Download
Plain Diff
Merge neptunus.(none):/home/msvensson/mysql/bug15518/my50-bug15518
into neptunus.(none):/home/msvensson/mysql/mysql-5.1-maint
parents
08cbe046
f507bb2c
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
117 additions
and
15 deletions
+117
-15
client/mysqltest.c
client/mysqltest.c
+21
-4
libmysql/libmysql.c
libmysql/libmysql.c
+11
-3
tests/mysql_client_test.c
tests/mysql_client_test.c
+85
-8
No files found.
client/mysqltest.c
View file @
39b72750
...
@@ -725,6 +725,20 @@ void close_connections()
...
@@ -725,6 +725,20 @@ void close_connections()
}
}
void
close_statements
()
{
struct
st_connection
*
con
;
DBUG_ENTER
(
"close_statements"
);
for
(
con
=
connections
;
con
<
next_con
;
con
++
)
{
if
(
con
->
stmt
)
mysql_stmt_close
(
con
->
stmt
);
con
->
stmt
=
0
;
}
DBUG_VOID_RETURN
;
}
void
close_files
()
void
close_files
()
{
{
DBUG_ENTER
(
"close_files"
);
DBUG_ENTER
(
"close_files"
);
...
@@ -2908,6 +2922,10 @@ void do_close_connection(struct st_command *command)
...
@@ -2908,6 +2922,10 @@ void do_close_connection(struct st_command *command)
}
}
}
}
#endif
#endif
if
(
next_con
->
stmt
)
mysql_stmt_close
(
next_con
->
stmt
);
next_con
->
stmt
=
0
;
mysql_close
(
&
con
->
mysql
);
mysql_close
(
&
con
->
mysql
);
if
(
con
->
util_mysql
)
if
(
con
->
util_mysql
)
mysql_close
(
con
->
util_mysql
);
mysql_close
(
con
->
util_mysql
);
...
@@ -5119,10 +5137,7 @@ void run_query_stmt(MYSQL *mysql, struct st_command *command,
...
@@ -5119,10 +5137,7 @@ void run_query_stmt(MYSQL *mysql, struct st_command *command,
*/
*/
var_set_errno
(
mysql_stmt_errno
(
stmt
));
var_set_errno
(
mysql_stmt_errno
(
stmt
));
#ifndef BUG15518_FIXED
mysql_stmt_close
(
stmt
);
cur_con
->
stmt
=
NULL
;
#endif
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
}
}
...
@@ -5909,6 +5924,8 @@ int main(int argc, char **argv)
...
@@ -5909,6 +5924,8 @@ int main(int argc, char **argv)
break
;
break
;
case
Q_DISABLE_PS_PROTOCOL
:
case
Q_DISABLE_PS_PROTOCOL
:
ps_protocol_enabled
=
0
;
ps_protocol_enabled
=
0
;
/* Close any open statements */
close_statements
();
break
;
break
;
case
Q_ENABLE_PS_PROTOCOL
:
case
Q_ENABLE_PS_PROTOCOL
:
ps_protocol_enabled
=
ps_protocol
;
ps_protocol_enabled
=
ps_protocol
;
...
...
libmysql/libmysql.c
View file @
39b72750
...
@@ -2036,6 +2036,13 @@ mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, ulong length)
...
@@ -2036,6 +2036,13 @@ mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, ulong length)
DBUG_RETURN
(
1
);
DBUG_RETURN
(
1
);
}
}
/*
Reset the last error in any case: that would clear the statement
if the previous prepare failed.
*/
stmt
->
last_errno
=
0
;
stmt
->
last_error
[
0
]
=
'\0'
;
if
((
int
)
stmt
->
state
>
(
int
)
MYSQL_STMT_INIT_DONE
)
if
((
int
)
stmt
->
state
>
(
int
)
MYSQL_STMT_INIT_DONE
)
{
{
/* This is second prepare with another statement */
/* This is second prepare with another statement */
...
@@ -2049,23 +2056,24 @@ mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, ulong length)
...
@@ -2049,23 +2056,24 @@ mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, ulong length)
*/
*/
stmt
->
bind_param_done
=
stmt
->
bind_result_done
=
FALSE
;
stmt
->
bind_param_done
=
stmt
->
bind_result_done
=
FALSE
;
stmt
->
param_count
=
stmt
->
field_count
=
0
;
stmt
->
param_count
=
stmt
->
field_count
=
0
;
stmt
->
last_errno
=
0
;
stmt
->
last_error
[
0
]
=
'\0'
;
free_root
(
&
stmt
->
mem_root
,
MYF
(
MY_KEEP_PREALLOC
));
free_root
(
&
stmt
->
mem_root
,
MYF
(
MY_KEEP_PREALLOC
));
int4store
(
buff
,
stmt
->
stmt_id
);
int4store
(
buff
,
stmt
->
stmt_id
);
/*
/*
Close statement in server
If there was a 'use' result from another statement, or from
If there was a 'use' result from another statement, or from
mysql_use_result it won't be freed in mysql_stmt_free_result and
mysql_use_result it won't be freed in mysql_stmt_free_result and
we should get 'Commands out of sync' here.
we should get 'Commands out of sync' here.
*/
*/
stmt
->
state
=
MYSQL_STMT_INIT_DONE
;
if
(
stmt_command
(
mysql
,
COM_STMT_CLOSE
,
buff
,
4
,
stmt
))
if
(
stmt_command
(
mysql
,
COM_STMT_CLOSE
,
buff
,
4
,
stmt
))
{
{
set_stmt_errmsg
(
stmt
,
mysql
->
net
.
last_error
,
mysql
->
net
.
last_errno
,
set_stmt_errmsg
(
stmt
,
mysql
->
net
.
last_error
,
mysql
->
net
.
last_errno
,
mysql
->
net
.
sqlstate
);
mysql
->
net
.
sqlstate
);
DBUG_RETURN
(
1
);
DBUG_RETURN
(
1
);
}
}
stmt
->
state
=
MYSQL_STMT_INIT_DONE
;
}
}
if
(
stmt_command
(
mysql
,
COM_STMT_PREPARE
,
query
,
length
,
stmt
))
if
(
stmt_command
(
mysql
,
COM_STMT_PREPARE
,
query
,
length
,
stmt
))
...
...
tests/mysql_client_test.c
View file @
39b72750
...
@@ -11014,7 +11014,7 @@ static void test_view()
...
@@ -11014,7 +11014,7 @@ static void test_view()
rc
=
mysql_stmt_execute
(
stmt
);
rc
=
mysql_stmt_execute
(
stmt
);
check_execute
(
stmt
,
rc
);
check_execute
(
stmt
,
rc
);
rc
=
my_process_stmt_result
(
stmt
);
rc
=
my_process_stmt_result
(
stmt
);
assert
(
1
==
rc
);
DIE_UNLESS
(
1
==
rc
);
}
}
mysql_stmt_close
(
stmt
);
mysql_stmt_close
(
stmt
);
...
@@ -11057,7 +11057,7 @@ static void test_view_where()
...
@@ -11057,7 +11057,7 @@ static void test_view_where()
rc
=
mysql_stmt_execute
(
stmt
);
rc
=
mysql_stmt_execute
(
stmt
);
check_execute
(
stmt
,
rc
);
check_execute
(
stmt
,
rc
);
rc
=
my_process_stmt_result
(
stmt
);
rc
=
my_process_stmt_result
(
stmt
);
assert
(
4
==
rc
);
DIE_UNLESS
(
4
==
rc
);
}
}
mysql_stmt_close
(
stmt
);
mysql_stmt_close
(
stmt
);
...
@@ -11140,7 +11140,7 @@ static void test_view_2where()
...
@@ -11140,7 +11140,7 @@ static void test_view_2where()
rc
=
mysql_stmt_execute
(
stmt
);
rc
=
mysql_stmt_execute
(
stmt
);
check_execute
(
stmt
,
rc
);
check_execute
(
stmt
,
rc
);
rc
=
my_process_stmt_result
(
stmt
);
rc
=
my_process_stmt_result
(
stmt
);
assert
(
0
==
rc
);
DIE_UNLESS
(
0
==
rc
);
mysql_stmt_close
(
stmt
);
mysql_stmt_close
(
stmt
);
...
@@ -11193,7 +11193,7 @@ static void test_view_star()
...
@@ -11193,7 +11193,7 @@ static void test_view_star()
rc
=
mysql_stmt_execute
(
stmt
);
rc
=
mysql_stmt_execute
(
stmt
);
check_execute
(
stmt
,
rc
);
check_execute
(
stmt
,
rc
);
rc
=
my_process_stmt_result
(
stmt
);
rc
=
my_process_stmt_result
(
stmt
);
assert
(
0
==
rc
);
DIE_UNLESS
(
0
==
rc
);
}
}
mysql_stmt_close
(
stmt
);
mysql_stmt_close
(
stmt
);
...
@@ -11256,7 +11256,7 @@ static void test_view_insert()
...
@@ -11256,7 +11256,7 @@ static void test_view_insert()
rc
=
mysql_stmt_execute
(
select_stmt
);
rc
=
mysql_stmt_execute
(
select_stmt
);
check_execute
(
select_stmt
,
rc
);
check_execute
(
select_stmt
,
rc
);
rowcount
=
(
int
)
my_process_stmt_result
(
select_stmt
);
rowcount
=
(
int
)
my_process_stmt_result
(
select_stmt
);
assert
((
i
+
1
)
==
rowcount
);
DIE_UNLESS
((
i
+
1
)
==
rowcount
);
}
}
mysql_stmt_close
(
insert_stmt
);
mysql_stmt_close
(
insert_stmt
);
mysql_stmt_close
(
select_stmt
);
mysql_stmt_close
(
select_stmt
);
...
@@ -11297,7 +11297,7 @@ static void test_left_join_view()
...
@@ -11297,7 +11297,7 @@ static void test_left_join_view()
rc
=
mysql_stmt_execute
(
stmt
);
rc
=
mysql_stmt_execute
(
stmt
);
check_execute
(
stmt
,
rc
);
check_execute
(
stmt
,
rc
);
rc
=
my_process_stmt_result
(
stmt
);
rc
=
my_process_stmt_result
(
stmt
);
assert
(
3
==
rc
);
DIE_UNLESS
(
3
==
rc
);
}
}
mysql_stmt_close
(
stmt
);
mysql_stmt_close
(
stmt
);
...
@@ -11373,7 +11373,7 @@ static void test_view_insert_fields()
...
@@ -11373,7 +11373,7 @@ static void test_view_insert_fields()
rc
=
mysql_stmt_execute
(
stmt
);
rc
=
mysql_stmt_execute
(
stmt
);
check_execute
(
stmt
,
rc
);
check_execute
(
stmt
,
rc
);
rc
=
my_process_stmt_result
(
stmt
);
rc
=
my_process_stmt_result
(
stmt
);
assert
(
1
==
rc
);
DIE_UNLESS
(
1
==
rc
);
mysql_stmt_close
(
stmt
);
mysql_stmt_close
(
stmt
);
rc
=
mysql_query
(
mysql
,
"DROP VIEW v1"
);
rc
=
mysql_query
(
mysql
,
"DROP VIEW v1"
);
...
@@ -12859,6 +12859,82 @@ static void test_bug7990()
...
@@ -12859,6 +12859,82 @@ static void test_bug7990()
DIE_UNLESS
(
!
mysql_errno
(
mysql
));
DIE_UNLESS
(
!
mysql_errno
(
mysql
));
}
}
/*
Bug #15518 - Reusing a stmt that has failed during prepare
does not clear error
*/
static
void
test_bug15518
()
{
MYSQL_STMT
*
stmt
;
MYSQL
*
mysql1
;
int
rc
;
myheader
(
"test_bug15518"
);
mysql1
=
mysql_init
(
NULL
);
if
(
!
mysql_real_connect
(
mysql1
,
opt_host
,
opt_user
,
opt_password
,
opt_db
?
opt_db
:
"test"
,
opt_port
,
opt_unix_socket
,
CLIENT_MULTI_STATEMENTS
))
{
fprintf
(
stderr
,
"Failed to connect to the database
\n
"
);
DIE_UNLESS
(
0
);
}
stmt
=
mysql_stmt_init
(
mysql1
);
/*
The prepare of foo should fail with errno 1064 since
it's not a valid query
*/
rc
=
mysql_stmt_prepare
(
stmt
,
"foo"
,
3
);
if
(
!
opt_silent
)
fprintf
(
stdout
,
"rc: %d, mysql_stmt_errno: %d, mysql_errno: %d
\n
"
,
rc
,
mysql_stmt_errno
(
stmt
),
mysql_errno
(
mysql1
));
DIE_UNLESS
(
rc
&&
mysql_stmt_errno
(
stmt
)
&&
mysql_errno
(
mysql1
));
/*
Use the same stmt and reprepare with another query that
suceeds
*/
rc
=
mysql_stmt_prepare
(
stmt
,
"SHOW STATUS"
,
12
);
if
(
!
opt_silent
)
fprintf
(
stdout
,
"rc: %d, mysql_stmt_errno: %d, mysql_errno: %d
\n
"
,
rc
,
mysql_stmt_errno
(
stmt
),
mysql_errno
(
mysql1
));
DIE_UNLESS
(
!
rc
||
mysql_stmt_errno
(
stmt
)
||
mysql_errno
(
mysql1
));
mysql_stmt_close
(
stmt
);
DIE_UNLESS
(
!
mysql_errno
(
mysql1
));
/*
part2, when connection to server has been closed
after first prepare
*/
stmt
=
mysql_stmt_init
(
mysql1
);
rc
=
mysql_stmt_prepare
(
stmt
,
"foo"
,
3
);
if
(
!
opt_silent
)
fprintf
(
stdout
,
"rc: %d, mysql_stmt_errno: %d, mysql_errno: %d
\n
"
,
rc
,
mysql_stmt_errno
(
stmt
),
mysql_errno
(
mysql1
));
DIE_UNLESS
(
rc
&&
mysql_stmt_errno
(
stmt
)
&&
mysql_errno
(
mysql1
));
/* Close connection to server */
mysql_close
(
mysql1
);
/*
Use the same stmt and reprepare with another query that
suceeds. The prepare should fail with error 2013 since
connection to server has been closed.
*/
rc
=
mysql_stmt_prepare
(
stmt
,
"SHOW STATUS"
,
12
);
if
(
!
opt_silent
)
fprintf
(
stdout
,
"rc: %d, mysql_stmt_errno: %d
\n
"
,
rc
,
mysql_stmt_errno
(
stmt
));
DIE_UNLESS
(
rc
&&
mysql_stmt_errno
(
stmt
));
mysql_stmt_close
(
stmt
);
DIE_UNLESS
(
mysql_errno
(
mysql1
));
}
static
void
test_view_sp_list_fields
()
static
void
test_view_sp_list_fields
()
{
{
...
@@ -15035,7 +15111,7 @@ static void test_bug17667()
...
@@ -15035,7 +15111,7 @@ static void test_bug17667()
}
}
else
else
{
{
assert
(
0
==
1
);
DIE_UNLESS
(
0
==
1
);
}
}
}
}
...
@@ -15962,6 +16038,7 @@ static struct my_tests_st my_tests[]= {
...
@@ -15962,6 +16038,7 @@ static struct my_tests_st my_tests[]= {
{
"test_bug19671"
,
test_bug19671
},
{
"test_bug19671"
,
test_bug19671
},
{
"test_bug21206"
,
test_bug21206
},
{
"test_bug21206"
,
test_bug21206
},
{
"test_bug21726"
,
test_bug21726
},
{
"test_bug21726"
,
test_bug21726
},
{
"test_bug15518"
,
test_bug15518
},
{
"test_bug23383"
,
test_bug23383
},
{
"test_bug23383"
,
test_bug23383
},
{
"test_bug21635"
,
test_bug21635
},
{
"test_bug21635"
,
test_bug21635
},
{
"test_status"
,
test_status
},
{
"test_status"
,
test_status
},
...
...
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