From 771c263665e0acdac9c169adfb49f2f77be3d922 Mon Sep 17 00:00:00 2001 From: Ganlin Zhao Date: Tue, 3 Aug 2021 10:20:42 +0800 Subject: [PATCH 01/13] [TD-5729]: add subquery states and obj_ids to show queries output --- src/client/inc/tsclient.h | 2 +- src/client/src/tscProfile.c | 10 +++--- src/client/src/tscUtil.c | 2 +- src/inc/taosdef.h | 1 + src/inc/taosmsg.h | 3 ++ src/mnode/src/mnodeProfile.c | 62 ++++++++++++++++++++++++++++++++---- 6 files changed, 67 insertions(+), 13 deletions(-) diff --git a/src/client/inc/tsclient.h b/src/client/inc/tsclient.h index 83ec28898c..780111f3ce 100644 --- a/src/client/inc/tsclient.h +++ b/src/client/inc/tsclient.h @@ -294,7 +294,7 @@ typedef struct SSqlObj { SSqlCmd cmd; SSqlRes res; bool isBind; - + SSubqueryState subState; struct SSqlObj **pSubs; diff --git a/src/client/src/tscProfile.c b/src/client/src/tscProfile.c index 70a3e03d62..25c6d13822 100644 --- a/src/client/src/tscProfile.c +++ b/src/client/src/tscProfile.c @@ -255,10 +255,12 @@ int tscBuildQueryStreamDesc(void *pMsg, STscObj *pObj) { pQdesc->qId = htobe64(pSql->res.qId); pQdesc->sqlObjId = htobe64(pSql->self); pQdesc->pid = pHeartbeat->pid; - if (pSql->cmd.pQueryInfo->stableQuery == true) { - pQdesc->numOfSub = pSql->subState.numOfSub; - } else { - pQdesc->numOfSub = 1; + pQdesc->stableQuery = pSql->cmd.pQueryInfo->stableQuery; + pQdesc->numOfSub = (pSql->subState.numOfSub <= TSDB_MAX_SUBQUERY_NUM) ? pSql->subState.numOfSub : TSDB_MAX_SUBQUERY_NUM; + + for (int i = 0; i < pQdesc->numOfSub; ++i) { + pQdesc->subSqlStates[i] = pSql->subState.states[i]; + pQdesc->subSqlObjIds[i] = htobe64(pSql->pSubs[i]->self); } pQdesc->numOfSub = htonl(pQdesc->numOfSub); diff --git a/src/client/src/tscUtil.c b/src/client/src/tscUtil.c index 0d69fe173f..91c577a21c 100644 --- a/src/client/src/tscUtil.c +++ b/src/client/src/tscUtil.c @@ -2141,7 +2141,7 @@ int tscAllocPayload(SSqlCmd* pCmd, int size) { pCmd->payload = b; pCmd->allocSize = size; } - + memset(pCmd->payload, 0, pCmd->allocSize); } diff --git a/src/inc/taosdef.h b/src/inc/taosdef.h index ca8ad3cc09..de79139061 100644 --- a/src/inc/taosdef.h +++ b/src/inc/taosdef.h @@ -339,6 +339,7 @@ do { \ #define PRIMARYKEY_TIMESTAMP_COL_INDEX 0 #define TSDB_MAX_RPC_THREADS 5 +#define TSDB_MAX_SUBQUERY_NUM 10 #define TSDB_QUERY_TYPE_NON_TYPE 0x00u // none type #define TSDB_QUERY_TYPE_FREE_RESOURCE 0x01u // free qhandle at vnode diff --git a/src/inc/taosmsg.h b/src/inc/taosmsg.h index 06b80eea4f..8958f3d1c6 100644 --- a/src/inc/taosmsg.h +++ b/src/inc/taosmsg.h @@ -877,7 +877,10 @@ typedef struct { uint64_t sqlObjId; int32_t pid; char fqdn[TSDB_FQDN_LEN]; + bool stableQuery; int32_t numOfSub; + int8_t subSqlStates[TSDB_MAX_SUBQUERY_NUM]; + int64_t subSqlObjIds[TSDB_MAX_SUBQUERY_NUM]; } SQueryDesc; typedef struct { diff --git a/src/mnode/src/mnodeProfile.c b/src/mnode/src/mnodeProfile.c index 2c117310b3..0004dd5b17 100644 --- a/src/mnode/src/mnodeProfile.c +++ b/src/mnode/src/mnodeProfile.c @@ -32,7 +32,8 @@ #define CONN_KEEP_TIME (tsShellActivityTimer * 3) #define CONN_CHECK_TIME (tsShellActivityTimer * 2) #define QUERY_ID_SIZE 20 -#define QUERY_OBJ_ID_SIZE 10 +#define QUERY_OBJ_ID_SIZE 18 +#define SUBQUERY_INFO_SIZE 6 #define QUERY_STREAM_SAVE_SIZE 20 static SCacheObj *tsMnodeConnCache = NULL; @@ -380,12 +381,30 @@ static int32_t mnodeGetQueryMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pC pSchema[cols].bytes = htons(pShow->bytes[cols]); cols++; + pShow->bytes[cols] = 1; + pSchema[cols].type = TSDB_DATA_TYPE_BOOL; + strcpy(pSchema[cols].name, "stable_query"); + pSchema[cols].bytes = htons(pShow->bytes[cols]); + cols++; + pShow->bytes[cols] = 4; pSchema[cols].type = TSDB_DATA_TYPE_INT; strcpy(pSchema[cols].name, "sub_queries"); pSchema[cols].bytes = htons(pShow->bytes[cols]); cols++; + pShow->bytes[cols] = SUBQUERY_INFO_SIZE * TSDB_MAX_SUBQUERY_NUM + VARSTR_HEADER_SIZE; + pSchema[cols].type = TSDB_DATA_TYPE_BINARY; + strcpy(pSchema[cols].name, "sub_query_states"); + pSchema[cols].bytes = htons(pShow->bytes[cols]); + cols++; + + pShow->bytes[cols] = (SUBQUERY_INFO_SIZE + QUERY_OBJ_ID_SIZE) * TSDB_MAX_SUBQUERY_NUM + VARSTR_HEADER_SIZE; + pSchema[cols].type = TSDB_DATA_TYPE_BINARY; + strcpy(pSchema[cols].name, "sub_query_obj_ids "); + pSchema[cols].bytes = htons(pShow->bytes[cols]); + cols++; + pShow->bytes[cols] = TSDB_SHOW_SQL_LEN + VARSTR_HEADER_SIZE; pSchema[cols].type = TSDB_DATA_TYPE_BINARY; strcpy(pSchema[cols].name, "sql"); @@ -459,12 +478,8 @@ static int32_t mnodeRetrieveQueries(SShowObj *pShow, char *data, int32_t rows, v pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows; *(int64_t *)pWrite = htobe64(pDesc->useconds); cols++; - /* - pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows; - *(int64_t *)pWrite = htobe64(pDesc->sqlObjId); - cols++; - */ - snprintf(str, tListLen(str), "0x%08" PRIx64, htobe64(pDesc->sqlObjId)); + + snprintf(str, tListLen(str), "0x%" PRIx64, htobe64(pDesc->sqlObjId)); pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows; STR_WITH_MAXSIZE_TO_VARSTR(pWrite, str, pShow->bytes[cols]); cols++; @@ -479,10 +494,43 @@ static int32_t mnodeRetrieveQueries(SShowObj *pShow, char *data, int32_t rows, v STR_WITH_MAXSIZE_TO_VARSTR(pWrite, epBuf, pShow->bytes[cols]); cols++; + pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows; + *(bool *)pWrite = pDesc->stableQuery; + cols++; + pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows; *(int32_t *)pWrite = htonl(pDesc->numOfSub); cols++; + char subQInfo[(SUBQUERY_INFO_SIZE + QUERY_OBJ_ID_SIZE) * TSDB_MAX_SUBQUERY_NUM] = {0}; + char *p; + int32_t idx, len; + + p = subQInfo; + for (idx = 0; idx < htonl(pDesc->numOfSub); ++idx) { + len = snprintf(p, SUBQUERY_INFO_SIZE, "[%d]%d ", idx, pDesc->subSqlStates[idx]); + p += MIN(len, SUBQUERY_INFO_SIZE); + } + if (idx == 0) { + snprintf(p, sizeof(subQInfo), "N/A"); + } + pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows; + STR_WITH_MAXSIZE_TO_VARSTR(pWrite, subQInfo, pShow->bytes[cols]); + cols++; + + p = subQInfo; + for (idx = 0; idx < htonl(pDesc->numOfSub); ++idx) { + len = snprintf(p, SUBQUERY_INFO_SIZE + QUERY_OBJ_ID_SIZE, "[%d]0x%" PRIx64 " ", + idx, htobe64(pDesc->subSqlObjIds[idx])); + p += MIN(len, SUBQUERY_INFO_SIZE + QUERY_OBJ_ID_SIZE); + } + if (idx == 0) { + snprintf(p, sizeof(subQInfo), "N/A"); + } + pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows; + STR_WITH_MAXSIZE_TO_VARSTR(pWrite, subQInfo, pShow->bytes[cols]); + cols++; + pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows; STR_WITH_MAXSIZE_TO_VARSTR(pWrite, pDesc->sql, pShow->bytes[cols]); cols++; From 4c53af4f8d3a0a61dcac993183c56f60400a4a32 Mon Sep 17 00:00:00 2001 From: Ganlin Zhao Date: Wed, 4 Aug 2021 17:43:11 +0800 Subject: [PATCH 02/13] [TD-5729]: display subquery states and objIDs as one column sub_query_info --- src/client/src/tscProfile.c | 21 ++++++++++++++++---- src/inc/taosdef.h | 2 +- src/inc/taosmsg.h | 3 +-- src/mnode/src/mnodeProfile.c | 37 +++--------------------------------- 4 files changed, 22 insertions(+), 41 deletions(-) diff --git a/src/client/src/tscProfile.c b/src/client/src/tscProfile.c index 25c6d13822..92ad9b7924 100644 --- a/src/client/src/tscProfile.c +++ b/src/client/src/tscProfile.c @@ -256,11 +256,24 @@ int tscBuildQueryStreamDesc(void *pMsg, STscObj *pObj) { pQdesc->sqlObjId = htobe64(pSql->self); pQdesc->pid = pHeartbeat->pid; pQdesc->stableQuery = pSql->cmd.pQueryInfo->stableQuery; - pQdesc->numOfSub = (pSql->subState.numOfSub <= TSDB_MAX_SUBQUERY_NUM) ? pSql->subState.numOfSub : TSDB_MAX_SUBQUERY_NUM; + pQdesc->numOfSub = pSql->subState.numOfSub; - for (int i = 0; i < pQdesc->numOfSub; ++i) { - pQdesc->subSqlStates[i] = pSql->subState.states[i]; - pQdesc->subSqlObjIds[i] = htobe64(pSql->pSubs[i]->self); + char *p = pQdesc->subSqlInfo; + int32_t remainLen = sizeof(pQdesc->subSqlInfo); + if (pQdesc->numOfSub == 0) { + snprintf(p, remainLen, "N/A"); + } else { + int32_t len; + for (int32_t i = 0; i < pQdesc->numOfSub; ++i) { + len = snprintf(p, remainLen, "[%d]0x%" PRIx64 "(%c) ", i, + pSql->pSubs[i]->self, + pSql->subState.states[i] ? 'C' : 'I'); + if (len > remainLen) { + break; + } + remainLen -= len; + p += len; + } } pQdesc->numOfSub = htonl(pQdesc->numOfSub); diff --git a/src/inc/taosdef.h b/src/inc/taosdef.h index de79139061..1f396da514 100644 --- a/src/inc/taosdef.h +++ b/src/inc/taosdef.h @@ -223,6 +223,7 @@ do { \ #define TSDB_IPv4ADDR_LEN 16 #define TSDB_FILENAME_LEN 128 #define TSDB_SHOW_SQL_LEN 512 +#define TSDB_SHOW_SUBQUERY_LEN 1000 #define TSDB_SLOW_QUERY_SQL_LEN 512 #define TSDB_STEP_NAME_LEN 32 @@ -339,7 +340,6 @@ do { \ #define PRIMARYKEY_TIMESTAMP_COL_INDEX 0 #define TSDB_MAX_RPC_THREADS 5 -#define TSDB_MAX_SUBQUERY_NUM 10 #define TSDB_QUERY_TYPE_NON_TYPE 0x00u // none type #define TSDB_QUERY_TYPE_FREE_RESOURCE 0x01u // free qhandle at vnode diff --git a/src/inc/taosmsg.h b/src/inc/taosmsg.h index 8958f3d1c6..1f3978c38c 100644 --- a/src/inc/taosmsg.h +++ b/src/inc/taosmsg.h @@ -879,8 +879,7 @@ typedef struct { char fqdn[TSDB_FQDN_LEN]; bool stableQuery; int32_t numOfSub; - int8_t subSqlStates[TSDB_MAX_SUBQUERY_NUM]; - int64_t subSqlObjIds[TSDB_MAX_SUBQUERY_NUM]; + char subSqlInfo[TSDB_SHOW_SUBQUERY_LEN]; //include subqueries' index, Obj IDs and states(C-complete/I-imcomplete) } SQueryDesc; typedef struct { diff --git a/src/mnode/src/mnodeProfile.c b/src/mnode/src/mnodeProfile.c index 0004dd5b17..15438fc234 100644 --- a/src/mnode/src/mnodeProfile.c +++ b/src/mnode/src/mnodeProfile.c @@ -393,15 +393,9 @@ static int32_t mnodeGetQueryMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pC pSchema[cols].bytes = htons(pShow->bytes[cols]); cols++; - pShow->bytes[cols] = SUBQUERY_INFO_SIZE * TSDB_MAX_SUBQUERY_NUM + VARSTR_HEADER_SIZE; + pShow->bytes[cols] = TSDB_SHOW_SUBQUERY_LEN + VARSTR_HEADER_SIZE; pSchema[cols].type = TSDB_DATA_TYPE_BINARY; - strcpy(pSchema[cols].name, "sub_query_states"); - pSchema[cols].bytes = htons(pShow->bytes[cols]); - cols++; - - pShow->bytes[cols] = (SUBQUERY_INFO_SIZE + QUERY_OBJ_ID_SIZE) * TSDB_MAX_SUBQUERY_NUM + VARSTR_HEADER_SIZE; - pSchema[cols].type = TSDB_DATA_TYPE_BINARY; - strcpy(pSchema[cols].name, "sub_query_obj_ids "); + strcpy(pSchema[cols].name, "sub_query_info"); pSchema[cols].bytes = htons(pShow->bytes[cols]); cols++; @@ -502,33 +496,8 @@ static int32_t mnodeRetrieveQueries(SShowObj *pShow, char *data, int32_t rows, v *(int32_t *)pWrite = htonl(pDesc->numOfSub); cols++; - char subQInfo[(SUBQUERY_INFO_SIZE + QUERY_OBJ_ID_SIZE) * TSDB_MAX_SUBQUERY_NUM] = {0}; - char *p; - int32_t idx, len; - - p = subQInfo; - for (idx = 0; idx < htonl(pDesc->numOfSub); ++idx) { - len = snprintf(p, SUBQUERY_INFO_SIZE, "[%d]%d ", idx, pDesc->subSqlStates[idx]); - p += MIN(len, SUBQUERY_INFO_SIZE); - } - if (idx == 0) { - snprintf(p, sizeof(subQInfo), "N/A"); - } pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows; - STR_WITH_MAXSIZE_TO_VARSTR(pWrite, subQInfo, pShow->bytes[cols]); - cols++; - - p = subQInfo; - for (idx = 0; idx < htonl(pDesc->numOfSub); ++idx) { - len = snprintf(p, SUBQUERY_INFO_SIZE + QUERY_OBJ_ID_SIZE, "[%d]0x%" PRIx64 " ", - idx, htobe64(pDesc->subSqlObjIds[idx])); - p += MIN(len, SUBQUERY_INFO_SIZE + QUERY_OBJ_ID_SIZE); - } - if (idx == 0) { - snprintf(p, sizeof(subQInfo), "N/A"); - } - pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows; - STR_WITH_MAXSIZE_TO_VARSTR(pWrite, subQInfo, pShow->bytes[cols]); + STR_WITH_MAXSIZE_TO_VARSTR(pWrite, pDesc->subSqlInfo, pShow->bytes[cols]); cols++; pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows; From 8b37c4bba9a0f5b298cd410cda69054571a0ef3f Mon Sep 17 00:00:00 2001 From: Cary Xu Date: Wed, 4 Aug 2021 17:49:19 +0800 Subject: [PATCH 03/13] [TD-5765]:check max length when alter tag value --- src/client/src/tscSQLParser.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 7adc0812ae..5539c627a8 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -5884,6 +5884,11 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) { tVariantListItem* pItem = taosArrayGet(pVarList, 1); SSchema* pTagsSchema = tscGetTableColumnSchema(pTableMetaInfo->pTableMeta, columnIndex.columnIndex); + + if (pItem->pVar.nLen > pTagsSchema->bytes * TSDB_NCHAR_SIZE) { + return invalidOperationMsg(pMsg, msg14); + } + pAlterSQL->tagData.data = calloc(1, pTagsSchema->bytes * TSDB_NCHAR_SIZE + VARSTR_HEADER_SIZE); if (tVariantDump(&pItem->pVar, pAlterSQL->tagData.data, pTagsSchema->type, true) != TSDB_CODE_SUCCESS) { From a57ec6cb53cd328a9f86d2a1b67eb120a96e1a72 Mon Sep 17 00:00:00 2001 From: wenzhouwww Date: Wed, 4 Aug 2021 18:44:33 +0800 Subject: [PATCH 04/13] [TD-5621] this is test case about modify tags ! --- tests/pytest/tag_lite/TestModifyTag.py | 125 +++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 tests/pytest/tag_lite/TestModifyTag.py diff --git a/tests/pytest/tag_lite/TestModifyTag.py b/tests/pytest/tag_lite/TestModifyTag.py new file mode 100644 index 0000000000..6355940214 --- /dev/null +++ b/tests/pytest/tag_lite/TestModifyTag.py @@ -0,0 +1,125 @@ +################################################################### +# Copyright (c) 2016 by TAOS Technologies, Inc. +# All rights reserved. +# +# This file is proprietary and confidential to TAOS Technologies. +# No part of this file may be reproduced, stored, transmitted, +# disclosed or used in any form or by any means other than as +# expressly provided by the written permission from Jianhui Tao +# +################################################################### + +# -*- coding: utf-8 -*- + +import sys +import os +from util.log import * +from util.cases import * +from util.sql import * +from util.dnodes import * + + +class TDTestCase: + def init(self, conn, logSql): + tdLog.debug("start to execute %s" % __file__) + tdSql.init(conn.cursor(), logSql) + + self.ts = 1625068800000000000 # this is timestamp "2021-07-01 00:00:00" + self.numberOfTables = 10 + self.numberOfRecords = 100 + + def checkCommunity(self): + selfPath = os.path.dirname(os.path.realpath(__file__)) + if ("community" in selfPath): + return False + else: + return True + + def getBuildPath(self): + selfPath = os.path.dirname(os.path.realpath(__file__)) + + if ("community" in selfPath): + projPath = selfPath[:selfPath.find("community")] + else: + projPath = selfPath[:selfPath.find("tests")] + + for root, dirs, files in os.walk(projPath): + if ("taosdump" in files): + rootRealPath = os.path.dirname(os.path.realpath(root)) + if ("packaging" not in rootRealPath): + buildPath = root[:len(root) - len("/build/bin")] + break + return buildPath + + + + def run(self): + + buildPath = self.getBuildPath() + if (buildPath == ""): + tdLog.exit("taosdump not found!") + else: + tdLog.info("taosdump found in %s" % buildPath) + binPath = buildPath + "/build/bin/" + + # basic test for alter tags + tdSql.execute("create database tagdb ") + tdSql.execute(" use tagdb") + tdSql.execute("create table st (ts timestamp , a int) tags (tg1 binary(20), tg2 binary(20), tg3 binary(20))") + tdSql.execute("insert into t using st (tg3, tg2, tg1) tags ('tg3', 'tg2', 'tg1') values (now, 1)") + tdSql.execute("alter table t set tag tg1='newtg1'") + res = tdSql.getResult("select tg1,tg2,tg3 from t") + + if res == [('newtg1', 'tg2', 'tg3')]: + tdLog.info(" alter tag check has pass!") + else: + tdLog.info(" alter tag failed , please check !") + + tdSql.error("alter stable st modify tag tg2 binary(2)") + tdSql.execute("alter stable st modify tag tg2 binary(30) ") + tdSql.execute("alter table t set tag tg2 = 'abcdefghijklmnopqrstuvwxyz1234'") + res = tdSql.getResult("select tg1,tg2,tg3 from t") + if res == [('newtg1', 'abcdefghijklmnopqrstuvwxyz1234', 'tg3')]: + tdLog.info(" alter tag check has pass!") + else: + tdLog.info(" alter tag failed , please check !") + + # test boundary about tags + tdSql.execute("create stable stb1 (ts timestamp , a int) tags (tg1 binary(16374))") + tdSql.error("create stable stb1 (ts timestamp , a int) tags (tg1 binary(16375))") + bound_sql = "create stable stb2 (ts timestamp , a int) tags (tg1 binary(10)," + for i in range(127): + bound_sql+="tag"+str(i)+" binary(10)," + sql1 = bound_sql[:-1]+")" + tdSql.execute(sql1) + sql2 = bound_sql[:-1]+"tag127 binary(10))" + tdSql.error(sql2) + tdSql.execute("create stable stb3 (ts timestamp , a int) tags (tg1 nchar(4093))") + tdSql.error("create stable stb3 (ts timestamp , a int) tags (tg1 nchar(4094))") + tdSql.execute("create stable stb4 (ts timestamp , a int) tags (tg1 nchar(4093),tag2 binary(8))") + tdSql.error("create stable stb4 (ts timestamp , a int) tags (tg1 nchar(4093),tag2 binary(9))") + tdSql.execute("create stable stb5 (ts timestamp , a int) tags (tg1 nchar(4093),tag2 binary(4),tag3 binary(2))") + tdSql.error("create stable stb5 (ts timestamp , a int) tags (tg1 nchar(4093),tag2 binary(4),tag3 binary(3))") + + tdSql.execute("create table stt (ts timestamp , a binary(100)) tags (tg1 binary(20), tg2 binary(20), tg3 binary(20))") + tdSql.execute("insert into tt using stt (tg3, tg2, tg1) tags ('tg3', 'tg2', 'tg1') values (now, 1)") + tags = "t"*16337 + sql3 = "alter table tt set tag tg1=" +"'"+tags+"'" + tdSql.error(sql3) + tdSql.execute("alter stable stt modify tag tg1 binary(16337)") + tdSql.execute(sql3) + res = tdSql.getResult(sql3) + if res == [(tags, 'tg2', 'tg3')]: + tdLog.info(" alter tag check has pass!") + else: + tdLog.info(" alter tag failed , please check !") + + os.system("rm -rf ./tag_lite/TestModifyTag.py.sql") + + def stop(self): + tdSql.close() + tdLog.success("%s successfully executed" % __file__) + + +tdCases.addWindows(__file__, TDTestCase()) +tdCases.addLinux(__file__, TDTestCase()) From b5aa25b982f2bdba19e4630786e0d6026ad6ccc7 Mon Sep 17 00:00:00 2001 From: wenzhouwww Date: Wed, 4 Aug 2021 19:02:25 +0800 Subject: [PATCH 05/13] [TD-5621] this is test case about modify tags ! --- tests/pytest/tag_lite/TestModifyTag.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/pytest/tag_lite/TestModifyTag.py b/tests/pytest/tag_lite/TestModifyTag.py index 6355940214..acf63695f6 100644 --- a/tests/pytest/tag_lite/TestModifyTag.py +++ b/tests/pytest/tag_lite/TestModifyTag.py @@ -108,7 +108,7 @@ class TDTestCase: tdSql.error(sql3) tdSql.execute("alter stable stt modify tag tg1 binary(16337)") tdSql.execute(sql3) - res = tdSql.getResult(sql3) + res = tdSql.getResult("select tg1,tg2,tg3 from tt") if res == [(tags, 'tg2', 'tg3')]: tdLog.info(" alter tag check has pass!") else: @@ -122,4 +122,4 @@ class TDTestCase: tdCases.addWindows(__file__, TDTestCase()) -tdCases.addLinux(__file__, TDTestCase()) +tdCases.addLinux(__file__, TDTestCase()) \ No newline at end of file From f6e953ef4a37fb1fc50f8575a461f35e27b7f1ba Mon Sep 17 00:00:00 2001 From: haoranchen Date: Wed, 4 Aug 2021 19:58:04 +0800 Subject: [PATCH 06/13] Update version.inc --- cmake/version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/version.inc b/cmake/version.inc index 7c0a824c9c..ffceecf492 100755 --- a/cmake/version.inc +++ b/cmake/version.inc @@ -4,7 +4,7 @@ PROJECT(TDengine) IF (DEFINED VERNUMBER) SET(TD_VER_NUMBER ${VERNUMBER}) ELSE () - SET(TD_VER_NUMBER "2.1.5.0") + SET(TD_VER_NUMBER "2.1.6.0") ENDIF () IF (DEFINED VERCOMPATIBLE) From 27e3118e74f4df43ae8c6d00b276af0d47ed86cd Mon Sep 17 00:00:00 2001 From: Cary Xu Date: Thu, 5 Aug 2021 06:16:25 +0800 Subject: [PATCH 07/13] bug fix --- src/client/src/tscSQLParser.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 5539c627a8..9b7dec3348 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -5885,9 +5885,9 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) { tVariantListItem* pItem = taosArrayGet(pVarList, 1); SSchema* pTagsSchema = tscGetTableColumnSchema(pTableMetaInfo->pTableMeta, columnIndex.columnIndex); - if (pItem->pVar.nLen > pTagsSchema->bytes * TSDB_NCHAR_SIZE) { + if ((IS_VAR_DATA_TYPE(pTagsSchema->type)) && (pItem->pVar.nLen > pTagsSchema->bytes * TSDB_NCHAR_SIZE)) { return invalidOperationMsg(pMsg, msg14); - } + } pAlterSQL->tagData.data = calloc(1, pTagsSchema->bytes * TSDB_NCHAR_SIZE + VARSTR_HEADER_SIZE); From 4b226a92f4fc2cbe87e3759069de1b839209854d Mon Sep 17 00:00:00 2001 From: Cary Xu Date: Thu, 5 Aug 2021 06:23:28 +0800 Subject: [PATCH 08/13] remove redundant () --- src/client/src/tscSQLParser.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 9b7dec3348..5739333886 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -5885,9 +5885,9 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) { tVariantListItem* pItem = taosArrayGet(pVarList, 1); SSchema* pTagsSchema = tscGetTableColumnSchema(pTableMetaInfo->pTableMeta, columnIndex.columnIndex); - if ((IS_VAR_DATA_TYPE(pTagsSchema->type)) && (pItem->pVar.nLen > pTagsSchema->bytes * TSDB_NCHAR_SIZE)) { + if (IS_VAR_DATA_TYPE(pTagsSchema->type) && (pItem->pVar.nLen > pTagsSchema->bytes * TSDB_NCHAR_SIZE)) { return invalidOperationMsg(pMsg, msg14); - } + } pAlterSQL->tagData.data = calloc(1, pTagsSchema->bytes * TSDB_NCHAR_SIZE + VARSTR_HEADER_SIZE); From 5b4e6e30d852c2abc965caf3ef88f9d5272188b1 Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Thu, 5 Aug 2021 11:23:49 +0800 Subject: [PATCH 09/13] fix groupdId typo --- documentation20/en/04.model/docs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation20/en/04.model/docs.md b/documentation20/en/04.model/docs.md index 5ab5e0c6a5..2e69054fa1 100644 --- a/documentation20/en/04.model/docs.md +++ b/documentation20/en/04.model/docs.md @@ -32,7 +32,7 @@ Replace the database operating in the current connection with “power”, other An IoT system often has many types of devices, such as smart meters, transformers, buses, switches, etc. for power grids. In order to facilitate aggregation among multiple tables, using TDengine, it is necessary to create a STable for each type of data collection point. Taking the smart meter in Table 1 as an example, you can use the following SQL command to create a STable: ```mysql -CREATE STABLE meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupdId int); +CREATE STABLE meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupId int); ``` **Note:** The STABLE keyword in this instruction needs to be written as TABLE in versions before 2.0.15. From 42654182a9f64b44ecc37ca38b0f08b9aa743b12 Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Thu, 5 Aug 2021 11:25:28 +0800 Subject: [PATCH 10/13] fix groupdID typo --- documentation20/en/07.advanced-features/docs.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation20/en/07.advanced-features/docs.md b/documentation20/en/07.advanced-features/docs.md index cebbb4a269..d9103c7021 100644 --- a/documentation20/en/07.advanced-features/docs.md +++ b/documentation20/en/07.advanced-features/docs.md @@ -17,7 +17,7 @@ The continuous query provided by TDengine differs from the time window calculati The following is an example of the smart meter scenario to introduce the specific use of continuous query. Suppose we create a STables and sub-tables through the following SQL statement: ```sql -create table meters (ts timestamp, current float, voltage int, phase float) tags (location binary(64), groupdId int); +create table meters (ts timestamp, current float, voltage int, phase float) tags (location binary(64), groupId int); create table D1001 using meters tags ("Beijing.Chaoyang", 2); create table D1002 using meters tags ("Beijing.Haidian", 2); ... @@ -357,4 +357,4 @@ This SQL statement will obtain the last recorded voltage value of all smart mete In scenarios of TDengine, alarm monitoring is a common requirement. Conceptually, it requires the program to filter out data that meet certain conditions from the data of the latest period of time, and calculate a result according to a defined formula based on these data. When the result meets certain conditions and lasts for a certain period of time, it will notify the user in some form. -In order to meet the needs of users for alarm monitoring, TDengine provides this function in the form of an independent module. For its installation and use, please refer to the blog [How to Use TDengine for Alarm Monitoring](https://www.taosdata.com/blog/2020/04/14/1438.html). \ No newline at end of file +In order to meet the needs of users for alarm monitoring, TDengine provides this function in the form of an independent module. For its installation and use, please refer to the blog [How to Use TDengine for Alarm Monitoring](https://www.taosdata.com/blog/2020/04/14/1438.html). From e4ff6617fc5534afea7767050f8df5386db29739 Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Thu, 5 Aug 2021 11:28:18 +0800 Subject: [PATCH 11/13] fix groupdId typo --- documentation20/cn/04.model/docs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation20/cn/04.model/docs.md b/documentation20/cn/04.model/docs.md index 6f85381588..4ea592bd4a 100644 --- a/documentation20/cn/04.model/docs.md +++ b/documentation20/cn/04.model/docs.md @@ -33,7 +33,7 @@ USE power; 一个物联网系统,往往存在多种类型的设备,比如对于电网,存在智能电表、变压器、母线、开关等等。为便于多表之间的聚合,使用TDengine, 需要对每个类型的数据采集点创建一超级表。以表一中的智能电表为例,可以使用如下的SQL命令创建超级表: ```mysql -CREATE STABLE meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupdId int); +CREATE STABLE meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupId int); ``` **注意:**这一指令中的 STABLE 关键字,在 2.0.15 之前的版本中需写作 TABLE 。 From 8a888068bb3986b5addf983dced37e789e68b007 Mon Sep 17 00:00:00 2001 From: Zhiyu Yang <69311263+zyyang-taosdata@users.noreply.github.com> Date: Thu, 5 Aug 2021 11:40:03 +0800 Subject: [PATCH 12/13] Hotfix/td 5788 (#7162) * [TD-5788]: fix DatabaseMetaData's ResultSet with wrong taos type * change --- .../jdbc/AbstractDatabaseMetaData.java | 63 +++++++++---------- .../com/taosdata/jdbc/ColumnMetaData.java | 2 +- .../jdbc/DatabaseMetaDataResultSet.java | 33 ++++------ .../java/com/taosdata/jdbc/TSDBConstants.java | 9 +-- .../taosdata/jdbc/TSDBResultSetMetaData.java | 2 +- 5 files changed, 49 insertions(+), 60 deletions(-) diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractDatabaseMetaData.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractDatabaseMetaData.java index 3c9c784f59..7dbb62d849 100644 --- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractDatabaseMetaData.java +++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractDatabaseMetaData.java @@ -77,8 +77,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da } public boolean supportsMixedCaseIdentifiers() throws SQLException { - //像database、table这些对象的标识符,在存储时是否采用大小写混合的模式 - return false; + return false; //像database、table这些对象的标识符,在存储时是否采用大小写混合的模式 } public boolean storesUpperCaseIdentifiers() throws SQLException { @@ -514,7 +513,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col6 = new ColumnMetaData(); col6.setColIndex(colIndex); col6.setColName("TYPE_CAT"); - col6.setColType(Types.NCHAR); + col6.setColType(TSDBConstants.TSDB_DATA_TYPE_NCHAR); return col6; } @@ -522,7 +521,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col7 = new ColumnMetaData(); col7.setColIndex(colIndex); col7.setColName("TYPE_SCHEM"); - col7.setColType(Types.NCHAR); + col7.setColType(TSDBConstants.TSDB_DATA_TYPE_NCHAR); return col7; } @@ -530,7 +529,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col8 = new ColumnMetaData(); col8.setColIndex(colIndex); col8.setColName("TYPE_NAME"); - col8.setColType(Types.NCHAR); + col8.setColType(TSDBConstants.TSDB_DATA_TYPE_NCHAR); return col8; } @@ -538,7 +537,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col9 = new ColumnMetaData(); col9.setColIndex(colIndex); col9.setColName("SELF_REFERENCING_COL_NAME"); - col9.setColType(Types.NCHAR); + col9.setColType(TSDBConstants.TSDB_DATA_TYPE_NCHAR); return col9; } @@ -546,7 +545,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col10 = new ColumnMetaData(); col10.setColIndex(colIndex); col10.setColName("REF_GENERATION"); - col10.setColType(Types.NCHAR); + col10.setColType(TSDBConstants.TSDB_DATA_TYPE_NCHAR); return col10; } @@ -592,7 +591,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col4 = new ColumnMetaData(); col4.setColIndex(colIndex); col4.setColName("TABLE_TYPE"); - col4.setColType(Types.NCHAR); + col4.setColType(TSDBConstants.TSDB_DATA_TYPE_NCHAR); return col4; } @@ -734,7 +733,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col1 = new ColumnMetaData(); col1.setColIndex(colIndex); col1.setColName("TABLE_CAT"); - col1.setColType(Types.NCHAR); + col1.setColType(TSDBConstants.TSDB_DATA_TYPE_NCHAR); return col1; } @@ -742,7 +741,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col2 = new ColumnMetaData(); col2.setColIndex(colIndex); col2.setColName("TABLE_SCHEM"); - col2.setColType(Types.NCHAR); + col2.setColType(TSDBConstants.TSDB_DATA_TYPE_NCHAR); return col2; } @@ -751,7 +750,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da col3.setColIndex(colIndex); col3.setColName("TABLE_NAME"); col3.setColSize(193); - col3.setColType(Types.NCHAR); + col3.setColType(TSDBConstants.TSDB_DATA_TYPE_NCHAR); return col3; } @@ -760,7 +759,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da col4.setColIndex(colIndex); col4.setColName("COLUMN_NAME"); col4.setColSize(65); - col4.setColType(Types.NCHAR); + col4.setColType(TSDBConstants.TSDB_DATA_TYPE_NCHAR); return col4; } @@ -768,7 +767,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col5 = new ColumnMetaData(); col5.setColIndex(colIndex); col5.setColName("DATA_TYPE"); - col5.setColType(Types.INTEGER); + col5.setColType(TSDBConstants.TSDB_DATA_TYPE_INT); return col5; } @@ -776,7 +775,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col7 = new ColumnMetaData(); col7.setColIndex(7); col7.setColName("COLUMN_SIZE"); - col7.setColType(Types.INTEGER); + col7.setColType(TSDBConstants.TSDB_DATA_TYPE_INT); return col7; } @@ -791,7 +790,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col9 = new ColumnMetaData(); col9.setColIndex(9); col9.setColName("DECIMAL_DIGITS"); - col9.setColType(Types.INTEGER); + col9.setColType(TSDBConstants.TSDB_DATA_TYPE_INT); return col9; } @@ -799,7 +798,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col10 = new ColumnMetaData(); col10.setColIndex(10); col10.setColName("NUM_PREC_RADIX"); - col10.setColType(Types.INTEGER); + col10.setColType(TSDBConstants.TSDB_DATA_TYPE_INT); return col10; } @@ -807,7 +806,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col11 = new ColumnMetaData(); col11.setColIndex(11); col11.setColName("NULLABLE"); - col11.setColType(Types.INTEGER); + col11.setColType(TSDBConstants.TSDB_DATA_TYPE_INT); return col11; } @@ -815,7 +814,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col12 = new ColumnMetaData(); col12.setColIndex(colIndex); col12.setColName("REMARKS"); - col12.setColType(Types.NCHAR); + col12.setColType(TSDBConstants.TSDB_DATA_TYPE_NCHAR); return col12; } @@ -823,7 +822,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col13 = new ColumnMetaData(); col13.setColIndex(13); col13.setColName("COLUMN_DEF"); - col13.setColType(Types.NCHAR); + col13.setColType(TSDBConstants.TSDB_DATA_TYPE_NCHAR); return col13; } @@ -831,7 +830,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col14 = new ColumnMetaData(); col14.setColIndex(14); col14.setColName("SQL_DATA_TYPE"); - col14.setColType(Types.INTEGER); + col14.setColType(TSDBConstants.TSDB_DATA_TYPE_INT); return col14; } @@ -839,7 +838,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col15 = new ColumnMetaData(); col15.setColIndex(15); col15.setColName("SQL_DATETIME_SUB"); - col15.setColType(Types.INTEGER); + col15.setColType(TSDBConstants.TSDB_DATA_TYPE_INT); return col15; } @@ -847,7 +846,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col16 = new ColumnMetaData(); col16.setColIndex(16); col16.setColName("CHAR_OCTET_LENGTH"); - col16.setColType(Types.INTEGER); + col16.setColType(TSDBConstants.TSDB_DATA_TYPE_INT); return col16; } @@ -855,7 +854,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col17 = new ColumnMetaData(); col17.setColIndex(17); col17.setColName("ORDINAL_POSITION"); - col17.setColType(Types.INTEGER); + col17.setColType(TSDBConstants.TSDB_DATA_TYPE_INT); return col17; } @@ -863,7 +862,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col18 = new ColumnMetaData(); col18.setColIndex(18); col18.setColName("IS_NULLABLE"); - col18.setColType(Types.NCHAR); + col18.setColType(TSDBConstants.TSDB_DATA_TYPE_NCHAR); return col18; } @@ -871,7 +870,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col19 = new ColumnMetaData(); col19.setColIndex(19); col19.setColName("SCOPE_CATALOG"); - col19.setColType(Types.NCHAR); + col19.setColType(TSDBConstants.TSDB_DATA_TYPE_NCHAR); return col19; } @@ -879,7 +878,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col20 = new ColumnMetaData(); col20.setColIndex(20); col20.setColName("SCOPE_SCHEMA"); - col20.setColType(Types.NCHAR); + col20.setColType(TSDBConstants.TSDB_DATA_TYPE_NCHAR); return col20; } @@ -887,7 +886,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col21 = new ColumnMetaData(); col21.setColIndex(21); col21.setColName("SCOPE_TABLE"); - col21.setColType(Types.NCHAR); + col21.setColType(TSDBConstants.TSDB_DATA_TYPE_NCHAR); return col21; } @@ -903,7 +902,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col23 = new ColumnMetaData(); col23.setColIndex(23); col23.setColName("IS_AUTOINCREMENT"); - col23.setColType(Types.NCHAR); + col23.setColType(TSDBConstants.TSDB_DATA_TYPE_NCHAR); return col23; } @@ -911,7 +910,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col24 = new ColumnMetaData(); col24.setColIndex(24); col24.setColName("IS_GENERATEDCOLUMN"); - col24.setColType(Types.NCHAR); + col24.setColType(TSDBConstants.TSDB_DATA_TYPE_NCHAR); return col24; } @@ -1205,7 +1204,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col5 = new ColumnMetaData(); col5.setColIndex(colIndex); col5.setColName("KEY_SEQ"); - col5.setColType(Types.SMALLINT); + col5.setColType(TSDBConstants.TSDB_DATA_TYPE_SMALLINT); return col5; } @@ -1213,7 +1212,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col6 = new ColumnMetaData(); col6.setColIndex(colIndex); col6.setColName("PK_NAME"); - col6.setColType(Types.NCHAR); + col6.setColType(TSDBConstants.TSDB_DATA_TYPE_NCHAR); return col6; } @@ -1275,7 +1274,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da ColumnMetaData col4 = new ColumnMetaData(); col4.setColIndex(colIndex); col4.setColName("SUPERTABLE_NAME"); - col4.setColType(Types.NCHAR); + col4.setColType(TSDBConstants.TSDB_DATA_TYPE_NCHAR); return col4; } diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/ColumnMetaData.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/ColumnMetaData.java index 14e75f0e09..8398c8f84b 100644 --- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/ColumnMetaData.java +++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/ColumnMetaData.java @@ -16,7 +16,7 @@ package com.taosdata.jdbc; public class ColumnMetaData { - private int colType = 0; + private int colType = 0; //taosType private String colName = null; private int colSize = -1; private int colIndex = 0; diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/DatabaseMetaDataResultSet.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/DatabaseMetaDataResultSet.java index bda3d52212..db4a5ccaa8 100644 --- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/DatabaseMetaDataResultSet.java +++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/DatabaseMetaDataResultSet.java @@ -68,71 +68,61 @@ public class DatabaseMetaDataResultSet extends AbstractResultSet { @Override public String getString(int columnIndex) throws SQLException { int colType = columnMetaDataList.get(columnIndex - 1).getColType(); - int nativeType = TSDBConstants.jdbcType2TaosType(colType); - return rowCursor.getString(columnIndex, nativeType); + return rowCursor.getString(columnIndex, colType); } @Override public boolean getBoolean(int columnIndex) throws SQLException { int colType = columnMetaDataList.get(columnIndex - 1).getColType(); - int nativeType = TSDBConstants.jdbcType2TaosType(colType); - return rowCursor.getBoolean(columnIndex, nativeType); + return rowCursor.getBoolean(columnIndex, colType); } @Override public byte getByte(int columnIndex) throws SQLException { int colType = columnMetaDataList.get(columnIndex - 1).getColType(); - int nativeType = TSDBConstants.jdbcType2TaosType(colType); - return (byte) rowCursor.getInt(columnIndex, nativeType); + return (byte) rowCursor.getInt(columnIndex, colType); } @Override public short getShort(int columnIndex) throws SQLException { int colType = columnMetaDataList.get(columnIndex - 1).getColType(); - int nativeType = TSDBConstants.jdbcType2TaosType(colType); - return (short) rowCursor.getInt(columnIndex, nativeType); + return (short) rowCursor.getInt(columnIndex, colType); } @Override public int getInt(int columnIndex) throws SQLException { int colType = columnMetaDataList.get(columnIndex - 1).getColType(); - int nativeType = TSDBConstants.jdbcType2TaosType(colType); - return rowCursor.getInt(columnIndex, nativeType); + return rowCursor.getInt(columnIndex, colType); } @Override public long getLong(int columnIndex) throws SQLException { int colType = columnMetaDataList.get(columnIndex - 1).getColType(); - int nativeType = TSDBConstants.jdbcType2TaosType(colType); - return rowCursor.getLong(columnIndex, nativeType); + return rowCursor.getLong(columnIndex, colType); } @Override public float getFloat(int columnIndex) throws SQLException { int colType = columnMetaDataList.get(columnIndex - 1).getColType(); - int nativeType = TSDBConstants.jdbcType2TaosType(colType); - return rowCursor.getFloat(columnIndex, nativeType); + return rowCursor.getFloat(columnIndex, colType); } @Override public double getDouble(int columnIndex) throws SQLException { int colType = columnMetaDataList.get(columnIndex - 1).getColType(); - int nativeType = TSDBConstants.jdbcType2TaosType(colType); - return rowCursor.getDouble(columnIndex, nativeType); + return rowCursor.getDouble(columnIndex, colType); } @Override public byte[] getBytes(int columnIndex) throws SQLException { int colType = columnMetaDataList.get(columnIndex - 1).getColType(); - int nativeType = TSDBConstants.jdbcType2TaosType(colType); - return (rowCursor.getString(columnIndex, nativeType)).getBytes(); + return (rowCursor.getString(columnIndex, colType)).getBytes(); } @Override public Timestamp getTimestamp(int columnIndex) throws SQLException { int colType = columnMetaDataList.get(columnIndex - 1).getColType(); - int nativeType = TSDBConstants.jdbcType2TaosType(colType); - return rowCursor.getTimestamp(columnIndex, nativeType); + return rowCursor.getTimestamp(columnIndex, colType); } @Override @@ -158,8 +148,7 @@ public class DatabaseMetaDataResultSet extends AbstractResultSet { @Override public BigDecimal getBigDecimal(int columnIndex) throws SQLException { int colType = columnMetaDataList.get(columnIndex - 1).getColType(); - int nativeType = TSDBConstants.jdbcType2TaosType(colType); - double value = rowCursor.getDouble(columnIndex, nativeType); + double value = rowCursor.getDouble(columnIndex, colType); return new BigDecimal(value); } diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBConstants.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBConstants.java index 740e3c6c21..74a8745138 100644 --- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBConstants.java +++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBConstants.java @@ -129,8 +129,9 @@ public abstract class TSDBConstants { return Types.TIMESTAMP; case TSDBConstants.TSDB_DATA_TYPE_NCHAR: return Types.NCHAR; + default: + throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNKNOWN_TAOS_TYPE, "unknown taos type: " + taosType + " in tdengine"); } - throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNKNOWN_TAOS_TYPE); } public static String taosType2JdbcTypeName(int taosType) throws SQLException { @@ -160,7 +161,7 @@ public abstract class TSDBConstants { case TSDBConstants.TSDB_DATA_TYPE_NCHAR: return "NCHAR"; default: - throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNKNOWN_TAOS_TYPE); + throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNKNOWN_TAOS_TYPE, "unknown taos type: " + taosType + " in tdengine"); } } @@ -187,7 +188,7 @@ public abstract class TSDBConstants { case Types.NCHAR: return TSDBConstants.TSDB_DATA_TYPE_NCHAR; } - throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNKNOWN_SQL_TYPE_IN_TDENGINE); + throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNKNOWN_SQL_TYPE_IN_TDENGINE, "unknown sql type: " + jdbcType + " in tdengine"); } public static String jdbcType2TaosTypeName(int jdbcType) throws SQLException { @@ -213,7 +214,7 @@ public abstract class TSDBConstants { case Types.NCHAR: return "NCHAR"; default: - throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNKNOWN_SQL_TYPE_IN_TDENGINE); + throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNKNOWN_SQL_TYPE_IN_TDENGINE, "unknown sql type: " + jdbcType + " in tdengine"); } } diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetMetaData.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetMetaData.java index 6292673352..f93384fcc7 100644 --- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetMetaData.java +++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetMetaData.java @@ -110,7 +110,7 @@ public class TSDBResultSetMetaData extends WrapperImpl implements ResultSetMetaD ColumnMetaData columnMetaData = this.colMetaDataList.get(column - 1); switch (columnMetaData.getColType()) { - + case TSDBConstants.TSDB_DATA_TYPE_FLOAT: return 5; case TSDBConstants.TSDB_DATA_TYPE_DOUBLE: From a281ca9e1bf37f5c014dbbc24a44e65efdeb36db Mon Sep 17 00:00:00 2001 From: Elias Soong Date: Thu, 5 Aug 2021 13:14:53 +0800 Subject: [PATCH 13/13] [TD-5255] : use tag "groupId" instead of "groupdId" in all SQL examples. --- documentation20/cn/02.getting-started/docs.md | 6 +++--- documentation20/cn/04.model/docs.md | 2 +- documentation20/cn/07.advanced-features/docs.md | 2 +- documentation20/cn/12.taos-sql/docs.md | 6 +++--- documentation20/en/04.model/docs.md | 2 +- documentation20/en/07.advanced-features/docs.md | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/documentation20/cn/02.getting-started/docs.md b/documentation20/cn/02.getting-started/docs.md index ab10b28fd3..4ae4ebf4d0 100644 --- a/documentation20/cn/02.getting-started/docs.md +++ b/documentation20/cn/02.getting-started/docs.md @@ -126,7 +126,7 @@ taos> source ; $ taosdemo ``` -该命令将在数据库 test 下面自动创建一张超级表 meters,该超级表下有 1 万张表,表名为 "d0" 到 "d9999",每张表有 1 万条记录,每条记录有 (ts, current, voltage, phase) 四个字段,时间戳从 "2017-07-14 10:40:00 000" 到 "2017-07-14 10:40:09 999",每张表带有标签 location 和 groupdId,groupdId 被设置为 1 到 10, location 被设置为 "beijing" 或者 "shanghai"。 +该命令将在数据库 test 下面自动创建一张超级表 meters,该超级表下有 1 万张表,表名为 "d0" 到 "d9999",每张表有 1 万条记录,每条记录有 (ts, current, voltage, phase) 四个字段,时间戳从 "2017-07-14 10:40:00 000" 到 "2017-07-14 10:40:09 999",每张表带有标签 location 和 groupId,groupId 被设置为 1 到 10, location 被设置为 "beijing" 或者 "shanghai"。 执行这条命令大概需要几分钟,最后共插入 1 亿条记录。 @@ -150,10 +150,10 @@ taos> select avg(current), max(voltage), min(phase) from test.meters; taos> select count(*) from test.meters where location="beijing"; ``` -- 查询 groupdId=10 的所有记录的平均值、最大值、最小值等: +- 查询 groupId=10 的所有记录的平均值、最大值、最小值等: ```mysql -taos> select avg(current), max(voltage), min(phase) from test.meters where groupdId=10; +taos> select avg(current), max(voltage), min(phase) from test.meters where groupId=10; ``` - 对表 d10 按 10s 进行平均值、最大值和最小值聚合统计: diff --git a/documentation20/cn/04.model/docs.md b/documentation20/cn/04.model/docs.md index 6f85381588..4ea592bd4a 100644 --- a/documentation20/cn/04.model/docs.md +++ b/documentation20/cn/04.model/docs.md @@ -33,7 +33,7 @@ USE power; 一个物联网系统,往往存在多种类型的设备,比如对于电网,存在智能电表、变压器、母线、开关等等。为便于多表之间的聚合,使用TDengine, 需要对每个类型的数据采集点创建一超级表。以表一中的智能电表为例,可以使用如下的SQL命令创建超级表: ```mysql -CREATE STABLE meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupdId int); +CREATE STABLE meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupId int); ``` **注意:**这一指令中的 STABLE 关键字,在 2.0.15 之前的版本中需写作 TABLE 。 diff --git a/documentation20/cn/07.advanced-features/docs.md b/documentation20/cn/07.advanced-features/docs.md index 1077f299ee..1b4ccb4814 100644 --- a/documentation20/cn/07.advanced-features/docs.md +++ b/documentation20/cn/07.advanced-features/docs.md @@ -17,7 +17,7 @@ TDengine提供的连续查询与普通流计算中的时间窗口计算具有以 下面以智能电表场景为例介绍连续查询的具体使用方法。假设我们通过下列SQL语句创建了超级表和子表: ```sql -create table meters (ts timestamp, current float, voltage int, phase float) tags (location binary(64), groupdId int); +create table meters (ts timestamp, current float, voltage int, phase float) tags (location binary(64), groupId int); create table D1001 using meters tags ("Beijing.Chaoyang", 2); create table D1002 using meters tags ("Beijing.Haidian", 2); ... diff --git a/documentation20/cn/12.taos-sql/docs.md b/documentation20/cn/12.taos-sql/docs.md index 4368e5fa1d..97b89f3446 100644 --- a/documentation20/cn/12.taos-sql/docs.md +++ b/documentation20/cn/12.taos-sql/docs.md @@ -414,13 +414,13 @@ INSERT INTO ``` 也可以在自动建表时,只是指定部分 TAGS 列的取值,未被指定的 TAGS 列将置为 NULL。例如: ```mysql - INSERT INTO d21001 USING meters (groupdId) TAGS (2) VALUES ('2021-07-13 14:06:33.196', 10.15, 217, 0.33); + INSERT INTO d21001 USING meters (groupId) TAGS (2) VALUES ('2021-07-13 14:06:33.196', 10.15, 217, 0.33); ``` 自动建表语法也支持在一条语句中向多个表插入记录。例如: ```mysql INSERT INTO d21001 USING meters TAGS ('Beijing.Chaoyang', 2) VALUES ('2021-07-13 14:06:34.630', 10.2, 219, 0.32) ('2021-07-13 14:06:35.779', 10.15, 217, 0.33) - d21002 USING meters (groupdId) TAGS (2) VALUES ('2021-07-13 14:06:34.255', 10.15, 217, 0.33) - d21003 USING meters (groupdId) TAGS (2) (ts, current, phase) VALUES ('2021-07-13 14:06:34.255', 10.27, 0.31); + d21002 USING meters (groupId) TAGS (2) VALUES ('2021-07-13 14:06:34.255', 10.15, 217, 0.33) + d21003 USING meters (groupId) TAGS (2) (ts, current, phase) VALUES ('2021-07-13 14:06:34.255', 10.27, 0.31); ``` **说明:**在 2.0.20.5 版本之前,在使用自动建表语法并指定列时,子表的列名必须紧跟在子表名称后面,而不能如例子里那样放在 TAGS 和 VALUES 之间。从 2.0.20.5 版本开始,两种写法都可以,但不能在一条 SQL 语句中混用,否则会报语法错误。 diff --git a/documentation20/en/04.model/docs.md b/documentation20/en/04.model/docs.md index 5ab5e0c6a5..2e69054fa1 100644 --- a/documentation20/en/04.model/docs.md +++ b/documentation20/en/04.model/docs.md @@ -32,7 +32,7 @@ Replace the database operating in the current connection with “power”, other An IoT system often has many types of devices, such as smart meters, transformers, buses, switches, etc. for power grids. In order to facilitate aggregation among multiple tables, using TDengine, it is necessary to create a STable for each type of data collection point. Taking the smart meter in Table 1 as an example, you can use the following SQL command to create a STable: ```mysql -CREATE STABLE meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupdId int); +CREATE STABLE meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupId int); ``` **Note:** The STABLE keyword in this instruction needs to be written as TABLE in versions before 2.0.15. diff --git a/documentation20/en/07.advanced-features/docs.md b/documentation20/en/07.advanced-features/docs.md index cebbb4a269..3a4d10375c 100644 --- a/documentation20/en/07.advanced-features/docs.md +++ b/documentation20/en/07.advanced-features/docs.md @@ -17,7 +17,7 @@ The continuous query provided by TDengine differs from the time window calculati The following is an example of the smart meter scenario to introduce the specific use of continuous query. Suppose we create a STables and sub-tables through the following SQL statement: ```sql -create table meters (ts timestamp, current float, voltage int, phase float) tags (location binary(64), groupdId int); +create table meters (ts timestamp, current float, voltage int, phase float) tags (location binary(64), groupId int); create table D1001 using meters tags ("Beijing.Chaoyang", 2); create table D1002 using meters tags ("Beijing.Haidian", 2); ...