Merge pull request #12918 from taosdata/feature/TD-14761
fix:add modify schema for schemaless
This commit is contained in:
commit
f053cf20cb
|
@ -24,7 +24,6 @@
|
||||||
#define EQUAL '='
|
#define EQUAL '='
|
||||||
#define QUOTE '"'
|
#define QUOTE '"'
|
||||||
#define SLASH '\\'
|
#define SLASH '\\'
|
||||||
#define tsMaxSQLStringLen (1024*1024)
|
|
||||||
|
|
||||||
#define JUMP_SPACE(sql) while (*sql != '\0'){if(*sql == SPACE) sql++;else break;}
|
#define JUMP_SPACE(sql) while (*sql != '\0'){if(*sql == SPACE) sql++;else break;}
|
||||||
// comma ,
|
// comma ,
|
||||||
|
@ -63,12 +62,11 @@ for (int i = 1; i < keyLen; ++i) { \
|
||||||
|
|
||||||
#define TS "_ts"
|
#define TS "_ts"
|
||||||
#define TS_LEN 3
|
#define TS_LEN 3
|
||||||
#define VALUE "value"
|
#define VALUE "_value"
|
||||||
#define VALUE_LEN 5
|
#define VALUE_LEN 6
|
||||||
|
|
||||||
#define BINARY_ADD_LEN 2 // "binary" 2 means " "
|
#define BINARY_ADD_LEN 2 // "binary" 2 means " "
|
||||||
#define NCHAR_ADD_LEN 3 // L"nchar" 3 means L" "
|
#define NCHAR_ADD_LEN 3 // L"nchar" 3 means L" "
|
||||||
#define CHAR_SAVE_LENGTH 8
|
|
||||||
//=================================================================================================
|
//=================================================================================================
|
||||||
typedef TSDB_SML_PROTOCOL_TYPE SMLProtocolType;
|
typedef TSDB_SML_PROTOCOL_TYPE SMLProtocolType;
|
||||||
|
|
||||||
|
@ -253,12 +251,20 @@ static int32_t smlGenerateSchemaAction(SSchema* colField, SHashObj* colHash, SSm
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int32_t smlFindNearestPowerOf2(int32_t length){
|
||||||
|
int32_t result = 1;
|
||||||
|
while(result <= length){
|
||||||
|
result *= 2;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
static int32_t smlBuildColumnDescription(SSmlKv* field, char* buf, int32_t bufSize, int32_t* outBytes) {
|
static int32_t smlBuildColumnDescription(SSmlKv* field, char* buf, int32_t bufSize, int32_t* outBytes) {
|
||||||
uint8_t type = field->type;
|
uint8_t type = field->type;
|
||||||
char tname[TSDB_TABLE_NAME_LEN] = {0};
|
char tname[TSDB_TABLE_NAME_LEN] = {0};
|
||||||
memcpy(tname, field->key, field->keyLen);
|
memcpy(tname, field->key, field->keyLen);
|
||||||
if (type == TSDB_DATA_TYPE_BINARY || type == TSDB_DATA_TYPE_NCHAR) {
|
if (type == TSDB_DATA_TYPE_BINARY || type == TSDB_DATA_TYPE_NCHAR) {
|
||||||
int32_t bytes = field->length > CHAR_SAVE_LENGTH ? (2*field->length) : CHAR_SAVE_LENGTH;
|
int32_t bytes = smlFindNearestPowerOf2(field->length);
|
||||||
int out = snprintf(buf, bufSize, "`%s` %s(%d)",
|
int out = snprintf(buf, bufSize, "`%s` %s(%d)",
|
||||||
tname, tDataTypes[field->type].name, bytes);
|
tname, tDataTypes[field->type].name, bytes);
|
||||||
*outBytes = out;
|
*outBytes = out;
|
||||||
|
@ -273,8 +279,8 @@ static int32_t smlBuildColumnDescription(SSmlKv* field, char* buf, int32_t bufSi
|
||||||
static int32_t smlApplySchemaAction(SSmlHandle* info, SSchemaAction* action) {
|
static int32_t smlApplySchemaAction(SSmlHandle* info, SSchemaAction* action) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
int32_t outBytes = 0;
|
int32_t outBytes = 0;
|
||||||
char *result = (char *)taosMemoryCalloc(1, tsMaxSQLStringLen+1);
|
char *result = (char *)taosMemoryCalloc(1, TSDB_MAX_ALLOWED_SQL_LEN);
|
||||||
int32_t capacity = tsMaxSQLStringLen + 1;
|
int32_t capacity = TSDB_MAX_ALLOWED_SQL_LEN;
|
||||||
|
|
||||||
uDebug("SML:0x%"PRIx64" apply schema action. action: %d", info->id, action->action);
|
uDebug("SML:0x%"PRIx64" apply schema action. action: %d", info->id, action->action);
|
||||||
switch (action->action) {
|
switch (action->action) {
|
||||||
|
@ -398,7 +404,7 @@ static int32_t smlApplySchemaAction(SSmlHandle* info, SSchemaAction* action) {
|
||||||
}
|
}
|
||||||
if(taosArrayGetSize(cols) == 0){
|
if(taosArrayGetSize(cols) == 0){
|
||||||
outBytes = snprintf(pos, freeBytes,"`%s` %s(%d)",
|
outBytes = snprintf(pos, freeBytes,"`%s` %s(%d)",
|
||||||
tsSmlTagName, tDataTypes[TSDB_DATA_TYPE_NCHAR].name, CHAR_SAVE_LENGTH);
|
tsSmlTagName, tDataTypes[TSDB_DATA_TYPE_NCHAR].name, 1);
|
||||||
pos += outBytes; freeBytes -= outBytes;
|
pos += outBytes; freeBytes -= outBytes;
|
||||||
*pos = ','; ++pos; --freeBytes;
|
*pos = ','; ++pos; --freeBytes;
|
||||||
}
|
}
|
||||||
|
@ -508,6 +514,11 @@ static int32_t smlModifyDBSchemas(SSmlHandle* info) {
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
code = catalogRefreshTableMeta(info->pCatalog, info->taos->pAppInfo->pTransporter, &ep, &pName, -1);
|
||||||
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
uError("SML:0x%"PRIx64" load table meta error: %s", info->id, tstrerror(code));
|
uError("SML:0x%"PRIx64" load table meta error: %s", info->id, tstrerror(code));
|
||||||
return code;
|
return code;
|
||||||
|
|
Loading…
Reference in New Issue