refactor:dd a function of generate table name
This commit is contained in:
parent
8dccd22958
commit
d9f76c7b72
|
@ -17,6 +17,7 @@
|
||||||
#define _TD_COMMON_NAME_H_
|
#define _TD_COMMON_NAME_H_
|
||||||
|
|
||||||
#include "tdef.h"
|
#include "tdef.h"
|
||||||
|
#include "tarray.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
@ -62,6 +63,18 @@ int32_t tNameSetAcctId(SName* dst, int32_t acctId);
|
||||||
|
|
||||||
bool tNameDBNameEqual(SName* left, SName* right);
|
bool tNameDBNameEqual(SName* left, SName* right);
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
// input
|
||||||
|
SArray *tags; // element is SSmlKV
|
||||||
|
const char *sTableName; // super table name
|
||||||
|
uint8_t sTableNameLen; // the length of super table name
|
||||||
|
|
||||||
|
// output
|
||||||
|
char *childTableName; // must have size of TSDB_TABLE_NAME_LEN;
|
||||||
|
uint64_t uid; // child table uid, may be useful
|
||||||
|
} RandTableName;
|
||||||
|
|
||||||
|
void buildChildTableName(RandTableName *rName);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#include "tcommon.h"
|
#include "tcommon.h"
|
||||||
#include "catalog.h"
|
#include "catalog.h"
|
||||||
#include "clientInt.h"
|
#include "clientInt.h"
|
||||||
|
#include "tname.h"
|
||||||
//=================================================================================================
|
//=================================================================================================
|
||||||
|
|
||||||
#define SPACE ' '
|
#define SPACE ' '
|
||||||
|
@ -163,19 +164,6 @@ static int32_t smlBuildInvalidDataMsg(SSmlMsgBuf* pBuf, const char *msg1, const
|
||||||
return TSDB_CODE_SML_INVALID_DATA;
|
return TSDB_CODE_SML_INVALID_DATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int smlCompareKv(const void* p1, const void* p2) {
|
|
||||||
SSmlKv* kv1 = *(SSmlKv**)p1;
|
|
||||||
SSmlKv* kv2 = *(SSmlKv**)p2;
|
|
||||||
int32_t kvLen1 = kv1->keyLen;
|
|
||||||
int32_t kvLen2 = kv2->keyLen;
|
|
||||||
int32_t res = strncasecmp(kv1->key, kv2->key, TMIN(kvLen1, kvLen2));
|
|
||||||
if (res != 0) {
|
|
||||||
return res;
|
|
||||||
} else {
|
|
||||||
return kvLen1-kvLen2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void smlBuildChildTableName(SSmlTableInfo *tags) {
|
static void smlBuildChildTableName(SSmlTableInfo *tags) {
|
||||||
int32_t size = taosArrayGetSize(tags->tags);
|
int32_t size = taosArrayGetSize(tags->tags);
|
||||||
ASSERT(size > 0);
|
ASSERT(size > 0);
|
||||||
|
@ -943,20 +931,6 @@ static bool smlParseValue(SSmlKv *pVal, SSmlMsgBuf *msg) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool checkDuplicateKey(char *key, SHashObj *pHash, SSmlHandle* info) {
|
|
||||||
char *val = NULL;
|
|
||||||
val = taosHashGet(pHash, key, strlen(key));
|
|
||||||
if (val) {
|
|
||||||
uError("SML:0x%"PRIx64" Duplicate key detected:%s", info->id, key);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t dummy_val = 0;
|
|
||||||
taosHashPut(pHash, key, strlen(key), &dummy_val, sizeof(uint8_t));
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int32_t smlParseString(const char* sql, SSmlLineInfo *elements, SSmlMsgBuf *msg){
|
static int32_t smlParseString(const char* sql, SSmlLineInfo *elements, SSmlMsgBuf *msg){
|
||||||
if(!sql) return TSDB_CODE_SML_INVALID_DATA;
|
if(!sql) return TSDB_CODE_SML_INVALID_DATA;
|
||||||
while (*sql != '\0') { // jump the space at the begining
|
while (*sql != '\0') { // jump the space at the begining
|
||||||
|
@ -1563,8 +1537,10 @@ static int32_t smlParseLine(SSmlHandle* info, const char* sql) {
|
||||||
|
|
||||||
tinfo->sTableName = elements.measure;
|
tinfo->sTableName = elements.measure;
|
||||||
tinfo->sTableNameLen = elements.measureLen;
|
tinfo->sTableNameLen = elements.measureLen;
|
||||||
smlBuildChildTableName(tinfo);
|
RandTableName rName = {.tags=tinfo->tags, .sTableName=tinfo->sTableName, .sTableNameLen=tinfo->sTableNameLen,
|
||||||
//uDebug("SML:0x%"PRIx64" child table name: %s", info->id, tinfo->childTableName);
|
.childTableName=tinfo->childTableName};
|
||||||
|
buildChildTableName(&rName);
|
||||||
|
tinfo->uid = rName.uid;
|
||||||
|
|
||||||
SSmlSTableMeta** tableMeta = taosHashGet(info->superTables, elements.measure, elements.measureLen);
|
SSmlSTableMeta** tableMeta = taosHashGet(info->superTables, elements.measure, elements.measureLen);
|
||||||
if(tableMeta){ // update meta
|
if(tableMeta){ // update meta
|
||||||
|
@ -1724,17 +1700,7 @@ static int32_t smlInsertData(SSmlHandle* info) {
|
||||||
return info->pRequest->code;
|
return info->pRequest->code;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t numOfSTables;
|
static void smlPrintStatisticInfo(SSmlHandle *info){
|
||||||
int32_t numOfCTables;
|
|
||||||
int32_t numOfCreateSTables;
|
|
||||||
|
|
||||||
int64_t parseTime;
|
|
||||||
int64_t schemaTime;
|
|
||||||
int64_t insertBindTime;
|
|
||||||
int64_t insertRpcTime;
|
|
||||||
int64_t endTime;
|
|
||||||
|
|
||||||
static void printStatisticInfo(SSmlHandle *info){
|
|
||||||
uError("SML:0x%"PRIx64" smlInsertLines result, code:%d,lineNum:%d,stable num:%d,ctable num:%d,create stable num:%d \
|
uError("SML:0x%"PRIx64" smlInsertLines result, code:%d,lineNum:%d,stable num:%d,ctable num:%d,create stable num:%d \
|
||||||
parse cost:%lld,schema cost:%lld,bind cost:%lld,rpc cost:%lld,total cost:%lld", info->id, info->cost.code,
|
parse cost:%lld,schema cost:%lld,bind cost:%lld,rpc cost:%lld,total cost:%lld", info->id, info->cost.code,
|
||||||
info->cost.lineNum, info->cost.numOfSTables, info->cost.numOfCTables, info->cost.numOfCreateSTables,
|
info->cost.lineNum, info->cost.numOfSTables, info->cost.numOfCTables, info->cost.numOfCreateSTables,
|
||||||
|
@ -1782,7 +1748,7 @@ static int smlInsertLines(SSmlHandle *info, char* lines[], int numLines) {
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
info->cost.code = code;
|
info->cost.code = code;
|
||||||
printStatisticInfo(info);
|
smlPrintStatisticInfo(info);
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,8 @@
|
||||||
|
|
||||||
#define _DEFAULT_SOURCE
|
#define _DEFAULT_SOURCE
|
||||||
#include "tname.h"
|
#include "tname.h"
|
||||||
|
#include "tcommon.h"
|
||||||
|
#include "tstrbuild.h"
|
||||||
|
|
||||||
#define VALID_NAME_TYPE(x) ((x) == TSDB_DB_NAME_T || (x) == TSDB_TABLE_NAME_T)
|
#define VALID_NAME_TYPE(x) ((x) == TSDB_DB_NAME_T || (x) == TSDB_TABLE_NAME_T)
|
||||||
|
|
||||||
|
@ -294,4 +296,43 @@ int32_t tNameFromString(SName* dst, const char* str, uint32_t type) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int compareKv(const void* p1, const void* p2) {
|
||||||
|
SSmlKv* kv1 = *(SSmlKv**)p1;
|
||||||
|
SSmlKv* kv2 = *(SSmlKv**)p2;
|
||||||
|
int32_t kvLen1 = kv1->keyLen;
|
||||||
|
int32_t kvLen2 = kv2->keyLen;
|
||||||
|
int32_t res = strncasecmp(kv1->key, kv2->key, TMIN(kvLen1, kvLen2));
|
||||||
|
if (res != 0) {
|
||||||
|
return res;
|
||||||
|
} else {
|
||||||
|
return kvLen1-kvLen2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* use stable name and tags to grearate child table name
|
||||||
|
*/
|
||||||
|
void buildChildTableName(RandTableName *rName) {
|
||||||
|
int32_t size = taosArrayGetSize(rName->tags);
|
||||||
|
ASSERT(size > 0);
|
||||||
|
taosArraySort(rName->tags, compareKv);
|
||||||
|
|
||||||
|
SStringBuilder sb = {0};
|
||||||
|
taosStringBuilderAppendStringLen(&sb, rName->sTableName, rName->sTableNameLen);
|
||||||
|
for (int j = 0; j < size; ++j) {
|
||||||
|
SSmlKv *tagKv = taosArrayGetP(rName->tags, j);
|
||||||
|
taosStringBuilderAppendStringLen(&sb, tagKv->key, tagKv->keyLen);
|
||||||
|
taosStringBuilderAppendStringLen(&sb, tagKv->value, tagKv->valueLen);
|
||||||
|
}
|
||||||
|
size_t len = 0;
|
||||||
|
char* keyJoined = taosStringBuilderGetResult(&sb, &len);
|
||||||
|
T_MD5_CTX context;
|
||||||
|
tMD5Init(&context);
|
||||||
|
tMD5Update(&context, (uint8_t *)keyJoined, (uint32_t)len);
|
||||||
|
tMD5Final(&context);
|
||||||
|
uint64_t digest1 = *(uint64_t*)(context.digest);
|
||||||
|
uint64_t digest2 = *(uint64_t*)(context.digest + 8);
|
||||||
|
snprintf(rName->childTableName, TSDB_TABLE_NAME_LEN, "t_%016"PRIx64"%016"PRIx64, digest1, digest2);
|
||||||
|
taosStringBuilderDestroy(&sb);
|
||||||
|
rName->uid = digest1;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue