From 7611ceeeead7907a088db79f47b1e7a01299fae1 Mon Sep 17 00:00:00 2001 From: xywang Date: Wed, 26 Jan 2022 17:37:20 +0800 Subject: [PATCH] [TS-822]: optimized print style of data with double type --- src/kit/shell/src/shellEngine.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/kit/shell/src/shellEngine.c b/src/kit/shell/src/shellEngine.c index 21bc9ad06e..f80f969400 100644 --- a/src/kit/shell/src/shellEngine.c +++ b/src/kit/shell/src/shellEngine.c @@ -392,14 +392,14 @@ static char* formatTimestamp(char* buf, int64_t val, int precision) { FILETIME b; // unit is 100ns ULARGE_INTEGER c; SystemTimeToFileTime(&a,&b); - c.LowPart = b.dwLowDateTime; - c.HighPart = b.dwHighDateTime; + c.LowPart = b.dwLowDateTime; + c.HighPart = b.dwHighDateTime; c.QuadPart+=tt*10000000; - b.dwLowDateTime=c.LowPart; - b.dwHighDateTime=c.HighPart; + b.dwLowDateTime=c.LowPart; + b.dwHighDateTime=c.HighPart; FileTimeToLocalFileTime(&b,&b); FileTimeToSystemTime(&b,&a); - int pos = sprintf(buf,"%02d-%02d-%02d %02d:%02d:%02d", a.wYear, a.wMonth,a.wDay, a.wHour, a.wMinute, a.wSecond); + int pos = sprintf(buf,"%02d-%02d-%02d %02d:%02d:%02d", a.wYear, a.wMonth,a.wDay, a.wHour, a.wMinute, a.wSecond); if (precision == TSDB_TIME_PRECISION_NANO) { sprintf(buf + pos, ".%09d", ms); } else if (precision == TSDB_TIME_PRECISION_MICRO) { @@ -442,6 +442,7 @@ static void dumpFieldToFile(FILE* fp, const char* val, TAOS_FIELD* field, int32_ return; } + int n; char buf[TSDB_MAX_BYTES_PER_ROW]; switch (field->type) { case TSDB_DATA_TYPE_BOOL: @@ -475,7 +476,12 @@ static void dumpFieldToFile(FILE* fp, const char* val, TAOS_FIELD* field, int32_ fprintf(fp, "%.5f", GET_FLOAT_VAL(val)); break; case TSDB_DATA_TYPE_DOUBLE: - fprintf(fp, "%.9f", GET_DOUBLE_VAL(val)); + n = snprintf(buf, TSDB_MAX_BYTES_PER_ROW, "%*.9f", length, GET_DOUBLE_VAL(val)); + if (n > MAX(25, length)) { + fprintf(fp, "%*.15e", length, GET_DOUBLE_VAL(val)); + } else { + fprintf(fp, "%s", buf); + } break; case TSDB_DATA_TYPE_BINARY: case TSDB_DATA_TYPE_NCHAR: @@ -631,6 +637,7 @@ static void printField(const char* val, TAOS_FIELD* field, int width, int32_t le return; } + int n; char buf[TSDB_MAX_BYTES_PER_ROW]; switch (field->type) { case TSDB_DATA_TYPE_BOOL: @@ -664,7 +671,12 @@ static void printField(const char* val, TAOS_FIELD* field, int width, int32_t le printf("%*.5f", width, GET_FLOAT_VAL(val)); break; case TSDB_DATA_TYPE_DOUBLE: - printf("%*.9f", width, GET_DOUBLE_VAL(val)); + n = snprintf(buf, TSDB_MAX_BYTES_PER_ROW, "%*.9f", width, GET_DOUBLE_VAL(val)); + if (n > MAX(25, width)) { + printf("%*.15e", width, GET_DOUBLE_VAL(val)); + } else { + printf("%s", buf); + } break; case TSDB_DATA_TYPE_BINARY: case TSDB_DATA_TYPE_NCHAR: -- GitLab