commit
a2f484fe0a
|
@ -66,6 +66,8 @@ CMakeError.log
|
||||||
/test/cfg
|
/test/cfg
|
||||||
/src/.vs
|
/src/.vs
|
||||||
*.o
|
*.o
|
||||||
|
version.c
|
||||||
|
taos.rc
|
||||||
src/connector/jdbc/.settings/
|
src/connector/jdbc/.settings/
|
||||||
tests/comparisonTest/cassandra/cassandratest/.classpath
|
tests/comparisonTest/cassandra/cassandratest/.classpath
|
||||||
tests/comparisonTest/cassandra/cassandratest/.project
|
tests/comparisonTest/cassandra/cassandratest/.project
|
||||||
|
|
|
@ -28,6 +28,7 @@ INCLUDE(cmake/input.inc)
|
||||||
INCLUDE(cmake/platform.inc)
|
INCLUDE(cmake/platform.inc)
|
||||||
INCLUDE(cmake/define.inc)
|
INCLUDE(cmake/define.inc)
|
||||||
INCLUDE(cmake/env.inc)
|
INCLUDE(cmake/env.inc)
|
||||||
|
INCLUDE(cmake/version.inc)
|
||||||
INCLUDE(cmake/install.inc)
|
INCLUDE(cmake/install.inc)
|
||||||
|
|
||||||
ADD_SUBDIRECTORY(deps)
|
ADD_SUBDIRECTORY(deps)
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
|
||||||
|
PROJECT(TDengine)
|
||||||
|
|
||||||
|
SET(TD_VER_1 "2")
|
||||||
|
SET(TD_VER_2 "0")
|
||||||
|
SET(TD_VER_3 "2")
|
||||||
|
SET(TD_VER_4 "3")
|
||||||
|
SET(TD_VER_GIT "d711657139620f6c50f362597020705b8ad26bd2")
|
||||||
|
SET(TD_VER_GIT_INTERNAL "1d74ae24c541ffbb280e8630883c0236cd45f8c7")
|
||||||
|
|
||||||
|
SET(TD_VER_VERTYPE "stable")
|
||||||
|
SET(TD_VER_CPUTYPE "x64")
|
||||||
|
SET(TD_VER_OSTYPE "Linux")
|
||||||
|
|
||||||
|
SET(TD_VER_COMPATIBLE "2.0.0.0")
|
||||||
|
STRING(TIMESTAMP TD_VER_DATE "%Y-%m-%d %H:%M:%S")
|
||||||
|
|
||||||
|
IF (TD_LINUX_64)
|
||||||
|
SET(TD_VER_CPUTYPE "x64")
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
IF (TD_LINUX_32)
|
||||||
|
SET(TD_VER_CPUTYPE "x86")
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
IF (TD_ARM_64)
|
||||||
|
SET(TD_VER_CPUTYPE "aarch64")
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
IF (TD_ARM_32)
|
||||||
|
SET(TD_VER_CPUTYPE "aarch32")
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
IF (TD_WINDOWS_64)
|
||||||
|
SET(TD_VER_CPUTYPE "x64")
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
IF (TD_WINDOWS_32)
|
||||||
|
SET(TD_VER_CPUTYPE "x86")
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
CONFIGURE_FILE("${TD_COMMUNITY_DIR}/src/util/src/version.c.in" "${TD_COMMUNITY_DIR}/src/util/src/version.c")
|
|
@ -4,5 +4,5 @@ PROJECT(TDengine)
|
||||||
IF (TD_WINDOWS)
|
IF (TD_WINDOWS)
|
||||||
INCLUDE_DIRECTORIES(include)
|
INCLUDE_DIRECTORIES(include)
|
||||||
AUX_SOURCE_DIRECTORY(src SRC)
|
AUX_SOURCE_DIRECTORY(src SRC)
|
||||||
ADD_LIBRARY(MsvcLibXw64 ${SRC})
|
ADD_LIBRARY(MsvcLibXw ${SRC})
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
|
@ -36,11 +36,13 @@ ELSEIF (TD_WINDOWS)
|
||||||
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/jni/windows)
|
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/jni/windows)
|
||||||
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/jni/windows/win32)
|
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/jni/windows/win32)
|
||||||
|
|
||||||
|
CONFIGURE_FILE("${TD_COMMUNITY_DIR}/src/client/src/taos.rc.in" "${TD_COMMUNITY_DIR}/src/client/src/taos.rc")
|
||||||
|
|
||||||
ADD_LIBRARY(taos_static STATIC ${SRC})
|
ADD_LIBRARY(taos_static STATIC ${SRC})
|
||||||
TARGET_LINK_LIBRARIES(taos_static trpc tutil query)
|
TARGET_LINK_LIBRARIES(taos_static trpc tutil query)
|
||||||
|
|
||||||
# generate dynamic library (*.dll)
|
# generate dynamic library (*.dll)
|
||||||
ADD_LIBRARY(taos SHARED ${SRC})
|
ADD_LIBRARY(taos SHARED ${SRC} ${TD_COMMUNITY_DIR}/src/client/src/taos.rc)
|
||||||
IF (NOT TD_GODLL)
|
IF (NOT TD_GODLL)
|
||||||
SET_TARGET_PROPERTIES(taos PROPERTIES LINK_FLAGS /DEF:${TD_COMMUNITY_DIR}/src/client/src/taos.def)
|
SET_TARGET_PROPERTIES(taos PROPERTIES LINK_FLAGS /DEF:${TD_COMMUNITY_DIR}/src/client/src/taos.def)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
|
@ -108,7 +108,7 @@ int32_t tscCreateDataBlock(size_t initialSize, int32_t rowSize, int32_t startOff
|
||||||
void tscDestroyDataBlock(STableDataBlocks* pDataBlock);
|
void tscDestroyDataBlock(STableDataBlocks* pDataBlock);
|
||||||
void tscSortRemoveDataBlockDupRows(STableDataBlocks* dataBuf);
|
void tscSortRemoveDataBlockDupRows(STableDataBlocks* dataBuf);
|
||||||
|
|
||||||
SParamInfo* tscAddParamToDataBlock(STableDataBlocks* pDataBlock, char type, uint8_t timePrec, short bytes,
|
SParamInfo* tscAddParamToDataBlock(STableDataBlocks* pDataBlock, char type, uint8_t timePrec, int16_t bytes,
|
||||||
uint32_t offset);
|
uint32_t offset);
|
||||||
|
|
||||||
void* tscDestroyBlockArrayList(SArray* pDataBlockList);
|
void* tscDestroyBlockArrayList(SArray* pDataBlockList);
|
||||||
|
|
|
@ -234,7 +234,7 @@ typedef struct {
|
||||||
char * curSql; // current sql, resume position of sql after parsing paused
|
char * curSql; // current sql, resume position of sql after parsing paused
|
||||||
int8_t parseFinished;
|
int8_t parseFinished;
|
||||||
|
|
||||||
short numOfCols;
|
int16_t numOfCols;
|
||||||
uint32_t allocSize;
|
uint32_t allocSize;
|
||||||
char * payload;
|
char * payload;
|
||||||
int32_t payloadLen;
|
int32_t payloadLen;
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
1 VERSIONINFO
|
||||||
|
FILEVERSION ${TD_VER_1}, ${TD_VER_2}, ${TD_VER_3}
|
||||||
|
PRODUCTVERSION ${TD_VER_1}, ${TD_VER_2}, ${TD_VER_3}
|
||||||
|
FILEFLAGSMASK 0x17L
|
||||||
|
#ifdef _DEBUG
|
||||||
|
FILEFLAGS 0x1L
|
||||||
|
#else
|
||||||
|
FILEFLAGS 0x0L
|
||||||
|
#endif
|
||||||
|
FILEOS 0x4L
|
||||||
|
FILETYPE 0x0L
|
||||||
|
FILESUBTYPE 0x0L
|
||||||
|
BEGIN
|
||||||
|
BLOCK "StringFileInfo"
|
||||||
|
BEGIN
|
||||||
|
BLOCK "040904b0"
|
||||||
|
BEGIN
|
||||||
|
VALUE "FileDescription", "Native C Driver for TDengine"
|
||||||
|
VALUE "FileVersion", "${TD_VER_1}, ${TD_VER_2}, ${TD_VER_3}"
|
||||||
|
VALUE "InternalName", "taos.dll(${TD_VER_CPUTYPE})"
|
||||||
|
VALUE "LegalCopyright", "Copyright (C) 2020 TAOS Data"
|
||||||
|
VALUE "OriginalFilename", ""
|
||||||
|
VALUE "ProductName", "taos.dll(${TD_VER_CPUTYPE})"
|
||||||
|
VALUE "ProductVersion", "${TD_VER_1}.${TD_VER_2}.${TD_VER_3}.${TD_VER_4}"
|
||||||
|
END
|
||||||
|
END
|
||||||
|
BLOCK "VarFileInfo"
|
||||||
|
BEGIN
|
||||||
|
VALUE "Translation", 0x409, 1200
|
||||||
|
END
|
||||||
|
END
|
|
@ -201,7 +201,7 @@ TAOS *taos_connect_internal(const char *ip, const char *user, const char *pass,
|
||||||
}
|
}
|
||||||
|
|
||||||
TAOS *taos_connect(const char *ip, const char *user, const char *pass, const char *db, uint16_t port) {
|
TAOS *taos_connect(const char *ip, const char *user, const char *pass, const char *db, uint16_t port) {
|
||||||
tscDebug("try to create a connection to %s:%u, user:%s db:%s", ip, port, user, db);
|
tscDebug("try to create a connection to %s:%u, user:%s db:%s", ip, port != 0 ? port : tsServerPort , user, db);
|
||||||
if (user == NULL) user = TSDB_DEFAULT_USER;
|
if (user == NULL) user = TSDB_DEFAULT_USER;
|
||||||
if (pass == NULL) pass = TSDB_DEFAULT_PASS;
|
if (pass == NULL) pass = TSDB_DEFAULT_PASS;
|
||||||
|
|
||||||
|
|
|
@ -404,7 +404,7 @@ void tscDestroyDataBlock(STableDataBlocks* pDataBlock) {
|
||||||
taosTFree(pDataBlock);
|
taosTFree(pDataBlock);
|
||||||
}
|
}
|
||||||
|
|
||||||
SParamInfo* tscAddParamToDataBlock(STableDataBlocks* pDataBlock, char type, uint8_t timePrec, short bytes,
|
SParamInfo* tscAddParamToDataBlock(STableDataBlocks* pDataBlock, char type, uint8_t timePrec, int16_t bytes,
|
||||||
uint32_t offset) {
|
uint32_t offset) {
|
||||||
uint32_t needed = pDataBlock->numOfParams + 1;
|
uint32_t needed = pDataBlock->numOfParams + 1;
|
||||||
if (needed > pDataBlock->numOfAllocedParams) {
|
if (needed > pDataBlock->numOfAllocedParams) {
|
||||||
|
|
|
@ -93,7 +93,7 @@ DLL_EXPORT int taos_result_precision(TAOS_RES *res); // get the time precision
|
||||||
DLL_EXPORT void taos_free_result(TAOS_RES *res);
|
DLL_EXPORT void taos_free_result(TAOS_RES *res);
|
||||||
DLL_EXPORT int taos_field_count(TAOS_RES *tres);
|
DLL_EXPORT int taos_field_count(TAOS_RES *tres);
|
||||||
DLL_EXPORT int taos_num_fields(TAOS_RES *res);
|
DLL_EXPORT int taos_num_fields(TAOS_RES *res);
|
||||||
DLL_EXPORT int taos_affected_rows(TAOS_RES *taos);
|
DLL_EXPORT int taos_affected_rows(TAOS_RES *res);
|
||||||
DLL_EXPORT TAOS_FIELD *taos_fetch_fields(TAOS_RES *res);
|
DLL_EXPORT TAOS_FIELD *taos_fetch_fields(TAOS_RES *res);
|
||||||
DLL_EXPORT int taos_select_db(TAOS *taos, const char *db);
|
DLL_EXPORT int taos_select_db(TAOS *taos, const char *db);
|
||||||
DLL_EXPORT int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields);
|
DLL_EXPORT int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields);
|
||||||
|
|
|
@ -63,7 +63,7 @@ typedef struct tstr {
|
||||||
extern const int32_t TYPE_BYTES[11];
|
extern const int32_t TYPE_BYTES[11];
|
||||||
// TODO: replace and remove code below
|
// TODO: replace and remove code below
|
||||||
#define CHAR_BYTES sizeof(char)
|
#define CHAR_BYTES sizeof(char)
|
||||||
#define SHORT_BYTES sizeof(short)
|
#define SHORT_BYTES sizeof(int16_t)
|
||||||
#define INT_BYTES sizeof(int)
|
#define INT_BYTES sizeof(int)
|
||||||
#define LONG_BYTES sizeof(int64_t)
|
#define LONG_BYTES sizeof(int64_t)
|
||||||
#define FLOAT_BYTES sizeof(float)
|
#define FLOAT_BYTES sizeof(float)
|
||||||
|
|
|
@ -424,7 +424,10 @@ typedef struct SColumnInfo {
|
||||||
int16_t type;
|
int16_t type;
|
||||||
int16_t bytes;
|
int16_t bytes;
|
||||||
int16_t numOfFilters;
|
int16_t numOfFilters;
|
||||||
|
union{
|
||||||
|
int64_t placeholder;
|
||||||
SColumnFilterInfo *filters;
|
SColumnFilterInfo *filters;
|
||||||
|
};
|
||||||
} SColumnInfo;
|
} SColumnInfo;
|
||||||
|
|
||||||
typedef struct STableIdInfo {
|
typedef struct STableIdInfo {
|
||||||
|
|
|
@ -354,7 +354,7 @@ static int32_t mnodeCreateDb(SAcctObj *pAcct, SCMCreateDbMsg *pCreate, SMnodeMsg
|
||||||
mDebug("db:%s, already exist, ignore exist is set", pCreate->db);
|
mDebug("db:%s, already exist, ignore exist is set", pCreate->db);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
} else {
|
} else {
|
||||||
mError("db:%s, is already exist, ignore exist not set", pCreate->db);
|
mError("db:%s, already exist, ignore exist not set", pCreate->db);
|
||||||
return TSDB_CODE_MND_DB_ALREADY_EXIST;
|
return TSDB_CODE_MND_DB_ALREADY_EXIST;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -518,7 +518,7 @@ static int32_t mnodeCreateDnode(char *ep, SMnodeMsg *pMsg) {
|
||||||
SDnodeObj *pDnode = mnodeGetDnodeByEp(ep);
|
SDnodeObj *pDnode = mnodeGetDnodeByEp(ep);
|
||||||
if (pDnode != NULL) {
|
if (pDnode != NULL) {
|
||||||
mnodeDecDnodeRef(pDnode);
|
mnodeDecDnodeRef(pDnode);
|
||||||
mError("dnode:%d is already exist, %s:%d", pDnode->dnodeId, pDnode->dnodeFqdn, pDnode->dnodePort);
|
mError("dnode:%d, already exist, %s:%d", pDnode->dnodeId, pDnode->dnodeFqdn, pDnode->dnodePort);
|
||||||
return TSDB_CODE_MND_DNODE_ALREADY_EXIST;
|
return TSDB_CODE_MND_DNODE_ALREADY_EXIST;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,4 +4,4 @@ PROJECT(TDengine)
|
||||||
AUX_SOURCE_DIRECTORY(. SRC)
|
AUX_SOURCE_DIRECTORY(. SRC)
|
||||||
ADD_LIBRARY(os ${SRC})
|
ADD_LIBRARY(os ${SRC})
|
||||||
|
|
||||||
TARGET_LINK_LIBRARIES(os winmm IPHLPAPI ws2_32 MsvcLibXw64)
|
TARGET_LINK_LIBRARIES(os winmm IPHLPAPI ws2_32 MsvcLibXw)
|
||||||
|
|
|
@ -26,7 +26,7 @@ typedef void* tthread_h;
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int numOfThreads;
|
int numOfThreads;
|
||||||
uint32_t serverIp;
|
uint32_t serverIp;
|
||||||
short port;
|
int16_t port;
|
||||||
int bufferSize;
|
int bufferSize;
|
||||||
void (*processBrokenLink)(void *ahandle);
|
void (*processBrokenLink)(void *ahandle);
|
||||||
int (*processIncomingMsg)(void *ahandle, void *buffer);
|
int (*processIncomingMsg)(void *ahandle, void *buffer);
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
char version[12] = "2.0.2.1";
|
|
||||||
char compatible_version[12] = "2.0.0.0";
|
|
||||||
char gitinfo[48] = "1527828603722a0ed8ea706439e8c172a13b7eb1";
|
|
||||||
char gitinfoOfInternal[48] = "490a983428d02b00d06b2a067b3f6e74f4b8d1a8";
|
|
||||||
char buildinfo[64] = "Built by root at 2020-08-26 12:00";
|
|
||||||
|
|
||||||
void libtaos_2_0_2_1_Linux_x64() {};
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
char version[12] = "${TD_VER_1}.${TD_VER_2}.${TD_VER_3}.${TD_VER_4}";
|
||||||
|
char compatible_version[12] = "${TD_VER_COMPATIBLE}";
|
||||||
|
char gitinfo[48] = "${TD_VER_GIT}";
|
||||||
|
char gitinfoOfInternal[48] = "${TD_VER_GIT_INTERNAL}";
|
||||||
|
char buildinfo[64] = "Built at ${TD_VER_DATE}";
|
||||||
|
|
||||||
|
void libtaos_${TD_VER_1}_${TD_VER_2}_${TD_VER_3}_${TD_VER_4}_${TD_VER_OSTYPE}_${TD_VER_CPUTYPE}_${TD_VER_VERTYPE}() {};
|
|
@ -549,7 +549,7 @@ static int vnodeGetWalInfo(void *ahandle, char *name, uint32_t *index) {
|
||||||
|
|
||||||
static void vnodeNotifyRole(void *ahandle, int8_t role) {
|
static void vnodeNotifyRole(void *ahandle, int8_t role) {
|
||||||
SVnodeObj *pVnode = ahandle;
|
SVnodeObj *pVnode = ahandle;
|
||||||
vInfo("vgId:%d, sync role changed from %d to %d", pVnode->vgId, pVnode->role, role);
|
vInfo("vgId:%d, sync role changed from %s to %s", pVnode->vgId, syncRole[pVnode->role], syncRole[role]);
|
||||||
pVnode->role = role;
|
pVnode->role = role;
|
||||||
dnodeSendStatusMsgToMnode();
|
dnodeSendStatusMsgToMnode();
|
||||||
|
|
||||||
|
|
|
@ -20,16 +20,17 @@ using System.Runtime.InteropServices;
|
||||||
namespace TDengineDriver
|
namespace TDengineDriver
|
||||||
{
|
{
|
||||||
enum TDengineDataType {
|
enum TDengineDataType {
|
||||||
TSDB_DATA_TYPE_BOOL = 1,
|
TSDB_DATA_TYPE_NULL = 0, // 1 bytes
|
||||||
TSDB_DATA_TYPE_TINYINT = 2,
|
TSDB_DATA_TYPE_BOOL = 1, // 1 bytes
|
||||||
TSDB_DATA_TYPE_SMALLINT = 3,
|
TSDB_DATA_TYPE_TINYINT = 2, // 1 bytes
|
||||||
TSDB_DATA_TYPE_INT = 4,
|
TSDB_DATA_TYPE_SMALLINT = 3, // 2 bytes
|
||||||
TSDB_DATA_TYPE_BIGINT = 5,
|
TSDB_DATA_TYPE_INT = 4, // 4 bytes
|
||||||
TSDB_DATA_TYPE_FLOAT = 6,
|
TSDB_DATA_TYPE_BIGINT = 5, // 8 bytes
|
||||||
TSDB_DATA_TYPE_DOUBLE = 7,
|
TSDB_DATA_TYPE_FLOAT = 6, // 4 bytes
|
||||||
TSDB_DATA_TYPE_BINARY = 8,
|
TSDB_DATA_TYPE_DOUBLE = 7, // 8 bytes
|
||||||
TSDB_DATA_TYPE_TIMESTAMP = 9,
|
TSDB_DATA_TYPE_BINARY = 8, // string
|
||||||
TSDB_DATA_TYPE_NCHAR = 10
|
TSDB_DATA_TYPE_TIMESTAMP = 9,// 8 bytes
|
||||||
|
TSDB_DATA_TYPE_NCHAR = 10 // unicode string
|
||||||
}
|
}
|
||||||
|
|
||||||
enum TDengineInitOption
|
enum TDengineInitOption
|
||||||
|
@ -80,53 +81,52 @@ namespace TDengineDriver
|
||||||
{
|
{
|
||||||
public const int TSDB_CODE_SUCCESS = 0;
|
public const int TSDB_CODE_SUCCESS = 0;
|
||||||
|
|
||||||
[DllImport("taos.dll", EntryPoint = "taos_init", CallingConvention = CallingConvention.StdCall)]
|
[DllImport("taos.dll", EntryPoint = "taos_init", CallingConvention = CallingConvention.Cdecl)]
|
||||||
static extern public void Init();
|
static extern public void Init();
|
||||||
|
|
||||||
[DllImport("taos.dll", EntryPoint = "taos_options", CallingConvention = CallingConvention.StdCall)]
|
[DllImport("taos.dll", EntryPoint = "taos_cleanup", CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
static extern public void Cleanup();
|
||||||
|
|
||||||
|
[DllImport("taos.dll", EntryPoint = "taos_options", CallingConvention = CallingConvention.Cdecl)]
|
||||||
static extern public void Options(int option, string value);
|
static extern public void Options(int option, string value);
|
||||||
|
|
||||||
[DllImport("taos.dll", EntryPoint = "taos_connect", CallingConvention = CallingConvention.StdCall)]
|
[DllImport("taos.dll", EntryPoint = "taos_connect", CallingConvention = CallingConvention.Cdecl)]
|
||||||
static extern public long Connect(string ip, string user, string password, string db, int port);
|
static extern public IntPtr Connect(string ip, string user, string password, string db, short port);
|
||||||
|
|
||||||
[DllImport("taos.dll", EntryPoint = "taos_errstr", CallingConvention = CallingConvention.StdCall)]
|
[DllImport("taos.dll", EntryPoint = "taos_errstr", CallingConvention = CallingConvention.Cdecl)]
|
||||||
static extern private IntPtr taos_errstr(long taos);
|
static extern private IntPtr taos_errstr(IntPtr res);
|
||||||
static public string Error(long conn)
|
static public string Error(IntPtr res)
|
||||||
{
|
{
|
||||||
IntPtr errPtr = taos_errstr(conn);
|
IntPtr errPtr = taos_errstr(res);
|
||||||
return Marshal.PtrToStringAnsi(errPtr);
|
return Marshal.PtrToStringAnsi(errPtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
[DllImport("taos.dll", EntryPoint = "taos_errno", CallingConvention = CallingConvention.StdCall)]
|
[DllImport("taos.dll", EntryPoint = "taos_errno", CallingConvention = CallingConvention.Cdecl)]
|
||||||
static extern public int ErrorNo(long taos);
|
static extern public int ErrorNo(IntPtr res);
|
||||||
|
|
||||||
[DllImport("taos.dll", EntryPoint = "taos_query", CallingConvention = CallingConvention.StdCall)]
|
[DllImport("taos.dll", EntryPoint = "taos_query", CallingConvention = CallingConvention.Cdecl)]
|
||||||
static extern public int Query(long taos, string sqlstr);
|
static extern public IntPtr Query(IntPtr conn, string sqlstr);
|
||||||
|
|
||||||
[DllImport("taos.dll", EntryPoint = "taos_affected_rows", CallingConvention = CallingConvention.StdCall)]
|
[DllImport("taos.dll", EntryPoint = "taos_affected_rows", CallingConvention = CallingConvention.Cdecl)]
|
||||||
static extern public int AffectRows(long taos);
|
static extern public int AffectRows(IntPtr res);
|
||||||
|
|
||||||
[DllImport("taos.dll", EntryPoint = "taos_use_result", CallingConvention = CallingConvention.StdCall)]
|
[DllImport("taos.dll", EntryPoint = "taos_field_count", CallingConvention = CallingConvention.Cdecl)]
|
||||||
static extern public long UseResult(long taos);
|
static extern public int FieldCount(IntPtr res);
|
||||||
|
|
||||||
[DllImport("taos.dll", EntryPoint = "taos_field_count", CallingConvention = CallingConvention.StdCall)]
|
[DllImport("taos.dll", EntryPoint = "taos_fetch_fields", CallingConvention = CallingConvention.Cdecl)]
|
||||||
static extern public int FieldCount(long taos);
|
static extern private IntPtr taos_fetch_fields(IntPtr res);
|
||||||
|
static public List<TDengineMeta> FetchFields(IntPtr res)
|
||||||
[DllImport("taos.dll", EntryPoint = "taos_fetch_fields", CallingConvention = CallingConvention.StdCall)]
|
|
||||||
static extern private IntPtr taos_fetch_fields(long res);
|
|
||||||
static public List<TDengineMeta> FetchFields(long taos)
|
|
||||||
{
|
{
|
||||||
const int fieldSize = 68;
|
const int fieldSize = 68;
|
||||||
|
|
||||||
List<TDengineMeta> metas = new List<TDengineMeta>();
|
List<TDengineMeta> metas = new List<TDengineMeta>();
|
||||||
long result = TDengine.UseResult(taos);
|
if (res == IntPtr.Zero)
|
||||||
if (result == 0)
|
|
||||||
{
|
{
|
||||||
return metas;
|
return metas;
|
||||||
}
|
}
|
||||||
|
|
||||||
int fieldCount = FieldCount(taos);
|
int fieldCount = FieldCount(res);
|
||||||
IntPtr fieldsPtr = taos_fetch_fields(result);
|
IntPtr fieldsPtr = taos_fetch_fields(res);
|
||||||
|
|
||||||
for (int i = 0; i < fieldCount; ++i)
|
for (int i = 0; i < fieldCount; ++i)
|
||||||
{
|
{
|
||||||
|
@ -134,21 +134,21 @@ namespace TDengineDriver
|
||||||
|
|
||||||
TDengineMeta meta = new TDengineMeta();
|
TDengineMeta meta = new TDengineMeta();
|
||||||
meta.name = Marshal.PtrToStringAnsi(fieldsPtr + offset);
|
meta.name = Marshal.PtrToStringAnsi(fieldsPtr + offset);
|
||||||
meta.size = Marshal.ReadInt16(fieldsPtr + offset + 64);
|
meta.type = Marshal.ReadByte(fieldsPtr + offset + 65);
|
||||||
meta.type = Marshal.ReadByte(fieldsPtr + offset + 66);
|
meta.size = Marshal.ReadInt16(fieldsPtr + offset + 66);
|
||||||
metas.Add(meta);
|
metas.Add(meta);
|
||||||
}
|
}
|
||||||
|
|
||||||
return metas;
|
return metas;
|
||||||
}
|
}
|
||||||
|
|
||||||
[DllImport("taos.dll", EntryPoint = "taos_fetch_row", CallingConvention = CallingConvention.StdCall)]
|
[DllImport("taos.dll", EntryPoint = "taos_fetch_row", CallingConvention = CallingConvention.Cdecl)]
|
||||||
static extern public IntPtr FetchRows(long res);
|
static extern public IntPtr FetchRows(IntPtr res);
|
||||||
|
|
||||||
[DllImport("taos.dll", EntryPoint = "taos_free_result", CallingConvention = CallingConvention.StdCall)]
|
[DllImport("taos.dll", EntryPoint = "taos_free_result", CallingConvention = CallingConvention.Cdecl)]
|
||||||
static extern public IntPtr FreeResult(long res);
|
static extern public IntPtr FreeResult(IntPtr res);
|
||||||
|
|
||||||
[DllImport("taos.dll", EntryPoint = "taos_close", CallingConvention = CallingConvention.StdCall)]
|
[DllImport("taos.dll", EntryPoint = "taos_close", CallingConvention = CallingConvention.Cdecl)]
|
||||||
static extern public int Close(long taos);
|
static extern public int Close(IntPtr taos);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -28,7 +28,7 @@ namespace TDengineDriver
|
||||||
private string configDir;
|
private string configDir;
|
||||||
private string user;
|
private string user;
|
||||||
private string password;
|
private string password;
|
||||||
private int port = 0;
|
private short port = 0;
|
||||||
|
|
||||||
//sql parameters
|
//sql parameters
|
||||||
private string dbName;
|
private string dbName;
|
||||||
|
@ -43,7 +43,7 @@ namespace TDengineDriver
|
||||||
private long batchRows;
|
private long batchRows;
|
||||||
private long beginTimestamp = 1551369600000L;
|
private long beginTimestamp = 1551369600000L;
|
||||||
|
|
||||||
private long conn = 0;
|
private IntPtr conn = IntPtr.Zero;
|
||||||
private long rowsInserted = 0;
|
private long rowsInserted = 0;
|
||||||
|
|
||||||
static void Main(string[] args)
|
static void Main(string[] args)
|
||||||
|
@ -191,7 +191,7 @@ namespace TDengineDriver
|
||||||
{
|
{
|
||||||
string db = "";
|
string db = "";
|
||||||
this.conn = TDengine.Connect(this.host, this.user, this.password, db, this.port);
|
this.conn = TDengine.Connect(this.host, this.user, this.password, db, this.port);
|
||||||
if (this.conn == 0)
|
if (this.conn == IntPtr.Zero)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Connect to TDengine failed");
|
Console.WriteLine("Connect to TDengine failed");
|
||||||
ExitProgram();
|
ExitProgram();
|
||||||
|
@ -211,58 +211,62 @@ namespace TDengineDriver
|
||||||
|
|
||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.Append("create database if not exists ").Append(this.dbName);
|
sql.Append("create database if not exists ").Append(this.dbName);
|
||||||
int code = TDengine.Query(this.conn, sql.ToString());
|
IntPtr res = TDengine.Query(this.conn, sql.ToString());
|
||||||
if (code == TDengine.TSDB_CODE_SUCCESS)
|
if (res != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
Console.WriteLine(sql.ToString() + " success");
|
Console.WriteLine(sql.ToString() + " success");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Console.WriteLine(sql.ToString() + " failure, reason: " + TDengine.Error(conn));
|
Console.WriteLine(sql.ToString() + " failure, reason: " + TDengine.Error(res));
|
||||||
ExitProgram();
|
ExitProgram();
|
||||||
}
|
}
|
||||||
|
TDengine.FreeResult(res);
|
||||||
|
|
||||||
sql.Clear();
|
sql.Clear();
|
||||||
sql.Append("use ").Append(this.dbName);
|
sql.Append("use ").Append(this.dbName);
|
||||||
code = TDengine.Query(this.conn, sql.ToString());
|
res = TDengine.Query(this.conn, sql.ToString());
|
||||||
if (code == TDengine.TSDB_CODE_SUCCESS)
|
if (res != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
Console.WriteLine(sql.ToString() + " success");
|
Console.WriteLine(sql.ToString() + " success");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Console.WriteLine(sql.ToString() + " failure, reason: " + TDengine.Error(this.conn));
|
Console.WriteLine(sql.ToString() + " failure, reason: " + TDengine.Error(res));
|
||||||
ExitProgram();
|
ExitProgram();
|
||||||
}
|
}
|
||||||
|
TDengine.FreeResult(res);
|
||||||
|
|
||||||
sql.Clear();
|
sql.Clear();
|
||||||
sql.Append("create table if not exists ").Append(this.stableName).Append("(ts timestamp, v1 int) tags(t1 int)");
|
sql.Append("create table if not exists ").Append(this.stableName).Append("(ts timestamp, v1 bool, v2 tinyint, v3 smallint, v4 int, v5 bigint, v6 float, v7 double, v8 binary(10), v9 nchar(10)) tags(t1 int)");
|
||||||
code = TDengine.Query(this.conn, sql.ToString());
|
res = TDengine.Query(this.conn, sql.ToString());
|
||||||
if (code == TDengine.TSDB_CODE_SUCCESS)
|
if (res != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
Console.WriteLine(sql.ToString() + " success");
|
Console.WriteLine(sql.ToString() + " success");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Console.WriteLine(sql.ToString() + " failure, reason: " + TDengine.Error(this.conn));
|
Console.WriteLine(sql.ToString() + " failure, reason: " + TDengine.Error(res));
|
||||||
ExitProgram();
|
ExitProgram();
|
||||||
}
|
}
|
||||||
|
TDengine.FreeResult(res);
|
||||||
|
|
||||||
for (int i = 0; i < this.tableCount; i++)
|
for (int i = 0; i < this.tableCount; i++)
|
||||||
{
|
{
|
||||||
sql.Clear();
|
sql.Clear();
|
||||||
sql = sql.Append("create table if not exists ").Append(this.tablePrefix).Append(i)
|
sql = sql.Append("create table if not exists ").Append(this.tablePrefix).Append(i)
|
||||||
.Append(" using ").Append(this.stableName).Append(" tags(").Append(i).Append(")");
|
.Append(" using ").Append(this.stableName).Append(" tags(").Append(i).Append(")");
|
||||||
code = TDengine.Query(this.conn, sql.ToString());
|
res = TDengine.Query(this.conn, sql.ToString());
|
||||||
if (code == TDengine.TSDB_CODE_SUCCESS)
|
if (res != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
Console.WriteLine(sql.ToString() + " success");
|
Console.WriteLine(sql.ToString() + " success");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Console.WriteLine(sql.ToString() + " failure, reason: " + TDengine.Error(this.conn));
|
Console.WriteLine(sql.ToString() + " failure, reason: " + TDengine.Error(res));
|
||||||
ExitProgram();
|
ExitProgram();
|
||||||
}
|
}
|
||||||
|
TDengine.FreeResult(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine("create db and table success");
|
Console.WriteLine("create db and table success");
|
||||||
|
@ -287,16 +291,22 @@ namespace TDengineDriver
|
||||||
for (int batch = 0; batch < this.batchRows; ++batch)
|
for (int batch = 0; batch < this.batchRows; ++batch)
|
||||||
{
|
{
|
||||||
long rows = loop * this.batchRows + batch;
|
long rows = loop * this.batchRows + batch;
|
||||||
sql.Append("(").Append(this.beginTimestamp + rows).Append(",").Append(rows).Append(")");
|
sql.Append("(")
|
||||||
|
.Append(this.beginTimestamp + rows)
|
||||||
|
.Append(", 1, 2, 3,")
|
||||||
|
.Append(rows)
|
||||||
|
.Append(", 5, 6, 7, 'abc', 'def')");
|
||||||
}
|
}
|
||||||
int code = TDengine.Query(conn, sql.ToString());
|
IntPtr res = TDengine.Query(this.conn, sql.ToString());
|
||||||
if (code != TDengine.TSDB_CODE_SUCCESS)
|
if (res == IntPtr.Zero)
|
||||||
{
|
{
|
||||||
Console.WriteLine(sql.ToString() + " failure, reason: " + TDengine.Error(conn));
|
Console.WriteLine(sql.ToString() + " failure, reason: " + TDengine.Error(res));
|
||||||
}
|
}
|
||||||
|
|
||||||
int affectRows = TDengine.AffectRows(conn);
|
int affectRows = TDengine.AffectRows(res);
|
||||||
this.rowsInserted += affectRows;
|
this.rowsInserted += affectRows;
|
||||||
|
|
||||||
|
TDengine.FreeResult(res);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -317,50 +327,44 @@ namespace TDengineDriver
|
||||||
System.DateTime start = new System.DateTime();
|
System.DateTime start = new System.DateTime();
|
||||||
long queryRows = 0;
|
long queryRows = 0;
|
||||||
|
|
||||||
for (int i = 0; i < this.tableCount; ++i)
|
for (int i = 0; i < 1/*this.tableCount*/; ++i)
|
||||||
{
|
{
|
||||||
String sql = "select * from " + this.dbName + "." + tablePrefix + i;
|
String sql = "select * from " + this.dbName + "." + tablePrefix + i;
|
||||||
Console.WriteLine(sql);
|
Console.WriteLine(sql);
|
||||||
|
|
||||||
int code = TDengine.Query(conn, sql);
|
IntPtr res = TDengine.Query(conn, sql);
|
||||||
if (code != TDengine.TSDB_CODE_SUCCESS)
|
if (res == IntPtr.Zero)
|
||||||
{
|
{
|
||||||
Console.WriteLine(sql + " failure, reason: " + TDengine.Error(conn));
|
Console.WriteLine(sql + " failure, reason: " + TDengine.Error(res));
|
||||||
ExitProgram();
|
ExitProgram();
|
||||||
}
|
}
|
||||||
|
|
||||||
int fieldCount = TDengine.FieldCount(conn);
|
int fieldCount = TDengine.FieldCount(res);
|
||||||
//Console.WriteLine("field count: " + fieldCount);
|
Console.WriteLine("field count: " + fieldCount);
|
||||||
|
|
||||||
List<TDengineMeta> metas = TDengine.FetchFields(conn);
|
List<TDengineMeta> metas = TDengine.FetchFields(res);
|
||||||
for (int j = 0; j < metas.Count; j++)
|
for (int j = 0; j < metas.Count; j++)
|
||||||
{
|
{
|
||||||
TDengineMeta meta = (TDengineMeta)metas[j];
|
TDengineMeta meta = (TDengineMeta)metas[j];
|
||||||
//Console.WriteLine("index:" + j + ", type:" + meta.type + ", typename:" + meta.TypeName() + ", name:" + meta.name + ", size:" + meta.size);
|
Console.WriteLine("index:" + j + ", type:" + meta.type + ", typename:" + meta.TypeName() + ", name:" + meta.name + ", size:" + meta.size);
|
||||||
}
|
|
||||||
|
|
||||||
long result = TDengine.UseResult(conn);
|
|
||||||
if (result == 0)
|
|
||||||
{
|
|
||||||
Console.WriteLine(sql + " result set is null");
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
IntPtr rowdata;
|
IntPtr rowdata;
|
||||||
while ((rowdata = TDengine.FetchRows(result)) != IntPtr.Zero)
|
StringBuilder builder = new StringBuilder();
|
||||||
|
while ((rowdata = TDengine.FetchRows(res)) != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
queryRows++;
|
queryRows++;
|
||||||
for (int fields = 0; fields < fieldCount; ++fields)
|
for (int fields = 0; fields < fieldCount; ++fields)
|
||||||
{
|
{
|
||||||
TDengineMeta meta = metas[fields];
|
TDengineMeta meta = metas[fields];
|
||||||
int offset = 8 * fields;
|
int offset = IntPtr.Size * fields;
|
||||||
IntPtr data = Marshal.ReadIntPtr(rowdata, offset);
|
IntPtr data = Marshal.ReadIntPtr(rowdata, offset);
|
||||||
|
|
||||||
//Console.Write("---");
|
builder.Append("---");
|
||||||
|
|
||||||
if (data == IntPtr.Zero)
|
if (data == IntPtr.Zero)
|
||||||
{
|
{
|
||||||
//Console.Write("NULL");
|
builder.Append("NULL");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -368,55 +372,61 @@ namespace TDengineDriver
|
||||||
{
|
{
|
||||||
case TDengineDataType.TSDB_DATA_TYPE_BOOL:
|
case TDengineDataType.TSDB_DATA_TYPE_BOOL:
|
||||||
bool v1 = Marshal.ReadByte(data) == 0 ? false : true;
|
bool v1 = Marshal.ReadByte(data) == 0 ? false : true;
|
||||||
//Console.Write(v1);
|
builder.Append(v1);
|
||||||
break;
|
break;
|
||||||
case TDengineDataType.TSDB_DATA_TYPE_TINYINT:
|
case TDengineDataType.TSDB_DATA_TYPE_TINYINT:
|
||||||
byte v2 = Marshal.ReadByte(data);
|
byte v2 = Marshal.ReadByte(data);
|
||||||
//Console.Write(v2);
|
builder.Append(v2);
|
||||||
break;
|
break;
|
||||||
case TDengineDataType.TSDB_DATA_TYPE_SMALLINT:
|
case TDengineDataType.TSDB_DATA_TYPE_SMALLINT:
|
||||||
short v3 = Marshal.ReadInt16(data);
|
short v3 = Marshal.ReadInt16(data);
|
||||||
//Console.Write(v3);
|
builder.Append(v3);
|
||||||
break;
|
break;
|
||||||
case TDengineDataType.TSDB_DATA_TYPE_INT:
|
case TDengineDataType.TSDB_DATA_TYPE_INT:
|
||||||
int v4 = Marshal.ReadInt32(data);
|
int v4 = Marshal.ReadInt32(data);
|
||||||
//Console.Write(v4);
|
builder.Append(v4);
|
||||||
break;
|
break;
|
||||||
case TDengineDataType.TSDB_DATA_TYPE_BIGINT:
|
case TDengineDataType.TSDB_DATA_TYPE_BIGINT:
|
||||||
long v5 = Marshal.ReadInt64(data);
|
long v5 = Marshal.ReadInt64(data);
|
||||||
//Console.Write(v5);
|
builder.Append(v5);
|
||||||
break;
|
break;
|
||||||
case TDengineDataType.TSDB_DATA_TYPE_FLOAT:
|
case TDengineDataType.TSDB_DATA_TYPE_FLOAT:
|
||||||
float v6 = (float)Marshal.PtrToStructure(data, typeof(float));
|
float v6 = (float)Marshal.PtrToStructure(data, typeof(float));
|
||||||
//Console.Write(v6);
|
builder.Append(v6);
|
||||||
break;
|
break;
|
||||||
case TDengineDataType.TSDB_DATA_TYPE_DOUBLE:
|
case TDengineDataType.TSDB_DATA_TYPE_DOUBLE:
|
||||||
double v7 = (double)Marshal.PtrToStructure(data, typeof(double));
|
double v7 = (double)Marshal.PtrToStructure(data, typeof(double));
|
||||||
//Console.Write(v7);
|
builder.Append(v7);
|
||||||
break;
|
break;
|
||||||
case TDengineDataType.TSDB_DATA_TYPE_BINARY:
|
case TDengineDataType.TSDB_DATA_TYPE_BINARY:
|
||||||
string v8 = Marshal.PtrToStringAnsi(data);
|
string v8 = Marshal.PtrToStringAnsi(data);
|
||||||
//Console.Write(v8);
|
builder.Append(v8);
|
||||||
break;
|
break;
|
||||||
case TDengineDataType.TSDB_DATA_TYPE_TIMESTAMP:
|
case TDengineDataType.TSDB_DATA_TYPE_TIMESTAMP:
|
||||||
long v9 = Marshal.ReadInt64(data);
|
long v9 = Marshal.ReadInt64(data);
|
||||||
//Console.Write(v9);
|
builder.Append(v9);
|
||||||
break;
|
break;
|
||||||
case TDengineDataType.TSDB_DATA_TYPE_NCHAR:
|
case TDengineDataType.TSDB_DATA_TYPE_NCHAR:
|
||||||
string v10 = Marshal.PtrToStringAnsi(data);
|
string v10 = Marshal.PtrToStringAnsi(data);
|
||||||
//Console.Write(v10);
|
builder.Append(v10);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//Console.WriteLine("---");
|
builder.Append("---");
|
||||||
}
|
|
||||||
|
|
||||||
if (TDengine.ErrorNo(conn) != 0)
|
if (queryRows <= 10)
|
||||||
{
|
{
|
||||||
Console.Write("Query is not complete, Error {0:G}", TDengine.ErrorNo(conn), TDengine.Error(conn));
|
Console.WriteLine(builder.ToString());
|
||||||
|
}
|
||||||
|
builder.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
TDengine.FreeResult(result);
|
if (TDengine.ErrorNo(res) != 0)
|
||||||
|
{
|
||||||
|
Console.Write("Query is not complete, Error {0:G}", TDengine.ErrorNo(res), TDengine.Error(res));
|
||||||
|
}
|
||||||
|
|
||||||
|
TDengine.FreeResult(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
System.DateTime end = new System.DateTime();
|
System.DateTime end = new System.DateTime();
|
||||||
|
@ -428,14 +438,15 @@ namespace TDengineDriver
|
||||||
|
|
||||||
public void CloseConnection()
|
public void CloseConnection()
|
||||||
{
|
{
|
||||||
if (conn != 0)
|
if (this.conn != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
TDengine.Close(conn);
|
TDengine.Close(this.conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ExitProgram()
|
static void ExitProgram()
|
||||||
{
|
{
|
||||||
|
TDengine.Cleanup();
|
||||||
System.Environment.Exit(0);
|
System.Environment.Exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,8 +96,8 @@ enum {
|
||||||
|
|
||||||
struct _script_t;
|
struct _script_t;
|
||||||
typedef struct _cmd_t {
|
typedef struct _cmd_t {
|
||||||
short cmdno;
|
int16_t cmdno;
|
||||||
short nlen;
|
int16_t nlen;
|
||||||
char name[MAX_SIM_CMD_NAME_LEN];
|
char name[MAX_SIM_CMD_NAME_LEN];
|
||||||
bool (*parseCmd)(char *, struct _cmd_t *, int);
|
bool (*parseCmd)(char *, struct _cmd_t *, int);
|
||||||
bool (*executeCmd)(struct _script_t *script, char *option);
|
bool (*executeCmd)(struct _script_t *script, char *option);
|
||||||
|
@ -105,11 +105,11 @@ typedef struct _cmd_t {
|
||||||
} SCommand;
|
} SCommand;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
short cmdno;
|
int16_t cmdno;
|
||||||
short jump; // jump position
|
int16_t jump; // jump position
|
||||||
short errorJump; // sql jump flag, while '-x' exist in sql cmd, this flag
|
int16_t errorJump; // sql jump flag, while '-x' exist in sql cmd, this flag
|
||||||
// will be SQL_JUMP_TRUE, otherwise is SQL_JUMP_FALSE */
|
// will be SQL_JUMP_TRUE, otherwise is SQL_JUMP_FALSE */
|
||||||
short lineNum; // correspodning line number in original file
|
int16_t lineNum; // correspodning line number in original file
|
||||||
int optionOffset; // relative option offset
|
int optionOffset; // relative option offset
|
||||||
} SCmdLine;
|
} SCmdLine;
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ enum {
|
||||||
/* label stack */
|
/* label stack */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char top; /* number of labels */
|
char top; /* number of labels */
|
||||||
short pos[MAX_NUM_LABLES]; /* the position of the label */
|
int16_t pos[MAX_NUM_LABLES]; /* the position of the label */
|
||||||
char label[MAX_NUM_LABLES][MAX_LABEL_LEN]; /* name of the label */
|
char label[MAX_NUM_LABLES][MAX_LABEL_LEN]; /* name of the label */
|
||||||
} SLabel;
|
} SLabel;
|
||||||
|
|
||||||
|
@ -42,10 +42,10 @@ typedef struct {
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char top; /* the number of blocks stacked */
|
char top; /* the number of blocks stacked */
|
||||||
char type[MAX_NUM_BLOCK]; /* the block type */
|
char type[MAX_NUM_BLOCK]; /* the block type */
|
||||||
short *pos[MAX_NUM_BLOCK]; /* position of the jump for if/elif/case */
|
int16_t *pos[MAX_NUM_BLOCK]; /* position of the jump for if/elif/case */
|
||||||
short back[MAX_NUM_BLOCK]; /* go back, endw and continue */
|
int16_t back[MAX_NUM_BLOCK]; /* go back, endw and continue */
|
||||||
char numJump[MAX_NUM_BLOCK];
|
char numJump[MAX_NUM_BLOCK];
|
||||||
short *jump[MAX_NUM_BLOCK][MAX_NUM_JUMP]; /* break or elif */
|
int16_t *jump[MAX_NUM_BLOCK][MAX_NUM_JUMP]; /* break or elif */
|
||||||
char sexp[MAX_NUM_BLOCK][40]; /*switch expression */
|
char sexp[MAX_NUM_BLOCK][40]; /*switch expression */
|
||||||
char sexpLen[MAX_NUM_BLOCK]; /*switch expression length */
|
char sexpLen[MAX_NUM_BLOCK]; /*switch expression length */
|
||||||
} SBlock;
|
} SBlock;
|
||||||
|
|
Loading…
Reference in New Issue