diff --git a/src/client/src/tscParseOpenTSDB.c b/src/client/src/tscParseOpenTSDB.c index 6b34de63ffce3f4702ae0e9ed863ea02fb7a275b..2ec4eda772697b445615f73a529fb093885704a1 100644 --- a/src/client/src/tscParseOpenTSDB.c +++ b/src/client/src/tscParseOpenTSDB.c @@ -749,8 +749,17 @@ int32_t parseValueFromJSON(cJSON *root, TAOS_SML_KV *pVal, SSmlLinesInfo* info) break; } case cJSON_String: { - //convert default JSON String type to nchar - pVal->type = TSDB_DATA_TYPE_NCHAR; + /* set default JSON type to binary/nchar according to + * user configured parameter tsSmlDefaultJSONStrType + */ + if (strcasecmp(tsSmlDefaultJSONStrType, "binary") == 0) { + pVal->type = TSDB_DATA_TYPE_BINARY; + } else if (strcasecmp(tsSmlDefaultJSONStrType, "nchar") == 0) { + pVal->type = TSDB_DATA_TYPE_NCHAR; + } else { + tscError("OTD:0x%"PRIx64" Invalid default JSON string type set from config %s", info->id, tsSmlDefaultJSONStrType); + return TSDB_CODE_TSC_INVALID_JSON_CONFIG; + } //pVal->length = wcslen((wchar_t *)root->valuestring) * TSDB_NCHAR_SIZE; pVal->length = (int16_t)strlen(root->valuestring); pVal->value = tcalloc(pVal->length + 1, 1); diff --git a/src/common/inc/tglobal.h b/src/common/inc/tglobal.h index 604ce89432bcf662b319fb2ec11f55026450a2be..e8d0937705f049bf3c1d4237eff4023a335ef611 100644 --- a/src/common/inc/tglobal.h +++ b/src/common/inc/tglobal.h @@ -216,7 +216,7 @@ extern int32_t cqDebugFlag; extern int32_t debugFlag; #ifdef TD_TSZ -// lossy +// lossy extern char lossyColumns[]; extern double fPrecision; extern double dPrecision; @@ -224,9 +224,12 @@ extern uint32_t maxRange; extern uint32_t curRange; extern char Compressor[]; #endif -// long query +// long query extern int8_t tsDeadLockKillQuery; +// schemaless +extern char tsSmlDefaultJSONStrType[]; + typedef struct { char dir[TSDB_FILENAME_LEN]; int level; diff --git a/src/common/src/tglobal.c b/src/common/src/tglobal.c index 339fa35bb3009db96c9c6e0cabea6b60881f05c5..57a177b173e2b785064cb62668b7275c816e81fa 100644 --- a/src/common/src/tglobal.c +++ b/src/common/src/tglobal.c @@ -282,6 +282,9 @@ char Compressor[32] = "ZSTD_COMPRESSOR"; // ZSTD_COMPRESSOR or GZIP_COMPRESS // long query death-lock int8_t tsDeadLockKillQuery = 0; +// schemaless +char tsSmlDefaultJSONStrType[7] = "binary"; + int32_t (*monStartSystemFp)() = NULL; void (*monStopSystemFp)() = NULL; void (*monExecuteSQLFp)(char *sql) = NULL; @@ -1637,6 +1640,17 @@ static void doInitGlobalConfig(void) { cfg.unitType = TAOS_CFG_UTYPE_NONE; taosInitConfigOption(cfg); + // Schemaless config + cfg.option = "smlDefaultJSONStrType"; + cfg.ptr = tsSmlDefaultJSONStrType; + cfg.valType = TAOS_CFG_VTYPE_STRING; + cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW | TSDB_CFG_CTYPE_B_CLIENT; + cfg.minValue = 0; + cfg.maxValue = 0; + cfg.ptrLength = tListLen(tsSmlDefaultJSONStrType); + cfg.unitType = TAOS_CFG_UTYPE_NONE; + taosInitConfigOption(cfg); + #ifdef TD_TSZ // lossy compress cfg.option = "lossyColumns"; diff --git a/src/inc/taoserror.h b/src/inc/taoserror.h index d59b88c7e698b3e965b5923efdc760e0289f7250..887c51f10c5a6c10e213bb893725a837a0be77cd 100644 --- a/src/inc/taoserror.h +++ b/src/inc/taoserror.h @@ -110,7 +110,8 @@ int32_t* taosGetErrno(); #define TSDB_CODE_TSC_DUP_TAG_NAMES TAOS_DEF_ERROR_CODE(0, 0x0220) //"duplicated tag names") #define TSDB_CODE_TSC_INVALID_JSON TAOS_DEF_ERROR_CODE(0, 0x0221) //"Invalid JSON format") #define TSDB_CODE_TSC_INVALID_JSON_TYPE TAOS_DEF_ERROR_CODE(0, 0x0222) //"Invalid JSON data type") -#define TSDB_CODE_TSC_VALUE_OUT_OF_RANGE TAOS_DEF_ERROR_CODE(0, 0x0223) //"Value out of range") +#define TSDB_CODE_TSC_INVALID_JSON_CONFIG TAOS_DEF_ERROR_CODE(0, 0x0223) //"Invalid JSON configuration") +#define TSDB_CODE_TSC_VALUE_OUT_OF_RANGE TAOS_DEF_ERROR_CODE(0, 0x0224) //"Value out of range") // mnode #define TSDB_CODE_MND_MSG_NOT_PROCESSED TAOS_DEF_ERROR_CODE(0, 0x0300) //"Message not processed") diff --git a/src/util/inc/tconfig.h b/src/util/inc/tconfig.h index cf8977ce06c898fcdee8d21eedf5ed8d0f47f263..97273e29fd4aa105c2eb64a90e22b90770afa69e 100644 --- a/src/util/inc/tconfig.h +++ b/src/util/inc/tconfig.h @@ -20,7 +20,7 @@ extern "C" { #endif -#define TSDB_CFG_MAX_NUM 123 +#define TSDB_CFG_MAX_NUM 124 #define TSDB_CFG_PRINT_LEN 23 #define TSDB_CFG_OPTION_LEN 24 #define TSDB_CFG_VALUE_LEN 41 diff --git a/src/util/src/terror.c b/src/util/src/terror.c index e3d022a6b0a4a929b6c06b2c305fb71b6980a865..404d4ad0c18944826abebf6d0e73c573dbe54756 100644 --- a/src/util/src/terror.c +++ b/src/util/src/terror.c @@ -118,6 +118,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_TSC_INVALID_COLUMN_LENGTH, "Invalid column length TAOS_DEFINE_ERROR(TSDB_CODE_TSC_DUP_TAG_NAMES, "duplicated tag names") TAOS_DEFINE_ERROR(TSDB_CODE_TSC_INVALID_JSON, "Invalid JSON format") TAOS_DEFINE_ERROR(TSDB_CODE_TSC_INVALID_JSON_TYPE, "Invalid JSON data type") +TAOS_DEFINE_ERROR(TSDB_CODE_TSC_INVALID_JSON_CONFIG, "Invalid JSON configuration") TAOS_DEFINE_ERROR(TSDB_CODE_TSC_VALUE_OUT_OF_RANGE, "Value out of range") // mnode