diff options
author | heikki@hundin.mysql.fi <> | 2004-08-17 14:30:36 +0300 |
---|---|---|
committer | heikki@hundin.mysql.fi <> | 2004-08-17 14:30:36 +0300 |
commit | 48b61d6180a1a6862e5b1ed6097c348d61482b00 (patch) | |
tree | 4130b8bc82849add2e782ad15e779a9b037333be | |
parent | 77aa9abf1a74b7e1803e5d632532c68a97034832 (diff) | |
parent | f1ab1b129fa6ea80537dcd1961801052e5d20b88 (diff) | |
download | mariadb-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.cc | 11 | ||||
-rw-r--r-- | sql/field.cc | 27 |
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,' '); } |