diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 114805bbce94ff4e6c01f71473e9b38c89b7a068..8811913cd24c18f0cab8d4c2c93ab8abd61c9a2c 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -5438,21 +5438,6 @@ int32_t getQueryCondExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, tSqlExpr** pExpr goto err_ret; } - //for now(),today() function used in where clause. - if (pRight->tokenId == TK_ID && (strncmp(pRight->exprToken.z, "now()", pRight->exprToken.n) == 0 || - strncmp(pRight->exprToken.z, "today()", pRight->exprToken.n) == 0)) { - pRight->type = SQL_NODE_VALUE; - pRight->tokenId = TK_TIMESTAMP; - pRight->exprToken.type = TSDB_DATA_TYPE_TIMESTAMP; - if (strncmp(pRight->exprToken.z, "now()", pRight->exprToken.n) == 0) { - tVariantCreateExt(&pRight->value, &pRight->exprToken, TK_NOW, false); - } else { - tVariantCreateExt(&pRight->value, &pRight->exprToken, TK_TODAY, false); - } - pRight->value.nType = TSDB_DATA_TYPE_BIGINT; - pRight->flags |= 1 << EXPR_FLAG_NS_TIMESTAMP; - } - ret = handleExprInQueryCond(pCmd, pQueryInfo, pExpr, pCondExpr, type, tbIdx, parentOptr, columnExpr, tsExpr, joinQuery); if (ret) { goto err_ret; diff --git a/src/query/src/qSqlParser.c b/src/query/src/qSqlParser.c index a1d1ec3cae22c67b03e0bc2efd9c8b14dce7581a..5fb78f22c770d0ec646ffac7a56ac2662517a96a 100644 --- a/src/query/src/qSqlParser.c +++ b/src/query/src/qSqlParser.c @@ -33,6 +33,7 @@ SSqlInfo qSqlParse(const char *pStr) { sqlInfo.funcs = taosArrayInit(4, sizeof(SStrToken)); int32_t i = 0; + bool inWhere = false; while (1) { SStrToken t0 = {0}; @@ -68,11 +69,23 @@ SSqlInfo qSqlParse(const char *pStr) { sqlInfo.valid = false; goto abort_parse; } + case TK_WHERE:{ + inWhere = true; + Parse(pParser, t0.type, t0, &sqlInfo); + if (sqlInfo.valid == false) { + goto abort_parse; + } + break; + } case TK_NOW: case TK_TODAY: { - //for now(),today() function used in select clause + //for now(),today() function used in select/where clause if (pStr[i] == '(' && pStr[i + 1] == ')') { - t0.type = TK_ID; + if (!inWhere) { + t0.type = TK_ID; + } else { + i += 2; + } } } default: