Merge pull request #5270 from taosdata/feature/TD-2682
[TD-2682]add showed result rows num limitation in taos
This commit is contained in:
commit
1175267874
|
@ -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) {
|
||||||
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 @@
|
||||||
#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;
|
||||||
|
|
|
@ -324,7 +324,8 @@ 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;
|
||||||
|
|
||||||
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);
|
||||||
|
@ -659,6 +660,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 +689,33 @@ static int verticalPrintResult(TAOS_RES* tres) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint64_t resShowMaxNum = UINT64_MAX;
|
||||||
|
|
||||||
|
if (args.commands == NULL && args.file[0] == 0 && isSelectQuery(tres) && !tscIsQueryWithLimit(tres)) {
|
||||||
|
resShowMaxNum = DEFAULT_RES_SHOW_NUM;
|
||||||
|
}
|
||||||
|
|
||||||
int numOfRows = 0;
|
int numOfRows = 0;
|
||||||
do {
|
int showMore = 1;
|
||||||
printf("*************************** %d.row ***************************\n", numOfRows + 1);
|
do {
|
||||||
int32_t* length = taos_fetch_lengths(tres);
|
if (numOfRows < resShowMaxNum) {
|
||||||
for (int i = 0; i < num_fields; i++) {
|
printf("*************************** %d.row ***************************\n", numOfRows + 1);
|
||||||
TAOS_FIELD* field = fields + i;
|
|
||||||
|
|
||||||
int padding = (int)(maxColNameLen - strlen(field->name));
|
int32_t* length = taos_fetch_lengths(tres);
|
||||||
printf("%*.s%s: ", padding, " ", field->name);
|
|
||||||
|
|
||||||
printField((const char*)row[i], field, 0, length[i], precision);
|
for (int i = 0; i < num_fields; i++) {
|
||||||
putchar('\n');
|
TAOS_FIELD* field = fields + i;
|
||||||
|
|
||||||
|
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');
|
||||||
|
}
|
||||||
|
} 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++;
|
numOfRows++;
|
||||||
|
@ -795,16 +822,31 @@ static int horizontalPrintResult(TAOS_RES* tres) {
|
||||||
|
|
||||||
printHeader(fields, width, num_fields);
|
printHeader(fields, width, num_fields);
|
||||||
|
|
||||||
|
uint64_t resShowMaxNum = UINT64_MAX;
|
||||||
|
|
||||||
|
if (args.commands == NULL && args.file[0] == 0 && isSelectQuery(tres) && !tscIsQueryWithLimit(tres)) {
|
||||||
|
resShowMaxNum = DEFAULT_RES_SHOW_NUM;
|
||||||
|
}
|
||||||
|
|
||||||
int numOfRows = 0;
|
int numOfRows = 0;
|
||||||
|
int showMore = 1;
|
||||||
|
|
||||||
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 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;
|
||||||
}
|
}
|
||||||
putchar('\n');
|
|
||||||
numOfRows++;
|
numOfRows++;
|
||||||
row = taos_fetch_row(tres);
|
row = taos_fetch_row(tres);
|
||||||
} while(row != NULL);
|
} while(row != NULL);
|
||||||
|
|
Loading…
Reference in New Issue