fix: fill vartype tag with integer when create table

This commit is contained in:
kailixu 2024-01-02 20:37:12 +08:00
parent b1ce76cebf
commit e7c8d9176f
2 changed files with 56 additions and 4 deletions

View File

@ -1508,14 +1508,15 @@ static EDealRes translateNormalValue(STranslateContext* pCxt, SValueNode* pVal,
}
case TSDB_DATA_TYPE_VARCHAR:
case TSDB_DATA_TYPE_GEOMETRY: {
if (strict && (pVal->node.resType.bytes > targetDt.bytes - VARSTR_HEADER_SIZE)) {
return generateDealNodeErrMsg(pCxt, TSDB_CODE_PAR_WRONG_VALUE_TYPE, pVal->literal);
int32_t vlen = IS_VAR_DATA_TYPE(pVal->node.resType.type) ? pVal->node.resType.bytes : strlen(pVal->literal);
if (strict && (vlen > targetDt.bytes - VARSTR_HEADER_SIZE)) {
return generateDealNodeErrMsg(pCxt, TSDB_CODE_PAR_VALUE_TOO_LONG, pVal->literal);
}
pVal->datum.p = taosMemoryCalloc(1, targetDt.bytes + 1);
int32_t len = TMIN(targetDt.bytes - VARSTR_HEADER_SIZE, vlen);
pVal->datum.p = taosMemoryCalloc(1, len + VARSTR_HEADER_SIZE + 1);
if (NULL == pVal->datum.p) {
return generateDealNodeErrMsg(pCxt, TSDB_CODE_OUT_OF_MEMORY);
}
int32_t len = TMIN(targetDt.bytes - VARSTR_HEADER_SIZE, pVal->node.resType.bytes);
varDataSetLen(pVal->datum.p, len);
strncpy(varDataVal(pVal->datum.p), pVal->literal, len);
break;

View File

@ -52,6 +52,54 @@ class TDTestCase:
)
tdSql.checkRows(0)
def __ts4421(self, dbname="db", stbname='stb4421', ctbname='ctb4421'):
TAG_TYPE = ['varchar', 'nchar']
TAG_LEN = [2, 8, 200]
TAG_VAL = [200, 123456789]
TAG_RESULT = [False, False, True, False, True, True, False, False, True, False, True, True]
nTagCtb = 0
for tagType in TAG_TYPE:
for tagLen in TAG_LEN:
tdSql.execute(f'create stable {dbname}.{stbname}(ts timestamp, f1 int) tags(t1 %s(%d))'%(tagType, tagLen))
for tagVal in TAG_VAL:
if TAG_RESULT[nTagCtb] == False:
tdSql.error(f'create table {dbname}.{ctbname} using {dbname}.{stbname} tags(%d)'%(tagVal))
tdSql.error(f'insert into {dbname}.{ctbname} using {dbname}.{stbname} tags(%d) values(now,1)'%(tagVal))
tdSql.error(f'create table {dbname}.{ctbname} using {dbname}.{stbname} tags("%d")'%(tagVal))
tdSql.error(f'insert into {dbname}.{ctbname} using {dbname}.{stbname} tags("%d") values(now,1)'%(tagVal))
tdSql.error(f"create table {dbname}.{ctbname} using {dbname}.{stbname} tags('%d')"%(tagVal))
tdSql.error(f"insert into {dbname}.{ctbname} using {dbname}.{stbname} tags('%d') values(now,1)"%(tagVal))
else:
# integer as tag value
tdSql.execute(f'create table {dbname}.{ctbname} using {dbname}.stb4421 tags(%d)'%(tagVal))
tdSql.execute(f'insert into {dbname}.{ctbname} values(now,1)')
tdSql.query(f'select * from {dbname}.{ctbname} where t1="%s"'%(tagVal))
tdSql.checkRows(1)
tdSql.execute(f'drop table {dbname}.{ctbname}')
tdSql.execute(f'insert into {dbname}.{ctbname} using {dbname}.{stbname} tags(%d) values(now,1)'%(tagVal))
tdSql.checkRows(1)
tdSql.execute(f'drop table {dbname}.{ctbname}')
# string as tag value
tdSql.execute(f'create table {dbname}.{ctbname} using {dbname}.stb4421 tags("%d")'%(tagVal))
tdSql.execute(f'insert into {dbname}.{ctbname} values(now,1)')
tdSql.query(f'select * from {dbname}.{ctbname} where t1="%s"'%(tagVal))
tdSql.checkRows(1)
tdSql.execute(f'drop table {dbname}.{ctbname}')
tdSql.execute(f'insert into {dbname}.{ctbname} using {dbname}.{stbname} tags("%d") values(now,1)'%(tagVal))
tdSql.checkRows(1)
tdSql.execute(f'drop table {dbname}.{ctbname}')
tdSql.execute(f"create table {dbname}.{ctbname} using {dbname}.stb4421 tags('%d')"%(tagVal))
tdSql.execute(f"insert into {dbname}.{ctbname} values(now,1)")
tdSql.query(f"select * from {dbname}.{ctbname} where t1='%s'"%(tagVal))
tdSql.checkRows(1)
tdSql.execute(f"drop table {dbname}.{ctbname}")
tdSql.execute(f"insert into {dbname}.{ctbname} using {dbname}.{stbname} tags('%d') values(now,1)"%(tagVal))
tdSql.checkRows(1)
tdSql.execute(f"drop table {dbname}.{ctbname}")
nTagCtb += 1
tdSql.execute(f'drop table {dbname}.{stbname}')
def run(self):
tdLog.printNoPrefix("==========step1:create table")
self.__create_tb()
@ -59,6 +107,9 @@ class TDTestCase:
tdLog.printNoPrefix("==========step2:query data")
self.__query_data(10)
tdLog.printNoPrefix("==========step3:check ts4421")
self.__ts4421()
def stop(self):
tdSql.close()
tdLog.success(f"{__file__} successfully executed")