From ee898804738e402c7dcfc6b87498f2729f60c430 Mon Sep 17 00:00:00 2001 From: "konstantin@mysql.com" <> Date: Mon, 16 Aug 2004 15:07:45 -0700 Subject: A desperate attempt to comment one place where we do conversions. --- sql/field.cc | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) 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,' '); } -- cgit v1.2.1 From f1ab1b129fa6ea80537dcd1961801052e5d20b88 Mon Sep 17 00:00:00 2001 From: "ram@gw.mysql.r18.ru" <> Date: Tue, 17 Aug 2004 11:12:22 +0500 Subject: A fix (bug #5055: SQL_SELECT_LIMIT=0 crashes command line client): mysql outwits itself. --- client/mysql.cc | 11 +++++++---- 1 file changed, 7 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 && -- cgit v1.2.1