fix error that pointer to array is invalid after array reallocation
This commit is contained in:
parent
df201ac9bc
commit
908a9dee48
|
@ -236,11 +236,12 @@ static int32_t buildDataPointSchemas(TAOS_SML_DATA_POINT* points, int numPoint,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t generateSchemaAction(SSchema* pointColField, SHashObj* dbAttrHash, bool isTag, char sTableName[],
|
static int32_t generateSchemaAction(SSchema* pointColField, SHashObj* dbAttrHash, SArray* dbAttrArray, bool isTag, char sTableName[],
|
||||||
SSchemaAction* action, bool* actionNeeded) {
|
SSchemaAction* action, bool* actionNeeded) {
|
||||||
SSchema** ppDbAttr = taosHashGet(dbAttrHash, pointColField->name, strlen(pointColField->name));
|
size_t* pDbIndex = taosHashGet(dbAttrHash, pointColField->name, strlen(pointColField->name));
|
||||||
if (ppDbAttr) {
|
if (pDbIndex) {
|
||||||
SSchema* dbAttr = *ppDbAttr;
|
SSchema* dbAttr = taosArrayGet(dbAttrArray, *pDbIndex);
|
||||||
|
assert(strcasecmp(dbAttr->name, pointColField->name) == 0);
|
||||||
if (pointColField->type != dbAttr->type) {
|
if (pointColField->type != dbAttr->type) {
|
||||||
tscError("point type and db type mismatch. key: %s. point type: %d, db type: %d", pointColField->name,
|
tscError("point type and db type mismatch. key: %s. point type: %d, db type: %d", pointColField->name,
|
||||||
pointColField->type, dbAttr->type);
|
pointColField->type, dbAttr->type);
|
||||||
|
@ -453,7 +454,8 @@ int32_t loadTableMeta(TAOS* taos, char* tableName, SSmlSTableSchema* schema) {
|
||||||
field.type = tableMeta->schema[i].type;
|
field.type = tableMeta->schema[i].type;
|
||||||
field.bytes = tableMeta->schema[i].bytes;
|
field.bytes = tableMeta->schema[i].bytes;
|
||||||
SSchema* pField = taosArrayPush(schema->fields, &field);
|
SSchema* pField = taosArrayPush(schema->fields, &field);
|
||||||
taosHashPut(schema->fieldHash, field.name, strlen(field.name), &pField, POINTER_BYTES);
|
size_t fieldIndex = taosArrayGetSize(schema->fields) - 1;
|
||||||
|
taosHashPut(schema->fieldHash, field.name, strlen(field.name), &fieldIndex, sizeof(fieldIndex));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i=0; i<tableMeta->tableInfo.numOfTags; ++i) {
|
for (int i=0; i<tableMeta->tableInfo.numOfTags; ++i) {
|
||||||
|
@ -463,7 +465,8 @@ int32_t loadTableMeta(TAOS* taos, char* tableName, SSmlSTableSchema* schema) {
|
||||||
field.type = tableMeta->schema[j].type;
|
field.type = tableMeta->schema[j].type;
|
||||||
field.bytes = tableMeta->schema[j].bytes;
|
field.bytes = tableMeta->schema[j].bytes;
|
||||||
SSchema* pField = taosArrayPush(schema->tags, &field);
|
SSchema* pField = taosArrayPush(schema->tags, &field);
|
||||||
taosHashPut(schema->tagHash, field.name, strlen(field.name), &pField, POINTER_BYTES);
|
size_t tagIndex = taosArrayGetSize(schema->tags) - 1;
|
||||||
|
taosHashPut(schema->tagHash, field.name, strlen(field.name), &tagIndex, sizeof(tagIndex));
|
||||||
}
|
}
|
||||||
tscDebug("load table meta succeed. %s, columns number: %d, tag number: %d, precision: %d",
|
tscDebug("load table meta succeed. %s, columns number: %d, tag number: %d, precision: %d",
|
||||||
tableName, tableMeta->tableInfo.numOfColumns, tableMeta->tableInfo.numOfTags, schema->precision);
|
tableName, tableMeta->tableInfo.numOfColumns, tableMeta->tableInfo.numOfTags, schema->precision);
|
||||||
|
@ -506,7 +509,7 @@ static int32_t reconcileDBSchemas(TAOS* taos, SArray* stableSchemas) {
|
||||||
SSchema* pointTag = taosArrayGet(pointSchema->tags, j);
|
SSchema* pointTag = taosArrayGet(pointSchema->tags, j);
|
||||||
SSchemaAction schemaAction = {0};
|
SSchemaAction schemaAction = {0};
|
||||||
bool actionNeeded = false;
|
bool actionNeeded = false;
|
||||||
generateSchemaAction(pointTag, dbTagHash, true, pointSchema->sTableName, &schemaAction, &actionNeeded);
|
generateSchemaAction(pointTag, dbTagHash, dbSchema.tags, true, pointSchema->sTableName, &schemaAction, &actionNeeded);
|
||||||
if (actionNeeded) {
|
if (actionNeeded) {
|
||||||
applySchemaAction(taos, &schemaAction);
|
applySchemaAction(taos, &schemaAction);
|
||||||
}
|
}
|
||||||
|
@ -520,7 +523,7 @@ static int32_t reconcileDBSchemas(TAOS* taos, SArray* stableSchemas) {
|
||||||
SSchema* pointCol = taosArrayGet(pointSchema->fields, j);
|
SSchema* pointCol = taosArrayGet(pointSchema->fields, j);
|
||||||
SSchemaAction schemaAction = {0};
|
SSchemaAction schemaAction = {0};
|
||||||
bool actionNeeded = false;
|
bool actionNeeded = false;
|
||||||
generateSchemaAction(pointCol, dbFieldHash, false, pointSchema->sTableName, &schemaAction, &actionNeeded);
|
generateSchemaAction(pointCol, dbFieldHash, dbSchema.fields,false, pointSchema->sTableName, &schemaAction, &actionNeeded);
|
||||||
if (actionNeeded) {
|
if (actionNeeded) {
|
||||||
applySchemaAction(taos, &schemaAction);
|
applySchemaAction(taos, &schemaAction);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue