diff --git a/src/kit/shell/src/shellEngine.c b/src/kit/shell/src/shellEngine.c index 7705db4b27e252a01933950fd309bd7ca179a008..a668524352d48af394268cb1a2cce41f43730a32 100644 --- a/src/kit/shell/src/shellEngine.c +++ b/src/kit/shell/src/shellEngine.c @@ -276,6 +276,8 @@ void shellRunCommandOnServer(TAOS *con, char command[]) { st = taosGetTimestampUs(); TAOS_RES* pSql = taos_query(con, command); + result = pSql; // set it into the global variable + if (taos_errno(pSql)) { taos_error(pSql); return; @@ -284,7 +286,8 @@ void shellRunCommandOnServer(TAOS *con, char command[]) { if (regex_match(command, "^\\s*use\\s+[a-zA-Z0-9_]+\\s*;\\s*$", REG_EXTENDED | REG_ICASE)) { fprintf(stdout, "Database changed.\n\n"); fflush(stdout); - + + result = NULL; taos_free_result(pSql); return; } @@ -294,6 +297,7 @@ void shellRunCommandOnServer(TAOS *con, char command[]) { int error_no = 0; int numOfRows = shellDumpResult(pSql, fname, &error_no, printMode); if (numOfRows < 0) { + result = NULL; taos_free_result(pSql); return; } @@ -315,7 +319,8 @@ void shellRunCommandOnServer(TAOS *con, char command[]) { if (fname != NULL) { wordfree(&full_path); } - + + result = NULL; taos_free_result(pSql); } @@ -419,8 +424,8 @@ static void dumpFieldToFile(FILE* fp, const char* val, TAOS_FIELD* field, int32_ } } -static int dumpResultToFile(const char* fname, TAOS_RES* result) { - TAOS_ROW row = taos_fetch_row(result); +static int dumpResultToFile(const char* fname, TAOS_RES* tres) { + TAOS_ROW row = taos_fetch_row(tres); if (row == NULL) { return 0; } @@ -441,9 +446,9 @@ static int dumpResultToFile(const char* fname, TAOS_RES* result) { wordfree(&full_path); - int num_fields = taos_num_fields(result); - TAOS_FIELD *fields = taos_fetch_fields(result); - int precision = taos_result_precision(result); + int num_fields = taos_num_fields(tres); + TAOS_FIELD *fields = taos_fetch_fields(tres); + int precision = taos_result_precision(tres); for (int col = 0; col < num_fields; col++) { if (col > 0) { @@ -455,7 +460,7 @@ static int dumpResultToFile(const char* fname, TAOS_RES* result) { int numOfRows = 0; do { - int32_t* length = taos_fetch_lengths(result); + int32_t* length = taos_fetch_lengths(tres); for (int i = 0; i < num_fields; i++) { if (i > 0) { fputc(',', fp); @@ -465,10 +470,13 @@ static int dumpResultToFile(const char* fname, TAOS_RES* result) { fputc('\n', fp); numOfRows++; - row = taos_fetch_row(result); + row = taos_fetch_row(tres); } while( row != NULL); + result = NULL; + taos_free_result(tres); fclose(fp); + return numOfRows; } @@ -769,8 +777,7 @@ void write_history() { void taos_error(TAOS_RES *tres) { fprintf(stderr, "\nDB error: %s\n", taos_errstr(tres)); - - /* free local resouce: allocated memory/metric-meta refcnt */ + result = NULL; taos_free_result(tres); } @@ -845,9 +852,9 @@ void shellGetGrantInfo(void *con) { char sql[] = "show grants"; - result = taos_query(con, sql); + TAOS_RES* tres = taos_query(con, sql); - int code = taos_errno(result); + int code = taos_errno(tres); if (code != TSDB_CODE_SUCCESS) { if (code == TSDB_CODE_COM_OPS_NOT_SUPPORT) { fprintf(stdout, "Server is Community Edition, version is %s\n\n", taos_get_server_info(con)); @@ -857,18 +864,18 @@ void shellGetGrantInfo(void *con) { return; } - int num_fields = taos_field_count(result); + int num_fields = taos_field_count(tres); if (num_fields == 0) { fprintf(stderr, "\nInvalid grant information.\n"); exit(0); } else { - if (result == NULL) { + if (tres == NULL) { fprintf(stderr, "\nGrant information is null.\n"); exit(0); } - TAOS_FIELD *fields = taos_fetch_fields(result); - TAOS_ROW row = taos_fetch_row(result); + TAOS_FIELD *fields = taos_fetch_fields(tres); + TAOS_ROW row = taos_fetch_row(tres); if (row == NULL) { fprintf(stderr, "\nFailed to get grant information from server. Abort.\n"); exit(0); @@ -888,8 +895,8 @@ void shellGetGrantInfo(void *con) { fprintf(stdout, "Server is Enterprise %s Edition, version is %s and will expire at %s.\n", serverVersion, taos_get_server_info(con), expiretime); } - taos_free_result(result); result = NULL; + taos_free_result(tres); } fprintf(stdout, "\n"); diff --git a/src/kit/shell/src/shellMain.c b/src/kit/shell/src/shellMain.c index 92474bdd03f56e6b5b0e0bde17a94a10606ac8d4..8481f498dd395cd449192d625d307ae812acaa30 100644 --- a/src/kit/shell/src/shellMain.c +++ b/src/kit/shell/src/shellMain.c @@ -15,7 +15,6 @@ #include "os.h" #include "shell.h" -#include "tsclient.h" pthread_t pid; @@ -23,14 +22,6 @@ pthread_t pid; void interruptHandler(int signum) { #ifdef LINUX taos_stop_query(result); - if (result != NULL) { - /* - * we need to free result in async model, in order to avoid free - * results while the master thread is waiting for server response. - */ - tscQueueAsyncFreeResult(result); - } - result = NULL; #else printf("\nReceive ctrl+c or other signal, quit shell.\n"); diff --git a/src/kit/taosdump/taosdump.c b/src/kit/taosdump/taosdump.c index ee792c51166b090dd8ea104120ae5fd105791948..6ae78f6f731a0059902f21ded3693655287b4390 100644 --- a/src/kit/taosdump/taosdump.c +++ b/src/kit/taosdump/taosdump.c @@ -293,7 +293,6 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) { static struct argp argp = {options, parse_opt, args_doc, doc}; TAOS *taos = NULL; -TAOS_RES *result = NULL; char *command = NULL; char *lcommand = NULL; char *buffer = NULL; @@ -463,10 +462,10 @@ int taosDumpOut(SDumpArguments *arguments) { taosDumpCharset(fp); sprintf(command, "show databases"); - result = taos_query(taos, command); + TAOS_RES* result = taos_query(taos, command); int32_t code = taos_errno(result); if (code != 0) { - fprintf(stderr, "failed to run command: %s, reason: %s\n", command, taos_errstr(taos)); + fprintf(stderr, "failed to run command: %s, reason: %s\n", command, taos_errstr(result)); taos_free_result(result); goto _exit_failure; } @@ -613,7 +612,7 @@ int taosDumpDb(SDbInfo *dbInfo, SDumpArguments *arguments, FILE *fp) { fprintf(fp, "USE %s\n\n", dbInfo->name); sprintf(command, "show tables"); - result = taos_query(taos,command); + TAOS_RES* result = taos_query(taos,command); int32_t code = taos_errno(result); if (code != 0) { fprintf(stderr, "failed to run command %s, error: %s\n", command, taos_errstr(result)); @@ -717,7 +716,7 @@ void taosDumpCreateMTableClause(STableDef *tableDes, char *metric, int numOfCols sprintf(command, "select %s from %s limit 1", tableDes->cols[counter].field, tableDes->name); - result = taos_query(taos, command); + TAOS_RES* result = taos_query(taos, command); int32_t code = taos_errno(result); if (code != 0) { fprintf(stderr, "failed to run command %s, error: %s\n", command, taos_errstr(result)); @@ -795,7 +794,7 @@ int taosGetTableDes(char *table, STableDef *tableDes) { sprintf(command, "describe %s", table); - result = taos_query(taos, command); + TAOS_RES* result = taos_query(taos, command); int32_t code = taos_errno(result); if (code != 0) { fprintf(stderr, "failed to run command %s, error: %s\n", command, taos_errstr(result)); @@ -875,7 +874,7 @@ int32_t taosDumpMetric(char *metric, SDumpArguments *arguments, FILE *fp) { tstrncpy(tableRecord.metric, metric, TSDB_TABLE_NAME_LEN); sprintf(command, "select tbname from %s", metric); - result = taos_query(taos, command); + TAOS_RES* result = taos_query(taos, command); int32_t code = taos_errno(result); if (code != 0) { fprintf(stderr, "failed to run command %s, error: %s\n", command, taos_errstr(result)); @@ -928,7 +927,7 @@ int taosDumpTableData(FILE *fp, char *tbname, SDumpArguments *arguments) { sprintf(command, "select * from %s where _c0 >= %" PRId64 " and _c0 <= %" PRId64 " order by _c0 asc", tbname, arguments->start_time, arguments->end_time); - result = taos_query(taos, command); + TAOS_RES* result = taos_query(taos, command); int32_t code = taos_errno(result); if (code != 0) { fprintf(stderr, "failed to run command %s, reason: %s\n", command, taos_errstr(result)); @@ -1177,9 +1176,13 @@ int taosDumpIn(SDumpArguments *arguments) { tcommand = command; } taosReplaceCtrlChar(tcommand); - if (taos_query(taos, tcommand) == NULL) + + TAOS_RES* result = taos_query(taos, tcommand); + if (taos_errno(result) != 0){ fprintf(stderr, "linenu: %" PRId64 " failed to run command %s reason:%s \ncontinue...\n", linenu, command, - taos_errstr(taos)); + taos_errstr(result)); + taos_free_result(result); + } pstr = command; pstr[0] = '\0'; @@ -1225,12 +1228,12 @@ int taosDumpIn(SDumpArguments *arguments) { tcommand = command; } taosReplaceCtrlChar(tcommand); - result = taos_query(taos, tcommand); + TAOS_RES* result = taos_query(taos, tcommand); int32_t code = taos_errno(result); if (code != 0) { fprintf(stderr, "linenu:%" PRId64 " failed to run command %s reason: %s \ncontinue...\n", linenu, command, - taos_errstr(taos)); + taos_errstr(result)); } taos_free_result(result); }