Merge branch '3.0' of https://github.com/taosdata/TDengine into fix/TD-30837
This commit is contained in:
commit
95ba57c139
|
@ -109,9 +109,37 @@ s3migrate database <db_name>;
|
||||||
| # | 参数 | 默认值 | 最小值 | 最大值 | 描述 |
|
| # | 参数 | 默认值 | 最小值 | 最大值 | 描述 |
|
||||||
| :--- | :----------- | :----- | :----- | :------ | :----------------------------------------------------------- |
|
| :--- | :----------- | :----- | :----- | :------ | :----------------------------------------------------------- |
|
||||||
| 1 | s3_keeplocal | 365 | 1 | 365000 | 数据在本地保留的天数,即 data 文件在本地磁盘保留多长时间后可以上传到 S3。默认单位:天,支持 m(分钟)、h(小时)和 d(天)三个单位 |
|
| 1 | s3_keeplocal | 365 | 1 | 365000 | 数据在本地保留的天数,即 data 文件在本地磁盘保留多长时间后可以上传到 S3。默认单位:天,支持 m(分钟)、h(小时)和 d(天)三个单位 |
|
||||||
| 2 | s3_chunksize | 262144 | 131072 | 1048576 | 上传对象的大小阈值,与 TSDB_PAGESIZE 参数一样,不可修改,单位为 TSDB 页 |
|
| 2 | s3_chunkpages | 131072 | 131072 | 1048576 | 上传对象的大小阈值,与 tsdb_pagesize 参数一样,不可修改,单位为 TSDB 页 |
|
||||||
| 3 | s3_compact | 1 | 0 | 1 | TSDB 文件组首次上传 S3 时,是否自动进行 compact 操作。 |
|
| 3 | s3_compact | 1 | 0 | 1 | TSDB 文件组首次上传 S3 时,是否自动进行 compact 操作。 |
|
||||||
|
|
||||||
|
### 对象存储读写次数估算
|
||||||
|
|
||||||
|
对象存储服务的使用成本与存储的数据量及请求次数相关,下面分别介绍数据的上传及下载过程。
|
||||||
|
|
||||||
|
#### 数据上传
|
||||||
|
|
||||||
|
当 TSDB 时序数据超过 `s3_keeplocal` 参数指定的时间,相关的数据文件会被切分成多个文件块,每个文件块的默认大小是 512M 字节 (`s3_chunkpages * tsdb_pagesize`)。除了最后一个文件块保留在本地文件系统外,其余的文件块会被上传到对象存储服务。
|
||||||
|
|
||||||
|
```math
|
||||||
|
上传次数 = 数据文件大小 / (s3_chunkpages * tsdb_pagesize) - 1
|
||||||
|
```
|
||||||
|
|
||||||
|
在创建数据库时,可以通过 `s3_chunkpages` 参数调整每个文件块的大小,从而控制每个数据文件的上传次数。
|
||||||
|
|
||||||
|
其它类型的文件如 head, stt, sma 等,保留在本地文件系统,以加速预计算相关查询。
|
||||||
|
|
||||||
|
#### 数据下载
|
||||||
|
|
||||||
|
在查询操作中,如果需要访问对象存储中的数据,TSDB 不会下载整个数据文件,而是计算所需数据在文件中的位置,只下载相应的数据到 TSDB 页缓存中,然后将数据返回给查询执行引擎。后续查询首先检查页缓存,查看数据是否已被缓存。如果数据已缓存,则直接使用缓存中的数据,而无需重复从对象存储下载,从而有效降低从对象存储下载数据的次数。
|
||||||
|
|
||||||
|
相邻的多个数据页会作为一个数据块从对象存储下载一次,以减少从对象存储下载的次数。每个数据页的大小,在创建数据库时,通过 `tsdb_pagesize` 参数指定,默认 4K 字节。
|
||||||
|
|
||||||
|
```math
|
||||||
|
下载次数 = 查询需要的数据块数量 - 已缓存的数据块数量
|
||||||
|
```
|
||||||
|
|
||||||
|
页缓存是内存缓存,节点重启后,再次查询需要重新下载数据。缓存采用 LRU (Least Recently Used) 策略,当缓存空间不足时,最近最少使用的数据将被淘汰。缓存的大小可以通过 `s3PageCacheSize` 参数进行调整,通常来说,缓存越大,下载次数越少。
|
||||||
|
|
||||||
## Azure Blob 存储
|
## Azure Blob 存储
|
||||||
本节介绍在 TDengine Enterprise 如何使用微软 Azure Blob 对象存储。本功能是上一小节‘对象存储’功能的扩展,需额外依赖 Flexify 服务提供的 S3 网关。通过适当的参数配置,可以把大部分较冷的时序数据存储到 Azure Blob 服务中。
|
本节介绍在 TDengine Enterprise 如何使用微软 Azure Blob 对象存储。本功能是上一小节‘对象存储’功能的扩展,需额外依赖 Flexify 服务提供的 S3 网关。通过适当的参数配置,可以把大部分较冷的时序数据存储到 Azure Blob 服务中。
|
||||||
|
|
||||||
|
|
|
@ -122,7 +122,7 @@
|
||||||
#define TK_STT_TRIGGER 104
|
#define TK_STT_TRIGGER 104
|
||||||
#define TK_TABLE_PREFIX 105
|
#define TK_TABLE_PREFIX 105
|
||||||
#define TK_TABLE_SUFFIX 106
|
#define TK_TABLE_SUFFIX 106
|
||||||
#define TK_S3_CHUNKSIZE 107
|
#define TK_S3_CHUNKPAGES 107
|
||||||
#define TK_S3_KEEPLOCAL 108
|
#define TK_S3_KEEPLOCAL 108
|
||||||
#define TK_S3_COMPACT 109
|
#define TK_S3_COMPACT 109
|
||||||
#define TK_KEEP_TIME_OFFSET 110
|
#define TK_KEEP_TIME_OFFSET 110
|
||||||
|
@ -407,7 +407,6 @@
|
||||||
#define TK_WAL 389
|
#define TK_WAL 389
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define TK_NK_SPACE 600
|
#define TK_NK_SPACE 600
|
||||||
#define TK_NK_COMMENT 601
|
#define TK_NK_COMMENT 601
|
||||||
#define TK_NK_ILLEGAL 602
|
#define TK_NK_ILLEGAL 602
|
||||||
|
|
|
@ -450,7 +450,7 @@ typedef enum ELogicConditionType {
|
||||||
|
|
||||||
#define TSDB_MIN_S3_CHUNK_SIZE (128 * 1024)
|
#define TSDB_MIN_S3_CHUNK_SIZE (128 * 1024)
|
||||||
#define TSDB_MAX_S3_CHUNK_SIZE (1024 * 1024)
|
#define TSDB_MAX_S3_CHUNK_SIZE (1024 * 1024)
|
||||||
#define TSDB_DEFAULT_S3_CHUNK_SIZE (256 * 1024)
|
#define TSDB_DEFAULT_S3_CHUNK_SIZE (128 * 1024)
|
||||||
#define TSDB_MIN_S3_KEEP_LOCAL (1 * 1440) // unit minute
|
#define TSDB_MIN_S3_KEEP_LOCAL (1 * 1440) // unit minute
|
||||||
#define TSDB_MAX_S3_KEEP_LOCAL (365000 * 1440)
|
#define TSDB_MAX_S3_KEEP_LOCAL (365000 * 1440)
|
||||||
#define TSDB_DEFAULT_S3_KEEP_LOCAL (365 * 1440)
|
#define TSDB_DEFAULT_S3_KEEP_LOCAL (365 * 1440)
|
||||||
|
|
|
@ -118,7 +118,7 @@ static const SSysDbTableSchema userDBSchema[] = {
|
||||||
{.name = "table_suffix", .bytes = 2, .type = TSDB_DATA_TYPE_SMALLINT, .sysInfo = true},
|
{.name = "table_suffix", .bytes = 2, .type = TSDB_DATA_TYPE_SMALLINT, .sysInfo = true},
|
||||||
{.name = "tsdb_pagesize", .bytes = 4, .type = TSDB_DATA_TYPE_INT, .sysInfo = true},
|
{.name = "tsdb_pagesize", .bytes = 4, .type = TSDB_DATA_TYPE_INT, .sysInfo = true},
|
||||||
{.name = "keep_time_offset", .bytes = 4, .type = TSDB_DATA_TYPE_INT, .sysInfo = false},
|
{.name = "keep_time_offset", .bytes = 4, .type = TSDB_DATA_TYPE_INT, .sysInfo = false},
|
||||||
{.name = "s3_chunksize", .bytes = 4, .type = TSDB_DATA_TYPE_INT, .sysInfo = true},
|
{.name = "s3_chunkpages", .bytes = 4, .type = TSDB_DATA_TYPE_INT, .sysInfo = true},
|
||||||
{.name = "s3_keeplocal", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
{.name = "s3_keeplocal", .bytes = 10 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
||||||
{.name = "s3_compact", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT, .sysInfo = true},
|
{.name = "s3_compact", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT, .sysInfo = true},
|
||||||
{.name = "with_arbitrator", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT, .sysInfo = true},
|
{.name = "with_arbitrator", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT, .sysInfo = true},
|
||||||
|
|
|
@ -50,7 +50,7 @@ static int32_t buildRetrieveTableRsp(SSDataBlock* pBlock, int32_t numOfCols, SRe
|
||||||
(*pRsp)->numOfCols = htonl(numOfCols);
|
(*pRsp)->numOfCols = htonl(numOfCols);
|
||||||
|
|
||||||
int32_t len = blockEncode(pBlock, (*pRsp)->data + PAYLOAD_PREFIX_LEN, numOfCols);
|
int32_t len = blockEncode(pBlock, (*pRsp)->data + PAYLOAD_PREFIX_LEN, numOfCols);
|
||||||
if(len < 0) {
|
if (len < 0) {
|
||||||
taosMemoryFree(*pRsp);
|
taosMemoryFree(*pRsp);
|
||||||
return terrno;
|
return terrno;
|
||||||
}
|
}
|
||||||
|
@ -292,7 +292,7 @@ static int32_t buildRetension(SArray* pRetension, char** ppRetentions) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const int lMaxLen = 128;
|
const int lMaxLen = 128;
|
||||||
char* p1 = taosMemoryCalloc(1, lMaxLen);
|
char* p1 = taosMemoryCalloc(1, lMaxLen);
|
||||||
if (NULL == p1) {
|
if (NULL == p1) {
|
||||||
return terrno;
|
return terrno;
|
||||||
}
|
}
|
||||||
|
@ -346,20 +346,20 @@ static const char* encryptAlgorithmStr(int8_t encryptAlgorithm) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t formatDurationOrKeep(char* buffer, int64_t bufSize, int32_t timeInMinutes) {
|
int32_t formatDurationOrKeep(char* buffer, int64_t bufSize, int32_t timeInMinutes) {
|
||||||
if (buffer == NULL || bufSize <= 0) {
|
if (buffer == NULL || bufSize <= 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int32_t len = 0;
|
int32_t len = 0;
|
||||||
if (timeInMinutes % 1440 == 0) {
|
if (timeInMinutes % 1440 == 0) {
|
||||||
int32_t days = timeInMinutes / 1440;
|
int32_t days = timeInMinutes / 1440;
|
||||||
len = tsnprintf(buffer, bufSize, "%dd", days);
|
len = tsnprintf(buffer, bufSize, "%dd", days);
|
||||||
} else if (timeInMinutes % 60 == 0) {
|
} else if (timeInMinutes % 60 == 0) {
|
||||||
int32_t hours = timeInMinutes / 60;
|
int32_t hours = timeInMinutes / 60;
|
||||||
len = tsnprintf(buffer, bufSize, "%dh", hours);
|
len = tsnprintf(buffer, bufSize, "%dh", hours);
|
||||||
} else {
|
} else {
|
||||||
len = tsnprintf(buffer, bufSize, "%dm", timeInMinutes);
|
len = tsnprintf(buffer, bufSize, "%dm", timeInMinutes);
|
||||||
}
|
}
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t setCreateDBResultIntoDataBlock(SSDataBlock* pBlock, char* dbName, char* dbFName, SDbCfgInfo* pCfg) {
|
static int32_t setCreateDBResultIntoDataBlock(SSDataBlock* pBlock, char* dbName, char* dbFName, SDbCfgInfo* pCfg) {
|
||||||
|
@ -410,27 +410,27 @@ static int32_t setCreateDBResultIntoDataBlock(SSDataBlock* pBlock, char* dbName,
|
||||||
int32_t lenKeep2 = formatDurationOrKeep(keep2Str, sizeof(keep2Str), pCfg->daysToKeep2);
|
int32_t lenKeep2 = formatDurationOrKeep(keep2Str, sizeof(keep2Str), pCfg->daysToKeep2);
|
||||||
|
|
||||||
if (IS_SYS_DBNAME(dbName)) {
|
if (IS_SYS_DBNAME(dbName)) {
|
||||||
len += tsnprintf(buf2 + VARSTR_HEADER_SIZE, SHOW_CREATE_DB_RESULT_FIELD2_LEN - VARSTR_HEADER_SIZE, "CREATE DATABASE `%s`", dbName);
|
|
||||||
} else {
|
|
||||||
len += tsnprintf(buf2 + VARSTR_HEADER_SIZE, SHOW_CREATE_DB_RESULT_FIELD2_LEN - VARSTR_HEADER_SIZE,
|
len += tsnprintf(buf2 + VARSTR_HEADER_SIZE, SHOW_CREATE_DB_RESULT_FIELD2_LEN - VARSTR_HEADER_SIZE,
|
||||||
"CREATE DATABASE `%s` BUFFER %d CACHESIZE %d CACHEMODEL '%s' COMP %d DURATION %s "
|
"CREATE DATABASE `%s`", dbName);
|
||||||
"WAL_FSYNC_PERIOD %d MAXROWS %d MINROWS %d STT_TRIGGER %d KEEP %s,%s,%s PAGES %d PAGESIZE %d "
|
} else {
|
||||||
"PRECISION '%s' REPLICA %d "
|
len +=
|
||||||
"WAL_LEVEL %d VGROUPS %d SINGLE_STABLE %d TABLE_PREFIX %d TABLE_SUFFIX %d TSDB_PAGESIZE %d "
|
tsnprintf(buf2 + VARSTR_HEADER_SIZE, SHOW_CREATE_DB_RESULT_FIELD2_LEN - VARSTR_HEADER_SIZE,
|
||||||
"WAL_RETENTION_PERIOD %d WAL_RETENTION_SIZE %" PRId64
|
"CREATE DATABASE `%s` BUFFER %d CACHESIZE %d CACHEMODEL '%s' COMP %d DURATION %s "
|
||||||
" KEEP_TIME_OFFSET %d ENCRYPT_ALGORITHM '%s' S3_CHUNKSIZE %d S3_KEEPLOCAL %dm S3_COMPACT %d",
|
"WAL_FSYNC_PERIOD %d MAXROWS %d MINROWS %d STT_TRIGGER %d KEEP %s,%s,%s PAGES %d PAGESIZE %d "
|
||||||
dbName, pCfg->buffer, pCfg->cacheSize, cacheModelStr(pCfg->cacheLast), pCfg->compression,
|
"PRECISION '%s' REPLICA %d "
|
||||||
durationStr,
|
"WAL_LEVEL %d VGROUPS %d SINGLE_STABLE %d TABLE_PREFIX %d TABLE_SUFFIX %d TSDB_PAGESIZE %d "
|
||||||
pCfg->walFsyncPeriod, pCfg->maxRows, pCfg->minRows, pCfg->sstTrigger,
|
"WAL_RETENTION_PERIOD %d WAL_RETENTION_SIZE %" PRId64
|
||||||
keep0Str, keep1Str, keep2Str,
|
" KEEP_TIME_OFFSET %d ENCRYPT_ALGORITHM '%s' S3_CHUNKPAGES %d S3_KEEPLOCAL %dm S3_COMPACT %d",
|
||||||
pCfg->pages, pCfg->pageSize, prec,
|
dbName, pCfg->buffer, pCfg->cacheSize, cacheModelStr(pCfg->cacheLast), pCfg->compression, durationStr,
|
||||||
pCfg->replications, pCfg->walLevel, pCfg->numOfVgroups, 1 == pCfg->numOfStables, hashPrefix,
|
pCfg->walFsyncPeriod, pCfg->maxRows, pCfg->minRows, pCfg->sstTrigger, keep0Str, keep1Str, keep2Str,
|
||||||
pCfg->hashSuffix, pCfg->tsdbPageSize, pCfg->walRetentionPeriod, pCfg->walRetentionSize,
|
pCfg->pages, pCfg->pageSize, prec, pCfg->replications, pCfg->walLevel, pCfg->numOfVgroups,
|
||||||
pCfg->keepTimeOffset, encryptAlgorithmStr(pCfg->encryptAlgorithm), pCfg->s3ChunkSize,
|
1 == pCfg->numOfStables, hashPrefix, pCfg->hashSuffix, pCfg->tsdbPageSize, pCfg->walRetentionPeriod,
|
||||||
pCfg->s3KeepLocal, pCfg->s3Compact);
|
pCfg->walRetentionSize, pCfg->keepTimeOffset, encryptAlgorithmStr(pCfg->encryptAlgorithm),
|
||||||
|
pCfg->s3ChunkSize, pCfg->s3KeepLocal, pCfg->s3Compact);
|
||||||
|
|
||||||
if (pRetentions) {
|
if (pRetentions) {
|
||||||
len += tsnprintf(buf2 + VARSTR_HEADER_SIZE + len, SHOW_CREATE_DB_RESULT_FIELD2_LEN - VARSTR_HEADER_SIZE, " RETENTIONS %s", pRetentions);
|
len += tsnprintf(buf2 + VARSTR_HEADER_SIZE + len, SHOW_CREATE_DB_RESULT_FIELD2_LEN - VARSTR_HEADER_SIZE,
|
||||||
|
" RETENTIONS %s", pRetentions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -510,30 +510,30 @@ void appendColumnFields(char* buf, int32_t* len, STableCfg* pCfg) {
|
||||||
#define LTYPE_LEN (32 + 60) // 60 byte for compress info
|
#define LTYPE_LEN (32 + 60) // 60 byte for compress info
|
||||||
char type[LTYPE_LEN];
|
char type[LTYPE_LEN];
|
||||||
snprintf(type, LTYPE_LEN, "%s", tDataTypes[pSchema->type].name);
|
snprintf(type, LTYPE_LEN, "%s", tDataTypes[pSchema->type].name);
|
||||||
int typeLen = strlen(type);
|
int typeLen = strlen(type);
|
||||||
if (TSDB_DATA_TYPE_VARCHAR == pSchema->type || TSDB_DATA_TYPE_VARBINARY == pSchema->type ||
|
if (TSDB_DATA_TYPE_VARCHAR == pSchema->type || TSDB_DATA_TYPE_VARBINARY == pSchema->type ||
|
||||||
TSDB_DATA_TYPE_GEOMETRY == pSchema->type) {
|
TSDB_DATA_TYPE_GEOMETRY == pSchema->type) {
|
||||||
typeLen += tsnprintf(type + typeLen, LTYPE_LEN - typeLen, "(%d)", (int32_t)(pSchema->bytes - VARSTR_HEADER_SIZE));
|
typeLen += tsnprintf(type + typeLen, LTYPE_LEN - typeLen, "(%d)", (int32_t)(pSchema->bytes - VARSTR_HEADER_SIZE));
|
||||||
} else if (TSDB_DATA_TYPE_NCHAR == pSchema->type) {
|
} else if (TSDB_DATA_TYPE_NCHAR == pSchema->type) {
|
||||||
typeLen += tsnprintf(type + typeLen, LTYPE_LEN - typeLen, "(%d)",
|
typeLen += tsnprintf(type + typeLen, LTYPE_LEN - typeLen, "(%d)",
|
||||||
(int32_t)((pSchema->bytes - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE));
|
(int32_t)((pSchema->bytes - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (useCompress(pCfg->tableType) && pCfg->pSchemaExt) {
|
if (useCompress(pCfg->tableType) && pCfg->pSchemaExt) {
|
||||||
typeLen += tsnprintf(type + typeLen, LTYPE_LEN - typeLen, " ENCODE \'%s\'",
|
typeLen += tsnprintf(type + typeLen, LTYPE_LEN - typeLen, " ENCODE \'%s\'",
|
||||||
columnEncodeStr(COMPRESS_L1_TYPE_U32(pCfg->pSchemaExt[i].compress)));
|
columnEncodeStr(COMPRESS_L1_TYPE_U32(pCfg->pSchemaExt[i].compress)));
|
||||||
typeLen += tsnprintf(type + typeLen, LTYPE_LEN - typeLen, " COMPRESS \'%s\'",
|
typeLen += tsnprintf(type + typeLen, LTYPE_LEN - typeLen, " COMPRESS \'%s\'",
|
||||||
columnCompressStr(COMPRESS_L2_TYPE_U32(pCfg->pSchemaExt[i].compress)));
|
columnCompressStr(COMPRESS_L2_TYPE_U32(pCfg->pSchemaExt[i].compress)));
|
||||||
typeLen += tsnprintf(type + typeLen, LTYPE_LEN - typeLen, " LEVEL \'%s\'",
|
typeLen += tsnprintf(type + typeLen, LTYPE_LEN - typeLen, " LEVEL \'%s\'",
|
||||||
columnLevelStr(COMPRESS_L2_TYPE_LEVEL_U32(pCfg->pSchemaExt[i].compress)));
|
columnLevelStr(COMPRESS_L2_TYPE_LEVEL_U32(pCfg->pSchemaExt[i].compress)));
|
||||||
}
|
}
|
||||||
if (!(pSchema->flags & COL_IS_KEY)) {
|
if (!(pSchema->flags & COL_IS_KEY)) {
|
||||||
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len), "%s`%s` %s",
|
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
||||||
((i > 0) ? ", " : ""), pSchema->name, type);
|
"%s`%s` %s", ((i > 0) ? ", " : ""), pSchema->name, type);
|
||||||
} else {
|
} else {
|
||||||
char* pk = "PRIMARY KEY";
|
char* pk = "PRIMARY KEY";
|
||||||
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len), "%s`%s` %s %s",
|
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
||||||
((i > 0) ? ", " : ""), pSchema->name, type, pk);
|
"%s`%s` %s %s", ((i > 0) ? ", " : ""), pSchema->name, type, pk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -545,14 +545,15 @@ void appendTagFields(char* buf, int32_t* len, STableCfg* pCfg) {
|
||||||
snprintf(type, sizeof(type), "%s", tDataTypes[pSchema->type].name);
|
snprintf(type, sizeof(type), "%s", tDataTypes[pSchema->type].name);
|
||||||
if (TSDB_DATA_TYPE_VARCHAR == pSchema->type || TSDB_DATA_TYPE_VARBINARY == pSchema->type ||
|
if (TSDB_DATA_TYPE_VARCHAR == pSchema->type || TSDB_DATA_TYPE_VARBINARY == pSchema->type ||
|
||||||
TSDB_DATA_TYPE_GEOMETRY == pSchema->type) {
|
TSDB_DATA_TYPE_GEOMETRY == pSchema->type) {
|
||||||
snprintf(type + strlen(type), sizeof(type) - strlen(type), "(%d)", (int32_t)(pSchema->bytes - VARSTR_HEADER_SIZE));
|
snprintf(type + strlen(type), sizeof(type) - strlen(type), "(%d)",
|
||||||
|
(int32_t)(pSchema->bytes - VARSTR_HEADER_SIZE));
|
||||||
} else if (TSDB_DATA_TYPE_NCHAR == pSchema->type) {
|
} else if (TSDB_DATA_TYPE_NCHAR == pSchema->type) {
|
||||||
snprintf(type + strlen(type), sizeof(type) - strlen(type), "(%d)",
|
snprintf(type + strlen(type), sizeof(type) - strlen(type), "(%d)",
|
||||||
(int32_t)((pSchema->bytes - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE));
|
(int32_t)((pSchema->bytes - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE));
|
||||||
}
|
}
|
||||||
|
|
||||||
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len), "%s`%s` %s",
|
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
||||||
((i > 0) ? ", " : ""), pSchema->name, type);
|
"%s`%s` %s", ((i > 0) ? ", " : ""), pSchema->name, type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -560,7 +561,7 @@ void appendTagNameFields(char* buf, int32_t* len, STableCfg* pCfg) {
|
||||||
for (int32_t i = 0; i < pCfg->numOfTags; ++i) {
|
for (int32_t i = 0; i < pCfg->numOfTags; ++i) {
|
||||||
SSchema* pSchema = pCfg->pSchemas + pCfg->numOfColumns + i;
|
SSchema* pSchema = pCfg->pSchemas + pCfg->numOfColumns + i;
|
||||||
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
||||||
"%s`%s`", ((i > 0) ? ", " : ""), pSchema->name);
|
"%s`%s`", ((i > 0) ? ", " : ""), pSchema->name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -582,7 +583,7 @@ int32_t appendTagValues(char* buf, int32_t* len, STableCfg* pCfg) {
|
||||||
return terrno;
|
return terrno;
|
||||||
}
|
}
|
||||||
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
||||||
"%s", pJson);
|
"%s", pJson);
|
||||||
taosMemoryFree(pJson);
|
taosMemoryFree(pJson);
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
@ -596,12 +597,12 @@ int32_t appendTagValues(char* buf, int32_t* len, STableCfg* pCfg) {
|
||||||
SSchema* pSchema = pCfg->pSchemas + pCfg->numOfColumns + i;
|
SSchema* pSchema = pCfg->pSchemas + pCfg->numOfColumns + i;
|
||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
||||||
", ");
|
", ");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (j >= valueNum) {
|
if (j >= valueNum) {
|
||||||
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
||||||
"NULL");
|
"NULL");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -624,14 +625,15 @@ int32_t appendTagValues(char* buf, int32_t* len, STableCfg* pCfg) {
|
||||||
code = dataConverToStr(buf + VARSTR_HEADER_SIZE + *len, leftSize, type, pTagVal->pData, pTagVal->nData, &tlen);
|
code = dataConverToStr(buf + VARSTR_HEADER_SIZE + *len, leftSize, type, pTagVal->pData, pTagVal->nData, &tlen);
|
||||||
TAOS_CHECK_ERRNO(code);
|
TAOS_CHECK_ERRNO(code);
|
||||||
} else {
|
} else {
|
||||||
code = dataConverToStr(buf + VARSTR_HEADER_SIZE + *len, leftSize, type, &pTagVal->i64, tDataTypes[type].bytes, &tlen);
|
code = dataConverToStr(buf + VARSTR_HEADER_SIZE + *len, leftSize, type, &pTagVal->i64, tDataTypes[type].bytes,
|
||||||
|
&tlen);
|
||||||
TAOS_CHECK_ERRNO(code);
|
TAOS_CHECK_ERRNO(code);
|
||||||
}
|
}
|
||||||
*len += tlen;
|
*len += tlen;
|
||||||
j++;
|
j++;
|
||||||
} else {
|
} else {
|
||||||
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
||||||
"NULL");
|
"NULL");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_exit:
|
_exit:
|
||||||
|
@ -643,38 +645,38 @@ _exit:
|
||||||
void appendTableOptions(char* buf, int32_t* len, SDbCfgInfo* pDbCfg, STableCfg* pCfg) {
|
void appendTableOptions(char* buf, int32_t* len, SDbCfgInfo* pDbCfg, STableCfg* pCfg) {
|
||||||
if (pCfg->commentLen > 0) {
|
if (pCfg->commentLen > 0) {
|
||||||
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
||||||
" COMMENT '%s'", pCfg->pComment);
|
" COMMENT '%s'", pCfg->pComment);
|
||||||
} else if (0 == pCfg->commentLen) {
|
} else if (0 == pCfg->commentLen) {
|
||||||
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
||||||
" COMMENT ''");
|
" COMMENT ''");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NULL != pDbCfg->pRetensions && pCfg->watermark1 > 0) {
|
if (NULL != pDbCfg->pRetensions && pCfg->watermark1 > 0) {
|
||||||
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
||||||
" WATERMARK %" PRId64 "a", pCfg->watermark1);
|
" WATERMARK %" PRId64 "a", pCfg->watermark1);
|
||||||
if (pCfg->watermark2 > 0) {
|
if (pCfg->watermark2 > 0) {
|
||||||
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
||||||
", %" PRId64 "a", pCfg->watermark2);
|
", %" PRId64 "a", pCfg->watermark2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NULL != pDbCfg->pRetensions && pCfg->delay1 > 0) {
|
if (NULL != pDbCfg->pRetensions && pCfg->delay1 > 0) {
|
||||||
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
||||||
" MAX_DELAY %" PRId64 "a", pCfg->delay1);
|
" MAX_DELAY %" PRId64 "a", pCfg->delay1);
|
||||||
if (pCfg->delay2 > 0) {
|
if (pCfg->delay2 > 0) {
|
||||||
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
||||||
", %" PRId64 "a", pCfg->delay2);
|
", %" PRId64 "a", pCfg->delay2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t funcNum = taosArrayGetSize(pCfg->pFuncs);
|
int32_t funcNum = taosArrayGetSize(pCfg->pFuncs);
|
||||||
if (NULL != pDbCfg->pRetensions && funcNum > 0) {
|
if (NULL != pDbCfg->pRetensions && funcNum > 0) {
|
||||||
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
||||||
" ROLLUP(");
|
" ROLLUP(");
|
||||||
for (int32_t i = 0; i < funcNum; ++i) {
|
for (int32_t i = 0; i < funcNum; ++i) {
|
||||||
char* pFunc = taosArrayGet(pCfg->pFuncs, i);
|
char* pFunc = taosArrayGet(pCfg->pFuncs, i);
|
||||||
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
||||||
"%s%s", ((i > 0) ? ", " : ""), pFunc);
|
"%s%s", ((i > 0) ? ", " : ""), pFunc);
|
||||||
}
|
}
|
||||||
*len +=
|
*len +=
|
||||||
snprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len), ")");
|
snprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len), ")");
|
||||||
|
@ -682,7 +684,7 @@ void appendTableOptions(char* buf, int32_t* len, SDbCfgInfo* pDbCfg, STableCfg*
|
||||||
|
|
||||||
if (pCfg->ttl > 0) {
|
if (pCfg->ttl > 0) {
|
||||||
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
||||||
" TTL %d", pCfg->ttl);
|
" TTL %d", pCfg->ttl);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TSDB_SUPER_TABLE == pCfg->tableType || TSDB_NORMAL_TABLE == pCfg->tableType) {
|
if (TSDB_SUPER_TABLE == pCfg->tableType || TSDB_NORMAL_TABLE == pCfg->tableType) {
|
||||||
|
@ -696,18 +698,18 @@ void appendTableOptions(char* buf, int32_t* len, SDbCfgInfo* pDbCfg, STableCfg*
|
||||||
if (nSma < pCfg->numOfColumns && nSma > 0) {
|
if (nSma < pCfg->numOfColumns && nSma > 0) {
|
||||||
bool smaOn = false;
|
bool smaOn = false;
|
||||||
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len),
|
||||||
" SMA(");
|
" SMA(");
|
||||||
for (int32_t i = 0; i < pCfg->numOfColumns; ++i) {
|
for (int32_t i = 0; i < pCfg->numOfColumns; ++i) {
|
||||||
if (IS_BSMA_ON(pCfg->pSchemas + i)) {
|
if (IS_BSMA_ON(pCfg->pSchemas + i)) {
|
||||||
if (smaOn) {
|
if (smaOn) {
|
||||||
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len,
|
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len,
|
||||||
SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len), ",`%s`",
|
SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len), ",`%s`",
|
||||||
(pCfg->pSchemas + i)->name);
|
(pCfg->pSchemas + i)->name);
|
||||||
} else {
|
} else {
|
||||||
smaOn = true;
|
smaOn = true;
|
||||||
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len,
|
*len += tsnprintf(buf + VARSTR_HEADER_SIZE + *len,
|
||||||
SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len), "`%s`",
|
SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + *len), "`%s`",
|
||||||
(pCfg->pSchemas + i)->name);
|
(pCfg->pSchemas + i)->name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -736,20 +738,20 @@ static int32_t setCreateTBResultIntoDataBlock(SSDataBlock* pBlock, SDbCfgInfo* p
|
||||||
|
|
||||||
if (TSDB_SUPER_TABLE == pCfg->tableType) {
|
if (TSDB_SUPER_TABLE == pCfg->tableType) {
|
||||||
len += tsnprintf(buf2 + VARSTR_HEADER_SIZE, SHOW_CREATE_TB_RESULT_FIELD2_LEN - VARSTR_HEADER_SIZE,
|
len += tsnprintf(buf2 + VARSTR_HEADER_SIZE, SHOW_CREATE_TB_RESULT_FIELD2_LEN - VARSTR_HEADER_SIZE,
|
||||||
"CREATE STABLE `%s` (", tbName);
|
"CREATE STABLE `%s` (", tbName);
|
||||||
appendColumnFields(buf2, &len, pCfg);
|
appendColumnFields(buf2, &len, pCfg);
|
||||||
len += tsnprintf(buf2 + VARSTR_HEADER_SIZE + len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + len),
|
len += tsnprintf(buf2 + VARSTR_HEADER_SIZE + len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + len),
|
||||||
") TAGS (");
|
") TAGS (");
|
||||||
appendTagFields(buf2, &len, pCfg);
|
appendTagFields(buf2, &len, pCfg);
|
||||||
len +=
|
len +=
|
||||||
snprintf(buf2 + VARSTR_HEADER_SIZE + len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + len), ")");
|
snprintf(buf2 + VARSTR_HEADER_SIZE + len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + len), ")");
|
||||||
appendTableOptions(buf2, &len, pDbCfg, pCfg);
|
appendTableOptions(buf2, &len, pDbCfg, pCfg);
|
||||||
} else if (TSDB_CHILD_TABLE == pCfg->tableType) {
|
} else if (TSDB_CHILD_TABLE == pCfg->tableType) {
|
||||||
len += tsnprintf(buf2 + VARSTR_HEADER_SIZE, SHOW_CREATE_TB_RESULT_FIELD2_LEN - VARSTR_HEADER_SIZE,
|
len += tsnprintf(buf2 + VARSTR_HEADER_SIZE, SHOW_CREATE_TB_RESULT_FIELD2_LEN - VARSTR_HEADER_SIZE,
|
||||||
"CREATE TABLE `%s` USING `%s` (", tbName, pCfg->stbName);
|
"CREATE TABLE `%s` USING `%s` (", tbName, pCfg->stbName);
|
||||||
appendTagNameFields(buf2, &len, pCfg);
|
appendTagNameFields(buf2, &len, pCfg);
|
||||||
len += tsnprintf(buf2 + VARSTR_HEADER_SIZE + len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + len),
|
len += tsnprintf(buf2 + VARSTR_HEADER_SIZE + len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + len),
|
||||||
") TAGS (");
|
") TAGS (");
|
||||||
code = appendTagValues(buf2, &len, pCfg);
|
code = appendTagValues(buf2, &len, pCfg);
|
||||||
TAOS_CHECK_ERRNO(code);
|
TAOS_CHECK_ERRNO(code);
|
||||||
len +=
|
len +=
|
||||||
|
@ -757,7 +759,7 @@ static int32_t setCreateTBResultIntoDataBlock(SSDataBlock* pBlock, SDbCfgInfo* p
|
||||||
appendTableOptions(buf2, &len, pDbCfg, pCfg);
|
appendTableOptions(buf2, &len, pDbCfg, pCfg);
|
||||||
} else {
|
} else {
|
||||||
len += tsnprintf(buf2 + VARSTR_HEADER_SIZE, SHOW_CREATE_TB_RESULT_FIELD2_LEN - VARSTR_HEADER_SIZE,
|
len += tsnprintf(buf2 + VARSTR_HEADER_SIZE, SHOW_CREATE_TB_RESULT_FIELD2_LEN - VARSTR_HEADER_SIZE,
|
||||||
"CREATE TABLE `%s` (", tbName);
|
"CREATE TABLE `%s` (", tbName);
|
||||||
appendColumnFields(buf2, &len, pCfg);
|
appendColumnFields(buf2, &len, pCfg);
|
||||||
len +=
|
len +=
|
||||||
snprintf(buf2 + VARSTR_HEADER_SIZE + len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + len), ")");
|
snprintf(buf2 + VARSTR_HEADER_SIZE + len, SHOW_CREATE_TB_RESULT_FIELD2_LEN - (VARSTR_HEADER_SIZE + len), ")");
|
||||||
|
@ -793,7 +795,7 @@ static int32_t setCreateViewResultIntoDataBlock(SSDataBlock* pBlock, SShowCreate
|
||||||
}
|
}
|
||||||
|
|
||||||
SViewMeta* pMeta = pStmt->pViewMeta;
|
SViewMeta* pMeta = pStmt->pViewMeta;
|
||||||
if(NULL == pMeta) {
|
if (NULL == pMeta) {
|
||||||
qError("exception: view meta is null");
|
qError("exception: view meta is null");
|
||||||
return TSDB_CODE_APP_ERROR;
|
return TSDB_CODE_APP_ERROR;
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,7 @@ typedef enum EDatabaseOptionType {
|
||||||
DB_OPTION_STT_TRIGGER,
|
DB_OPTION_STT_TRIGGER,
|
||||||
DB_OPTION_TABLE_PREFIX,
|
DB_OPTION_TABLE_PREFIX,
|
||||||
DB_OPTION_TABLE_SUFFIX,
|
DB_OPTION_TABLE_SUFFIX,
|
||||||
DB_OPTION_S3_CHUNKSIZE,
|
DB_OPTION_S3_CHUNKPAGES,
|
||||||
DB_OPTION_S3_KEEPLOCAL,
|
DB_OPTION_S3_KEEPLOCAL,
|
||||||
DB_OPTION_S3_COMPACT,
|
DB_OPTION_S3_COMPACT,
|
||||||
DB_OPTION_KEEP_TIME_OFFSET,
|
DB_OPTION_KEEP_TIME_OFFSET,
|
||||||
|
|
|
@ -280,7 +280,7 @@ db_options(A) ::= db_options(B) WAL_SEGMENT_SIZE NK_INTEGER(C).
|
||||||
db_options(A) ::= db_options(B) STT_TRIGGER NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_STT_TRIGGER, &C); }
|
db_options(A) ::= db_options(B) STT_TRIGGER NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_STT_TRIGGER, &C); }
|
||||||
db_options(A) ::= db_options(B) TABLE_PREFIX signed(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_TABLE_PREFIX, C); }
|
db_options(A) ::= db_options(B) TABLE_PREFIX signed(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_TABLE_PREFIX, C); }
|
||||||
db_options(A) ::= db_options(B) TABLE_SUFFIX signed(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_TABLE_SUFFIX, C); }
|
db_options(A) ::= db_options(B) TABLE_SUFFIX signed(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_TABLE_SUFFIX, C); }
|
||||||
db_options(A) ::= db_options(B) S3_CHUNKSIZE NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_S3_CHUNKSIZE, &C); }
|
db_options(A) ::= db_options(B) S3_CHUNKPAGES NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_S3_CHUNKPAGES, &C); }
|
||||||
db_options(A) ::= db_options(B) S3_KEEPLOCAL NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_S3_KEEPLOCAL, &C); }
|
db_options(A) ::= db_options(B) S3_KEEPLOCAL NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_S3_KEEPLOCAL, &C); }
|
||||||
db_options(A) ::= db_options(B) S3_KEEPLOCAL NK_VARIABLE(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_S3_KEEPLOCAL, &C); }
|
db_options(A) ::= db_options(B) S3_KEEPLOCAL NK_VARIABLE(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_S3_KEEPLOCAL, &C); }
|
||||||
db_options(A) ::= db_options(B) S3_COMPACT NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_S3_COMPACT, &C); }
|
db_options(A) ::= db_options(B) S3_COMPACT NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_S3_COMPACT, &C); }
|
||||||
|
|
|
@ -43,11 +43,11 @@
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define CHECK_NAME(p) \
|
#define CHECK_NAME(p) \
|
||||||
do { \
|
do { \
|
||||||
if (!p) { \
|
if (!p) { \
|
||||||
goto _err; \
|
goto _err; \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define COPY_STRING_FORM_ID_TOKEN(buf, pToken) strncpy(buf, (pToken)->z, TMIN((pToken)->n, sizeof(buf) - 1))
|
#define COPY_STRING_FORM_ID_TOKEN(buf, pToken) strncpy(buf, (pToken)->z, TMIN((pToken)->n, sizeof(buf) - 1))
|
||||||
|
@ -333,7 +333,7 @@ SNode* releaseRawExprNode(SAstCreateContext* pCxt, SNode* pNode) {
|
||||||
// Len of pRawExpr->p could be larger than len of aliasName[TSDB_COL_NAME_LEN].
|
// Len of pRawExpr->p could be larger than len of aliasName[TSDB_COL_NAME_LEN].
|
||||||
// If aliasName is truncated, hash value of aliasName could be the same.
|
// If aliasName is truncated, hash value of aliasName could be the same.
|
||||||
uint64_t hashVal = MurmurHash3_64(pRawExpr->p, pRawExpr->n);
|
uint64_t hashVal = MurmurHash3_64(pRawExpr->p, pRawExpr->n);
|
||||||
sprintf(pExpr->aliasName, "%"PRIu64, hashVal);
|
sprintf(pExpr->aliasName, "%" PRIu64, hashVal);
|
||||||
strncpy(pExpr->userAlias, pRawExpr->p, len);
|
strncpy(pExpr->userAlias, pRawExpr->p, len);
|
||||||
pExpr->userAlias[len] = '\0';
|
pExpr->userAlias[len] = '\0';
|
||||||
}
|
}
|
||||||
|
@ -405,7 +405,7 @@ SNode* createValueNode(SAstCreateContext* pCxt, int32_t dataType, const SToken*
|
||||||
pCxt->errCode = nodesMakeNode(QUERY_NODE_VALUE, (SNode**)&val);
|
pCxt->errCode = nodesMakeNode(QUERY_NODE_VALUE, (SNode**)&val);
|
||||||
CHECK_MAKE_NODE(val);
|
CHECK_MAKE_NODE(val);
|
||||||
val->literal = taosStrndup(pLiteral->z, pLiteral->n);
|
val->literal = taosStrndup(pLiteral->z, pLiteral->n);
|
||||||
if(!val->literal) {
|
if (!val->literal) {
|
||||||
pCxt->errCode = terrno;
|
pCxt->errCode = terrno;
|
||||||
nodesDestroyNode((SNode*)val);
|
nodesDestroyNode((SNode*)val);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -586,8 +586,8 @@ SNodeList* createHintNodeList(SAstCreateContext* pCxt, const SToken* pLiteral) {
|
||||||
if (NULL == pLiteral || pLiteral->n <= 5) {
|
if (NULL == pLiteral || pLiteral->n <= 5) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
SNodeList* pHintList = NULL;
|
SNodeList* pHintList = NULL;
|
||||||
char* hint = taosStrndup(pLiteral->z + 3, pLiteral->n - 5);
|
char* hint = taosStrndup(pLiteral->z + 3, pLiteral->n - 5);
|
||||||
if (!hint) return NULL;
|
if (!hint) return NULL;
|
||||||
int32_t i = 0;
|
int32_t i = 0;
|
||||||
bool quit = false;
|
bool quit = false;
|
||||||
|
@ -971,7 +971,7 @@ _err:
|
||||||
}
|
}
|
||||||
|
|
||||||
SNode* createBetweenAnd(SAstCreateContext* pCxt, SNode* pExpr, SNode* pLeft, SNode* pRight) {
|
SNode* createBetweenAnd(SAstCreateContext* pCxt, SNode* pExpr, SNode* pLeft, SNode* pRight) {
|
||||||
SNode* pNew = NULL, *pGE = NULL, *pLE = NULL;
|
SNode *pNew = NULL, *pGE = NULL, *pLE = NULL;
|
||||||
CHECK_PARSER_STATUS(pCxt);
|
CHECK_PARSER_STATUS(pCxt);
|
||||||
pCxt->errCode = nodesCloneNode(pExpr, &pNew);
|
pCxt->errCode = nodesCloneNode(pExpr, &pNew);
|
||||||
CHECK_PARSER_STATUS(pCxt);
|
CHECK_PARSER_STATUS(pCxt);
|
||||||
|
@ -993,7 +993,7 @@ _err:
|
||||||
}
|
}
|
||||||
|
|
||||||
SNode* createNotBetweenAnd(SAstCreateContext* pCxt, SNode* pExpr, SNode* pLeft, SNode* pRight) {
|
SNode* createNotBetweenAnd(SAstCreateContext* pCxt, SNode* pExpr, SNode* pLeft, SNode* pRight) {
|
||||||
SNode* pNew = NULL, *pLT = NULL, *pGT = NULL;
|
SNode *pNew = NULL, *pLT = NULL, *pGT = NULL;
|
||||||
CHECK_PARSER_STATUS(pCxt);
|
CHECK_PARSER_STATUS(pCxt);
|
||||||
pCxt->errCode = nodesCloneNode(pExpr, &pNew);
|
pCxt->errCode = nodesCloneNode(pExpr, &pNew);
|
||||||
CHECK_PARSER_STATUS(pCxt);
|
CHECK_PARSER_STATUS(pCxt);
|
||||||
|
@ -1959,7 +1959,7 @@ static SNode* setDatabaseOptionImpl(SAstCreateContext* pCxt, SNode* pOptions, ED
|
||||||
nodesDestroyNode((SNode*)pNode);
|
nodesDestroyNode((SNode*)pNode);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case DB_OPTION_S3_CHUNKSIZE:
|
case DB_OPTION_S3_CHUNKPAGES:
|
||||||
pDbOptions->s3ChunkSize = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
pDbOptions->s3ChunkSize = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||||
break;
|
break;
|
||||||
case DB_OPTION_S3_KEEPLOCAL: {
|
case DB_OPTION_S3_KEEPLOCAL: {
|
||||||
|
@ -2210,7 +2210,7 @@ _err:
|
||||||
|
|
||||||
SNode* setColumnOptions(SAstCreateContext* pCxt, SNode* pOptions, const SToken* pVal1, void* pVal2) {
|
SNode* setColumnOptions(SAstCreateContext* pCxt, SNode* pOptions, const SToken* pVal1, void* pVal2) {
|
||||||
CHECK_PARSER_STATUS(pCxt);
|
CHECK_PARSER_STATUS(pCxt);
|
||||||
char optionType[TSDB_CL_OPTION_LEN];
|
char optionType[TSDB_CL_OPTION_LEN];
|
||||||
|
|
||||||
memset(optionType, 0, TSDB_CL_OPTION_LEN);
|
memset(optionType, 0, TSDB_CL_OPTION_LEN);
|
||||||
strncpy(optionType, pVal1->z, TMIN(pVal1->n, TSDB_CL_OPTION_LEN));
|
strncpy(optionType, pVal1->z, TMIN(pVal1->n, TSDB_CL_OPTION_LEN));
|
||||||
|
@ -2807,7 +2807,7 @@ static int32_t getIpV4RangeFromWhitelistItem(char* ipRange, SIpV4Range* pIpRange
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
char* ipCopy = taosStrdup(ipRange);
|
char* ipCopy = taosStrdup(ipRange);
|
||||||
if (!ipCopy) return terrno;
|
if (!ipCopy) return terrno;
|
||||||
char* slash = strchr(ipCopy, '/');
|
char* slash = strchr(ipCopy, '/');
|
||||||
if (slash) {
|
if (slash) {
|
||||||
*slash = '\0';
|
*slash = '\0';
|
||||||
struct in_addr addr;
|
struct in_addr addr;
|
||||||
|
|
|
@ -340,7 +340,7 @@ static SKeyword keywordTable[] = {
|
||||||
{"_FROWTS", TK_FROWTS},
|
{"_FROWTS", TK_FROWTS},
|
||||||
{"ALIVE", TK_ALIVE},
|
{"ALIVE", TK_ALIVE},
|
||||||
{"VARBINARY", TK_VARBINARY},
|
{"VARBINARY", TK_VARBINARY},
|
||||||
{"S3_CHUNKSIZE", TK_S3_CHUNKSIZE},
|
{"S3_CHUNKPAGES", TK_S3_CHUNKPAGES},
|
||||||
{"S3_KEEPLOCAL", TK_S3_KEEPLOCAL},
|
{"S3_KEEPLOCAL", TK_S3_KEEPLOCAL},
|
||||||
{"S3_COMPACT", TK_S3_COMPACT},
|
{"S3_COMPACT", TK_S3_COMPACT},
|
||||||
{"S3MIGRATE", TK_S3MIGRATE},
|
{"S3MIGRATE", TK_S3MIGRATE},
|
||||||
|
@ -371,7 +371,7 @@ static int32_t doInitKeywordsTable(void) {
|
||||||
keywordHashTable = taosHashInit(numOfEntries, MurmurHash3_32, true, false);
|
keywordHashTable = taosHashInit(numOfEntries, MurmurHash3_32, true, false);
|
||||||
for (int32_t i = 0; i < numOfEntries; i++) {
|
for (int32_t i = 0; i < numOfEntries; i++) {
|
||||||
keywordTable[i].len = (uint8_t)strlen(keywordTable[i].name);
|
keywordTable[i].len = (uint8_t)strlen(keywordTable[i].name);
|
||||||
void* ptr = &keywordTable[i];
|
void* ptr = &keywordTable[i];
|
||||||
int32_t code = taosHashPut(keywordHashTable, keywordTable[i].name, keywordTable[i].len, (void*)&ptr, POINTER_BYTES);
|
int32_t code = taosHashPut(keywordHashTable, keywordTable[i].name, keywordTable[i].len, (void*)&ptr, POINTER_BYTES);
|
||||||
if (TSDB_CODE_SUCCESS != code) {
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
taosHashCleanup(keywordHashTable);
|
taosHashCleanup(keywordHashTable);
|
||||||
|
@ -699,7 +699,7 @@ uint32_t tGetToken(const char* z, uint32_t* tokenId) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (hasNonAsciiChars) {
|
if (hasNonAsciiChars) {
|
||||||
*tokenId = TK_NK_ALIAS; // must be alias
|
*tokenId = TK_NK_ALIAS; // must be alias
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
if (IS_TRUE_STR(z, i) || IS_FALSE_STR(z, i)) {
|
if (IS_TRUE_STR(z, i) || IS_FALSE_STR(z, i)) {
|
||||||
|
@ -714,10 +714,10 @@ uint32_t tGetToken(const char* z, uint32_t* tokenId) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
bool hasNonAsciiChars = false;
|
bool hasNonAsciiChars = false;
|
||||||
for (i = 1; ; i++) {
|
for (i = 1;; i++) {
|
||||||
if ((z[i] & 0x80) != 0) {
|
if ((z[i] & 0x80) != 0) {
|
||||||
hasNonAsciiChars = true;
|
hasNonAsciiChars = true;
|
||||||
} else if (isIdChar[(uint8_t)z[i]]){
|
} else if (isIdChar[(uint8_t)z[i]]) {
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -835,9 +835,7 @@ SToken tStrGetToken(const char* str, int32_t* i, bool isPrevOptr, bool* pIgnoreC
|
||||||
|
|
||||||
bool taosIsKeyWordToken(const char* z, int32_t len) { return (tKeywordCode((char*)z, len) != TK_NK_ID); }
|
bool taosIsKeyWordToken(const char* z, int32_t len) { return (tKeywordCode((char*)z, len) != TK_NK_ID); }
|
||||||
|
|
||||||
int32_t taosInitKeywordsTable() {
|
int32_t taosInitKeywordsTable() { return doInitKeywordsTable(); }
|
||||||
return doInitKeywordsTable();
|
|
||||||
}
|
|
||||||
|
|
||||||
void taosCleanupKeywordsTable() {
|
void taosCleanupKeywordsTable() {
|
||||||
void* m = keywordHashTable;
|
void* m = keywordHashTable;
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -150,7 +150,7 @@
|
||||||
#define TK_STT_TRIGGER 104
|
#define TK_STT_TRIGGER 104
|
||||||
#define TK_TABLE_PREFIX 105
|
#define TK_TABLE_PREFIX 105
|
||||||
#define TK_TABLE_SUFFIX 106
|
#define TK_TABLE_SUFFIX 106
|
||||||
#define TK_S3_CHUNKSIZE 107
|
#define TK_S3_CHUNKPAGES 107
|
||||||
#define TK_S3_KEEPLOCAL 108
|
#define TK_S3_KEEPLOCAL 108
|
||||||
#define TK_S3_COMPACT 109
|
#define TK_S3_COMPACT 109
|
||||||
#define TK_KEEP_TIME_OFFSET 110
|
#define TK_KEEP_TIME_OFFSET 110
|
||||||
|
@ -1982,7 +1982,7 @@ static const YYCODETYPE yyFallback[] = {
|
||||||
0, /* STT_TRIGGER => nothing */
|
0, /* STT_TRIGGER => nothing */
|
||||||
0, /* TABLE_PREFIX => nothing */
|
0, /* TABLE_PREFIX => nothing */
|
||||||
0, /* TABLE_SUFFIX => nothing */
|
0, /* TABLE_SUFFIX => nothing */
|
||||||
0, /* S3_CHUNKSIZE => nothing */
|
0, /* S3_CHUNKPAGES => nothing */
|
||||||
0, /* S3_KEEPLOCAL => nothing */
|
0, /* S3_KEEPLOCAL => nothing */
|
||||||
0, /* S3_COMPACT => nothing */
|
0, /* S3_COMPACT => nothing */
|
||||||
0, /* KEEP_TIME_OFFSET => nothing */
|
0, /* KEEP_TIME_OFFSET => nothing */
|
||||||
|
@ -2460,7 +2460,7 @@ static const char *const yyTokenName[] = {
|
||||||
/* 104 */ "STT_TRIGGER",
|
/* 104 */ "STT_TRIGGER",
|
||||||
/* 105 */ "TABLE_PREFIX",
|
/* 105 */ "TABLE_PREFIX",
|
||||||
/* 106 */ "TABLE_SUFFIX",
|
/* 106 */ "TABLE_SUFFIX",
|
||||||
/* 107 */ "S3_CHUNKSIZE",
|
/* 107 */ "S3_CHUNKPAGES",
|
||||||
/* 108 */ "S3_KEEPLOCAL",
|
/* 108 */ "S3_KEEPLOCAL",
|
||||||
/* 109 */ "S3_COMPACT",
|
/* 109 */ "S3_COMPACT",
|
||||||
/* 110 */ "KEEP_TIME_OFFSET",
|
/* 110 */ "KEEP_TIME_OFFSET",
|
||||||
|
@ -3073,7 +3073,7 @@ static const char *const yyRuleName[] = {
|
||||||
/* 136 */ "db_options ::= db_options STT_TRIGGER NK_INTEGER",
|
/* 136 */ "db_options ::= db_options STT_TRIGGER NK_INTEGER",
|
||||||
/* 137 */ "db_options ::= db_options TABLE_PREFIX signed",
|
/* 137 */ "db_options ::= db_options TABLE_PREFIX signed",
|
||||||
/* 138 */ "db_options ::= db_options TABLE_SUFFIX signed",
|
/* 138 */ "db_options ::= db_options TABLE_SUFFIX signed",
|
||||||
/* 139 */ "db_options ::= db_options S3_CHUNKSIZE NK_INTEGER",
|
/* 139 */ "db_options ::= db_options S3_CHUNKPAGES NK_INTEGER",
|
||||||
/* 140 */ "db_options ::= db_options S3_KEEPLOCAL NK_INTEGER",
|
/* 140 */ "db_options ::= db_options S3_KEEPLOCAL NK_INTEGER",
|
||||||
/* 141 */ "db_options ::= db_options S3_KEEPLOCAL NK_VARIABLE",
|
/* 141 */ "db_options ::= db_options S3_KEEPLOCAL NK_VARIABLE",
|
||||||
/* 142 */ "db_options ::= db_options S3_COMPACT NK_INTEGER",
|
/* 142 */ "db_options ::= db_options S3_COMPACT NK_INTEGER",
|
||||||
|
@ -4534,7 +4534,7 @@ static const YYCODETYPE yyRuleInfoLhs[] = {
|
||||||
415, /* (136) db_options ::= db_options STT_TRIGGER NK_INTEGER */
|
415, /* (136) db_options ::= db_options STT_TRIGGER NK_INTEGER */
|
||||||
415, /* (137) db_options ::= db_options TABLE_PREFIX signed */
|
415, /* (137) db_options ::= db_options TABLE_PREFIX signed */
|
||||||
415, /* (138) db_options ::= db_options TABLE_SUFFIX signed */
|
415, /* (138) db_options ::= db_options TABLE_SUFFIX signed */
|
||||||
415, /* (139) db_options ::= db_options S3_CHUNKSIZE NK_INTEGER */
|
415, /* (139) db_options ::= db_options S3_CHUNKPAGES NK_INTEGER */
|
||||||
415, /* (140) db_options ::= db_options S3_KEEPLOCAL NK_INTEGER */
|
415, /* (140) db_options ::= db_options S3_KEEPLOCAL NK_INTEGER */
|
||||||
415, /* (141) db_options ::= db_options S3_KEEPLOCAL NK_VARIABLE */
|
415, /* (141) db_options ::= db_options S3_KEEPLOCAL NK_VARIABLE */
|
||||||
415, /* (142) db_options ::= db_options S3_COMPACT NK_INTEGER */
|
415, /* (142) db_options ::= db_options S3_COMPACT NK_INTEGER */
|
||||||
|
@ -5324,7 +5324,7 @@ static const signed char yyRuleInfoNRhs[] = {
|
||||||
-3, /* (136) db_options ::= db_options STT_TRIGGER NK_INTEGER */
|
-3, /* (136) db_options ::= db_options STT_TRIGGER NK_INTEGER */
|
||||||
-3, /* (137) db_options ::= db_options TABLE_PREFIX signed */
|
-3, /* (137) db_options ::= db_options TABLE_PREFIX signed */
|
||||||
-3, /* (138) db_options ::= db_options TABLE_SUFFIX signed */
|
-3, /* (138) db_options ::= db_options TABLE_SUFFIX signed */
|
||||||
-3, /* (139) db_options ::= db_options S3_CHUNKSIZE NK_INTEGER */
|
-3, /* (139) db_options ::= db_options S3_CHUNKPAGES NK_INTEGER */
|
||||||
-3, /* (140) db_options ::= db_options S3_KEEPLOCAL NK_INTEGER */
|
-3, /* (140) db_options ::= db_options S3_KEEPLOCAL NK_INTEGER */
|
||||||
-3, /* (141) db_options ::= db_options S3_KEEPLOCAL NK_VARIABLE */
|
-3, /* (141) db_options ::= db_options S3_KEEPLOCAL NK_VARIABLE */
|
||||||
-3, /* (142) db_options ::= db_options S3_COMPACT NK_INTEGER */
|
-3, /* (142) db_options ::= db_options S3_COMPACT NK_INTEGER */
|
||||||
|
@ -6513,8 +6513,8 @@ static YYACTIONTYPE yy_reduce(
|
||||||
{ yylhsminor.yy980 = setDatabaseOption(pCxt, yymsp[-2].minor.yy980, DB_OPTION_TABLE_SUFFIX, yymsp[0].minor.yy980); }
|
{ yylhsminor.yy980 = setDatabaseOption(pCxt, yymsp[-2].minor.yy980, DB_OPTION_TABLE_SUFFIX, yymsp[0].minor.yy980); }
|
||||||
yymsp[-2].minor.yy980 = yylhsminor.yy980;
|
yymsp[-2].minor.yy980 = yylhsminor.yy980;
|
||||||
break;
|
break;
|
||||||
case 139: /* db_options ::= db_options S3_CHUNKSIZE NK_INTEGER */
|
case 139: /* db_options ::= db_options S3_CHUNKPAGES NK_INTEGER */
|
||||||
{ yylhsminor.yy980 = setDatabaseOption(pCxt, yymsp[-2].minor.yy980, DB_OPTION_S3_CHUNKSIZE, &yymsp[0].minor.yy0); }
|
{ yylhsminor.yy980 = setDatabaseOption(pCxt, yymsp[-2].minor.yy980, DB_OPTION_S3_CHUNKPAGES, &yymsp[0].minor.yy0); }
|
||||||
yymsp[-2].minor.yy980 = yylhsminor.yy980;
|
yymsp[-2].minor.yy980 = yylhsminor.yy980;
|
||||||
break;
|
break;
|
||||||
case 140: /* db_options ::= db_options S3_KEEPLOCAL NK_INTEGER */
|
case 140: /* db_options ::= db_options S3_KEEPLOCAL NK_INTEGER */
|
||||||
|
|
|
@ -4133,7 +4133,7 @@ int32_t fltSclBuildDatumFromValueNode(SFltSclDatum *datum, SValueNode *valNode)
|
||||||
}
|
}
|
||||||
case TSDB_DATA_TYPE_BOOL: {
|
case TSDB_DATA_TYPE_BOOL: {
|
||||||
datum->kind = FLT_SCL_DATUM_KIND_INT64;
|
datum->kind = FLT_SCL_DATUM_KIND_INT64;
|
||||||
datum->i = (valNode->datum.b) ? 0 : 1;
|
datum->i = (valNode->datum.b) ? 1 : 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TSDB_DATA_TYPE_TINYINT:
|
case TSDB_DATA_TYPE_TINYINT:
|
||||||
|
@ -4541,6 +4541,7 @@ int32_t filterGetTimeRange(SNode *pNode, STimeWindow *win, bool *isStrict) {
|
||||||
|
|
||||||
if (info->scalarMode) {
|
if (info->scalarMode) {
|
||||||
SArray *colRanges = info->sclCtx.fltSclRange;
|
SArray *colRanges = info->sclCtx.fltSclRange;
|
||||||
|
SOperatorNode *optNode = (SOperatorNode *) pNode;
|
||||||
if (taosArrayGetSize(colRanges) == 1) {
|
if (taosArrayGetSize(colRanges) == 1) {
|
||||||
SFltSclColumnRange *colRange = taosArrayGet(colRanges, 0);
|
SFltSclColumnRange *colRange = taosArrayGet(colRanges, 0);
|
||||||
if (NULL == colRange) {
|
if (NULL == colRange) {
|
||||||
|
@ -4560,7 +4561,8 @@ int32_t filterGetTimeRange(SNode *pNode, STimeWindow *win, bool *isStrict) {
|
||||||
FLT_ERR_JRET(fltSclGetTimeStampDatum(endPt, &end));
|
FLT_ERR_JRET(fltSclGetTimeStampDatum(endPt, &end));
|
||||||
win->skey = start.i;
|
win->skey = start.i;
|
||||||
win->ekey = end.i;
|
win->ekey = end.i;
|
||||||
*isStrict = true;
|
if(optNode->opType == OP_TYPE_IN) *isStrict = false;
|
||||||
|
else *isStrict = true;
|
||||||
goto _return;
|
goto _return;
|
||||||
} else if (taosArrayGetSize(points) == 0) {
|
} else if (taosArrayGetSize(points) == 0) {
|
||||||
*win = TSWINDOW_DESC_INITIALIZER;
|
*win = TSWINDOW_DESC_INITIALIZER;
|
||||||
|
@ -5023,6 +5025,34 @@ int32_t fltSclBuildRangePoints(SFltSclOperator *oper, SArray *points) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case OP_TYPE_IN: {
|
||||||
|
SNodeListNode *listNode = (SNodeListNode *)oper->valNode;
|
||||||
|
SListCell *cell = listNode->pNodeList->pHead;
|
||||||
|
SFltSclDatum minDatum = {.kind = FLT_SCL_DATUM_KIND_INT64, .i = INT64_MAX, .type = oper->colNode->node.resType};
|
||||||
|
SFltSclDatum maxDatum = {.kind = FLT_SCL_DATUM_KIND_INT64, .i = INT64_MIN, .type = oper->colNode->node.resType};
|
||||||
|
for (int32_t i = 0; i < listNode->pNodeList->length; ++i) {
|
||||||
|
SValueNode *valueNode = (SValueNode *)cell->pNode;
|
||||||
|
SFltSclDatum valDatum;
|
||||||
|
FLT_ERR_RET(fltSclBuildDatumFromValueNode(&valDatum, valueNode));
|
||||||
|
if(valueNode->node.resType.type == TSDB_DATA_TYPE_FLOAT || valueNode->node.resType.type == TSDB_DATA_TYPE_DOUBLE) {
|
||||||
|
minDatum.i = TMIN(minDatum.i, valDatum.d);
|
||||||
|
maxDatum.i = TMAX(maxDatum.i, valDatum.d);
|
||||||
|
} else {
|
||||||
|
minDatum.i = TMIN(minDatum.i, valDatum.i);
|
||||||
|
maxDatum.i = TMAX(maxDatum.i, valDatum.i);
|
||||||
|
}
|
||||||
|
cell = cell->pNext;
|
||||||
|
}
|
||||||
|
SFltSclPoint startPt = {.start = true, .excl = false, .val = minDatum};
|
||||||
|
SFltSclPoint endPt = {.start = false, .excl = false, .val = maxDatum};
|
||||||
|
if (NULL == taosArrayPush(points, &startPt)) {
|
||||||
|
FLT_ERR_RET(terrno);
|
||||||
|
}
|
||||||
|
if (NULL == taosArrayPush(points, &endPt)) {
|
||||||
|
FLT_ERR_RET(terrno);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
default: {
|
default: {
|
||||||
qError("not supported operator type : %d when build range points", oper->type);
|
qError("not supported operator type : %d when build range points", oper->type);
|
||||||
break;
|
break;
|
||||||
|
@ -5075,11 +5105,13 @@ static bool fltSclIsCollectableNode(SNode *pNode) {
|
||||||
|
|
||||||
if (!(pOper->opType == OP_TYPE_GREATER_THAN || pOper->opType == OP_TYPE_GREATER_EQUAL ||
|
if (!(pOper->opType == OP_TYPE_GREATER_THAN || pOper->opType == OP_TYPE_GREATER_EQUAL ||
|
||||||
pOper->opType == OP_TYPE_LOWER_THAN || pOper->opType == OP_TYPE_LOWER_EQUAL ||
|
pOper->opType == OP_TYPE_LOWER_THAN || pOper->opType == OP_TYPE_LOWER_EQUAL ||
|
||||||
pOper->opType == OP_TYPE_NOT_EQUAL || pOper->opType == OP_TYPE_EQUAL)) {
|
pOper->opType == OP_TYPE_NOT_EQUAL || pOper->opType == OP_TYPE_EQUAL ||
|
||||||
|
pOper->opType == OP_TYPE_IN)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(nodeType(pOper->pLeft) == QUERY_NODE_COLUMN && nodeType(pOper->pRight) == QUERY_NODE_VALUE)) {
|
if (!((nodeType(pOper->pLeft) == QUERY_NODE_COLUMN && nodeType(pOper->pRight) == QUERY_NODE_VALUE) ||
|
||||||
|
(nodeType(pOper->pLeft) == QUERY_NODE_COLUMN && nodeType(pOper->pRight) == QUERY_NODE_NODE_LIST))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
"replica": 1,
|
"replica": 1,
|
||||||
"duration":"10d",
|
"duration":"10d",
|
||||||
"s3_keeplocal":"30d",
|
"s3_keeplocal":"30d",
|
||||||
"s3_chunksize":"131072",
|
"s3_chunkpages":"131072",
|
||||||
"tsdb_pagesize":"1",
|
"tsdb_pagesize":"1",
|
||||||
"s3_compact":"1",
|
"s3_compact":"1",
|
||||||
"wal_retention_size":"1",
|
"wal_retention_size":"1",
|
||||||
|
|
|
@ -168,13 +168,13 @@ class TDTestCase(TBase):
|
||||||
if keepLocal is not None:
|
if keepLocal is not None:
|
||||||
kw1 = f"s3_keeplocal {keepLocal}"
|
kw1 = f"s3_keeplocal {keepLocal}"
|
||||||
if chunkSize is not None:
|
if chunkSize is not None:
|
||||||
kw2 = f"s3_chunksize {chunkSize}"
|
kw2 = f"s3_chunkpages {chunkSize}"
|
||||||
if compact is not None:
|
if compact is not None:
|
||||||
kw3 = f"s3_compact {compact}"
|
kw3 = f"s3_compact {compact}"
|
||||||
|
|
||||||
sql = f" create database db1 vgroups 1 duration 1h {kw1} {kw2} {kw3}"
|
sql = f" create database db1 vgroups 1 duration 1h {kw1} {kw2} {kw3}"
|
||||||
tdSql.execute(sql, show=True)
|
tdSql.execute(sql, show=True)
|
||||||
#sql = f"select name,s3_keeplocal,s3_chunksize,s3_compact from information_schema.ins_databases where name='db1';"
|
#sql = f"select name,s3_keeplocal,s3_chunkpages,s3_compact from information_schema.ins_databases where name='db1';"
|
||||||
sql = f"select * from information_schema.ins_databases where name='db1';"
|
sql = f"select * from information_schema.ins_databases where name='db1';"
|
||||||
tdSql.query(sql)
|
tdSql.query(sql)
|
||||||
# 29 30 31 -> chunksize keeplocal compact
|
# 29 30 31 -> chunksize keeplocal compact
|
||||||
|
@ -194,9 +194,9 @@ class TDTestCase(TBase):
|
||||||
f"create database db2 s3_keeplocal -1",
|
f"create database db2 s3_keeplocal -1",
|
||||||
f"create database db2 s3_keeplocal 0",
|
f"create database db2 s3_keeplocal 0",
|
||||||
f"create database db2 s3_keeplocal 365001",
|
f"create database db2 s3_keeplocal 365001",
|
||||||
f"create database db2 s3_chunksize -1",
|
f"create database db2 s3_chunkpages -1",
|
||||||
f"create database db2 s3_chunksize 0",
|
f"create database db2 s3_chunkpages 0",
|
||||||
f"create database db2 s3_chunksize 900000000",
|
f"create database db2 s3_chunkpages 900000000",
|
||||||
f"create database db2 s3_compact -1",
|
f"create database db2 s3_compact -1",
|
||||||
f"create database db2 s3_compact 100",
|
f"create database db2 s3_compact 100",
|
||||||
f"create database db2 duration 1d s3_keeplocal 1d"
|
f"create database db2 duration 1d s3_keeplocal 1d"
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
"replica": 1,
|
"replica": 1,
|
||||||
"duration":"10d",
|
"duration":"10d",
|
||||||
"s3_keeplocal":"30d",
|
"s3_keeplocal":"30d",
|
||||||
"s3_chunksize":"131072",
|
"s3_chunkpages":"131072",
|
||||||
"tsdb_pagesize":"1",
|
"tsdb_pagesize":"1",
|
||||||
"s3_compact":"1",
|
"s3_compact":"1",
|
||||||
"wal_retention_size":"1",
|
"wal_retention_size":"1",
|
||||||
|
|
|
@ -202,13 +202,13 @@ class TDTestCase(TBase):
|
||||||
if keepLocal is not None:
|
if keepLocal is not None:
|
||||||
kw1 = f"s3_keeplocal {keepLocal}"
|
kw1 = f"s3_keeplocal {keepLocal}"
|
||||||
if chunkSize is not None:
|
if chunkSize is not None:
|
||||||
kw2 = f"s3_chunksize {chunkSize}"
|
kw2 = f"s3_chunkpages {chunkSize}"
|
||||||
if compact is not None:
|
if compact is not None:
|
||||||
kw3 = f"s3_compact {compact}"
|
kw3 = f"s3_compact {compact}"
|
||||||
|
|
||||||
sql = f" create database db1 vgroups 1 duration 1h {kw1} {kw2} {kw3}"
|
sql = f" create database db1 vgroups 1 duration 1h {kw1} {kw2} {kw3}"
|
||||||
tdSql.execute(sql, show=True)
|
tdSql.execute(sql, show=True)
|
||||||
# sql = f"select name,s3_keeplocal,s3_chunksize,s3_compact from information_schema.ins_databases where name='db1';"
|
# sql = f"select name,s3_keeplocal,s3_chunkpages,s3_compact from information_schema.ins_databases where name='db1';"
|
||||||
sql = f"select * from information_schema.ins_databases where name='db1';"
|
sql = f"select * from information_schema.ins_databases where name='db1';"
|
||||||
tdSql.query(sql)
|
tdSql.query(sql)
|
||||||
# 29 30 31 -> chunksize keeplocal compact
|
# 29 30 31 -> chunksize keeplocal compact
|
||||||
|
@ -228,9 +228,9 @@ class TDTestCase(TBase):
|
||||||
f"create database db2 s3_keeplocal -1",
|
f"create database db2 s3_keeplocal -1",
|
||||||
f"create database db2 s3_keeplocal 0",
|
f"create database db2 s3_keeplocal 0",
|
||||||
f"create database db2 s3_keeplocal 365001",
|
f"create database db2 s3_keeplocal 365001",
|
||||||
f"create database db2 s3_chunksize -1",
|
f"create database db2 s3_chunkpages -1",
|
||||||
f"create database db2 s3_chunksize 0",
|
f"create database db2 s3_chunkpages 0",
|
||||||
f"create database db2 s3_chunksize 900000000",
|
f"create database db2 s3_chunkpages 900000000",
|
||||||
f"create database db2 s3_compact -1",
|
f"create database db2 s3_compact -1",
|
||||||
f"create database db2 s3_compact 100",
|
f"create database db2 s3_compact 100",
|
||||||
f"create database db2 duration 1d s3_keeplocal 1d"
|
f"create database db2 duration 1d s3_keeplocal 1d"
|
||||||
|
|
|
@ -42,17 +42,17 @@ class TDTestCase:
|
||||||
tdSql.query('show create database scd;')
|
tdSql.query('show create database scd;')
|
||||||
tdSql.checkRows(1)
|
tdSql.checkRows(1)
|
||||||
tdSql.checkData(0, 0, 'scd')
|
tdSql.checkData(0, 0, 'scd')
|
||||||
tdSql.checkData(0, 1, "CREATE DATABASE `scd` BUFFER 256 CACHESIZE 1 CACHEMODEL 'none' COMP 2 DURATION 10d WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 STT_TRIGGER 2 KEEP 3650d,3650d,3650d PAGES 256 PAGESIZE 4 PRECISION 'ms' REPLICA 1 WAL_LEVEL 1 VGROUPS 2 SINGLE_STABLE 0 TABLE_PREFIX 0 TABLE_SUFFIX 0 TSDB_PAGESIZE 4 WAL_RETENTION_PERIOD 3600 WAL_RETENTION_SIZE 0 KEEP_TIME_OFFSET 0 ENCRYPT_ALGORITHM 'none' S3_CHUNKSIZE 262144 S3_KEEPLOCAL 525600m S3_COMPACT 1")
|
tdSql.checkData(0, 1, "CREATE DATABASE `scd` BUFFER 256 CACHESIZE 1 CACHEMODEL 'none' COMP 2 DURATION 10d WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 STT_TRIGGER 2 KEEP 3650d,3650d,3650d PAGES 256 PAGESIZE 4 PRECISION 'ms' REPLICA 1 WAL_LEVEL 1 VGROUPS 2 SINGLE_STABLE 0 TABLE_PREFIX 0 TABLE_SUFFIX 0 TSDB_PAGESIZE 4 WAL_RETENTION_PERIOD 3600 WAL_RETENTION_SIZE 0 KEEP_TIME_OFFSET 0 ENCRYPT_ALGORITHM 'none' S3_CHUNKPAGES 131072 S3_KEEPLOCAL 525600m S3_COMPACT 1")
|
||||||
|
|
||||||
tdSql.query('show create database scd2;')
|
tdSql.query('show create database scd2;')
|
||||||
tdSql.checkRows(1)
|
tdSql.checkRows(1)
|
||||||
tdSql.checkData(0, 0, 'scd2')
|
tdSql.checkData(0, 0, 'scd2')
|
||||||
tdSql.checkData(0, 1, "CREATE DATABASE `scd2` BUFFER 256 CACHESIZE 1 CACHEMODEL 'none' COMP 2 DURATION 10d WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 STT_TRIGGER 3 KEEP 3650d,3650d,3650d PAGES 256 PAGESIZE 4 PRECISION 'ms' REPLICA 1 WAL_LEVEL 1 VGROUPS 2 SINGLE_STABLE 0 TABLE_PREFIX 0 TABLE_SUFFIX 0 TSDB_PAGESIZE 4 WAL_RETENTION_PERIOD 3600 WAL_RETENTION_SIZE 0 KEEP_TIME_OFFSET 0 ENCRYPT_ALGORITHM 'none' S3_CHUNKSIZE 262144 S3_KEEPLOCAL 525600m S3_COMPACT 1")
|
tdSql.checkData(0, 1, "CREATE DATABASE `scd2` BUFFER 256 CACHESIZE 1 CACHEMODEL 'none' COMP 2 DURATION 10d WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 STT_TRIGGER 3 KEEP 3650d,3650d,3650d PAGES 256 PAGESIZE 4 PRECISION 'ms' REPLICA 1 WAL_LEVEL 1 VGROUPS 2 SINGLE_STABLE 0 TABLE_PREFIX 0 TABLE_SUFFIX 0 TSDB_PAGESIZE 4 WAL_RETENTION_PERIOD 3600 WAL_RETENTION_SIZE 0 KEEP_TIME_OFFSET 0 ENCRYPT_ALGORITHM 'none' S3_CHUNKPAGES 131072 S3_KEEPLOCAL 525600m S3_COMPACT 1")
|
||||||
|
|
||||||
tdSql.query('show create database scd4')
|
tdSql.query('show create database scd4')
|
||||||
tdSql.checkRows(1)
|
tdSql.checkRows(1)
|
||||||
tdSql.checkData(0, 0, 'scd4')
|
tdSql.checkData(0, 0, 'scd4')
|
||||||
tdSql.checkData(0, 1, "CREATE DATABASE `scd4` BUFFER 256 CACHESIZE 1 CACHEMODEL 'none' COMP 2 DURATION 10d WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 STT_TRIGGER 13 KEEP 3650d,3650d,3650d PAGES 256 PAGESIZE 4 PRECISION 'ms' REPLICA 1 WAL_LEVEL 1 VGROUPS 2 SINGLE_STABLE 0 TABLE_PREFIX 0 TABLE_SUFFIX 0 TSDB_PAGESIZE 4 WAL_RETENTION_PERIOD 3600 WAL_RETENTION_SIZE 0 KEEP_TIME_OFFSET 0 ENCRYPT_ALGORITHM 'none' S3_CHUNKSIZE 262144 S3_KEEPLOCAL 525600m S3_COMPACT 1")
|
tdSql.checkData(0, 1, "CREATE DATABASE `scd4` BUFFER 256 CACHESIZE 1 CACHEMODEL 'none' COMP 2 DURATION 10d WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 STT_TRIGGER 13 KEEP 3650d,3650d,3650d PAGES 256 PAGESIZE 4 PRECISION 'ms' REPLICA 1 WAL_LEVEL 1 VGROUPS 2 SINGLE_STABLE 0 TABLE_PREFIX 0 TABLE_SUFFIX 0 TSDB_PAGESIZE 4 WAL_RETENTION_PERIOD 3600 WAL_RETENTION_SIZE 0 KEEP_TIME_OFFSET 0 ENCRYPT_ALGORITHM 'none' S3_CHUNKPAGES 131072 S3_KEEPLOCAL 525600m S3_COMPACT 1")
|
||||||
|
|
||||||
|
|
||||||
self.restartTaosd(1, dbname='scd')
|
self.restartTaosd(1, dbname='scd')
|
||||||
|
@ -60,16 +60,16 @@ class TDTestCase:
|
||||||
tdSql.query('show create database scd;')
|
tdSql.query('show create database scd;')
|
||||||
tdSql.checkRows(1)
|
tdSql.checkRows(1)
|
||||||
tdSql.checkData(0, 0, 'scd')
|
tdSql.checkData(0, 0, 'scd')
|
||||||
tdSql.checkData(0, 1, "CREATE DATABASE `scd` BUFFER 256 CACHESIZE 1 CACHEMODEL 'none' COMP 2 DURATION 10d WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 STT_TRIGGER 2 KEEP 3650d,3650d,3650d PAGES 256 PAGESIZE 4 PRECISION 'ms' REPLICA 1 WAL_LEVEL 1 VGROUPS 2 SINGLE_STABLE 0 TABLE_PREFIX 0 TABLE_SUFFIX 0 TSDB_PAGESIZE 4 WAL_RETENTION_PERIOD 3600 WAL_RETENTION_SIZE 0 KEEP_TIME_OFFSET 0 ENCRYPT_ALGORITHM 'none' S3_CHUNKSIZE 262144 S3_KEEPLOCAL 525600m S3_COMPACT 1")
|
tdSql.checkData(0, 1, "CREATE DATABASE `scd` BUFFER 256 CACHESIZE 1 CACHEMODEL 'none' COMP 2 DURATION 10d WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 STT_TRIGGER 2 KEEP 3650d,3650d,3650d PAGES 256 PAGESIZE 4 PRECISION 'ms' REPLICA 1 WAL_LEVEL 1 VGROUPS 2 SINGLE_STABLE 0 TABLE_PREFIX 0 TABLE_SUFFIX 0 TSDB_PAGESIZE 4 WAL_RETENTION_PERIOD 3600 WAL_RETENTION_SIZE 0 KEEP_TIME_OFFSET 0 ENCRYPT_ALGORITHM 'none' S3_CHUNKPAGES 131072 S3_KEEPLOCAL 525600m S3_COMPACT 1")
|
||||||
|
|
||||||
tdSql.query('show create database scd2;')
|
tdSql.query('show create database scd2;')
|
||||||
tdSql.checkRows(1)
|
tdSql.checkRows(1)
|
||||||
tdSql.checkData(0, 0, 'scd2')
|
tdSql.checkData(0, 0, 'scd2')
|
||||||
tdSql.checkData(0, 1, "CREATE DATABASE `scd2` BUFFER 256 CACHESIZE 1 CACHEMODEL 'none' COMP 2 DURATION 10d WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 STT_TRIGGER 3 KEEP 3650d,3650d,3650d PAGES 256 PAGESIZE 4 PRECISION 'ms' REPLICA 1 WAL_LEVEL 1 VGROUPS 2 SINGLE_STABLE 0 TABLE_PREFIX 0 TABLE_SUFFIX 0 TSDB_PAGESIZE 4 WAL_RETENTION_PERIOD 3600 WAL_RETENTION_SIZE 0 KEEP_TIME_OFFSET 0 ENCRYPT_ALGORITHM 'none' S3_CHUNKSIZE 262144 S3_KEEPLOCAL 525600m S3_COMPACT 1")
|
tdSql.checkData(0, 1, "CREATE DATABASE `scd2` BUFFER 256 CACHESIZE 1 CACHEMODEL 'none' COMP 2 DURATION 10d WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 STT_TRIGGER 3 KEEP 3650d,3650d,3650d PAGES 256 PAGESIZE 4 PRECISION 'ms' REPLICA 1 WAL_LEVEL 1 VGROUPS 2 SINGLE_STABLE 0 TABLE_PREFIX 0 TABLE_SUFFIX 0 TSDB_PAGESIZE 4 WAL_RETENTION_PERIOD 3600 WAL_RETENTION_SIZE 0 KEEP_TIME_OFFSET 0 ENCRYPT_ALGORITHM 'none' S3_CHUNKPAGES 131072 S3_KEEPLOCAL 525600m S3_COMPACT 1")
|
||||||
tdSql.query('show create database scd4')
|
tdSql.query('show create database scd4')
|
||||||
tdSql.checkRows(1)
|
tdSql.checkRows(1)
|
||||||
tdSql.checkData(0, 0, 'scd4')
|
tdSql.checkData(0, 0, 'scd4')
|
||||||
tdSql.checkData(0, 1, "CREATE DATABASE `scd4` BUFFER 256 CACHESIZE 1 CACHEMODEL 'none' COMP 2 DURATION 10d WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 STT_TRIGGER 13 KEEP 3650d,3650d,3650d PAGES 256 PAGESIZE 4 PRECISION 'ms' REPLICA 1 WAL_LEVEL 1 VGROUPS 2 SINGLE_STABLE 0 TABLE_PREFIX 0 TABLE_SUFFIX 0 TSDB_PAGESIZE 4 WAL_RETENTION_PERIOD 3600 WAL_RETENTION_SIZE 0 KEEP_TIME_OFFSET 0 ENCRYPT_ALGORITHM 'none' S3_CHUNKSIZE 262144 S3_KEEPLOCAL 525600m S3_COMPACT 1")
|
tdSql.checkData(0, 1, "CREATE DATABASE `scd4` BUFFER 256 CACHESIZE 1 CACHEMODEL 'none' COMP 2 DURATION 10d WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 STT_TRIGGER 13 KEEP 3650d,3650d,3650d PAGES 256 PAGESIZE 4 PRECISION 'ms' REPLICA 1 WAL_LEVEL 1 VGROUPS 2 SINGLE_STABLE 0 TABLE_PREFIX 0 TABLE_SUFFIX 0 TSDB_PAGESIZE 4 WAL_RETENTION_PERIOD 3600 WAL_RETENTION_SIZE 0 KEEP_TIME_OFFSET 0 ENCRYPT_ALGORITHM 'none' S3_CHUNKPAGES 131072 S3_KEEPLOCAL 525600m S3_COMPACT 1")
|
||||||
|
|
||||||
|
|
||||||
tdSql.execute('drop database scd')
|
tdSql.execute('drop database scd')
|
||||||
|
|
|
@ -35,6 +35,14 @@ if $rows != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
sql explain verbose true select * from tb1 where tts in ('2022-07-10 16:31:01', '2022-07-10 16:31:03', 1657441865000);
|
||||||
|
if $rows != 3 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data20 != @ Time Range: [-9223372036854775808, 9223372036854775807]@ then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
sql select * from tb1 where fbool in (0, 3);
|
sql select * from tb1 where fbool in (0, 3);
|
||||||
if $rows != 5 then
|
if $rows != 5 then
|
||||||
return -1
|
return -1
|
||||||
|
@ -80,4 +88,45 @@ if $rows != 0 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
sql explain verbose true select * from tb1 where fts in ('2022-07-10 16:31:00', '2022-07-10 16:33:00', 1657441840000);
|
||||||
|
if $rows != 4 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data20 != @ Time Range: [1657441840000, 1657441980000]@ then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql explain verbose true select * from tb1 where fts in ('2022-07-10 16:31:00', '2022-07-10 16:33:00', 1657441840000, true);
|
||||||
|
if $rows != 4 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data20 != @ Time Range: [1, 1657441980000]@ then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql explain verbose true select * from tb1 where fts in ('2022-07-10 16:31:00', '2022-07-10 16:33:00', 1657441840000, false);
|
||||||
|
if $rows != 4 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data20 != @ Time Range: [0, 1657441980000]@ then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql explain verbose true select * from tb1 where fts in ('2022-07-10 16:31:00', '2022-07-10 16:33:00', 1657441840000, 1.02);
|
||||||
|
if $rows != 4 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data20 != @ Time Range: [1, 1657441980000]@ then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql explain verbose true select * from tb1 where fts in ('2022-07-10 16:31:00', '2022-07-10 16:33:00', 1657441840000, -1.02);
|
||||||
|
if $rows != 4 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data20 != @ Time Range: [-1, 1657441980000]@ then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql_error explain verbose true select * from tb1 where fts in ('2022-07-10 16:31:00', '2022-07-10 16:33:00', 1657441840000, 'abc');
|
||||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||||
|
|
|
@ -35,10 +35,11 @@ class TDTestCase:
|
||||||
|
|
||||||
def balance_vnode(self):
|
def balance_vnode(self):
|
||||||
leader_before = self.get_leader()
|
leader_before = self.get_leader()
|
||||||
tdSql.query("balance vgroup leader")
|
|
||||||
while True:
|
while True:
|
||||||
leader_after = -1
|
leader_after = -1
|
||||||
tdLog.debug("balancing vgroup leader")
|
tdLog.debug("balancing vgroup leader")
|
||||||
|
tdSql.execute("balance vgroup leader")
|
||||||
while True:
|
while True:
|
||||||
tdLog.debug("get new vgroup leader")
|
tdLog.debug("get new vgroup leader")
|
||||||
leader_after = self.get_leader()
|
leader_after = self.get_leader()
|
||||||
|
@ -51,6 +52,7 @@ class TDTestCase:
|
||||||
break
|
break
|
||||||
else :
|
else :
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
tdLog.debug("leader not changed")
|
||||||
|
|
||||||
|
|
||||||
def consume_TS_4674_Test(self):
|
def consume_TS_4674_Test(self):
|
||||||
|
|
|
@ -49,3 +49,32 @@ target_include_directories(
|
||||||
)
|
)
|
||||||
|
|
||||||
SET_TARGET_PROPERTIES(shell PROPERTIES OUTPUT_NAME taos)
|
SET_TARGET_PROPERTIES(shell PROPERTIES OUTPUT_NAME taos)
|
||||||
|
|
||||||
|
#
|
||||||
|
# generator library shell_ut for uint test
|
||||||
|
#
|
||||||
|
|
||||||
|
IF(TD_LINUX)
|
||||||
|
# include
|
||||||
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc)
|
||||||
|
# shell_ut library
|
||||||
|
add_library(shell_ut STATIC ${SHELL_SRC})
|
||||||
|
|
||||||
|
IF(TD_WEBSOCKET)
|
||||||
|
ADD_DEPENDENCIES(shell_ut taosws-rs)
|
||||||
|
ENDIF()
|
||||||
|
target_link_libraries(shell_ut PUBLIC taos ${LINK_WEBSOCKET} ${LINK_JEMALLOC} ${LINK_ARGP})
|
||||||
|
target_link_libraries(shell_ut PRIVATE os common transport geometry util)
|
||||||
|
|
||||||
|
# util depends
|
||||||
|
target_link_directories(
|
||||||
|
shell_ut
|
||||||
|
PUBLIC "${TD_SOURCE_DIR}/contrib/lzma2"
|
||||||
|
PUBLIC "${TD_SOURCE_DIR}/contrib/pcre2"
|
||||||
|
)
|
||||||
|
|
||||||
|
# unit test
|
||||||
|
IF(${BUILD_TEST})
|
||||||
|
ADD_SUBDIRECTORY(test)
|
||||||
|
ENDIF(${BUILD_TEST})
|
||||||
|
ENDIF()
|
||||||
|
|
|
@ -16,6 +16,10 @@
|
||||||
#ifndef __SHELL_AUTO__
|
#ifndef __SHELL_AUTO__
|
||||||
#define __SHELL_AUTO__
|
#define __SHELL_AUTO__
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "shellInt.h"
|
#include "shellInt.h"
|
||||||
|
|
||||||
#define TAB_KEY 0x09
|
#define TAB_KEY 0x09
|
||||||
|
@ -47,4 +51,15 @@ void showAD(bool end);
|
||||||
// show all commands help
|
// show all commands help
|
||||||
void showHelp();
|
void showHelp();
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// for unit test
|
||||||
|
//
|
||||||
|
bool fieldOptionsArea(char* p);
|
||||||
|
bool isCreateFieldsArea(char* p);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -46,6 +46,7 @@ typedef struct SWord {
|
||||||
int32_t len;
|
int32_t len;
|
||||||
struct SWord* next;
|
struct SWord* next;
|
||||||
bool free; // if true need free
|
bool free; // if true need free
|
||||||
|
bool end; // if true is last keyword
|
||||||
} SWord;
|
} SWord;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -95,59 +96,62 @@ SWords shellCommands[] = {
|
||||||
"<db_options> <anyword> <db_options> <anyword> ;", 0, 0, NULL},
|
"<db_options> <anyword> <db_options> <anyword> ;", 0, 0, NULL},
|
||||||
{"create dnode <anyword>", 0, 0, NULL},
|
{"create dnode <anyword>", 0, 0, NULL},
|
||||||
{"create index <anyword> on <stb_name> ()", 0, 0, NULL},
|
{"create index <anyword> on <stb_name> ()", 0, 0, NULL},
|
||||||
{"create mnode on dnode <dnode_id> ;", 0, 0, NULL},
|
{"create mnode on dnode <dnode_id>;", 0, 0, NULL},
|
||||||
{"create qnode on dnode <dnode_id> ;", 0, 0, NULL},
|
{"create qnode on dnode <dnode_id>;", 0, 0, NULL},
|
||||||
{"create stream <anyword> into <anyword> as select", 0, 0, NULL}, // 26 append sub sql
|
{"create stream <anyword> into <anyword> as select", 0, 0, NULL}, // 26 append sub sql
|
||||||
{"create topic <anyword> as select", 0, 0, NULL}, // 27 append sub sql
|
{"create topic <anyword> as select", 0, 0, NULL}, // 27 append sub sql
|
||||||
{"create function <anyword> as <anyword> outputtype <data_types> language <udf_language>", 0, 0, NULL},
|
{"create tsma <anyword> on <all_table> function", 0, 0, NULL},
|
||||||
{"create or replace <anyword> as <anyword> outputtype <data_types> language <udf_language>", 0, 0, NULL},
|
{"create recursive tsma <anyword> on <tsma_name> interval(", 0, 0, NULL},
|
||||||
{"create aggregate function <anyword> as <anyword> outputtype <data_types> bufsize <anyword> language <udf_language>", 0, 0, NULL},
|
{"create function <anyword> as <anyword> outputtype <data_types> language <udf_language>;", 0, 0, NULL},
|
||||||
{"create or replace aggregate function <anyword> as <anyword> outputtype <data_types> bufsize <anyword> language <udf_language>", 0, 0, NULL},
|
{"create or replace <anyword> as <anyword> outputtype <data_types> language <udf_language>;", 0, 0, NULL},
|
||||||
|
{"create aggregate function <anyword> as <anyword> outputtype <data_types> bufsize <anyword> language <udf_language>;", 0, 0, NULL},
|
||||||
|
{"create or replace aggregate function <anyword> as <anyword> outputtype <data_types> bufsize <anyword> language <udf_language>;", 0, 0, NULL},
|
||||||
{"create user <anyword> pass <anyword> sysinfo 0;", 0, 0, NULL},
|
{"create user <anyword> pass <anyword> sysinfo 0;", 0, 0, NULL},
|
||||||
{"create user <anyword> pass <anyword> sysinfo 1;", 0, 0, NULL},
|
{"create user <anyword> pass <anyword> sysinfo 1;", 0, 0, NULL},
|
||||||
#ifdef TD_ENTERPRISE
|
#ifdef TD_ENTERPRISE
|
||||||
{"create view <anyword> as select", 0, 0, NULL},
|
{"create view <anyword> as select", 0, 0, NULL},
|
||||||
{"compact database <db_name>", 0, 0, NULL},
|
{"compact database <db_name>", 0, 0, NULL},
|
||||||
#endif
|
#endif
|
||||||
{"describe <all_table>", 0, 0, NULL},
|
{"describe <all_table>;", 0, 0, NULL},
|
||||||
{"delete from <all_table> where ", 0, 0, NULL},
|
{"delete from <all_table> where ", 0, 0, NULL},
|
||||||
{"drop database <db_name>", 0, 0, NULL},
|
{"drop database <db_name>;", 0, 0, NULL},
|
||||||
{"drop index <anyword>", 0, 0, NULL},
|
{"drop index <anyword>;", 0, 0, NULL},
|
||||||
{"drop table <all_table>", 0, 0, NULL},
|
{"drop table <all_table>;", 0, 0, NULL},
|
||||||
{"drop dnode <dnode_id>", 0, 0, NULL},
|
{"drop dnode <dnode_id>;", 0, 0, NULL},
|
||||||
{"drop mnode on dnode <dnode_id> ;", 0, 0, NULL},
|
{"drop mnode on dnode <dnode_id>;", 0, 0, NULL},
|
||||||
{"drop qnode on dnode <dnode_id> ;", 0, 0, NULL},
|
{"drop qnode on dnode <dnode_id>;", 0, 0, NULL},
|
||||||
{"drop user <user_name> ;", 0, 0, NULL},
|
{"drop user <user_name>;", 0, 0, NULL},
|
||||||
// 40
|
// 40
|
||||||
{"drop function <udf_name> ;", 0, 0, NULL},
|
{"drop function <udf_name>;", 0, 0, NULL},
|
||||||
{"drop consumer group <anyword> on ", 0, 0, NULL},
|
{"drop consumer group <anyword> on ", 0, 0, NULL},
|
||||||
{"drop topic <topic_name> ;", 0, 0, NULL},
|
{"drop topic <topic_name>;", 0, 0, NULL},
|
||||||
{"drop stream <stream_name> ;", 0, 0, NULL},
|
{"drop stream <stream_name>;", 0, 0, NULL},
|
||||||
{"explain select", 0, 0, NULL}, // 44 append sub sql
|
{"drop tsma <tsma_name>;", 0, 0, NULL},
|
||||||
{"flush database <db_name> ;", 0, 0, NULL},
|
{"explain select ", 0, 0, NULL}, // 44 append sub sql
|
||||||
|
{"flush database <db_name>;", 0, 0, NULL},
|
||||||
{"help;", 0, 0, NULL},
|
{"help;", 0, 0, NULL},
|
||||||
{"grant all on <anyword> to <user_name> ;", 0, 0, NULL},
|
{"grant all on <anyword> to <user_name>;", 0, 0, NULL},
|
||||||
{"grant read on <anyword> to <user_name> ;", 0, 0, NULL},
|
{"grant read on <anyword> to <user_name>;", 0, 0, NULL},
|
||||||
{"grant write on <anyword> to <user_name> ;", 0, 0, NULL},
|
{"grant write on <anyword> to <user_name>;", 0, 0, NULL},
|
||||||
{"kill connection <anyword> ;", 0, 0, NULL},
|
{"kill connection <anyword>;", 0, 0, NULL},
|
||||||
{"kill query ", 0, 0, NULL},
|
{"kill query ", 0, 0, NULL},
|
||||||
{"kill transaction ", 0, 0, NULL},
|
{"kill transaction ", 0, 0, NULL},
|
||||||
#ifdef TD_ENTERPRISE
|
#ifdef TD_ENTERPRISE
|
||||||
{"merge vgroup <vgroup_id> <vgroup_id>", 0, 0, NULL},
|
{"merge vgroup <vgroup_id> <vgroup_id>;", 0, 0, NULL},
|
||||||
#endif
|
#endif
|
||||||
{"pause stream <stream_name> ;", 0, 0, NULL},
|
{"pause stream <stream_name>;", 0, 0, NULL},
|
||||||
#ifdef TD_ENTERPRISE
|
#ifdef TD_ENTERPRISE
|
||||||
{"redistribute vgroup <vgroup_id> dnode <dnode_id> ;", 0, 0, NULL},
|
{"redistribute vgroup <vgroup_id> dnode <dnode_id>;", 0, 0, NULL},
|
||||||
#endif
|
#endif
|
||||||
{"resume stream <stream_name> ;", 0, 0, NULL},
|
{"resume stream <stream_name>;", 0, 0, NULL},
|
||||||
{"reset query cache;", 0, 0, NULL},
|
{"reset query cache;", 0, 0, NULL},
|
||||||
{"restore dnode <dnode_id> ;", 0, 0, NULL},
|
{"restore dnode <dnode_id>;", 0, 0, NULL},
|
||||||
{"restore vnode on dnode <dnode_id> ;", 0, 0, NULL},
|
{"restore vnode on dnode <dnode_id>;", 0, 0, NULL},
|
||||||
{"restore mnode on dnode <dnode_id> ;", 0, 0, NULL},
|
{"restore mnode on dnode <dnode_id>;", 0, 0, NULL},
|
||||||
{"restore qnode on dnode <dnode_id> ;", 0, 0, NULL},
|
{"restore qnode on dnode <dnode_id>;", 0, 0, NULL},
|
||||||
{"revoke all on <anyword> from <user_name> ;", 0, 0, NULL},
|
{"revoke all on <anyword> from <user_name>;", 0, 0, NULL},
|
||||||
{"revoke read on <anyword> from <user_name> ;", 0, 0, NULL},
|
{"revoke read on <anyword> from <user_name>;", 0, 0, NULL},
|
||||||
{"revoke write on <anyword> from <user_name> ;", 0, 0, NULL},
|
{"revoke write on <anyword> from <user_name>;", 0, 0, NULL},
|
||||||
{"select * from <all_table>", 0, 0, NULL},
|
{"select * from <all_table>", 0, 0, NULL},
|
||||||
{"select client_version();", 0, 0, NULL},
|
{"select client_version();", 0, 0, NULL},
|
||||||
// 60
|
// 60
|
||||||
|
@ -160,15 +164,17 @@ SWords shellCommands[] = {
|
||||||
{"select timezone();", 0, 0, NULL},
|
{"select timezone();", 0, 0, NULL},
|
||||||
{"set max_binary_display_width ", 0, 0, NULL},
|
{"set max_binary_display_width ", 0, 0, NULL},
|
||||||
{"show apps;", 0, 0, NULL},
|
{"show apps;", 0, 0, NULL},
|
||||||
|
{"show alive;", 0, 0, NULL},
|
||||||
{"show create database <db_name> \\G;", 0, 0, NULL},
|
{"show create database <db_name> \\G;", 0, 0, NULL},
|
||||||
{"show create stable <stb_name> \\G;", 0, 0, NULL},
|
{"show create stable <stb_name> \\G;", 0, 0, NULL},
|
||||||
{"show create table <tb_name> \\G;", 0, 0, NULL},
|
{"show create table <tb_name> \\G;", 0, 0, NULL},
|
||||||
#ifdef TD_ENTERPRISE
|
#ifdef TD_ENTERPRISE
|
||||||
{"show create view <all_table> \\G;", 0, 0, NULL},
|
{"show create view <all_table> \\G;", 0, 0, NULL},
|
||||||
#endif
|
|
||||||
{"show connections;", 0, 0, NULL},
|
|
||||||
{"show compact", 0, 0, NULL},
|
{"show compact", 0, 0, NULL},
|
||||||
{"show compacts;", 0, 0, NULL},
|
{"show compacts;", 0, 0, NULL},
|
||||||
|
|
||||||
|
#endif
|
||||||
|
{"show connections;", 0, 0, NULL},
|
||||||
{"show cluster;", 0, 0, NULL},
|
{"show cluster;", 0, 0, NULL},
|
||||||
{"show cluster alive;", 0, 0, NULL},
|
{"show cluster alive;", 0, 0, NULL},
|
||||||
{"show cluster machines;", 0, 0, NULL},
|
{"show cluster machines;", 0, 0, NULL},
|
||||||
|
@ -190,16 +196,17 @@ SWords shellCommands[] = {
|
||||||
{"show subscriptions;", 0, 0, NULL},
|
{"show subscriptions;", 0, 0, NULL},
|
||||||
{"show tables;", 0, 0, NULL},
|
{"show tables;", 0, 0, NULL},
|
||||||
{"show tables like", 0, 0, NULL},
|
{"show tables like", 0, 0, NULL},
|
||||||
{"show table distributed <all_table>", 0, 0, NULL},
|
{"show table distributed <all_table>;", 0, 0, NULL},
|
||||||
{"show tags from <tb_name>", 0, 0, NULL},
|
{"show tags from <tb_name>;", 0, 0, NULL},
|
||||||
{"show tags from <db_name>", 0, 0, NULL},
|
{"show table tags from <all_table>;", 0, 0, NULL},
|
||||||
{"show table tags from <all_table>", 0, 0, NULL},
|
|
||||||
{"show topics;", 0, 0, NULL},
|
{"show topics;", 0, 0, NULL},
|
||||||
{"show transactions;", 0, 0, NULL},
|
{"show transactions;", 0, 0, NULL},
|
||||||
|
{"show tsmas;", 0, 0, NULL},
|
||||||
{"show users;", 0, 0, NULL},
|
{"show users;", 0, 0, NULL},
|
||||||
{"show variables;", 0, 0, NULL},
|
{"show variables;", 0, 0, NULL},
|
||||||
{"show local variables;", 0, 0, NULL},
|
{"show local variables;", 0, 0, NULL},
|
||||||
{"show vnodes <dnode_id>", 0, 0, NULL},
|
{"show vnodes;", 0, 0, NULL},
|
||||||
|
{"show vnodes on dnode <dnode_id>;", 0, 0, NULL},
|
||||||
{"show vgroups;", 0, 0, NULL},
|
{"show vgroups;", 0, 0, NULL},
|
||||||
{"show consumers;", 0, 0, NULL},
|
{"show consumers;", 0, 0, NULL},
|
||||||
{"show grants;", 0, 0, NULL},
|
{"show grants;", 0, 0, NULL},
|
||||||
|
@ -207,22 +214,26 @@ SWords shellCommands[] = {
|
||||||
{"show grants logs;", 0, 0, NULL},
|
{"show grants logs;", 0, 0, NULL},
|
||||||
#ifdef TD_ENTERPRISE
|
#ifdef TD_ENTERPRISE
|
||||||
{"show views;", 0, 0, NULL},
|
{"show views;", 0, 0, NULL},
|
||||||
{"split vgroup <vgroup_id>", 0, 0, NULL},
|
{"show arbgroups;", 0, 0, NULL},
|
||||||
|
{"split vgroup <vgroup_id>;", 0, 0, NULL},
|
||||||
|
{"s3migrate database <db_name>;", 0, 0, NULL},
|
||||||
#endif
|
#endif
|
||||||
{"insert into <tb_name> values(", 0, 0, NULL},
|
{"insert into <tb_name> values(", 0, 0, NULL},
|
||||||
{"insert into <tb_name> using <stb_name> tags(", 0, 0, NULL},
|
{"insert into <tb_name> using <stb_name> tags(", 0, 0, NULL},
|
||||||
{"insert into <tb_name> using <stb_name> <anyword> values(", 0, 0, NULL},
|
{"insert into <tb_name> using <stb_name> <anyword> values(", 0, 0, NULL},
|
||||||
{"insert into <tb_name> file ", 0, 0, NULL},
|
{"insert into <tb_name> file ", 0, 0, NULL},
|
||||||
{"trim database <db_name>", 0, 0, NULL},
|
{"trim database <db_name>;", 0, 0, NULL},
|
||||||
{"s3migrate database <db_name>", 0, 0, NULL},
|
{"use <db_name>;", 0, 0, NULL},
|
||||||
{"use <db_name>", 0, 0, NULL},
|
|
||||||
{"quit", 0, 0, NULL}};
|
{"quit", 0, 0, NULL}};
|
||||||
|
|
||||||
|
// where keyword
|
||||||
char* keywords[] = {
|
char* keywords[] = {
|
||||||
"and ", "asc ", "desc ", "from ", "fill(", "limit ", "where ",
|
"where ", "and ", "asc ", "desc ", "from ", "fill(", "limit ",
|
||||||
"interval(", "order by ", "order by ", "offset ", "or ", "group by ", "now()",
|
"interval(", "order by ", "order by ", "offset ", "or ", "group by ", "now()",
|
||||||
"session(", "sliding ", "slimit ", "soffset ", "state_window(", "today() ", "union all select ",
|
"session(", "sliding ", "slimit ", "soffset ", "state_window(", "today() ", "union all select ",
|
||||||
"partition by "};
|
"partition by ", "match", "nmatch ", "between ", "like ", "is null ", "is not null ",
|
||||||
|
"event_window ", "count_window("
|
||||||
|
};
|
||||||
|
|
||||||
char* functions[] = {
|
char* functions[] = {
|
||||||
"count(", "sum(",
|
"count(", "sum(",
|
||||||
|
@ -255,6 +266,20 @@ char* functions[] = {
|
||||||
"timezone(", "timetruncate(",
|
"timezone(", "timetruncate(",
|
||||||
"twa(", "to_unixtimestamp(",
|
"twa(", "to_unixtimestamp(",
|
||||||
"unique(", "upper(",
|
"unique(", "upper(",
|
||||||
|
"pi(", "round(",
|
||||||
|
"truncate(", "exp(",
|
||||||
|
"ln(", "mod(",
|
||||||
|
"rand(", "sign(",
|
||||||
|
"degrees(", "radians(",
|
||||||
|
"greatest(", "least(",
|
||||||
|
"char_length(", "char(",
|
||||||
|
"ascii(", "position(",
|
||||||
|
"trim(", "replace(",
|
||||||
|
"repeat(", "substring(",
|
||||||
|
"substring_index(","timediff(",
|
||||||
|
"week(", "weekday(",
|
||||||
|
"weekofyear(", "dayofweek(",
|
||||||
|
"stddev_pop(", "var_pop("
|
||||||
};
|
};
|
||||||
|
|
||||||
char* tb_actions[] = {
|
char* tb_actions[] = {
|
||||||
|
@ -275,7 +300,7 @@ char* db_options[] = {"keep ",
|
||||||
"cachesize ",
|
"cachesize ",
|
||||||
"comp ",
|
"comp ",
|
||||||
"duration ",
|
"duration ",
|
||||||
"wal_fsync_period",
|
"wal_fsync_period ",
|
||||||
"maxrows ",
|
"maxrows ",
|
||||||
"minrows ",
|
"minrows ",
|
||||||
"pages ",
|
"pages ",
|
||||||
|
@ -284,17 +309,22 @@ char* db_options[] = {"keep ",
|
||||||
"wal_level ",
|
"wal_level ",
|
||||||
"vgroups ",
|
"vgroups ",
|
||||||
"single_stable ",
|
"single_stable ",
|
||||||
"s3_chunksize ",
|
"s3_chunksize ",
|
||||||
"s3_keeplocal ",
|
"s3_keeplocal ",
|
||||||
"s3_compact ",
|
"s3_compact ",
|
||||||
"wal_retention_period ",
|
"wal_retention_period ",
|
||||||
"wal_roll_period ",
|
"wal_roll_period ",
|
||||||
"wal_retention_size ",
|
"wal_retention_size ",
|
||||||
"wal_segment_size "};
|
#ifdef TD_ENTERPRISE
|
||||||
|
"encrypt_algorithm "
|
||||||
|
#endif
|
||||||
|
"keep_time_offset ",
|
||||||
|
"wal_segment_size "
|
||||||
|
};
|
||||||
|
|
||||||
char* alter_db_options[] = {"cachemodel ", "replica ", "keep ", "stt_trigger ",
|
char* alter_db_options[] = {"cachemodel ", "replica ", "keep ", "stt_trigger ",
|
||||||
"wal_retention_period ", "wal_retention_size ", "cachesize ",
|
"wal_retention_period ", "wal_retention_size ", "cachesize ",
|
||||||
"s3_keeplocal ", "s3_compact ",
|
"s3_keeplocal ", "s3_compact ",
|
||||||
"wal_fsync_period ", "buffer ", "pages " ,"wal_level "};
|
"wal_fsync_period ", "buffer ", "pages " ,"wal_level "};
|
||||||
|
|
||||||
char* data_types[] = {"timestamp", "int",
|
char* data_types[] = {"timestamp", "int",
|
||||||
|
@ -304,6 +334,7 @@ char* data_types[] = {"timestamp", "int",
|
||||||
"bigint", "bigint unsigned",
|
"bigint", "bigint unsigned",
|
||||||
"smallint", "smallint unsigned",
|
"smallint", "smallint unsigned",
|
||||||
"tinyint", "tinyint unsigned",
|
"tinyint", "tinyint unsigned",
|
||||||
|
"geometry(64)", "varbinary(16)",
|
||||||
"bool", "json"};
|
"bool", "json"};
|
||||||
|
|
||||||
char* key_tags[] = {"tags("};
|
char* key_tags[] = {"tags("};
|
||||||
|
@ -319,10 +350,20 @@ char* key_systable[] = {
|
||||||
|
|
||||||
char* udf_language[] = {"\'Python\'", "\'C\'"};
|
char* udf_language[] = {"\'Python\'", "\'C\'"};
|
||||||
|
|
||||||
|
char* field_options[] = {
|
||||||
|
"encode ", "compress ", "level ",
|
||||||
|
"\'lz4\' ", "\'zlib\' ", "\'zstd\' ", "\'xz\' ", "\'tsz\' ", "\'disabled\' ", // compress
|
||||||
|
"\'simple8b\' ", "\'delta-i\' ", "\'delta-d\' ", "\'bit-packing\' ",
|
||||||
|
"\'high\' ", "\'medium\' ", "\'low\' ",
|
||||||
|
"comment ",
|
||||||
|
"primary key "
|
||||||
|
};
|
||||||
|
|
||||||
// global keys can tips on anywhere
|
// global keys can tips on anywhere
|
||||||
char* global_keys[] = {
|
char* global_keys[] = {
|
||||||
"tbname",
|
"tbname",
|
||||||
"now",
|
"now",
|
||||||
|
"vgroups",
|
||||||
"_wstart",
|
"_wstart",
|
||||||
"_wend",
|
"_wend",
|
||||||
"_wduration",
|
"_wduration",
|
||||||
|
@ -354,27 +395,29 @@ bool waitAutoFill = false;
|
||||||
#define WT_VAR_STREAM 6
|
#define WT_VAR_STREAM 6
|
||||||
#define WT_VAR_UDFNAME 7
|
#define WT_VAR_UDFNAME 7
|
||||||
#define WT_VAR_VGROUPID 8
|
#define WT_VAR_VGROUPID 8
|
||||||
|
#define WT_VAR_TSMA 9
|
||||||
|
|
||||||
#define WT_FROM_DB_MAX 8 // max get content from db
|
#define WT_FROM_DB_MAX 9 // max get content from db
|
||||||
#define WT_FROM_DB_CNT (WT_FROM_DB_MAX + 1)
|
#define WT_FROM_DB_CNT (WT_FROM_DB_MAX + 1)
|
||||||
|
|
||||||
#define WT_VAR_ALLTABLE 9
|
#define WT_VAR_ALLTABLE 10
|
||||||
#define WT_VAR_FUNC 10
|
#define WT_VAR_FUNC 11
|
||||||
#define WT_VAR_KEYWORD 11
|
#define WT_VAR_KEYWORD 12
|
||||||
#define WT_VAR_TBACTION 12
|
#define WT_VAR_TBACTION 13
|
||||||
#define WT_VAR_DBOPTION 13
|
#define WT_VAR_DBOPTION 14
|
||||||
#define WT_VAR_ALTER_DBOPTION 14
|
#define WT_VAR_ALTER_DBOPTION 15
|
||||||
#define WT_VAR_DATATYPE 15
|
#define WT_VAR_DATATYPE 16
|
||||||
#define WT_VAR_KEYTAGS 16
|
#define WT_VAR_KEYTAGS 17
|
||||||
#define WT_VAR_ANYWORD 17
|
#define WT_VAR_ANYWORD 18
|
||||||
#define WT_VAR_TBOPTION 18
|
#define WT_VAR_TBOPTION 19
|
||||||
#define WT_VAR_USERACTION 19
|
#define WT_VAR_USERACTION 20
|
||||||
#define WT_VAR_KEYSELECT 20
|
#define WT_VAR_KEYSELECT 21
|
||||||
#define WT_VAR_SYSTABLE 21
|
#define WT_VAR_SYSTABLE 22
|
||||||
#define WT_VAR_LANGUAGE 22
|
#define WT_VAR_LANGUAGE 23
|
||||||
#define WT_VAR_GLOBALKEYS 23
|
#define WT_VAR_GLOBALKEYS 24
|
||||||
|
#define WT_VAR_FIELD_OPTIONS 25
|
||||||
|
|
||||||
#define WT_VAR_CNT 24
|
#define WT_VAR_CNT 26
|
||||||
|
|
||||||
|
|
||||||
#define WT_TEXT 0xFF
|
#define WT_TEXT 0xFF
|
||||||
|
@ -387,12 +430,17 @@ TdThreadMutex tiresMutex;
|
||||||
TdThread* threads[WT_FROM_DB_CNT];
|
TdThread* threads[WT_FROM_DB_CNT];
|
||||||
// obtain var name with sql from server
|
// obtain var name with sql from server
|
||||||
char varTypes[WT_VAR_CNT][64] = {
|
char varTypes[WT_VAR_CNT][64] = {
|
||||||
|
// get from db
|
||||||
"<db_name>", "<stb_name>", "<tb_name>", "<dnode_id>", "<user_name>", "<topic_name>", "<stream_name>",
|
"<db_name>", "<stb_name>", "<tb_name>", "<dnode_id>", "<user_name>", "<topic_name>", "<stream_name>",
|
||||||
"<udf_name>", "<vgroup_id>", "<all_table>", "<function>", "<keyword>", "<tb_actions>", "<db_options>", "<alter_db_options>",
|
"<udf_name>", "<vgroup_id>", "<tsma_name>",
|
||||||
"<data_types>", "<key_tags>", "<anyword>", "<tb_options>", "<user_actions>", "<key_select>", "<sys_table>", "<udf_language>"};
|
// get from code
|
||||||
|
"<all_table>", "<function>", "<keyword>", "<tb_actions>", "<db_options>", "<alter_db_options>",
|
||||||
|
"<data_types>", "<key_tags>", "<anyword>", "<tb_options>", "<user_actions>", "<key_select>", "<sys_table>",
|
||||||
|
"<udf_language>", "<global_keys>", "<field_options>"};
|
||||||
|
|
||||||
char varSqls[WT_FROM_DB_CNT][64] = {"show databases;", "show stables;", "show tables;", "show dnodes;",
|
char varSqls[WT_FROM_DB_CNT][64] = {"show databases;", "show stables;", "show tables;", "show dnodes;",
|
||||||
"show users;", "show topics;", "show streams;", "show functions;", "show vgroups;"};
|
"show users;", "show topics;", "show streams;", "show functions;",
|
||||||
|
"show vgroups;", "show tsmas;"};
|
||||||
|
|
||||||
// var words current cursor, if user press any one key except tab, cursorVar can be reset to -1
|
// var words current cursor, if user press any one key except tab, cursorVar can be reset to -1
|
||||||
int cursorVar = -1;
|
int cursorVar = -1;
|
||||||
|
@ -534,6 +582,7 @@ void showHelp() {
|
||||||
select timezone();\n\
|
select timezone();\n\
|
||||||
set max_binary_display_width ...\n\
|
set max_binary_display_width ...\n\
|
||||||
show apps;\n\
|
show apps;\n\
|
||||||
|
show alive;\n\
|
||||||
show create database <db_name>;\n\
|
show create database <db_name>;\n\
|
||||||
show create stable <stb_name>;\n\
|
show create stable <stb_name>;\n\
|
||||||
show create table <tb_name>;\n\
|
show create table <tb_name>;\n\
|
||||||
|
@ -567,7 +616,8 @@ void showHelp() {
|
||||||
show users;\n\
|
show users;\n\
|
||||||
show variables;\n\
|
show variables;\n\
|
||||||
show local variables;\n\
|
show local variables;\n\
|
||||||
show vnodes <dnode_id>\n\
|
show vnodes;\n\
|
||||||
|
show vnodes on dnode <dnode_id>;\n\
|
||||||
show vgroups;\n\
|
show vgroups;\n\
|
||||||
show consumers;\n\
|
show consumers;\n\
|
||||||
show grants;\n\
|
show grants;\n\
|
||||||
|
@ -588,8 +638,10 @@ void showHelp() {
|
||||||
create view <view_name> as select ...\n\
|
create view <view_name> as select ...\n\
|
||||||
redistribute vgroup <vgroup_id> dnode <dnode_id> ;\n\
|
redistribute vgroup <vgroup_id> dnode <dnode_id> ;\n\
|
||||||
split vgroup <vgroup_id>;\n\
|
split vgroup <vgroup_id>;\n\
|
||||||
|
s3migrate database <db_name>;\n\
|
||||||
show compacts;\n\
|
show compacts;\n\
|
||||||
show compact \n\
|
show compact \n\
|
||||||
|
show arbgroups;\n\
|
||||||
show views;\n\
|
show views;\n\
|
||||||
show create view <all_table>;");
|
show create view <all_table>;");
|
||||||
#endif
|
#endif
|
||||||
|
@ -648,7 +700,12 @@ SWord* addWord(const char* p, int32_t len, bool pattern) {
|
||||||
|
|
||||||
// check format
|
// check format
|
||||||
if (pattern && len > 0) {
|
if (pattern && len > 0) {
|
||||||
word->type = wordType(p, len);
|
if (p[len - 1] == ';') {
|
||||||
|
word->type = wordType(p, len - 1);
|
||||||
|
word->end = true;
|
||||||
|
} else {
|
||||||
|
word->type = wordType(p, len);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
word->type = WT_TEXT;
|
word->type = WT_TEXT;
|
||||||
}
|
}
|
||||||
|
@ -756,6 +813,7 @@ bool shellAutoInit() {
|
||||||
GenerateVarType(WT_VAR_SYSTABLE, key_systable, sizeof(key_systable) / sizeof(char*));
|
GenerateVarType(WT_VAR_SYSTABLE, key_systable, sizeof(key_systable) / sizeof(char*));
|
||||||
GenerateVarType(WT_VAR_LANGUAGE, udf_language, sizeof(udf_language) / sizeof(char*));
|
GenerateVarType(WT_VAR_LANGUAGE, udf_language, sizeof(udf_language) / sizeof(char*));
|
||||||
GenerateVarType(WT_VAR_GLOBALKEYS, global_keys, sizeof(global_keys) / sizeof(char*));
|
GenerateVarType(WT_VAR_GLOBALKEYS, global_keys, sizeof(global_keys) / sizeof(char*));
|
||||||
|
GenerateVarType(WT_VAR_FIELD_OPTIONS, field_options, sizeof(field_options) / sizeof(char*));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1254,9 +1312,9 @@ void printScreen(TAOS* con, SShellCmd* cmd, SWords* match) {
|
||||||
const char* str = NULL;
|
const char* str = NULL;
|
||||||
int strLen = 0;
|
int strLen = 0;
|
||||||
|
|
||||||
|
SWord* word = MATCH_WORD(match);
|
||||||
if (firstMatchIndex == curMatchIndex && lastWordBytes == -1) {
|
if (firstMatchIndex == curMatchIndex && lastWordBytes == -1) {
|
||||||
// first press tab
|
// first press tab
|
||||||
SWord* word = MATCH_WORD(match);
|
|
||||||
str = word->word + match->matchLen;
|
str = word->word + match->matchLen;
|
||||||
strLen = word->len - match->matchLen;
|
strLen = word->len - match->matchLen;
|
||||||
lastMatchIndex = firstMatchIndex;
|
lastMatchIndex = firstMatchIndex;
|
||||||
|
@ -1264,8 +1322,6 @@ void printScreen(TAOS* con, SShellCmd* cmd, SWords* match) {
|
||||||
} else {
|
} else {
|
||||||
if (lastWordBytes == -1) return;
|
if (lastWordBytes == -1) return;
|
||||||
deleteCount(cmd, lastWordBytes);
|
deleteCount(cmd, lastWordBytes);
|
||||||
|
|
||||||
SWord* word = MATCH_WORD(match);
|
|
||||||
str = word->word;
|
str = word->word;
|
||||||
strLen = word->len;
|
strLen = word->len;
|
||||||
// set current to last
|
// set current to last
|
||||||
|
@ -1273,8 +1329,22 @@ void printScreen(TAOS* con, SShellCmd* cmd, SWords* match) {
|
||||||
lastWordBytes = word->len;
|
lastWordBytes = word->len;
|
||||||
}
|
}
|
||||||
|
|
||||||
// insert new
|
if (word->end && str[strLen - 1] != ';') {
|
||||||
shellInsertStr(cmd, (char*)str, strLen);
|
// append end ';'
|
||||||
|
char* p = taosMemoryCalloc(strLen + 8, 1);
|
||||||
|
if (p) {
|
||||||
|
tstrncpy(p, str, strLen + 1);
|
||||||
|
tstrncpy(p + strLen, ";", 1 + 1);
|
||||||
|
lastWordBytes += 1;
|
||||||
|
shellInsertStr(cmd, (char*)p, strLen + 1);
|
||||||
|
taosMemoryFree(p);
|
||||||
|
} else {
|
||||||
|
shellInsertStr(cmd, (char*)str, strLen);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// insert new
|
||||||
|
shellInsertStr(cmd, (char*)str, strLen);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// main key press tab , matched return true else false
|
// main key press tab , matched return true else false
|
||||||
|
@ -1648,38 +1718,69 @@ bool matchSelectQuery(TAOS* con, SShellCmd* cmd) {
|
||||||
return appendAfterSelect(con, cmd, p, len);
|
return appendAfterSelect(con, cmd, p, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// is fields option area
|
||||||
|
bool fieldOptionsArea(char* p) {
|
||||||
|
char* p1 = strrchr(p, '(');
|
||||||
|
char* p2 = strrchr(p, ',');
|
||||||
|
if (p1 == NULL && p2 == NULL) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// find tags
|
||||||
|
if (strstr(p, " tags") != NULL) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p2 == NULL) {
|
||||||
|
// first field area
|
||||||
|
p2 = p1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// find blank count
|
||||||
|
int32_t cnt = 0;
|
||||||
|
while (p2) {
|
||||||
|
p2 = strchr(p2, ' ');
|
||||||
|
if (p2) {
|
||||||
|
// get prev char
|
||||||
|
char prec = *(p2 - 1);
|
||||||
|
if (prec != ',' && prec != '(') {
|
||||||
|
// blank if before comma, not calc count. like st(ts timestamp, age int + BLANK + TAB only two blank
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// continue blank is one blank
|
||||||
|
while (p2[1] != 0 && p2[1] == ' ') {
|
||||||
|
// move next if blank again
|
||||||
|
p2 += 1;
|
||||||
|
}
|
||||||
|
p2 += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// like create table st(ts timestamp TAB-KEY or st(ts timestamp , age int TAB-KEY
|
||||||
|
return cnt >= 2;
|
||||||
|
}
|
||||||
|
|
||||||
// if is input create fields or tags area, return true
|
// if is input create fields or tags area, return true
|
||||||
bool isCreateFieldsArea(char* p) {
|
bool isCreateFieldsArea(char* p) {
|
||||||
// put to while, support like create table st(ts timestamp, bin1 binary(16), bin2 + blank + TAB
|
int32_t n = 0; // count
|
||||||
char* p1 = taosStrdup(p);
|
char* p1 = p;
|
||||||
bool ret = false;
|
while (*p1 != 0) {
|
||||||
while (1) {
|
switch (*p1) {
|
||||||
char* left = strrchr(p1, '(');
|
case '(':
|
||||||
if (left == NULL) {
|
++n;
|
||||||
// like 'create table st'
|
break;
|
||||||
ret = false;
|
case ')':
|
||||||
break;
|
--n;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
// move next
|
||||||
char* right = strrchr(p1, ')');
|
++p1;
|
||||||
if (right == NULL) {
|
|
||||||
// like 'create table st( '
|
|
||||||
ret = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (left > right) {
|
|
||||||
// like 'create table st( ts timestamp, age int) tags(area '
|
|
||||||
ret = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// set string end by small for next strrchr search
|
|
||||||
*left = 0;
|
|
||||||
}
|
}
|
||||||
taosMemoryFree(p1);
|
|
||||||
|
|
||||||
return ret;
|
return n > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool matchCreateTable(TAOS* con, SShellCmd* cmd) {
|
bool matchCreateTable(TAOS* con, SShellCmd* cmd) {
|
||||||
|
@ -1718,7 +1819,13 @@ bool matchCreateTable(TAOS* con, SShellCmd* cmd) {
|
||||||
|
|
||||||
// check in create fields or tags input area
|
// check in create fields or tags input area
|
||||||
if (isCreateFieldsArea(ps)) {
|
if (isCreateFieldsArea(ps)) {
|
||||||
ret = fillWithType(con, cmd, last, WT_VAR_DATATYPE);
|
if (fieldOptionsArea(ps)) {
|
||||||
|
// fill field options
|
||||||
|
ret = fillWithType(con, cmd, last, WT_VAR_FIELD_OPTIONS);
|
||||||
|
} else {
|
||||||
|
// fill field
|
||||||
|
ret = fillWithType(con, cmd, last, WT_VAR_DATATYPE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// tags
|
// tags
|
||||||
|
@ -1726,7 +1833,7 @@ bool matchCreateTable(TAOS* con, SShellCmd* cmd) {
|
||||||
// find only one ')' , can insert tags
|
// find only one ')' , can insert tags
|
||||||
char* p1 = strchr(ps, ')');
|
char* p1 = strchr(ps, ')');
|
||||||
if (p1) {
|
if (p1) {
|
||||||
if (strchr(p1 + 1, ')') == NULL && strstr(p1 + 1, "tags") == NULL) {
|
if (strstr(p1 + 1, "tags") == NULL) {
|
||||||
// can insert tags keyword
|
// can insert tags keyword
|
||||||
ret = fillWithType(con, cmd, last, WT_VAR_KEYTAGS);
|
ret = fillWithType(con, cmd, last, WT_VAR_KEYTAGS);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,8 @@
|
||||||
#include "shellAuto.h"
|
#include "shellAuto.h"
|
||||||
#include "shellInt.h"
|
#include "shellInt.h"
|
||||||
|
|
||||||
|
SShellObj shell = {0};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const char *sql;
|
const char *sql;
|
||||||
bool vertical;
|
bool vertical;
|
||||||
|
|
|
@ -17,8 +17,7 @@
|
||||||
#include "shellInt.h"
|
#include "shellInt.h"
|
||||||
#include "shellAuto.h"
|
#include "shellAuto.h"
|
||||||
|
|
||||||
SShellObj shell = {0};
|
extern SShellObj shell;
|
||||||
|
|
||||||
|
|
||||||
void shellCrashHandler(int signum, void *sigInfo, void *context) {
|
void shellCrashHandler(int signum, void *sigInfo, void *context) {
|
||||||
taosIgnSignal(SIGTERM);
|
taosIgnSignal(SIGTERM);
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
|
||||||
|
MESSAGE(STATUS "build taos-CLI unit test")
|
||||||
|
|
||||||
|
IF(NOT TD_DARWIN)
|
||||||
|
# GoogleTest requires at least C++11
|
||||||
|
SET(CMAKE_CXX_STANDARD 11)
|
||||||
|
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST)
|
||||||
|
|
||||||
|
ADD_EXECUTABLE(shellTest ${SOURCE_LIST})
|
||||||
|
TARGET_LINK_LIBRARIES(
|
||||||
|
shellTest
|
||||||
|
PRIVATE shell_ut gtest os common transport geometry util
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(
|
||||||
|
shell_ut
|
||||||
|
PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../inc"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
add_test(
|
||||||
|
NAME shellTest
|
||||||
|
COMMAND shellTest
|
||||||
|
)
|
||||||
|
ENDIF()
|
|
@ -0,0 +1,135 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can use, redistribute, and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License, version 3
|
||||||
|
* or later ("AGPL"), as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include "shellAuto.h"
|
||||||
|
|
||||||
|
TEST(fieldOptionsArea, autoTabTest) {
|
||||||
|
printf("hellow world SHELL tab test\n");
|
||||||
|
|
||||||
|
// str false
|
||||||
|
const char *s0[] = {
|
||||||
|
"create table st(ts ",
|
||||||
|
"create table st(ts timestamp, age ",
|
||||||
|
"create table st(ts timestamp, age",
|
||||||
|
"create table st(ts timestamp, age int , name ",
|
||||||
|
"create table st(ts timestamp, age int , name binary(16)",
|
||||||
|
"create table st(ts timestamp, age int , name binary(16) ) tags( ",
|
||||||
|
"create table st(ts timestamp, age int , name binary(16) ) tags( area int, addr ",
|
||||||
|
"create table st(ts timestamp, age int , name binary(16) ) tags( area int,addr varbinary",
|
||||||
|
"create table st(ts timestamp, age int, name binary(16)) tags(area int , addr varbinary(32)",
|
||||||
|
"create table st( ts timestamp, age int, name binary(16)) tags( area int, addr",
|
||||||
|
"create table st (ts timestamp , age int, name binary(16) , area int,",
|
||||||
|
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int ,addr varbinary",
|
||||||
|
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int , addr varbinary(32) level "
|
||||||
|
"'high' , no i",
|
||||||
|
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int , addr varbinary(32) encode "
|
||||||
|
"'simple8b' level 'high', no in",
|
||||||
|
};
|
||||||
|
|
||||||
|
// str true
|
||||||
|
const char *s1[] = {
|
||||||
|
"create table st(ts timestamp ",
|
||||||
|
"create table st(ts timestamp, age int ",
|
||||||
|
"create table st(ts timestamp, age int ",
|
||||||
|
"create table st(ts timestamp, age int , name binary(16) ",
|
||||||
|
"create table st(ts timestamp, age int , name binary(16) ",
|
||||||
|
"create table st(ts timestamp, age int , name binary(16) , addr varbinary( 32 ) ",
|
||||||
|
"create table st(ts timestamp, age int , name binary(16) ,area int, addr varbinary(32) ",
|
||||||
|
"create table st(ts timestamp, age int , name binary(16), area int,addr varbinary(32) ",
|
||||||
|
"create table st(ts timestamp, age int, name binary(16) , area int,addr varbinary(32) ",
|
||||||
|
"create table st( ts timestamp, age int, name binary(16) ,area int,addr varbinary(32) ",
|
||||||
|
"create table st (ts timestamp , age int, name binary(16), area int,addr varbinary(32) ",
|
||||||
|
"create table st (ts timestamp , age int, name binary(16), area int , addr varbinary(32) compress 'zlib' ",
|
||||||
|
"create table st (ts timestamp , age int, name binary(16), area int , addr varbinary(32) level 'high' ",
|
||||||
|
"create table st (ts timestamp , age int, name binary(16) , area int , addr varbinary(32) encode 'simple8b' "
|
||||||
|
"level 'high' ",
|
||||||
|
};
|
||||||
|
|
||||||
|
// s0 is false
|
||||||
|
for (int32_t i = 0; i < sizeof(s0) / sizeof(char *); i++) {
|
||||||
|
printf("s0 i=%d fieldOptionsArea %s expect false \n", i, s0[i]);
|
||||||
|
ASSERT(fieldOptionsArea((char *)s0[i]) == false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// s1 is true
|
||||||
|
for (int32_t i = 0; i < sizeof(s1) / sizeof(char *); i++) {
|
||||||
|
printf("s1 i=%d fieldOptionsArea %s expect true \n", i, s1[i]);
|
||||||
|
ASSERT(fieldOptionsArea((char *)s1[i]) == true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(isCreateFieldsArea, autoTabTest) {
|
||||||
|
printf("hellow world SHELL tab test\n");
|
||||||
|
|
||||||
|
// str false
|
||||||
|
const char *s0[] = {
|
||||||
|
"create table st(ts )",
|
||||||
|
"create table st(ts timestamp, age) ",
|
||||||
|
"create table st(ts timestamp, age)",
|
||||||
|
"create table st(ts timestamp, age int , name binary(16) )",
|
||||||
|
"create table st(ts timestamp, age int , name binary(16))",
|
||||||
|
"create table st(ts timestamp, age int , name binary(16) ) tags( )",
|
||||||
|
"create table st(ts timestamp, age int , name binary(16) ) tags( area int, addr )",
|
||||||
|
"create table st(ts timestamp, age int , name binary(16) ) tags( area int,addr varbinary)",
|
||||||
|
"create table st(ts timestamp, age int, name binary(16)) tags(area int , addr varbinary(32))",
|
||||||
|
"create table st( ts timestamp, age int, name binary(16)) tags( area int, addr int)",
|
||||||
|
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int,addr varbinary(32) )",
|
||||||
|
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int ,addr varbinary(14))",
|
||||||
|
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int , addr varbinary(32) level "
|
||||||
|
"'high' )",
|
||||||
|
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int , addr varbinary(32) encode "
|
||||||
|
"'simple8b' level 'high' ) ",
|
||||||
|
};
|
||||||
|
|
||||||
|
// str true
|
||||||
|
const char *s1[] = {
|
||||||
|
"create table st(ts timestamp ",
|
||||||
|
"create table st(ts timestamp, age int ",
|
||||||
|
"create table st(ts timestamp, age int ,",
|
||||||
|
"create table st(ts timestamp, age int , name binary(16), ",
|
||||||
|
"create table st(ts timestamp, age int , name binary(16) ",
|
||||||
|
"create table st(ts timestamp, age int , name binary(16) ) tags( area int ",
|
||||||
|
"create table st(ts timestamp, age int , name binary(16) ) tags( area int, addr varbinary(32) ",
|
||||||
|
"create table st(ts timestamp, age int , name binary(16) ) tags( area int,addr varbinary(32)",
|
||||||
|
"create table st(ts timestamp, age int, name binary(16)) tags(area int,addr varbinary(32) ",
|
||||||
|
"create table st( ts timestamp, age int, name binary(16)) tags(area int,addr varbinary(32) ",
|
||||||
|
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int, addr varbinary(32) ",
|
||||||
|
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int , addr varbinary(32) compress "
|
||||||
|
"'zlib' ",
|
||||||
|
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int , addr varbinary(32) level "
|
||||||
|
"'high' ",
|
||||||
|
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int , addr varbinary(32) encode "
|
||||||
|
"'simple8b' level 'high' ",
|
||||||
|
};
|
||||||
|
|
||||||
|
// s0 is false
|
||||||
|
for (int32_t i = 0; i < sizeof(s0) / sizeof(char *); i++) {
|
||||||
|
printf("s0 i=%d isCreateFieldsArea %s expect false. \n", i, s0[i]);
|
||||||
|
ASSERT(isCreateFieldsArea((char *)s0[i]) == false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// s1 is true
|
||||||
|
for (int32_t i = 0; i < sizeof(s1) / sizeof(char *); i++) {
|
||||||
|
printf("s1 i=%d isCreateFieldsArea %s expect true. \n", i, s1[i]);
|
||||||
|
ASSERT(isCreateFieldsArea((char *)s1[i]) == true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
testing::InitGoogleTest(&argc, argv);
|
||||||
|
return RUN_ALL_TESTS();
|
||||||
|
}
|
Loading…
Reference in New Issue