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
3646d924
Commit
3646d924
authored
Mar 20, 2002
by
unknown
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added --prompt and ``prompt'' command, add dynamic prompt support to ``mysql''.
parent
85fd8dda
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
210 additions
and
13 deletions
+210
-13
client/client_priv.h
client/client_priv.h
+1
-1
client/mysql.cc
client/mysql.cc
+209
-12
No files found.
client/client_priv.h
View file @
3646d924
...
@@ -31,4 +31,4 @@ enum options { OPT_CHARSETS_DIR=256, OPT_DEFAULT_CHARSET,
...
@@ -31,4 +31,4 @@ enum options { OPT_CHARSETS_DIR=256, OPT_DEFAULT_CHARSET,
OPT_LOW_PRIORITY
,
OPT_AUTO_REPAIR
,
OPT_COMPRESS
,
OPT_LOW_PRIORITY
,
OPT_AUTO_REPAIR
,
OPT_COMPRESS
,
OPT_DROP
,
OPT_LOCKS
,
OPT_KEYWORDS
,
OPT_DELAYED
,
OPT_OPTIMIZE
,
OPT_DROP
,
OPT_LOCKS
,
OPT_KEYWORDS
,
OPT_DELAYED
,
OPT_OPTIMIZE
,
OPT_FTB
,
OPT_LTB
,
OPT_ENC
,
OPT_O_ENC
,
OPT_ESC
,
OPT_TABLES
,
OPT_FTB
,
OPT_LTB
,
OPT_ENC
,
OPT_O_ENC
,
OPT_ESC
,
OPT_TABLES
,
OPT_MASTER_DATA
,
OPT_AUTOCOMMIT
,
OPT_LOCAL_INFILE
};
OPT_MASTER_DATA
,
OPT_AUTOCOMMIT
,
OPT_LOCAL_INFILE
,
OPT_PROMPT
};
client/mysql.cc
View file @
3646d924
...
@@ -19,12 +19,13 @@
...
@@ -19,12 +19,13 @@
*
*
* Written by:
* Written by:
* Michael 'Monty' Widenius
* Michael 'Monty' Widenius
* Andi Gutmans <andi@zend.com>
* Andi Gutmans <andi@zend.com>
* Zeev Suraski <zeev@zend.com>
* Zeev Suraski <zeev@zend.com>
* Jani Tolonen <jani@mysql.com>
* Jani Tolonen <jani@mysql.com>
* Matt Wagner <matt@mysql.com>
* Matt Wagner <matt@mysql.com>
* Jeremy Cole <jcole@mysql.com>
* Jeremy Cole <jcole@mysql.com>
* Tonu Samuel <tonu@mysql.com>
* Tonu Samuel <tonu@mysql.com>
* Harrison Fisk <hcfisk@buffalo.edu>
*
*
**/
**/
...
@@ -38,7 +39,7 @@
...
@@ -38,7 +39,7 @@
#include <signal.h>
#include <signal.h>
#include <violite.h>
#include <violite.h>
const
char
*
VER
=
"11.2
2
"
;
const
char
*
VER
=
"11.2
3
"
;
/* Don't try to make a nice table if the data is too big */
/* Don't try to make a nice table if the data is too big */
#define MAX_COLUMN_LENGTH 1024
#define MAX_COLUMN_LENGTH 1024
...
@@ -97,6 +98,8 @@ extern "C" {
...
@@ -97,6 +98,8 @@ extern "C" {
#include "completion_hash.h"
#include "completion_hash.h"
#define PROMPT_CHAR '\\'
typedef
struct
st_status
typedef
struct
st_status
{
{
int
exit_status
;
int
exit_status
;
...
@@ -124,9 +127,11 @@ static uint verbose=0,opt_silent=0,opt_mysql_port=0, opt_local_infile=0;
...
@@ -124,9 +127,11 @@ static uint verbose=0,opt_silent=0,opt_mysql_port=0, opt_local_infile=0;
static
my_string
opt_mysql_unix_port
=
0
;
static
my_string
opt_mysql_unix_port
=
0
;
static
int
connect_flag
=
CLIENT_INTERACTIVE
;
static
int
connect_flag
=
CLIENT_INTERACTIVE
;
static
char
*
current_host
,
*
current_db
,
*
current_user
=
0
,
*
opt_password
=
0
,
static
char
*
current_host
,
*
current_db
,
*
current_user
=
0
,
*
opt_password
=
0
,
*
default_charset
;
*
current_prompt
=
0
,
*
default_charset
;
static
char
*
histfile
;
static
char
*
histfile
;
static
String
glob_buffer
,
old_buffer
;
static
String
glob_buffer
,
old_buffer
;
static
String
processed_prompt
;
static
char
*
full_username
=
0
,
*
part_username
=
0
,
*
default_prompt
=
0
;
static
int
wait_time
=
5
;
static
int
wait_time
=
5
;
static
STATUS
status
;
static
STATUS
status
;
static
ulong
select_limit
,
max_join_size
,
opt_connect_timeout
=
0
;
static
ulong
select_limit
,
max_join_size
,
opt_connect_timeout
=
0
;
...
@@ -136,10 +141,14 @@ static const char *xmlmeta[] = {
...
@@ -136,10 +141,14 @@ static const char *xmlmeta[] = {
"<"
,
"<"
,
"<"
,
"<"
,
0
,
0
0
,
0
};
};
static
const
char
*
day_names
[]
=
{
"Sun"
,
"Mon"
,
"Tue"
,
"Wed"
,
"Thu"
,
"Fri"
,
"Sat"
};
static
const
char
*
month_names
[]
=
{
"Jan"
,
"Feb"
,
"Mar"
,
"Apr"
,
"May"
,
"Jun"
,
"Jul"
,
"Aug"
,
"Sep"
,
"Oct"
,
"Nov"
,
"Dec"
};
static
char
default_pager
[
FN_REFLEN
];
static
char
default_pager
[
FN_REFLEN
];
char
pager
[
FN_REFLEN
],
outfile
[
FN_REFLEN
];
char
pager
[
FN_REFLEN
],
outfile
[
FN_REFLEN
];
FILE
*
PAGER
,
*
OUTFILE
;
FILE
*
PAGER
,
*
OUTFILE
;
MEM_ROOT
hash_mem_root
;
MEM_ROOT
hash_mem_root
;
static
uint
prompt_counter
;
#include "sslopt-vars.h"
#include "sslopt-vars.h"
...
@@ -160,7 +169,8 @@ static int com_quit(String *str,char*),
...
@@ -160,7 +169,8 @@ static int com_quit(String *str,char*),
com_connect
(
String
*
str
,
char
*
),
com_status
(
String
*
str
,
char
*
),
com_connect
(
String
*
str
,
char
*
),
com_status
(
String
*
str
,
char
*
),
com_use
(
String
*
str
,
char
*
),
com_source
(
String
*
str
,
char
*
),
com_use
(
String
*
str
,
char
*
),
com_source
(
String
*
str
,
char
*
),
com_rehash
(
String
*
str
,
char
*
),
com_tee
(
String
*
str
,
char
*
),
com_rehash
(
String
*
str
,
char
*
),
com_tee
(
String
*
str
,
char
*
),
com_notee
(
String
*
str
,
char
*
),
com_shell
(
String
*
str
,
char
*
);
com_notee
(
String
*
str
,
char
*
),
com_shell
(
String
*
str
,
char
*
),
com_prompt
(
String
*
str
,
char
*
);
#ifndef __WIN__
#ifndef __WIN__
static
int
com_nopager
(
String
*
str
,
char
*
),
com_pager
(
String
*
str
,
char
*
),
static
int
com_nopager
(
String
*
str
,
char
*
),
com_pager
(
String
*
str
,
char
*
),
...
@@ -177,6 +187,9 @@ static void init_pager();
...
@@ -177,6 +187,9 @@ static void init_pager();
static
void
end_pager
();
static
void
end_pager
();
static
void
init_tee
();
static
void
init_tee
();
static
void
end_tee
();
static
void
end_tee
();
static
const
char
*
construct_prompt
();
static
void
init_username
();
static
void
add_int_to_prompt
(
int
toadd
);
/* A structure which contains information on the commands this program
/* A structure which contains information on the commands this program
can understand. */
can understand. */
...
@@ -211,6 +224,7 @@ static COMMANDS commands[] = {
...
@@ -211,6 +224,7 @@ static COMMANDS commands[] = {
"Set PAGER [to_pager]. Print the query results via PAGER."
},
"Set PAGER [to_pager]. Print the query results via PAGER."
},
#endif
#endif
{
"print"
,
'p'
,
com_print
,
0
,
"Print current command."
},
{
"print"
,
'p'
,
com_print
,
0
,
"Print current command."
},
{
"prompt"
,
'R'
,
com_prompt
,
1
,
"Change your mysql prompt."
},
{
"quit"
,
'q'
,
com_quit
,
0
,
"Quit mysql."
},
{
"quit"
,
'q'
,
com_quit
,
0
,
"Quit mysql."
},
{
"rehash"
,
'#'
,
com_rehash
,
0
,
"Rebuild completion hash."
},
{
"rehash"
,
'#'
,
com_rehash
,
0
,
"Rebuild completion hash."
},
{
"source"
,
'.'
,
com_source
,
1
,
{
"source"
,
'.'
,
com_source
,
1
,
...
@@ -280,6 +294,12 @@ int main(int argc,char *argv[])
...
@@ -280,6 +294,12 @@ int main(int argc,char *argv[])
DBUG_ENTER
(
"main"
);
DBUG_ENTER
(
"main"
);
DBUG_PROCESS
(
argv
[
0
]);
DBUG_PROCESS
(
argv
[
0
]);
default_prompt
=
my_strdup
(
getenv
(
"MYSQL_PS1"
)
?
getenv
(
"MYSQL_PS1"
)
:
"mysql> "
,
MYF
(
MY_WME
));
current_prompt
=
my_strdup
(
default_prompt
,
MYF
(
MY_WME
));
prompt_counter
=
0
;
strmov
(
outfile
,
"
\0
"
);
// no (default) outfile, unless given at least once
strmov
(
outfile
,
"
\0
"
);
// no (default) outfile, unless given at least once
strmov
(
pager
,
"stdout"
);
// the default, if --pager wasn't given
strmov
(
pager
,
"stdout"
);
// the default, if --pager wasn't given
{
{
...
@@ -406,12 +426,17 @@ sig_handler mysql_end(int sig)
...
@@ -406,12 +426,17 @@ sig_handler mysql_end(int sig)
put_info
(
sig
?
"Aborted"
:
"Bye"
,
INFO_RESULT
);
put_info
(
sig
?
"Aborted"
:
"Bye"
,
INFO_RESULT
);
glob_buffer
.
free
();
glob_buffer
.
free
();
old_buffer
.
free
();
old_buffer
.
free
();
processed_prompt
.
free
();
my_free
(
opt_password
,
MYF
(
MY_ALLOW_ZERO_PTR
));
my_free
(
opt_password
,
MYF
(
MY_ALLOW_ZERO_PTR
));
my_free
(
opt_mysql_unix_port
,
MYF
(
MY_ALLOW_ZERO_PTR
));
my_free
(
opt_mysql_unix_port
,
MYF
(
MY_ALLOW_ZERO_PTR
));
my_free
(
histfile
,
MYF
(
MY_ALLOW_ZERO_PTR
));
my_free
(
histfile
,
MYF
(
MY_ALLOW_ZERO_PTR
));
my_free
(
current_db
,
MYF
(
MY_ALLOW_ZERO_PTR
));
my_free
(
current_db
,
MYF
(
MY_ALLOW_ZERO_PTR
));
my_free
(
current_host
,
MYF
(
MY_ALLOW_ZERO_PTR
));
my_free
(
current_host
,
MYF
(
MY_ALLOW_ZERO_PTR
));
my_free
(
current_user
,
MYF
(
MY_ALLOW_ZERO_PTR
));
my_free
(
current_user
,
MYF
(
MY_ALLOW_ZERO_PTR
));
my_free
(
full_username
,
MYF
(
MY_ALLOW_ZERO_PTR
));
my_free
(
part_username
,
MYF
(
MY_ALLOW_ZERO_PTR
));
my_free
(
default_prompt
,
MYF
(
MY_ALLOW_ZERO_PTR
));
my_free
(
current_prompt
,
MYF
(
MY_ALLOW_ZERO_PTR
));
mysql_server_end
();
mysql_server_end
();
my_end
(
info_flag
?
MY_CHECK_ERROR
|
MY_GIVE_INFO
:
0
);
my_end
(
info_flag
?
MY_CHECK_ERROR
|
MY_GIVE_INFO
:
0
);
exit
(
status
.
exit_status
);
exit
(
status
.
exit_status
);
...
@@ -455,6 +480,7 @@ static struct option long_options[] =
...
@@ -455,6 +480,7 @@ static struct option long_options[] =
{
"pipe"
,
no_argument
,
0
,
'W'
},
{
"pipe"
,
no_argument
,
0
,
'W'
},
#endif
#endif
{
"port"
,
required_argument
,
0
,
'P'
},
{
"port"
,
required_argument
,
0
,
'P'
},
{
"prompt"
,
required_argument
,
0
,
OPT_PROMPT
},
{
"quick"
,
no_argument
,
0
,
'q'
},
{
"quick"
,
no_argument
,
0
,
'q'
},
{
"set-variable"
,
required_argument
,
0
,
'O'
},
{
"set-variable"
,
required_argument
,
0
,
'O'
},
{
"raw"
,
no_argument
,
0
,
'r'
},
{
"raw"
,
no_argument
,
0
,
'r'
},
...
@@ -577,6 +603,7 @@ and you are welcome to modify and redistribute it under the GPL license\n");
...
@@ -577,6 +603,7 @@ and you are welcome to modify and redistribute it under the GPL license\n");
slow down the server if the output is suspended.
\n
\
slow down the server if the output is suspended.
\n
\
Doesn't use history file.
\n
\
Doesn't use history file.
\n
\
-r, --raw Write fields without conversion. Used with --batch
\n
\
-r, --raw Write fields without conversion. Used with --batch
\n
\
--prompt=... Set the mysql prompt to this value
\n
\
-s, --silent Be more silent.
\n
\
-s, --silent Be more silent.
\n
\
-S --socket=... Socket file to use for connection.
\n
"
);
-S --socket=... Socket file to use for connection.
\n
"
);
#include "sslopt-usage.h"
#include "sslopt-usage.h"
...
@@ -661,6 +688,10 @@ static int get_options(int argc, char **argv)
...
@@ -661,6 +688,10 @@ static int get_options(int argc, char **argv)
case
OPT_NOPAGER
:
case
OPT_NOPAGER
:
opt_nopager
=
1
;
opt_nopager
=
1
;
break
;
break
;
case
OPT_PROMPT
:
my_free
(
current_prompt
,
MYF
(
MY_ALLOW_ZERO_PTR
));
current_prompt
=
my_strdup
(
optarg
,
MYF
(
MY_FAE
));
break
;
case
'b'
:
case
'b'
:
opt_nobeep
=
1
;
opt_nobeep
=
1
;
break
;
break
;
...
@@ -846,7 +877,7 @@ static int read_lines(bool execute_commands)
...
@@ -846,7 +877,7 @@ static int read_lines(bool execute_commands)
#if defined( __WIN__) || defined(OS2)
#if defined( __WIN__) || defined(OS2)
if
(
opt_outfile
&&
glob_buffer
.
is_empty
())
if
(
opt_outfile
&&
glob_buffer
.
is_empty
())
fflush
(
OUTFILE
);
fflush
(
OUTFILE
);
tee_fputs
(
glob_buffer
.
is_empty
()
?
"mysql> "
:
tee_fputs
(
glob_buffer
.
is_empty
()
?
construct_prompt
()
:
!
in_string
?
" -> "
:
!
in_string
?
" -> "
:
in_string
==
'\''
?
in_string
==
'\''
?
" '> "
:
"
\"
> "
,
stdout
);
" '> "
:
"
\"
> "
,
stdout
);
...
@@ -857,12 +888,12 @@ static int read_lines(bool execute_commands)
...
@@ -857,12 +888,12 @@ static int read_lines(bool execute_commands)
{
{
if
(
glob_buffer
.
is_empty
())
if
(
glob_buffer
.
is_empty
())
fflush
(
OUTFILE
);
fflush
(
OUTFILE
);
fputs
(
glob_buffer
.
is_empty
()
?
"mysql> "
:
fputs
(
glob_buffer
.
is_empty
()
?
construct_prompt
()
:
!
in_string
?
" -> "
:
!
in_string
?
" -> "
:
in_string
==
'\''
?
in_string
==
'\''
?
" '> "
:
"
\"
> "
,
OUTFILE
);
" '> "
:
"
\"
> "
,
OUTFILE
);
}
}
line
=
readline
((
char
*
)
(
glob_buffer
.
is_empty
()
?
"mysql> "
:
line
=
readline
((
char
*
)
(
glob_buffer
.
is_empty
()
?
construct_prompt
()
:
!
in_string
?
" -> "
:
!
in_string
?
" -> "
:
in_string
==
'\''
?
in_string
==
'\''
?
" '> "
:
"
\"
> "
));
" '> "
:
"
\"
> "
));
...
@@ -2587,6 +2618,172 @@ static void mysql_end_timer(ulong start_time,char *buff)
...
@@ -2587,6 +2618,172 @@ static void mysql_end_timer(ulong start_time,char *buff)
strmov
(
strend
(
buff
),
")"
);
strmov
(
strend
(
buff
),
")"
);
}
}
static
const
char
*
construct_prompt
()
{
//erase the old prompt
processed_prompt
.
free
();
//get the date struct
time_t
lclock
=
time
(
NULL
);
struct
tm
*
t
=
localtime
(
&
lclock
);
//parse thru the settings for the prompt
for
(
char
*
c
=
current_prompt
;
*
c
;
*
c
++
)
{
if
(
*
c
!=
PROMPT_CHAR
)
{
processed_prompt
.
append
(
*
c
);
}
else
{
switch
(
*++
c
)
{
case
'\0'
:
//stop it from going beyond if ends with %
c
--
;
break
;
case
'c'
:
add_int_to_prompt
(
++
prompt_counter
);
break
;
case
'v'
:
processed_prompt
.
append
(
mysql_get_server_info
(
&
mysql
));
break
;
case
'd'
:
processed_prompt
.
append
(
current_db
?
current_db
:
"(none)"
);
break
;
case
'h'
:
if
(
strstr
(
mysql_get_host_info
(
&
mysql
),
"Localhost"
))
{
processed_prompt
.
append
(
"localhost"
);
}
else
{
processed_prompt
.
append
(
strtok
(
mysql_get_host_info
(
&
mysql
),
" "
));
}
break
;
case
'p'
:
if
(
strstr
(
mysql_get_host_info
(
&
mysql
),
"TCP/IP"
)
||
!
mysql
.
unix_socket
)
{
add_int_to_prompt
(
mysql
.
port
);
}
else
processed_prompt
.
append
(
strrchr
(
mysql
.
unix_socket
,
'/'
)
+
1
);
break
;
case
'U'
:
if
(
!
full_username
)
init_username
();
processed_prompt
.
append
(
full_username
);
break
;
case
'u'
:
if
(
!
full_username
)
init_username
();
processed_prompt
.
append
(
part_username
);
break
;
case
PROMPT_CHAR
:
processed_prompt
.
append
(
PROMPT_CHAR
);
break
;
case
'n'
:
processed_prompt
.
append
(
'\n'
);
break
;
case
' '
:
case
'_'
:
processed_prompt
.
append
(
' '
);
break
;
case
'R'
:
add_int_to_prompt
(
t
->
tm_hour
);
break
;
case
'r'
:
int
getHour
;
getHour
=
t
->
tm_hour
%
12
;
if
(
getHour
==
0
)
getHour
=
12
;
add_int_to_prompt
(
getHour
);
break
;
case
'm'
:
if
(
t
->
tm_min
<
10
)
processed_prompt
.
append
(
'0'
);
add_int_to_prompt
(
t
->
tm_min
);
break
;
case
'y'
:
int
getYear
;
getYear
=
t
->
tm_year
%
100
;
if
(
getYear
<
10
)
processed_prompt
.
append
(
'0'
);
add_int_to_prompt
(
getYear
);
break
;
case
'Y'
:
add_int_to_prompt
(
t
->
tm_year
+
1900
);
break
;
case
'D'
:
char
*
dateTime
;
time_t
lclock
;
lclock
=
time
(
NULL
);
dateTime
=
ctime
(
&
lclock
);
processed_prompt
.
append
(
strtok
(
dateTime
,
"
\n
"
));
break
;
case
's'
:
add_int_to_prompt
(
t
->
tm_sec
);
break
;
case
'w'
:
processed_prompt
.
append
(
day_names
[
t
->
tm_wday
]);
break
;
case
'P'
:
processed_prompt
.
append
(
t
->
tm_hour
<
12
?
"am"
:
"pm"
);
break
;
case
'o'
:
add_int_to_prompt
(
t
->
tm_mon
+
1
);
break
;
case
'O'
:
processed_prompt
.
append
(
month_names
[
t
->
tm_mon
]);
break
;
case
'\''
:
processed_prompt
.
append
(
"'"
);
break
;
case
'"'
:
processed_prompt
.
append
(
'"'
);
break
;
case
'S'
:
processed_prompt
.
append
(
';'
);
break
;
case
't'
:
processed_prompt
.
append
(
'\t'
);
break
;
default:
processed_prompt
.
append
(
c
);
}
}
}
processed_prompt
.
append
(
'\0'
);
return
processed_prompt
.
ptr
();
}
static
void
add_int_to_prompt
(
int
toadd
)
{
char
buffer
[
16
];
int10_to_str
(
toadd
,
buffer
,
10
);
processed_prompt
.
append
(
buffer
);
}
static
void
init_username
()
{
my_free
(
full_username
,
MYF
(
MY_ALLOW_ZERO_PTR
));
my_free
(
part_username
,
MYF
(
MY_ALLOW_ZERO_PTR
));
MYSQL_RES
*
result
;
LINT_INIT
(
result
);
if
(
!
mysql_query
(
&
mysql
,
"select USER()"
)
&&
(
result
=
mysql_use_result
(
&
mysql
)))
{
MYSQL_ROW
cur
=
mysql_fetch_row
(
result
);
full_username
=
my_strdup
(
cur
[
0
],
MYF
(
MY_WME
));
part_username
=
my_strdup
(
strtok
(
cur
[
0
],
"@"
),
MYF
(
MY_WME
));
(
void
)
mysql_fetch_row
(
result
);
// Read eof
}
}
static
int
com_prompt
(
String
*
buffer
,
char
*
line
__attribute__
((
unused
)))
{
prompt_counter
=
0
;
my_free
(
current_prompt
,
MYF
(
MY_ALLOW_ZERO_PTR
));
current_prompt
=
my_strdup
(
strchr
(
line
,
' '
)
?
strchr
(
line
,
' '
)
+
1
:
default_prompt
,
MYF
(
MY_WME
));
if
(
!
strchr
(
line
,
' '
))
tee_fprintf
(
stdout
,
"Returning to default PROMPT of %s
\n
"
,
default_prompt
);
else
tee_fprintf
(
stdout
,
"PROMPT set to '%s'
\n
"
,
current_prompt
);
return
0
;
}
#ifndef EMBEDDED_LIBRARY
#ifndef EMBEDDED_LIBRARY
/* Keep sql_string library happy */
/* Keep sql_string library happy */
...
...
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