diff --git a/source/libs/index/src/log b/source/libs/index/src/log deleted file mode 100644 index 0b6cb8ddc20e0f04ed361b438f8eee952f555fe4..0000000000000000000000000000000000000000 --- a/source/libs/index/src/log +++ /dev/null @@ -1,1445 +0,0 @@ -980ace09b54 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-15 11:36:51 +0800 1) /* -980ace09b54 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-15 11:36:51 +0800 2) * Copyright (c) 2019 TAOS Data, Inc. -980ace09b54 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-15 11:36:51 +0800 3) * -980ace09b54 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-15 11:36:51 +0800 4) * This program is free software: you can use, redistribute, and/or modify -980ace09b54 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-15 11:36:51 +0800 5) * it under the terms of the GNU Affero General Public License, version 3 -980ace09b54 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-15 11:36:51 +0800 6) * or later ("AGPL"), as published by the Free Software Foundation. -980ace09b54 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-15 11:36:51 +0800 7) * -980ace09b54 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-15 11:36:51 +0800 8) * This program is distributed in the hope that it will be useful, but WITHOUT -980ace09b54 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-15 11:36:51 +0800 9) * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -980ace09b54 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-15 11:36:51 +0800 10) * FITNESS FOR A PARTICULAR PURPOSE. -980ace09b54 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-15 11:36:51 +0800 11) * -980ace09b54 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-15 11:36:51 +0800 12) * You should have received a copy of the GNU Affero General Public License -980ace09b54 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-15 11:36:51 +0800 13) * along with this program. If not, see . -980ace09b54 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-15 11:36:51 +0800 14) */ -980ace09b54 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-15 11:36:51 +0800 15) -5cf0c4a61c6 source/libs/index/src/indexFst.c (yihaoDeng 2022-03-29 23:11:57 +0800 16) #include "indexFst.h" -5cf0c4a61c6 source/libs/index/src/indexFst.c (yihaoDeng 2022-03-29 23:11:57 +0800 17) #include "indexFstAutomation.h" -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 18) #include "indexInt.h" -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 19) #include "tchecksum.h" -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 20) #include "tcoding.h" -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 21) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 22) static void fstPackDeltaIn(FstCountingWriter* wrt, CompiledAddr nodeAddr, CompiledAddr transAddr, uint8_t nBytes) { -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 23) CompiledAddr deltaAddr = (transAddr == EMPTY_ADDRESS) ? EMPTY_ADDRESS : nodeAddr - transAddr; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 24) fstCountingWriterPackUintIn(wrt, deltaAddr, nBytes); -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 25) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 26) static uint8_t fstPackDetla(FstCountingWriter* wrt, CompiledAddr nodeAddr, CompiledAddr transAddr) { -20203e47eb5 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:57:50 +0800 27) uint8_t nBytes = packDeltaSize(nodeAddr, transAddr); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 28) fstPackDeltaIn(wrt, nodeAddr, transAddr, nBytes); -d39f80185f7 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 20:42:19 +0800 29) return nBytes; -20203e47eb5 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:57:50 +0800 30) } -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 31) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 32) FstUnFinishedNodes* fstUnFinishedNodesCreate() { -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 33) FstUnFinishedNodes* nodes = taosMemoryMalloc(sizeof(FstUnFinishedNodes)); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 34) if (nodes == NULL) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 35) return NULL; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 36) } -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 37) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 38) nodes->stack = (SArray*)taosArrayInit(64, sizeof(FstBuilderNodeUnfinished)); -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 39) fstUnFinishedNodesPushEmpty(nodes, false); -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 40) return nodes; -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 41) } -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 42) static void unFinishedNodeDestroyElem(void* elem) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 43) FstBuilderNodeUnfinished* b = (FstBuilderNodeUnfinished*)elem; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 44) fstBuilderNodeDestroy(b->node); -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 45) taosMemoryFree(b->last); -7e1f68f86fc source/libs/index/src/index_fst.c (yihaoDeng 2021-12-06 14:32:54 +0800 46) b->last = NULL; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 47) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 48) void fstUnFinishedNodesDestroy(FstUnFinishedNodes* nodes) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 49) if (nodes == NULL) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 50) return; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 51) } -0bbe42df45d source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 15:35:12 +0800 52) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 53) taosArrayDestroyEx(nodes->stack, unFinishedNodeDestroyElem); -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 54) taosMemoryFree(nodes); -0bbe42df45d source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 15:35:12 +0800 55) } -0bbe42df45d source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 15:35:12 +0800 56) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 57) void fstUnFinishedNodesPushEmpty(FstUnFinishedNodes* nodes, bool isFinal) { -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 58) FstBuilderNode* node = taosMemoryMalloc(sizeof(FstBuilderNode)); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 59) node->isFinal = isFinal; -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 60) node->finalOutput = 0; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 61) node->trans = taosArrayInit(16, sizeof(FstTransition)); -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 62) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 63) FstBuilderNodeUnfinished un = {.node = node, .last = NULL}; -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 64) taosArrayPush(nodes->stack, &un); -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 65) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 66) FstBuilderNode* fstUnFinishedNodesPopRoot(FstUnFinishedNodes* nodes) { -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 67) assert(taosArrayGetSize(nodes->stack) == 1); -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 68) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 69) FstBuilderNodeUnfinished* un = taosArrayPop(nodes->stack); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 70) assert(un->last == NULL); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 71) return un->node; -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 72) } -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 73) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 74) FstBuilderNode* fstUnFinishedNodesPopFreeze(FstUnFinishedNodes* nodes, CompiledAddr addr) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 75) FstBuilderNodeUnfinished* un = taosArrayPop(nodes->stack); -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 76) fstBuilderNodeUnfinishedLastCompiled(un, addr); -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 77) // taosMemoryFree(un->last); // TODO add func FstLastTransitionFree() -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 78) // un->last = NULL; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 79) return un->node; -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 80) } -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 81) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 82) FstBuilderNode* fstUnFinishedNodesPopEmpty(FstUnFinishedNodes* nodes) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 83) FstBuilderNodeUnfinished* un = taosArrayPop(nodes->stack); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 84) assert(un->last == NULL); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 85) return un->node; -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 86) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 87) void fstUnFinishedNodesSetRootOutput(FstUnFinishedNodes* nodes, Output out) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 88) FstBuilderNodeUnfinished* un = taosArrayGet(nodes->stack, 0); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 89) un->node->isFinal = true; -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 90) un->node->finalOutput = out; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 91) // un->node->trans = NULL; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 92) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 93) void fstUnFinishedNodesTopLastFreeze(FstUnFinishedNodes* nodes, CompiledAddr addr) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 94) FstBuilderNodeUnfinished* un = taosArrayGet(nodes->stack, taosArrayGetSize(nodes->stack) - 1); -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 95) fstBuilderNodeUnfinishedLastCompiled(un, addr); -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 96) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 97) void fstUnFinishedNodesAddSuffix(FstUnFinishedNodes* nodes, FstSlice bs, Output out) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 98) FstSlice* s = &bs; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 99) if (fstSliceIsEmpty(s)) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 100) return; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 101) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 102) size_t sz = taosArrayGetSize(nodes->stack) - 1; -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 103) FstBuilderNodeUnfinished* un = taosArrayGet(nodes->stack, sz); -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 104) assert(un->last == NULL); -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 105) -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 106) // FstLastTransition *trn = taosMemoryMalloc(sizeof(FstLastTransition)); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 107) // trn->inp = s->data[s->start]; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 108) // trn->out = out; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 109) int32_t len = 0; -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 110) uint8_t* data = fstSliceData(s, &len); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 111) un->last = fstLastTransitionCreate(data[0], out); -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 112) -d0844e5dda0 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-04 21:40:09 +0800 113) for (uint64_t i = 1; i < len; i++) { -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 114) FstBuilderNode* n = taosMemoryMalloc(sizeof(FstBuilderNode)); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 115) n->isFinal = false; -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 116) n->finalOutput = 0; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 117) n->trans = taosArrayInit(16, sizeof(FstTransition)); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 118) -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 119) // FstLastTransition *trn = taosMemoryMalloc(sizeof(FstLastTransition)); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 120) // trn->inp = s->data[i]; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 121) // trn->out = out; -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 122) FstLastTransition* trn = fstLastTransitionCreate(data[i], 0); -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 123) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 124) FstBuilderNodeUnfinished un = {.node = n, .last = trn}; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 125) taosArrayPush(nodes->stack, &un); -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 126) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 127) fstUnFinishedNodesPushEmpty(nodes, true); -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 128) } -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 129) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 130) uint64_t fstUnFinishedNodesFindCommPrefix(FstUnFinishedNodes* node, FstSlice bs) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 131) FstSlice* s = &bs; -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 132) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 133) size_t ssz = taosArrayGetSize(node->stack); // stack size -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 134) uint64_t count = 0; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 135) int32_t lsz; // data len -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 136) uint8_t* data = fstSliceData(s, &lsz); -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 137) for (size_t i = 0; i < ssz && i < lsz; i++) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 138) FstBuilderNodeUnfinished* un = taosArrayGet(node->stack, i); -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 139) if (un->last->inp == data[i]) { -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 140) count++; -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 141) } else { -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 142) break; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 143) } -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 144) } -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 145) return count; -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 146) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 147) uint64_t fstUnFinishedNodesFindCommPrefixAndSetOutput(FstUnFinishedNodes* node, FstSlice bs, Output in, Output* out) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 148) FstSlice* s = &bs; -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 149) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 150) size_t lsz = (size_t)(s->end - s->start + 1); // data len -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 151) size_t ssz = taosArrayGetSize(node->stack); // stack size -db2bf567c25 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-06 18:43:48 +0800 152) *out = in; -16f089c39a7 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 15:24:55 +0800 153) uint64_t i = 0; -16f089c39a7 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 15:24:55 +0800 154) for (i = 0; i < lsz && i < ssz; i++) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 155) FstBuilderNodeUnfinished* un = taosArrayGet(node->stack, i); -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 156) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 157) FstLastTransition* t = un->last; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 158) uint64_t addPrefix = 0; -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 159) uint8_t* data = fstSliceData(s, NULL); -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 160) if (t && t->inp == data[i]) { -92bef71ec7e source/libs/index/src/index_fst.c (yihaoDeng 2022-01-24 12:53:17 +0800 161) uint64_t commPrefix = TMIN(t->out, *out); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 162) uint64_t tAddPrefix = t->out - commPrefix; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 163) (*out) = (*out) - commPrefix; -16f089c39a7 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 15:24:55 +0800 164) t->out = commPrefix; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 165) addPrefix = tAddPrefix; -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 166) } else { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 167) break; -16f089c39a7 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 15:24:55 +0800 168) } -16f089c39a7 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 15:24:55 +0800 169) if (addPrefix != 0) { -73d938b09a4 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-08 18:07:13 +0800 170) if (i + 1 < ssz) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 171) FstBuilderNodeUnfinished* unf = taosArrayGet(node->stack, i + 1); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 172) fstBuilderNodeUnfinishedAddOutputPrefix(unf, addPrefix); -73d938b09a4 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-08 18:07:13 +0800 173) } -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 174) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 175) } -16f089c39a7 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 15:24:55 +0800 176) return i; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 177) } -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 178) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 179) FstState fstStateCreateFrom(FstSlice* slice, CompiledAddr addr) { -93c102e2940 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 14:15:23 +0800 180) FstState fs = {.state = EmptyFinal, .val = 0}; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 181) if (addr == EMPTY_ADDRESS) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 182) return fs; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 183) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 184) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 185) uint8_t* data = fstSliceData(slice, NULL); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 186) uint8_t v = data[addr]; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 187) uint8_t t = (v & 0b11000000) >> 6; -dc9163a29a3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 12:13:44 +0800 188) if (t == 0b11) { -dc9163a29a3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 12:13:44 +0800 189) fs.state = OneTransNext; -dc9163a29a3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 12:13:44 +0800 190) } else if (t == 0b10) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 191) fs.state = OneTrans; -dc9163a29a3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 12:13:44 +0800 192) } else { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 193) fs.state = AnyTrans; -dc9163a29a3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 12:13:44 +0800 194) } -93c102e2940 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 14:15:23 +0800 195) fs.val = v; -dc9163a29a3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 12:13:44 +0800 196) return fs; -dc9163a29a3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 12:13:44 +0800 197) } -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 198) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 199) static FstState fstStateDict[] = {{.state = OneTransNext, .val = 0b11000000}, -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 200) {.state = OneTrans, .val = 0b10000000}, -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 201) {.state = AnyTrans, .val = 0b00000000}, -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 202) {.state = EmptyFinal, .val = 0b00000000}}; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 203) // debug -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 204) static const char* fstStateStr[] = {"ONE_TRANS_NEXT", "ONE_TRANS", "ANY_TRANS", "EMPTY_FINAL"}; -0aa47daf89c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 20:01:19 +0800 205) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 206) FstState fstStateCreate(State state) { -0aa47daf89c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 20:01:19 +0800 207) uint8_t idx = (uint8_t)state; -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 208) return fstStateDict[idx]; -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 209) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 210) // compile -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 211) void fstStateCompileForOneTransNext(FstCountingWriter* w, CompiledAddr addr, uint8_t inp) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 212) FstState s = fstStateCreate(OneTransNext); -d674fcc8bab source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 20:03:20 +0800 213) fstStateSetCommInput(&s, inp); -d674fcc8bab source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 20:03:20 +0800 214) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 215) bool null = false; -d674fcc8bab source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 20:03:20 +0800 216) uint8_t v = fstStateCommInput(&s, &null); -d674fcc8bab source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 20:03:20 +0800 217) if (null) { -d674fcc8bab source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 20:03:20 +0800 218) // w->write_all(&[inp]) -7b62d02f95e source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 20:17:37 +0800 219) fstCountingWriterWrite(w, &inp, 1); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 220) } -7b62d02f95e source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 20:17:37 +0800 221) fstCountingWriterWrite(w, &(s.val), 1); -d674fcc8bab source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 20:03:20 +0800 222) // w->write_all(&[s.val]) -7b62d02f95e source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 20:17:37 +0800 223) return; -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 224) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 225) void fstStateCompileForOneTrans(FstCountingWriter* w, CompiledAddr addr, FstTransition* trn) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 226) Output out = trn->out; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 227) uint8_t outPackSize = (out == 0 ? 0 : fstCountingWriterPackUint(w, out)); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 228) uint8_t transPackSize = fstPackDetla(w, addr, trn->addr); -d39f80185f7 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 20:42:19 +0800 229) PackSizes packSizes = 0; -d39f80185f7 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 20:42:19 +0800 230) -d39f80185f7 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 20:42:19 +0800 231) FST_SET_OUTPUT_PACK_SIZE(packSizes, outPackSize); -d39f80185f7 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 20:42:19 +0800 232) FST_SET_TRANSITION_PACK_SIZE(packSizes, transPackSize); -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 233) fstCountingWriterWrite(w, (char*)&packSizes, sizeof(packSizes)); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 234) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 235) FstState st = fstStateCreate(OneTrans); -d39f80185f7 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 20:42:19 +0800 236) -d39f80185f7 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 20:42:19 +0800 237) fstStateSetCommInput(&st, trn->inp); -22938fcc5ed source/libs/index/src/index_fst.c (yihaoDeng 2022-02-23 17:51:07 +0800 238) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 239) bool null = false; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 240) uint8_t inp = fstStateCommInput(&st, &null); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 241) if (null == true) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 242) fstCountingWriterWrite(w, (char*)&trn->inp, sizeof(trn->inp)); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 243) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 244) fstCountingWriterWrite(w, (char*)(&(st.val)), sizeof(st.val)); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 245) return; -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 246) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 247) void fstStateCompileForAnyTrans(FstCountingWriter* w, CompiledAddr addr, FstBuilderNode* node) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 248) size_t sz = taosArrayGetSize(node->trans); -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 249) assert(sz <= 256); -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 250) -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 251) uint8_t tSize = 0; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 252) uint8_t oSize = packSize(node->finalOutput); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 253) -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 254) // finalOutput.is_zero() -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 255) bool anyOuts = (node->finalOutput != 0); -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 256) for (size_t i = 0; i < sz; i++) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 257) FstTransition* t = taosArrayGet(node->trans, i); -92bef71ec7e source/libs/index/src/index_fst.c (yihaoDeng 2022-01-24 12:53:17 +0800 258) tSize = TMAX(tSize, packDeltaSize(addr, t->addr)); -92bef71ec7e source/libs/index/src/index_fst.c (yihaoDeng 2022-01-24 12:53:17 +0800 259) oSize = TMAX(oSize, packSize(t->out)); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 260) anyOuts = anyOuts || (t->out != 0); -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 261) } -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 262) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 263) PackSizes packSizes = 0; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 264) if (anyOuts) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 265) FST_SET_OUTPUT_PACK_SIZE(packSizes, oSize); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 266) } else { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 267) FST_SET_OUTPUT_PACK_SIZE(packSizes, 0); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 268) } -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 269) -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 270) FST_SET_TRANSITION_PACK_SIZE(packSizes, tSize); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 271) -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 272) FstState st = fstStateCreate(AnyTrans); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 273) fstStateSetFinalState(&st, node->isFinal); -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 274) fstStateSetStateNtrans(&st, (uint8_t)sz); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 275) -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 276) if (anyOuts) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 277) if (FST_BUILDER_NODE_IS_FINAL(node)) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 278) fstCountingWriterPackUintIn(w, node->finalOutput, oSize); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 279) } -d266c6f29f3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-06 21:58:33 +0800 280) for (int32_t i = sz - 1; i >= 0; i--) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 281) FstTransition* t = taosArrayGet(node->trans, i); -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 282) fstCountingWriterPackUintIn(w, t->out, oSize); -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 283) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 284) } -d266c6f29f3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-06 21:58:33 +0800 285) for (int32_t i = sz - 1; i >= 0; i--) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 286) FstTransition* t = taosArrayGet(node->trans, i); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 287) fstPackDeltaIn(w, addr, t->addr, tSize); -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 288) } -d266c6f29f3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-06 21:58:33 +0800 289) for (int32_t i = sz - 1; i >= 0; i--) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 290) FstTransition* t = taosArrayGet(node->trans, i); -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 291) fstCountingWriterWrite(w, (char*)&t->inp, 1); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 292) // fstPackDeltaIn(w, addr, t->addr, tSize); -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 293) } -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 294) if (sz > TRANS_INDEX_THRESHOLD) { -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 295) // A value of 255 indicates that no transition exists for the byte -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 296) // at that index. (Except when there are 256 transitions.) Namely, -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 297) // any value greater than or equal to the number of transitions in -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 298) // this node indicates an absent transition. -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 299) uint8_t* index = (uint8_t*)taosMemoryMalloc(sizeof(uint8_t) * 256); -984f3023537 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-09 20:08:40 +0800 300) memset(index, 255, sizeof(uint8_t) * 256); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 301) /// for (uint8_t i = 0; i < 256; i++) { -984f3023537 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-09 20:08:40 +0800 302) // index[i] = 255; -984f3023537 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-09 20:08:40 +0800 303) ///} -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 304) for (size_t i = 0; i < sz; i++) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 305) FstTransition* t = taosArrayGet(node->trans, i); -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 306) index[t->inp] = i; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 307) // fstPackDeltaIn(w, addr, t->addr, tSize); -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 308) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 309) fstCountingWriterWrite(w, (char*)index, 256); -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 310) taosMemoryFree(index); -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 311) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 312) fstCountingWriterWrite(w, (char*)&packSizes, 1); -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 313) bool null = false; -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 314) fstStateStateNtrans(&st, &null); -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 315) if (null == true) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 316) // 256 can't be represented in a u8, so we abuse the fact that -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 317) // the # of transitions can never be 1 here, since 1 is always -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 318) // encoded in the state byte. -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 319) uint8_t v = 1; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 320) if (sz == 256) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 321) fstCountingWriterWrite(w, (char*)&v, 1); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 322) } else { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 323) fstCountingWriterWrite(w, (char*)&sz, 1); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 324) } -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 325) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 326) fstCountingWriterWrite(w, (char*)(&(st.val)), 1); -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 327) return; -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 328) } -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 329) -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 330) // set_comm_input -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 331) void fstStateSetCommInput(FstState* s, uint8_t inp) { -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 332) assert(s->state == OneTransNext || s->state == OneTrans); -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 333) -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 334) uint8_t val; -9920b43be59 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-31 18:06:13 +0800 335) COMMON_INDEX(inp, 0b111111, val); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 336) s->val = (s->val & fstStateDict[s->state].val) | val; -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 337) } -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 338) -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 339) // comm_input -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 340) uint8_t fstStateCommInput(FstState* s, bool* null) { -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 341) assert(s->state == OneTransNext || s->state == OneTrans); -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 342) uint8_t v = s->val & 0b00111111; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 343) if (v == 0) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 344) *null = true; -d674fcc8bab source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 20:03:20 +0800 345) return v; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 346) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 347) // v = 0 indicate that common_input is None -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 348) return v == 0 ? 0 : COMMON_INPUT(v); -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 349) } -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 350) -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 351) // input_len -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 352) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 353) uint64_t fstStateInputLen(FstState* s) { -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 354) assert(s->state == OneTransNext || s->state == OneTrans); -d674fcc8bab source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 20:03:20 +0800 355) bool null = false; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 356) fstStateCommInput(s, &null); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 357) return null ? 1 : 0; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 358) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 359) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 360) // end_addr -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 361) uint64_t fstStateEndAddrForOneTransNext(FstState* s, FstSlice* data) { -4e9fba6dd31 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 14:37:32 +0800 362) assert(s->state == OneTransNext); -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 363) return FST_SLICE_LEN(data) - 1 - fstStateInputLen(s); -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 364) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 365) uint64_t fstStateEndAddrForOneTrans(FstState* s, FstSlice* data, PackSizes sizes) { -4e9fba6dd31 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 14:37:32 +0800 366) assert(s->state == OneTrans); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 367) return FST_SLICE_LEN(data) - 1 - fstStateInputLen(s) - 1 // pack size -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 368) - FST_GET_TRANSITION_PACK_SIZE(sizes) - FST_GET_OUTPUT_PACK_SIZE(sizes); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 369) } -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 370) uint64_t fstStateEndAddrForAnyTrans(FstState* state, uint64_t version, FstSlice* date, PackSizes sizes, -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 371) uint64_t nTrans) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 372) uint8_t oSizes = FST_GET_OUTPUT_PACK_SIZE(sizes); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 373) uint8_t finalOsize = !fstStateIsFinalState(state) ? 0 : oSizes; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 374) return FST_SLICE_LEN(date) - 1 - fstStateNtransLen(state) - 1 // pack size -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 375) - fstStateTotalTransSize(state, version, sizes, nTrans) - nTrans * oSizes // output values -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 376) - finalOsize; // final output -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 377) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 378) // input -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 379) uint8_t fstStateInput(FstState* s, FstNode* node) { -169d9e17ed8 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 14:05:25 +0800 380) assert(s->state == OneTransNext || s->state == OneTrans); -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 381) FstSlice* slice = &node->data; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 382) bool null = false; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 383) uint8_t inp = fstStateCommInput(s, &null); -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 384) uint8_t* data = fstSliceData(slice, NULL); -9920b43be59 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-31 18:06:13 +0800 385) return null == false ? inp : data[node->start - 1]; -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 386) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 387) uint8_t fstStateInputForAnyTrans(FstState* s, FstNode* node, uint64_t i) { -169d9e17ed8 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 14:05:25 +0800 388) assert(s->state == AnyTrans); -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 389) FstSlice* slice = &node->data; -169d9e17ed8 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 14:05:25 +0800 390) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 391) uint64_t at = node->start - fstStateNtransLen(s) - 1 // pack size -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 392) - fstStateTransIndexSize(s, node->version, node->nTrans) - i - 1; // the output size -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 393) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 394) uint8_t* data = fstSliceData(slice, NULL); -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 395) return data[at]; -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 396) } -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 397) -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 398) // trans_addr -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 399) CompiledAddr fstStateTransAddr(FstState* s, FstNode* node) { -169d9e17ed8 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 14:05:25 +0800 400) assert(s->state == OneTransNext || s->state == OneTrans); -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 401) FstSlice* slice = &node->data; -169d9e17ed8 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 14:05:25 +0800 402) if (s->state == OneTransNext) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 403) return (CompiledAddr)(node->end) - 1; -169d9e17ed8 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 14:05:25 +0800 404) } else { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 405) PackSizes sizes = node->sizes; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 406) uint8_t tSizes = FST_GET_TRANSITION_PACK_SIZE(sizes); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 407) uint64_t i = node->start - fstStateInputLen(s) - 1 // PackSizes -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 408) - tSizes; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 409) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 410) // refactor error logic -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 411) uint8_t* data = fstSliceData(slice, NULL); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 412) return unpackDelta(data + i, tSizes, node->end); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 413) } -169d9e17ed8 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 14:05:25 +0800 414) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 415) CompiledAddr fstStateTransAddrForAnyTrans(FstState* s, FstNode* node, uint64_t i) { -169d9e17ed8 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 14:05:25 +0800 416) assert(s->state == AnyTrans); -169d9e17ed8 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 14:05:25 +0800 417) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 418) FstSlice* slice = &node->data; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 419) uint8_t tSizes = FST_GET_TRANSITION_PACK_SIZE(node->sizes); -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 420) uint64_t at = node->start - fstStateNtransLen(s) - 1 - fstStateTransIndexSize(s, node->version, node->nTrans) - -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 421) node->nTrans - (i * tSizes) - tSizes; -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 422) uint8_t* data = fstSliceData(slice, NULL); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 423) return unpackDelta(data + at, tSizes, node->end); -0aa47daf89c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 20:01:19 +0800 424) } -0aa47daf89c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 20:01:19 +0800 425) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 426) // sizes -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 427) PackSizes fstStateSizes(FstState* s, FstSlice* slice) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 428) assert(s->state == OneTrans || s->state == AnyTrans); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 429) uint64_t i; -169d9e17ed8 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 14:05:25 +0800 430) if (s->state == OneTrans) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 431) i = FST_SLICE_LEN(slice) - 1 - fstStateInputLen(s) - 1; -169d9e17ed8 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 14:05:25 +0800 432) } else { -169d9e17ed8 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 14:05:25 +0800 433) i = FST_SLICE_LEN(slice) - 1 - fstStateNtransLen(s) - 1; -169d9e17ed8 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 14:05:25 +0800 434) } -169d9e17ed8 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 14:05:25 +0800 435) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 436) uint8_t* data = fstSliceData(slice, NULL); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 437) return (PackSizes)(*(data + i)); -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 438) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 439) // Output -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 440) Output fstStateOutput(FstState* s, FstNode* node) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 441) assert(s->state == OneTrans); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 442) -c5d53978743 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 18:41:00 +0800 443) uint8_t oSizes = FST_GET_OUTPUT_PACK_SIZE(node->sizes); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 444) if (oSizes == 0) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 445) return 0; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 446) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 447) FstSlice* slice = &node->data; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 448) uint8_t tSizes = FST_GET_TRANSITION_PACK_SIZE(node->sizes); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 449) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 450) uint64_t i = node->start - fstStateInputLen(s) - 1 - tSizes - oSizes; -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 451) uint8_t* data = fstSliceData(slice, NULL); -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 452) return unpackUint64(data + i, oSizes); -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 453) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 454) Output fstStateOutputForAnyTrans(FstState* s, FstNode* node, uint64_t i) { -c5d53978743 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 18:41:00 +0800 455) assert(s->state == AnyTrans); -c5d53978743 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 18:41:00 +0800 456) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 457) uint8_t oSizes = FST_GET_OUTPUT_PACK_SIZE(node->sizes); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 458) if (oSizes == 0) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 459) return 0; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 460) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 461) FstSlice* slice = &node->data; -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 462) uint8_t* data = fstSliceData(slice, NULL); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 463) uint64_t at = node->start - fstStateNtransLen(s) - 1 // pack size -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 464) - fstStateTotalTransSize(s, node->version, node->sizes, node->nTrans) - (i * oSizes) - oSizes; -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 465) -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 466) return unpackUint64(data + at, oSizes); -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 467) } -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 468) -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 469) // anyTrans specify function -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 470) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 471) void fstStateSetFinalState(FstState* s, bool yes) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 472) assert(s->state == AnyTrans); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 473) if (yes) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 474) s->val |= 0b01000000; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 475) } -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 476) return; -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 477) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 478) bool fstStateIsFinalState(FstState* s) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 479) assert(s->state == AnyTrans); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 480) return (s->val & 0b01000000) == 0b01000000; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 481) } -c5d53978743 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 18:41:00 +0800 482) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 483) void fstStateSetStateNtrans(FstState* s, uint8_t n) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 484) assert(s->state == AnyTrans); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 485) if (n <= 0b00111111) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 486) s->val = (s->val & 0b11000000) | n; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 487) } -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 488) return; -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 489) } -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 490) // state_ntrans -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 491) uint8_t fstStateStateNtrans(FstState* s, bool* null) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 492) assert(s->state == AnyTrans); -c5d53978743 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 18:41:00 +0800 493) *null = false; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 494) uint8_t n = s->val & 0b00111111; -c5d53978743 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 18:41:00 +0800 495) -c5d53978743 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 18:41:00 +0800 496) if (n == 0) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 497) *null = true; // None -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 498) } -c5d53978743 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 18:41:00 +0800 499) return n; -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 500) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 501) uint64_t fstStateTotalTransSize(FstState* s, uint64_t version, PackSizes sizes, uint64_t nTrans) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 502) assert(s->state == AnyTrans); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 503) uint64_t idxSize = fstStateTransIndexSize(s, version, nTrans); -c5d53978743 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 18:41:00 +0800 504) return nTrans + (nTrans * FST_GET_TRANSITION_PACK_SIZE(sizes)) + idxSize; -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 505) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 506) uint64_t fstStateTransIndexSize(FstState* s, uint64_t version, uint64_t nTrans) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 507) assert(s->state == AnyTrans); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 508) return (version >= 2 && nTrans > TRANS_INDEX_THRESHOLD) ? 256 : 0; -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 509) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 510) uint64_t fstStateNtransLen(FstState* s) { -c5d53978743 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 18:41:00 +0800 511) assert(s->state == AnyTrans); -c5d53978743 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 18:41:00 +0800 512) bool null = false; -c5d53978743 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 18:41:00 +0800 513) fstStateStateNtrans(s, &null); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 514) return null == true ? 1 : 0; -c5d53978743 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 18:41:00 +0800 515) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 516) uint64_t fstStateNtrans(FstState* s, FstSlice* slice) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 517) bool null = false; -c5d53978743 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 18:41:00 +0800 518) uint8_t n = fstStateStateNtrans(s, &null); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 519) if (null != true) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 520) return n; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 521) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 522) int32_t len; -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 523) uint8_t* data = fstSliceData(slice, &len); -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 524) n = data[len - 2]; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 525) // n = data[slice->end - 1]; // data[data.len() - 2] -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 526) return n == 1 ? 256 : n; // // "1" is never a normal legal value here, because if there, // is only 1 transition, -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 527) // then it is encoded in the state byte -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 528) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 529) Output fstStateFinalOutput(FstState* s, uint64_t version, FstSlice* slice, PackSizes sizes, uint64_t nTrans) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 530) uint8_t oSizes = FST_GET_OUTPUT_PACK_SIZE(sizes); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 531) if (oSizes == 0 || !fstStateIsFinalState(s)) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 532) return 0; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 533) } -c5d53978743 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 18:41:00 +0800 534) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 535) uint64_t at = FST_SLICE_LEN(slice) - 1 - fstStateNtransLen(s) - 1 // pack size -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 536) - fstStateTotalTransSize(s, version, sizes, nTrans) - (nTrans * oSizes) - oSizes; -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 537) uint8_t* data = fstSliceData(slice, NULL); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 538) return unpackUint64(data + at, (uint8_t)oSizes); -c5d53978743 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 18:41:00 +0800 539) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 540) uint64_t fstStateFindInput(FstState* s, FstNode* node, uint8_t b, bool* null) { -c5d53978743 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 18:41:00 +0800 541) assert(s->state == AnyTrans); -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 542) FstSlice* slice = &node->data; -c5d53978743 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 18:41:00 +0800 543) if (node->version >= 2 && node->nTrans > TRANS_INDEX_THRESHOLD) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 544) uint64_t at = node->start - fstStateNtransLen(s) - 1 // pack size -c5d53978743 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 18:41:00 +0800 545) - fstStateTransIndexSize(s, node->version, node->nTrans); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 546) int32_t dlen = 0; -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 547) uint8_t* data = fstSliceData(slice, &dlen); -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 548) uint64_t i = data[at + b]; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 549) // uint64_t i = slice->data[slice->start + at + b]; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 550) if (i >= node->nTrans) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 551) *null = true; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 552) } -c5d53978743 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 18:41:00 +0800 553) return i; -c5d53978743 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 18:41:00 +0800 554) } else { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 555) uint64_t start = node->start - fstStateNtransLen(s) - 1 // pack size -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 556) - node->nTrans; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 557) uint64_t end = start + node->nTrans; -73d938b09a4 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-08 18:07:13 +0800 558) FstSlice t = fstSliceCopy(slice, start, end - 1); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 559) int32_t len = 0; -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 560) uint8_t* data = fstSliceData(&t, &len); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 561) int i = 0; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 562) for (; i < len; i++) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 563) uint8_t v = data[i]; -c5d53978743 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 18:41:00 +0800 564) if (v == b) { -f8ca5dc15b2 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-10 16:23:22 +0800 565) fstSliceDestroy(&t); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 566) return node->nTrans - i - 1; // bug -c5d53978743 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-24 18:41:00 +0800 567) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 568) } -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 569) if (i == len) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 570) *null = true; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 571) } -f8ca5dc15b2 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-10 16:23:22 +0800 572) fstSliceDestroy(&t); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 573) } -23bef711fca source/libs/index/src/index_fst.c (Shuduo Sang 2022-03-15 21:35:04 +0800 574) -23bef711fca source/libs/index/src/index_fst.c (Shuduo Sang 2022-03-15 21:35:04 +0800 575) return 0; -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 576) } -169f6b3ad8c source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 23:53:45 +0800 577) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 578) // fst node function -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 579) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 580) FstNode* fstNodeCreate(int64_t version, CompiledAddr addr, FstSlice* slice) { -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 581) FstNode* n = (FstNode*)taosMemoryMalloc(sizeof(FstNode)); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 582) if (n == NULL) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 583) return NULL; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 584) } -980ace09b54 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-15 11:36:51 +0800 585) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 586) FstState st = fstStateCreateFrom(slice, addr); -dc9163a29a3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 12:13:44 +0800 587) -dc9163a29a3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 12:13:44 +0800 588) if (st.state == EmptyFinal) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 589) n->data = fstSliceCreate(NULL, 0); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 590) n->version = version; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 591) n->state = st; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 592) n->start = EMPTY_ADDRESS; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 593) n->end = EMPTY_ADDRESS; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 594) n->isFinal = true; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 595) n->nTrans = 0; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 596) n->sizes = 0; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 597) n->finalOutput = 0; -dc9163a29a3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 12:13:44 +0800 598) } else if (st.state == OneTransNext) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 599) n->data = fstSliceCopy(slice, 0, addr); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 600) n->version = version; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 601) n->state = st; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 602) n->start = addr; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 603) n->end = fstStateEndAddrForOneTransNext(&st, &n->data); //? s.end_addr(data); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 604) n->isFinal = false; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 605) n->sizes = 0; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 606) n->nTrans = 1; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 607) n->finalOutput = 0; -dc9163a29a3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 12:13:44 +0800 608) } else if (st.state == OneTrans) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 609) FstSlice data = fstSliceCopy(slice, 0, addr); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 610) PackSizes sz = fstStateSizes(&st, &data); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 611) n->data = data; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 612) n->version = version; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 613) n->state = st; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 614) n->start = addr; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 615) n->end = fstStateEndAddrForOneTrans(&st, &data, sz); // s.end_addr(data, sz); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 616) n->isFinal = false; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 617) n->nTrans = 1; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 618) n->sizes = sz; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 619) n->finalOutput = 0; -dc9163a29a3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 12:13:44 +0800 620) } else { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 621) FstSlice data = fstSliceCopy(slice, 0, addr); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 622) uint64_t sz = fstStateSizes(&st, &data); // s.sizes(data) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 623) uint32_t nTrans = fstStateNtrans(&st, &data); // s.ntrans(data) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 624) n->data = data; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 625) n->version = version; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 626) n->state = st; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 627) n->start = addr; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 628) n->end = fstStateEndAddrForAnyTrans(&st, version, &data, sz, nTrans); // s.end_addr(version, data, sz, ntrans); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 629) n->isFinal = fstStateIsFinalState(&st); // s.is_final_state(); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 630) n->nTrans = nTrans; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 631) n->sizes = sz; -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 632) n->finalOutput = -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 633) fstStateFinalOutput(&st, version, &data, sz, nTrans); // s.final_output(version, data, sz, ntrans); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 634) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 635) return n; -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 636) } -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 637) -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 638) // debug state transition -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 639) static const char* fstNodeState(FstNode* node) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 640) FstState* st = &node->state; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 641) return fstStateStr[st->state]; -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 642) } -55282bbfa2f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 19:35:31 +0800 643) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 644) void fstNodeDestroy(FstNode* node) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 645) fstSliceDestroy(&node->data); -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 646) taosMemoryFree(node); -0bbe42df45d source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 15:35:12 +0800 647) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 648) FstTransitions* fstNodeTransitions(FstNode* node) { -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 649) FstTransitions* t = taosMemoryMalloc(sizeof(FstTransitions)); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 650) if (NULL == t) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 651) return NULL; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 652) } -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 653) FstRange range = {.start = 0, .end = FST_NODE_LEN(node)}; -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 654) t->range = range; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 655) t->node = node; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 656) return t; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 657) } -980ace09b54 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-15 11:36:51 +0800 658) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 659) // Returns the transition at index `i`. -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 660) bool fstNodeGetTransitionAt(FstNode* node, uint64_t i, FstTransition* trn) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 661) bool s = true; -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 662) FstState* st = &node->state; -21592f572e5 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 17:39:53 +0800 663) if (st->state == OneTransNext) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 664) trn->inp = fstStateInput(st, node); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 665) trn->out = 0; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 666) trn->addr = fstStateTransAddr(st, node); -21592f572e5 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 17:39:53 +0800 667) } else if (st->state == OneTrans) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 668) trn->inp = fstStateInput(st, node); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 669) trn->out = fstStateOutput(st, node); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 670) trn->addr = fstStateTransAddr(st, node); -21592f572e5 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 17:39:53 +0800 671) } else if (st->state == AnyTrans) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 672) trn->inp = fstStateInputForAnyTrans(st, node, i); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 673) trn->out = fstStateOutputForAnyTrans(st, node, i); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 674) trn->addr = fstStateTransAddrForAnyTrans(st, node, i); -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 675) } else { -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 676) s = false; -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 677) } -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 678) return s; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 679) } -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 680) -dc9163a29a3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 12:13:44 +0800 681) // Returns the transition address of the `i`th transition -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 682) bool fstNodeGetTransitionAddrAt(FstNode* node, uint64_t i, CompiledAddr* res) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 683) bool s = true; -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 684) FstState* st = &node->state; -21592f572e5 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 17:39:53 +0800 685) if (st->state == OneTransNext) { -21592f572e5 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 17:39:53 +0800 686) assert(i == 0); -21592f572e5 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 17:39:53 +0800 687) fstStateTransAddr(st, node); -21592f572e5 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 17:39:53 +0800 688) } else if (st->state == OneTrans) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 689) assert(i == 0); -21592f572e5 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 17:39:53 +0800 690) fstStateTransAddr(st, node); -21592f572e5 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 17:39:53 +0800 691) } else if (st->state == AnyTrans) { -21592f572e5 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 17:39:53 +0800 692) fstStateTransAddrForAnyTrans(st, node, i); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 693) } else if (FST_STATE_EMPTY_FINAL(node)) { -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 694) s = false; -dc9163a29a3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 12:13:44 +0800 695) } else { -dc9163a29a3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 12:13:44 +0800 696) assert(0); -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 697) } -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 698) return s; -980ace09b54 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-15 11:36:51 +0800 699) } -980ace09b54 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-15 11:36:51 +0800 700) -dc9163a29a3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 12:13:44 +0800 701) // Finds the `i`th transition corresponding to the given input byte. -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 702) // If no transition for this byte exists, then `false` is returned. -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 703) bool fstNodeFindInput(FstNode* node, uint8_t b, uint64_t* res) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 704) bool s = true; -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 705) FstState* st = &node->state; -21592f572e5 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 17:39:53 +0800 706) if (st->state == OneTransNext) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 707) if (fstStateInput(st, node) == b) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 708) *res = 0; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 709) } else { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 710) s = false; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 711) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 712) } else if (st->state == OneTrans) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 713) if (fstStateInput(st, node) == b) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 714) *res = 0; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 715) } else { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 716) s = false; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 717) } -21592f572e5 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 17:39:53 +0800 718) } else if (st->state == AnyTrans) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 719) bool null = false; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 720) uint64_t out = fstStateFindInput(st, node, b, &null); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 721) if (null == false) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 722) *res = out; -2354cd9ec0e source/libs/index/src/index_fst.c (yihaoDeng 2022-03-28 22:21:51 +0800 723) } else { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 724) s = false; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 725) } -21592f572e5 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-25 17:39:53 +0800 726) } -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 727) return s; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 728) } -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 729) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 730) bool fstNodeCompile(FstNode* node, void* w, CompiledAddr lastAddr, CompiledAddr addr, FstBuilderNode* builderNode) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 731) size_t sz = taosArrayGetSize(builderNode->trans); -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 732) assert(sz < 256); -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 733) if (sz == 0 && builderNode->isFinal && builderNode->finalOutput == 0) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 734) return true; -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 735) } else if (sz != 1 || builderNode->isFinal) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 736) fstStateCompileForAnyTrans(w, addr, builderNode); -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 737) // AnyTrans->Compile(w, addr, node); -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 738) } else { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 739) FstTransition* tran = taosArrayGet(builderNode->trans, 0); -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 740) if (tran->addr == lastAddr && tran->out == 0) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 741) fstStateCompileForOneTransNext(w, addr, tran->inp); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 742) // OneTransNext::compile(w, lastAddr, tran->inp); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 743) return true; -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 744) } else { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 745) fstStateCompileForOneTrans(w, addr, tran); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 746) // OneTrans::Compile(w, lastAddr, *tran); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 747) return true; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 748) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 749) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 750) return true; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 751) } -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 752) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 753) bool fstBuilderNodeCompileTo(FstBuilderNode* b, FstCountingWriter* wrt, CompiledAddr lastAddr, CompiledAddr startAddr) { -32ac2d02c87 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 10:54:49 +0800 754) return fstNodeCompile(NULL, wrt, lastAddr, startAddr, b); -32ac2d02c87 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 10:54:49 +0800 755) } -32ac2d02c87 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 10:54:49 +0800 756) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 757) FstBuilder* fstBuilderCreate(void* w, FstType ty) { -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 758) FstBuilder* b = taosMemoryMalloc(sizeof(FstBuilder)); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 759) if (NULL == b) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 760) return b; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 761) } -32ac2d02c87 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 10:54:49 +0800 762) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 763) b->wrt = fstCountingWriterCreate(w); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 764) b->unfinished = fstUnFinishedNodesCreate(); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 765) b->registry = fstRegistryCreate(10000, 2); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 766) b->last = fstSliceCreate(NULL, 0); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 767) b->lastAddr = NONE_ADDRESS; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 768) b->len = 0; -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 769) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 770) char buf64[8] = {0}; -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 771) void* pBuf64 = buf64; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 772) taosEncodeFixedU64(&pBuf64, VERSION); -db2bf567c25 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-06 18:43:48 +0800 773) fstCountingWriterWrite(b->wrt, buf64, sizeof(buf64)); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 774) -db2bf567c25 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-06 18:43:48 +0800 775) pBuf64 = buf64; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 776) memset(buf64, 0, sizeof(buf64)); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 777) taosEncodeFixedU64(&pBuf64, ty); -db2bf567c25 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-06 18:43:48 +0800 778) fstCountingWriterWrite(b->wrt, buf64, sizeof(buf64)); -db2bf567c25 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-06 18:43:48 +0800 779) -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 780) return b; -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 781) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 782) void fstBuilderDestroy(FstBuilder* b) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 783) if (b == NULL) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 784) return; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 785) } -0cd12fd353b source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 12:05:03 +0800 786) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 787) fstCountingWriterDestroy(b->wrt); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 788) fstUnFinishedNodesDestroy(b->unfinished); -260588b6922 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 23:07:07 +0800 789) fstRegistryDestroy(b->registry); -29278327133 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-10 15:30:39 +0800 790) fstSliceDestroy(&b->last); -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 791) taosMemoryFree(b); -260588b6922 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 23:07:07 +0800 792) } -ccca561d11f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 09:52:29 +0800 793) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 794) bool fstBuilderInsert(FstBuilder* b, FstSlice bs, Output in) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 795) OrderType t = fstBuilderCheckLastKey(b, bs, true); -ccca561d11f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 09:52:29 +0800 796) if (t == Ordered) { -ccca561d11f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 09:52:29 +0800 797) // add log info -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 798) fstBuilderInsertOutput(b, bs, in); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 799) return true; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 800) } -ebcb9be39fc source/libs/index/src/index_fst.c (yihaoDeng 2021-12-22 12:20:59 +0800 801) indexInfo("fst write key must be ordered"); -ccca561d11f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 09:52:29 +0800 802) return false; -ccca561d11f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 09:52:29 +0800 803) } -ccca561d11f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-23 09:52:29 +0800 804) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 805) void fstBuilderInsertOutput(FstBuilder* b, FstSlice bs, Output in) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 806) FstSlice* s = &bs; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 807) if (fstSliceIsEmpty(s)) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 808) b->len = 1; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 809) fstUnFinishedNodesSetRootOutput(b->unfinished, in); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 810) return; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 811) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 812) // if (in != 0) { //if let Some(in) = in -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 813) // prefixLen = fstUnFinishedNodesFindCommPrefixAndSetOutput(b->unfinished, bs, in, &out); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 814) //} else { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 815) // prefixLen = fstUnFinishedNodesFindCommPrefix(b->unfinished, bs); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 816) // out = 0; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 817) //} -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 818) Output out; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 819) uint64_t prefixLen = fstUnFinishedNodesFindCommPrefixAndSetOutput(b->unfinished, bs, in, &out); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 820) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 821) if (prefixLen == FST_SLICE_LEN(s)) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 822) assert(out == 0); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 823) return; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 824) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 825) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 826) b->len += 1; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 827) fstBuilderCompileFrom(b, prefixLen); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 828) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 829) FstSlice sub = fstSliceCopy(s, prefixLen, s->end); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 830) fstUnFinishedNodesAddSuffix(b->unfinished, sub, out); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 831) fstSliceDestroy(&sub); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 832) return; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 833) } -0cd12fd353b source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 12:05:03 +0800 834) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 835) OrderType fstBuilderCheckLastKey(FstBuilder* b, FstSlice bs, bool ckDup) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 836) FstSlice* input = &bs; -716c0045f8a source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 17:29:59 +0800 837) if (fstSliceIsEmpty(&b->last)) { -f8ca5dc15b2 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-10 16:23:22 +0800 838) fstSliceDestroy(&b->last); -e769d0a0023 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 18:40:44 +0800 839) // deep copy or not -f8ca5dc15b2 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-10 16:23:22 +0800 840) b->last = fstSliceDeepCopy(&bs, input->start, input->end); -e769d0a0023 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 18:40:44 +0800 841) } else { -e769d0a0023 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 18:40:44 +0800 842) int comp = fstSliceCompare(&b->last, &bs); -e769d0a0023 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 18:40:44 +0800 843) if (comp == 0 && ckDup) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 844) return DuplicateKey; -e769d0a0023 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 18:40:44 +0800 845) } else if (comp == 1) { -e769d0a0023 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 18:40:44 +0800 846) return OutOfOrdered; -e769d0a0023 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 18:40:44 +0800 847) } -e769d0a0023 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 18:40:44 +0800 848) // deep copy or not -d8d6c04fd50 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-09 16:18:35 +0800 849) fstSliceDestroy(&b->last); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 850) b->last = fstSliceDeepCopy(&bs, input->start, input->end); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 851) } -e769d0a0023 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 18:40:44 +0800 852) return Ordered; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 853) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 854) void fstBuilderCompileFrom(FstBuilder* b, uint64_t istate) { -5441bab5dc1 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 19:27:41 +0800 855) CompiledAddr addr = NONE_ADDRESS; -5441bab5dc1 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 19:27:41 +0800 856) while (istate + 1 < FST_UNFINISHED_NODES_LEN(b->unfinished)) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 857) FstBuilderNode* bn = NULL; -5441bab5dc1 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 19:27:41 +0800 858) if (addr == NONE_ADDRESS) { -29278327133 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-10 15:30:39 +0800 859) bn = fstUnFinishedNodesPopEmpty(b->unfinished); -5441bab5dc1 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 19:27:41 +0800 860) } else { -29278327133 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-10 15:30:39 +0800 861) bn = fstUnFinishedNodesPopFreeze(b->unfinished, addr); -5441bab5dc1 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 19:27:41 +0800 862) } -29278327133 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-10 15:30:39 +0800 863) addr = fstBuilderCompile(b, bn); -29278327133 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-10 15:30:39 +0800 864) -29278327133 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-10 15:30:39 +0800 865) fstBuilderNodeDestroy(bn); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 866) assert(addr != NONE_ADDRESS); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 867) // fstBuilderNodeDestroy(n); -5441bab5dc1 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 19:27:41 +0800 868) } -5441bab5dc1 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 19:27:41 +0800 869) fstUnFinishedNodesTopLastFreeze(b->unfinished, addr); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 870) return; -5441bab5dc1 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 19:27:41 +0800 871) } -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 872) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 873) CompiledAddr fstBuilderCompile(FstBuilder* b, FstBuilderNode* bn) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 874) if (FST_BUILDER_NODE_IS_FINAL(bn) && FST_BUILDER_NODE_TRANS_ISEMPTY(bn) && FST_BUILDER_NODE_FINALOUTPUT_ISZERO(bn)) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 875) return EMPTY_ADDRESS; -0cd12fd353b source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 12:05:03 +0800 876) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 877) FstRegistryEntry* entry = fstRegistryGetEntry(b->registry, bn); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 878) if (entry->state == FOUND) { -0cd12fd353b source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 12:05:03 +0800 879) CompiledAddr ret = entry->addr; -0bbe42df45d source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 15:35:12 +0800 880) fstRegistryEntryDestroy(entry); -0cd12fd353b source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 12:05:03 +0800 881) return ret; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 882) } -0cd12fd353b source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 12:05:03 +0800 883) CompiledAddr startAddr = (CompiledAddr)(FST_WRITER_COUNT(b->wrt)); -0cd12fd353b source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 12:05:03 +0800 884) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 885) fstBuilderNodeCompileTo(bn, b->wrt, b->lastAddr, startAddr); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 886) b->lastAddr = (CompiledAddr)(FST_WRITER_COUNT(b->wrt) - 1); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 887) if (entry->state == NOTFOUND) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 888) FST_REGISTRY_CELL_INSERT(entry->cell, b->lastAddr); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 889) } -0bbe42df45d source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 15:35:12 +0800 890) fstRegistryEntryDestroy(entry); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 891) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 892) return b->lastAddr; -0cd12fd353b source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 12:05:03 +0800 893) } -0cd12fd353b source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 12:05:03 +0800 894) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 895) void* fstBuilderInsertInner(FstBuilder* b) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 896) fstBuilderCompileFrom(b, 0); -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 897) FstBuilderNode* rootNode = fstUnFinishedNodesPopRoot(b->unfinished); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 898) CompiledAddr rootAddr = fstBuilderCompile(b, rootNode); -29278327133 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-10 15:30:39 +0800 899) fstBuilderNodeDestroy(rootNode); -e10b4bc05e0 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 00:16:42 +0800 900) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 901) char buf64[8] = {0}; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 902) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 903) void* pBuf64 = buf64; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 904) taosEncodeFixedU64(&pBuf64, b->len); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 905) fstCountingWriterWrite(b->wrt, buf64, sizeof(buf64)); -e10b4bc05e0 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 00:16:42 +0800 906) -d0844e5dda0 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-04 21:40:09 +0800 907) pBuf64 = buf64; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 908) taosEncodeFixedU64(&pBuf64, rootAddr); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 909) fstCountingWriterWrite(b->wrt, buf64, sizeof(buf64)); -e10b4bc05e0 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 00:16:42 +0800 910) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 911) char buf32[4] = {0}; -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 912) void* pBuf32 = buf32; -e10b4bc05e0 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 00:16:42 +0800 913) uint32_t sum = fstCountingWriterMaskedCheckSum(b->wrt); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 914) taosEncodeFixedU32(&pBuf32, sum); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 915) fstCountingWriterWrite(b->wrt, buf32, sizeof(buf32)); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 916) -e10b4bc05e0 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 00:16:42 +0800 917) fstCountingWriterFlush(b->wrt); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 918) // fstCountingWriterDestroy(b->wrt); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 919) // b->wrt = NULL; -e10b4bc05e0 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 00:16:42 +0800 920) return b->wrt; -e10b4bc05e0 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 00:16:42 +0800 921) } -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 922) void fstBuilderFinish(FstBuilder* b) { fstBuilderInsertInner(b); } -06fe44cabdb source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 17:43:03 +0800 923) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 924) FstSlice fstNodeAsSlice(FstNode* node) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 925) FstSlice* slice = &node->data; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 926) FstSlice s = fstSliceCopy(slice, slice->end, FST_SLICE_LEN(slice) - 1); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 927) return s; -60e339b31df source/libs/index/src/index_fst.c (yihaoDeng 2021-11-20 13:13:21 +0800 928) } -980ace09b54 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-15 11:36:51 +0800 929) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 930) FstLastTransition* fstLastTransitionCreate(uint8_t inp, Output out) { -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 931) FstLastTransition* trn = taosMemoryMalloc(sizeof(FstLastTransition)); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 932) if (trn == NULL) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 933) return NULL; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 934) } -0bbe42df45d source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 15:35:12 +0800 935) -0bbe42df45d source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 15:35:12 +0800 936) trn->inp = inp; -0bbe42df45d source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 15:35:12 +0800 937) trn->out = out; -0bbe42df45d source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 15:35:12 +0800 938) return trn; -0bbe42df45d source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 15:35:12 +0800 939) } -0bbe42df45d source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 15:35:12 +0800 940) -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 941) void fstLastTransitionDestroy(FstLastTransition* trn) { taosMemoryFree(trn); } -22938fcc5ed source/libs/index/src/index_fst.c (yihaoDeng 2022-02-23 17:51:07 +0800 942) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 943) void fstBuilderNodeUnfinishedLastCompiled(FstBuilderNodeUnfinished* unNode, CompiledAddr addr) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 944) FstLastTransition* trn = unNode->last; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 945) if (trn == NULL) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 946) return; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 947) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 948) FstTransition t = {.inp = trn->inp, .out = trn->out, .addr = addr}; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 949) taosArrayPush(unNode->node->trans, &t); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 950) fstLastTransitionDestroy(trn); -7e1f68f86fc source/libs/index/src/index_fst.c (yihaoDeng 2021-12-06 14:32:54 +0800 951) unNode->last = NULL; -0bbe42df45d source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 15:35:12 +0800 952) return; -0bbe42df45d source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 15:35:12 +0800 953) } -0bbe42df45d source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 15:35:12 +0800 954) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 955) void fstBuilderNodeUnfinishedAddOutputPrefix(FstBuilderNodeUnfinished* unNode, Output out) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 956) if (FST_BUILDER_NODE_IS_FINAL(unNode->node)) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 957) unNode->node->finalOutput += out; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 958) } -06fe44cabdb source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 17:43:03 +0800 959) size_t sz = taosArrayGetSize(unNode->node->trans); -06fe44cabdb source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 17:43:03 +0800 960) for (size_t i = 0; i < sz; i++) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 961) FstTransition* trn = taosArrayGet(unNode->node->trans, i); -06fe44cabdb source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 17:43:03 +0800 962) trn->out += out; -06fe44cabdb source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 17:43:03 +0800 963) } -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 964) if (unNode->last) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 965) unNode->last->out += out; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 966) } -0bbe42df45d source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 15:35:12 +0800 967) return; -0bbe42df45d source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 15:35:12 +0800 968) } -0bbe42df45d source/libs/index/src/index_fst.c (yihaoDeng 2021-11-22 15:35:12 +0800 969) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 970) Fst* fstCreate(FstSlice* slice) { -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 971) int32_t slen; -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 972) char* buf = fstSliceData(slice, &slen); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 973) if (slen < 36) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 974) return NULL; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 975) } -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 976) uint64_t len = slen; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 977) uint64_t skip = 0; -c0ca718eed2 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 11:29:43 +0800 978) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 979) uint64_t version; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 980) taosDecodeFixedU64(buf, &version); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 981) skip += sizeof(version); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 982) if (version == 0 || version > VERSION) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 983) return NULL; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 984) } -c0ca718eed2 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 11:29:43 +0800 985) -c0ca718eed2 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 11:29:43 +0800 986) uint64_t type; -c0ca718eed2 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 11:29:43 +0800 987) taosDecodeFixedU64(buf + skip, &type); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 988) skip += sizeof(type); -c0ca718eed2 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 11:29:43 +0800 989) -c0ca718eed2 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 11:29:43 +0800 990) uint32_t checkSum = 0; -c0ca718eed2 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 11:29:43 +0800 991) len -= sizeof(checkSum); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 992) taosDecodeFixedU32(buf + len, &checkSum); -15c0275333c source/libs/index/src/index_fst.c (yihaoDeng 2022-01-08 23:58:51 +0800 993) if (taosCheckChecksum(buf, len, checkSum)) { -f9d83c044dd source/libs/index/src/index_fst.c (yihaoDeng 2022-01-10 23:42:58 +0800 994) indexError("index file is corrupted"); -15c0275333c source/libs/index/src/index_fst.c (yihaoDeng 2022-01-08 23:58:51 +0800 995) // verify fst -15c0275333c source/libs/index/src/index_fst.c (yihaoDeng 2022-01-08 23:58:51 +0800 996) return NULL; -15c0275333c source/libs/index/src/index_fst.c (yihaoDeng 2022-01-08 23:58:51 +0800 997) } -c0ca718eed2 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 11:29:43 +0800 998) CompiledAddr rootAddr; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 999) len -= sizeof(rootAddr); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1000) taosDecodeFixedU64(buf + len, &rootAddr); -c0ca718eed2 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 11:29:43 +0800 1001) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1002) uint64_t fstLen; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1003) len -= sizeof(fstLen); -c0ca718eed2 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 11:29:43 +0800 1004) taosDecodeFixedU64(buf + len, &fstLen); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1005) // TODO(validate root addr) -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 1006) Fst* fst = (Fst*)taosMemoryCalloc(1, sizeof(Fst)); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1007) if (fst == NULL) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1008) return NULL; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1009) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1010) -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 1011) fst->meta = (FstMeta*)taosMemoryMalloc(sizeof(FstMeta)); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1012) if (NULL == fst->meta) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1013) goto FST_CREAT_FAILED; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1014) } -c0ca718eed2 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 11:29:43 +0800 1015) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1016) fst->meta->version = version; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1017) fst->meta->rootAddr = rootAddr; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1018) fst->meta->ty = type; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1019) fst->meta->len = fstLen; -c0ca718eed2 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 11:29:43 +0800 1020) fst->meta->checkSum = checkSum; -29278327133 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-10 15:30:39 +0800 1021) -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 1022) FstSlice* s = taosMemoryCalloc(1, sizeof(FstSlice)); -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 1023) *s = fstSliceCopy(slice, 0, FST_SLICE_LEN(slice) - 1); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1024) fst->data = s; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1025) -79057240bd6 source/libs/index/src/index_fst.c (afwerar 2022-03-20 00:47:45 +0800 1026) taosThreadMutexInit(&fst->mtx, NULL); -c0ca718eed2 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 11:29:43 +0800 1027) return fst; -c0ca718eed2 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 11:29:43 +0800 1028) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1029) FST_CREAT_FAILED: -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 1030) taosMemoryFree(fst->meta); -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 1031) taosMemoryFree(fst); -23bef711fca source/libs/index/src/index_fst.c (Shuduo Sang 2022-03-15 21:35:04 +0800 1032) -23bef711fca source/libs/index/src/index_fst.c (Shuduo Sang 2022-03-15 21:35:04 +0800 1033) return NULL; -c0ca718eed2 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 11:29:43 +0800 1034) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1035) void fstDestroy(Fst* fst) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1036) if (fst) { -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 1037) taosMemoryFree(fst->meta); -29278327133 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-10 15:30:39 +0800 1038) fstSliceDestroy(fst->data); -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 1039) taosMemoryFree(fst->data); -79057240bd6 source/libs/index/src/index_fst.c (afwerar 2022-03-20 00:47:45 +0800 1040) taosThreadMutexDestroy(&fst->mtx); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1041) } -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 1042) taosMemoryFree(fst); -500130daf70 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 18:34:24 +0800 1043) } -500130daf70 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 18:34:24 +0800 1044) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1045) bool fstGet(Fst* fst, FstSlice* b, Output* out) { -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 1046) // dec lock range -79057240bd6 source/libs/index/src/index_fst.c (afwerar 2022-03-20 00:47:45 +0800 1047) // taosThreadMutexLock(&fst->mtx); -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1048) FstNode* root = fstGetRoot(fst); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1049) Output tOut = 0; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1050) int32_t len; -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 1051) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1052) uint8_t* data = fstSliceData(b, &len); -29278327133 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-10 15:30:39 +0800 1053) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1054) SArray* nodes = (SArray*)taosArrayInit(len, sizeof(FstNode*)); -29278327133 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-10 15:30:39 +0800 1055) taosArrayPush(nodes, &root); -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1056) for (uint32_t i = 0; i < len; i++) { -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1057) uint8_t inp = data[i]; -2082e86476b source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 14:01:25 +0800 1058) Output res = 0; -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 1059) if (false == fstNodeFindInput(root, inp, &res)) { -79057240bd6 source/libs/index/src/index_fst.c (afwerar 2022-03-20 00:47:45 +0800 1060) // taosThreadMutexUnlock(&fst->mtx); -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 1061) return false; -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 1062) } -2082e86476b source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 14:01:25 +0800 1063) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1064) FstTransition trn; -2082e86476b source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 14:01:25 +0800 1065) fstNodeGetTransitionAt(root, res, &trn); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1066) tOut += trn.out; -2082e86476b source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 14:01:25 +0800 1067) root = fstGetNode(fst, trn.addr); -29278327133 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-10 15:30:39 +0800 1068) taosArrayPush(nodes, &root); -2082e86476b source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 14:01:25 +0800 1069) } -2082e86476b source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 14:01:25 +0800 1070) if (!FST_NODE_IS_FINAL(root)) { -79057240bd6 source/libs/index/src/index_fst.c (afwerar 2022-03-20 00:47:45 +0800 1071) // taosThreadMutexUnlock(&fst->mtx); -2082e86476b source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 14:01:25 +0800 1072) return false; -2082e86476b source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 14:01:25 +0800 1073) } else { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1074) tOut = tOut + FST_NODE_FINAL_OUTPUT(root); -2082e86476b source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 14:01:25 +0800 1075) } -f8ca5dc15b2 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-10 16:23:22 +0800 1076) -29278327133 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-10 15:30:39 +0800 1077) for (size_t i = 0; i < taosArrayGetSize(nodes); i++) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1078) FstNode** node = (FstNode**)taosArrayGet(nodes, i); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1079) fstNodeDestroy(*node); -29278327133 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-10 15:30:39 +0800 1080) } -29278327133 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-10 15:30:39 +0800 1081) taosArrayDestroy(nodes); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1082) // fst->root = NULL; -79057240bd6 source/libs/index/src/index_fst.c (afwerar 2022-03-20 00:47:45 +0800 1083) // taosThreadMutexUnlock(&fst->mtx); -2082e86476b source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 14:01:25 +0800 1084) *out = tOut; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1085) return true; -f07045c1d8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-11 17:28:58 +0800 1086) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1087) FstStreamBuilder* fstSearch(Fst* fst, AutomationCtx* ctx) { -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 1088) // refactor later -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1089) return fstStreamBuilderCreate(fst, ctx); -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1090) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1091) StreamWithState* streamBuilderIntoStream(FstStreamBuilder* sb) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1092) if (sb == NULL) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1093) return NULL; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1094) } -26a98602263 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-15 23:24:03 +0800 1095) return streamWithStateCreate(sb->fst, sb->aut, sb->min, sb->max); -26a98602263 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-15 23:24:03 +0800 1096) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1097) FstStreamWithStateBuilder* fstSearchWithState(Fst* fst, AutomationCtx* ctx) { -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 1098) // refactor later -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1099) return fstStreamBuilderCreate(fst, ctx); -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1100) } -c0ca718eed2 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 11:29:43 +0800 1101) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1102) FstNode* fstGetRoot(Fst* fst) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1103) CompiledAddr rAddr = fstGetRootAddr(fst); -2eb0053e5ad source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 22:19:56 +0800 1104) return fstGetNode(fst, rAddr); -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1105) } -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 1106) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1107) FstNode* fstGetNode(Fst* fst, CompiledAddr addr) { -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 1108) // refactor later -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1109) return fstNodeCreate(fst->meta->version, addr, fst->data); -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1110) } -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 1111) FstType fstGetType(Fst* fst) { return fst->meta->ty; } -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 1112) CompiledAddr fstGetRootAddr(Fst* fst) { return fst->meta->rootAddr; } -500130daf70 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 18:34:24 +0800 1113) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1114) Output fstEmptyFinalOutput(Fst* fst, bool* null) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1115) Output res = 0; -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1116) FstNode* node = fstGetRoot(fst); -500130daf70 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 18:34:24 +0800 1117) if (FST_NODE_IS_FINAL(node)) { -500130daf70 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 18:34:24 +0800 1118) *null = false; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1119) res = FST_NODE_FINAL_OUTPUT(node); -500130daf70 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 18:34:24 +0800 1120) } else { -500130daf70 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 18:34:24 +0800 1121) *null = true; -500130daf70 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 18:34:24 +0800 1122) } -40fc4b6cf38 source/libs/index/src/index_fst.c (yihaoDeng 2022-01-02 17:50:40 +0800 1123) fstNodeDestroy(node); -500130daf70 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 18:34:24 +0800 1124) return res; -500130daf70 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 18:34:24 +0800 1125) } -500130daf70 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 18:34:24 +0800 1126) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1127) bool fstVerify(Fst* fst) { -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 1128) uint32_t len, checkSum = fst->meta->checkSum; -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1129) uint8_t* data = fstSliceData(fst->data, &len); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1130) TSCKSUM initSum = 0; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1131) if (!taosCheckChecksumWhole(data, len)) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1132) return false; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1133) } -a09dcbdd85f source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 10:59:51 +0800 1134) return true; -c0ca718eed2 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 11:29:43 +0800 1135) } -c0ca718eed2 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-26 11:29:43 +0800 1136) -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1137) // data bound function -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1138) FstBoundWithData* fstBoundStateCreate(FstBound type, FstSlice* data) { -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 1139) FstBoundWithData* b = taosMemoryCalloc(1, sizeof(FstBoundWithData)); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1140) if (b == NULL) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1141) return NULL; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1142) } -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1143) -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1144) if (data != NULL) { -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1145) b->data = fstSliceCopy(data, data->start, data->end); -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1146) } else { -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1147) b->data = fstSliceCreate(NULL, 0); -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1148) } -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1149) b->type = type; -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1150) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1151) return b; -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1152) } -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1153) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1154) bool fstBoundWithDataExceededBy(FstBoundWithData* bound, FstSlice* slice) { -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1155) int comp = fstSliceCompare(slice, &bound->data); -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1156) if (bound->type == Included) { -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1157) return comp > 0 ? true : false; -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1158) } else if (bound->type == Excluded) { -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1159) return comp >= 0 ? true : false; -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1160) } else { -f45119ea5e2 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-26 15:09:21 +0800 1161) return false; -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1162) } -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1163) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1164) bool fstBoundWithDataIsEmpty(FstBoundWithData* bound) { -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1165) if (bound->type == Unbounded) { -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1166) return true; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1167) } else { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1168) return fstSliceIsEmpty(&bound->data); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1169) } -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1170) } -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1171) -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 1172) bool fstBoundWithDataIsIncluded(FstBoundWithData* bound) { return bound->type == Excluded ? false : true; } -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1173) -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 1174) void fstBoundDestroy(FstBoundWithData* bound) { taosMemoryFree(bound); } -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1175) -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 1176) StreamWithState* streamWithStateCreate(Fst* fst, AutomationCtx* automation, FstBoundWithData* min, -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 1177) FstBoundWithData* max) { -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 1178) StreamWithState* sws = taosMemoryCalloc(1, sizeof(StreamWithState)); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1179) if (sws == NULL) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1180) return NULL; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1181) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1182) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1183) sws->fst = fst; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1184) sws->aut = automation; -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1185) sws->inp = (SArray*)taosArrayInit(256, sizeof(uint8_t)); -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1186) -0c5f2d1da95 source/libs/index/src/index_fst.c (yihaoDeng 2022-03-28 21:41:41 +0800 1187) sws->emptyOutput.null = true; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1188) sws->emptyOutput.out = 0; -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1189) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1190) sws->stack = (SArray*)taosArrayInit(256, sizeof(StreamState)); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1191) sws->endAt = max; -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1192) streamWithStateSeekMin(sws, min); -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1193) -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1194) return sws; -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1195) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1196) void streamWithStateDestroy(StreamWithState* sws) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1197) if (sws == NULL) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1198) return; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1199) } -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1200) -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1201) taosArrayDestroy(sws->inp); -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1202) taosArrayDestroyEx(sws->stack, streamStateDestroy); -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1203) -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 1204) taosMemoryFree(sws); -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1205) } -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1206) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1207) bool streamWithStateSeekMin(StreamWithState* sws, FstBoundWithData* min) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1208) AutomationCtx* aut = sws->aut; -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1209) if (fstBoundWithDataIsEmpty(min)) { -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 1210) if (fstBoundWithDataIsIncluded(min)) { -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 1211) sws->emptyOutput.out = fstEmptyFinalOutput(sws->fst, &(sws->emptyOutput.null)); -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 1212) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1213) StreamState s = {.node = fstGetRoot(sws->fst), -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1214) .trans = 0, -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1215) .out = {.null = false, .out = 0}, -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1216) .autState = automFuncs[aut->type].start(aut)}; // auto.start callback -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1217) taosArrayPush(sws->stack, &s); -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1218) return true; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1219) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1220) FstSlice* key = NULL; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1221) bool inclusize = false; -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1222) -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1223) if (min->type == Included) { -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1224) key = &min->data; -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1225) inclusize = true; -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1226) } else if (min->type == Excluded) { -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1227) key = &min->data; -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1228) } else { -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1229) return false; -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1230) } -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1231) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1232) FstNode* node = fstGetRoot(sws->fst); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1233) Output out = 0; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1234) // void* autState = sws->aut->start(); -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1235) void* autState = automFuncs[aut->type].start(aut); -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1236) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1237) int32_t len; -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1238) uint8_t* data = fstSliceData(key, &len); -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1239) for (uint32_t i = 0; i < len; i++) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1240) uint8_t b = data[i]; -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1241) uint64_t res = 0; -2354cd9ec0e source/libs/index/src/index_fst.c (yihaoDeng 2022-03-28 22:21:51 +0800 1242) bool find = fstNodeFindInput(node, b, &res); -2354cd9ec0e source/libs/index/src/index_fst.c (yihaoDeng 2022-03-28 22:21:51 +0800 1243) if (find == true) { -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1244) FstTransition trn; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1245) fstNodeGetTransitionAt(node, res, &trn); -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1246) void* preState = autState; -cd653e56abd source/libs/index/src/index_fst.c (yihaoDeng 2021-12-11 15:42:09 +0800 1247) // autState = sws->aut->accept(preState, b); -cd653e56abd source/libs/index/src/index_fst.c (yihaoDeng 2021-12-11 15:42:09 +0800 1248) autState = automFuncs[aut->type].accept(aut, preState, b); -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1249) taosArrayPush(sws->inp, &b); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1250) StreamState s = {.node = node, .trans = res + 1, .out = {.null = false, .out = out}, .autState = preState}; -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1251) taosArrayPush(sws->stack, &s); -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1252) out += trn.out; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1253) node = fstGetNode(sws->fst, trn.addr); -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1254) } else { -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1255) // This is a little tricky. We're in this case if the -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1256) // given bound is not a prefix of any key in the FST. -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1257) // Since this is a minimum bound, we need to find the -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1258) // first transition in this node that proceeds the current -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1259) // input byte. -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1260) FstTransitions* trans = fstNodeTransitions(node); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1261) uint64_t i = 0; -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1262) for (i = trans->range.start; i < trans->range.end; i++) { -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1263) FstTransition trn; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1264) if (fstNodeGetTransitionAt(node, i, &trn) && trn.inp > b) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1265) break; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1266) } -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1267) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1268) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1269) StreamState s = {.node = node, .trans = i, .out = {.null = false, .out = out}, .autState = autState}; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1270) taosArrayPush(sws->stack, &s); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1271) return true; -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1272) } -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1273) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1274) uint32_t sz = taosArrayGetSize(sws->stack); -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1275) if (sz != 0) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1276) StreamState* s = taosArrayGet(sws->stack, sz - 1); -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1277) if (inclusize) { -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1278) s->trans -= 1; -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1279) taosArrayPop(sws->inp); -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1280) } else { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1281) FstNode* n = s->node; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1282) uint64_t trans = s->trans; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1283) FstTransition trn; -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1284) fstNodeGetTransitionAt(n, trans - 1, &trn); -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 1285) StreamState s = { -236b8bc3c8d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-30 17:03:00 +0800 1286) .node = fstGetNode(sws->fst, trn.addr), .trans = 0, .out = {.null = false, .out = out}, .autState = autState}; -23c9ea680b3 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-29 23:37:21 +0800 1287) taosArrayPush(sws->stack, &s); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1288) return true; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1289) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1290) return false; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1291) } -23bef711fca source/libs/index/src/index_fst.c (Shuduo Sang 2022-03-15 21:35:04 +0800 1292) -23bef711fca source/libs/index/src/index_fst.c (Shuduo Sang 2022-03-15 21:35:04 +0800 1293) return false; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1294) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1295) StreamWithStateResult* streamWithStateNextWith(StreamWithState* sws, StreamCallback callback) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1296) AutomationCtx* aut = sws->aut; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1297) FstOutput output = sws->emptyOutput; -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1298) if (output.null == false) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1299) FstSlice emptySlice = fstSliceCreate(NULL, 0); -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1300) if (fstBoundWithDataExceededBy(sws->endAt, &emptySlice)) { -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1301) taosArrayDestroyEx(sws->stack, streamStateDestroy); -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1302) sws->stack = (SArray*)taosArrayInit(256, sizeof(StreamState)); -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1303) return NULL; -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1304) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1305) void* start = automFuncs[aut->type].start(aut); -cd653e56abd source/libs/index/src/index_fst.c (yihaoDeng 2021-12-11 15:42:09 +0800 1306) if (automFuncs[aut->type].isMatch(aut, start)) { -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1307) FstSlice s = fstSliceCreate(NULL, 0); -f45119ea5e2 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-26 15:09:21 +0800 1308) return swsResultCreate(&s, output, callback == NULL ? NULL : callback(start)); -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1309) } -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1310) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1311) SArray* nodes = taosArrayInit(8, sizeof(FstNode*)); -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1312) while (taosArrayGetSize(sws->stack) > 0) { -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1313) StreamState* p = (StreamState*)taosArrayPop(sws->stack); -f0110af30ec source/libs/index/src/index_fst.c (yihaoDeng 2021-12-16 22:04:47 +0800 1314) if (p->trans >= FST_NODE_LEN(p->node) || !automFuncs[aut->type].canMatch(aut, p->autState)) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1315) if (FST_NODE_ADDR(p->node) != fstGetRootAddr(sws->fst)) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1316) taosArrayPop(sws->inp); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1317) } -6a4199d3ede source/libs/index/src/index_fst.c (yihaoDeng 2022-03-29 15:01:05 +0800 1318) streamStateDestroy(p); -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1319) continue; -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1320) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1321) FstTransition trn; -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1322) fstNodeGetTransitionAt(p->node, p->trans, &trn); -f45119ea5e2 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-26 15:09:21 +0800 1323) -f45119ea5e2 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-26 15:09:21 +0800 1324) Output out = p->out.out + trn.out; -f45119ea5e2 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-26 15:09:21 +0800 1325) void* nextState = automFuncs[aut->type].accept(aut, p->autState, trn.inp); -f45119ea5e2 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-26 15:09:21 +0800 1326) void* tState = (callback == NULL) ? NULL : callback(nextState); -f45119ea5e2 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-26 15:09:21 +0800 1327) bool isMatch = automFuncs[aut->type].isMatch(aut, nextState); -f45119ea5e2 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-26 15:09:21 +0800 1328) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1329) FstNode* nextNode = fstGetNode(sws->fst, trn.addr); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1330) taosArrayPush(nodes, &nextNode); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1331) taosArrayPush(sws->inp, &(trn.inp)); -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1332) -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1333) if (FST_NODE_IS_FINAL(nextNode)) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1334) // void *eofState = sws->aut->acceptEof(nextState); -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1335) void* eofState = automFuncs[aut->type].acceptEof(aut, nextState); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1336) if (eofState != NULL) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1337) isMatch = automFuncs[aut->type].isMatch(aut, eofState); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1338) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1339) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1340) StreamState s1 = {.node = p->node, .trans = p->trans + 1, .out = p->out, .autState = p->autState}; -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1341) taosArrayPush(sws->stack, &s1); -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1342) -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1343) StreamState s2 = {.node = nextNode, .trans = 0, .out = {.null = false, .out = out}, .autState = nextState}; -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1344) taosArrayPush(sws->stack, &s2); -6f3c49ee73d source/libs/index/src/index_fst.c (yihaoDeng 2021-12-14 16:17:38 +0800 1345) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1346) size_t isz = taosArrayGetSize(sws->inp); -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 1347) uint8_t* buf = (uint8_t*)taosMemoryMalloc(isz * sizeof(uint8_t)); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1348) for (uint32_t i = 0; i < isz; i++) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1349) buf[i] = *(uint8_t*)taosArrayGet(sws->inp, i); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1350) } -00000000000 source/libs/index/src/indexFst.c (Not Committed Yet 2022-04-02 15:19:56 +0800 1351) FstSlice slice = fstSliceCreate(buf, isz); -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1352) if (fstBoundWithDataExceededBy(sws->endAt, &slice)) { -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1353) taosArrayDestroyEx(sws->stack, streamStateDestroy); -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1354) sws->stack = (SArray*)taosArrayInit(256, sizeof(StreamState)); -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 1355) taosMemoryFreeClear(buf); -e3ccb28c097 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-02 10:32:58 +0800 1356) fstSliceDestroy(&slice); -06535139684 source/libs/index/src/index_fst.c (yihaoDeng 2022-03-29 15:06:28 +0800 1357) taosArrayDestroy(nodes); -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1358) return NULL; -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1359) } -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1360) if (FST_NODE_IS_FINAL(nextNode) && isMatch) { -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1361) FstOutput fOutput = {.null = false, .out = out + FST_NODE_FINAL_OUTPUT(nextNode)}; -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1362) StreamWithStateResult* result = swsResultCreate(&slice, fOutput, tState); -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 1363) taosMemoryFreeClear(buf); -e3ccb28c097 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-02 10:32:58 +0800 1364) fstSliceDestroy(&slice); -06535139684 source/libs/index/src/index_fst.c (yihaoDeng 2022-03-29 15:06:28 +0800 1365) taosArrayDestroy(nodes); -6a4199d3ede source/libs/index/src/index_fst.c (yihaoDeng 2022-03-29 15:01:05 +0800 1366) nodes = NULL; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1367) return result; -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1368) } -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 1369) taosMemoryFreeClear(buf); -e3ccb28c097 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-02 10:32:58 +0800 1370) fstSliceDestroy(&slice); -6a4199d3ede source/libs/index/src/index_fst.c (yihaoDeng 2022-03-29 15:01:05 +0800 1371) }; -06535139684 source/libs/index/src/index_fst.c (yihaoDeng 2022-03-29 15:06:28 +0800 1372) taosArrayDestroy(nodes); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1373) return NULL; -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1374) } -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1375) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1376) StreamWithStateResult* swsResultCreate(FstSlice* data, FstOutput fOut, void* state) { -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 1377) StreamWithStateResult* result = taosMemoryCalloc(1, sizeof(StreamWithStateResult)); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1378) if (result == NULL) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1379) return NULL; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1380) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1381) -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1382) result->data = fstSliceCopy(data, 0, FST_SLICE_LEN(data) - 1); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1383) result->out = fOut; -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1384) result->state = state; -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1385) return result; -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1386) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1387) void swsResultDestroy(StreamWithStateResult* result) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1388) if (NULL == result) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1389) return; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1390) } -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1391) -e3ccb28c097 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-02 10:32:58 +0800 1392) fstSliceDestroy(&result->data); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1393) startWithStateValueDestroy(result->state); -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 1394) taosMemoryFree(result); -e3ccb28c097 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-02 10:32:58 +0800 1395) } -e3ccb28c097 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-02 10:32:58 +0800 1396) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1397) void streamStateDestroy(void* s) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1398) if (NULL == s) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1399) return; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1400) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1401) StreamState* ss = (StreamState*)s; -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1402) fstNodeDestroy(ss->node); -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1403) } -fbb9d515bf6 source/libs/index/src/index_fst.c (yihaoDeng 2021-11-30 14:51:24 +0800 1404) -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1405) FstStreamBuilder* fstStreamBuilderCreate(Fst* fst, AutomationCtx* aut) { -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 1406) FstStreamBuilder* b = taosMemoryCalloc(1, sizeof(FstStreamBuilder)); -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1407) if (NULL == b) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1408) return NULL; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1409) } -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1410) -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1411) b->fst = fst; -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1412) b->aut = aut; -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1413) b->min = fstBoundStateCreate(Unbounded, NULL); -5d4d7b47a0f source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 16:36:31 +0800 1414) b->max = fstBoundStateCreate(Unbounded, NULL); -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1415) return b; -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1416) } -10b70175b5b source/libs/index/src/index_fst.c (yihaoDeng 2021-12-21 22:57:30 +0800 1417) void fstStreamBuilderDestroy(FstStreamBuilder* b) { -7ee1cf62ca4 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 12:00:20 +0800 1418) fstSliceDestroy(&b->min->data); -7ee1cf62ca4 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 12:00:20 +0800 1419) fstSliceDestroy(&b->max->data); -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 1420) taosMemoryFreeClear(b->min); -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 1421) taosMemoryFreeClear(b->max); -222db126bcf source/libs/index/src/index_fst.c (afwerar 2022-03-26 00:29:53 +0800 1422) taosMemoryFree(b); -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1423) } -30d49687e9a source/libs/index/src/index_fst.c (yihaoDeng 2022-03-28 19:01:57 +0800 1424) void fstStreamBuilderSetRange(FstStreamBuilder* b, FstSlice* val, RangeType type) { -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1425) if (b == NULL) { -30d49687e9a source/libs/index/src/index_fst.c (yihaoDeng 2022-03-28 19:01:57 +0800 1426) return; -9233663a985 source/libs/index/src/index_fst.c (yihaoDeng 2022-02-22 22:02:28 +0800 1427) } -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1428) if (type == GE) { -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1429) b->min->type = Included; -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1430) fstSliceDestroy(&(b->min->data)); -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1431) b->min->data = fstSliceDeepCopy(val, 0, FST_SLICE_LEN(val) - 1); -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1432) } else if (type == GT) { -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1433) b->min->type = Excluded; -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1434) fstSliceDestroy(&(b->min->data)); -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1435) b->min->data = fstSliceDeepCopy(val, 0, FST_SLICE_LEN(val) - 1); -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1436) } else if (type == LE) { -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1437) b->max->type = Included; -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1438) fstSliceDestroy(&(b->max->data)); -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1439) b->max->data = fstSliceDeepCopy(val, 0, FST_SLICE_LEN(val) - 1); -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1440) } else if (type == LT) { -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1441) b->max->type = Excluded; -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1442) fstSliceDestroy(&(b->max->data)); -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1443) b->max->data = fstSliceDeepCopy(val, 0, FST_SLICE_LEN(val) - 1); -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1444) } -d46ca756bf3 source/libs/index/src/index_fst.c (yihaoDeng 2021-12-01 00:24:12 +0800 1445) }