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
95b45389
Commit
95b45389
authored
Feb 15, 2006
by
jimw@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge bk-internal:/home/bk/mysql-5.1-new
into mysql.com:/home/jimw/my/mysql-5.1-clean
parents
46fcb188
d33b03ab
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
175 additions
and
43 deletions
+175
-43
client/mysqltest.c
client/mysqltest.c
+38
-30
libmysql/libmysql.c
libmysql/libmysql.c
+34
-2
mysql-test/r/mysqltest.result
mysql-test/r/mysqltest.result
+17
-2
mysql-test/r/partition.result
mysql-test/r/partition.result
+12
-0
mysql-test/t/disabled.def
mysql-test/t/disabled.def
+0
-1
mysql-test/t/mysqltest.test
mysql-test/t/mysqltest.test
+13
-0
mysql-test/t/partition.test
mysql-test/t/partition.test
+21
-0
sql/ha_partition.cc
sql/ha_partition.cc
+7
-5
tests/mysql_client_test.c
tests/mysql_client_test.c
+33
-3
No files found.
client/mysqltest.c
View file @
95b45389
...
...
@@ -1443,38 +1443,40 @@ int do_system(struct st_query *q)
/*
Print the content between echo and <delimiter> to result file.
If content is a variable, the variable value will be retrieved
Evaluate all variables in the string before printing, allow
for variable names to be escaped using \
SYNOPSIS
do_echo()
q called command
DESCRIPTION
Usage 1:
echo text
Print the text after echo until end of command to result file
Usage 2:
echo $<var_name>
Print the content of the variable <var_name> to result file
echo Some text $<var_name>
Print "Some text" plus the content of the variable <var_name> to
result file
echo Some text \$<var_name>
Print "Some text" plus $<var_name> to result file
*/
int
do_echo
(
struct
st_query
*
q
)
int
do_echo
(
struct
st_query
*
command
)
{
char
*
p
=
q
->
first_argument
;
DYNAMIC_STRING
*
ds
;
VAR
v
;
var_init
(
&
v
,
0
,
0
,
0
,
0
);
DYNAMIC_STRING
*
ds
,
ds_echo
;
ds
=
&
ds_res
;
eval_expr
(
&
v
,
p
,
0
);
/* NULL terminated */
if
(
v
.
str_val_len
)
dynstr_append_mem
(
ds
,
v
.
str_val
,
v
.
str_val_len
);
init_dynamic_string
(
&
ds_echo
,
""
,
256
,
256
);
do_eval
(
&
ds_echo
,
command
->
first_argument
);
dynstr_append_mem
(
ds
,
ds_echo
.
str
,
ds_echo
.
length
);
dynstr_append_mem
(
ds
,
"
\n
"
,
1
);
var_free
(
&
v
);
q
->
last_argument
=
q
->
end
;
dynstr_free
(
&
ds_echo
);
command
->
last_argument
=
command
->
end
;
return
0
;
}
...
...
@@ -3733,7 +3735,7 @@ static void append_stmt_result(DYNAMIC_STRING *ds, MYSQL_STMT *stmt,
if
(
mysql_stmt_fetch
(
stmt
)
!=
MYSQL_NO_DATA
)
die
(
"fetch didn't end with MYSQL_NO_DATA from statement: %d %s"
,
mysql_stmt_err
or
(
stmt
),
mysql_stmt_errno
(
stmt
));
mysql_stmt_err
no
(
stmt
),
mysql_stmt_error
(
stmt
));
free_replace_column
();
...
...
@@ -4199,7 +4201,7 @@ static void run_query_stmt(MYSQL *mysql, struct st_query *command,
if
(
mysql_stmt_prepare
(
stmt
,
query
,
query_len
))
{
handle_error
(
query
,
command
,
mysql_stmt_errno
(
stmt
),
mysql_stmt_error
(
stmt
),
mysql_stmt_sqlstate
(
stmt
),
ds
);
mysql_stmt_error
(
stmt
),
mysql_stmt_sqlstate
(
stmt
),
ds
);
goto
end
;
}
...
...
@@ -4215,29 +4217,34 @@ static void run_query_stmt(MYSQL *mysql, struct st_query *command,
parameter markers.
*/
#ifdef BUG14013_FIXED
/*
Use cursor when retrieving result
*/
if
(
cursor_protocol_enabled
)
{
/*
Use cursor when retrieving result
*/
ulong
type
=
CURSOR_TYPE_READ_ONLY
;
if
(
mysql_stmt_attr_set
(
stmt
,
STMT_ATTR_CURSOR_TYPE
,
(
void
*
)
&
type
))
die
(
"mysql_stmt_attr_set(STMT_ATTR_CURSOR_TYPE) failed': %d %s"
,
mysql_stmt_errno
(
stmt
),
mysql_stmt_error
(
stmt
));
mysql_stmt_errno
(
stmt
),
mysql_stmt_error
(
stmt
));
}
#endif
/*
Execute the query
*/
*/
if
(
mysql_stmt_execute
(
stmt
))
{
handle_error
(
query
,
command
,
mysql_stmt_errno
(
stmt
),
mysql_stmt_error
(
stmt
),
mysql_stmt_sqlstate
(
stmt
),
ds
);
mysql_stmt_error
(
stmt
),
mysql_stmt_sqlstate
(
stmt
),
ds
);
goto
end
;
}
/*
When running in cursor_protocol get the warnings from execute here
and keep them in a separate string for later.
*/
if
(
cursor_protocol_enabled
&&
!
disable_warnings
)
append_warnings
(
&
ds_execute_warnings
,
mysql
);
/*
We instruct that we want to update the "max_length" field in
mysql_stmt_store_result(), this is our only way to know how much
...
...
@@ -4247,7 +4254,7 @@ static void run_query_stmt(MYSQL *mysql, struct st_query *command,
my_bool
one
=
1
;
if
(
mysql_stmt_attr_set
(
stmt
,
STMT_ATTR_UPDATE_MAX_LENGTH
,
(
void
*
)
&
one
))
die
(
"mysql_stmt_attr_set(STMT_ATTR_UPDATE_MAX_LENGTH) failed': %d %s"
,
mysql_stmt_errno
(
stmt
),
mysql_stmt_error
(
stmt
));
mysql_stmt_errno
(
stmt
),
mysql_stmt_error
(
stmt
));
}
/*
...
...
@@ -4257,7 +4264,7 @@ static void run_query_stmt(MYSQL *mysql, struct st_query *command,
if
(
mysql_stmt_store_result
(
stmt
))
{
handle_error
(
query
,
command
,
mysql_stmt_errno
(
stmt
),
mysql_stmt_error
(
stmt
),
mysql_stmt_sqlstate
(
stmt
),
ds
);
mysql_stmt_error
(
stmt
),
mysql_stmt_sqlstate
(
stmt
),
ds
);
goto
end
;
}
...
...
@@ -4278,10 +4285,10 @@ static void run_query_stmt(MYSQL *mysql, struct st_query *command,
uint
num_fields
=
mysql_num_fields
(
res
);
if
(
display_metadata
)
append_metadata
(
ds
,
fields
,
num_fields
);
append_metadata
(
ds
,
fields
,
num_fields
);
if
(
!
display_result_vertically
)
append_table_headings
(
ds
,
fields
,
num_fields
);
append_table_headings
(
ds
,
fields
,
num_fields
);
append_stmt_result
(
ds
,
stmt
,
fields
,
num_fields
);
...
...
@@ -4303,10 +4310,11 @@ static void run_query_stmt(MYSQL *mysql, struct st_query *command,
/* Append warnings to ds - if there are any */
if
(
append_warnings
(
&
ds_execute_warnings
,
mysql
)
||
ds_prepare_warnings
.
length
||
ds_warnings
->
length
)
ds_execute_warnings
.
length
||
ds_prepare_warnings
.
length
||
ds_warnings
->
length
)
{
dynstr_append_mem
(
ds
,
"Warnings:
\n
"
,
10
);
dynstr_append_mem
(
ds
,
"Warnings:
\n
"
,
10
);
if
(
ds_warnings
->
length
)
dynstr_append_mem
(
ds
,
ds_warnings
->
str
,
ds_warnings
->
length
);
...
...
libmysql/libmysql.c
View file @
95b45389
...
...
@@ -2002,6 +2002,7 @@ mysql_stmt_init(MYSQL *mysql)
stmt
->
mysql
=
mysql
;
stmt
->
read_row_func
=
stmt_read_row_no_result_set
;
stmt
->
prefetch_rows
=
DEFAULT_PREFETCH_ROWS
;
strmov
(
stmt
->
sqlstate
,
not_error_sqlstate
);
/* The rest of statement members was bzeroed inside malloc */
DBUG_RETURN
(
stmt
);
...
...
@@ -4751,12 +4752,39 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt)
if
(
!
stmt
->
field_count
)
DBUG_RETURN
(
0
);
if
((
int
)
stmt
->
state
<
(
int
)
MYSQL_STMT_EXECUTE_DONE
||
mysql
->
status
!=
MYSQL_STATUS_GET_RESULT
)
if
((
int
)
stmt
->
state
<
(
int
)
MYSQL_STMT_EXECUTE_DONE
)
{
set_stmt_error
(
stmt
,
CR_COMMANDS_OUT_OF_SYNC
,
unknown_sqlstate
);
DBUG_RETURN
(
1
);
}
if
(
mysql
->
status
==
MYSQL_STATUS_READY
&&
stmt
->
server_status
&
SERVER_STATUS_CURSOR_EXISTS
)
{
/*
Server side cursor exist, tell server to start sending the rows
*/
NET
*
net
=
&
mysql
->
net
;
char
buff
[
4
/* statement id */
+
4
/* number of rows to fetch */
];
/* Send row request to the server */
int4store
(
buff
,
stmt
->
stmt_id
);
int4store
(
buff
+
4
,
(
int
)
~
0
);
/* number of rows to fetch */
if
(
cli_advanced_command
(
mysql
,
COM_STMT_FETCH
,
buff
,
sizeof
(
buff
),
NullS
,
0
,
1
))
{
set_stmt_errmsg
(
stmt
,
net
->
last_error
,
net
->
last_errno
,
net
->
sqlstate
);
DBUG_RETURN
(
1
);
}
}
else
if
(
mysql
->
status
!=
MYSQL_STATUS_GET_RESULT
)
{
set_stmt_error
(
stmt
,
CR_COMMANDS_OUT_OF_SYNC
,
unknown_sqlstate
);
DBUG_RETURN
(
1
);
}
if
(
result
->
data
)
{
free_root
(
&
result
->
alloc
,
MYF
(
MY_KEEP_PREALLOC
));
...
...
@@ -4797,6 +4825,10 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt)
DBUG_RETURN
(
1
);
}
/* Assert that if there was a cursor, all rows have been fetched */
DBUG_ASSERT
(
mysql
->
status
!=
MYSQL_STATUS_READY
||
(
mysql
->
server_status
&
SERVER_STATUS_LAST_ROW_SENT
));
if
(
stmt
->
update_max_length
)
{
MYSQL_ROWS
*
cur
=
result
->
data
;
...
...
mysql-test/r/mysqltest.result
View file @
95b45389
...
...
@@ -201,8 +201,14 @@ source database
- world''s most
-- popular open
# source database
'$message'
"$message"
'# MySQL: The
- world''s most
-- popular open
# source database'
"# MySQL: The
- world''s most
-- popular open
# source database"
hej
hej
hej
...
...
@@ -221,6 +227,15 @@ mysqltest: At line 1: Missing arguments to let
mysqltest: At line 1: Missing variable name in let
mysqltest: At line 1: Missing variable name in let
mysqltest: At line 1: Missing assignment operator in let
# Execute: --echo # <whatever> success: $success
# <whatever> success: 1
# Execute: echo # <whatever> success: $success ;
# <whatever> success: 1
# The next two variants work fine and expand the content of $success
# Execute: --echo $success
1
# Execute: echo $success ;
1
mysqltest: At line 1: Missing file name in source
mysqltest: At line 1: Could not open file ./non_existingFile
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/recursive.sql": At line 1: Source directives are nesting too deep
...
...
mysql-test/r/partition.result
View file @
95b45389
...
...
@@ -300,3 +300,15 @@ select * from t1 where f1 = 10;
f1 f2
10 1
drop table t1;
set session storage_engine= 'memory';
create table t1 (f_int1 int(11) default null) engine = memory
partition by range (f_int1) subpartition by hash (f_int1)
(partition part1 values less than (1000)
(subpartition subpart11 engine = memory));
set session storage_engine='myisam';
create table t1 (f_int1 integer, f_int2 integer, primary key (f_int1))
partition by hash(f_int1) partitions 2;
insert into t1 values (1,1),(2,2);
replace into t1 values (1,1),(2,2);
drop table t1;
End of 5.1 tests
mysql-test/t/disabled.def
View file @
95b45389
...
...
@@ -20,7 +20,6 @@ ndb_autodiscover2 : Needs to be fixed w.r.t binlog
ndb_binlog_basic : Results are not deterministic, Tomas will fix
ndb_binlog_ddl_multi : Bug#17038 [PATCH PENDING]
ndb_gis : garbled msgs from corrupt THD*
ndb_load : Bug#17233
partition_03ndb : Bug#16385
ps_7ndb : dbug assert in RBR mode when executing test suite
rpl_bit_npk : Bug#13418
...
...
mysql-test/t/mysqltest.test
View file @
95b45389
...
...
@@ -538,6 +538,19 @@ echo $novar1;
--
error
1
--
exec
echo
"let hi;"
|
$MYSQL_TEST
2
>&
1
# More advanced test for bug#17280
let
$success
=
1
;
--
echo
# Execute: --echo # <whatever> success: \$success
--
echo
# <whatever> success: $success
--
echo
# Execute: echo # <whatever> success: \$success ;
echo
# <whatever> success: $success ;
--
echo
# The next two variants work fine and expand the content of \$success
--
echo
# Execute: --echo \$success
--
echo
$success
--
echo
# Execute: echo \$success ;
echo
$success
;
# ----------------------------------------------------------------------------
# Test to assign let from query
# let $<var_name>=`<query>`;
...
...
mysql-test/t/partition.test
View file @
95b45389
...
...
@@ -380,3 +380,24 @@ partition partf values less than (10000));
insert
into
t1
values
(
10
,
1
);
select
*
from
t1
where
f1
=
10
;
drop
table
t1
;
#
# Bug #16775: Wrong engine type stored for subpartition
#
set
session
storage_engine
=
'memory'
;
create
table
t1
(
f_int1
int
(
11
)
default
null
)
engine
=
memory
partition
by
range
(
f_int1
)
subpartition
by
hash
(
f_int1
)
(
partition
part1
values
less
than
(
1000
)
(
subpartition
subpart11
engine
=
memory
));
set
session
storage_engine
=
'myisam'
;
#
# Bug #16782: Crash using REPLACE on table with primary key
#
create
table
t1
(
f_int1
integer
,
f_int2
integer
,
primary
key
(
f_int1
))
partition
by
hash
(
f_int1
)
partitions
2
;
insert
into
t1
values
(
1
,
1
),(
2
,
2
);
replace
into
t1
values
(
1
,
1
),(
2
,
2
);
drop
table
t1
;
--
echo
End
of
5.1
tests
sql/ha_partition.cc
View file @
95b45389
...
...
@@ -360,7 +360,7 @@ int ha_partition::ha_initialise()
other parameters are calculated on demand.
HA_FILE_BASED is always set for partition handler since we use a
special file for handling names of partitions, engine types.
HA_CAN_GEOMETRY, HA_CAN_FULLTEXT, HA_CAN_SQL_HANDLER,
HA_CAN_GEOMETRY, HA_CAN_FULLTEXT, HA_CAN_SQL_HANDLER,
HA_DUPP_POS,
HA_CAN_INSERT_DELAYED is disabled until further investigated.
*/
m_table_flags
=
m_file
[
0
]
->
table_flags
();
...
...
@@ -383,8 +383,8 @@ int ha_partition::ha_initialise()
m_pkey_is_clustered
=
FALSE
;
m_table_flags
&=
file
->
table_flags
();
}
while
(
*
(
++
file_array
));
m_table_flags
&=
~
(
HA_CAN_GEOMETRY
&
HA_CAN_FULLTEXT
&
HA_CAN_SQL_HANDLER
&
HA_CAN_INSERT_DELAYED
);
m_table_flags
&=
~
(
HA_CAN_GEOMETRY
|
HA_CAN_FULLTEXT
|
HA_DUPP_POS
|
HA_CAN_SQL_HANDLER
|
HA_CAN_INSERT_DELAYED
);
m_table_flags
|=
HA_FILE_BASED
|
HA_REC_NOT_IN_SEQ
;
DBUG_RETURN
(
0
);
}
...
...
@@ -1937,7 +1937,8 @@ bool ha_partition::create_handler_file(const char *name)
name_buffer_ptr
+=
name_add
(
name_buffer_ptr
,
part_name
,
subpart_name
);
*
engine_array
=
(
uchar
)
ha_legacy_type
(
part_elem
->
engine_type
);
*
engine_array
=
(
uchar
)
ha_legacy_type
(
subpart_elem
->
engine_type
);
DBUG_PRINT
(
"info"
,
(
"engine: %u"
,
*
engine_array
));
engine_array
++
;
}
}
...
...
@@ -1954,7 +1955,7 @@ bool ha_partition::create_handler_file(const char *name)
Create and write and close file
to be used at open, delete_table and rename_table
*/
fn_format
(
file_name
,
name
,
""
,
".par"
,
MY_APPEND_EXT
);
fn_format
(
file_name
,
name
,
""
,
ha_par_ext
,
MY_APPEND_EXT
);
if
((
file
=
my_create
(
file_name
,
CREATE_MODE
,
O_RDWR
|
O_TRUNC
,
MYF
(
MY_WME
)))
>=
0
)
{
...
...
@@ -4683,6 +4684,7 @@ int ha_partition::extra(enum ha_extra_function operation)
case
HA_EXTRA_PREPARE_FOR_UPDATE
:
case
HA_EXTRA_PREPARE_FOR_DELETE
:
case
HA_EXTRA_FORCE_REOPEN
:
case
HA_EXTRA_FLUSH_CACHE
:
{
if
(
m_myisam
)
DBUG_RETURN
(
loop_extra
(
operation
));
...
...
tests/mysql_client_test.c
View file @
95b45389
...
...
@@ -1049,7 +1049,10 @@ void stmt_fetch_close(Stmt_fetch *fetch)
reading from the rest.
*/
my_bool
fetch_n
(
const
char
**
query_list
,
unsigned
query_count
)
enum
fetch_type
{
USE_ROW_BY_ROW_FETCH
=
0
,
USE_STORE_RESULT
=
1
};
my_bool
fetch_n
(
const
char
**
query_list
,
unsigned
query_count
,
enum
fetch_type
fetch_type
)
{
unsigned
open_statements
=
query_count
;
int
rc
,
error_count
=
0
;
...
...
@@ -1065,6 +1068,15 @@ my_bool fetch_n(const char **query_list, unsigned query_count)
query_list
[
fetch
-
fetch_array
]);
}
if
(
fetch_type
==
USE_STORE_RESULT
)
{
for
(
fetch
=
fetch_array
;
fetch
<
fetch_array
+
query_count
;
++
fetch
)
{
rc
=
mysql_stmt_store_result
(
fetch
->
handle
);
check_execute
(
fetch
->
handle
,
rc
);
}
}
while
(
open_statements
)
{
for
(
fetch
=
fetch_array
;
fetch
<
fetch_array
+
query_count
;
++
fetch
)
...
...
@@ -11867,7 +11879,8 @@ static void test_basic_cursors()
fill_tables
(
basic_tables
,
sizeof
(
basic_tables
)
/
sizeof
(
*
basic_tables
));
fetch_n
(
queries
,
sizeof
(
queries
)
/
sizeof
(
*
queries
));
fetch_n
(
queries
,
sizeof
(
queries
)
/
sizeof
(
*
queries
),
USE_ROW_BY_ROW_FETCH
);
fetch_n
(
queries
,
sizeof
(
queries
)
/
sizeof
(
*
queries
),
USE_STORE_RESULT
);
DBUG_VOID_RETURN
;
}
...
...
@@ -11880,7 +11893,8 @@ static void test_cursors_with_union()
"SELECT t1.id FROM t1 WHERE t1.id < 5"
};
myheader
(
"test_cursors_with_union"
);
fetch_n
(
queries
,
sizeof
(
queries
)
/
sizeof
(
*
queries
));
fetch_n
(
queries
,
sizeof
(
queries
)
/
sizeof
(
*
queries
),
USE_ROW_BY_ROW_FETCH
);
fetch_n
(
queries
,
sizeof
(
queries
)
/
sizeof
(
*
queries
),
USE_STORE_RESULT
);
}
/*
...
...
@@ -14729,6 +14743,21 @@ static void test_bug12744()
client_connect
(
0
);
}
/* Bug #16143: mysql_stmt_sqlstate returns an empty string instead of '00000' */
static
void
test_bug16143
()
{
MYSQL_STMT
*
stmt
;
myheader
(
"test_bug16143"
);
stmt
=
mysql_stmt_init
(
mysql
);
/* Check mysql_stmt_sqlstate return "no error" */
DIE_UNLESS
(
strcmp
(
mysql_stmt_sqlstate
(
stmt
),
"00000"
)
==
0
);
mysql_stmt_close
(
stmt
);
}
/* Bug #16144: mysql_stmt_attr_get type error */
static
void
test_bug16144
()
...
...
@@ -15072,6 +15101,7 @@ static struct my_tests_st my_tests[]= {
{
"test_opt_reconnect"
,
test_opt_reconnect
},
{
"test_bug15510"
,
test_bug15510
},
{
"test_bug12744"
,
test_bug12744
},
{
"test_bug16143"
,
test_bug16143
},
{
"test_bug16144"
,
test_bug16144
},
{
"test_bug15613"
,
test_bug15613
},
{
0
,
0
}
...
...
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