diff --git a/source/libs/index/inc/index_fst_node.h b/source/libs/index/inc/index_fst_node.h index 09dcd223b1..631c7026c5 100644 --- a/source/libs/index/inc/index_fst_node.h +++ b/source/libs/index/inc/index_fst_node.h @@ -33,6 +33,8 @@ typedef struct FstBuilderNode { FstBuilderNode *fstBuilderNodeDefault(); +FstBuilderNode *fstBuilderNodeClone(FstBuilderNode *src); + void fstBuilderNodeCloneFrom(FstBuilderNode *dst, FstBuilderNode *src); #endif diff --git a/source/libs/index/inc/index_fst_registry.h b/source/libs/index/inc/index_fst_registry.h index d54d73683f..f19bb750c2 100644 --- a/source/libs/index/inc/index_fst_registry.h +++ b/source/libs/index/inc/index_fst_registry.h @@ -54,5 +54,4 @@ FstRegistry* fstRegistryCreate(uint64_t tableSize, uint64_t mruSize); FstRegistryEntry* fstRegistryGetEntry(FstRegistry *registry, FstBuilderNode *bNode); -uint64_t fstRegistryHash(FstRegistry *registry, FstBuilderNode *node); #endif diff --git a/source/libs/index/src/index_fst_node.c b/source/libs/index/src/index_fst_node.c index 1511781719..23af4a4a4b 100644 --- a/source/libs/index/src/index_fst_node.c +++ b/source/libs/index/src/index_fst_node.c @@ -22,6 +22,26 @@ FstBuilderNode *fstBuilderNodeDefault() { return bn; } +FstBuilderNode *fstBuilderNodeClone(FstBuilderNode *src) { + FstBuilderNode *node = malloc(sizeof(FstBuilderNode)); + if (node == NULL) { return NULL; } + + + size_t sz = taosArrayGetSize(src->trans); + SArray *trans = taosArrayInit(sz, sizeof(FstTransition)); + + for (size_t i = 0; i < sz; i++) { + FstTransition *tran = taosArrayGet(src->trans, i); + FstTransition t = *tran; + taosArrayPush(trans, &t); + } + + node->trans = trans; + node->isFinal = src->isFinal; + node->finalOutput = src->finalOutput; + return node; + +} // not destroy src, User's bussiness void fstBuilderNodeCloneFrom(FstBuilderNode *dst, FstBuilderNode *src) { if (dst == NULL || src == NULL) { return; }