From 83c1db07a36d03cef8a53481d4c528cbd82fc6c7 Mon Sep 17 00:00:00 2001 From: shenglian zhou Date: Tue, 21 Nov 2023 13:53:10 +0800 Subject: [PATCH 1/6] enhance: tbname col to func --- source/libs/parser/inc/parTranslater.h | 2 ++ source/libs/parser/src/parTranslater.c | 25 ++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/source/libs/parser/inc/parTranslater.h b/source/libs/parser/inc/parTranslater.h index e06626fb00..bec4e07e1c 100644 --- a/source/libs/parser/inc/parTranslater.h +++ b/source/libs/parser/inc/parTranslater.h @@ -46,6 +46,8 @@ typedef struct STranslateContext { SNode* pPostRoot; } STranslateContext; +EDealRes biRewriteToTbnameFuncAndTranslate(STranslateContext* pCxt, SColumnNode** ppCol); +EDealRes translateFunction(STranslateContext* pCxt, SFunctionNode** pFunc); int32_t biRewriteSelectStar(STranslateContext* pCxt, SSelectStmt* pSelect); int32_t findTable(STranslateContext* pCxt, const char* pTableAlias, STableNode** pOutput); int32_t getTargetMetaImpl(SParseContext* pParCxt, SParseMetaCache* pMetaCache, const SName* pName, STableMeta** pMeta, bool couldBeView); diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index 1a65a29259..61ac39ffd4 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -1091,6 +1091,22 @@ static EDealRes translateColumnUseAlias(STranslateContext* pCxt, SColumnNode** p return DEAL_RES_CONTINUE; } +#ifndef TD_ENTERPRISE +EDealRes biRewriteToTbnameFuncAndTranslate(STranslateContext* pCxt, SColumnNode** ppCol) { + SFunctionNode* tbnameFuncNode = NULL; + // tbnameFuncNode = biMakeTbnameProjectAstNode(NULL, ((*ppCol)->tableAlias[0]!='\0') ? (*ppCol)->tableAlias : NULL); + tbnameFuncNode->node.resType = (*ppCol)->node.resType; + strcpy(tbnameFuncNode->node.aliasName, (*ppCol)->node.aliasName); + strcpy(tbnameFuncNode->node.userAlias, (*ppCol)->node.userAlias); + + nodesDestroyNode(*(SNode**)ppCol); + *(SNode**)ppCol = (SNode*)tbnameFuncNode; + + EDealRes res = translateFunction(pCxt, &tbnameFuncNode); + return res; +} +#endif + static EDealRes translateColumn(STranslateContext* pCxt, SColumnNode** pCol) { if (NULL == pCxt->pCurrStmt || (isSelectStmt(pCxt->pCurrStmt) && NULL == ((SSelectStmt*)pCxt->pCurrStmt)->pFromTable)) { @@ -1102,6 +1118,13 @@ static EDealRes translateColumn(STranslateContext* pCxt, SColumnNode** pCol) { return DEAL_RES_CONTINUE; } + if (pCxt->pParseCxt->biMode && (strcasecmp((*pCol)->colName, "tbname") == 0) && + ((SSelectStmt*)pCxt->pCurrStmt)->pFromTable && + QUERY_NODE_REAL_TABLE == nodeType(((SSelectStmt*)pCxt->pCurrStmt)->pFromTable)) { + EDealRes res = biRewriteToTbnameFuncAndTranslate(pCxt, pCol); + return res; + } + EDealRes res = DEAL_RES_CONTINUE; if ('\0' != (*pCol)->tableAlias[0]) { res = translateColumnWithPrefix(pCxt, pCol); @@ -2204,7 +2227,7 @@ static int32_t translateFunctionImpl(STranslateContext* pCxt, SFunctionNode** pF return translateNormalFunction(pCxt, (SNode**)pFunc); } -static EDealRes translateFunction(STranslateContext* pCxt, SFunctionNode** pFunc) { +EDealRes translateFunction(STranslateContext* pCxt, SFunctionNode** pFunc) { SNode* pParam = NULL; FOREACH(pParam, (*pFunc)->pParameterList) { if (isMultiResFunc(pParam)) { From ebbbb3825d3004d81398cb43ab518123eaec4e0f Mon Sep 17 00:00:00 2001 From: slzhou Date: Tue, 21 Nov 2023 14:33:00 +0800 Subject: [PATCH 2/6] enhance: bi mode tbname col to tbname func --- source/libs/parser/src/parTranslater.c | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index 61ac39ffd4..b868d39cfd 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -1093,17 +1093,7 @@ static EDealRes translateColumnUseAlias(STranslateContext* pCxt, SColumnNode** p #ifndef TD_ENTERPRISE EDealRes biRewriteToTbnameFuncAndTranslate(STranslateContext* pCxt, SColumnNode** ppCol) { - SFunctionNode* tbnameFuncNode = NULL; - // tbnameFuncNode = biMakeTbnameProjectAstNode(NULL, ((*ppCol)->tableAlias[0]!='\0') ? (*ppCol)->tableAlias : NULL); - tbnameFuncNode->node.resType = (*ppCol)->node.resType; - strcpy(tbnameFuncNode->node.aliasName, (*ppCol)->node.aliasName); - strcpy(tbnameFuncNode->node.userAlias, (*ppCol)->node.userAlias); - - nodesDestroyNode(*(SNode**)ppCol); - *(SNode**)ppCol = (SNode*)tbnameFuncNode; - - EDealRes res = translateFunction(pCxt, &tbnameFuncNode); - return res; + return DEAL_RES_CONTINUE; } #endif @@ -1118,11 +1108,13 @@ static EDealRes translateColumn(STranslateContext* pCxt, SColumnNode** pCol) { return DEAL_RES_CONTINUE; } - if (pCxt->pParseCxt->biMode && (strcasecmp((*pCol)->colName, "tbname") == 0) && + if (pCxt->pParseCxt->biMode) { + if ((strcasecmp((*pCol)->colName, "tbname") == 0) && ((SSelectStmt*)pCxt->pCurrStmt)->pFromTable && QUERY_NODE_REAL_TABLE == nodeType(((SSelectStmt*)pCxt->pCurrStmt)->pFromTable)) { - EDealRes res = biRewriteToTbnameFuncAndTranslate(pCxt, pCol); - return res; + EDealRes res = biRewriteToTbnameFuncAndTranslate(pCxt, pCol); + return res; + } } EDealRes res = DEAL_RES_CONTINUE; From 1fc16355def4c0557addd32176d581c13817c38b Mon Sep 17 00:00:00 2001 From: slzhou Date: Tue, 21 Nov 2023 14:34:09 +0800 Subject: [PATCH 3/6] enhance: bi mode tbname col to tbname func --- tests/script/tsim/query/bi_tbname_col.sim | 34 +++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 tests/script/tsim/query/bi_tbname_col.sim diff --git a/tests/script/tsim/query/bi_tbname_col.sim b/tests/script/tsim/query/bi_tbname_col.sim new file mode 100644 index 0000000000..7cf897280b --- /dev/null +++ b/tests/script/tsim/query/bi_tbname_col.sim @@ -0,0 +1,34 @@ + +system sh/stop_dnodes.sh +system sh/deploy.sh -n dnode1 -i 1 +system sh/exec.sh -n dnode1 -s start +sql connect + +sql drop database if exists db1; +sql create database db1 vgroups 3; +sql create database db1; +sql use db1; +sql create stable sta (ts timestamp, f1 int, f2 binary(200)) tags(t1 int, t2 int, t3 int); +sql create stable stb (ts timestamp, f1 int, f2 binary(200)) tags(t1 int, t2 int, t3 int); +sql create table tba1 using sta tags(1, 1, 1); +sql create table tba2 using sta tags(2, 2, 2); +sql insert into tba1 values(now, 1, "1")(now+3s, 3, "3")(now+5s, 5, "5"); +sql insert into tba2 values(now + 1s, 2, "2")(now+2s, 2, "2")(now+4s, 4, "4"); +sql create table tbn1 (ts timestamp, f1 int); + +set_bi_mode 1 + +sql select `tbname`, f1, f2 from sta order by ts +print $rows +print $data00 $data01 $data02 $data10 $data11 $data12 +if $rows != 6 then + return -1 +endi +if $data00 != @tba1@ then + return -1 +endi +if $data10 != @tba2@ then + return -1 +endi + +system sh/exec.sh -n dnode1 -s stop -x SIGINT From 40a28a6e4bb57bdebe3a6b8228fbdbf944d2a668 Mon Sep 17 00:00:00 2001 From: slzhou Date: Wed, 22 Nov 2023 08:47:35 +0800 Subject: [PATCH 4/6] fix: refactor dependency between community and enterprise --- source/libs/parser/inc/parTranslater.h | 3 +-- source/libs/parser/src/parTranslater.c | 15 +++++++-------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/source/libs/parser/inc/parTranslater.h b/source/libs/parser/inc/parTranslater.h index bec4e07e1c..0fe99e04ab 100644 --- a/source/libs/parser/inc/parTranslater.h +++ b/source/libs/parser/inc/parTranslater.h @@ -46,8 +46,7 @@ typedef struct STranslateContext { SNode* pPostRoot; } STranslateContext; -EDealRes biRewriteToTbnameFuncAndTranslate(STranslateContext* pCxt, SColumnNode** ppCol); -EDealRes translateFunction(STranslateContext* pCxt, SFunctionNode** pFunc); +bool biRewriteToTbnameFunc(STranslateContext* pCxt, SNode** ppNode); int32_t biRewriteSelectStar(STranslateContext* pCxt, SSelectStmt* pSelect); int32_t findTable(STranslateContext* pCxt, const char* pTableAlias, STableNode** pOutput); int32_t getTargetMetaImpl(SParseContext* pParCxt, SParseMetaCache* pMetaCache, const SName* pName, STableMeta** pMeta, bool couldBeView); diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index b868d39cfd..729a0d8855 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -263,6 +263,7 @@ static const SSysTableShowAdapter sysTableShowAdapter[] = { static int32_t translateSubquery(STranslateContext* pCxt, SNode* pNode); static int32_t translateQuery(STranslateContext* pCxt, SNode* pNode); static EDealRes translateValue(STranslateContext* pCxt, SValueNode* pVal); +static EDealRes translateFunction(STranslateContext* pCxt, SFunctionNode** pFunc); static int32_t createSimpleSelectStmtFromProjList(const char* pDb, const char* pTable, SNodeList* pProjectionList, SSelectStmt** pStmt); static int32_t createLastTsSelectStmt(char* pDb, char* pTable, STableMeta* pMeta, SNode** pQuery); @@ -1092,8 +1093,8 @@ static EDealRes translateColumnUseAlias(STranslateContext* pCxt, SColumnNode** p } #ifndef TD_ENTERPRISE -EDealRes biRewriteToTbnameFuncAndTranslate(STranslateContext* pCxt, SColumnNode** ppCol) { - return DEAL_RES_CONTINUE; +bool biRewriteToTbnameFunc(STranslateContext* pCxt, SNode** ppNode) { + return false; } #endif @@ -1109,11 +1110,9 @@ static EDealRes translateColumn(STranslateContext* pCxt, SColumnNode** pCol) { } if (pCxt->pParseCxt->biMode) { - if ((strcasecmp((*pCol)->colName, "tbname") == 0) && - ((SSelectStmt*)pCxt->pCurrStmt)->pFromTable && - QUERY_NODE_REAL_TABLE == nodeType(((SSelectStmt*)pCxt->pCurrStmt)->pFromTable)) { - EDealRes res = biRewriteToTbnameFuncAndTranslate(pCxt, pCol); - return res; + SNode** ppNode = (SNode**)pCol; + if (biRewriteToTbnameFunc(pCxt, ppNode)) { + translateFunction(pCxt, (SFunctionNode**)ppNode); } } @@ -2219,7 +2218,7 @@ static int32_t translateFunctionImpl(STranslateContext* pCxt, SFunctionNode** pF return translateNormalFunction(pCxt, (SNode**)pFunc); } -EDealRes translateFunction(STranslateContext* pCxt, SFunctionNode** pFunc) { +static EDealRes translateFunction(STranslateContext* pCxt, SFunctionNode** pFunc) { SNode* pParam = NULL; FOREACH(pParam, (*pFunc)->pParameterList) { if (isMultiResFunc(pParam)) { From 668e9e0a8b3ede75604d978a3f2ba1839621c712 Mon Sep 17 00:00:00 2001 From: slzhou Date: Wed, 22 Nov 2023 08:59:29 +0800 Subject: [PATCH 5/6] fix: add test cases --- source/libs/parser/src/parTranslater.c | 2 +- tests/parallel_test/cases.task | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index 729a0d8855..4996063578 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -1112,7 +1112,7 @@ static EDealRes translateColumn(STranslateContext* pCxt, SColumnNode** pCol) { if (pCxt->pParseCxt->biMode) { SNode** ppNode = (SNode**)pCol; if (biRewriteToTbnameFunc(pCxt, ppNode)) { - translateFunction(pCxt, (SFunctionNode**)ppNode); + return translateFunction(pCxt, (SFunctionNode**)ppNode); } } diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task index 92eaec52b5..fc7281d6e8 100644 --- a/tests/parallel_test/cases.task +++ b/tests/parallel_test/cases.task @@ -1065,6 +1065,7 @@ e ,,y,script,./test.sh -f tsim/query/show_db_table_kind.sim ,,y,script,./test.sh -f tsim/query/bi_star_table.sim ,,y,script,./test.sh -f tsim/query/bi_tag_scan.sim +,,y,script,./test.sh -f tsim/query/bi_tbname_col.sim ,,y,script,./test.sh -f tsim/query/tag_scan.sim ,,y,script,./test.sh -f tsim/query/nullColSma.sim ,,y,script,./test.sh -f tsim/query/bug3398.sim From 3de91de7f958751cd0bb7ce54d5974d510669cec Mon Sep 17 00:00:00 2001 From: slzhou Date: Thu, 23 Nov 2023 11:18:05 +0800 Subject: [PATCH 6/6] fix: bi mode create tbname col error --- source/libs/parser/inc/parTranslater.h | 2 ++ source/libs/parser/src/parTranslater.c | 10 +++++++++- tests/script/tsim/query/bi_tbname_col.sim | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/source/libs/parser/inc/parTranslater.h b/source/libs/parser/inc/parTranslater.h index 0fe99e04ab..55ea71a368 100644 --- a/source/libs/parser/inc/parTranslater.h +++ b/source/libs/parser/inc/parTranslater.h @@ -23,6 +23,7 @@ extern "C" { #include "parToken.h" #include "parUtil.h" #include "parser.h" +#include "cmdnodes.h" typedef struct STranslateContext { SParseContext* pParseCxt; @@ -48,6 +49,7 @@ typedef struct STranslateContext { bool biRewriteToTbnameFunc(STranslateContext* pCxt, SNode** ppNode); int32_t biRewriteSelectStar(STranslateContext* pCxt, SSelectStmt* pSelect); +int32_t biCheckCreateTableTbnameCol(STranslateContext* pCxt, SCreateTableStmt* pStmt); int32_t findTable(STranslateContext* pCxt, const char* pTableAlias, STableNode** pOutput); int32_t getTargetMetaImpl(SParseContext* pParCxt, SParseMetaCache* pMetaCache, const SName* pName, STableMeta** pMeta, bool couldBeView); diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index 496e3423e6..74a462dfda 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -5726,6 +5726,12 @@ static int32_t checkTableDeleteMarkOption(STranslateContext* pCxt, STableOptions return code; } +#ifndef TD_ENTERPRISE +int32_t biCheckCreateTableTbnameCol(STranslateContext* pCxt, SCreateTableStmt* pStmt) { + return TSDB_CODE_SUCCESS; +} +#endif + static int32_t checkCreateTable(STranslateContext* pCxt, SCreateTableStmt* pStmt, bool createStable) { if (NULL != strchr(pStmt->tableName, '.')) { return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_IDENTIFIER_NAME, @@ -5764,7 +5770,9 @@ static int32_t checkCreateTable(STranslateContext* pCxt, SCreateTableStmt* pStmt "configured with the 'TTL' option"); } } - + if (pCxt->pParseCxt->biMode != 0 && TSDB_CODE_SUCCESS == code) { + code = biCheckCreateTableTbnameCol(pCxt, pStmt); + } return code; } diff --git a/tests/script/tsim/query/bi_tbname_col.sim b/tests/script/tsim/query/bi_tbname_col.sim index 7cf897280b..d351a92539 100644 --- a/tests/script/tsim/query/bi_tbname_col.sim +++ b/tests/script/tsim/query/bi_tbname_col.sim @@ -31,4 +31,6 @@ if $data10 != @tba2@ then return -1 endi +sql_error create table stc(ts timestamp, `tbname` binary(200)); +sql_error create table std(ts timestamp, f1 int) tags(`tbname` binary(200)); system sh/exec.sh -n dnode1 -s stop -x SIGINT