unitTest.cpp 29.3 KB
Newer Older
H
hjxilinx 已提交
1 2 3 4 5 6
#include <gtest/gtest.h>
#include <iostream>

#include "taos.h"
#include "tsdb.h"

S
Shengliang Guan 已提交
7
#pragma GCC diagnostic push
S
Shengliang Guan 已提交
8 9 10 11 12 13
#pragma GCC diagnostic ignored "-Wwrite-strings"
#pragma GCC diagnostic ignored "-Wunused-function"
#pragma GCC diagnostic ignored "-Wunused-variable"
#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
#pragma GCC diagnostic ignored "-Wsign-compare"

H
hjxilinx 已提交
14 15 16 17 18 19 20
#include "../../client/inc/tscUtil.h"
#include "tutil.h"
#include "tvariant.h"
#include "ttokendef.h"

namespace {
int32_t testValidateName(char* name) {
H
Haojun Liao 已提交
21
  SStrToken token = {0};
H
hjxilinx 已提交
22 23 24 25
  token.z = name;
  token.n = strlen(name);
  token.type = 0;

26
  tGetToken(name, &token.type);
H
hjxilinx 已提交
27 28 29 30 31
  return tscValidateName(&token);
}
}

static void _init_tvariant_bool(tVariant* t) {
H
Haojun Liao 已提交
32
  t->i64 = TSDB_FALSE;
H
hjxilinx 已提交
33 34 35 36
  t->nType = TSDB_DATA_TYPE_BOOL;
}

static void _init_tvariant_tinyint(tVariant* t) {
H
Haojun Liao 已提交
37
  t->i64 = -27;
H
hjxilinx 已提交
38 39 40 41
  t->nType = TSDB_DATA_TYPE_TINYINT;
}

static void _init_tvariant_int(tVariant* t) {
H
Haojun Liao 已提交
42
  t->i64 = -23997659;
H
hjxilinx 已提交
43 44 45 46
  t->nType = TSDB_DATA_TYPE_INT;
}

static void _init_tvariant_bigint(tVariant* t) {
H
Haojun Liao 已提交
47
  t->i64 = -3333333333333;
H
hjxilinx 已提交
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
  t->nType = TSDB_DATA_TYPE_BIGINT;
}

static void _init_tvariant_float(tVariant* t) {
  t->dKey = -8991212199.8987878776;
  t->nType = TSDB_DATA_TYPE_FLOAT;
}

static void _init_tvariant_binary(tVariant* t) {
  tVariantDestroy(t);

  t->pz = (char*)calloc(1, 20);  //"2e3");
  t->nType = TSDB_DATA_TYPE_BINARY;
  strcpy(t->pz, "2e5");
  t->nLen = strlen(t->pz);
}

static void _init_tvariant_nchar(tVariant* t) {
  tVariantDestroy(t);

  t->wpz = (wchar_t*)calloc(1, 20 * TSDB_NCHAR_SIZE);
  t->nType = TSDB_DATA_TYPE_NCHAR;
  wcscpy(t->wpz, L"-2000000.8765");
H
[TD-92]  
Hui Li 已提交
71
  t->nLen = twcslen(t->wpz);
H
hjxilinx 已提交
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
}

int main(int argc, char** argv) {
  testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}

/* test validate the names for table/database */
TEST(testCase, db_table_name) {

  char t01[] = "abc";
  EXPECT_EQ(testValidateName(t01), TSDB_CODE_SUCCESS);

  char t02[] = "'abc'";
  EXPECT_EQ(testValidateName(t02), TSDB_CODE_SUCCESS);

  char t1[] = "abc.def";
  EXPECT_EQ(testValidateName(t1), TSDB_CODE_SUCCESS);
  printf("%s\n", t1);

  char t2[] = "'abc.def'";
  EXPECT_EQ(testValidateName(t2), TSDB_CODE_SUCCESS);
  printf("%s\n", t2);

  char t3[] = "'abc'.def";
  EXPECT_EQ(testValidateName(t3), TSDB_CODE_SUCCESS);
  printf("%s\n", t3);

  char t4[] = "'abc'.'def'";
  EXPECT_EQ(testValidateName(t4), TSDB_CODE_SUCCESS);

  char t5[] = "table.'def'";
104
  EXPECT_EQ(testValidateName(t5), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
105 106

  char t6[] = "'table'.'def'";
107
  EXPECT_EQ(testValidateName(t6), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
108 109 110 111 112 113

  char t7[] = "'_ab1234'.'def'";
  EXPECT_EQ(testValidateName(t7), TSDB_CODE_SUCCESS);
  printf("%s\n", t7);

  char t8[] = "'_ab&^%1234'.'def'";
114
  EXPECT_EQ(testValidateName(t8), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
115 116

  char t9[] = "'_123'.'gtest中文'";
117
  EXPECT_EQ(testValidateName(t9), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
118 119

  char t10[] = "abc.'gtest中文'";
120
  EXPECT_EQ(testValidateName(t10), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
121 122

  char t10_1[] = "abc.'中文gtest'";
123
  EXPECT_EQ(testValidateName(t10_1), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
124 125
  
  char t11[] = "'192.168.0.1'.abc";
126
  EXPECT_EQ(testValidateName(t11), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
127 128

  char t12[] = "192.168.0.1.abc";
129
  EXPECT_EQ(testValidateName(t12), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
130 131

  char t13[] = "abc.";
132
  EXPECT_EQ(testValidateName(t13), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
133 134

  char t14[] = ".abc";
135
  EXPECT_EQ(testValidateName(t14), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
136 137

  char t15[] = ".'abc'";
138
  EXPECT_EQ(testValidateName(t15), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
139 140

  char t16[] = ".abc'";
141
  EXPECT_EQ(testValidateName(t16), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
142 143

  char t17[] = "123a.\"abc\"";
144
  EXPECT_EQ(testValidateName(t17), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
145 146 147 148 149 150 151
  printf("%s\n", t17);

  char t18[] = "a.\"abc\"";
  EXPECT_EQ(testValidateName(t18), TSDB_CODE_SUCCESS);
  printf("%s\n", t18);

  char t19[] = "'_ab1234'.'def'.'ab123'";
152
  EXPECT_EQ(testValidateName(t19), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
153 154

  char t20[] = "'_ab1234*&^'";
155
  EXPECT_EQ(testValidateName(t20), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
156 157

  char t21[] = "'1234_abc'";
158
  EXPECT_EQ(testValidateName(t21), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
159 160 161 162 163 164 165 166 167 168 169 170 171


  // =======Containing capital letters=================
  char t30[] = "ABC";
  EXPECT_EQ(testValidateName(t30), TSDB_CODE_SUCCESS);

  char t31[] = "'ABC'";
  EXPECT_EQ(testValidateName(t31), TSDB_CODE_SUCCESS);

  char t32[] = "ABC.def";
  EXPECT_EQ(testValidateName(t32), TSDB_CODE_SUCCESS);

  char t33[] = "'ABC.def";
172
  EXPECT_EQ(testValidateName(t33), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
173 174

  char t33_0[] = "abc.DEF'";
175
  EXPECT_EQ(testValidateName(t33_0), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
  
  char t34[] = "'ABC.def'";
  //int32_t tmp0 = testValidateName(t34);
  EXPECT_EQ(testValidateName(t34), TSDB_CODE_SUCCESS);

  char t35[] = "'ABC'.def";
  EXPECT_EQ(testValidateName(t35), TSDB_CODE_SUCCESS);

  char t36[] = "'ABC'.'DEF'";
  EXPECT_EQ(testValidateName(t36), TSDB_CODE_SUCCESS);

  char t37[] = "abc.'DEF'";
  EXPECT_EQ(testValidateName(t37), TSDB_CODE_SUCCESS);

  char t37_1[] = "abc.'_123DEF'";
  EXPECT_EQ(testValidateName(t37_1), TSDB_CODE_SUCCESS);

  char t38[] = "'abc'.'DEF'";
  EXPECT_EQ(testValidateName(t38), TSDB_CODE_SUCCESS);

  // do not use key words 
  char t39[] = "table.'DEF'";
198
  EXPECT_EQ(testValidateName(t39), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
199 200

  char t40[] = "'table'.'DEF'";
201
  EXPECT_EQ(testValidateName(t40), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
202 203 204 205 206

  char t41[] = "'_abXYZ1234'.'deFF'";
  EXPECT_EQ(testValidateName(t41), TSDB_CODE_SUCCESS);

  char t42[] = "'_abDEF&^%1234'.'DIef'";
207
  EXPECT_EQ(testValidateName(t42), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
208 209

  char t43[] = "'_123'.'Gtest中文'";
210
  EXPECT_EQ(testValidateName(t43), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
211 212

  char t44[] = "'aABC'.'Gtest中文'";
213
  EXPECT_EQ(testValidateName(t44), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
214 215
  
  char t45[] = "'ABC'.";
216
  EXPECT_EQ(testValidateName(t45), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
217 218

  char t46[] = ".'ABC'";
219
  EXPECT_EQ(testValidateName(t46), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
220 221 222 223 224 225

  char t47[] = "a.\"aTWc\"";
  EXPECT_EQ(testValidateName(t47), TSDB_CODE_SUCCESS);

 // ================has space =================
  char t60[] = " ABC ";
226
  EXPECT_EQ(testValidateName(t60), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
227 228

  char t60_1[] = "   ABC ";
229
  EXPECT_EQ(testValidateName(t60_1), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
230 231

  char t61[] = "' ABC '";
232
  EXPECT_EQ(testValidateName(t61), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
233 234

  char t61_1[] = "'  ABC '";
235
  EXPECT_EQ(testValidateName(t61_1), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
236 237

  char t62[] = " ABC . def ";
238
  EXPECT_EQ(testValidateName(t62), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
239 240

  char t63[] = "' ABC . def ";
241
  EXPECT_EQ(testValidateName(t63), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
242 243

  char t63_0[] = "  abc . DEF ' ";
244
  EXPECT_EQ(testValidateName(t63_0), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
245 246 247
  
  char t64[] = " '  ABC .  def ' ";
  //int32_t tmp1 = testValidateName(t64);
248
  EXPECT_EQ(testValidateName(t64), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
249 250

  char t65[] = " ' ABC  '. def ";
251
  EXPECT_EQ(testValidateName(t65), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
252 253

  char t66[] = "' ABC '.'  DEF '";
254
  EXPECT_EQ(testValidateName(t66), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
255 256

  char t67[] = "abc . '  DEF  '";
257
  EXPECT_EQ(testValidateName(t67), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
258 259

  char t68[] = "'  abc '.'   DEF '";
260
  EXPECT_EQ(testValidateName(t68), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
261 262 263

  // do not use key words 
  char t69[] = "table.'DEF'";
264
  EXPECT_EQ(testValidateName(t69), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
265 266

  char t70[] = "'table'.'DEF'";
267
  EXPECT_EQ(testValidateName(t70), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
268 269

  char t71[] = "'_abXYZ1234  '.' deFF  '";
270
  EXPECT_EQ(testValidateName(t71), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
271 272

  char t72[] = "'_abDEF&^%1234'.'  DIef'";
273
  EXPECT_EQ(testValidateName(t72), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
274 275

  char t73[] = "'_123'.'  Gtest中文'";
276
  EXPECT_EQ(testValidateName(t73), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
277 278

  char t74[] = "' aABC'.'Gtest中文'";
279
  EXPECT_EQ(testValidateName(t74), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
280 281
  
  char t75[] = "' ABC '.";
282
  EXPECT_EQ(testValidateName(t75), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
283 284

  char t76[] = ".' ABC'";
285
  EXPECT_EQ(testValidateName(t76), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
286 287

  char t77[] = " a . \"aTWc\" ";
288
  EXPECT_EQ(testValidateName(t77), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
289 290

  char t78[] = "  a.\"aTWc  \"";
291
  EXPECT_EQ(testValidateName(t78), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
292 293 294 295 296


  // ===============muti string by space ===================
  // There's no such case.
  //char t160[] = "A BC";
297
  //EXPECT_EQ(testValidateName(t160), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
298 299 300 301
  //printf("end:%s\n", t160);

  // There's no such case.
  //char t161[] = "' A BC '";
302
  //EXPECT_EQ(testValidateName(t161), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
303 304

  char t162[] = " AB C . de f ";
305
  EXPECT_EQ(testValidateName(t162), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
306 307

  char t163[] = "' AB C . de f ";
308
  EXPECT_EQ(testValidateName(t163), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
309 310

  char t163_0[] = "  ab c . DE F ' ";
311
  EXPECT_EQ(testValidateName(t163_0), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
312 313 314
  
  char t164[] = " '  AB C .  de f ' ";
  //int32_t tmp2 = testValidateName(t164);
315
  EXPECT_EQ(testValidateName(t164), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
316 317

  char t165[] = " ' A BC  '. de f ";
318
  EXPECT_EQ(testValidateName(t165), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
319 320

  char t166[] = "' AB C '.'  DE  F '";
321
  EXPECT_EQ(testValidateName(t166), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
322 323

  char t167[] = "ab  c . '  D  EF  '";
324
  EXPECT_EQ(testValidateName(t167), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
325 326

  char t168[] = "'  a bc '.'   DE  F '";
327
  EXPECT_EQ(testValidateName(t168), TSDB_CODE_TSC_INVALID_OPERATION);
H
hjxilinx 已提交
328 329 330 331 332 333 334 335 336 337 338
  
}

/* test parse time function */
TEST(testCase, parse_time) {
  taos_options(TSDB_OPTION_TIMEZONE, "GMT-8");
  char t1[] = "2018-1-1 1:1:1.952798";
  char t13[] = "1970-1-1 0:0:0";

  int64_t time = 0, time1 = 0;

dengyihao's avatar
dengyihao 已提交
339
  taosParseTime(t1, &time, strlen(t1), TSDB_TIME_PRECISION_MILLI, 0);
H
hjxilinx 已提交
340 341
  EXPECT_EQ(time, 1514739661952);

dengyihao's avatar
dengyihao 已提交
342
  taosParseTime(t13, &time, strlen(t13), TSDB_TIME_PRECISION_MILLI, 0);
H
hjxilinx 已提交
343 344 345
  EXPECT_EQ(time, timezone * MILLISECOND_PER_SECOND);

  char t2[] = "2018-1-1T1:1:1.952Z";
dengyihao's avatar
dengyihao 已提交
346
  taosParseTime(t2, &time, strlen(t2), TSDB_TIME_PRECISION_MILLI, 0);
H
hjxilinx 已提交
347 348 349 350

  EXPECT_EQ(time, 1514739661952 + 28800000);

  char t3[] = "2018-1-1 1:01:01.952";
dengyihao's avatar
dengyihao 已提交
351
  taosParseTime(t3, &time, strlen(t3), TSDB_TIME_PRECISION_MILLI, 0);
H
hjxilinx 已提交
352 353 354 355 356 357 358 359
  EXPECT_EQ(time, 1514739661952);

  char t4[] = "2018-1-1 1:01:01.9";
  char t5[] = "2018-1-1 1:01:1.900";
  char t6[] = "2018-01-01 1:1:1.90";
  char t7[] = "2018-01-01 01:01:01.9";
  char t8[] = "2018-01-01 01:01:01.9007865";

dengyihao's avatar
dengyihao 已提交
360 361
  taosParseTime(t4, &time, strlen(t4), TSDB_TIME_PRECISION_MILLI, 0);
  taosParseTime(t5, &time1, strlen(t5), TSDB_TIME_PRECISION_MILLI, 0);
H
hjxilinx 已提交
362 363
  EXPECT_EQ(time, time1);

dengyihao's avatar
dengyihao 已提交
364 365
  taosParseTime(t4, &time, strlen(t4), TSDB_TIME_PRECISION_MILLI, 0);
  taosParseTime(t6, &time1, strlen(t6), TSDB_TIME_PRECISION_MILLI, 0);
H
hjxilinx 已提交
366 367
  EXPECT_EQ(time, time1);

dengyihao's avatar
dengyihao 已提交
368 369
  taosParseTime(t4, &time, strlen(t4), TSDB_TIME_PRECISION_MILLI, 0);
  taosParseTime(t7, &time1, strlen(t7), TSDB_TIME_PRECISION_MILLI, 0);
H
hjxilinx 已提交
370 371
  EXPECT_EQ(time, time1);

dengyihao's avatar
dengyihao 已提交
372 373
  taosParseTime(t5, &time, strlen(t5), TSDB_TIME_PRECISION_MILLI, 0);
  taosParseTime(t8, &time1, strlen(t8), TSDB_TIME_PRECISION_MILLI, 0);
H
hjxilinx 已提交
374 375 376 377
  EXPECT_EQ(time, time1);

  char t9[] = "2017-4-3 1:1:2.980";
  char t10[] = "2017-4-3T2:1:2.98+9:00";
dengyihao's avatar
dengyihao 已提交
378 379
  taosParseTime(t9, &time, strlen(t9), TSDB_TIME_PRECISION_MILLI, 0);
  taosParseTime(t10, &time1, strlen(t10), TSDB_TIME_PRECISION_MILLI, 0);
H
hjxilinx 已提交
380 381 382
  EXPECT_EQ(time, time1);

  char t11[] = "2017-4-3T2:1:2.98+09:00";
dengyihao's avatar
dengyihao 已提交
383 384
  taosParseTime(t11, &time, strlen(t11), TSDB_TIME_PRECISION_MILLI, 0);
  taosParseTime(t10, &time1, strlen(t10), TSDB_TIME_PRECISION_MILLI, 0);
H
hjxilinx 已提交
385 386 387
  EXPECT_EQ(time, time1);

  char t12[] = "2017-4-3T2:1:2.98+0900";
dengyihao's avatar
dengyihao 已提交
388 389
  taosParseTime(t11, &time, strlen(t11), TSDB_TIME_PRECISION_MILLI, 0);
  taosParseTime(t12, &time1, strlen(t12), TSDB_TIME_PRECISION_MILLI, 0);
H
hjxilinx 已提交
390 391 392
  EXPECT_EQ(time, time1);

  taos_options(TSDB_OPTION_TIMEZONE, "UTC");
dengyihao's avatar
dengyihao 已提交
393
  taosParseTime(t13, &time, strlen(t13), TSDB_TIME_PRECISION_MILLI, 0);
H
hjxilinx 已提交
394 395 396 397
  EXPECT_EQ(time, 0);

  taos_options(TSDB_OPTION_TIMEZONE, "Asia/Shanghai");
  char t14[] = "1970-1-1T0:0:0Z";
dengyihao's avatar
dengyihao 已提交
398
  taosParseTime(t14, &time, strlen(t14), TSDB_TIME_PRECISION_MILLI, 0);
H
hjxilinx 已提交
399 400 401
  EXPECT_EQ(time, 0);

  char t40[] = "1970-1-1 0:0:0.999999999";
dengyihao's avatar
dengyihao 已提交
402
  taosParseTime(t40, &time, strlen(t40), TSDB_TIME_PRECISION_MILLI, 0);
H
hjxilinx 已提交
403 404 405
  EXPECT_EQ(time, 999 + timezone * MILLISECOND_PER_SECOND);

  char t41[] = "1997-1-1 0:0:0.999999999";
dengyihao's avatar
dengyihao 已提交
406
  taosParseTime(t41, &time, strlen(t41), TSDB_TIME_PRECISION_MILLI, 0);
H
hjxilinx 已提交
407 408 409
  EXPECT_EQ(time, 852048000999);

  char    t42[] = "1997-1-1T0:0:0.999999999Z";
dengyihao's avatar
dengyihao 已提交
410
  taosParseTime(t42, &time, strlen(t42), TSDB_TIME_PRECISION_MILLI, 0);
H
hjxilinx 已提交
411 412
  EXPECT_EQ(time, 852048000999 - timezone * MILLISECOND_PER_SECOND);

G
Ganlin Zhao 已提交
413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435
  // "%Y-%m-%d %H:%M:%S" format with TimeZone appendix is also treated as legal
  // and TimeZone will be processed
  char t60[] = "2017-4-3 1:1:2.980";
  char t61[] = "2017-4-3 2:1:2.98+9:00";
  taosParseTime(t60, &time, strlen(t60), TSDB_TIME_PRECISION_MILLI, 0);
  taosParseTime(t61, &time1, strlen(t61), TSDB_TIME_PRECISION_MILLI, 0);
  EXPECT_EQ(time, time1);

  char t62[] = "2017-4-3 2:1:2.98+09:00";
  taosParseTime(t62, &time, strlen(t62), TSDB_TIME_PRECISION_MILLI, 0);
  taosParseTime(t61, &time1, strlen(t61), TSDB_TIME_PRECISION_MILLI, 0);
  EXPECT_EQ(time, time1);

  char t63[] = "2017-4-3 2:1:2.98+0900";
  taosParseTime(t63, &time, strlen(t63), TSDB_TIME_PRECISION_MILLI, 0);
  taosParseTime(t62, &time1, strlen(t62), TSDB_TIME_PRECISION_MILLI, 0);
  EXPECT_EQ(time, time1);

  char t64[] = "2017-4-2 17:1:2.98Z";
  taosParseTime(t63, &time, strlen(t63), TSDB_TIME_PRECISION_MILLI, 0);
  taosParseTime(t64, &time1, strlen(t64), TSDB_TIME_PRECISION_MILLI, 0);
  EXPECT_EQ(time, time1);

436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458
  // "%Y-%m-%d%H:%M:%S" format with TimeZone appendix is also treated as legal
  // and TimeZone will be processed
  char t80[] = "2017-4-51:1:2.980";
  char t81[] = "2017-4-52:1:2.98+9:00";
  taosParseTime(t80, &time, strlen(t80), TSDB_TIME_PRECISION_MILLI, 0);
  taosParseTime(t81, &time1, strlen(t81), TSDB_TIME_PRECISION_MILLI, 0);
  EXPECT_EQ(time, time1);

  char t82[] = "2017-4-52:1:2.98+09:00";
  taosParseTime(t82, &time, strlen(t82), TSDB_TIME_PRECISION_MILLI, 0);
  taosParseTime(t81, &time1, strlen(t81), TSDB_TIME_PRECISION_MILLI, 0);
  EXPECT_EQ(time, time1);

  char t83[] = "2017-4-52:1:2.98+0900";
  taosParseTime(t83, &time, strlen(t83), TSDB_TIME_PRECISION_MILLI, 0);
  taosParseTime(t82, &time1, strlen(t82), TSDB_TIME_PRECISION_MILLI, 0);
  EXPECT_EQ(time, time1);

  char t84[] = "2017-4-417:1:2.98Z";
  taosParseTime(t83, &time, strlen(t83), TSDB_TIME_PRECISION_MILLI, 0);
  taosParseTime(t84, &time1, strlen(t84), TSDB_TIME_PRECISION_MILLI, 0);
  EXPECT_EQ(time, time1);

H
hjxilinx 已提交
459 460 461
  ////////////////////////////////////////////////////////////////////
  // illegal timestamp format
  char t15[] = "2017-12-33 0:0:0";
dengyihao's avatar
dengyihao 已提交
462
  EXPECT_EQ(taosParseTime(t15, &time, strlen(t15), TSDB_TIME_PRECISION_MILLI, 0), -1);
H
hjxilinx 已提交
463 464

  char t16[] = "2017-12-31 99:0:0";
dengyihao's avatar
dengyihao 已提交
465
  EXPECT_EQ(taosParseTime(t16, &time, strlen(t16), TSDB_TIME_PRECISION_MILLI, 0), -1);
H
hjxilinx 已提交
466 467

  char t17[] = "2017-12-31T9:0:0";
dengyihao's avatar
dengyihao 已提交
468
  EXPECT_EQ(taosParseTime(t17, &time, strlen(t17), TSDB_TIME_PRECISION_MILLI, 0), -1);
H
hjxilinx 已提交
469 470

  char t18[] = "2017-12-31T9:0:0.Z";
dengyihao's avatar
dengyihao 已提交
471
  EXPECT_EQ(taosParseTime(t18, &time, strlen(t18), TSDB_TIME_PRECISION_MILLI, 0), -1);
H
hjxilinx 已提交
472 473

  char t19[] = "2017-12-31 9:0:0.-1";
dengyihao's avatar
dengyihao 已提交
474
  EXPECT_EQ(taosParseTime(t19, &time, strlen(t19), TSDB_TIME_PRECISION_MILLI, 0), -1);
H
hjxilinx 已提交
475 476

  char t20[] = "2017-12-31 9:0:0.1+12:99";
G
Ganlin Zhao 已提交
477
  EXPECT_EQ(taosParseTime(t20, &time, strlen(t20), TSDB_TIME_PRECISION_MILLI, 0), -1);
H
hjxilinx 已提交
478 479

  char t21[] = "2017-12-31T9:0:0.1+12:99";
dengyihao's avatar
dengyihao 已提交
480
  EXPECT_EQ(taosParseTime(t21, &time, strlen(t21), TSDB_TIME_PRECISION_MILLI, 0), -1);
H
hjxilinx 已提交
481 482

  char t22[] = "2017-12-31 9:0:0.1+13:1";
dengyihao's avatar
dengyihao 已提交
483
  EXPECT_EQ(taosParseTime(t22, &time, strlen(t22), TSDB_TIME_PRECISION_MILLI, 0), 0);
H
hjxilinx 已提交
484 485

  char t23[] = "2017-12-31T9:0:0.1+13:1";
dengyihao's avatar
dengyihao 已提交
486
  EXPECT_EQ(taosParseTime(t23, &time, strlen(t23), TSDB_TIME_PRECISION_MILLI, 0), 0);
487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522

  char t24[] = "2017-12-31T9:0:0.1+13:001";
  EXPECT_EQ(taosParseTime(t24, &time, strlen(t24), TSDB_TIME_PRECISION_MILLI, 0), -1);

  char t25[] = "2017-12-31T9:0:0.1+13:00abc";
  EXPECT_EQ(taosParseTime(t25, &time, strlen(t25), TSDB_TIME_PRECISION_MILLI, 0), -1);

  char t26[] = "2017-12-31T9:0:0.1+13001";
  EXPECT_EQ(taosParseTime(t26, &time, strlen(t26), TSDB_TIME_PRECISION_MILLI, 0), -1);

  char t27[] = "2017-12-31T9:0:0.1+1300abc";
  EXPECT_EQ(taosParseTime(t27, &time, strlen(t27), TSDB_TIME_PRECISION_MILLI, 0), -1);

  char t28[] = "2017-12-31T9:0:0Z+12:00";
  EXPECT_EQ(taosParseTime(t28, &time, strlen(t28), TSDB_TIME_PRECISION_MILLI, 0), -1);

  char t29[] = "2017-12-31T9:0:0.123Z+12:00";
  EXPECT_EQ(taosParseTime(t29, &time, strlen(t29), TSDB_TIME_PRECISION_MILLI, 0), -1);

  char t65[] = "2017-12-31 9:0:0.1+13:001";
  EXPECT_EQ(taosParseTime(t65, &time, strlen(t65), TSDB_TIME_PRECISION_MILLI, 0), -1);

  char t66[] = "2017-12-31 9:0:0.1+13:00abc";
  EXPECT_EQ(taosParseTime(t66, &time, strlen(t66), TSDB_TIME_PRECISION_MILLI, 0), -1);

  char t67[] = "2017-12-31 9:0:0.1+13001";
  EXPECT_EQ(taosParseTime(t67, &time, strlen(t67), TSDB_TIME_PRECISION_MILLI, 0), -1);

  char t68[] = "2017-12-31 9:0:0.1+1300abc";
  EXPECT_EQ(taosParseTime(t68, &time, strlen(t68), TSDB_TIME_PRECISION_MILLI, 0), -1);

  char t69[] = "2017-12-31 9:0:0Z+12:00";
  EXPECT_EQ(taosParseTime(t69, &time, strlen(t69), TSDB_TIME_PRECISION_MILLI, 0), -1);

  char t70[] = "2017-12-31 9:0:0.123Z+12:00";
  EXPECT_EQ(taosParseTime(t70, &time, strlen(t70), TSDB_TIME_PRECISION_MILLI, 0), -1);
523

H
hjxilinx 已提交
524 525
}

526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580
/* test parse time profiling */
TEST(testCase, parse_time_profile) {
  taos_options(TSDB_OPTION_TIMEZONE, "GMT-8");
  char t1[] = "2018-1-8 1:1:1.952";
  char t2[] = "2018-1-8T1:1:1.952+0800";
  char t3[] = "2018-1-8 1:1:1.952+0800";
  char t4[] = "2018-1-81:1:1.952+0800";

  char t5[] = "2018-1-8 1:1:1.952";
  char t6[] = "2018-1-8T1:1:1.952+08:00";
  char t7[] = "2018-1-8 1:1:1.952+08:00";
  char t8[] = "2018-1-81:1:1.952+08:00";

  char t9[] = "2018-1-8 1:1:1.952";
  char t10[] = "2018-1-8T1:1:1.952Z";
  char t11[] = "2018-1-8 1:1:1.952z";
  char t12[] = "2018-1-81:1:1.952Z";

  struct timeval start, end;
  int64_t time = 0, time1 = 0;

  int32_t total_run = 100000000;
  long total_time_us;

  gettimeofday(&start, NULL);
  for (int i = 0; i < total_run; ++i) {
    taosParseTime(t1, &time, strlen(t1), TSDB_TIME_PRECISION_MILLI, 0);
  }
  gettimeofday(&end, NULL);
  total_time_us = ((end.tv_sec - start.tv_sec)* 1000000) + (end.tv_usec - start.tv_usec);
  printf("[t1] The elapsed time is %f seconds in %d run, average:%fns\n", total_time_us/1000000.0, total_run, 1000*(float)total_time_us/(float)total_run);

  gettimeofday(&start, NULL);
  for (int i = 0; i < total_run; ++i) {
    taosParseTime(t2, &time, strlen(t2), TSDB_TIME_PRECISION_MILLI, 0);
  }
  gettimeofday(&end, NULL);
  total_time_us = ((end.tv_sec - start.tv_sec)* 1000000) + (end.tv_usec - start.tv_usec);
  printf("[t2] The elapsed time is %f seconds in %d run, average:%fns\n", total_time_us/1000000.0, total_run, 1000*(float)total_time_us/(float)total_run);

  gettimeofday(&start, NULL);
  for (int i = 0; i < total_run; ++i) {
    taosParseTime(t3, &time, strlen(t3), TSDB_TIME_PRECISION_MILLI, 0);
  }
  gettimeofday(&end, NULL);
  total_time_us = ((end.tv_sec - start.tv_sec)* 1000000) + (end.tv_usec - start.tv_usec);
  printf("[t3] The elapsed time is %f seconds in %d run, average:%fns\n", total_time_us/1000000.0, total_run, 1000*(float)total_time_us/(float)total_run);

  gettimeofday(&start, NULL);
  for (int i = 0; i < total_run; ++i) {
    taosParseTime(t4, &time, strlen(t4), TSDB_TIME_PRECISION_MILLI, 0);
  }
  gettimeofday(&end, NULL);
  total_time_us = ((end.tv_sec - start.tv_sec)* 1000000) + (end.tv_usec - start.tv_usec);
  printf("[t4] The elapsed time is %f seconds in %d run, average:%fns\n", total_time_us/1000000.0, total_run, 1000*(float)total_time_us/(float)total_run);
H
hjxilinx 已提交
581 582
}

583

H
hjxilinx 已提交
584 585 586 587 588 589
TEST(testCase, tvariant_convert) {
  // 1. bool data to all other data types
  tVariant t = {0};
  _init_tvariant_bool(&t);

  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_BOOL), 0);
H
Haojun Liao 已提交
590
  EXPECT_EQ(t.i64, 0);
H
hjxilinx 已提交
591 592 593

  _init_tvariant_bool(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_TINYINT), 0);
H
Haojun Liao 已提交
594
  EXPECT_EQ(t.i64, 0);
H
hjxilinx 已提交
595 596 597

  _init_tvariant_bool(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_SMALLINT), 0);
H
Haojun Liao 已提交
598
  EXPECT_EQ(t.i64, 0);
H
hjxilinx 已提交
599 600 601

  _init_tvariant_bool(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_BIGINT), 0);
H
Haojun Liao 已提交
602
  EXPECT_EQ(t.i64, 0);
H
hjxilinx 已提交
603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624

  _init_tvariant_bool(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_FLOAT), 0);
  EXPECT_EQ(t.dKey, 0);

  _init_tvariant_bool(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_DOUBLE), 0);
  EXPECT_EQ(t.dKey, 0);

  _init_tvariant_bool(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_BINARY), 0);
  EXPECT_STREQ(t.pz, "FALSE");
  tVariantDestroy(&t);

  _init_tvariant_bool(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_NCHAR), 0);
  EXPECT_STREQ(t.wpz, L"FALSE");
  tVariantDestroy(&t);

  // 2. tinyint to other data types
  _init_tvariant_tinyint(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_BOOL), 0);
H
Haojun Liao 已提交
625
  EXPECT_EQ(t.i64, 1);
H
hjxilinx 已提交
626 627 628

  _init_tvariant_tinyint(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_TINYINT), 0);
H
Haojun Liao 已提交
629
  EXPECT_EQ(t.i64, -27);
H
hjxilinx 已提交
630 631 632

  _init_tvariant_tinyint(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_SMALLINT), 0);
H
Haojun Liao 已提交
633
  EXPECT_EQ(t.i64, -27);
H
hjxilinx 已提交
634 635 636

  _init_tvariant_tinyint(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_INT), 0);
H
Haojun Liao 已提交
637
  EXPECT_EQ(t.i64, -27);
H
hjxilinx 已提交
638 639 640

  _init_tvariant_tinyint(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_BIGINT), 0);
H
Haojun Liao 已提交
641
  EXPECT_EQ(t.i64, -27);
H
hjxilinx 已提交
642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664

  _init_tvariant_tinyint(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_FLOAT), 0);
  EXPECT_EQ(t.dKey, -27);

  _init_tvariant_tinyint(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_DOUBLE), 0);
  EXPECT_EQ(t.dKey, -27);

  _init_tvariant_tinyint(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_BINARY), 0);
  EXPECT_STREQ(t.pz, "-27");
  tVariantDestroy(&t);

  _init_tvariant_tinyint(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_NCHAR), 0);
  EXPECT_STREQ(t.wpz, L"-27");
  tVariantDestroy(&t);

  // 3. int to other data
  // types//////////////////////////////////////////////////////////////////
  _init_tvariant_int(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_BOOL), 0);
H
Haojun Liao 已提交
665
  EXPECT_EQ(t.i64, 1);
H
hjxilinx 已提交
666 667 668 669 670 671 672 673 674

  _init_tvariant_int(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_TINYINT), 0);

  _init_tvariant_int(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_SMALLINT), 0);

  _init_tvariant_int(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_INT), 0);
H
Haojun Liao 已提交
675
  EXPECT_EQ(t.i64, -23997659);
H
hjxilinx 已提交
676 677 678

  _init_tvariant_int(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_BIGINT), 0);
H
Haojun Liao 已提交
679
  EXPECT_EQ(t.i64, -23997659);
H
hjxilinx 已提交
680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702

  _init_tvariant_int(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_FLOAT), 0);
  EXPECT_EQ(t.dKey, -23997659);

  _init_tvariant_int(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_DOUBLE), 0);
  EXPECT_EQ(t.dKey, -23997659);

  _init_tvariant_int(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_BINARY), 0);
  EXPECT_STREQ(t.pz, "-23997659");
  tVariantDestroy(&t);

  _init_tvariant_int(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_NCHAR), 0);
  EXPECT_STREQ(t.wpz, L"-23997659");
  tVariantDestroy(&t);

  // 4. bigint to other data
  // type//////////////////////////////////////////////////////////////////////////////
  _init_tvariant_bigint(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_BOOL), 0);
H
Haojun Liao 已提交
703
  EXPECT_EQ(t.i64, 1);
H
hjxilinx 已提交
704 705 706 707 708 709 710 711 712 713 714 715

  _init_tvariant_bigint(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_TINYINT), 0);

  _init_tvariant_bigint(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_SMALLINT), 0);

  _init_tvariant_bigint(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_INT), 0);

  _init_tvariant_bigint(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_BIGINT), 0);
H
Haojun Liao 已提交
716
  EXPECT_EQ(t.i64, -3333333333333);
H
hjxilinx 已提交
717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739

  _init_tvariant_bigint(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_FLOAT), 0);
  EXPECT_EQ(t.dKey, -3333333333333);

  _init_tvariant_bigint(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_DOUBLE), 0);
  EXPECT_EQ(t.dKey, -3333333333333);

  _init_tvariant_bigint(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_BINARY), 0);
  EXPECT_STREQ(t.pz, "-3333333333333");
  tVariantDestroy(&t);

  _init_tvariant_bigint(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_NCHAR), 0);
  EXPECT_STREQ(t.wpz, L"-3333333333333");
  tVariantDestroy(&t);

  // 5. float to other data
  // types////////////////////////////////////////////////////////////////////////
  _init_tvariant_float(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_BOOL), 0);
H
Haojun Liao 已提交
740
  EXPECT_EQ(t.i64, 1);
H
hjxilinx 已提交
741 742 743

  _init_tvariant_float(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_BIGINT), 0);
H
Haojun Liao 已提交
744
  EXPECT_EQ(t.i64, -8991212199);
H
hjxilinx 已提交
745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769

  _init_tvariant_float(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_FLOAT), 0);
  EXPECT_DOUBLE_EQ(t.dKey, -8991212199.8987885);

  _init_tvariant_float(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_DOUBLE), 0);
  EXPECT_DOUBLE_EQ(t.dKey, -8991212199.8987885);

  _init_tvariant_float(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_BINARY), 0);
  EXPECT_STREQ(t.pz, "-8991212199.898788");
  tVariantDestroy(&t);

  _init_tvariant_float(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_NCHAR), 0);
  EXPECT_STREQ(t.wpz, L"-8991212199.898788");
  tVariantDestroy(&t);

  // 6. binary to other data types
  // //////////////////////////////////////////////////////////////////
  t.pz = "true";
  t.nLen = strlen(t.pz);
  t.nType = TSDB_DATA_TYPE_BINARY;
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_BOOL), 0);
H
Haojun Liao 已提交
770
  EXPECT_EQ(t.i64, 1);
H
hjxilinx 已提交
771 772 773 774 775 776

  _init_tvariant_binary(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_BOOL), -1);

  _init_tvariant_binary(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_BIGINT), 0);
H
Haojun Liao 已提交
777
  EXPECT_EQ(t.i64, 200000);
H
hjxilinx 已提交
778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802

  _init_tvariant_binary(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_FLOAT), 0);
  EXPECT_DOUBLE_EQ(t.dKey, 200000);

  _init_tvariant_binary(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_DOUBLE), 0);
  EXPECT_DOUBLE_EQ(t.dKey, 200000);

  _init_tvariant_binary(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_BINARY), 0);
  EXPECT_STREQ(t.pz, "2e5");
  tVariantDestroy(&t);

  _init_tvariant_binary(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_NCHAR), 0);
  EXPECT_STREQ(t.wpz, L"2e5");
  tVariantDestroy(&t);

  // 7. nchar to other data types
  // //////////////////////////////////////////////////////////////////
  t.wpz = L"FALSE";
  t.nLen = wcslen(t.wpz);
  t.nType = TSDB_DATA_TYPE_NCHAR;
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_BOOL), 0);
H
Haojun Liao 已提交
803
  EXPECT_EQ(t.i64, 0);
H
hjxilinx 已提交
804 805 806 807 808 809

  _init_tvariant_nchar(&t);
  EXPECT_LE(tVariantTypeSetType(&t, TSDB_DATA_TYPE_BOOL), 0);

  _init_tvariant_nchar(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_BIGINT), 0);
H
Haojun Liao 已提交
810
  EXPECT_EQ(t.i64, -2000000);
H
hjxilinx 已提交
811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834

  _init_tvariant_nchar(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_FLOAT), 0);
  EXPECT_DOUBLE_EQ(t.dKey, -2000000.8765);

  _init_tvariant_nchar(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_DOUBLE), 0);
  EXPECT_DOUBLE_EQ(t.dKey, -2000000.8765);

  _init_tvariant_nchar(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_BINARY), 0);
  EXPECT_STREQ(t.pz, "-2000000.8765");
  tVariantDestroy(&t);

  _init_tvariant_nchar(&t);
  EXPECT_EQ(tVariantTypeSetType(&t, TSDB_DATA_TYPE_NCHAR), 0);
  EXPECT_STREQ(t.wpz, L"-2000000.8765");
  tVariantDestroy(&t);
}

TEST(testCase, tGetToken_Test) {
  char* s = ".123 ";
  uint32_t type = 0;

835
  int32_t len = tGetToken(s, &type);
H
hjxilinx 已提交
836 837 838 839
  EXPECT_EQ(type, TK_FLOAT);
  EXPECT_EQ(len, strlen(s) - 1);

  char s1[] = "1.123e10 ";
840
  len = tGetToken(s1, &type);
H
hjxilinx 已提交
841 842 843 844
  EXPECT_EQ(type, TK_FLOAT);
  EXPECT_EQ(len, strlen(s1) - 1);

  char s4[] = "0xff ";
845
  len = tGetToken(s4, &type);
H
hjxilinx 已提交
846 847 848 849 850
  EXPECT_EQ(type, TK_HEX);
  EXPECT_EQ(len, strlen(s4) - 1);

  // invalid data type
  char s2[] = "e10 ";
851
  len = tGetToken(s2, &type);
H
hjxilinx 已提交
852 853 854
  EXPECT_FALSE(type == TK_FLOAT);

  char s3[] = "1.1.1.1";
855
  len = tGetToken(s3, &type);
H
hjxilinx 已提交
856 857 858 859
  EXPECT_EQ(type, TK_IPTOKEN);
  EXPECT_EQ(len, strlen(s3));

  char s5[] = "0x ";
860
  len = tGetToken(s5, &type);
H
hjxilinx 已提交
861 862 863
  EXPECT_FALSE(type == TK_HEX);
}

H
Haojun Liao 已提交
864 865
static SStrToken createStrToken(char* s) {
  SStrToken t = {0};//.type = TK_STRING, .z = s, .n = strlen(s)};
H
hjxilinx 已提交
866 867 868 869 870 871 872 873
  t.type = TK_STRING;
  t.z = s;
  t.n = strlen(s);

  return t;
}

TEST(testCase, isValidNumber_test) {
H
Haojun Liao 已提交
874
  SStrToken t1 = createStrToken("123abc");
H
hjxilinx 已提交
875

H
Haojun Liao 已提交
876
  EXPECT_EQ(tGetNumericStringType(&t1), TK_ILLEGAL);
H
hjxilinx 已提交
877 878

  t1 = createStrToken("0xabc");
H
Haojun Liao 已提交
879
  EXPECT_EQ(tGetNumericStringType(&t1), TK_HEX);
H
hjxilinx 已提交
880 881

  t1 = createStrToken("0b11101");
H
Haojun Liao 已提交
882
  EXPECT_EQ(tGetNumericStringType(&t1), TK_BIN);
H
hjxilinx 已提交
883 884

  t1 = createStrToken(".134abc");
H
Haojun Liao 已提交
885
  EXPECT_EQ(tGetNumericStringType(&t1), TK_ILLEGAL);
H
hjxilinx 已提交
886 887

  t1 = createStrToken("1e1 ");
H
Haojun Liao 已提交
888
  EXPECT_EQ(tGetNumericStringType(&t1), TK_ILLEGAL);
H
hjxilinx 已提交
889 890

  t1 = createStrToken("1+2");
H
Haojun Liao 已提交
891
  EXPECT_EQ(tGetNumericStringType(&t1), TK_ILLEGAL);
H
hjxilinx 已提交
892 893

  t1 = createStrToken("-0x123");
H
Haojun Liao 已提交
894
  EXPECT_EQ(tGetNumericStringType(&t1), TK_HEX);
H
hjxilinx 已提交
895 896

  t1 = createStrToken("-1");
H
Haojun Liao 已提交
897
  EXPECT_EQ(tGetNumericStringType(&t1), TK_INTEGER);
H
hjxilinx 已提交
898 899

  t1 = createStrToken("-0b1110");
H
Haojun Liao 已提交
900
  EXPECT_EQ(tGetNumericStringType(&t1), TK_BIN);
H
hjxilinx 已提交
901 902

  t1 = createStrToken("-.234");
H
Haojun Liao 已提交
903
  EXPECT_EQ(tGetNumericStringType(&t1), TK_FLOAT);
H
hjxilinx 已提交
904 905 906 907 908 909
}

TEST(testCase, getTempFilePath_test) {
  char path[4096] = {0};
  memset(path, 1, 4096);

S
slguan 已提交
910
  taosGetTmpfilePath("new_tmp", path);
H
hjxilinx 已提交
911 912 913
  printf("%s\n", path);
}

S
Shengliang Guan 已提交
914
#pragma GCC diagnostic pop