Merge branch 'feat/TS-4243-3.0' of github.com:taosdata/TDengine into TEST/3.0/TS-4243
This commit is contained in:
commit
75f2ce47de
|
@ -16,7 +16,6 @@
|
|||
#ifndef _TD_COMMON_TOKEN_H_
|
||||
#define _TD_COMMON_TOKEN_H_
|
||||
|
||||
|
||||
#define TK_OR 1
|
||||
#define TK_AND 2
|
||||
#define TK_UNION 3
|
||||
|
|
|
@ -2018,9 +2018,17 @@ static int32_t translateCast(SFunctionNode* pFunc, char* pErrBuf, int32_t len) {
|
|||
if (IS_STR_DATA_TYPE(para2Type)) {
|
||||
para2Bytes -= VARSTR_HEADER_SIZE;
|
||||
}
|
||||
if (para2Bytes <= 0 || para2Bytes > 4096) { // cast dst var type length limits to 4096 bytes
|
||||
return buildFuncErrMsg(pErrBuf, len, TSDB_CODE_FUNC_FUNTION_ERROR,
|
||||
"CAST function converted length should be in range (0, 4096] bytes");
|
||||
if (para2Bytes <= 0 ||
|
||||
para2Bytes > TSDB_MAX_BINARY_LEN - VARSTR_HEADER_SIZE) { // cast dst var type length limits to 4096 bytes
|
||||
if (TSDB_DATA_TYPE_NCHAR == para2Type) {
|
||||
return buildFuncErrMsg(pErrBuf, len, TSDB_CODE_FUNC_FUNTION_ERROR,
|
||||
"CAST function converted length should be in range (0, %d] NCHARS",
|
||||
(TSDB_MAX_BINARY_LEN - VARSTR_HEADER_SIZE)/TSDB_NCHAR_SIZE);
|
||||
} else {
|
||||
return buildFuncErrMsg(pErrBuf, len, TSDB_CODE_FUNC_FUNTION_ERROR,
|
||||
"CAST function converted length should be in range (0, %d] bytes",
|
||||
TSDB_MAX_BINARY_LEN - VARSTR_HEADER_SIZE);
|
||||
}
|
||||
}
|
||||
|
||||
// add database precision as param
|
||||
|
|
|
@ -416,6 +416,13 @@ type_name(A) ::= DECIMAL.
|
|||
type_name(A) ::= DECIMAL NK_LP NK_INTEGER NK_RP. { A = createDataType(TSDB_DATA_TYPE_DECIMAL); }
|
||||
type_name(A) ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP. { A = createDataType(TSDB_DATA_TYPE_DECIMAL); }
|
||||
|
||||
%type type_name_default_len { SDataType }
|
||||
%destructor type_name_default_len { }
|
||||
type_name_default_len(A) ::= BINARY. { A = createVarLenDataType(TSDB_DATA_TYPE_BINARY, NULL); }
|
||||
type_name_default_len(A) ::= NCHAR. { A = createVarLenDataType(TSDB_DATA_TYPE_NCHAR, NULL); }
|
||||
type_name_default_len(A) ::= VARCHAR. { A = createVarLenDataType(TSDB_DATA_TYPE_VARCHAR, NULL); }
|
||||
type_name_default_len(A) ::= VARBINARY. { A = createVarLenDataType(TSDB_DATA_TYPE_VARBINARY, NULL); }
|
||||
|
||||
%type tags_def_opt { SNodeList* }
|
||||
%destructor tags_def_opt { nodesDestroyList($$); }
|
||||
tags_def_opt(A) ::= . { A = NULL; }
|
||||
|
@ -1122,6 +1129,9 @@ function_expression(A) ::= function_name(B) NK_LP expression_list(C) NK_RP(D).
|
|||
function_expression(A) ::= star_func(B) NK_LP star_func_para_list(C) NK_RP(D). { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
|
||||
function_expression(A) ::=
|
||||
CAST(B) NK_LP expr_or_subquery(C) AS type_name(D) NK_RP(E). { A = createRawExprNodeExt(pCxt, &B, &E, createCastFunctionNode(pCxt, releaseRawExprNode(pCxt, C), D)); }
|
||||
function_expression(A) ::=
|
||||
CAST(B) NK_LP expr_or_subquery(C) AS type_name_default_len(D) NK_RP(E). { A = createRawExprNodeExt(pCxt, &B, &E, createCastFunctionNode(pCxt, releaseRawExprNode(pCxt, C), D)); }
|
||||
|
||||
function_expression(A) ::= literal_func(B). { A = B; }
|
||||
|
||||
literal_func(A) ::= noarg_func(B) NK_LP NK_RP(C). { A = createRawExprNodeExt(pCxt, &B, &C, createFunctionNode(pCxt, &B, NULL)); }
|
||||
|
|
|
@ -1602,7 +1602,10 @@ SDataType createDataType(uint8_t type) {
|
|||
}
|
||||
|
||||
SDataType createVarLenDataType(uint8_t type, const SToken* pLen) {
|
||||
SDataType dt = {.type = type, .precision = 0, .scale = 0, .bytes = taosStr2Int32(pLen->z, NULL, 10)};
|
||||
int32_t len = TSDB_MAX_BINARY_LEN - VARSTR_HEADER_SIZE;
|
||||
if (type == TSDB_DATA_TYPE_NCHAR) len /= TSDB_NCHAR_SIZE;
|
||||
if(pLen) len = taosStr2Int32(pLen->z, NULL, 10);
|
||||
SDataType dt = {.type = type, .precision = 0, .scale = 0, .bytes = len};
|
||||
return dt;
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -70,7 +70,7 @@ int32_t transDecompressMsg(char** msg, int32_t len) {
|
|||
char* buf = taosMemoryCalloc(1, oriLen + sizeof(STransMsgHead));
|
||||
STransMsgHead* pNewHead = (STransMsgHead*)buf;
|
||||
int32_t decompLen = LZ4_decompress_safe(pCont + sizeof(STransCompMsg), (char*)pNewHead->content,
|
||||
len - sizeof(STransMsgHead) - sizeof(STransCompMsg), oriLen);
|
||||
len - sizeof(STransMsgHead) - sizeof(STransCompMsg), oriLen);
|
||||
memcpy((char*)pNewHead, (char*)pHead, sizeof(STransMsgHead));
|
||||
|
||||
pNewHead->msgLen = htonl(oriLen + sizeof(STransMsgHead));
|
||||
|
@ -158,6 +158,10 @@ int transResetBuffer(SConnBuffer* connBuf) {
|
|||
p->left = -1;
|
||||
p->total = 0;
|
||||
p->len = 0;
|
||||
if (p->cap > BUFFER_CAP) {
|
||||
p->cap = BUFFER_CAP;
|
||||
p->buf = taosMemoryRealloc(p->buf, p->cap);
|
||||
}
|
||||
} else {
|
||||
ASSERTS(0, "invalid read from sock buf");
|
||||
return -1;
|
||||
|
|
|
@ -242,6 +242,7 @@ void taosCloseLog() {
|
|||
taosMemoryFreeClear(tsLogObj.logHandle->buffer);
|
||||
taosThreadMutexDestroy(&tsLogObj.logMutex);
|
||||
taosMemoryFreeClear(tsLogObj.logHandle);
|
||||
tsLogObj.logHandle = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -285,8 +286,11 @@ static void taosKeepOldLog(char *oldName) {
|
|||
taosRemoveOldFiles(tsLogDir, tsLogKeepDays);
|
||||
}
|
||||
}
|
||||
|
||||
static void *taosThreadToOpenNewFile(void *param) {
|
||||
typedef struct {
|
||||
TdFilePtr pOldFile;
|
||||
char keepName[LOG_FILE_NAME_LEN + 20];
|
||||
} OldFileKeeper;
|
||||
static OldFileKeeper *taosOpenNewFile() {
|
||||
char keepName[LOG_FILE_NAME_LEN + 20];
|
||||
sprintf(keepName, "%s.%d", tsLogObj.logName, tsLogObj.flag);
|
||||
|
||||
|
@ -312,13 +316,26 @@ static void *taosThreadToOpenNewFile(void *param) {
|
|||
tsLogObj.logHandle->pFile = pFile;
|
||||
tsLogObj.lines = 0;
|
||||
tsLogObj.openInProgress = 0;
|
||||
taosSsleep(20);
|
||||
taosCloseLogByFd(pOldFile);
|
||||
OldFileKeeper* oldFileKeeper = taosMemoryMalloc(sizeof(OldFileKeeper));
|
||||
if (oldFileKeeper == NULL) {
|
||||
uError("create old log keep info faild! mem is not enough.");
|
||||
return NULL;
|
||||
}
|
||||
oldFileKeeper->pOldFile = pOldFile;
|
||||
memcpy(oldFileKeeper->keepName, keepName, LOG_FILE_NAME_LEN + 20);
|
||||
|
||||
uInfo(" new log file:%d is opened", tsLogObj.flag);
|
||||
uInfo("==================================");
|
||||
taosKeepOldLog(keepName);
|
||||
return oldFileKeeper;
|
||||
}
|
||||
|
||||
static void *taosThreadToCloseOldFile(void* param) {
|
||||
if(!param) return NULL;
|
||||
OldFileKeeper* oldFileKeeper = (OldFileKeeper*)param;
|
||||
taosSsleep(20);
|
||||
taosCloseLogByFd(oldFileKeeper->pOldFile);
|
||||
taosKeepOldLog(oldFileKeeper->keepName);
|
||||
taosMemoryFree(oldFileKeeper);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -334,7 +351,8 @@ static int32_t taosOpenNewLogFile() {
|
|||
taosThreadAttrInit(&attr);
|
||||
taosThreadAttrSetDetachState(&attr, PTHREAD_CREATE_DETACHED);
|
||||
|
||||
taosThreadCreate(&thread, &attr, taosThreadToOpenNewFile, NULL);
|
||||
OldFileKeeper* oldFileKeeper = taosOpenNewFile();
|
||||
taosThreadCreate(&thread, &attr, taosThreadToCloseOldFile, oldFileKeeper);
|
||||
taosThreadAttrDestroy(&attr);
|
||||
}
|
||||
|
||||
|
@ -347,10 +365,11 @@ void taosResetLog() {
|
|||
// force create a new log file
|
||||
tsLogObj.lines = tsNumOfLogLines + 10;
|
||||
|
||||
taosOpenNewLogFile();
|
||||
|
||||
uInfo("==================================");
|
||||
uInfo(" reset log file ");
|
||||
if (tsLogObj.logHandle) {
|
||||
taosOpenNewLogFile();
|
||||
uInfo("==================================");
|
||||
uInfo(" reset log file ");
|
||||
}
|
||||
}
|
||||
|
||||
static bool taosCheckFileIsOpen(char *logFileName) {
|
||||
|
|
|
@ -79,6 +79,10 @@ class TDTestCase:
|
|||
tdSql.query(f"select cast(c1 as binary(32)) as b from {self.dbname}.t1")
|
||||
for i in range(len(data_t1_c1)):
|
||||
tdSql.checkData( i, 0, str(data_t1_c1[i]) )
|
||||
|
||||
tdSql.query(f"select cast(c1 as binary) as b from {self.dbname}.t1")
|
||||
for i in range(len(data_t1_c1)):
|
||||
tdSql.checkData( i, 0, str(data_t1_c1[i]) )
|
||||
|
||||
tdLog.printNoPrefix("==========step6: cast int to nchar, expect changes to str(int) ")
|
||||
|
||||
|
@ -130,6 +134,13 @@ class TDTestCase:
|
|||
tdSql.query(f"select cast(c2 as binary(32)) as b from {self.dbname}.t1")
|
||||
for i in range(len(data_t1_c2)):
|
||||
tdSql.checkData( i, 0, str(data_t1_c2[i]) )
|
||||
|
||||
tdSql.query(f"select cast(c2 as binary) as b from {self.dbname}.ct4")
|
||||
for i in range(len(data_ct4_c2)):
|
||||
tdSql.checkData( i, 0, str(data_ct4_c2[i]) )
|
||||
tdSql.query(f"select cast(c2 as binary) as b from {self.dbname}.t1")
|
||||
for i in range(len(data_t1_c2)):
|
||||
tdSql.checkData( i, 0, str(data_t1_c2[i]) )
|
||||
|
||||
tdLog.printNoPrefix("==========step10: cast bigint to nchar, expect changes to str(int) ")
|
||||
|
||||
|
@ -184,6 +195,13 @@ class TDTestCase:
|
|||
tdSql.query(f"select cast(c3 as binary(32)) as b from {self.dbname}.t1")
|
||||
for i in range(len(data_t1_c3)):
|
||||
tdSql.checkData( i, 0, str(data_t1_c3[i]) )
|
||||
|
||||
tdSql.query(f"select cast(c3 as binary) as b from {self.dbname}.ct4")
|
||||
for i in range(len(data_ct4_c3)):
|
||||
tdSql.checkData( i, 0, str(data_ct4_c3[i]) )
|
||||
tdSql.query(f"select cast(c3 as binary) as b from {self.dbname}.t1")
|
||||
for i in range(len(data_t1_c3)):
|
||||
tdSql.checkData( i, 0, str(data_t1_c3[i]) )
|
||||
|
||||
tdLog.printNoPrefix("==========step14: cast smallint to nchar, expect changes to str(int) ")
|
||||
|
||||
|
@ -235,6 +253,13 @@ class TDTestCase:
|
|||
tdSql.query(f"select cast(c4 as binary(32)) as b from {self.dbname}.t1")
|
||||
for i in range(len(data_t1_c4)):
|
||||
tdSql.checkData( i, 0, str(data_t1_c4[i]) )
|
||||
|
||||
tdSql.query(f"select cast(c4 as binary) as b from {self.dbname}.ct4")
|
||||
for i in range(len(data_ct4_c4)):
|
||||
tdSql.checkData( i, 0, str(data_ct4_c4[i]) )
|
||||
tdSql.query(f"select cast(c4 as binary) as b from {self.dbname}.t1")
|
||||
for i in range(len(data_t1_c4)):
|
||||
tdSql.checkData( i, 0, str(data_t1_c4[i]) )
|
||||
|
||||
tdLog.printNoPrefix("==========step18: cast tinyint to nchar, expect changes to str(int) ")
|
||||
|
||||
|
@ -282,6 +307,12 @@ class TDTestCase:
|
|||
for i in range(len(data_ct4_c5)):
|
||||
tdSql.checkData( i, 0, str(data_ct4_c5[i]) ) if data_ct4_c5[i] is None else tdSql.checkData( i, 0, f'{data_ct4_c5[i]:.6f}' )
|
||||
tdSql.query(f"select cast(c5 as binary(32)) as b from {self.dbname}.t1")
|
||||
for i in range(len(data_t1_c5)):
|
||||
tdSql.checkData( i, 0, str(data_t1_c5[i]) ) if data_t1_c5[i] is None else tdSql.checkData( i, 0, f'{data_t1_c5[i]:.6f}' )
|
||||
tdSql.query(f"select cast(c5 as binary) as b from {self.dbname}.ct4")
|
||||
for i in range(len(data_ct4_c5)):
|
||||
tdSql.checkData( i, 0, str(data_ct4_c5[i]) ) if data_ct4_c5[i] is None else tdSql.checkData( i, 0, f'{data_ct4_c5[i]:.6f}' )
|
||||
tdSql.query(f"select cast(c5 as binary) as b from {self.dbname}.t1")
|
||||
for i in range(len(data_t1_c5)):
|
||||
tdSql.checkData( i, 0, str(data_t1_c5[i]) ) if data_t1_c5[i] is None else tdSql.checkData( i, 0, f'{data_t1_c5[i]:.6f}' )
|
||||
|
||||
|
@ -290,6 +321,12 @@ class TDTestCase:
|
|||
for i in range(len(data_ct4_c5)):
|
||||
tdSql.checkData( i, 0, None ) if data_ct4_c5[i] is None else tdSql.checkData( i, 0, f'{data_ct4_c5[i]:.6f}' )
|
||||
tdSql.query(f"select cast(c5 as nchar(32)) as b from {self.dbname}.t1")
|
||||
for i in range(len(data_t1_c5)):
|
||||
tdSql.checkData( i, 0, None ) if data_t1_c5[i] is None else tdSql.checkData( i, 0, f'{data_t1_c5[i]:.6f}' )
|
||||
tdSql.query(f"select cast(c5 as nchar) as b from {self.dbname}.t1")
|
||||
for i in range(len(data_t1_c5)):
|
||||
tdSql.checkData( i, 0, None ) if data_t1_c5[i] is None else tdSql.checkData( i, 0, f'{data_t1_c5[i]:.6f}' )
|
||||
tdSql.query(f"select cast(c5 as varchar) as b from {self.dbname}.t1")
|
||||
for i in range(len(data_t1_c5)):
|
||||
tdSql.checkData( i, 0, None ) if data_t1_c5[i] is None else tdSql.checkData( i, 0, f'{data_t1_c5[i]:.6f}' )
|
||||
|
||||
|
@ -580,6 +617,10 @@ class TDTestCase:
|
|||
( tdSql.checkData(i, 0, '12121.233231') for i in range(tdSql.queryRows) )
|
||||
tdSql.query(f"select cast(12121.23323131 + 'test~!@`#$%^&*(){'}'}{'{'}][;><.,' as binary(2)) as b from {self.dbname}.ct4")
|
||||
( tdSql.checkData(i, 0, '12') for i in range(tdSql.queryRows) )
|
||||
tdSql.query(f"select cast(12121.23323131 + 'test~!@`#$%^&*(){'}'}{'{'}][;><.,' as binary) as b from {self.dbname}.ct4")
|
||||
( tdSql.checkData(i, 0, '12121.233231') for i in range(tdSql.queryRows) )
|
||||
tdSql.query(f"select cast(12121.23323131 + 'test~!@`#$%^&*(){'}'}{'{'}][;><.,' as binary) as b from {self.dbname}.ct4")
|
||||
( tdSql.checkData(i, 0, '12') for i in range(tdSql.queryRows) )
|
||||
tdSql.query(f"select cast(12121.23323131 + 'test~!@`#$%^&*(){'}'}{'{'}][;><.,' as nchar(16)) as b from {self.dbname}.ct4")
|
||||
( tdSql.checkData(i, 0, '12121.233231') for i in range(tdSql.queryRows) )
|
||||
tdSql.query(f"select cast(12121.23323131 + 'test~!@`#$%^&*(){'}'}{'{'}][;><.,' as nchar(2)) as b from {self.dbname}.ct4")
|
||||
|
|
Loading…
Reference in New Issue