jsonUT.cc 22.5 KB
Newer Older
dengyihao's avatar
dengyihao 已提交
1 2 3 4 5 6 7
#include <gtest/gtest.h>
#include <algorithm>
#include <iostream>
#include <string>
#include <thread>
#include <vector>
#include "index.h"
dengyihao's avatar
dengyihao 已提交
8 9 10 11
#include "indexCache.h"
#include "indexFst.h"
#include "indexFstCountingWriter.h"
#include "indexFstUtil.h"
dengyihao's avatar
dengyihao 已提交
12
#include "indexInt.h"
dengyihao's avatar
dengyihao 已提交
13 14
#include "indexTfile.h"
#include "indexUtil.h"
dengyihao's avatar
dengyihao 已提交
15 16 17 18
#include "tglobal.h"
#include "tskiplist.h"
#include "tutil.h"

19 20
static std::string dir = TD_TMP_DIR_PATH "json";
static std::string logDir = TD_TMP_DIR_PATH "log";
dengyihao's avatar
dengyihao 已提交
21

dengyihao's avatar
dengyihao 已提交
22 23 24 25 26 27 28 29 30 31 32 33
SIndexTerm* indexTermCreateT(int64_t suid, SIndexOperOnColumn oper, uint8_t colType, const char* colName,
                             int32_t nColName, const char* colVal, int32_t nColVal) {
  char    buf[256] = {0};
  int16_t sz = nColVal;
  memcpy(buf, (uint16_t*)&sz, 2);
  memcpy(buf + 2, colVal, nColVal);
  if (colType == TSDB_DATA_TYPE_BINARY) {
    return indexTermCreate(suid, oper, colType, colName, nColName, buf, sizeof(buf));
  } else {
    return indexTermCreate(suid, oper, colType, colName, nColName, colVal, nColVal);
  }
}
dengyihao's avatar
dengyihao 已提交
34 35 36 37 38
static void initLog() {
  const char*   defaultLogFileNamePrefix = "taoslog";
  const int32_t maxLogFileNum = 10;

  tsAsyncLog = 0;
dengyihao's avatar
dengyihao 已提交
39
  idxDebugFlag = 143;
dengyihao's avatar
dengyihao 已提交
40 41 42 43 44 45 46 47
  strcpy(tsLogDir, logDir.c_str());
  taosRemoveDir(tsLogDir);
  taosMkDir(tsLogDir);

  if (taosInitLog(defaultLogFileNamePrefix, maxLogFileNum) < 0) {
    printf("failed to open log file in directory:%s\n", tsLogDir);
  }
}
dengyihao's avatar
dengyihao 已提交
48 49 50
class JsonEnv : public ::testing::Test {
 protected:
  virtual void SetUp() {
dengyihao's avatar
dengyihao 已提交
51 52
    taosRemoveDir(logDir.c_str());
    taosMkDir(logDir.c_str());
dengyihao's avatar
dengyihao 已提交
53
    taosRemoveDir(dir.c_str());
dengyihao's avatar
add UT  
dengyihao 已提交
54
    taosMkDir(dir.c_str());
dengyihao's avatar
add UT  
dengyihao 已提交
55
    printf("set up\n");
dengyihao's avatar
dengyihao 已提交
56 57

    initLog();
dengyihao's avatar
dengyihao 已提交
58 59 60 61 62 63 64
    opts = indexOptsCreate();
    int ret = tIndexJsonOpen(opts, dir.c_str(), &index);
    assert(ret == 0);
  }
  virtual void TearDown() {
    tIndexJsonClose(index);
    indexOptsDestroy(opts);
dengyihao's avatar
add UT  
dengyihao 已提交
65
    printf("destory\n");
dengyihao's avatar
dengyihao 已提交
66
    taosMsleep(1000);
dengyihao's avatar
dengyihao 已提交
67 68 69 70 71
  }
  SIndexJsonOpts* opts;
  SIndexJson*     index;
};

dengyihao's avatar
dengyihao 已提交
72 73
static void WriteData(SIndexJson* index, const std::string& colName, int8_t dtype, void* data, int dlen, int tableId,
                      int8_t operType = ADD_VALUE) {
dengyihao's avatar
dengyihao 已提交
74 75
  SIndexTerm*      term = indexTermCreateT(1, (SIndexOperOnColumn)operType, dtype, colName.c_str(), colName.size(),
                                      (const char*)data, dlen);
dengyihao's avatar
dengyihao 已提交
76 77 78 79 80 81
  SIndexMultiTerm* terms = indexMultiTermCreate();
  indexMultiTermAdd(terms, term);
  tIndexJsonPut(index, terms, (int64_t)tableId);

  indexMultiTermDestroy(terms);
}
dengyihao's avatar
dengyihao 已提交
82 83 84

static void delData(SIndexJson* index, const std::string& colName, int8_t dtype, void* data, int dlen, int tableId,
                    int8_t operType = DEL_VALUE) {
dengyihao's avatar
dengyihao 已提交
85 86
  SIndexTerm*      term = indexTermCreateT(1, (SIndexOperOnColumn)operType, dtype, colName.c_str(), colName.size(),
                                      (const char*)data, dlen);
dengyihao's avatar
dengyihao 已提交
87 88 89 90 91 92
  SIndexMultiTerm* terms = indexMultiTermCreate();
  indexMultiTermAdd(terms, term);
  tIndexJsonPut(index, terms, (int64_t)tableId);

  indexMultiTermDestroy(terms);
}
dengyihao's avatar
dengyihao 已提交
93 94 95 96 97
static void Search(SIndexJson* index, const std::string& colNam, int8_t dtype, void* data, int dlen, int8_t filterType,
                   SArray** result) {
  std::string colName(colNam);

  SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
dengyihao's avatar
dengyihao 已提交
98
  SIndexTerm* q = indexTermCreateT(1, ADD_VALUE, dtype, colName.c_str(), colName.size(), (const char*)data, dlen);
dengyihao's avatar
dengyihao 已提交
99 100 101 102 103 104 105

  SArray* res = taosArrayInit(1, sizeof(uint64_t));
  indexMultiTermQueryAdd(mq, q, (EIndexQueryType)filterType);
  tIndexJsonSearch(index, mq, res);
  indexMultiTermQueryDestroy(mq);
  *result = res;
}
dengyihao's avatar
dengyihao 已提交
106 107
TEST_F(JsonEnv, testWrite) {
  {
dengyihao's avatar
add UT  
dengyihao 已提交
108
    std::string colName("test");
dengyihao's avatar
dengyihao 已提交
109
    std::string colVal("ab");
dengyihao's avatar
dengyihao 已提交
110 111
    SIndexTerm* term = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_BINARY, colName.c_str(), colName.size(),
                                        colVal.c_str(), colVal.size());
dengyihao's avatar
dengyihao 已提交
112 113 114 115 116 117 118 119 120 121 122

    SIndexMultiTerm* terms = indexMultiTermCreate();
    indexMultiTermAdd(terms, term);
    for (size_t i = 0; i < 100; i++) {
      tIndexJsonPut(index, terms, i);
    }
    indexMultiTermDestroy(terms);
  }
  {
    std::string colName("voltage");
    std::string colVal("ab1");
dengyihao's avatar
dengyihao 已提交
123 124
    SIndexTerm* term = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_BINARY, colName.c_str(), colName.size(),
                                        colVal.c_str(), colVal.size());
dengyihao's avatar
dengyihao 已提交
125 126 127 128 129 130 131 132 133 134 135

    SIndexMultiTerm* terms = indexMultiTermCreate();
    indexMultiTermAdd(terms, term);
    for (size_t i = 0; i < 100; i++) {
      tIndexJsonPut(index, terms, i);
    }
    indexMultiTermDestroy(terms);
  }
  {
    std::string colName("voltage");
    std::string colVal("123");
dengyihao's avatar
dengyihao 已提交
136 137
    SIndexTerm* term = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_BINARY, colName.c_str(), colName.size(),
                                        colVal.c_str(), colVal.size());
dengyihao's avatar
dengyihao 已提交
138 139 140 141 142 143 144 145 146

    SIndexMultiTerm* terms = indexMultiTermCreate();
    indexMultiTermAdd(terms, term);
    for (size_t i = 0; i < 100; i++) {
      tIndexJsonPut(index, terms, i);
    }
    indexMultiTermDestroy(terms);
  }
  {
dengyihao's avatar
add UT  
dengyihao 已提交
147
    std::string colName("test");
dengyihao's avatar
dengyihao 已提交
148 149 150
    std::string colVal("ab");

    SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
dengyihao's avatar
dengyihao 已提交
151 152
    SIndexTerm*           q = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_BINARY, colName.c_str(), colName.size(),
                                     colVal.c_str(), colVal.size());
dengyihao's avatar
dengyihao 已提交
153 154 155 156 157 158 159

    SArray* result = taosArrayInit(1, sizeof(uint64_t));
    indexMultiTermQueryAdd(mq, q, QUERY_TERM);
    tIndexJsonSearch(index, mq, result);
    assert(100 == taosArrayGetSize(result));
    indexMultiTermQueryDestroy(mq);
  }
dengyihao's avatar
add UT  
dengyihao 已提交
160 161
}
TEST_F(JsonEnv, testWriteMillonData) {
dengyihao's avatar
add UT  
dengyihao 已提交
162 163 164
  {
    std::string colName("test");
    std::string colVal("ab");
dengyihao's avatar
dengyihao 已提交
165 166
    SIndexTerm* term = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_BINARY, colName.c_str(), colName.size(),
                                        colVal.c_str(), colVal.size());
dengyihao's avatar
add UT  
dengyihao 已提交
167 168 169

    SIndexMultiTerm* terms = indexMultiTermCreate();
    indexMultiTermAdd(terms, term);
dengyihao's avatar
dengyihao 已提交
170
    for (size_t i = 0; i < 10; i++) {
dengyihao's avatar
add UT  
dengyihao 已提交
171 172 173 174
      tIndexJsonPut(index, terms, i);
    }
    indexMultiTermDestroy(terms);
  }
dengyihao's avatar
add UT  
dengyihao 已提交
175 176
  {
    std::string colName("voltagefdadfa");
dengyihao's avatar
dengyihao 已提交
177
    std::string colVal("abxxxxxxxxxxxx");
dengyihao's avatar
dengyihao 已提交
178
    for (int i = 0; i < 10; i++) {
dengyihao's avatar
dengyihao 已提交
179
      colVal[i % colVal.size()] = '0' + i % 128;
dengyihao's avatar
dengyihao 已提交
180 181
      SIndexTerm* term = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_BINARY, colName.c_str(), colName.size(),
                                          colVal.c_str(), colVal.size());
dengyihao's avatar
dengyihao 已提交
182 183 184

      SIndexMultiTerm* terms = indexMultiTermCreate();
      indexMultiTermAdd(terms, term);
dengyihao's avatar
dengyihao 已提交
185
      for (size_t i = 0; i < 100; i++) {
dengyihao's avatar
dengyihao 已提交
186 187 188 189 190 191 192
        tIndexJsonPut(index, terms, i);
      }
      indexMultiTermDestroy(terms);
    }
  }
  {
    std::string colName("voltagefdadfa");
dengyihao's avatar
add UT  
dengyihao 已提交
193
    std::string colVal("abxxxxxxxxxxxx");
dengyihao's avatar
dengyihao 已提交
194 195
    SIndexTerm* term = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_BINARY, colName.c_str(), colName.size(),
                                        colVal.c_str(), colVal.size());
dengyihao's avatar
dengyihao 已提交
196

dengyihao's avatar
add UT  
dengyihao 已提交
197 198
    SIndexMultiTerm* terms = indexMultiTermCreate();
    indexMultiTermAdd(terms, term);
199
    for (size_t i = 0; i < 1000; i++) {
dengyihao's avatar
add UT  
dengyihao 已提交
200 201 202 203 204
      tIndexJsonPut(index, terms, i);
    }
    indexMultiTermDestroy(terms);
  }
  {
dengyihao's avatar
add UT  
dengyihao 已提交
205
    std::string colName("test");
dengyihao's avatar
add UT  
dengyihao 已提交
206 207 208
    std::string colVal("ab");

    SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
dengyihao's avatar
dengyihao 已提交
209 210
    SIndexTerm*           q = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_BINARY, colName.c_str(), colName.size(),
                                     colVal.c_str(), colVal.size());
dengyihao's avatar
add UT  
dengyihao 已提交
211 212 213 214

    SArray* result = taosArrayInit(1, sizeof(uint64_t));
    indexMultiTermQueryAdd(mq, q, QUERY_TERM);
    tIndexJsonSearch(index, mq, result);
dengyihao's avatar
dengyihao 已提交
215
    EXPECT_EQ(10, taosArrayGetSize(result));
dengyihao's avatar
add UT  
dengyihao 已提交
216 217
    indexMultiTermQueryDestroy(mq);
  }
218 219 220 221 222 223
  {
    {
      std::string colName("test");
      std::string colVal("ab");

      SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
dengyihao's avatar
dengyihao 已提交
224 225
      SIndexTerm*           q = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_BINARY, colName.c_str(), colName.size(),
                                       colVal.c_str(), colVal.size());
226 227 228 229 230 231 232 233 234 235 236 237 238

      SArray* result = taosArrayInit(1, sizeof(uint64_t));
      indexMultiTermQueryAdd(mq, q, QUERY_GREATER_THAN);
      tIndexJsonSearch(index, mq, result);
      assert(0 == taosArrayGetSize(result));
      indexMultiTermQueryDestroy(mq);
    }
    {
      {
        std::string colName("test");
        std::string colVal("ab");

        SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
dengyihao's avatar
dengyihao 已提交
239 240
        SIndexTerm*           q = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_BINARY, colName.c_str(), colName.size(),
                                         colVal.c_str(), colVal.size());
241 242 243 244

        SArray* result = taosArrayInit(1, sizeof(uint64_t));
        indexMultiTermQueryAdd(mq, q, QUERY_GREATER_EQUAL);
        tIndexJsonSearch(index, mq, result);
dengyihao's avatar
dengyihao 已提交
245
        EXPECT_EQ(10, taosArrayGetSize(result));
246 247 248 249
        indexMultiTermQueryDestroy(mq);
      }
    }
  }
dengyihao's avatar
dengyihao 已提交
250
}
251 252 253
TEST_F(JsonEnv, testWriteJsonNumberData) {
  {
    std::string colName("test");
dengyihao's avatar
dengyihao 已提交
254 255
    // std::string colVal("10");
    int         val = 10;
dengyihao's avatar
dengyihao 已提交
256 257
    SIndexTerm* term = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
                                        (const char*)&val, sizeof(val));
258 259 260 261 262 263 264 265 266 267

    SIndexMultiTerm* terms = indexMultiTermCreate();
    indexMultiTermAdd(terms, term);
    for (size_t i = 0; i < 1000; i++) {
      tIndexJsonPut(index, terms, i);
    }
    indexMultiTermDestroy(terms);
  }
  {
    std::string colName("test2");
dengyihao's avatar
dengyihao 已提交
268
    int         val = 20;
dengyihao's avatar
dengyihao 已提交
269 270
    SIndexTerm* term = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
                                        (const char*)&val, sizeof(val));
271 272 273 274 275 276 277 278 279

    SIndexMultiTerm* terms = indexMultiTermCreate();
    indexMultiTermAdd(terms, term);
    for (size_t i = 0; i < 1000; i++) {
      tIndexJsonPut(index, terms, i);
    }
    indexMultiTermDestroy(terms);
  }
  {
dengyihao's avatar
dengyihao 已提交
280 281
    std::string colName("test");
    int         val = 15;
dengyihao's avatar
dengyihao 已提交
282 283
    SIndexTerm* term = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
                                        (const char*)&val, sizeof(val));
284 285 286 287 288 289 290 291 292 293

    SIndexMultiTerm* terms = indexMultiTermCreate();
    indexMultiTermAdd(terms, term);
    for (size_t i = 0; i < 1000; i++) {
      tIndexJsonPut(index, terms, i);
    }
    indexMultiTermDestroy(terms);
  }
  {
    std::string colName("test2");
dengyihao's avatar
dengyihao 已提交
294
    const char* val = "test";
dengyihao's avatar
dengyihao 已提交
295 296
    SIndexTerm* term = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_BINARY, colName.c_str(), colName.size(),
                                        (const char*)val, strlen(val));
297 298 299 300 301 302 303 304 305

    SIndexMultiTerm* terms = indexMultiTermCreate();
    indexMultiTermAdd(terms, term);
    for (size_t i = 0; i < 1000; i++) {
      tIndexJsonPut(index, terms, i);
    }
    indexMultiTermDestroy(terms);
  }
  {
dengyihao's avatar
dengyihao 已提交
306 307
    std::string           colName("test");
    int                   val = 15;
308
    SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
dengyihao's avatar
dengyihao 已提交
309 310
    SIndexTerm*           q = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
                                     (const char*)&val, sizeof(val));
311 312 313 314 315 316 317 318 319

    SArray* result = taosArrayInit(1, sizeof(uint64_t));
    indexMultiTermQueryAdd(mq, q, QUERY_TERM);
    tIndexJsonSearch(index, mq, result);
    EXPECT_EQ(1000, taosArrayGetSize(result));
    indexMultiTermQueryDestroy(mq);
  }
  {
    std::string colName("test");
dengyihao's avatar
dengyihao 已提交
320
    int         val = 15;
321 322

    SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
dengyihao's avatar
dengyihao 已提交
323 324
    SIndexTerm*           q = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
                                     (const char*)&val, sizeof(val));
325 326 327 328 329 330 331 332 333

    SArray* result = taosArrayInit(1, sizeof(uint64_t));
    indexMultiTermQueryAdd(mq, q, QUERY_GREATER_THAN);
    tIndexJsonSearch(index, mq, result);
    EXPECT_EQ(0, taosArrayGetSize(result));
    indexMultiTermQueryDestroy(mq);
  }
  {
    std::string colName("test");
dengyihao's avatar
dengyihao 已提交
334 335
    int         val = 10;
    ;
336 337

    SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
dengyihao's avatar
dengyihao 已提交
338 339
    SIndexTerm*           q = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
                                     (const char*)&val, sizeof(int));
340 341 342 343 344 345 346 347 348

    SArray* result = taosArrayInit(1, sizeof(uint64_t));
    indexMultiTermQueryAdd(mq, q, QUERY_GREATER_EQUAL);
    tIndexJsonSearch(index, mq, result);
    EXPECT_EQ(1000, taosArrayGetSize(result));
    indexMultiTermQueryDestroy(mq);
  }
  {
    std::string colName("test");
dengyihao's avatar
dengyihao 已提交
349 350
    int         val = 10;
    // std::string colVal("10");
351 352

    SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
dengyihao's avatar
dengyihao 已提交
353 354
    SIndexTerm*           q = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
                                     (const char*)&val, sizeof(val));
355 356 357 358 359 360 361 362 363

    SArray* result = taosArrayInit(1, sizeof(uint64_t));
    indexMultiTermQueryAdd(mq, q, QUERY_LESS_THAN);
    tIndexJsonSearch(index, mq, result);
    EXPECT_EQ(0, taosArrayGetSize(result));
    indexMultiTermQueryDestroy(mq);
  }
  {
    std::string colName("test");
dengyihao's avatar
dengyihao 已提交
364 365
    int         val = 10;
    // std::string colVal("10");
366 367

    SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
dengyihao's avatar
dengyihao 已提交
368 369
    SIndexTerm*           q = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
                                     (const char*)&val, sizeof(val));
370 371 372 373 374 375 376 377 378

    SArray* result = taosArrayInit(1, sizeof(uint64_t));
    indexMultiTermQueryAdd(mq, q, QUERY_LESS_EQUAL);
    tIndexJsonSearch(index, mq, result);
    EXPECT_EQ(1000, taosArrayGetSize(result));
    indexMultiTermQueryDestroy(mq);
  }
}

dengyihao's avatar
dengyihao 已提交
379
TEST_F(JsonEnv, testWriteJsonTfileAndCache_INT) {
380 381
  {
    std::string colName("test1");
dengyihao's avatar
dengyihao 已提交
382
    int         val = 10;
dengyihao's avatar
dengyihao 已提交
383 384
    SIndexTerm* term = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
                                        (const char*)&val, sizeof(val));
385 386 387 388 389 390 391 392 393 394 395

    SIndexMultiTerm* terms = indexMultiTermCreate();
    indexMultiTermAdd(terms, term);
    for (size_t i = 0; i < 1000; i++) {
      tIndexJsonPut(index, terms, i);
    }
    indexMultiTermDestroy(terms);
  }
  {
    std::string colName("test");
    std::string colVal("xxxxxxxxxxxxxxxxxxx");
dengyihao's avatar
dengyihao 已提交
396 397
    SIndexTerm* term = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_BINARY, colName.c_str(), colName.size(),
                                        colVal.c_str(), colVal.size());
398 399 400

    SIndexMultiTerm* terms = indexMultiTermCreate();
    indexMultiTermAdd(terms, term);
dengyihao's avatar
dengyihao 已提交
401
    for (size_t i = 0; i < 1000; i++) {
402 403 404 405 406 407
      tIndexJsonPut(index, terms, i);
    }
    indexMultiTermDestroy(terms);
  }
  {
    std::string colName("test1");
dengyihao's avatar
dengyihao 已提交
408
    int         val = 10;
409 410

    SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
dengyihao's avatar
dengyihao 已提交
411 412
    SIndexTerm*           q = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
                                     (const char*)&val, sizeof(val));
413 414 415 416 417 418 419 420 421

    SArray* result = taosArrayInit(1, sizeof(uint64_t));
    indexMultiTermQueryAdd(mq, q, QUERY_TERM);
    tIndexJsonSearch(index, mq, result);
    EXPECT_EQ(1000, taosArrayGetSize(result));
    indexMultiTermQueryDestroy(mq);
  }
  {
    std::string colName("test1");
dengyihao's avatar
dengyihao 已提交
422
    int         val = 10;
423 424

    SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
dengyihao's avatar
dengyihao 已提交
425 426
    SIndexTerm*           q = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
                                     (const char*)&val, sizeof(int));
427 428 429 430 431 432 433 434 435

    SArray* result = taosArrayInit(1, sizeof(uint64_t));
    indexMultiTermQueryAdd(mq, q, QUERY_GREATER_THAN);
    tIndexJsonSearch(index, mq, result);
    EXPECT_EQ(0, taosArrayGetSize(result));
    indexMultiTermQueryDestroy(mq);
  }
  {
    std::string colName("test1");
dengyihao's avatar
dengyihao 已提交
436 437
    // std::string colVal("10");
    int val = 10;
438 439

    SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
dengyihao's avatar
dengyihao 已提交
440 441
    SIndexTerm*           q = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
                                     (const char*)&val, sizeof(val));
442 443 444 445 446 447 448 449 450

    SArray* result = taosArrayInit(1, sizeof(uint64_t));
    indexMultiTermQueryAdd(mq, q, QUERY_GREATER_EQUAL);
    tIndexJsonSearch(index, mq, result);
    EXPECT_EQ(1000, taosArrayGetSize(result));
    indexMultiTermQueryDestroy(mq);
  }
  {
    std::string colName("test1");
dengyihao's avatar
dengyihao 已提交
451
    int         val = 10;
452 453

    SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
dengyihao's avatar
dengyihao 已提交
454 455
    SIndexTerm*           q = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
                                     (const char*)&val, sizeof(val));
456 457 458 459 460 461 462 463 464

    SArray* result = taosArrayInit(1, sizeof(uint64_t));
    indexMultiTermQueryAdd(mq, q, QUERY_GREATER_THAN);
    tIndexJsonSearch(index, mq, result);
    EXPECT_EQ(0, taosArrayGetSize(result));
    indexMultiTermQueryDestroy(mq);
  }
  {
    std::string colName("test1");
dengyihao's avatar
dengyihao 已提交
465
    int         val = 10;
466 467

    SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
dengyihao's avatar
dengyihao 已提交
468 469
    SIndexTerm*           q = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
                                     (const char*)&val, sizeof(val));
470 471 472 473 474 475 476

    SArray* result = taosArrayInit(1, sizeof(uint64_t));
    indexMultiTermQueryAdd(mq, q, QUERY_LESS_EQUAL);
    tIndexJsonSearch(index, mq, result);
    EXPECT_EQ(1000, taosArrayGetSize(result));
    indexMultiTermQueryDestroy(mq);
  }
dengyihao's avatar
dengyihao 已提交
477 478
  {
    std::string colName("other_column");
dengyihao's avatar
dengyihao 已提交
479
    int         val = 100;
dengyihao's avatar
dengyihao 已提交
480

dengyihao's avatar
dengyihao 已提交
481 482
    SIndexTerm* term = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
                                        (const char*)&val, sizeof(val));
dengyihao's avatar
dengyihao 已提交
483 484 485 486 487 488 489 490

    SIndexMultiTerm* terms = indexMultiTermCreate();
    indexMultiTermAdd(terms, term);
    for (size_t i = 0; i < 1000; i++) {
      tIndexJsonPut(index, terms, i);
    }
    indexMultiTermDestroy(terms);
  }
491 492
  {
    std::string colName("test1");
dengyihao's avatar
dengyihao 已提交
493 494
    int         val = 10;
    // std::string colVal("10");
495 496

    SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
dengyihao's avatar
dengyihao 已提交
497 498
    SIndexTerm*           q = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
                                     (const char*)&val, sizeof(val));
499 500 501 502 503 504 505

    SArray* result = taosArrayInit(1, sizeof(uint64_t));
    indexMultiTermQueryAdd(mq, q, QUERY_LESS_THAN);
    tIndexJsonSearch(index, mq, result);
    EXPECT_EQ(0, taosArrayGetSize(result));
    indexMultiTermQueryDestroy(mq);
  }
dengyihao's avatar
dengyihao 已提交
506 507 508
  {
    std::string colName("test1");
    int         val = 15;
dengyihao's avatar
dengyihao 已提交
509 510
    SIndexTerm* term = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
                                        (const char*)&val, sizeof(val));
dengyihao's avatar
dengyihao 已提交
511 512 513 514

    SIndexMultiTerm* terms = indexMultiTermCreate();
    indexMultiTermAdd(terms, term);
    for (size_t i = 0; i < 1000; i++) {
515
      tIndexJsonPut(index, terms, i + 1000);
dengyihao's avatar
dengyihao 已提交
516 517 518 519 520 521 522 523 524
    }
    indexMultiTermDestroy(terms);
  }
  {
    std::string colName("test1");
    int         val = 8;
    // std::string colVal("10");

    SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
dengyihao's avatar
dengyihao 已提交
525 526
    SIndexTerm*           q = indexTermCreateT(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
                                     (const char*)&val, sizeof(val));
dengyihao's avatar
dengyihao 已提交
527 528 529 530 531 532 533

    SArray* result = taosArrayInit(1, sizeof(uint64_t));
    indexMultiTermQueryAdd(mq, q, QUERY_GREATER_EQUAL);
    tIndexJsonSearch(index, mq, result);
    EXPECT_EQ(2000, taosArrayGetSize(result));
    indexMultiTermQueryDestroy(mq);
  }
534
}
dengyihao's avatar
dengyihao 已提交
535 536 537 538
TEST_F(JsonEnv, testWriteJsonTfileAndCache_INT2) {
  {
    int         val = 10;
    std::string colName("test1");
dengyihao's avatar
dengyihao 已提交
539
    for (int i = 0; i < 1000; i++) {
dengyihao's avatar
dengyihao 已提交
540 541 542 543 544 545 546 547
      val += 1;
      WriteData(index, colName, TSDB_DATA_TYPE_INT, &val, sizeof(val), i);
    }
  }
  {
    int         val = 10;
    std::string colName("test2xxx");
    std::string colVal("xxxxxxxxxxxxxxx");
dengyihao's avatar
dengyihao 已提交
548
    for (int i = 0; i < 1000; i++) {
dengyihao's avatar
dengyihao 已提交
549 550 551 552 553 554 555 556 557
      val += 1;
      WriteData(index, colName, TSDB_DATA_TYPE_BINARY, (void*)(colVal.c_str()), colVal.size(), i);
    }
  }
  {
    SArray*     res = NULL;
    std::string colName("test1");
    int         val = 9;
    Search(index, colName, TSDB_DATA_TYPE_INT, &val, sizeof(val), QUERY_GREATER_EQUAL, &res);
dengyihao's avatar
dengyihao 已提交
558
    EXPECT_EQ(1000, taosArrayGetSize(res));
dengyihao's avatar
dengyihao 已提交
559 560 561 562 563 564
  }
  {
    SArray*     res = NULL;
    std::string colName("test2xxx");
    std::string colVal("xxxxxxxxxxxxxxx");
    Search(index, colName, TSDB_DATA_TYPE_BINARY, (void*)(colVal.c_str()), colVal.size(), QUERY_TERM, &res);
dengyihao's avatar
dengyihao 已提交
565
    EXPECT_EQ(1000, taosArrayGetSize(res));
dengyihao's avatar
dengyihao 已提交
566 567 568 569 570 571 572 573 574 575 576 577 578 579
  }
}
TEST_F(JsonEnv, testWriteJsonTfileAndCache_FLOAT) {
  {
    float       val = 10.0;
    std::string colName("test1");
    for (int i = 0; i < 1000; i++) {
      WriteData(index, colName, TSDB_DATA_TYPE_FLOAT, &val, sizeof(val), i);
    }
  }
  {
    float       val = 2.0;
    std::string colName("test1");
    for (int i = 0; i < 1000; i++) {
580
      WriteData(index, colName, TSDB_DATA_TYPE_FLOAT, &val, sizeof(val), i + 1000);
dengyihao's avatar
dengyihao 已提交
581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604
    }
  }
  {
    SArray*     res = NULL;
    std::string colName("test1");
    float       val = 1.9;
    Search(index, colName, TSDB_DATA_TYPE_FLOAT, &val, sizeof(val), QUERY_GREATER_EQUAL, &res);
    EXPECT_EQ(2000, taosArrayGetSize(res));
  }
  {
    SArray*     res = NULL;
    std::string colName("test1");
    float       val = 2.1;
    Search(index, colName, TSDB_DATA_TYPE_FLOAT, &val, sizeof(val), QUERY_GREATER_EQUAL, &res);
    EXPECT_EQ(1000, taosArrayGetSize(res));
  }
  {
    std::string colName("test1");
    SArray*     res = NULL;
    float       val = 2.1;
    Search(index, colName, TSDB_DATA_TYPE_FLOAT, &val, sizeof(val), QUERY_GREATER_EQUAL, &res);
    EXPECT_EQ(1000, taosArrayGetSize(res));
  }
}
dengyihao's avatar
dengyihao 已提交
605 606
TEST_F(JsonEnv, testWriteJsonTfileAndCache_DOUBLE) {
  {
dengyihao's avatar
dengyihao 已提交
607
    double val = 10.0;
dengyihao's avatar
dengyihao 已提交
608
    for (int i = 0; i < 1000; i++) {
dengyihao's avatar
dengyihao 已提交
609
      WriteData(index, "test1", TSDB_DATA_TYPE_DOUBLE, &val, sizeof(val), i);
dengyihao's avatar
dengyihao 已提交
610 611 612
    }
  }
  {
dengyihao's avatar
dengyihao 已提交
613
    double val = 2.0;
dengyihao's avatar
dengyihao 已提交
614
    for (int i = 0; i < 1000; i++) {
dengyihao's avatar
dengyihao 已提交
615
      WriteData(index, "test1", TSDB_DATA_TYPE_DOUBLE, &val, sizeof(val), i + 1000);
dengyihao's avatar
dengyihao 已提交
616 617 618 619 620 621
    }
  }
  {
    SArray*     res = NULL;
    std::string colName("test1");
    double      val = 1.9;
dengyihao's avatar
dengyihao 已提交
622
    Search(index, "test1", TSDB_DATA_TYPE_DOUBLE, &val, sizeof(val), QUERY_GREATER_EQUAL, &res);
dengyihao's avatar
dengyihao 已提交
623 624 625
    EXPECT_EQ(2000, taosArrayGetSize(res));
  }
  {
dengyihao's avatar
dengyihao 已提交
626 627 628
    SArray* res = NULL;
    double  val = 2.1;
    Search(index, "test1", TSDB_DATA_TYPE_DOUBLE, &val, sizeof(val), QUERY_GREATER_EQUAL, &res);
dengyihao's avatar
dengyihao 已提交
629 630 631
    EXPECT_EQ(1000, taosArrayGetSize(res));
  }
  {
dengyihao's avatar
dengyihao 已提交
632 633 634 635 636 637 638 639 640 641 642 643 644 645 646
    SArray* res = NULL;
    double  val = 2.1;
    Search(index, "test1", TSDB_DATA_TYPE_DOUBLE, &val, sizeof(val), QUERY_GREATER_EQUAL, &res);
    EXPECT_EQ(1000, taosArrayGetSize(res));
  }
  {
    SArray* res = NULL;
    double  val = 10.0;
    Search(index, "test1", TSDB_DATA_TYPE_DOUBLE, &val, sizeof(val), QUERY_LESS_EQUAL, &res);
    EXPECT_EQ(2000, taosArrayGetSize(res));
  }
  {
    SArray* res = NULL;
    double  val = 10.0;
    Search(index, "test1", TSDB_DATA_TYPE_DOUBLE, &val, sizeof(val), QUERY_LESS_THAN, &res);
dengyihao's avatar
dengyihao 已提交
647 648 649
    EXPECT_EQ(1000, taosArrayGetSize(res));
  }
}