index.h 5.1 KB
Newer Older
H
refact  
Hongze Cheng 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/*
 * Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
 *
 * This program is free software: you can use, redistribute, and/or modify
 * it under the terms of the GNU Affero General Public License, version 3
 * or later ("AGPL"), as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */

H
refact  
Hongze Cheng 已提交
16 17
#ifndef _TD_INDEX_H_
#define _TD_INDEX_H_
H
refact  
Hongze Cheng 已提交
18

dengyihao's avatar
dengyihao 已提交
19 20 21
#include "os.h"
#include "tarray.h"

H
refact  
Hongze Cheng 已提交
22 23 24 25
#ifdef __cplusplus
extern "C" {
#endif

26 27 28
typedef struct SIndex               SIndex;
typedef struct SIndexTerm           SIndexTerm;
typedef struct SIndexOpts           SIndexOpts;
dengyihao's avatar
dengyihao 已提交
29 30
typedef struct SIndexMultiTermQuery SIndexMultiTermQuery;
typedef struct SArray               SIndexMultiTerm;
dengyihao's avatar
dengyihao 已提交
31

dengyihao's avatar
dengyihao 已提交
32 33 34 35 36 37
typedef struct SIndex               SIndexJson;
typedef struct SIndexTerm           SIndexJsonTerm;
typedef struct SIndexOpts           SIndexJsonOpts;
typedef struct SIndexMultiTermQuery SIndexJsonMultiTermQuery;
typedef struct SArray               SIndexJsonMultiTerm;

38 39 40 41 42 43 44
typedef enum {
  ADD_VALUE,     // add index colume value
  DEL_VALUE,     // delete index column value
  UPDATE_VALUE,  // update index column value
  ADD_INDEX,     // add index on specify column
  DROP_INDEX,    // drop existed index
  DROP_SATBLE    // drop stable
dengyihao's avatar
dengyihao 已提交
45
} SIndexOperOnColumn;
dengyihao's avatar
dengyihao 已提交
46

47
typedef enum { MUST = 0, SHOULD = 1, NOT = 2 } EIndexOperatorType;
dengyihao's avatar
dengyihao 已提交
48 49
typedef enum { QUERY_TERM = 0, QUERY_PREFIX = 1, QUERY_SUFFIX = 2, QUERY_REGEX = 3, QUERY_RANGE = 4 } EIndexQueryType;

dengyihao's avatar
dengyihao 已提交
50
/*
dengyihao's avatar
dengyihao 已提交
51 52
 * create multi query
 * @param oper (input, relation between querys)
53
 */
dengyihao's avatar
dengyihao 已提交
54
SIndexMultiTermQuery* indexMultiTermQueryCreate(EIndexOperatorType oper);
dengyihao's avatar
dengyihao 已提交
55

56
/*
dengyihao's avatar
dengyihao 已提交
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
 * destroy multi query
 * @param pQuery (input, multi-query-object to be destory)
 */

void indexMultiTermQueryDestroy(SIndexMultiTermQuery* pQuery);
/*
 * add query to multi query
 * @param pQuery (input, multi-query-object)
 * @param term (input, single query term)
 * @param type (input, single query type)
 * @return error code
 */
int indexMultiTermQueryAdd(SIndexMultiTermQuery* pQuery, SIndexTerm* term, EIndexQueryType type);
/*
 * open index
 * @param opt (input, index opt)
 * @param path (input, index path)
 * @param index (output, index object)
 * @return error code
 */
int indexOpen(SIndexOpts* opt, const char* path, SIndex** index);
/*
 * close index
 * @param index (input, index to be closed)
 * @return error code
dengyihao's avatar
dengyihao 已提交
82
 */
dengyihao's avatar
dengyihao 已提交
83
void indexClose(SIndex* index);
dengyihao's avatar
dengyihao 已提交
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149

/*
 * insert terms into index
 * @param index (input, index object)
 * @param term (input, terms inserted into index)
 * @param uid  (input, uid of terms)
 * @return error code
 */
int indexPut(SIndex* index, SIndexMultiTerm* terms, uint64_t uid);
/*
 * delete terms that meet query condition
 * @param index (input, index object)
 * @param query (input, condition query to deleted)
 * @return error code
 */

int indexDelete(SIndex* index, SIndexMultiTermQuery* query);
/*
 * search index
 * @param index (input, index object)
 * @param query (input, multi query condition)
 * @param result(output, query result)
 * @return error code
 */
int indexSearch(SIndex* index, SIndexMultiTermQuery* query, SArray* result);
/*
 * rebuild index
 * @param index (input, index object)
 * @parma opt   (input, rebuild index opts)
 * @return error code
 */
int indexRebuild(SIndex* index, SIndexOpts* opt);

/*
 * open index
 * @param opt (input,index json opt)
 * @param path (input, index json path)
 * @param index (output, index json object)
 * @return error code
 */
int tIndexJsonOpen(SIndexJsonOpts* opts, const char* path, SIndexJson** index);
/*
 * close index
 * @param index (input, index to be closed)
 * @return error code
 */

int tIndexJsonClose(SIndexJson* index);

/*
 * insert terms into index
 * @param index (input, index object)
 * @param term (input, terms inserted into index)
 * @param uid  (input, uid of terms)
 * @return error code
 */
int tIndexJsonPut(SIndexJson* index, SIndexJsonMultiTerm* terms, uint64_t uid);
/*
 * search index
 * @param index (input, index object)
 * @param query (input, multi query condition)
 * @param result(output, query result)
 * @return error code
 */

int tIndexJsonSearch(SIndexJson* index, SIndexJsonMultiTermQuery* query, SArray* result);
dengyihao's avatar
dengyihao 已提交
150 151 152 153
/*
 * @param
 * @param
 */
dengyihao's avatar
dengyihao 已提交
154 155 156
SIndexMultiTerm* indexMultiTermCreate();
int              indexMultiTermAdd(SIndexMultiTerm* terms, SIndexTerm* term);
void             indexMultiTermDestroy(SIndexMultiTerm* terms);
dengyihao's avatar
dengyihao 已提交
157
/*
158
 * @param:
dengyihao's avatar
dengyihao 已提交
159 160
 * @param:
 */
dengyihao's avatar
dengyihao 已提交
161 162
SIndexOpts* indexOptsCreate();
void        indexOptsDestroy(SIndexOpts* opts);
dengyihao's avatar
dengyihao 已提交
163

dengyihao's avatar
dengyihao 已提交
164 165 166 167 168
/*
 * @param:
 * @param:
 */

dengyihao's avatar
dengyihao 已提交
169 170
SIndexTerm* indexTermCreate(int64_t suid, SIndexOperOnColumn operType, uint8_t colType, const char* colName,
                            int32_t nColName, const char* colVal, int32_t nColVal);
dengyihao's avatar
dengyihao 已提交
171
void        indexTermDestroy(SIndexTerm* p);
dengyihao's avatar
dengyihao 已提交
172

dengyihao's avatar
dengyihao 已提交
173
/*
dengyihao's avatar
dengyihao 已提交
174
 * init index env
dengyihao's avatar
dengyihao 已提交
175 176
 *
 */
dengyihao's avatar
dengyihao 已提交
177 178
void indexInit();

dengyihao's avatar
dengyihao 已提交
179
/*
dengyihao's avatar
dengyihao 已提交
180
 * destory index env
dengyihao's avatar
dengyihao 已提交
181 182 183 184
 *
 */
void indexCleanUp();

H
refact  
Hongze Cheng 已提交
185 186 187 188
#ifdef __cplusplus
}
#endif

dengyihao's avatar
dengyihao 已提交
189
#endif /*_TD_INDEX_H_*/