fix:[TD-33048] add ts to cols if dataFormat is true in schemaless to avoid schemal is old
This commit is contained in:
parent
642a5152f7
commit
a64c6b6ce1
|
@ -233,7 +233,7 @@ int32_t smlBuildSuperTableInfo(SSmlHandle *info, SSmlLineInfo *currElement, SSml
|
||||||
goto END;
|
goto END;
|
||||||
}
|
}
|
||||||
SML_CHECK_CODE(smlBuildSTableMeta(info->dataFormat, sMeta));
|
SML_CHECK_CODE(smlBuildSTableMeta(info->dataFormat, sMeta));
|
||||||
for (int i = 1; i < pTableMeta->tableInfo.numOfTags + pTableMeta->tableInfo.numOfColumns; i++) {
|
for (int i = 0; i < pTableMeta->tableInfo.numOfTags + pTableMeta->tableInfo.numOfColumns; i++) {
|
||||||
SSchema *col = pTableMeta->schema + i;
|
SSchema *col = pTableMeta->schema + i;
|
||||||
SSmlKv kv = {.key = col->name, .keyLen = strlen(col->name), .type = col->type};
|
SSmlKv kv = {.key = col->name, .keyLen = strlen(col->name), .type = col->type};
|
||||||
if (col->type == TSDB_DATA_TYPE_NCHAR) {
|
if (col->type == TSDB_DATA_TYPE_NCHAR) {
|
||||||
|
@ -772,22 +772,27 @@ END:
|
||||||
RETURN
|
RETURN
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t smlCheckMeta(SSchema *schema, int32_t length, SArray *cols, bool isTag) {
|
static int32_t smlCheckMeta(SSchema *schema, int32_t length, SArray *cols) {
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
int32_t lino = 0;
|
int32_t lino = 0;
|
||||||
SHashObj *hashTmp = taosHashInit(length, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK);
|
SHashObj *hashTmp = taosHashInit(length, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK);
|
||||||
SML_CHECK_NULL(hashTmp);
|
SML_CHECK_NULL(hashTmp);
|
||||||
int32_t i = 0;
|
for (int32_t i = 0; i < length; i++) {
|
||||||
for (; i < length; i++) {
|
SML_CHECK_CODE(taosHashPut(hashTmp, schema[i].name, strlen(schema[i].name), &schema[i], sizeof(SSchema)));
|
||||||
SML_CHECK_CODE(taosHashPut(hashTmp, schema[i].name, strlen(schema[i].name), &i, SHORT_BYTES));
|
|
||||||
}
|
}
|
||||||
i = isTag ? 0 : 1;
|
for (int32_t i = 0; i < taosArrayGetSize(cols); i++) {
|
||||||
for (; i < taosArrayGetSize(cols); i++) {
|
|
||||||
SSmlKv *kv = (SSmlKv *)taosArrayGet(cols, i);
|
SSmlKv *kv = (SSmlKv *)taosArrayGet(cols, i);
|
||||||
SML_CHECK_NULL(kv);
|
SML_CHECK_NULL(kv);
|
||||||
if (taosHashGet(hashTmp, kv->key, kv->keyLen) == NULL) {
|
SSchema *sTmp = taosHashGet(hashTmp, kv->key, kv->keyLen);
|
||||||
|
if (sTmp == NULL) {
|
||||||
SML_CHECK_CODE(TSDB_CODE_SML_INVALID_DATA);
|
SML_CHECK_CODE(TSDB_CODE_SML_INVALID_DATA);
|
||||||
}
|
}
|
||||||
|
if ((IS_VAR_DATA_TYPE(kv->type) && kv->length + VARSTR_HEADER_SIZE > sTmp->bytes) ||
|
||||||
|
(!IS_VAR_DATA_TYPE(kv->type) && kv->length != sTmp->bytes)){
|
||||||
|
uError("column %s (type %s) bytes invalid. db bytes:%d, kv bytes:%zu", sTmp->name,
|
||||||
|
tDataTypes[sTmp->type].name, sTmp->bytes, kv->length);
|
||||||
|
SML_CHECK_CODE(TSDB_CODE_INTERNAL_ERROR);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
END:
|
END:
|
||||||
|
@ -1132,8 +1137,8 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (needCheckMeta) {
|
if (needCheckMeta) {
|
||||||
SML_CHECK_CODE(smlCheckMeta(&(pTableMeta->schema[pTableMeta->tableInfo.numOfColumns]), pTableMeta->tableInfo.numOfTags, sTableData->tags, true));
|
SML_CHECK_CODE(smlCheckMeta(&(pTableMeta->schema[pTableMeta->tableInfo.numOfColumns]), pTableMeta->tableInfo.numOfTags, sTableData->tags));
|
||||||
SML_CHECK_CODE(smlCheckMeta(&(pTableMeta->schema[0]), pTableMeta->tableInfo.numOfColumns, sTableData->cols, false));
|
SML_CHECK_CODE(smlCheckMeta(&(pTableMeta->schema[0]), pTableMeta->tableInfo.numOfColumns, sTableData->cols));
|
||||||
}
|
}
|
||||||
|
|
||||||
taosMemoryFreeClear(sTableData->tableMeta);
|
taosMemoryFreeClear(sTableData->tableMeta);
|
||||||
|
|
|
@ -2253,6 +2253,83 @@ int sml_ts5528_test(){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int sml_td33048_Test() {
|
||||||
|
TAOS *taos = taos_connect("localhost", "root", "taosdata", NULL, 0);
|
||||||
|
|
||||||
|
TAOS_RES *pRes = taos_query(taos, "drop database if exists td33048");
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
pRes = taos_query(taos, "create database if not exists td33048");
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
// check column name duplication
|
||||||
|
const char *sql[] = {
|
||||||
|
"alarm_record,tag=alarm_record uid=\"3+8001+c939604c\",deviceId=\"3\",alarmId=\"8001\",alarmStatus=\"false\",lotNo=\"2411A0302\",subMode=\"11\",occurTime=\"2024-11-25 09:31:52.702\" 1732527117484",
|
||||||
|
};
|
||||||
|
pRes = taos_query(taos, "use td33048");
|
||||||
|
taos_free_result(pRes);
|
||||||
|
pRes = taos_schemaless_insert(taos, (char **)sql, sizeof(sql) / sizeof(sql[0]), TSDB_SML_LINE_PROTOCOL,
|
||||||
|
TSDB_SML_TIMESTAMP_MILLI_SECONDS);
|
||||||
|
int code = taos_errno(pRes);
|
||||||
|
printf("%s result0:%s\n", __FUNCTION__, taos_errstr(pRes));
|
||||||
|
ASSERT(code == 0);
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
// check tag name duplication
|
||||||
|
const char *sql1[] = {
|
||||||
|
"alarm_record,tag=alarm_record uid=\"2+100012+303fe9b5\",deviceId=\"2\",alarmId=\"100012\",alarmStatus=\"false\",lotNo=\"2411A0202\",subMode=\"11\",occurTime=\"2024-11-25 09:31:55.591\" 1732527119493",
|
||||||
|
};
|
||||||
|
pRes = taos_schemaless_insert(taos, (char **)sql1, sizeof(sql1) / sizeof(sql1[0]), TSDB_SML_LINE_PROTOCOL,
|
||||||
|
TSDB_SML_TIMESTAMP_MILLI_SECONDS);
|
||||||
|
code = taos_errno(pRes);
|
||||||
|
printf("%s result0:%s\n", __FUNCTION__, taos_errstr(pRes));
|
||||||
|
ASSERT(code == 0);
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
pRes = taos_query(taos, "select * from alarm_record");
|
||||||
|
code = taos_errno(pRes);
|
||||||
|
printf("%s result0:%s\n", __FUNCTION__, taos_errstr(pRes));
|
||||||
|
ASSERT(code == 0);
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
taos_close(taos);
|
||||||
|
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
int sml_td17324_Test() {
|
||||||
|
TAOS *taos = taos_connect("localhost", "root", "taosdata", NULL, 0);
|
||||||
|
|
||||||
|
TAOS_RES *pRes = taos_query(taos, "drop database if exists gcbacaefqk");
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
pRes = taos_query(taos, "create database if not exists gcbacaefqk PRECISION 'ns'");
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
pRes = taos_query(taos, "use gcbacaefqk");
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
pRes = taos_query(taos, "create stable gcbacaefqk.test_stb(_ts timestamp, f int) tags(t1 bigint)");
|
||||||
|
taos_free_result(pRes);
|
||||||
|
// check column name duplication
|
||||||
|
const char *sql[] = {
|
||||||
|
"st123456,t1=3i64,t2=4f64,t3=\"t3\" c1=3i64,c3=L\"passit\",c2=false,c4=4f64 1732700000364000000",
|
||||||
|
"st123456,t1=4i64,t3=\"t4\",t2=5f64,t4=5f64 c1=3i64,c3=L\"passitagin\",c2=true,c4=5f64,c5=5f64 1732700000361000000",
|
||||||
|
"test_stb,t2=5f64,t3=L\"ste\" c1=true,c2=4i64,c3=\"iam\" 1732700000364316532"
|
||||||
|
};
|
||||||
|
|
||||||
|
pRes = taos_schemaless_insert(taos, (char **)sql, sizeof(sql) / sizeof(sql[0]), TSDB_SML_LINE_PROTOCOL,
|
||||||
|
TSDB_SML_TIMESTAMP_NANO_SECONDS);
|
||||||
|
int code = taos_errno(pRes);
|
||||||
|
printf("%s result0:%s\n", __FUNCTION__, taos_errstr(pRes));
|
||||||
|
ASSERT(code == 0);
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
taos_close(taos);
|
||||||
|
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
if (argc == 2) {
|
if (argc == 2) {
|
||||||
taos_options(TSDB_OPTION_CONFIGDIR, argv[1]);
|
taos_options(TSDB_OPTION_CONFIGDIR, argv[1]);
|
||||||
|
@ -2262,6 +2339,10 @@ int main(int argc, char *argv[]) {
|
||||||
ASSERT(!ret);
|
ASSERT(!ret);
|
||||||
ret = sml_ts5528_test();
|
ret = sml_ts5528_test();
|
||||||
ASSERT(!ret);
|
ASSERT(!ret);
|
||||||
|
ret = sml_td33048_Test();
|
||||||
|
ASSERT(!ret);
|
||||||
|
ret = sml_td17324_Test();
|
||||||
|
ASSERT(!ret);
|
||||||
ret = sml_td29691_Test();
|
ret = sml_td29691_Test();
|
||||||
ASSERT(ret);
|
ASSERT(ret);
|
||||||
ret = sml_td29373_Test();
|
ret = sml_td29373_Test();
|
||||||
|
|
Loading…
Reference in New Issue