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
4496a8f5
Commit
4496a8f5
authored
Apr 10, 2007
by
msvensson@pilot.blaudden
Browse files
Options
Browse Files
Download
Plain Diff
Merge pilot.blaudden:/home/msvensson/mysql/mysql-5.0-maint
into pilot.blaudden:/home/msvensson/mysql/mysql-5.1-maint
parents
d08e3529
34a784f3
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
169 additions
and
59 deletions
+169
-59
client/mysqltest.c
client/mysqltest.c
+135
-59
mysql-test/r/mysqltest.result
mysql-test/r/mysqltest.result
+16
-0
mysql-test/t/mysqltest.test
mysql-test/t/mysqltest.test
+18
-0
No files found.
client/mysqltest.c
View file @
4496a8f5
...
...
@@ -85,13 +85,12 @@ enum {
OPT_SSL_CA
,
OPT_SSL_CAPATH
,
OPT_SSL_CIPHER
,
OPT_PS_PROTOCOL
,
OPT_SP_PROTOCOL
,
OPT_CURSOR_PROTOCOL
,
OPT_VIEW_PROTOCOL
,
OPT_SSL_VERIFY_SERVER_CERT
,
OPT_MAX_CONNECT_RETRIES
,
OPT_MARK_PROGRESS
,
OPT_CHARSETS_DIR
,
OPT_LOG_DIR
,
OPT_DEBUG_INFO
OPT_MARK_PROGRESS
,
OPT_CHARSETS_DIR
};
static
int
record
=
0
,
opt_sleep
=
-
1
;
static
char
*
opt_db
=
0
,
*
opt_pass
=
0
;
const
char
*
opt_user
=
0
,
*
opt_host
=
0
,
*
unix_sock
=
0
,
*
opt_basedir
=
"./"
;
const
char
*
opt_logdir
=
""
;
const
char
*
opt_include
=
0
,
*
opt_charsets_dir
;
static
int
opt_port
=
0
;
static
int
opt_max_connect_retries
;
...
...
@@ -103,8 +102,8 @@ static my_bool sp_protocol= 0, sp_protocol_enabled= 0;
static
my_bool
view_protocol
=
0
,
view_protocol_enabled
=
0
;
static
my_bool
cursor_protocol
=
0
,
cursor_protocol_enabled
=
0
;
static
my_bool
parsing_disabled
=
0
;
static
my_bool
info_flag
;
static
my_bool
display_result_vertically
=
FALSE
,
display_metadata
=
FALSE
;
static
my_bool
display_result_vertically
=
FALSE
,
display_metadata
=
FALSE
,
display_result_sorted
=
FALSE
;
static
my_bool
disable_query_log
=
0
,
disable_result_log
=
0
;
static
my_bool
disable_warnings
=
0
;
static
my_bool
disable_info
=
1
;
...
...
@@ -271,7 +270,7 @@ enum enum_commands {
Q_EXEC
,
Q_DELIMITER
,
Q_DISABLE_ABORT_ON_ERROR
,
Q_ENABLE_ABORT_ON_ERROR
,
Q_DISPLAY_VERTICAL_RESULTS
,
Q_DISPLAY_HORIZONTAL_RESULTS
,
Q_QUERY_VERTICAL
,
Q_QUERY_HORIZONTAL
,
Q_QUERY_VERTICAL
,
Q_QUERY_HORIZONTAL
,
Q_QUERY_SORTED
,
Q_START_TIMER
,
Q_END_TIMER
,
Q_CHARACTER_SET
,
Q_DISABLE_PS_PROTOCOL
,
Q_ENABLE_PS_PROTOCOL
,
Q_DISABLE_RECONNECT
,
Q_ENABLE_RECONNECT
,
...
...
@@ -341,6 +340,7 @@ const char *command_names[]=
"horizontal_results"
,
"query_vertical"
,
"query_horizontal"
,
"query_sorted"
,
"start_timer"
,
"end_timer"
,
"character_set"
,
...
...
@@ -358,6 +358,7 @@ const char *command_names[]=
"copy_file"
,
"perl"
,
"die"
,
/* Don't execute any more commands, compare result */
"exit"
,
"skip"
,
...
...
@@ -413,12 +414,10 @@ struct st_command
TYPELIB
command_typelib
=
{
array_elements
(
command_names
),
""
,
command_names
,
0
};
static
DYNAMIC_STRING
ds_res
,
ds_progress
,
ds_warning_messages
;
static
DYNAMIC_STRING
global_ds_warnings
,
global_eval_query
;
DYNAMIC_STRING
ds_res
,
ds_progress
,
ds_warning_messages
;
char
builtin_echo
[
FN_REFLEN
];
void
die
(
const
char
*
fmt
,
...)
ATTRIBUTE_FORMAT
(
printf
,
1
,
2
);
void
abort_not_supported_test
(
const
char
*
fmt
,
...)
...
...
@@ -488,6 +487,7 @@ void replace_dynstr_append_mem(DYNAMIC_STRING *ds, const char *val,
int
len
);
void
replace_dynstr_append
(
DYNAMIC_STRING
*
ds
,
const
char
*
val
);
void
replace_dynstr_append_uint
(
DYNAMIC_STRING
*
ds
,
uint
val
);
void
dynstr_append_sorted
(
DYNAMIC_STRING
*
ds
,
DYNAMIC_STRING
*
ds_input
);
void
handle_error
(
struct
st_command
*
,
unsigned
int
err_errno
,
const
char
*
err_error
,
...
...
@@ -795,9 +795,6 @@ void free_used_memory()
dynstr_free
(
&
ds_res
);
dynstr_free
(
&
ds_progress
);
dynstr_free
(
&
ds_warning_messages
);
dynstr_free
(
&
global_ds_warnings
);
dynstr_free
(
&
global_eval_query
);
free_all_replace
();
my_free
(
opt_pass
,
MYF
(
MY_ALLOW_ZERO_PTR
));
free_defaults
(
default_argv
);
...
...
@@ -4262,16 +4259,12 @@ static struct my_option my_long_options[] =
{
"debug"
,
'#'
,
"Output debug log. Often this is 'd:t:o,filename'."
,
0
,
0
,
0
,
GET_STR
,
OPT_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
#endif
{
"debug-info"
,
OPT_DEBUG_INFO
,
"Print some debug info at exit."
,
(
gptr
*
)
&
info_flag
,
(
gptr
*
)
&
info_flag
,
0
,
GET_BOOL
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"host"
,
'h'
,
"Connect to host."
,
(
gptr
*
)
&
opt_host
,
(
gptr
*
)
&
opt_host
,
0
,
GET_STR
,
REQUIRED_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"include"
,
'i'
,
"Include SQL before each test case."
,
(
gptr
*
)
&
opt_include
,
(
gptr
*
)
&
opt_include
,
0
,
GET_STR
,
REQUIRED_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"logdir"
,
OPT_LOG_DIR
,
"Directory for log files"
,
(
gptr
*
)
&
opt_logdir
,
(
gptr
*
)
&
opt_logdir
,
0
,
GET_STR
,
REQUIRED_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"mark-progress"
,
OPT_MARK_PROGRESS
,
"Write linenumber and elapsed time to <testname>.progress"
,
"Write linenumber and elapsed time to <testname>.progress
"
,
(
gptr
*
)
&
opt_mark_progress
,
(
gptr
*
)
&
opt_mark_progress
,
0
,
GET_BOOL
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"max-connect-retries"
,
OPT_MAX_CONNECT_RETRIES
,
...
...
@@ -4572,8 +4565,7 @@ void dump_result_to_reject_file(char *buf, int size)
void
dump_result_to_log_file
(
char
*
buf
,
int
size
)
{
char
log_file
[
FN_REFLEN
];
str_to_file
(
fn_format
(
log_file
,
result_file_name
,
opt_logdir
,
".log"
,
*
opt_logdir
?
MY_REPLACE_DIR
|
MY_REPLACE_EXT
:
str_to_file
(
fn_format
(
log_file
,
result_file_name
,
""
,
".log"
,
MY_REPLACE_EXT
),
buf
,
size
);
}
...
...
@@ -4581,9 +4573,8 @@ void dump_result_to_log_file(char *buf, int size)
void
dump_progress
(
void
)
{
char
log_file
[
FN_REFLEN
];
str_to_file
(
fn_format
(
log_file
,
result_file_name
,
opt_logdir
,
".progress"
,
*
opt_logdir
?
MY_REPLACE_DIR
|
MY_REPLACE_EXT
:
MY_REPLACE_EXT
),
str_to_file
(
fn_format
(
log_file
,
result_file_name
,
""
,
".progress"
,
MY_REPLACE_EXT
),
ds_progress
.
str
,
ds_progress
.
length
);
}
...
...
@@ -5544,7 +5535,11 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
{
MYSQL
*
mysql
=
&
cn
->
mysql
;
DYNAMIC_STRING
*
ds
;
DYNAMIC_STRING
*
save_ds
=
NULL
;
DYNAMIC_STRING
ds_result
;
DYNAMIC_STRING
ds_sorted
;
DYNAMIC_STRING
ds_warnings
;
DYNAMIC_STRING
eval_query
;
char
*
query
;
int
query_len
;
my_bool
view_created
=
0
,
sp_created
=
0
;
...
...
@@ -5552,7 +5547,7 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
(
flags
&
QUERY_REAP_FLAG
));
DBUG_ENTER
(
"run_query"
);
init_dynamic_string
(
&
global_
ds_warnings
,
NULL
,
0
,
256
);
init_dynamic_string
(
&
ds_warnings
,
NULL
,
0
,
256
);
/* Scan for warning before sendign to server */
scan_command_for_warnings
(
command
);
...
...
@@ -5562,10 +5557,10 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
*/
if
(
command
->
type
==
Q_EVAL
)
{
init_dynamic_string
(
&
global_
eval_query
,
""
,
command
->
query_len
+
256
,
1024
);
do_eval
(
&
global_
eval_query
,
command
->
query
,
command
->
end
,
FALSE
);
query
=
global_
eval_query
.
str
;
query_len
=
global_
eval_query
.
length
;
init_dynamic_string
(
&
eval_query
,
""
,
command
->
query_len
+
256
,
1024
);
do_eval
(
&
eval_query
,
command
->
query
,
command
->
end
,
FALSE
);
query
=
eval_query
.
str
;
query_len
=
eval_query
.
length
;
}
else
{
...
...
@@ -5637,7 +5632,7 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
Collect warnings from create of the view that should otherwise
have been produced when the SELECT was executed
*/
append_warnings
(
&
global_
ds_warnings
,
cur_con
->
util_mysql
);
append_warnings
(
&
ds_warnings
,
cur_con
->
util_mysql
);
}
dynstr_free
(
&
query_str
);
...
...
@@ -5684,6 +5679,18 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
dynstr_free
(
&
query_str
);
}
if
(
display_result_sorted
)
{
/*
Collect the query output in a separate string
that can be sorted before it's added to the
global result string
*/
init_dynamic_string
(
&
ds_sorted
,
""
,
1024
,
1024
);
save_ds
=
ds
;
/* Remember original ds */
ds
=
&
ds_sorted
;
}
/*
Find out how to run this query
...
...
@@ -5696,10 +5703,18 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
if
(
ps_protocol_enabled
&&
complete_query
&&
match_re
(
&
ps_re
,
query
))
run_query_stmt
(
mysql
,
command
,
query
,
query_len
,
ds
,
&
global_
ds_warnings
);
run_query_stmt
(
mysql
,
command
,
query
,
query_len
,
ds
,
&
ds_warnings
);
else
run_query_normal
(
cn
,
command
,
flags
,
query
,
query_len
,
ds
,
&
global_ds_warnings
);
ds
,
&
ds_warnings
);
if
(
display_result_sorted
)
{
/* Sort the result set and append it to result */
dynstr_append_sorted
(
save_ds
,
&
ds_sorted
);
ds
=
save_ds
;
dynstr_free
(
&
ds_sorted
);
}
if
(
sp_created
)
{
...
...
@@ -5723,11 +5738,11 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
check_require
(
ds
,
command
->
require_file
);
}
dynstr_free
(
&
global_
ds_warnings
);
dynstr_free
(
&
ds_warnings
);
if
(
ds
==
&
ds_result
)
dynstr_free
(
&
ds_result
);
if
(
command
->
type
==
Q_EVAL
)
dynstr_free
(
&
global_
eval_query
);
dynstr_free
(
&
eval_query
);
DBUG_VOID_RETURN
;
}
...
...
@@ -6147,37 +6162,24 @@ int main(int argc, char **argv)
case
Q_EVAL_RESULT
:
eval_result
=
1
;
break
;
case
Q_EVAL
:
case
Q_QUERY_VERTICAL
:
case
Q_QUERY_HORIZONTAL
:
case
Q_QUERY_SORTED
:
if
(
command
->
query
==
command
->
query_buf
)
{
/* Skip the first part of command, i.e query_xxx */
command
->
query
=
command
->
first_argument
;
command
->
first_word_len
=
0
;
}
/* fall through */
case
Q_QUERY_VERTICAL
:
case
Q_QUERY_HORIZONTAL
:
{
my_bool
old_display_result_vertically
=
display_result_vertically
;
/* Remove "query_*" if this is first iteration */
if
(
command
->
query
==
command
->
query_buf
)
command
->
query
=
command
->
first_argument
;
display_result_vertically
=
(
command
->
type
==
Q_QUERY_VERTICAL
);
if
(
save_file
[
0
])
{
strmake
(
command
->
require_file
,
save_file
,
sizeof
(
save_file
));
save_file
[
0
]
=
0
;
}
run_query
(
cur_con
,
command
,
QUERY_REAP_FLAG
|
QUERY_SEND_FLAG
);
display_result_vertically
=
old_display_result_vertically
;
command
->
last_argument
=
command
->
end
;
command_executed
++
;
break
;
}
case
Q_QUERY
:
case
Q_REAP
:
{
int
flags
;
my_bool
old_display_result_vertically
=
display_result_vertically
;
my_bool
old_display_result_sorted
=
display_result_sorted
;
/* Default is full query, both reap and send */
int
flags
=
QUERY_REAP_FLAG
|
QUERY_SEND_FLAG
;
if
(
q_send_flag
)
{
/* Last command was an empty 'send' */
...
...
@@ -6188,11 +6190,10 @@ int main(int argc, char **argv)
{
flags
=
QUERY_REAP_FLAG
;
}
else
{
/* full query, both reap and send */
flags
=
QUERY_REAP_FLAG
|
QUERY_SEND_FLAG
;
}
/* Check for special property for this query */
display_result_vertically
=
(
command
->
type
==
Q_QUERY_VERTICAL
);
display_result_sorted
=
(
command
->
type
==
Q_QUERY_SORTED
);
if
(
save_file
[
0
])
{
...
...
@@ -6202,6 +6203,11 @@ int main(int argc, char **argv)
run_query
(
cur_con
,
command
,
flags
);
command_executed
++
;
command
->
last_argument
=
command
->
end
;
/* Restore settings */
display_result_vertically
=
old_display_result_vertically
;
display_result_sorted
=
old_display_result_sorted
;
break
;
}
case
Q_SEND
:
...
...
@@ -7087,7 +7093,7 @@ int reg_replace(char** buf_p, int* buf_len_p, char *pattern,
if
(
back_ref_num
>=
0
&&
back_ref_num
<=
(
int
)
r
.
re_nsub
)
{
regoff_t
start_off
,
end_off
;
if
((
start_off
=
subs
[
back_ref_num
].
rm_so
)
>
-
1
&&
if
((
start_off
=
subs
[
back_ref_num
].
rm_so
)
>
-
1
&&
(
end_off
=
subs
[
back_ref_num
].
rm_eo
)
>
-
1
)
{
int
block_len
=
(
int
)
(
end_off
-
start_off
);
...
...
@@ -7812,3 +7818,73 @@ void replace_dynstr_append_uint(DYNAMIC_STRING *ds, uint val)
char
*
end
=
longlong10_to_str
(
val
,
buff
,
10
);
replace_dynstr_append_mem
(
ds
,
buff
,
end
-
buff
);
}
/*
Build a list of pointer to each line in ds_input, sort
the list and use the sorted list to append the strings
sorted to the output ds
SYNOPSIS
dynstr_append_sorted
ds - string where the sorted output will be appended
ds_input - string to be sorted
*/
static
int
comp_lines
(
const
char
**
a
,
const
char
**
b
)
{
return
(
strcmp
(
*
a
,
*
b
));
}
void
dynstr_append_sorted
(
DYNAMIC_STRING
*
ds
,
DYNAMIC_STRING
*
ds_input
)
{
unsigned
i
;
char
*
start
=
ds_input
->
str
;
DYNAMIC_ARRAY
lines
;
DBUG_ENTER
(
"dynstr_append_sorted"
);
if
(
!*
start
)
DBUG_VOID_RETURN
;
/* No input */
my_init_dynamic_array
(
&
lines
,
sizeof
(
const
char
*
),
32
,
32
);
/* First line is result header, skip past it */
while
(
*
start
&&
*
start
!=
'\n'
)
start
++
;
start
++
;
/* Skip past \n */
dynstr_append_mem
(
ds
,
ds_input
->
str
,
start
-
ds_input
->
str
);
/* Insert line(s) in array */
while
(
*
start
)
{
char
*
line_end
=
(
char
*
)
start
;
/* Find end of line */
while
(
*
line_end
&&
*
line_end
!=
'\n'
)
line_end
++
;
*
line_end
=
0
;
/* Insert pointer to the line in array */
if
(
insert_dynamic
(
&
lines
,
(
gptr
)
&
start
))
die
(
"Out of memory inserting lines to sort"
);
start
=
line_end
+
1
;
}
/* Sort array */
qsort
(
lines
.
buffer
,
lines
.
elements
,
sizeof
(
char
**
),
(
qsort_cmp
)
comp_lines
);
/* Create new result */
for
(
i
=
0
;
i
<
lines
.
elements
;
i
++
)
{
const
char
**
line
=
dynamic_element
(
&
lines
,
i
,
const
char
**
);
dynstr_append
(
ds
,
*
line
);
dynstr_append
(
ds
,
"
\n
"
);
}
delete_dynamic
(
&
lines
);
DBUG_VOID_RETURN
;
}
mysql-test/r/mysqltest.result
View file @
4496a8f5
...
...
@@ -541,4 +541,20 @@ hello
hello
mysqltest: At line 1: test of die
Some output
create table t1( a int, b char(255), c timestamp);
insert into t1 values(1, 'Line 1', '2007-04-05'), (2, "Part 2", '2007-04-05');
insert into t1 values(1, 'Line 1', '2007-04-05'), (2, "Part 3", '2007-04-05');
select * from t1;
a b c
1 Line 1 2007-04-05 00:00:00
2 Part 2 2007-04-05 00:00:00
1 Line 1 2007-04-05 00:00:00
2 Part 3 2007-04-05 00:00:00
select * from t1;
a b c
1 Line 1 2007-04-05 00:00:00
1 Line 1 2007-04-05 00:00:00
2 Part 2 2007-04-05 00:00:00
2 Part 3 2007-04-05 00:00:00
select * from t1;
End of tests
mysql-test/t/mysqltest.test
View file @
4496a8f5
...
...
@@ -1739,6 +1739,24 @@ EOF
--
exec
echo
"echo Some output; exit; echo Not this;"
|
$MYSQL_TEST
2
>&
1
# ----------------------------------------------------------------------------
# test for query_sorted
# ----------------------------------------------------------------------------
create
table
t1
(
a
int
,
b
char
(
255
),
c
timestamp
);
insert
into
t1
values
(
1
,
'Line 1'
,
'2007-04-05'
),
(
2
,
"Part 2"
,
'2007-04-05'
);
insert
into
t1
values
(
1
,
'Line 1'
,
'2007-04-05'
),
(
2
,
"Part 3"
,
'2007-04-05'
);
select
*
from
t1
;
query_sorted
select
*
from
t1
;
disable_result_log
;
query_sorted
select
*
from
t1
;
enable_result_log
;
query_sorted
select
''
;
query_sorted
select
"h"
;
query_sorted
select
"he"
;
query_sorted
select
"hep"
;
query_sorted
select
"hepp"
;
# ----------------------------------------------------------------------------
# Some coverage tests
# ----------------------------------------------------------------------------
...
...
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