提交 d32a5996 编写于 作者: D dapan1121

fix bug

上级 e329f9f4
...@@ -449,6 +449,9 @@ void doAsyncQuery(STscObj *pObj, SSqlObj *pSql, __async_cb_func_t fp, void *para ...@@ -449,6 +449,9 @@ void doAsyncQuery(STscObj *pObj, SSqlObj *pSql, __async_cb_func_t fp, void *para
void tscImportDataFromFile(SSqlObj *pSql); void tscImportDataFromFile(SSqlObj *pSql);
void tscInitResObjForLocalQuery(SSqlObj *pObj, int32_t numOfRes, int32_t rowLen); void tscInitResObjForLocalQuery(SSqlObj *pObj, int32_t numOfRes, int32_t rowLen);
bool tscIsUpdateQuery(SSqlObj* pSql); bool tscIsUpdateQuery(SSqlObj* pSql);
char* tscGetSqlStr(SSqlObj* pSql);
bool tscIsQueryWithLimit(SSqlObj* pSql);
bool tscHasReachLimitation(SQueryInfo *pQueryInfo, SSqlRes *pRes); bool tscHasReachLimitation(SQueryInfo *pQueryInfo, SSqlRes *pRes);
char *tscGetErrorMsgPayload(SSqlCmd *pCmd); char *tscGetErrorMsgPayload(SSqlCmd *pCmd);
......
...@@ -2310,6 +2310,35 @@ bool tscIsUpdateQuery(SSqlObj* pSql) { ...@@ -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); 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) { int32_t tscSQLSyntaxErrMsg(char* msg, const char* additionalInfo, const char* sql) {
const char* msgFormat1 = "syntax error near \'%s\'"; const char* msgFormat1 = "syntax error near \'%s\'";
const char* msgFormat2 = "syntax error near \'%s\' (%s)"; const char* msgFormat2 = "syntax error near \'%s\' (%s)";
......
...@@ -30,6 +30,8 @@ ...@@ -30,6 +30,8 @@
#define MAX_COMMAND_SIZE 65536 #define MAX_COMMAND_SIZE 65536
#define HISTORY_FILE ".taos_history" #define HISTORY_FILE ".taos_history"
#define DEFAULT_RES_SHOW_NUM 100
typedef struct SShellHistory { typedef struct SShellHistory {
char* hist[MAX_HISTORY_SIZE]; char* hist[MAX_HISTORY_SIZE];
int hstart; int hstart;
......
...@@ -48,6 +48,9 @@ int prompt_size = 6; ...@@ -48,6 +48,9 @@ int prompt_size = 6;
int64_t result = 0; int64_t result = 0;
SShellHistory history; SShellHistory history;
uint32_t resShowMaxNum = UINT32_MAX;
int32_t resShowMaxReached = 0;
#define DEFAULT_MAX_BINARY_DISPLAY_WIDTH 30 #define DEFAULT_MAX_BINARY_DISPLAY_WIDTH 30
extern int32_t tsMaxBinaryDisplayWidth; extern int32_t tsMaxBinaryDisplayWidth;
...@@ -324,7 +327,9 @@ void shellRunCommandOnServer(TAOS *con, char command[]) { ...@@ -324,7 +327,9 @@ void shellRunCommandOnServer(TAOS *con, char command[]) {
} }
if (!tscIsUpdateQuery(pSql)) { // select and show kinds of commands 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); int numOfRows = shellDumpResult(pSql, fname, &error_no, printMode);
if (numOfRows < 0) { if (numOfRows < 0) {
atomic_store_64(&result, 0); atomic_store_64(&result, 0);
...@@ -335,6 +340,10 @@ void shellRunCommandOnServer(TAOS *con, char command[]) { ...@@ -335,6 +340,10 @@ void shellRunCommandOnServer(TAOS *con, char command[]) {
et = taosGetTimestampUs(); et = taosGetTimestampUs();
if (error_no == 0) { if (error_no == 0) {
printf("Query OK, %d row(s) in set (%.6fs)\n", numOfRows, (et - st) / 1E6); 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 { } else {
printf("Query interrupted (%s), %d row(s) in set (%.6fs)\n", taos_errstr(pSql), numOfRows, (et - st) / 1E6); 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 ...@@ -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) { static int verticalPrintResult(TAOS_RES* tres) {
TAOS_ROW row = taos_fetch_row(tres); TAOS_ROW row = taos_fetch_row(tres);
if (row == NULL) { if (row == NULL) {
...@@ -677,18 +697,29 @@ static int verticalPrintResult(TAOS_RES* tres) { ...@@ -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; int numOfRows = 0;
do { do {
printf("*************************** %d.row ***************************\n", numOfRows + 1); printf("*************************** %d.row ***************************\n", numOfRows + 1);
int32_t* length = taos_fetch_lengths(tres); 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)); int padding = (int)(maxColNameLen - strlen(field->name));
printf("%*.s%s: ", padding, " ", field->name); printf("%*.s%s: ", padding, " ", field->name);
printField((const char*)row[i], field, 0, length[i], precision); printField((const char*)row[i], field, 0, length[i], precision);
putchar('\n'); putchar('\n');
}
} else {
resShowMaxReached = 1;
} }
numOfRows++; numOfRows++;
...@@ -795,16 +826,27 @@ static int horizontalPrintResult(TAOS_RES* tres) { ...@@ -795,16 +826,27 @@ static int horizontalPrintResult(TAOS_RES* tres) {
printHeader(fields, width, num_fields); printHeader(fields, width, num_fields);
if (isSelectQuery(tres) && !tscIsQueryWithLimit(tres)) {
resShowMaxNum = DEFAULT_RES_SHOW_NUM;
} else {
resShowMaxNum = UINT32_MAX;
}
int numOfRows = 0; int numOfRows = 0;
do { do {
int32_t* length = taos_fetch_lengths(tres); int32_t* length = taos_fetch_lengths(tres);
for (int i = 0; i < num_fields; i++) { if (numOfRows < resShowMaxNum) {
putchar(' '); for (int i = 0; i < num_fields; i++) {
printField((const char*)row[i], fields + i, width[i], length[i], precision); putchar(' ');
putchar(' '); printField((const char*)row[i], fields + i, width[i], length[i], precision);
putchar('|'); putchar(' ');
putchar('|');
}
putchar('\n');
} else {
resShowMaxReached = 1;
} }
putchar('\n');
numOfRows++; numOfRows++;
row = taos_fetch_row(tres); row = taos_fetch_row(tres);
} while(row != NULL); } while(row != NULL);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册