Merge remote-tracking branch 'origin/develop' into feature/linux
This commit is contained in:
commit
51b446877d
|
@ -5,7 +5,7 @@ node {
|
||||||
git url: 'https://github.com/taosdata/TDengine.git'
|
git url: 'https://github.com/taosdata/TDengine.git'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def kipstage=0
|
||||||
def abortPreviousBuilds() {
|
def abortPreviousBuilds() {
|
||||||
def currentJobName = env.JOB_NAME
|
def currentJobName = env.JOB_NAME
|
||||||
def currentBuildNumber = env.BUILD_NUMBER.toInteger()
|
def currentBuildNumber = env.BUILD_NUMBER.toInteger()
|
||||||
|
@ -63,6 +63,7 @@ def pre_test(){
|
||||||
'''
|
'''
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
pipeline {
|
pipeline {
|
||||||
agent none
|
agent none
|
||||||
|
|
||||||
|
@ -72,12 +73,33 @@ pipeline {
|
||||||
}
|
}
|
||||||
|
|
||||||
stages {
|
stages {
|
||||||
|
stage('pre_build'){
|
||||||
|
agent{label 'master'}
|
||||||
|
when {
|
||||||
|
changeRequest()
|
||||||
|
}
|
||||||
|
steps {
|
||||||
|
sh'''
|
||||||
|
cd ${WORKSPACE}
|
||||||
|
git checkout develop
|
||||||
|
git pull
|
||||||
|
git fetch origin +refs/pull/${CHANGE_ID}/merge
|
||||||
|
git checkout -qf FETCH_HEAD
|
||||||
|
'''
|
||||||
|
script{
|
||||||
|
skipstage=sh(script:"git --no-pager diff --name-only FETCH_HEAD develop|grep -v -E '.*md|//src//connector|Jenkinsfile|test-all.sh' || echo 1 ",returnStdout:true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
stage('Parallel test stage') {
|
stage('Parallel test stage') {
|
||||||
|
|
||||||
//only build pr
|
//only build pr
|
||||||
when {
|
when {
|
||||||
changeRequest()
|
changeRequest()
|
||||||
|
expression {
|
||||||
|
skipstage != 1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
parallel {
|
parallel {
|
||||||
stage('python_1_s1') {
|
stage('python_1_s1') {
|
||||||
|
@ -127,7 +149,7 @@ pipeline {
|
||||||
stage('test_b1_s2') {
|
stage('test_b1_s2') {
|
||||||
agent{label 'b1'}
|
agent{label 'b1'}
|
||||||
steps {
|
steps {
|
||||||
timeout(time: 90, unit: 'MINUTES'){
|
timeout(time: 45, unit: 'MINUTES'){
|
||||||
pre_test()
|
pre_test()
|
||||||
sh '''
|
sh '''
|
||||||
cd ${WKC}/tests
|
cd ${WKC}/tests
|
||||||
|
@ -240,8 +262,7 @@ pipeline {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
post {
|
post {
|
||||||
|
|
||||||
success {
|
success {
|
||||||
emailext (
|
emailext (
|
||||||
subject: "PR-result: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' SUCCESS",
|
subject: "PR-result: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' SUCCESS",
|
||||||
|
@ -300,7 +321,7 @@ pipeline {
|
||||||
<ul>
|
<ul>
|
||||||
<div style="font-size:18px">
|
<div style="font-size:18px">
|
||||||
<li>构建名称>>分支:${env.BRANCH_NAME}</li>
|
<li>构建名称>>分支:${env.BRANCH_NAME}</li>
|
||||||
<li>构建结果:<span style="color:green"> Successful </span></li>
|
<li>构建结果:<span style="color:red"> Failure </span></li>
|
||||||
<li>构建编号:${BUILD_NUMBER}</li>
|
<li>构建编号:${BUILD_NUMBER}</li>
|
||||||
<li>触发用户:${env.CHANGE_AUTHOR}</li>
|
<li>触发用户:${env.CHANGE_AUTHOR}</li>
|
||||||
<li>提交信息:${env.CHANGE_TITLE}</li>
|
<li>提交信息:${env.CHANGE_TITLE}</li>
|
||||||
|
|
|
@ -290,7 +290,7 @@ TDengine缺省的时间戳是毫秒精度,但通过修改配置参数enableMic
|
||||||
- **修改子表标签值**
|
- **修改子表标签值**
|
||||||
|
|
||||||
```mysql
|
```mysql
|
||||||
ALTER STABLE tb_name SET TAG tag_name=new_tag_value;
|
ALTER TABLE tb_name SET TAG tag_name=new_tag_value;
|
||||||
```
|
```
|
||||||
说明:除了更新标签的值的操作是针对子表进行,其他所有的标签操作(添加标签、删除标签等)均只能作用于 STable,不能对单个子表操作。对 STable 添加标签以后,依托于该 STable 建立的所有表将自动增加了一个标签,所有新增标签的默认值都是 NULL。
|
说明:除了更新标签的值的操作是针对子表进行,其他所有的标签操作(添加标签、删除标签等)均只能作用于 STable,不能对单个子表操作。对 STable 添加标签以后,依托于该 STable 建立的所有表将自动增加了一个标签,所有新增标签的默认值都是 NULL。
|
||||||
|
|
||||||
|
@ -757,7 +757,7 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
|
||||||
|
|
||||||
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
|
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
|
||||||
|
|
||||||
适用于:表。(从 2.0.15 版本开始,本函数也支持超级表)
|
适用于:表。(从 2.0.15.1 版本开始,本函数也支持超级表)
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
```mysql
|
```mysql
|
||||||
|
|
|
@ -134,6 +134,22 @@ typedef uint64_t TKEY;
|
||||||
#define tdGetTKEY(key) (((TKEY)ABS(key)) | (TKEY_NEGATIVE_FLAG & (TKEY)(key)))
|
#define tdGetTKEY(key) (((TKEY)ABS(key)) | (TKEY_NEGATIVE_FLAG & (TKEY)(key)))
|
||||||
#define tdGetKey(tkey) (((TSKEY)((tkey)&TKEY_VALUE_FILTER)) * (TKEY_IS_NEGATIVE(tkey) ? -1 : 1))
|
#define tdGetKey(tkey) (((TSKEY)((tkey)&TKEY_VALUE_FILTER)) * (TKEY_IS_NEGATIVE(tkey) ? -1 : 1))
|
||||||
|
|
||||||
|
#define MIN_TS_KEY ((TSKEY)0x8000000000000001)
|
||||||
|
#define MAX_TS_KEY ((TSKEY)0x3fffffffffffffff)
|
||||||
|
|
||||||
|
#define TD_TO_TKEY(key) tdGetTKEY(((key) < MIN_TS_KEY) ? MIN_TS_KEY : (((key) > MAX_TS_KEY) ? MAX_TS_KEY : key))
|
||||||
|
|
||||||
|
static FORCE_INLINE TKEY keyToTkey(TSKEY key) {
|
||||||
|
TSKEY lkey = key;
|
||||||
|
if (key > MAX_TS_KEY) {
|
||||||
|
lkey = MAX_TS_KEY;
|
||||||
|
} else if (key < MIN_TS_KEY) {
|
||||||
|
lkey = MIN_TS_KEY;
|
||||||
|
}
|
||||||
|
|
||||||
|
return tdGetTKEY(lkey);
|
||||||
|
}
|
||||||
|
|
||||||
static FORCE_INLINE int tkeyComparFn(const void *tkey1, const void *tkey2) {
|
static FORCE_INLINE int tkeyComparFn(const void *tkey1, const void *tkey2) {
|
||||||
TSKEY key1 = tdGetKey(*(TKEY *)tkey1);
|
TSKEY key1 = tdGetKey(*(TKEY *)tkey1);
|
||||||
TSKEY key2 = tdGetKey(*(TKEY *)tkey2);
|
TSKEY key2 = tdGetKey(*(TKEY *)tkey2);
|
||||||
|
|
|
@ -296,7 +296,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_WAL_SIZE_LIMIT, 0, 0x1002, "WAL size e
|
||||||
// http
|
// http
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_HTTP_SERVER_OFFLINE, 0, 0x1100, "http server is not onlin")
|
TAOS_DEFINE_ERROR(TSDB_CODE_HTTP_SERVER_OFFLINE, 0, 0x1100, "http server is not onlin")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_HTTP_UNSUPPORT_URL, 0, 0x1101, "url is not support")
|
TAOS_DEFINE_ERROR(TSDB_CODE_HTTP_UNSUPPORT_URL, 0, 0x1101, "url is not support")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_HTTP_INVLALID_URL, 0, 0x1102, "invalid url format")
|
TAOS_DEFINE_ERROR(TSDB_CODE_HTTP_INVALID_URL, 0, 0x1102, "invalid url format")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_HTTP_NO_ENOUGH_MEMORY, 0, 0x1103, "no enough memory")
|
TAOS_DEFINE_ERROR(TSDB_CODE_HTTP_NO_ENOUGH_MEMORY, 0, 0x1103, "no enough memory")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_HTTP_REQUSET_TOO_BIG, 0, 0x1104, "request size is too big")
|
TAOS_DEFINE_ERROR(TSDB_CODE_HTTP_REQUSET_TOO_BIG, 0, 0x1104, "request size is too big")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_HTTP_NO_AUTH_INFO, 0, 0x1105, "no auth info input")
|
TAOS_DEFINE_ERROR(TSDB_CODE_HTTP_NO_AUTH_INFO, 0, 0x1105, "no auth info input")
|
||||||
|
|
|
@ -74,7 +74,7 @@ void httpSendErrorResp(HttpContext *pContext, int32_t errNo) {
|
||||||
httpCode = 404;
|
httpCode = 404;
|
||||||
else if (errNo == TSDB_CODE_HTTP_UNSUPPORT_URL)
|
else if (errNo == TSDB_CODE_HTTP_UNSUPPORT_URL)
|
||||||
httpCode = 404;
|
httpCode = 404;
|
||||||
else if (errNo == TSDB_CODE_HTTP_INVLALID_URL)
|
else if (errNo == TSDB_CODE_HTTP_INVALID_URL)
|
||||||
httpCode = 404;
|
httpCode = 404;
|
||||||
else if (errNo == TSDB_CODE_HTTP_NO_ENOUGH_MEMORY)
|
else if (errNo == TSDB_CODE_HTTP_NO_ENOUGH_MEMORY)
|
||||||
httpCode = 507;
|
httpCode = 507;
|
||||||
|
|
|
@ -141,6 +141,6 @@ bool restProcessRequest(struct HttpContext* pContext) {
|
||||||
} else {
|
} else {
|
||||||
}
|
}
|
||||||
|
|
||||||
httpSendErrorResp(pContext, TSDB_CODE_HTTP_INVLALID_URL);
|
httpSendErrorResp(pContext, TSDB_CODE_HTTP_INVALID_URL);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -317,7 +317,7 @@ static STsdbQueryHandle* tsdbQueryTablesImpl(STsdbRepo* tsdb, STsdbQueryCond* pC
|
||||||
pQueryHandle->window = pCond->twindow;
|
pQueryHandle->window = pCond->twindow;
|
||||||
pQueryHandle->pTsdb = tsdb;
|
pQueryHandle->pTsdb = tsdb;
|
||||||
pQueryHandle->type = TSDB_QUERY_TYPE_ALL;
|
pQueryHandle->type = TSDB_QUERY_TYPE_ALL;
|
||||||
pQueryHandle->cur.fid = -1;
|
pQueryHandle->cur.fid = INT32_MIN;
|
||||||
pQueryHandle->cur.win = TSWINDOW_INITIALIZER;
|
pQueryHandle->cur.win = TSWINDOW_INITIALIZER;
|
||||||
pQueryHandle->checkFiles = true;
|
pQueryHandle->checkFiles = true;
|
||||||
pQueryHandle->activeIndex = 0; // current active table index
|
pQueryHandle->activeIndex = 0; // current active table index
|
||||||
|
@ -478,16 +478,18 @@ static bool initTableMemIterator(STsdbQueryHandle* pHandle, STableCheckInfo* pCh
|
||||||
if (pMemT && pCheckInfo->tableId.tid < pMemT->maxTables) {
|
if (pMemT && pCheckInfo->tableId.tid < pMemT->maxTables) {
|
||||||
pMem = pMemT->tData[pCheckInfo->tableId.tid];
|
pMem = pMemT->tData[pCheckInfo->tableId.tid];
|
||||||
if (pMem != NULL && pMem->uid == pCheckInfo->tableId.uid) { // check uid
|
if (pMem != NULL && pMem->uid == pCheckInfo->tableId.uid) { // check uid
|
||||||
|
TKEY tLastKey = keyToTkey(pCheckInfo->lastKey);
|
||||||
pCheckInfo->iter =
|
pCheckInfo->iter =
|
||||||
tSkipListCreateIterFromVal(pMem->pData, (const char*)&pCheckInfo->lastKey, TSDB_DATA_TYPE_TIMESTAMP, order);
|
tSkipListCreateIterFromVal(pMem->pData, (const char*)&tLastKey, TSDB_DATA_TYPE_TIMESTAMP, order);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pIMemT && pCheckInfo->tableId.tid < pIMemT->maxTables) {
|
if (pIMemT && pCheckInfo->tableId.tid < pIMemT->maxTables) {
|
||||||
pIMem = pIMemT->tData[pCheckInfo->tableId.tid];
|
pIMem = pIMemT->tData[pCheckInfo->tableId.tid];
|
||||||
if (pIMem != NULL && pIMem->uid == pCheckInfo->tableId.uid) { // check uid
|
if (pIMem != NULL && pIMem->uid == pCheckInfo->tableId.uid) { // check uid
|
||||||
|
TKEY tLastKey = keyToTkey(pCheckInfo->lastKey);
|
||||||
pCheckInfo->iiter =
|
pCheckInfo->iiter =
|
||||||
tSkipListCreateIterFromVal(pIMem->pData, (const char*)&pCheckInfo->lastKey, TSDB_DATA_TYPE_TIMESTAMP, order);
|
tSkipListCreateIterFromVal(pIMem->pData, (const char*)&tLastKey, TSDB_DATA_TYPE_TIMESTAMP, order);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -652,7 +654,7 @@ static bool hasMoreDataInCache(STsdbQueryHandle* pHandle) {
|
||||||
STsdbCfg *pCfg = &pHandle->pTsdb->config;
|
STsdbCfg *pCfg = &pHandle->pTsdb->config;
|
||||||
size_t size = taosArrayGetSize(pHandle->pTableCheckInfo);
|
size_t size = taosArrayGetSize(pHandle->pTableCheckInfo);
|
||||||
assert(pHandle->activeIndex < size && pHandle->activeIndex >= 0 && size >= 1);
|
assert(pHandle->activeIndex < size && pHandle->activeIndex >= 0 && size >= 1);
|
||||||
pHandle->cur.fid = -1;
|
pHandle->cur.fid = INT32_MIN;
|
||||||
|
|
||||||
STableCheckInfo* pCheckInfo = taosArrayGet(pHandle->pTableCheckInfo, pHandle->activeIndex);
|
STableCheckInfo* pCheckInfo = taosArrayGet(pHandle->pTableCheckInfo, pHandle->activeIndex);
|
||||||
|
|
||||||
|
@ -1117,7 +1119,12 @@ int32_t doCopyRowsFromFileBlock(STsdbQueryHandle* pQueryHandle, int32_t capacity
|
||||||
|
|
||||||
if (pColInfo->info.colId == src->colId) {
|
if (pColInfo->info.colId == src->colId) {
|
||||||
|
|
||||||
if (pColInfo->info.type != TSDB_DATA_TYPE_BINARY && pColInfo->info.type != TSDB_DATA_TYPE_NCHAR) {
|
if (pColInfo->info.type == TSDB_DATA_TYPE_TIMESTAMP) {
|
||||||
|
for (int32_t n = 0; n < num; n++) {
|
||||||
|
TKEY tkey = *(TKEY *)((char*)src->pData + bytes * start + n * sizeof(TKEY));
|
||||||
|
*(TSKEY *)(pData + n * sizeof(TSKEY)) = tdGetKey(tkey);
|
||||||
|
}
|
||||||
|
} else if (pColInfo->info.type != TSDB_DATA_TYPE_BINARY && pColInfo->info.type != TSDB_DATA_TYPE_NCHAR) {
|
||||||
memmove(pData, (char*)src->pData + bytes * start, bytes * num);
|
memmove(pData, (char*)src->pData + bytes * start, bytes * num);
|
||||||
} else { // handle the var-string
|
} else { // handle the var-string
|
||||||
char* dst = pData;
|
char* dst = pData;
|
||||||
|
@ -1225,7 +1232,6 @@ static void copyOneRowFromMem(STsdbQueryHandle* pQueryHandle, int32_t capacity,
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_BIGINT:
|
case TSDB_DATA_TYPE_BIGINT:
|
||||||
case TSDB_DATA_TYPE_UBIGINT:
|
case TSDB_DATA_TYPE_UBIGINT:
|
||||||
case TSDB_DATA_TYPE_TIMESTAMP:
|
|
||||||
*(uint64_t *)pData = *(uint64_t *)value;
|
*(uint64_t *)pData = *(uint64_t *)value;
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_FLOAT:
|
case TSDB_DATA_TYPE_FLOAT:
|
||||||
|
@ -1234,6 +1240,9 @@ static void copyOneRowFromMem(STsdbQueryHandle* pQueryHandle, int32_t capacity,
|
||||||
case TSDB_DATA_TYPE_DOUBLE:
|
case TSDB_DATA_TYPE_DOUBLE:
|
||||||
SET_DOUBLE_PTR(pData, value);
|
SET_DOUBLE_PTR(pData, value);
|
||||||
break;
|
break;
|
||||||
|
case TSDB_DATA_TYPE_TIMESTAMP:
|
||||||
|
*(TSKEY *)pData = tdGetKey(*(TKEY *)value);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
memcpy(pData, value, pColInfo->info.bytes);
|
memcpy(pData, value, pColInfo->info.bytes);
|
||||||
}
|
}
|
||||||
|
@ -1893,7 +1902,7 @@ static int32_t getFirstFileDataBlock(STsdbQueryHandle* pQueryHandle, bool* exist
|
||||||
assert(pQueryHandle->pFileGroup == NULL);
|
assert(pQueryHandle->pFileGroup == NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
cur->fid = -1; // denote that there are no data in file anymore
|
cur->fid = INT32_MIN; // denote that there are no data in file anymore
|
||||||
*exists = false;
|
*exists = false;
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
@ -2496,7 +2505,7 @@ void tsdbRetrieveDataBlockInfo(TsdbQueryHandleT* pQueryHandle, SDataBlockInfo* p
|
||||||
STable* pTable = NULL;
|
STable* pTable = NULL;
|
||||||
|
|
||||||
// there are data in file
|
// there are data in file
|
||||||
if (pHandle->cur.fid >= 0) {
|
if (pHandle->cur.fid != INT32_MIN) {
|
||||||
STableBlockInfo* pBlockInfo = &pHandle->pDataBlockInfo[cur->slot];
|
STableBlockInfo* pBlockInfo = &pHandle->pDataBlockInfo[cur->slot];
|
||||||
pTable = pBlockInfo->pTableCheckInfo->pTableObj;
|
pTable = pBlockInfo->pTableCheckInfo->pTableObj;
|
||||||
} else {
|
} else {
|
||||||
|
@ -2580,7 +2589,7 @@ SArray* tsdbRetrieveDataBlock(TsdbQueryHandleT* pQueryHandle, SArray* pIdList) {
|
||||||
*/
|
*/
|
||||||
STsdbQueryHandle* pHandle = (STsdbQueryHandle*)pQueryHandle;
|
STsdbQueryHandle* pHandle = (STsdbQueryHandle*)pQueryHandle;
|
||||||
|
|
||||||
if (pHandle->cur.fid < 0) {
|
if (pHandle->cur.fid == INT32_MIN) {
|
||||||
return pHandle->pColumns;
|
return pHandle->pColumns;
|
||||||
} else {
|
} else {
|
||||||
STableBlockInfo* pBlockInfo = &pHandle->pDataBlockInfo[pHandle->cur.slot];
|
STableBlockInfo* pBlockInfo = &pHandle->pDataBlockInfo[pHandle->cur.slot];
|
||||||
|
|
|
@ -41,7 +41,7 @@ class TDTestCase:
|
||||||
#TODO : should add more testcases
|
#TODO : should add more testcases
|
||||||
tdSql.execute("insert into test values('1930-12-12 01:19:20.345', 1);")
|
tdSql.execute("insert into test values('1930-12-12 01:19:20.345', 1);")
|
||||||
tdSql.execute("insert into test values('1969-12-30 23:59:59.999', 2);")
|
tdSql.execute("insert into test values('1969-12-30 23:59:59.999', 2);")
|
||||||
tdSql.execute("insert into test values(-3600, 3);")
|
tdSql.execute("insert into test values(-3600001, 3);")
|
||||||
tdSql.execute("insert into test values('2020-10-20 14:02:53.770', 4);")
|
tdSql.execute("insert into test values('2020-10-20 14:02:53.770', 4);")
|
||||||
print("==============insert data")
|
print("==============insert data")
|
||||||
|
|
||||||
|
@ -61,11 +61,11 @@ class TDTestCase:
|
||||||
print("==============step4")
|
print("==============step4")
|
||||||
tdSql.execute("use demo;")
|
tdSql.execute("use demo;")
|
||||||
tdSql.query("select * from test;")
|
tdSql.query("select * from test;")
|
||||||
# print(tdSql.queryResult)
|
print(tdSql.queryResult)
|
||||||
tdSql.checkRows(4)
|
tdSql.checkRows(4)
|
||||||
tdSql.checkData(0,0,'1930-12-12 01:19:20.345000')
|
tdSql.checkData(0,0,'1930-12-12 01:19:20.345000')
|
||||||
tdSql.checkData(1,0,'1969-12-30 23:59:59.999000')
|
tdSql.checkData(1,0,'1969-12-30 23:59:59.999000')
|
||||||
tdSql.checkData(2,0,'1970-01-01 07:00:00.000000')
|
tdSql.checkData(2,0,'1970-01-01 06:59:59.999000')
|
||||||
tdSql.checkData(3,0,'2020-10-20 14:02:53.770000')
|
tdSql.checkData(3,0,'2020-10-20 14:02:53.770000')
|
||||||
print("==============check data")
|
print("==============check data")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue