summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorheikki@hundin.mysql.fi <>2004-08-17 14:30:36 +0300
committerheikki@hundin.mysql.fi <>2004-08-17 14:30:36 +0300
commit48b61d6180a1a6862e5b1ed6097c348d61482b00 (patch)
tree4130b8bc82849add2e782ad15e779a9b037333be
parent77aa9abf1a74b7e1803e5d632532c68a97034832 (diff)
parentf1ab1b129fa6ea80537dcd1961801052e5d20b88 (diff)
downloadmariadb-git-48b61d6180a1a6862e5b1ed6097c348d61482b00.tar.gz
Merge heikki@build.mysql.com:/home/bk/mysql-4.0
into hundin.mysql.fi:/home/heikki/mysql-4.0
-rw-r--r--client/mysql.cc11
-rw-r--r--sql/field.cc27
2 files changed, 34 insertions, 4 deletions
diff --git a/client/mysql.cc b/client/mysql.cc
index 66a99bbdf75..8343543ba33 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -2351,13 +2351,16 @@ com_status(String *buffer __attribute__((unused)),
MYSQL_RES *result;
LINT_INIT(result);
tee_fprintf(stdout, "\nConnection id:\t\t%lu\n",mysql_thread_id(&mysql));
- if (!mysql_query(&mysql,"select DATABASE(),USER()") &&
+ if (!mysql_query(&mysql,"select DATABASE(), USER() limit 1") &&
(result=mysql_use_result(&mysql)))
{
MYSQL_ROW cur=mysql_fetch_row(result);
- tee_fprintf(stdout, "Current database:\t%s\n", cur[0] ? cur[0] : "");
- tee_fprintf(stdout, "Current user:\t\t%s\n",cur[1]);
- (void) mysql_fetch_row(result); // Read eof
+ if (cur)
+ {
+ tee_fprintf(stdout, "Current database:\t%s\n", cur[0] ? cur[0] : "");
+ tee_fprintf(stdout, "Current user:\t\t%s\n", cur[1]);
+ }
+ mysql_free_result(result);
}
#ifdef HAVE_OPENSSL
if (mysql.net.vio && mysql.net.vio->ssl_arg &&
diff --git a/sql/field.cc b/sql/field.cc
index 946f5ed8621..aca1f8846f0 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -2332,6 +2332,33 @@ String *Field_double::val_str(String *val_buffer,
if (dec >= NOT_FIXED_DEC)
{
+ /*
+ Let's try to pretty print a floating point number. Here we use
+ '%-*.*g' conversion string:
+ '-' stands for left-padding with spaces, if such padding will take
+ place
+ '*' is a placeholder for the first argument, field_length, and
+ signifies minimal width of result string. If result is less than
+ field length it will be space-padded. Note, however, that we'll not
+ pass spaces to Field_string::store(const char *, ...), due to
+ strcend in the next line.
+ '.*' is a placeholder for DBL_DIG and defines maximum number of
+ significant digits in the result string. DBL_DIG is a hardware
+ specific C define for maximum number of decimal digits of a floating
+ point number, such that rounding to hardware floating point
+ representation and back to decimal will not lead to loss of
+ precision. I.e if DBL_DIG is 15, number 123456789111315 can be
+ represented as double without precision loss. As one can judge from
+ this description, chosing DBL_DIG here is questionable, especially
+ because it introduces a system dependency.
+ 'g' means that conversion will use [-]ddd.ddd (conventional) style,
+ and fall back to [-]d.ddde[+|i]ddd (scientific) style if there is no
+ enough space for all digits.
+ Maximum length of result string (not counting spaces) is (I guess)
+ DBL_DIG + 8, where 8 is 1 for sign, 1 for decimal point, 1 for
+ exponent sign, 1 for exponent, and 4 for exponent value.
+ XXX: why do we use space-padding and trim spaces in the next line?
+ */
sprintf(to,"%-*.*g",(int) field_length,DBL_DIG,nr);
to=strcend(to,' ');
}