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
1ba3a170
Commit
1ba3a170
authored
Sep 09, 2004
by
unknown
Browse files
Options
Browse Files
Download
Plain Diff
Merge tulin@bk-internal.mysql.com:/home/bk/mysql-4.1
into poseidon.(none):/home/tomas/mysql-4.1
parents
2cd71180
1460e454
Changes
13
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
287 additions
and
40 deletions
+287
-40
client/mysql.cc
client/mysql.cc
+6
-1
libmysql/errmsg.c
libmysql/errmsg.c
+6
-6
libmysql/libmysql.c
libmysql/libmysql.c
+19
-7
mysql-test/r/group_by.result
mysql-test/r/group_by.result
+9
-0
mysql-test/r/subselect_innodb.result
mysql-test/r/subselect_innodb.result
+8
-0
mysql-test/t/group_by.test
mysql-test/t/group_by.test
+9
-0
mysql-test/t/subselect_innodb.test
mysql-test/t/subselect_innodb.test
+14
-0
sql-common/client.c
sql-common/client.c
+2
-3
sql/item_sum.cc
sql/item_sum.cc
+2
-0
sql/log.cc
sql/log.cc
+1
-1
sql/net_serv.cc
sql/net_serv.cc
+0
-2
sql/sql_prepare.cc
sql/sql_prepare.cc
+9
-1
tests/client_test.c
tests/client_test.c
+202
-19
No files found.
client/mysql.cc
View file @
1ba3a170
...
...
@@ -2947,7 +2947,12 @@ put_info(const char *str,INFO_TYPE info_type, uint error, const char *sqlstate)
(
void
)
fflush
(
file
);
fprintf
(
file
,
"ERROR"
);
if
(
error
)
{
if
(
sqlstate
)
(
void
)
fprintf
(
file
,
" %d (%s)"
,
error
,
sqlstate
);
else
(
void
)
fprintf
(
file
,
" %d"
,
error
);
}
if
(
status
.
query_start_line
&&
line_numbers
)
{
(
void
)
fprintf
(
file
,
" at line %lu"
,
status
.
query_start_line
);
...
...
libmysql/errmsg.c
View file @
1ba3a170
...
...
@@ -42,7 +42,7 @@ const char *client_errors[]=
"Error in server handshake"
,
"Lost connection to MySQL server during query"
,
"Commands out of sync; you can't run this command now"
,
"Verbindung ueber Named Pipe
; Host: %-.100
s"
,
"Verbindung ueber Named Pipe
: %-.32
s"
,
"Kann nicht auf Named Pipe warten. Host: %-.64s pipe: %-.32s (%lu)"
,
"Kann Named Pipe nicht oeffnen. Host: %-.64s pipe: %-.32s (%lu)"
,
"Kann den Status der Named Pipe nicht setzen. Host: %-.64s pipe: %-.32s (%lu)"
,
...
...
@@ -64,7 +64,7 @@ const char *client_errors[]=
"Invalid parameter number"
,
"Can't send long data for non-string/non-binary data types (parameter: %d)"
,
"Using unsupported buffer type: %d (parameter: %d)"
,
"Shared memory
(%lu)
"
,
"Shared memory
: %-.100s
"
,
"Can't open shared memory; client could not create request event (%lu)"
,
"Can't open shared memory; no answer event received from server (%lu)"
,
"Can't open shared memory; server could not allocate file mapping (%lu)"
,
...
...
@@ -101,7 +101,7 @@ const char *client_errors[]=
"Erro na negociao de acesso ao servidor"
,
"Conexo perdida com servidor MySQL durante 'query'"
,
"Comandos fora de sincronismo; voc no pode executar este comando agora"
,
"
%-.100s via 'named pipe'
"
,
"
Named pipe: %-.32s
"
,
"No pode esperar pelo 'named pipe' para o 'host' %-.64s - 'pipe' %-.32s (%lu)"
,
"No pode abrir 'named pipe' para o 'host' %-.64s - 'pipe' %-.32s (%lu)"
,
"No pode estabelecer o estado do 'named pipe' para o 'host' %-.64s - 'pipe' %-.32s (%lu)"
,
...
...
@@ -123,7 +123,7 @@ const char *client_errors[]=
"Invalid parameter number"
,
"Can't send long data for non-string/non-binary data types (parameter: %d)"
,
"Using unsupported buffer type: %d (parameter: %d)"
,
"Shared memory
(%lu)
"
,
"Shared memory
: %-.100s
"
,
"Can't open shared memory; client could not create request event (%lu)"
,
"Can't open shared memory; no answer event received from server (%lu)"
,
"Can't open shared memory; server could not allocate file mapping (%lu)"
,
...
...
@@ -158,7 +158,7 @@ const char *client_errors[]=
"Error in server handshake"
,
"Lost connection to MySQL server during query"
,
"Commands out of sync; you can't run this command now"
,
"
%-.100s via named pipe
"
,
"
Named pipe: %-.32s
"
,
"Can't wait for named pipe to host: %-.64s pipe: %-.32s (%lu)"
,
"Can't open named pipe to host: %-.64s pipe: %-.32s (%lu)"
,
"Can't set state of named pipe to host: %-.64s pipe: %-.32s (%lu)"
,
...
...
@@ -180,7 +180,7 @@ const char *client_errors[]=
"Invalid parameter number"
,
"Can't send long data for non-string/non-binary data types (parameter: %d)"
,
"Using unsupported buffer type: %d (parameter: %d)"
,
"Shared memory
(%lu)
"
,
"Shared memory
: %-.100s
"
,
"Can't open shared memory; client could not create request event (%lu)"
,
"Can't open shared memory; no answer event received from server (%lu)"
,
"Can't open shared memory; server could not allocate file mapping (%lu)"
,
...
...
libmysql/libmysql.c
View file @
1ba3a170
...
...
@@ -1703,16 +1703,18 @@ static void stmt_update_metadata(MYSQL_STMT *stmt, MYSQL_ROWS *data);
/**************** Misc utility functions ****************************/
/*
Reallocate the NET package to
be at least of 'length' bytes
Reallocate the NET package to
have at least length bytes available.
SYNPOSIS
my_realloc_str()
net The NET structure to modify
length Ensure that net->buff is at least this big
net The NET structure to modify.
length Ensure that net->buff has space for at least
this number of bytes.
RETURN VALUES
0 ok
1 Error
0 Success.
1 Error, i.e. out of memory or requested packet size is bigger
than max_allowed_packet. The error code is stored in net->last_errno.
*/
static
my_bool
my_realloc_str
(
NET
*
net
,
ulong
length
)
...
...
@@ -2365,7 +2367,7 @@ static my_bool store_param(MYSQL_STMT *stmt, MYSQL_BIND *param)
*/
if
((
my_realloc_str
(
net
,
*
param
->
length
)))
{
set_stmt_error
(
stmt
,
CR_OUT_OF_MEMORY
,
unknown_sqlstate
);
set_stmt_error
(
stmt
,
net
->
last_errno
,
unknown_sqlstate
);
DBUG_RETURN
(
1
);
}
(
*
param
->
store_param_func
)(
net
,
param
);
...
...
@@ -2427,6 +2429,11 @@ int cli_stmt_execute(MYSQL_STMT *stmt)
net_clear
(
net
);
/* Sets net->write_pos */
/* Reserve place for null-marker bytes */
null_count
=
(
stmt
->
param_count
+
7
)
/
8
;
if
(
my_realloc_str
(
net
,
null_count
+
1
))
{
set_stmt_error
(
stmt
,
net
->
last_errno
,
unknown_sqlstate
);
DBUG_RETURN
(
1
);
}
bzero
((
char
*
)
net
->
write_pos
,
null_count
);
net
->
write_pos
+=
null_count
;
param_end
=
stmt
->
params
+
stmt
->
param_count
;
...
...
@@ -2435,6 +2442,11 @@ int cli_stmt_execute(MYSQL_STMT *stmt)
*
(
net
->
write_pos
)
++=
(
uchar
)
stmt
->
send_types_to_server
;
if
(
stmt
->
send_types_to_server
)
{
if
(
my_realloc_str
(
net
,
2
*
stmt
->
param_count
))
{
set_stmt_error
(
stmt
,
net
->
last_errno
,
unknown_sqlstate
);
DBUG_RETURN
(
1
);
}
/*
Store types of parameters in first in first package
that is sent to the server.
...
...
mysql-test/r/group_by.result
View file @
1ba3a170
...
...
@@ -629,3 +629,12 @@ explain SELECT i, COUNT(DISTINCT(i)) FROM t1 GROUP BY j ORDER BY NULL;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 6 Using filesort
DROP TABLE t1;
create table t1 ( col1 int, col2 int );
insert into t1 values (1,1),(1,2),(1,3),(2,1),(2,2);
select group_concat( distinct col1 ) as alias from t1
group by col2 having alias like '%';
alias
1,2
1,2
1
drop table t1;
mysql-test/r/subselect_innodb.result
View file @
1ba3a170
...
...
@@ -106,3 +106,11 @@ a b
2 12
4 105
drop table t1, t2;
CREATE TABLE `t1` ( `unit` varchar(50) NOT NULL default '', `ingredient` varchar(50) NOT NULL default '') ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `t2` ( `ingredient` varchar(50) NOT NULL default '', `unit` varchar(50) NOT NULL default '', PRIMARY KEY (ingredient, unit)) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `t1` VALUES ('xx','yy');
INSERT INTO `t2` VALUES ('yy','xx');
SELECT R.unit, R.ingredient FROM t1 R WHERE R.ingredient IN (SELECT N.ingredient FROM t2 N WHERE N.unit = R.unit);
unit ingredient
xx yy
drop table t1, t2;
mysql-test/t/group_by.test
View file @
1ba3a170
...
...
@@ -456,3 +456,12 @@ INSERT INTO t1 VALUES (1,2),(2,3),(4,5),(3,5),(1,5),(23,5);
SELECT
i
,
COUNT
(
DISTINCT
(
i
))
FROM
t1
GROUP
BY
j
ORDER
BY
NULL
;
explain
SELECT
i
,
COUNT
(
DISTINCT
(
i
))
FROM
t1
GROUP
BY
j
ORDER
BY
NULL
;
DROP
TABLE
t1
;
# Test for BUG#5400: GROUP_CONCAT returns everything twice.
create
table
t1
(
col1
int
,
col2
int
);
insert
into
t1
values
(
1
,
1
),(
1
,
2
),(
1
,
3
),(
2
,
1
),(
2
,
2
);
select
group_concat
(
distinct
col1
)
as
alias
from
t1
group
by
col2
having
alias
like
'%'
;
drop
table
t1
;
mysql-test/t/subselect_innodb.test
View file @
1ba3a170
...
...
@@ -111,3 +111,17 @@ create table t2 (a int) engine=innodb;
insert
into
t2
values
(
1
),(
2
),(
3
),(
4
);
select
a
,
sum
(
b
)
as
b
from
t1
group
by
a
having
b
>
(
select
max
(
a
)
from
t2
);
drop
table
t1
,
t2
;
#
# bug #5220 test suite
#
CREATE
TABLE
`t1`
(
`unit`
varchar
(
50
)
NOT
NULL
default
''
,
`ingredient`
varchar
(
50
)
NOT
NULL
default
''
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
latin1
;
CREATE
TABLE
`t2`
(
`ingredient`
varchar
(
50
)
NOT
NULL
default
''
,
`unit`
varchar
(
50
)
NOT
NULL
default
''
,
PRIMARY
KEY
(
ingredient
,
unit
))
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
latin1
;
INSERT
INTO
`t1`
VALUES
(
'xx'
,
'yy'
);
INSERT
INTO
`t2`
VALUES
(
'yy'
,
'xx'
);
SELECT
R
.
unit
,
R
.
ingredient
FROM
t1
R
WHERE
R
.
ingredient
IN
(
SELECT
N
.
ingredient
FROM
t2
N
WHERE
N
.
unit
=
R
.
unit
);
drop
table
t1
,
t2
;
sql-common/client.c
View file @
1ba3a170
...
...
@@ -1615,7 +1615,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
sock
=
0
;
unix_socket
=
0
;
host
=
mysql
->
options
.
shared_memory_base_name
;
host_info
=
(
char
*
)
ER
(
CR_SHARED_MEMORY_CONNECTION
);
sprintf
(
host_info
=
buff
,
ER
(
CR_SHARED_MEMORY_CONNECTION
),
host
);
}
}
#endif
/* HAVE_SMEM */
...
...
@@ -1679,8 +1679,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
else
{
net
->
vio
=
vio_new_win32pipe
(
hPipe
);
sprintf
(
host_info
=
buff
,
ER
(
CR_NAMEDPIPE_CONNECTION
),
host
,
unix_socket
);
sprintf
(
host_info
=
buff
,
ER
(
CR_NAMEDPIPE_CONNECTION
),
unix_socket
);
}
}
#endif
...
...
sql/item_sum.cc
View file @
1ba3a170
...
...
@@ -2121,6 +2121,8 @@ String* Item_func_group_concat::val_str(String* str)
DBUG_ASSERT
(
fixed
==
1
);
if
(
null_value
)
return
0
;
if
(
result
.
length
())
return
&
result
;
if
(
tree_mode
)
{
tree_walk
(
tree
,
(
tree_walk_action
)
&
dump_leaf_key
,
(
void
*
)
this
,
...
...
sql/log.cc
View file @
1ba3a170
...
...
@@ -1994,7 +1994,7 @@ void print_buffer_to_file(enum loglevel level, const char *buffer)
start
->
tm_min
,
start
->
tm_sec
,
(
level
==
ERROR_LEVEL
?
"ERROR"
:
level
==
WARNING_LEVEL
?
"WARNING"
:
"
INFORMATION
"
),
"WARNING"
:
"
NOTE
"
),
buffer
);
fflush
(
stderr
);
...
...
sql/net_serv.cc
View file @
1ba3a170
...
...
@@ -193,9 +193,7 @@ my_bool net_realloc(NET *net, ulong length)
{
net
->
error
=
1
;
net
->
report_error
=
1
;
#ifdef MYSQL_SERVER
net
->
last_errno
=
ER_OUT_OF_RESOURCES
;
#endif
DBUG_RETURN
(
1
);
}
net
->
buff
=
net
->
write_pos
=
buff
;
...
...
sql/sql_prepare.cc
View file @
1ba3a170
...
...
@@ -1475,8 +1475,16 @@ error:
static
bool
init_param_array
(
Prepared_statement
*
stmt
)
{
LEX
*
lex
=
stmt
->
lex
;
THD
*
thd
=
stmt
->
thd
;
if
((
stmt
->
param_count
=
lex
->
param_list
.
elements
))
{
if
(
stmt
->
param_count
>
(
uint
)
UINT_MAX16
)
{
/* Error code to be defined in 5.0 */
send_error
(
thd
,
ER_UNKNOWN_ERROR
,
"Prepared statement contains too many placeholders."
);
return
1
;
}
Item_param
**
to
;
List_iterator
<
Item_param
>
param_iterator
(
lex
->
param_list
);
/* Use thd->mem_root as it points at statement mem_root */
...
...
@@ -1485,7 +1493,7 @@ static bool init_param_array(Prepared_statement *stmt)
sizeof
(
Item_param
*
)
*
stmt
->
param_count
);
if
(
!
stmt
->
param_array
)
{
send_error
(
stmt
->
thd
,
ER_OUT_OF_RESOURCES
);
send_error
(
thd
,
ER_OUT_OF_RESOURCES
);
return
1
;
}
for
(
to
=
stmt
->
param_array
;
...
...
tests/client_test.c
View file @
1ba3a170
...
...
@@ -223,7 +223,7 @@ static void client_disconnect()
if
(
mysql
)
{
fprintf
(
stdout
,
"
\n
droping the test database '%s' ..."
,
current_db
);
fprintf
(
stdout
,
"
\n
drop
p
ing the test database '%s' ..."
,
current_db
);
strxmov
(
query
,
"DROP DATABASE IF EXISTS "
,
current_db
,
NullS
);
mysql_query
(
mysql
,
query
);
...
...
@@ -797,21 +797,21 @@ static void test_tran_bdb()
rc
=
mysql_commit
(
mysql
);
myquery
(
rc
);
/* now insert the second row, and rollback the transaction */
/* now insert the second row, and roll
back the transaction */
rc
=
mysql_query
(
mysql
,
"INSERT INTO my_demo_transaction VALUES(20, 'mysql')"
);
myquery
(
rc
);
rc
=
mysql_rollback
(
mysql
);
myquery
(
rc
);
/* delete first row, and roll
back it
*/
/* delete first row, and roll
it back
*/
rc
=
mysql_query
(
mysql
,
"DELETE FROM my_demo_transaction WHERE col1= 10"
);
myquery
(
rc
);
rc
=
mysql_rollback
(
mysql
);
myquery
(
rc
);
/* test the results now, only one row should exist
s
*/
/* test the results now, only one row should exist */
rc
=
mysql_query
(
mysql
,
"SELECT * FROM my_demo_transaction"
);
myquery
(
rc
);
...
...
@@ -822,7 +822,7 @@ static void test_tran_bdb()
my_process_result_set
(
result
);
mysql_free_result
(
result
);
/* test the results now, only one row should exist
s
*/
/* test the results now, only one row should exist */
rc
=
mysql_query
(
mysql
,
"SELECT * FROM my_demo_transaction"
);
myquery
(
rc
);
...
...
@@ -870,21 +870,21 @@ static void test_tran_innodb()
rc
=
mysql_commit
(
mysql
);
myquery
(
rc
);
/* now insert the second row, and rollback the transaction */
/* now insert the second row, and roll
back the transaction */
rc
=
mysql_query
(
mysql
,
"INSERT INTO my_demo_transaction VALUES(20, 'mysql')"
);
myquery
(
rc
);
rc
=
mysql_rollback
(
mysql
);
myquery
(
rc
);
/* delete first row, and roll
back it
*/
/* delete first row, and roll
it back
*/
rc
=
mysql_query
(
mysql
,
"DELETE FROM my_demo_transaction WHERE col1= 10"
);
myquery
(
rc
);
rc
=
mysql_rollback
(
mysql
);
myquery
(
rc
);
/* test the results now, only one row should exist
s
*/
/* test the results now, only one row should exist */
rc
=
mysql_query
(
mysql
,
"SELECT * FROM my_demo_transaction"
);
myquery
(
rc
);
...
...
@@ -895,7 +895,7 @@ static void test_tran_innodb()
my_process_result_set
(
result
);
mysql_free_result
(
result
);
/* test the results now, only one row should exist
s
*/
/* test the results now, only one row should exist */
rc
=
mysql_query
(
mysql
,
"SELECT * FROM my_demo_transaction"
);
myquery
(
rc
);
...
...
@@ -1158,7 +1158,7 @@ static void test_prepare()
rc
=
mysql_commit
(
mysql
);
myquery
(
rc
);
/* test the results now, only one row should exist
s
*/
/* test the results now, only one row should exist */
assert
(
tiny_data
==
(
char
)
my_stmt_result
(
"SELECT * FROM my_prepare"
));
stmt
=
mysql_simple_prepare
(
mysql
,
"SELECT * FROM my_prepare"
);
...
...
@@ -1304,7 +1304,7 @@ static void test_double_compare()
rc
=
mysql_commit
(
mysql
);
myquery
(
rc
);
/* test the results now, only one row should exist
s
*/
/* test the results now, only one row should exist */
rc
=
mysql_query
(
mysql
,
"SELECT * FROM test_double_compare"
);
myquery
(
rc
);
...
...
@@ -1740,7 +1740,7 @@ static void test_select()
rc
=
mysql_query
(
mysql
,
"INSERT INTO test_select VALUES(10, 'venu')"
);
myquery
(
rc
);
/* now insert the second row, and rollback the transaction */
/* now insert the second row, and roll
back the transaction */
rc
=
mysql_query
(
mysql
,
"INSERT INTO test_select VALUES(20, 'mysql')"
);
myquery
(
rc
);
...
...
@@ -2259,7 +2259,7 @@ static void test_simple_update()
rc
=
mysql_commit
(
mysql
);
myquery
(
rc
);
/* test the results now, only one row should exist
s
*/
/* test the results now, only one row should exist */
rc
=
mysql_query
(
mysql
,
"SELECT * FROM test_update"
);
myquery
(
rc
);
...
...
@@ -2738,7 +2738,7 @@ static void test_simple_delete()
rc
=
mysql_commit
(
mysql
);
myquery
(
rc
);
/* test the results now, only one row should exist
s
*/
/* test the results now, only one row should exist */
rc
=
mysql_query
(
mysql
,
"SELECT * FROM test_simple_delete"
);
myquery
(
rc
);
...
...
@@ -2837,7 +2837,7 @@ static void test_update()
rc
=
mysql_commit
(
mysql
);
myquery
(
rc
);
/* test the results now, only one row should exist
s
*/
/* test the results now, only one row should exist */
rc
=
mysql_query
(
mysql
,
"SELECT * FROM test_update"
);
myquery
(
rc
);
...
...
@@ -2883,7 +2883,7 @@ static void test_prepare_noparam()
rc
=
mysql_commit
(
mysql
);
myquery
(
rc
);
/* test the results now, only one row should exist
s
*/
/* test the results now, only one row should exist */
rc
=
mysql_query
(
mysql
,
"SELECT * FROM my_prepare"
);
myquery
(
rc
);
...
...
@@ -3953,7 +3953,7 @@ static void test_insert()
rc
=
mysql_commit
(
mysql
);
myquery
(
rc
);
/* test the results now, only one row should exist
s
*/
/* test the results now, only one row should exist */
rc
=
mysql_query
(
mysql
,
"SELECT * FROM test_prep_insert"
);
myquery
(
rc
);
...
...
@@ -4906,7 +4906,7 @@ DROP TABLE IF EXISTS test_multi_tab";
/*
First test that we get an error for multi statements
(Beca
su
e default connection is not opened with CLIENT_MULTI_STATEMENTS)
(Beca
us
e default connection is not opened with CLIENT_MULTI_STATEMENTS)
*/
rc
=
mysql_query
(
mysql
,
query
);
/* syntax error */
myquery_r
(
rc
);
...
...
@@ -4920,7 +4920,7 @@ DROP TABLE IF EXISTS test_multi_tab";
exit
(
1
);
}
/* Create connection that supp
rot
multi statements */
/* Create connection that supp
orts
multi statements */
if
(
!
(
mysql_real_connect
(
mysql_local
,
opt_host
,
opt_user
,
opt_password
,
current_db
,
opt_port
,
opt_unix_socket
,
CLIENT_MULTI_STATEMENTS
)))
...
...
@@ -10209,6 +10209,188 @@ static void test_bug5399()
#undef NUM_OF_USED_STMT
}
static
void
test_bug5194
()
{
MYSQL_STMT
*
stmt
;
MYSQL_BIND
*
bind
;
char
*
query
;
char
*
param_str
;
int
param_str_length
;
const
char
*
stmt_text
;
int
rc
;
float
float_array
[
250
]
=
{
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
,
0
.
25
};
float
*
fa_ptr
=
float_array
;
/* Number of columns per row */
const
int
COLUMN_COUNT
=
sizeof
(
float_array
)
/
sizeof
(
*
float_array
);
/* Number of rows per bulk insert to start with */
const
int
MIN_ROWS_PER_INSERT
=
260
;
/* Max number of rows per bulk insert to end with */
const
int
MAX_ROWS_PER_INSERT
=
300
;
const
int
MAX_PARAM_COUNT
=
COLUMN_COUNT
*
MAX_ROWS_PER_INSERT
;
const
char
*
query_template
=
"insert into t1 values %s"
;
const
int
CHARS_PER_PARAM
=
5
;
/* space needed to place ", ?" in the query */
const
int
uint16_max
=
65535
;
int
nrows
,
i
;
myheader
(
"test_bug5194"
);
stmt_text
=
"drop table if exists t1"
;
rc
=
mysql_real_query
(
mysql
,
stmt_text
,
strlen
(
stmt_text
));
stmt_text
=
"create table if not exists t1"
"(c1 float, c2 float, c3 float, c4 float, c5 float, c6 float, "
"c7 float, c8 float, c9 float, c10 float, c11 float, c12 float, "
"c13 float, c14 float, c15 float, c16 float, c17 float, c18 float, "
"c19 float, c20 float, c21 float, c22 float, c23 float, c24 float, "
"c25 float, c26 float, c27 float, c28 float, c29 float, c30 float, "
"c31 float, c32 float, c33 float, c34 float, c35 float, c36 float, "
"c37 float, c38 float, c39 float, c40 float, c41 float, c42 float, "
"c43 float, c44 float, c45 float, c46 float, c47 float, c48 float, "
"c49 float, c50 float, c51 float, c52 float, c53 float, c54 float, "
"c55 float, c56 float, c57 float, c58 float, c59 float, c60 float, "
"c61 float, c62 float, c63 float, c64 float, c65 float, c66 float, "
"c67 float, c68 float, c69 float, c70 float, c71 float, c72 float, "
"c73 float, c74 float, c75 float, c76 float, c77 float, c78 float, "
"c79 float, c80 float, c81 float, c82 float, c83 float, c84 float, "
"c85 float, c86 float, c87 float, c88 float, c89 float, c90 float, "
"c91 float, c92 float, c93 float, c94 float, c95 float, c96 float, "
"c97 float, c98 float, c99 float, c100 float, c101 float, c102 float, "
"c103 float, c104 float, c105 float, c106 float, c107 float, c108 float, "
"c109 float, c110 float, c111 float, c112 float, c113 float, c114 float, "
"c115 float, c116 float, c117 float, c118 float, c119 float, c120 float, "
"c121 float, c122 float, c123 float, c124 float, c125 float, c126 float, "
"c127 float, c128 float, c129 float, c130 float, c131 float, c132 float, "
"c133 float, c134 float, c135 float, c136 float, c137 float, c138 float, "
"c139 float, c140 float, c141 float, c142 float, c143 float, c144 float, "
"c145 float, c146 float, c147 float, c148 float, c149 float, c150 float, "
"c151 float, c152 float, c153 float, c154 float, c155 float, c156 float, "
"c157 float, c158 float, c159 float, c160 float, c161 float, c162 float, "
"c163 float, c164 float, c165 float, c166 float, c167 float, c168 float, "
"c169 float, c170 float, c171 float, c172 float, c173 float, c174 float, "
"c175 float, c176 float, c177 float, c178 float, c179 float, c180 float, "
"c181 float, c182 float, c183 float, c184 float, c185 float, c186 float, "
"c187 float, c188 float, c189 float, c190 float, c191 float, c192 float, "
"c193 float, c194 float, c195 float, c196 float, c197 float, c198 float, "
"c199 float, c200 float, c201 float, c202 float, c203 float, c204 float, "
"c205 float, c206 float, c207 float, c208 float, c209 float, c210 float, "
"c211 float, c212 float, c213 float, c214 float, c215 float, c216 float, "
"c217 float, c218 float, c219 float, c220 float, c221 float, c222 float, "
"c223 float, c224 float, c225 float, c226 float, c227 float, c228 float, "
"c229 float, c230 float, c231 float, c232 float, c233 float, c234 float, "
"c235 float, c236 float, c237 float, c238 float, c239 float, c240 float, "
"c241 float, c242 float, c243 float, c244 float, c245 float, c246 float, "
"c247 float, c248 float, c249 float, c250 float)"
;
rc
=
mysql_real_query
(
mysql
,
stmt_text
,
strlen
(
stmt_text
));
myquery
(
rc
);
bind
=
(
MYSQL_BIND
*
)
malloc
(
MAX_PARAM_COUNT
*
sizeof
(
MYSQL_BIND
));
query
=
(
char
*
)
malloc
(
strlen
(
query_template
)
+
MAX_PARAM_COUNT
*
CHARS_PER_PARAM
+
1
);
param_str
=
(
char
*
)
malloc
(
COLUMN_COUNT
*
CHARS_PER_PARAM
);
if
(
bind
==
0
||
query
==
0
||
param_str
==
0
)
{
fprintf
(
stderr
,
"Can't allocate enough memory for query structs
\n
"
);
return
;
}
stmt
=
mysql_stmt_init
(
mysql
);
/* setup a template for one row of parameters */
sprintf
(
param_str
,
"("
);
for
(
i
=
1
;
i
<
COLUMN_COUNT
;
++
i
)
strcat
(
param_str
,
"?, "
);
strcat
(
param_str
,
"?)"
);
param_str_length
=
strlen
(
param_str
);
/* setup bind array */
bzero
(
bind
,
MAX_PARAM_COUNT
*
sizeof
(
MYSQL_BIND
));
for
(
i
=
0
;
i
<
MAX_PARAM_COUNT
;
++
i
)
{
bind
[
i
].
buffer_type
=
MYSQL_TYPE_FLOAT
;
bind
[
i
].
buffer
=
fa_ptr
;
if
(
++
fa_ptr
==
float_array
+
COLUMN_COUNT
)
fa_ptr
=
float_array
;
}
/*
Test each number of rows per bulk insert, so that we can see where
MySQL fails.
*/
for
(
nrows
=
MIN_ROWS_PER_INSERT
;
nrows
<=
MAX_ROWS_PER_INSERT
;
++
nrows
)
{
char
*
query_ptr
;
/* Create statement text for current number of rows */
sprintf
(
query
,
query_template
,
param_str
);
query_ptr
=
query
+
strlen
(
query
);
for
(
i
=
1
;
i
<
nrows
;
++
i
)
{
memcpy
(
query_ptr
,
", "
,
2
);
query_ptr
+=
2
;
memcpy
(
query_ptr
,
param_str
,
param_str_length
);
query_ptr
+=
param_str_length
;
}
*
query_ptr
=
'\0'
;
rc
=
mysql_stmt_prepare
(
stmt
,
query
,
query_ptr
-
query
);
if
(
rc
&&
nrows
*
COLUMN_COUNT
>
uint16_max
)
{
printf
(
"Failed to prepare a statement with %d placeholders "
"(as expected).
\n
"
,
nrows
*
COLUMN_COUNT
);
break
;
}
else
check_execute
(
stmt
,
rc
);
printf
(
"Insert: query length= %d, row count= %d, param count= %lu
\n
"
,
strlen
(
query
),
nrows
,
mysql_stmt_param_count
(
stmt
));
/* bind the parameter array and execute the query */
rc
=
mysql_stmt_bind_param
(
stmt
,
bind
);
check_execute
(
stmt
,
rc
);
rc
=
mysql_stmt_execute
(
stmt
);
check_execute
(
stmt
,
rc
);
}
mysql_stmt_close
(
stmt
);
free
(
bind
);
free
(
query
);
free
(
param_str
);
stmt_text
=
"drop table t1"
;
rc
=
mysql_real_query
(
mysql
,
stmt_text
,
strlen
(
stmt_text
));
myquery
(
rc
);
}
/*
Read and parse arguments and MySQL options from my.cnf
*/
...
...
@@ -10511,6 +10693,7 @@ int main(int argc, char **argv)
dates in the server */
test_bug5399
();
/* check that statement id uniquely identifies
statement */
test_bug5194
();
/* bulk inserts in prepared mode */
/*
XXX: PLEASE RUN THIS PROGRAM UNDER VALGRIND AND VERIFY THAT YOUR TEST
DOESN'T CONTAIN WARNINGS/ERRORS BEFORE YOU PUSH.
...
...
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