From d32a5996263a0baeb1ccfc857de11539dcf5af93 Mon Sep 17 00:00:00 2001 From: dapan1121 <89396746@qq.com> Date: Wed, 24 Feb 2021 18:43:48 +0800 Subject: [PATCH 1/3] fix bug --- src/client/inc/tsclient.h | 3 ++ src/client/src/tscUtil.c | 29 ++++++++++++++ src/kit/shell/inc/shell.h | 2 + src/kit/shell/src/shellEngine.c | 68 ++++++++++++++++++++++++++------- 4 files changed, 89 insertions(+), 13 deletions(-) diff --git a/src/client/inc/tsclient.h b/src/client/inc/tsclient.h index bdb0173e9c..47f4a65442 100644 --- a/src/client/inc/tsclient.h +++ b/src/client/inc/tsclient.h @@ -449,6 +449,9 @@ void doAsyncQuery(STscObj *pObj, SSqlObj *pSql, __async_cb_func_t fp, void *para void tscImportDataFromFile(SSqlObj *pSql); void tscInitResObjForLocalQuery(SSqlObj *pObj, int32_t numOfRes, int32_t rowLen); bool tscIsUpdateQuery(SSqlObj* pSql); +char* tscGetSqlStr(SSqlObj* pSql); +bool tscIsQueryWithLimit(SSqlObj* pSql); + bool tscHasReachLimitation(SQueryInfo *pQueryInfo, SSqlRes *pRes); char *tscGetErrorMsgPayload(SSqlCmd *pCmd); diff --git a/src/client/src/tscUtil.c b/src/client/src/tscUtil.c index 727ca9ad7f..aa9dae4001 100644 --- a/src/client/src/tscUtil.c +++ b/src/client/src/tscUtil.c @@ -2310,6 +2310,35 @@ bool tscIsUpdateQuery(SSqlObj* pSql) { return ((pCmd->command >= TSDB_SQL_INSERT && pCmd->command <= TSDB_SQL_DROP_DNODE) || TSDB_SQL_USE_DB == pCmd->command); } +char* tscGetSqlStr(SSqlObj* pSql) { + if (pSql == NULL || pSql->signature != pSql) { + return NULL; + } + + return pSql->sqlstr; +} + +bool tscIsQueryWithLimit(SSqlObj* pSql) { + if (pSql == NULL || pSql->signature != pSql) { + return false; + } + + SSqlCmd* pCmd = &pSql->cmd; + for (int32_t i = 0; i < pCmd->numOfClause; ++i) { + SQueryInfo* pqi = tscGetQueryInfoDetailSafely(pCmd, i); + if (pqi == NULL) { + continue; + } + + if (pqi->limit.limit > 0) { + return true; + } + } + + return false; +} + + int32_t tscSQLSyntaxErrMsg(char* msg, const char* additionalInfo, const char* sql) { const char* msgFormat1 = "syntax error near \'%s\'"; const char* msgFormat2 = "syntax error near \'%s\' (%s)"; diff --git a/src/kit/shell/inc/shell.h b/src/kit/shell/inc/shell.h index 2415695617..3702a7d02d 100644 --- a/src/kit/shell/inc/shell.h +++ b/src/kit/shell/inc/shell.h @@ -30,6 +30,8 @@ #define MAX_COMMAND_SIZE 65536 #define HISTORY_FILE ".taos_history" +#define DEFAULT_RES_SHOW_NUM 100 + typedef struct SShellHistory { char* hist[MAX_HISTORY_SIZE]; int hstart; diff --git a/src/kit/shell/src/shellEngine.c b/src/kit/shell/src/shellEngine.c index 1f3eb7927c..e0da6084dd 100644 --- a/src/kit/shell/src/shellEngine.c +++ b/src/kit/shell/src/shellEngine.c @@ -48,6 +48,9 @@ int prompt_size = 6; int64_t result = 0; SShellHistory history; +uint32_t resShowMaxNum = UINT32_MAX; +int32_t resShowMaxReached = 0; + #define DEFAULT_MAX_BINARY_DISPLAY_WIDTH 30 extern int32_t tsMaxBinaryDisplayWidth; @@ -324,7 +327,9 @@ void shellRunCommandOnServer(TAOS *con, char command[]) { } if (!tscIsUpdateQuery(pSql)) { // select and show kinds of commands - int error_no = 0; + int error_no = 0; + resShowMaxReached = 0; + int numOfRows = shellDumpResult(pSql, fname, &error_no, printMode); if (numOfRows < 0) { atomic_store_64(&result, 0); @@ -335,6 +340,10 @@ void shellRunCommandOnServer(TAOS *con, char command[]) { et = taosGetTimestampUs(); if (error_no == 0) { printf("Query OK, %d row(s) in set (%.6fs)\n", numOfRows, (et - st) / 1E6); + + if (resShowMaxReached) { + printf("Displayed 100 rows. You can add \"limit %d\" or redirect results to specific file to get all.\n", numOfRows); + } } else { printf("Query interrupted (%s), %d row(s) in set (%.6fs)\n", taos_errstr(pSql), numOfRows, (et - st) / 1E6); } @@ -659,6 +668,17 @@ static void printField(const char* val, TAOS_FIELD* field, int width, int32_t le } +bool isSelectQuery(TAOS_RES* tres) { + char *sql = tscGetSqlStr(tres); + + if (regex_match(sql, "^[\t ]*select[ \t]*", REG_EXTENDED | REG_ICASE)) { + return true; + } + + return false; +} + + static int verticalPrintResult(TAOS_RES* tres) { TAOS_ROW row = taos_fetch_row(tres); if (row == NULL) { @@ -677,18 +697,29 @@ static int verticalPrintResult(TAOS_RES* tres) { } } + if (isSelectQuery(tres) && !tscIsQueryWithLimit(tres)) { + resShowMaxNum = DEFAULT_RES_SHOW_NUM; + } else { + resShowMaxNum = UINT32_MAX; + } + int numOfRows = 0; do { printf("*************************** %d.row ***************************\n", numOfRows + 1); int32_t* length = taos_fetch_lengths(tres); - for (int i = 0; i < num_fields; i++) { - TAOS_FIELD* field = fields + i; + + if (numOfRows < resShowMaxNum) { + for (int i = 0; i < num_fields; i++) { + TAOS_FIELD* field = fields + i; - int padding = (int)(maxColNameLen - strlen(field->name)); - printf("%*.s%s: ", padding, " ", field->name); + int padding = (int)(maxColNameLen - strlen(field->name)); + printf("%*.s%s: ", padding, " ", field->name); - printField((const char*)row[i], field, 0, length[i], precision); - putchar('\n'); + printField((const char*)row[i], field, 0, length[i], precision); + putchar('\n'); + } + } else { + resShowMaxReached = 1; } numOfRows++; @@ -795,16 +826,27 @@ static int horizontalPrintResult(TAOS_RES* tres) { printHeader(fields, width, num_fields); + if (isSelectQuery(tres) && !tscIsQueryWithLimit(tres)) { + resShowMaxNum = DEFAULT_RES_SHOW_NUM; + } else { + resShowMaxNum = UINT32_MAX; + } + int numOfRows = 0; do { int32_t* length = taos_fetch_lengths(tres); - for (int i = 0; i < num_fields; i++) { - putchar(' '); - printField((const char*)row[i], fields + i, width[i], length[i], precision); - putchar(' '); - putchar('|'); + if (numOfRows < resShowMaxNum) { + for (int i = 0; i < num_fields; i++) { + putchar(' '); + printField((const char*)row[i], fields + i, width[i], length[i], precision); + putchar(' '); + putchar('|'); + } + putchar('\n'); + } else { + resShowMaxReached = 1; } - putchar('\n'); + numOfRows++; row = taos_fetch_row(tres); } while(row != NULL); From 13cd16f1790c2b369e62d4011af02c3d92c36440 Mon Sep 17 00:00:00 2001 From: dapan1121 <89396746@qq.com> Date: Wed, 24 Feb 2021 19:45:50 +0800 Subject: [PATCH 2/3] fix bug --- src/kit/shell/src/shellEngine.c | 38 ++++++++++++++++----------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/kit/shell/src/shellEngine.c b/src/kit/shell/src/shellEngine.c index e0da6084dd..5907b43274 100644 --- a/src/kit/shell/src/shellEngine.c +++ b/src/kit/shell/src/shellEngine.c @@ -48,9 +48,6 @@ int prompt_size = 6; int64_t result = 0; SShellHistory history; -uint32_t resShowMaxNum = UINT32_MAX; -int32_t resShowMaxReached = 0; - #define DEFAULT_MAX_BINARY_DISPLAY_WIDTH 30 extern int32_t tsMaxBinaryDisplayWidth; @@ -328,7 +325,6 @@ void shellRunCommandOnServer(TAOS *con, char command[]) { if (!tscIsUpdateQuery(pSql)) { // select and show kinds of commands int error_no = 0; - resShowMaxReached = 0; int numOfRows = shellDumpResult(pSql, fname, &error_no, printMode); if (numOfRows < 0) { @@ -340,10 +336,6 @@ void shellRunCommandOnServer(TAOS *con, char command[]) { et = taosGetTimestampUs(); if (error_no == 0) { printf("Query OK, %d row(s) in set (%.6fs)\n", numOfRows, (et - st) / 1E6); - - if (resShowMaxReached) { - printf("Displayed 100 rows. You can add \"limit %d\" or redirect results to specific file to get all.\n", numOfRows); - } } else { printf("Query interrupted (%s), %d row(s) in set (%.6fs)\n", taos_errstr(pSql), numOfRows, (et - st) / 1E6); } @@ -697,18 +689,20 @@ static int verticalPrintResult(TAOS_RES* tres) { } } - if (isSelectQuery(tres) && !tscIsQueryWithLimit(tres)) { + uint64_t resShowMaxNum = UINT64_MAX; + + if (args.commands == NULL && args.file[0] == 0 && isSelectQuery(tres) && !tscIsQueryWithLimit(tres)) { resShowMaxNum = DEFAULT_RES_SHOW_NUM; - } else { - resShowMaxNum = UINT32_MAX; } int numOfRows = 0; + int showMore = 1; do { printf("*************************** %d.row ***************************\n", numOfRows + 1); - int32_t* length = taos_fetch_lengths(tres); if (numOfRows < resShowMaxNum) { + int32_t* length = taos_fetch_lengths(tres); + for (int i = 0; i < num_fields; i++) { TAOS_FIELD* field = fields + i; @@ -718,8 +712,10 @@ static int verticalPrintResult(TAOS_RES* tres) { printField((const char*)row[i], field, 0, length[i], precision); putchar('\n'); } - } else { - resShowMaxReached = 1; + } else if (showMore) { + printf("100 Rows showed, and more rows are fetching but will not be showed. You can ctrl+c to stop or wait.\n"); + printf("You can add limit statement to get more or redirect results to specific file to get all.\n"); + showMore = 0; } numOfRows++; @@ -826,13 +822,15 @@ static int horizontalPrintResult(TAOS_RES* tres) { printHeader(fields, width, num_fields); - if (isSelectQuery(tres) && !tscIsQueryWithLimit(tres)) { + uint64_t resShowMaxNum = UINT64_MAX; + + if (args.commands == NULL && args.file[0] == 0 && isSelectQuery(tres) && !tscIsQueryWithLimit(tres)) { resShowMaxNum = DEFAULT_RES_SHOW_NUM; - } else { - resShowMaxNum = UINT32_MAX; } int numOfRows = 0; + int showMore = 1; + do { int32_t* length = taos_fetch_lengths(tres); if (numOfRows < resShowMaxNum) { @@ -843,8 +841,10 @@ static int horizontalPrintResult(TAOS_RES* tres) { putchar('|'); } putchar('\n'); - } else { - resShowMaxReached = 1; + } else if (showMore) { + printf("100 Rows showed, and more rows are fetching but will not be showed. You can ctrl+c to stop or wait.\n"); + printf("You can add limit statement to show more or redirect results to specific file to get all.\n"); + showMore = 0; } numOfRows++; From 012a833cc43fae855960677d8677d4685b27d79d Mon Sep 17 00:00:00 2001 From: dapan1121 <89396746@qq.com> Date: Thu, 25 Feb 2021 10:15:01 +0800 Subject: [PATCH 3/3] fix bug --- src/kit/shell/src/shellEngine.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/kit/shell/src/shellEngine.c b/src/kit/shell/src/shellEngine.c index 5907b43274..a6f5869936 100644 --- a/src/kit/shell/src/shellEngine.c +++ b/src/kit/shell/src/shellEngine.c @@ -697,10 +697,10 @@ static int verticalPrintResult(TAOS_RES* tres) { int numOfRows = 0; int showMore = 1; - do { - printf("*************************** %d.row ***************************\n", numOfRows + 1); - + do { if (numOfRows < resShowMaxNum) { + printf("*************************** %d.row ***************************\n", numOfRows + 1); + int32_t* length = taos_fetch_lengths(tres); for (int i = 0; i < num_fields; i++) { @@ -713,8 +713,8 @@ static int verticalPrintResult(TAOS_RES* tres) { putchar('\n'); } } else if (showMore) { - printf("100 Rows showed, and more rows are fetching but will not be showed. You can ctrl+c to stop or wait.\n"); - printf("You can add limit statement to get more or redirect results to specific file to get all.\n"); + printf("[100 Rows showed, and more rows are fetching but will not be showed. You can ctrl+c to stop or wait.]\n"); + printf("[You can add limit statement to get more or redirect results to specific file to get all.]\n"); showMore = 0; } @@ -842,8 +842,8 @@ static int horizontalPrintResult(TAOS_RES* tres) { } putchar('\n'); } else if (showMore) { - printf("100 Rows showed, and more rows are fetching but will not be showed. You can ctrl+c to stop or wait.\n"); - printf("You can add limit statement to show more or redirect results to specific file to get all.\n"); + printf("[100 Rows showed, and more rows are fetching but will not be showed. You can ctrl+c to stop or wait.]\n"); + printf("[You can add limit statement to show more or redirect results to specific file to get all.]\n"); showMore = 0; }