Merge pull request #6914 from taosdata/fix/TD-5324
[TD-5324]<fix>:check max row bytes when alter tag/column width
This commit is contained in:
commit
3de012990a
|
@ -6010,6 +6010,16 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
||||||
return invalidOperationMsg(pMsg, msg22);
|
return invalidOperationMsg(pMsg, msg22);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SSchema* pSchema = (SSchema*) pTableMetaInfo->pTableMeta->schema;
|
||||||
|
int16_t numOfColumns = pTableMetaInfo->pTableMeta->tableInfo.numOfColumns;
|
||||||
|
int16_t i;
|
||||||
|
uint32_t nLen = 0;
|
||||||
|
for (i = 0; i < numOfColumns; ++i) {
|
||||||
|
nLen += pSchema[i].colId != columnIndex.columnIndex ? pSchema[i].bytes : pItem->bytes;
|
||||||
|
}
|
||||||
|
if (nLen >= TSDB_MAX_BYTES_PER_ROW) {
|
||||||
|
return invalidOperationMsg(pMsg, msg24);
|
||||||
|
}
|
||||||
TAOS_FIELD f = tscCreateField(pColSchema->type, name.z, pItem->bytes);
|
TAOS_FIELD f = tscCreateField(pColSchema->type, name.z, pItem->bytes);
|
||||||
tscFieldInfoAppend(&pQueryInfo->fieldsInfo, &f);
|
tscFieldInfoAppend(&pQueryInfo->fieldsInfo, &f);
|
||||||
}else if (pAlterSQL->type == TSDB_ALTER_TABLE_MODIFY_TAG_COLUMN) {
|
}else if (pAlterSQL->type == TSDB_ALTER_TABLE_MODIFY_TAG_COLUMN) {
|
||||||
|
@ -6051,6 +6061,17 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
||||||
return invalidOperationMsg(pMsg, msg22);
|
return invalidOperationMsg(pMsg, msg22);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SSchema* pSchema = (SSchema*) pTableMetaInfo->pTableMeta->schema;
|
||||||
|
int16_t numOfColumns = pTableMetaInfo->pTableMeta->tableInfo.numOfColumns;
|
||||||
|
int16_t i;
|
||||||
|
uint32_t nLen = 0;
|
||||||
|
for (i = 0; i < numOfColumns; ++i) {
|
||||||
|
nLen += pSchema[i].colId != columnIndex.columnIndex ? pSchema[i].bytes : pItem->bytes;
|
||||||
|
}
|
||||||
|
if (nLen >= TSDB_MAX_BYTES_PER_ROW) {
|
||||||
|
return invalidOperationMsg(pMsg, msg24);
|
||||||
|
}
|
||||||
|
|
||||||
TAOS_FIELD f = tscCreateField(pColSchema->type, name.z, pItem->bytes);
|
TAOS_FIELD f = tscCreateField(pColSchema->type, name.z, pItem->bytes);
|
||||||
tscFieldInfoAppend(&pQueryInfo->fieldsInfo, &f);
|
tscFieldInfoAppend(&pQueryInfo->fieldsInfo, &f);
|
||||||
}
|
}
|
||||||
|
|
|
@ -174,6 +174,7 @@ int32_t* taosGetErrno();
|
||||||
#define TSDB_CODE_MND_FIELD_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x036C) //"Field does not exist")
|
#define TSDB_CODE_MND_FIELD_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x036C) //"Field does not exist")
|
||||||
#define TSDB_CODE_MND_INVALID_STABLE_NAME TAOS_DEF_ERROR_CODE(0, 0x036D) //"Super table does not exist")
|
#define TSDB_CODE_MND_INVALID_STABLE_NAME TAOS_DEF_ERROR_CODE(0, 0x036D) //"Super table does not exist")
|
||||||
#define TSDB_CODE_MND_INVALID_CREATE_TABLE_MSG TAOS_DEF_ERROR_CODE(0, 0x036E) //"Invalid create table message")
|
#define TSDB_CODE_MND_INVALID_CREATE_TABLE_MSG TAOS_DEF_ERROR_CODE(0, 0x036E) //"Invalid create table message")
|
||||||
|
#define TSDB_CODE_MND_EXCEED_MAX_ROW_BYTES TAOS_DEF_ERROR_CODE(0, 0x036F) //"Exceed max row bytes")
|
||||||
|
|
||||||
#define TSDB_CODE_MND_INVALID_FUNC_NAME TAOS_DEF_ERROR_CODE(0, 0x0370) //"Invalid func name")
|
#define TSDB_CODE_MND_INVALID_FUNC_NAME TAOS_DEF_ERROR_CODE(0, 0x0370) //"Invalid func name")
|
||||||
#define TSDB_CODE_MND_INVALID_FUNC_LEN TAOS_DEF_ERROR_CODE(0, 0x0371) //"Invalid func length")
|
#define TSDB_CODE_MND_INVALID_FUNC_LEN TAOS_DEF_ERROR_CODE(0, 0x0371) //"Invalid func length")
|
||||||
|
|
|
@ -1503,6 +1503,18 @@ static int32_t mnodeChangeSuperTableColumn(SMnodeMsg *pMsg) {
|
||||||
return TSDB_CODE_MND_FIELD_NOT_EXIST;
|
return TSDB_CODE_MND_FIELD_NOT_EXIST;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check exceed max row bytes
|
||||||
|
int32_t i;
|
||||||
|
uint32_t nLen = 0;
|
||||||
|
for (i = 0; i < pStable->numOfColumns; ++i) {
|
||||||
|
nLen += (pStable->schema[i].colId == col) ? pAlter->schema[0].bytes : pStable->schema[i].bytes;
|
||||||
|
}
|
||||||
|
if (nLen > TSDB_MAX_BYTES_PER_ROW) {
|
||||||
|
mError("msg:%p, app:%p stable:%s, change column, name:%s exceed max row bytes", pMsg, pMsg->rpcMsg.ahandle,
|
||||||
|
pStable->info.tableId, name);
|
||||||
|
return TSDB_CODE_MND_EXCEED_MAX_ROW_BYTES;
|
||||||
|
}
|
||||||
|
|
||||||
// update
|
// update
|
||||||
SSchema *schema = (SSchema *) (pStable->schema + col);
|
SSchema *schema = (SSchema *) (pStable->schema + col);
|
||||||
ASSERT(schema->type == TSDB_DATA_TYPE_BINARY || schema->type == TSDB_DATA_TYPE_NCHAR);
|
ASSERT(schema->type == TSDB_DATA_TYPE_BINARY || schema->type == TSDB_DATA_TYPE_NCHAR);
|
||||||
|
|
|
@ -183,6 +183,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_MND_FIELD_ALREAY_EXIST, "Field already exists"
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_FIELD_NOT_EXIST, "Field does not exist")
|
TAOS_DEFINE_ERROR(TSDB_CODE_MND_FIELD_NOT_EXIST, "Field does not exist")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_STABLE_NAME, "Super table does not exist")
|
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_STABLE_NAME, "Super table does not exist")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_CREATE_TABLE_MSG, "Invalid create table message")
|
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_CREATE_TABLE_MSG, "Invalid create table message")
|
||||||
|
TAOS_DEFINE_ERROR(TSDB_CODE_MND_EXCEED_MAX_ROW_BYTES, "Exceed max row bytes")
|
||||||
|
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_FUNC_NAME, "Invalid func name")
|
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_FUNC_NAME, "Invalid func name")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_FUNC_LEN, "Invalid func length")
|
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_FUNC_LEN, "Invalid func length")
|
||||||
|
|
Loading…
Reference in New Issue