tscParseLine.h 2.6 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/*
 * Copyright (c) 2021 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/>.
 */

#ifndef TDENGINE_TSCPARSELINE_H
#define TDENGINE_TSCPARSELINE_H

#ifdef __cplusplus
extern "C" {
#endif

23 24 25
#define SML_TIMESTAMP_SECOND_DIGITS 10
#define SML_TIMESTAMP_MILLI_SECOND_DIGITS 13

26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
typedef struct {
  char* key;
  uint8_t type;
  int16_t length;
  char* value;
} TAOS_SML_KV;

typedef struct {
  char* stableName;

  char* childTableName;
  TAOS_SML_KV* tags;
  int32_t tagNum;

  // first kv must be timestamp
  TAOS_SML_KV* fields;
  int32_t fieldNum;
} TAOS_SML_DATA_POINT;

typedef enum {
  SML_TIME_STAMP_NOW,
  SML_TIME_STAMP_SECONDS,
  SML_TIME_STAMP_MILLI_SECONDS,
  SML_TIME_STAMP_MICRO_SECONDS,
  SML_TIME_STAMP_NANO_SECONDS
} SMLTimeStampType;

53 54 55 56 57 58
typedef enum {
  SML_LINE_PROTOCOL = 0,
  SML_TELNET_PROTOCOL = 1,
  SML_JSON_PROTOCOL = 2,
} SMLProtocolType;

59 60
typedef struct {
  uint64_t id;
61 62
  SMLProtocolType protocol;
  SMLTimeStampType tsType;
63 64 65
  SHashObj* smlDataToSchema;
} SSmlLinesInfo;

66
int tscSmlInsert(TAOS* taos, TAOS_SML_DATA_POINT* points, int numPoint, SSmlLinesInfo* info);
67
bool checkDuplicateKey(char *key, SHashObj *pHash, SSmlLinesInfo* info);
68 69 70
bool isValidInteger(char *str);
bool isValidFloat(char *str);

71
int32_t isValidChildTableName(const char *pTbName, int16_t len, SSmlLinesInfo* info);
72

73
bool convertSmlValueType(TAOS_SML_KV *pVal, char *value,
74
                         uint16_t len, SSmlLinesInfo* info, bool isTag);
75 76 77
int32_t convertSmlTimeStamp(TAOS_SML_KV *pVal, char *value,
                            uint16_t len, SSmlLinesInfo* info);

78 79
void destroySmlDataPoint(TAOS_SML_DATA_POINT* point);

80 81 82 83 84 85
int taos_insert_sml_lines(TAOS* taos, char* lines[], int numLines,
                          SMLProtocolType protocol, SMLTimeStampType tsType);
int taos_insert_telnet_lines(TAOS* taos, char* lines[], int numLines,
                             SMLProtocolType protocol, SMLTimeStampType tsType);
int taos_insert_json_payload(TAOS* taos, char* payload,
                             SMLProtocolType protocol, SMLTimeStampType tsType);
86 87


88 89 90 91 92
#ifdef __cplusplus
}
#endif

#endif  // TDENGINE_TSCPARSELINE_H