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
792073a3
Commit
792073a3
authored
Feb 05, 2011
by
Dmitry Shulga
Browse files
Options
Browse Files
Download
Plain Diff
Auto-merge from mysql-5.1 for bug#57450.
parents
7e34d8c3
2f0ba4c3
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
39 additions
and
20 deletions
+39
-20
client/my_readline.h
client/my_readline.h
+3
-1
client/mysql.cc
client/mysql.cc
+10
-6
client/readline.cc
client/readline.cc
+20
-13
mysql-test/t/mysql.test
mysql-test/t/mysql.test
+6
-0
No files found.
client/my_readline.h
View file @
792073a3
...
@@ -28,11 +28,13 @@ typedef struct st_line_buffer
...
@@ -28,11 +28,13 @@ typedef struct st_line_buffer
uint
eof
;
uint
eof
;
ulong
max_size
;
ulong
max_size
;
ulong
read_length
;
/* Length of last read string */
ulong
read_length
;
/* Length of last read string */
int
error
;
bool
truncated
;
}
LINE_BUFFER
;
}
LINE_BUFFER
;
extern
LINE_BUFFER
*
batch_readline_init
(
ulong
max_size
,
FILE
*
file
);
extern
LINE_BUFFER
*
batch_readline_init
(
ulong
max_size
,
FILE
*
file
);
extern
LINE_BUFFER
*
batch_readline_command
(
LINE_BUFFER
*
buffer
,
char
*
str
);
extern
LINE_BUFFER
*
batch_readline_command
(
LINE_BUFFER
*
buffer
,
char
*
str
);
extern
char
*
batch_readline
(
LINE_BUFFER
*
buffer
,
bool
*
truncated
);
extern
char
*
batch_readline
(
LINE_BUFFER
*
buffer
);
extern
void
batch_readline_end
(
LINE_BUFFER
*
buffer
);
extern
void
batch_readline_end
(
LINE_BUFFER
*
buffer
);
#endif
/* CLIENT_MY_READLINE_INCLUDED */
#endif
/* CLIENT_MY_READLINE_INCLUDED */
client/mysql.cc
View file @
792073a3
...
@@ -1839,14 +1839,13 @@ static int read_and_execute(bool interactive)
...
@@ -1839,14 +1839,13 @@ static int read_and_execute(bool interactive)
ulong
line_number
=
0
;
ulong
line_number
=
0
;
bool
ml_comment
=
0
;
bool
ml_comment
=
0
;
COMMANDS
*
com
;
COMMANDS
*
com
;
bool
truncated
=
0
;
status
.
exit_status
=
1
;
status
.
exit_status
=
1
;
for
(;;)
for
(;;)
{
{
if
(
!
interactive
)
if
(
!
interactive
)
{
{
line
=
batch_readline
(
status
.
line_buff
,
&
truncated
);
line
=
batch_readline
(
status
.
line_buff
);
/*
/*
Skip UTF8 Byte Order Marker (BOM) 0xEFBBBF.
Skip UTF8 Byte Order Marker (BOM) 0xEFBBBF.
Editors like "notepad" put this marker in
Editors like "notepad" put this marker in
...
@@ -1909,9 +1908,13 @@ static int read_and_execute(bool interactive)
...
@@ -1909,9 +1908,13 @@ static int read_and_execute(bool interactive)
if
(
opt_outfile
&&
line
)
if
(
opt_outfile
&&
line
)
fprintf
(
OUTFILE
,
"%s
\n
"
,
line
);
fprintf
(
OUTFILE
,
"%s
\n
"
,
line
);
}
}
if
(
!
line
)
// End of file
// End of file or system error
if
(
!
line
)
{
{
status
.
exit_status
=
0
;
if
(
status
.
line_buff
&&
status
.
line_buff
->
error
)
status
.
exit_status
=
1
;
else
status
.
exit_status
=
0
;
break
;
break
;
}
}
...
@@ -1932,7 +1935,8 @@ static int read_and_execute(bool interactive)
...
@@ -1932,7 +1935,8 @@ static int read_and_execute(bool interactive)
#endif
#endif
continue
;
continue
;
}
}
if
(
add_line
(
glob_buffer
,
line
,
&
in_string
,
&
ml_comment
,
truncated
))
if
(
add_line
(
glob_buffer
,
line
,
&
in_string
,
&
ml_comment
,
status
.
line_buff
?
status
.
line_buff
->
truncated
:
0
))
break
;
break
;
}
}
/* if in batch mode, send last query even if it doesn't end with \g or go */
/* if in batch mode, send last query even if it doesn't end with \g or go */
...
...
client/readline.cc
View file @
792073a3
...
@@ -24,7 +24,7 @@ static bool init_line_buffer(LINE_BUFFER *buffer,File file,ulong size,
...
@@ -24,7 +24,7 @@ static bool init_line_buffer(LINE_BUFFER *buffer,File file,ulong size,
ulong
max_size
);
ulong
max_size
);
static
bool
init_line_buffer_from_string
(
LINE_BUFFER
*
buffer
,
char
*
str
);
static
bool
init_line_buffer_from_string
(
LINE_BUFFER
*
buffer
,
char
*
str
);
static
size_t
fill_buffer
(
LINE_BUFFER
*
buffer
);
static
size_t
fill_buffer
(
LINE_BUFFER
*
buffer
);
static
char
*
intern_read_line
(
LINE_BUFFER
*
buffer
,
ulong
*
out_length
,
bool
*
truncated
);
static
char
*
intern_read_line
(
LINE_BUFFER
*
buffer
,
ulong
*
out_length
);
LINE_BUFFER
*
batch_readline_init
(
ulong
max_size
,
FILE
*
file
)
LINE_BUFFER
*
batch_readline_init
(
ulong
max_size
,
FILE
*
file
)
...
@@ -42,13 +42,12 @@ LINE_BUFFER *batch_readline_init(ulong max_size,FILE *file)
...
@@ -42,13 +42,12 @@ LINE_BUFFER *batch_readline_init(ulong max_size,FILE *file)
}
}
char
*
batch_readline
(
LINE_BUFFER
*
line_buff
,
bool
*
truncated
)
char
*
batch_readline
(
LINE_BUFFER
*
line_buff
)
{
{
char
*
pos
;
char
*
pos
;
ulong
out_length
;
ulong
out_length
;
DBUG_ASSERT
(
truncated
!=
NULL
);
if
(
!
(
pos
=
intern_read_line
(
line_buff
,
&
out_length
,
truncated
)))
if
(
!
(
pos
=
intern_read_line
(
line_buff
,
&
out_length
)))
return
0
;
return
0
;
if
(
out_length
&&
pos
[
out_length
-
1
]
==
'\n'
)
if
(
out_length
&&
pos
[
out_length
-
1
]
==
'\n'
)
if
(
--
out_length
&&
pos
[
out_length
-
1
]
==
'\r'
)
/* Remove '\n' */
if
(
--
out_length
&&
pos
[
out_length
-
1
]
==
'\r'
)
/* Remove '\n' */
...
@@ -162,7 +161,10 @@ static size_t fill_buffer(LINE_BUFFER *buffer)
...
@@ -162,7 +161,10 @@ static size_t fill_buffer(LINE_BUFFER *buffer)
if
(
!
(
buffer
->
buffer
=
(
char
*
)
my_realloc
(
buffer
->
buffer
,
if
(
!
(
buffer
->
buffer
=
(
char
*
)
my_realloc
(
buffer
->
buffer
,
buffer
->
bufread
+
1
,
buffer
->
bufread
+
1
,
MYF
(
MY_WME
|
MY_FAE
))))
MYF
(
MY_WME
|
MY_FAE
))))
return
(
uint
)
-
1
;
{
buffer
->
error
=
my_errno
;
return
(
size_t
)
-
1
;
}
buffer
->
start_of_line
=
buffer
->
buffer
+
start_offset
;
buffer
->
start_of_line
=
buffer
->
buffer
+
start_offset
;
buffer
->
end
=
buffer
->
buffer
+
bufbytes
;
buffer
->
end
=
buffer
->
buffer
+
bufbytes
;
}
}
...
@@ -177,7 +179,10 @@ static size_t fill_buffer(LINE_BUFFER *buffer)
...
@@ -177,7 +179,10 @@ static size_t fill_buffer(LINE_BUFFER *buffer)
/* Read in new stuff. */
/* Read in new stuff. */
if
((
read_count
=
my_read
(
buffer
->
file
,
(
uchar
*
)
buffer
->
end
,
read_count
,
if
((
read_count
=
my_read
(
buffer
->
file
,
(
uchar
*
)
buffer
->
end
,
read_count
,
MYF
(
MY_WME
)))
==
MY_FILE_ERROR
)
MYF
(
MY_WME
)))
==
MY_FILE_ERROR
)
{
buffer
->
error
=
my_errno
;
return
(
size_t
)
-
1
;
return
(
size_t
)
-
1
;
}
DBUG_PRINT
(
"fill_buff"
,
(
"Got %lu bytes"
,
(
ulong
)
read_count
));
DBUG_PRINT
(
"fill_buff"
,
(
"Got %lu bytes"
,
(
ulong
)
read_count
));
...
@@ -198,8 +203,7 @@ static size_t fill_buffer(LINE_BUFFER *buffer)
...
@@ -198,8 +203,7 @@ static size_t fill_buffer(LINE_BUFFER *buffer)
}
}
char
*
intern_read_line
(
LINE_BUFFER
*
buffer
,
ulong
*
out_length
)
char
*
intern_read_line
(
LINE_BUFFER
*
buffer
,
ulong
*
out_length
,
bool
*
truncated
)
{
{
char
*
pos
;
char
*
pos
;
size_t
length
;
size_t
length
;
...
@@ -214,22 +218,25 @@ char *intern_read_line(LINE_BUFFER *buffer, ulong *out_length, bool *truncated)
...
@@ -214,22 +218,25 @@ char *intern_read_line(LINE_BUFFER *buffer, ulong *out_length, bool *truncated)
if
(
pos
==
buffer
->
end
)
if
(
pos
==
buffer
->
end
)
{
{
/*
/*
fill_buffer() can return 0 either on EOF in which case we abort
fill_buffer() can return NULL on EOF (in which case we abort),
or when the internal buffer has hit the size limit. In the latter case
on error, or when the internal buffer has hit the size limit.
return what we have read so far and signal string truncation.
In the latter case return what we have read so far and signal
string truncation.
*/
*/
if
(
!
(
length
=
fill_buffer
(
buffer
))
||
length
==
(
uint
)
-
1
)
if
(
!
(
length
=
fill_buffer
(
buffer
))
)
{
{
if
(
buffer
->
eof
)
if
(
buffer
->
eof
)
DBUG_RETURN
(
0
);
DBUG_RETURN
(
0
);
}
}
else
if
(
length
==
(
size_t
)
-
1
)
DBUG_RETURN
(
NULL
);
else
else
continue
;
continue
;
pos
--
;
/* break line here */
pos
--
;
/* break line here */
*
truncated
=
1
;
buffer
->
truncated
=
1
;
}
}
else
else
*
truncated
=
0
;
buffer
->
truncated
=
0
;
buffer
->
end_of_line
=
pos
+
1
;
buffer
->
end_of_line
=
pos
+
1
;
*
out_length
=
(
ulong
)
(
pos
+
1
-
buffer
->
eof
-
buffer
->
start_of_line
);
*
out_length
=
(
ulong
)
(
pos
+
1
-
buffer
->
eof
-
buffer
->
start_of_line
);
DBUG_RETURN
(
buffer
->
start_of_line
);
DBUG_RETURN
(
buffer
->
start_of_line
);
...
...
mysql-test/t/mysql.test
View file @
792073a3
...
@@ -425,6 +425,12 @@ drop table t1;
...
@@ -425,6 +425,12 @@ drop table t1;
--
echo
--
echo
--
exec
$MYSQL
--
skip
-
column
-
names
--
vertical
test
-
e
"select 1 as a"
--
exec
$MYSQL
--
skip
-
column
-
names
--
vertical
test
-
e
"select 1 as a"
#
# Bug#57450: mysql client enter in an infinite loop if the standard input is a directory
#
--
error
1
--
exec
$MYSQL
<
.
--
echo
--
echo
--
echo
#
--
echo
#
...
...
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