Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
10952778
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
10952778
编写于
1月 03, 2022
作者:
X
Xiaoyu Wang
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/feature/qnode' into feature/3.0_wxy
上级
a77a9c1f
c1bbea8c
变更
36
显示空白变更内容
内联
并排
Showing
36 changed file
with
2154 addition
and
1671 deletion
+2154
-1671
include/common/tmsg.h
include/common/tmsg.h
+3
-42
include/libs/planner/planner.h
include/libs/planner/planner.h
+5
-4
include/util/encode.h
include/util/encode.h
+246
-317
source/client/CMakeLists.txt
source/client/CMakeLists.txt
+3
-1
source/client/src/clientMain.c
source/client/src/clientMain.c
+6
-2
source/client/test/clientTests.cpp
source/client/test/clientTests.cpp
+3
-3
source/common/CMakeLists.txt
source/common/CMakeLists.txt
+3
-1
source/common/src/tmsg.c
source/common/src/tmsg.c
+0
-131
source/libs/catalog/CMakeLists.txt
source/libs/catalog/CMakeLists.txt
+3
-1
source/libs/index/inc/index_fst_counting_writer.h
source/libs/index/inc/index_fst_counting_writer.h
+1
-0
source/libs/index/src/index.c
source/libs/index/src/index.c
+7
-4
source/libs/index/src/index_cache.c
source/libs/index/src/index_cache.c
+1
-1
source/libs/index/src/index_fst_counting_writer.c
source/libs/index/src/index_fst_counting_writer.c
+9
-0
source/libs/index/src/index_tfile.c
source/libs/index/src/index_tfile.c
+54
-39
source/libs/index/test/indexTests.cc
source/libs/index/test/indexTests.cc
+24
-9
source/libs/parser/CMakeLists.txt
source/libs/parser/CMakeLists.txt
+3
-1
source/libs/parser/inc/sql.y
source/libs/parser/inc/sql.y
+1
-1
source/libs/parser/src/astGenerator.c
source/libs/parser/src/astGenerator.c
+1
-1
source/libs/parser/src/dCDAstProcess.c
source/libs/parser/src/dCDAstProcess.c
+2
-8
source/libs/parser/src/sql.c
source/libs/parser/src/sql.c
+1014
-1019
source/libs/planner/CMakeLists.txt
source/libs/planner/CMakeLists.txt
+3
-1
source/libs/planner/inc/plannerInt.h
source/libs/planner/inc/plannerInt.h
+6
-1
source/libs/planner/src/logicPlan.c
source/libs/planner/src/logicPlan.c
+14
-4
source/libs/planner/src/physicalPlan.c
source/libs/planner/src/physicalPlan.c
+26
-14
source/libs/planner/src/physicalPlanJson.c
source/libs/planner/src/physicalPlanJson.c
+3
-2
source/libs/planner/src/planner.c
source/libs/planner/src/planner.c
+4
-1
source/libs/qcom/CMakeLists.txt
source/libs/qcom/CMakeLists.txt
+5
-3
source/libs/qworker/CMakeLists.txt
source/libs/qworker/CMakeLists.txt
+3
-1
source/libs/scheduler/CMakeLists.txt
source/libs/scheduler/CMakeLists.txt
+3
-1
source/libs/scheduler/inc/schedulerInt.h
source/libs/scheduler/inc/schedulerInt.h
+13
-11
source/libs/scheduler/src/scheduler.c
source/libs/scheduler/src/scheduler.c
+93
-30
source/libs/scheduler/test/schedulerTests.cpp
source/libs/scheduler/test/schedulerTests.cpp
+22
-16
source/util/CMakeLists.txt
source/util/CMakeLists.txt
+4
-1
source/util/src/encode.c
source/util/src/encode.c
+141
-0
source/util/test/CMakeLists.txt
source/util/test/CMakeLists.txt
+4
-0
source/util/test/encodeTest.cpp
source/util/test/encodeTest.cpp
+421
-0
未找到文件。
include/common/tmsg.h
浏览文件 @
10952778
...
...
@@ -57,46 +57,6 @@ extern int tMsgDict[];
typedef
uint16_t
tmsg_t
;
/* ------------------------ ENCODE/DECODE FUNCTIONS AND MACROS ------------------------ */
struct
SMEListNode
{
TD_SLIST_NODE
(
SMEListNode
);
SEncoder
coder
;
};
typedef
struct
SMsgEncoder
{
SEncoder
coder
;
TD_SLIST
(
SMEListNode
)
eStack
;
// encode stack
}
SMsgEncoder
;
struct
SMDFreeListNode
{
TD_SLIST_NODE
(
SMDFreeListNode
);
char
payload
[];
};
struct
SMDListNode
{
TD_SLIST_NODE
(
SMDListNode
);
SDecoder
coder
;
};
typedef
struct
SMsgDecoder
{
SDecoder
coder
;
TD_SLIST
(
SMDListNode
)
dStack
;
TD_SLIST
(
SMDFreeListNode
)
freeList
;
}
SMsgDecoder
;
#define TMSG_MALLOC(SIZE, DECODER) \
({ \
void* ptr = malloc((SIZE) + sizeof(struct SMDFreeListNode)); \
if (ptr) { \
TD_SLIST_PUSH(&((DECODER)->freeList), (struct SMDFreeListNode*)ptr); \
ptr = POINTER_SHIFT(ptr, sizeof(struct SMDFreeListNode*)); \
} \
ptr; \
})
void
tmsgInitMsgDecoder
(
SMsgDecoder
*
pMD
,
td_endian_t
endian
,
uint8_t
*
data
,
int64_t
size
);
void
tmsgClearMsgDecoder
(
SMsgDecoder
*
pMD
);
/* ------------------------ OTHER DEFINITIONS ------------------------ */
// IE type
#define TSDB_IE_TYPE_SEC 1
...
...
@@ -1090,6 +1050,7 @@ typedef struct SResFetchMsg {
}
SResFetchMsg
;
typedef
struct
SSchTasksStatusMsg
{
SMsgHead
header
;
uint64_t
sId
;
}
SSchTasksStatusMsg
;
...
...
@@ -1105,6 +1066,7 @@ typedef struct SSchedulerStatusRsp {
}
SSchedulerStatusRsp
;
typedef
struct
STaskCancelMsg
{
SMsgHead
header
;
uint64_t
sId
;
uint64_t
queryId
;
uint64_t
taskId
;
...
...
@@ -1115,6 +1077,7 @@ typedef struct STaskCancelRsp {
}
STaskCancelRsp
;
typedef
struct
STaskDropMsg
{
SMsgHead
header
;
uint64_t
sId
;
uint64_t
queryId
;
uint64_t
taskId
;
...
...
@@ -1283,8 +1246,6 @@ typedef struct {
SArray
*
pArray
;
}
SVCreateTbBatchReq
;
int
tmsgSVCreateTbReqEncode
(
SMsgEncoder
*
pCoder
,
SVCreateTbReq
*
pReq
);
int
tmsgSVCreateTbReqDecode
(
SMsgDecoder
*
pCoder
,
SVCreateTbReq
*
pReq
);
int
tSerializeSVCreateTbReq
(
void
**
buf
,
SVCreateTbReq
*
pReq
);
void
*
tDeserializeSVCreateTbReq
(
void
*
buf
,
SVCreateTbReq
*
pReq
);
int
tSVCreateTbBatchReqSerialize
(
void
**
buf
,
SVCreateTbBatchReq
*
pReq
);
...
...
include/libs/planner/planner.h
浏览文件 @
10952778
...
...
@@ -122,9 +122,10 @@ typedef struct SSubplanId {
typedef
struct
SSubplan
{
SSubplanId
id
;
// unique id of the subplan
int32_t
type
;
// QUERY_TYPE_MERGE|QUERY_TYPE_PARTIAL|QUERY_TYPE_SCAN|QUERY_TYPE_MODIFY
int32_t
level
;
// the execution level of current subplan, starting from 0.
int32_t
msgType
;
// message type for subplan, used to denote the send message type to vnode.
int32_t
level
;
// the execution level of current subplan, starting from 0 in a top-down manner.
SQueryNodeAddr
execNode
;
// for the scan/modify subplan, the optional execution node
SArray
*
pChild
er
n
;
// the datasource subplan,from which to fetch the result
SArray
*
pChild
re
n
;
// the datasource subplan,from which to fetch the result
SArray
*
pParents
;
// the data destination subplan, get data from current subplan
SPhyNode
*
pNode
;
// physical plan of current subplan
SDataSink
*
pDataSink
;
// data of the subplan flow into the datasink
...
...
@@ -147,7 +148,7 @@ int32_t qCreateQueryDag(const struct SQueryNode* pQueryInfo, struct SQueryDag**
// @subplan subplan to be schedule
// @templateId templateId of a group of datasource subplans of this @subplan
// @ep one execution location of this group of datasource subplans
int32_t
qSetSubplanExecutionNode
(
SSubplan
*
subplan
,
uint64_t
templateId
,
S
Ep
Addr
*
ep
);
int32_t
qSetSubplanExecutionNode
(
SSubplan
*
subplan
,
uint64_t
templateId
,
S
QueryNode
Addr
*
ep
);
int32_t
qExplainQuery
(
const
struct
SQueryNode
*
pQueryInfo
,
struct
SEpSet
*
pQnode
,
char
**
str
);
...
...
include/util/encode.h
浏览文件 @
10952778
...
...
@@ -16,6 +16,7 @@
#ifndef _TD_UTIL_ENCODE_H_
#define _TD_UTIL_ENCODE_H_
#include "freelist.h"
#include "tcoding.h"
#include "tmacro.h"
...
...
@@ -23,13 +24,6 @@
extern
"C"
{
#endif
typedef
struct
{
td_endian_t
endian
;
uint8_t
*
data
;
int32_t
size
;
int32_t
pos
;
}
SEncoder
,
SDecoder
;
#define tPut(TYPE, BUF, VAL) ((TYPE*)(BUF))[0] = (VAL)
#define tGet(TYPE, BUF, VAL) (VAL) = ((TYPE*)(BUF))[0]
...
...
@@ -57,335 +51,257 @@ typedef struct {
#define tRGet32 tRPut32
#define tRGet64 tRPut64
#define TD_CODER_CURRENT(CODER) ((CODER)->data + (CODER)->pos)
#define TD_CODER_MOVE_POS(CODER, MOVE) ((CODER)->pos += (MOVE))
#define TD_CHECK_CODER_CAPACITY_FAILED(CODER, EXPSIZE) (((CODER)->size - (CODER)->pos) < (EXPSIZE))
/* ------------------------ FOR ENCODER ------------------------ */
static
FORCE_INLINE
void
tInitEncoder
(
SEncoder
*
pEncoder
,
td_endian_t
endian
,
uint8_t
*
data
,
int32_t
size
)
{
pEncoder
->
endian
=
endian
;
pEncoder
->
data
=
data
;
pEncoder
->
size
=
(
data
)
?
size
:
0
;
pEncoder
->
pos
=
0
;
}
typedef
enum
{
TD_ENCODER
,
TD_DECODER
}
td_coder_t
;
// 8
static
FORCE_INLINE
int
tEncodeU8
(
SEncoder
*
pEncoder
,
uint8_t
val
)
{
if
(
pEncoder
->
data
)
{
if
(
TD_CHECK_CODER_CAPACITY_FAILED
(
pEncoder
,
sizeof
(
val
)))
return
-
1
;
tPut
(
uint8_t
,
TD_CODER_CURRENT
(
pEncoder
),
val
);
}
TD_CODER_MOVE_POS
(
pEncoder
,
sizeof
(
val
));
return
0
;
}
#define CODER_NODE_FIELDS \
uint8_t* data; \
int32_t size; \
int32_t pos;
static
FORCE_INLINE
int
tEncodeI8
(
SEncoder
*
pEncoder
,
int8_t
val
)
{
if
(
pEncoder
->
data
)
{
if
(
TD_CHECK_CODER_CAPACITY_FAILED
(
pEncoder
,
sizeof
(
val
)))
return
-
1
;
tPut
(
int8_t
,
TD_CODER_CURRENT
(
pEncoder
),
val
);
}
TD_CODER_MOVE_POS
(
pEncoder
,
sizeof
(
val
));
return
0
;
}
struct
SCoderNode
{
TD_SLIST_NODE
(
SCoderNode
);
CODER_NODE_FIELDS
};
// 16
static
FORCE_INLINE
int
tEncodeU16
(
SEncoder
*
pEncoder
,
uint16_t
val
)
{
if
(
pEncoder
->
data
)
{
if
(
TD_CHECK_CODER_CAPACITY_FAILED
(
pEncoder
,
sizeof
(
val
)))
return
-
1
;
if
(
TD_RT_ENDIAN
()
==
pEncoder
->
endian
)
{
tPut
(
uint16_t
,
TD_CODER_CURRENT
(
pEncoder
),
val
);
}
else
{
tRPut16
(
TD_CODER_CURRENT
(
pEncoder
),
&
val
);
}
}
TD_CODER_MOVE_POS
(
pEncoder
,
sizeof
(
val
));
typedef
struct
{
td_coder_t
type
;
td_endian_t
endian
;
SFreeList
fl
;
CODER_NODE_FIELDS
TD_SLIST
(
SCoderNode
)
stack
;
}
SCoder
;
#define TD_CODER_POS(CODER) ((CODER)->pos)
#define TD_CODER_CURRENT(CODER) ((CODER)->data + (CODER)->pos)
#define TD_CODER_MOVE_POS(CODER, MOVE) ((CODER)->pos += (MOVE))
#define TD_CODER_CHECK_CAPACITY_FAILED(CODER, EXPSIZE) (((CODER)->size - (CODER)->pos) < (EXPSIZE))
#define TCODER_MALLOC(SIZE, CODER) TFL_MALLOC(SIZE, &((CODER)->fl))
void
tCoderInit
(
SCoder
*
pCoder
,
td_endian_t
endian
,
uint8_t
*
data
,
int32_t
size
,
td_coder_t
type
);
void
tCoderClear
(
SCoder
*
pCoder
);
/* ------------------------ ENCODE ------------------------ */
int
tStartEncode
(
SCoder
*
pEncoder
);
void
tEndEncode
(
SCoder
*
pEncoder
);
static
int
tEncodeU8
(
SCoder
*
pEncoder
,
uint8_t
val
);
static
int
tEncodeI8
(
SCoder
*
pEncoder
,
int8_t
val
);
static
int
tEncodeU16
(
SCoder
*
pEncoder
,
uint16_t
val
);
static
int
tEncodeI16
(
SCoder
*
pEncoder
,
int16_t
val
);
static
int
tEncodeU32
(
SCoder
*
pEncoder
,
uint32_t
val
);
static
int
tEncodeI32
(
SCoder
*
pEncoder
,
int32_t
val
);
static
int
tEncodeU64
(
SCoder
*
pEncoder
,
uint64_t
val
);
static
int
tEncodeI64
(
SCoder
*
pEncoder
,
int64_t
val
);
static
int
tEncodeU16v
(
SCoder
*
pEncoder
,
uint16_t
val
);
static
int
tEncodeI16v
(
SCoder
*
pEncoder
,
int16_t
val
);
static
int
tEncodeU32v
(
SCoder
*
pEncoder
,
uint32_t
val
);
static
int
tEncodeI32v
(
SCoder
*
pEncoder
,
int32_t
val
);
static
int
tEncodeU64v
(
SCoder
*
pEncoder
,
uint64_t
val
);
static
int
tEncodeI64v
(
SCoder
*
pEncoder
,
int64_t
val
);
static
int
tEncodeFloat
(
SCoder
*
pEncoder
,
float
val
);
static
int
tEncodeDouble
(
SCoder
*
pEncoder
,
double
val
);
static
int
tEncodeBinary
(
SCoder
*
pEncoder
,
const
void
*
val
,
uint64_t
len
);
static
int
tEncodeCStrWithLen
(
SCoder
*
pEncoder
,
const
char
*
val
,
uint64_t
len
);
static
int
tEncodeCStr
(
SCoder
*
pEncoder
,
const
char
*
val
);
/* ------------------------ DECODE ------------------------ */
int
tStartDecode
(
SCoder
*
pDecoder
);
void
tEndDecode
(
SCoder
*
pDecoder
);
static
bool
tDecodeIsEnd
(
SCoder
*
pCoder
);
static
int
tDecodeU8
(
SCoder
*
pDecoder
,
uint8_t
*
val
);
static
int
tDecodeI8
(
SCoder
*
pDecoder
,
int8_t
*
val
);
static
int
tDecodeU16
(
SCoder
*
pDecoder
,
uint16_t
*
val
);
static
int
tDecodeI16
(
SCoder
*
pDecoder
,
int16_t
*
val
);
static
int
tDecodeU32
(
SCoder
*
pDecoder
,
uint32_t
*
val
);
static
int
tDecodeI32
(
SCoder
*
pDecoder
,
int32_t
*
val
);
static
int
tDecodeU64
(
SCoder
*
pDecoder
,
uint64_t
*
val
);
static
int
tDecodeI64
(
SCoder
*
pDecoder
,
int64_t
*
val
);
static
int
tDecodeU16v
(
SCoder
*
pDecoder
,
uint16_t
*
val
);
static
int
tDecodeI16v
(
SCoder
*
pDecoder
,
int16_t
*
val
);
static
int
tDecodeU32v
(
SCoder
*
pDecoder
,
uint32_t
*
val
);
static
int
tDecodeI32v
(
SCoder
*
pDecoder
,
int32_t
*
val
);
static
int
tDecodeU64v
(
SCoder
*
pDecoder
,
uint64_t
*
val
);
static
int
tDecodeI64v
(
SCoder
*
pDecoder
,
int64_t
*
val
);
static
int
tDecodeFloat
(
SCoder
*
pDecoder
,
float
*
val
);
static
int
tDecodeDouble
(
SCoder
*
pDecoder
,
double
*
val
);
static
int
tDecodeBinary
(
SCoder
*
pDecoder
,
const
void
**
val
,
uint64_t
*
len
);
static
int
tDecodeCStrAndLen
(
SCoder
*
pDecoder
,
const
char
**
val
,
uint64_t
*
len
);
static
int
tDecodeCStr
(
SCoder
*
pDecoder
,
const
char
**
val
);
static
int
tDecodeCStrTo
(
SCoder
*
pDecoder
,
char
*
val
);
/* ------------------------ IMPL ------------------------ */
#define TD_ENCODE_MACRO(CODER, VAL, TYPE, BITS) \
if ((CODER)->data) { \
if (TD_CODER_CHECK_CAPACITY_FAILED(CODER, sizeof(VAL))) return -1; \
if (TD_RT_ENDIAN() == (CODER)->endian) { \
tPut(TYPE, TD_CODER_CURRENT(CODER), (VAL)); \
} else { \
tRPut##BITS(TD_CODER_CURRENT(CODER), &(VAL)); \
} \
} \
TD_CODER_MOVE_POS(CODER, sizeof(VAL)); \
return 0;
}
static
FORCE_INLINE
int
tEncodeI16
(
SEncoder
*
pEncoder
,
int16_t
val
)
{
if
(
pEncoder
->
data
)
{
if
(
TD_CHECK_CODER_CAPACITY_FAILED
(
pEncoder
,
sizeof
(
val
)))
return
-
1
;
if
(
TD_RT_ENDIAN
()
==
pEncoder
->
endian
)
{
tPut
(
int16_t
,
TD_CODER_CURRENT
(
pEncoder
),
val
);
}
else
{
tRPut16
(
TD_CODER_CURRENT
(
pEncoder
),
&
val
);
}
}
TD_CODER_MOVE_POS
(
pEncoder
,
sizeof
(
val
));
#define TD_ENCODE_VARIANT_MACRO(CODER, VAL) \
while ((VAL) >= ENCODE_LIMIT) { \
if ((CODER)->data) { \
if (TD_CODER_CHECK_CAPACITY_FAILED(CODER, 1)) return -1; \
TD_CODER_CURRENT(CODER)[0] = ((VAL) | ENCODE_LIMIT) & 0xff; \
} \
\
(VAL) >>= 7; \
TD_CODER_MOVE_POS(CODER, 1); \
} \
\
if ((CODER)->data) { \
if (TD_CODER_CHECK_CAPACITY_FAILED(CODER, 1)) return -1; \
TD_CODER_CURRENT(CODER)[0] = (uint8_t)(VAL); \
} \
TD_CODER_MOVE_POS(CODER, 1); \
return 0;
}
// 32
static
FORCE_INLINE
int
tEncodeU32
(
SEncoder
*
pEncoder
,
uint32_t
val
)
{
if
(
pEncoder
->
data
)
{
if
(
TD_CHECK_CODER_CAPACITY_FAILED
(
pEncoder
,
sizeof
(
val
)))
return
-
1
;
if
(
TD_RT_ENDIAN
()
==
pEncoder
->
endian
)
{
tPut
(
uint32_t
,
TD_CODER_CURRENT
(
pEncoder
),
val
);
}
else
{
tRPut32
(
TD_CODER_CURRENT
(
pEncoder
),
&
val
);
}
}
TD_CODER_MOVE_POS
(
pEncoder
,
sizeof
(
val
));
#define TD_DECODE_MACRO(CODER, PVAL, TYPE, BITS) \
if (TD_CODER_CHECK_CAPACITY_FAILED(CODER, sizeof(*(PVAL)))) return -1; \
if (TD_RT_ENDIAN() == (CODER)->endian) { \
tGet(TYPE, TD_CODER_CURRENT(CODER), *(PVAL)); \
} else { \
tRGet##BITS(PVAL, TD_CODER_CURRENT(CODER)); \
} \
\
TD_CODER_MOVE_POS(CODER, sizeof(*(PVAL))); \
return 0;
}
static
FORCE_INLINE
int
tEncodeI32
(
SEncoder
*
pEncoder
,
int32_t
val
)
{
if
(
pEncoder
->
data
)
{
if
(
TD_CHECK_CODER_CAPACITY_FAILED
(
pEncoder
,
sizeof
(
val
)))
return
-
1
;
if
(
TD_RT_ENDIAN
()
==
pEncoder
->
endian
)
{
tPut
(
int32_t
,
TD_CODER_CURRENT
(
pEncoder
),
val
);
}
else
{
tRPut32
(
TD_CODER_CURRENT
(
pEncoder
),
&
val
);
}
}
TD_CODER_MOVE_POS
(
pEncoder
,
sizeof
(
val
));
#define TD_DECODE_VARIANT_MACRO(CODER, PVAL, TYPE) \
int32_t i = 0; \
*(PVAL) = 0; \
for (;;) { \
if (TD_CODER_CHECK_CAPACITY_FAILED(CODER, 1)) return -1; \
TYPE tval = TD_CODER_CURRENT(CODER)[0]; \
if (tval < ENCODE_LIMIT) { \
*(PVAL) |= (tval << (7 * i)); \
TD_CODER_MOVE_POS(pDecoder, 1); \
break; \
} else { \
*(PVAL) |= (((tval) & (ENCODE_LIMIT - 1)) << (7 * i)); \
i++; \
TD_CODER_MOVE_POS(pDecoder, 1); \
} \
} \
\
return 0;
}
//
64
static
FORCE_INLINE
int
tEncodeU
64
(
SEncoder
*
pEncoder
,
uint64
_t
val
)
{
//
8
static
FORCE_INLINE
int
tEncodeU
8
(
SCoder
*
pEncoder
,
uint8
_t
val
)
{
if
(
pEncoder
->
data
)
{
if
(
TD_CHECK_CODER_CAPACITY_FAILED
(
pEncoder
,
sizeof
(
val
)))
return
-
1
;
if
(
TD_RT_ENDIAN
()
==
pEncoder
->
endian
)
{
tPut
(
uint64_t
,
TD_CODER_CURRENT
(
pEncoder
),
val
);
}
else
{
tRPut64
(
TD_CODER_CURRENT
(
pEncoder
),
&
val
);
}
if
(
TD_CODER_CHECK_CAPACITY_FAILED
(
pEncoder
,
sizeof
(
val
)))
return
-
1
;
tPut
(
uint8_t
,
TD_CODER_CURRENT
(
pEncoder
),
val
);
}
TD_CODER_MOVE_POS
(
pEncoder
,
sizeof
(
val
));
return
0
;
}
static
FORCE_INLINE
int
tEncodeI
64
(
SEncoder
*
pEncoder
,
int64
_t
val
)
{
static
FORCE_INLINE
int
tEncodeI
8
(
SCoder
*
pEncoder
,
int8
_t
val
)
{
if
(
pEncoder
->
data
)
{
if
(
TD_CHECK_CODER_CAPACITY_FAILED
(
pEncoder
,
sizeof
(
val
)))
return
-
1
;
if
(
TD_RT_ENDIAN
()
==
pEncoder
->
endian
)
{
tPut
(
int64_t
,
TD_CODER_CURRENT
(
pEncoder
),
val
);
}
else
{
tRPut64
(
TD_CODER_CURRENT
(
pEncoder
),
&
val
);
}
if
(
TD_CODER_CHECK_CAPACITY_FAILED
(
pEncoder
,
sizeof
(
val
)))
return
-
1
;
tPut
(
int8_t
,
TD_CODER_CURRENT
(
pEncoder
),
val
);
}
TD_CODER_MOVE_POS
(
pEncoder
,
sizeof
(
val
));
return
0
;
}
// 16
static
FORCE_INLINE
int
tEncodeU16
(
SCoder
*
pEncoder
,
uint16_t
val
)
{
TD_ENCODE_MACRO
(
pEncoder
,
val
,
uint16_t
,
16
);
}
static
FORCE_INLINE
int
tEncodeI16
(
SCoder
*
pEncoder
,
int16_t
val
)
{
TD_ENCODE_MACRO
(
pEncoder
,
val
,
int16_t
,
16
);
}
// 32
static
FORCE_INLINE
int
tEncodeU32
(
SCoder
*
pEncoder
,
uint32_t
val
)
{
TD_ENCODE_MACRO
(
pEncoder
,
val
,
uint32_t
,
32
);
}
static
FORCE_INLINE
int
tEncodeI32
(
SCoder
*
pEncoder
,
int32_t
val
)
{
TD_ENCODE_MACRO
(
pEncoder
,
val
,
int32_t
,
32
);
}
// 64
static
FORCE_INLINE
int
tEncodeU64
(
SCoder
*
pEncoder
,
uint64_t
val
)
{
TD_ENCODE_MACRO
(
pEncoder
,
val
,
uint64_t
,
64
);
}
static
FORCE_INLINE
int
tEncodeI64
(
SCoder
*
pEncoder
,
int64_t
val
)
{
TD_ENCODE_MACRO
(
pEncoder
,
val
,
int64_t
,
64
);
}
// 16v
static
FORCE_INLINE
int
tEncodeU16v
(
SEncoder
*
pEncoder
,
uint16_t
val
)
{
int64_t
i
=
0
;
while
(
val
>=
ENCODE_LIMIT
)
{
if
(
pEncoder
->
data
)
{
if
(
TD_CHECK_CODER_CAPACITY_FAILED
(
pEncoder
,
1
))
return
-
1
;
TD_CODER_CURRENT
(
pEncoder
)[
i
]
=
(
val
|
ENCODE_LIMIT
)
&
0xff
;
}
val
>>=
7
;
i
++
;
}
if
(
pEncoder
->
data
)
{
if
(
TD_CHECK_CODER_CAPACITY_FAILED
(
pEncoder
,
1
))
return
-
1
;
TD_CODER_CURRENT
(
pEncoder
)[
i
]
=
(
uint8_t
)
val
;
}
TD_CODER_MOVE_POS
(
pEncoder
,
i
+
1
);
return
0
;
}
static
FORCE_INLINE
int
tEncodeI16v
(
SEncoder
*
pEncoder
,
int16_t
val
)
{
static
FORCE_INLINE
int
tEncodeU16v
(
SCoder
*
pEncoder
,
uint16_t
val
)
{
TD_ENCODE_VARIANT_MACRO
(
pEncoder
,
val
);
}
static
FORCE_INLINE
int
tEncodeI16v
(
SCoder
*
pEncoder
,
int16_t
val
)
{
return
tEncodeU16v
(
pEncoder
,
ZIGZAGE
(
int16_t
,
val
));
}
// 32v
static
FORCE_INLINE
int
tEncodeU32v
(
SEncoder
*
pEncoder
,
uint32_t
val
)
{
int64_t
i
=
0
;
while
(
val
>=
ENCODE_LIMIT
)
{
if
(
pEncoder
->
data
)
{
if
(
TD_CHECK_CODER_CAPACITY_FAILED
(
pEncoder
,
1
))
return
-
1
;
TD_CODER_CURRENT
(
pEncoder
)[
i
]
=
(
val
|
ENCODE_LIMIT
)
&
0xff
;
}
val
>>=
7
;
i
++
;
}
if
(
pEncoder
->
data
)
{
if
(
TD_CHECK_CODER_CAPACITY_FAILED
(
pEncoder
,
1
))
return
-
1
;
TD_CODER_CURRENT
(
pEncoder
)[
i
]
=
(
uint8_t
)
val
;
}
TD_CODER_MOVE_POS
(
pEncoder
,
i
+
1
);
return
0
;
}
static
FORCE_INLINE
int
tEncodeI32v
(
SEncoder
*
pEncoder
,
int32_t
val
)
{
static
FORCE_INLINE
int
tEncodeU32v
(
SCoder
*
pEncoder
,
uint32_t
val
)
{
TD_ENCODE_VARIANT_MACRO
(
pEncoder
,
val
);
}
static
FORCE_INLINE
int
tEncodeI32v
(
SCoder
*
pEncoder
,
int32_t
val
)
{
return
tEncodeU32v
(
pEncoder
,
ZIGZAGE
(
int32_t
,
val
));
}
// 64v
static
FORCE_INLINE
int
tEncodeU64v
(
SEncoder
*
pEncoder
,
uint64_t
val
)
{
int64_t
i
=
0
;
while
(
val
>=
ENCODE_LIMIT
)
{
if
(
pEncoder
->
data
)
{
if
(
TD_CHECK_CODER_CAPACITY_FAILED
(
pEncoder
,
1
))
return
-
1
;
TD_CODER_CURRENT
(
pEncoder
)[
i
]
=
(
val
|
ENCODE_LIMIT
)
&
0xff
;
}
static
FORCE_INLINE
int
tEncodeU64v
(
SCoder
*
pEncoder
,
uint64_t
val
)
{
TD_ENCODE_VARIANT_MACRO
(
pEncoder
,
val
);
}
static
FORCE_INLINE
int
tEncodeI64v
(
SCoder
*
pEncoder
,
int64_t
val
)
{
return
tEncodeU64v
(
pEncoder
,
ZIGZAGE
(
int64_t
,
val
));
}
val
>>=
7
;
i
++
;
}
static
FORCE_INLINE
int
tEncodeFloat
(
SCoder
*
pEncoder
,
float
val
)
{
union
{
uint32_t
ui
;
float
f
;
}
v
=
{.
f
=
val
};
if
(
pEncoder
->
data
)
{
if
(
TD_CHECK_CODER_CAPACITY_FAILED
(
pEncoder
,
1
))
return
-
1
;
TD_CODER_CURRENT
(
pEncoder
)[
i
]
=
(
uint8_t
)
val
;
}
return
tEncodeU32
(
pEncoder
,
v
.
ui
);
}
TD_CODER_MOVE_POS
(
pEncoder
,
i
+
1
);
static
FORCE_INLINE
int
tEncodeDouble
(
SCoder
*
pEncoder
,
double
val
)
{
union
{
uint64_t
ui
;
double
d
;
}
v
=
{.
d
=
val
};
return
0
;
return
tEncodeU64
(
pEncoder
,
v
.
ui
)
;
}
static
FORCE_INLINE
int
tEncodeI64v
(
SEncoder
*
pEncoder
,
int64_t
val
)
{
return
tEncodeU64v
(
pEncoder
,
ZIGZAGE
(
int64_t
,
val
));
}
static
FORCE_INLINE
int
tEncodeBinary
(
SCoder
*
pEncoder
,
const
void
*
val
,
uint64_t
len
)
{
if
(
tEncodeU64v
(
pEncoder
,
len
)
<
0
)
return
-
1
;
if
(
pEncoder
->
data
)
{
if
(
TD_CODER_CHECK_CAPACITY_FAILED
(
pEncoder
,
len
))
return
-
1
;
memcpy
(
TD_CODER_CURRENT
(
pEncoder
),
val
,
len
);
}
static
FORCE_INLINE
int
tEncodeFloat
(
SEncoder
*
pEncoder
,
float
val
)
{
// TODO
TD_CODER_MOVE_POS
(
pEncoder
,
len
);
return
0
;
}
static
FORCE_INLINE
int
tEncodeDouble
(
SEncoder
*
pEncoder
,
double
val
)
{
// TODO
return
0
;
static
FORCE_INLINE
int
tEncodeCStrWithLen
(
SCoder
*
pEncoder
,
const
char
*
val
,
uint64_t
len
)
{
return
tEncodeBinary
(
pEncoder
,
(
void
*
)
val
,
len
+
1
);
}
static
FORCE_INLINE
int
tEncodeCStr
(
SEncoder
*
pEncoder
,
const
char
*
val
)
{
// TODO
return
0
;
static
FORCE_INLINE
int
tEncodeCStr
(
SCoder
*
pEncoder
,
const
char
*
val
)
{
return
tEncodeCStrWithLen
(
pEncoder
,
val
,
(
uint64_t
)
strlen
(
val
));
}
/* ------------------------ FOR DECODER ------------------------ */
static
FORCE_INLINE
void
tInitDecoder
(
SDecoder
*
pDecoder
,
td_endian_t
endian
,
uint8_t
*
data
,
int32_t
size
)
{
ASSERT
(
!
TD_IS_NULL
(
data
));
pDecoder
->
endian
=
endian
;
pDecoder
->
data
=
data
;
pDecoder
->
size
=
size
;
pDecoder
->
pos
=
0
;
}
// 8
static
FORCE_INLINE
int
tDecodeU8
(
S
Dec
oder
*
pDecoder
,
uint8_t
*
val
)
{
if
(
TD_C
HECK_CODER
_CAPACITY_FAILED
(
pDecoder
,
sizeof
(
*
val
)))
return
-
1
;
static
FORCE_INLINE
int
tDecodeU8
(
S
C
oder
*
pDecoder
,
uint8_t
*
val
)
{
if
(
TD_C
ODER_CHECK
_CAPACITY_FAILED
(
pDecoder
,
sizeof
(
*
val
)))
return
-
1
;
tGet
(
uint8_t
,
TD_CODER_CURRENT
(
pDecoder
),
*
val
);
TD_CODER_MOVE_POS
(
pDecoder
,
sizeof
(
*
val
));
return
0
;
}
static
FORCE_INLINE
int
tDecodeI8
(
S
Dec
oder
*
pDecoder
,
int8_t
*
val
)
{
if
(
TD_C
HECK_CODER
_CAPACITY_FAILED
(
pDecoder
,
sizeof
(
*
val
)))
return
-
1
;
static
FORCE_INLINE
int
tDecodeI8
(
S
C
oder
*
pDecoder
,
int8_t
*
val
)
{
if
(
TD_C
ODER_CHECK
_CAPACITY_FAILED
(
pDecoder
,
sizeof
(
*
val
)))
return
-
1
;
tGet
(
int8_t
,
TD_CODER_CURRENT
(
pDecoder
),
*
val
);
TD_CODER_MOVE_POS
(
pDecoder
,
sizeof
(
*
val
));
return
0
;
}
// 16
static
FORCE_INLINE
int
tDecodeU16
(
SDecoder
*
pDecoder
,
uint16_t
*
val
)
{
if
(
TD_CHECK_CODER_CAPACITY_FAILED
(
pDecoder
,
sizeof
(
*
val
)))
return
-
1
;
if
(
TD_RT_ENDIAN
()
==
pDecoder
->
endian
)
{
tGet
(
uint16_t
,
TD_CODER_CURRENT
(
pDecoder
),
*
val
);
}
else
{
tRGet16
(
val
,
TD_CODER_CURRENT
(
pDecoder
));
}
TD_CODER_MOVE_POS
(
pDecoder
,
sizeof
(
*
val
));
return
0
;
}
static
FORCE_INLINE
int
tDecodeI16
(
SDecoder
*
pDecoder
,
int16_t
*
val
)
{
if
(
TD_CHECK_CODER_CAPACITY_FAILED
(
pDecoder
,
sizeof
(
*
val
)))
return
-
1
;
if
(
TD_RT_ENDIAN
()
==
pDecoder
->
endian
)
{
tGet
(
int16_t
,
TD_CODER_CURRENT
(
pDecoder
),
*
val
);
}
else
{
tRGet16
(
val
,
TD_CODER_CURRENT
(
pDecoder
));
}
TD_CODER_MOVE_POS
(
pDecoder
,
sizeof
(
*
val
));
return
0
;
}
static
FORCE_INLINE
int
tDecodeU16
(
SCoder
*
pDecoder
,
uint16_t
*
val
)
{
TD_DECODE_MACRO
(
pDecoder
,
val
,
uint16_t
,
16
);
}
static
FORCE_INLINE
int
tDecodeI16
(
SCoder
*
pDecoder
,
int16_t
*
val
)
{
TD_DECODE_MACRO
(
pDecoder
,
val
,
int16_t
,
16
);
}
// 32
static
FORCE_INLINE
int
tDecodeU32
(
SDecoder
*
pDecoder
,
uint32_t
*
val
)
{
if
(
TD_CHECK_CODER_CAPACITY_FAILED
(
pDecoder
,
sizeof
(
*
val
)))
return
-
1
;
if
(
TD_RT_ENDIAN
()
==
pDecoder
->
endian
)
{
tGet
(
uint32_t
,
TD_CODER_CURRENT
(
pDecoder
),
*
val
);
}
else
{
tRGet32
(
val
,
TD_CODER_CURRENT
(
pDecoder
));
}
TD_CODER_MOVE_POS
(
pDecoder
,
sizeof
(
*
val
));
return
0
;
}
static
FORCE_INLINE
int
tDecodeI32
(
SDecoder
*
pDecoder
,
int32_t
*
val
)
{
if
(
TD_CHECK_CODER_CAPACITY_FAILED
(
pDecoder
,
sizeof
(
*
val
)))
return
-
1
;
if
(
TD_RT_ENDIAN
()
==
pDecoder
->
endian
)
{
tGet
(
int32_t
,
TD_CODER_CURRENT
(
pDecoder
),
*
val
);
}
else
{
tRGet32
(
val
,
TD_CODER_CURRENT
(
pDecoder
));
}
TD_CODER_MOVE_POS
(
pDecoder
,
sizeof
(
*
val
));
return
0
;
}
static
FORCE_INLINE
int
tDecodeU32
(
SCoder
*
pDecoder
,
uint32_t
*
val
)
{
TD_DECODE_MACRO
(
pDecoder
,
val
,
uint32_t
,
32
);
}
static
FORCE_INLINE
int
tDecodeI32
(
SCoder
*
pDecoder
,
int32_t
*
val
)
{
TD_DECODE_MACRO
(
pDecoder
,
val
,
int32_t
,
32
);
}
// 64
static
FORCE_INLINE
int
tDecodeU64
(
SDecoder
*
pDecoder
,
uint64_t
*
val
)
{
if
(
TD_CHECK_CODER_CAPACITY_FAILED
(
pDecoder
,
sizeof
(
*
val
)))
return
-
1
;
if
(
TD_RT_ENDIAN
()
==
pDecoder
->
endian
)
{
tGet
(
uint64_t
,
TD_CODER_CURRENT
(
pDecoder
),
*
val
);
}
else
{
tRGet64
(
val
,
TD_CODER_CURRENT
(
pDecoder
));
}
TD_CODER_MOVE_POS
(
pDecoder
,
sizeof
(
*
val
));
return
0
;
}
static
FORCE_INLINE
int
tDecodeI64
(
SDecoder
*
pDecoder
,
int64_t
*
val
)
{
if
(
TD_CHECK_CODER_CAPACITY_FAILED
(
pDecoder
,
sizeof
(
*
val
)))
return
-
1
;
if
(
TD_RT_ENDIAN
()
==
pDecoder
->
endian
)
{
tGet
(
int64_t
,
TD_CODER_CURRENT
(
pDecoder
),
*
val
);
}
else
{
tRGet64
(
val
,
TD_CODER_CURRENT
(
pDecoder
));
}
TD_CODER_MOVE_POS
(
pDecoder
,
sizeof
(
*
val
));
return
0
;
}
static
FORCE_INLINE
int
tDecodeU64
(
SCoder
*
pDecoder
,
uint64_t
*
val
)
{
TD_DECODE_MACRO
(
pDecoder
,
val
,
uint64_t
,
64
);
}
static
FORCE_INLINE
int
tDecodeI64
(
SCoder
*
pDecoder
,
int64_t
*
val
)
{
TD_DECODE_MACRO
(
pDecoder
,
val
,
int64_t
,
64
);
}
// 16v
static
FORCE_INLINE
int
tDecodeU16v
(
SDecoder
*
pDecoder
,
uint16_t
*
val
)
{
int64_t
i
=
0
;
*
val
=
0
;
for
(;;)
{
if
(
TD_CHECK_CODER_CAPACITY_FAILED
(
pDecoder
,
1
))
return
-
1
;
uint16_t
tval
=
TD_CODER_CURRENT
(
pDecoder
)[
i
];
if
(
tval
<
ENCODE_LIMIT
)
{
(
*
val
)
|=
(
tval
<<
(
7
*
i
));
break
;
}
else
{
(
*
val
)
|=
(((
tval
)
&
(
ENCODE_LIMIT
-
1
))
<<
(
7
*
i
));
i
++
;
}
}
TD_CODER_MOVE_POS
(
pDecoder
,
i
);
return
0
;
static
FORCE_INLINE
int
tDecodeU16v
(
SCoder
*
pDecoder
,
uint16_t
*
val
)
{
TD_DECODE_VARIANT_MACRO
(
pDecoder
,
val
,
uint16_t
);
}
static
FORCE_INLINE
int
tDecodeI16v
(
S
Dec
oder
*
pDecoder
,
int16_t
*
val
)
{
static
FORCE_INLINE
int
tDecodeI16v
(
S
C
oder
*
pDecoder
,
int16_t
*
val
)
{
uint16_t
tval
;
if
(
tDecodeU16v
(
pDecoder
,
&
tval
)
<
0
)
{
return
-
1
;
...
...
@@ -395,27 +311,11 @@ static FORCE_INLINE int tDecodeI16v(SDecoder* pDecoder, int16_t* val) {
}
// 32v
static
FORCE_INLINE
int
tDecodeU32v
(
SDecoder
*
pDecoder
,
uint32_t
*
val
)
{
int64_t
i
=
0
;
*
val
=
0
;
for
(;;)
{
if
(
TD_CHECK_CODER_CAPACITY_FAILED
(
pDecoder
,
1
))
return
-
1
;
uint32_t
tval
=
TD_CODER_CURRENT
(
pDecoder
)[
i
];
if
(
tval
<
ENCODE_LIMIT
)
{
(
*
val
)
|=
(
tval
<<
(
7
*
i
));
break
;
}
else
{
(
*
val
)
|=
(((
tval
)
&
(
ENCODE_LIMIT
-
1
))
<<
(
7
*
i
));
i
++
;
}
}
TD_CODER_MOVE_POS
(
pDecoder
,
i
);
return
0
;
static
FORCE_INLINE
int
tDecodeU32v
(
SCoder
*
pDecoder
,
uint32_t
*
val
)
{
TD_DECODE_VARIANT_MACRO
(
pDecoder
,
val
,
uint32_t
);
}
static
FORCE_INLINE
int
tDecodeI32v
(
S
Dec
oder
*
pDecoder
,
int32_t
*
val
)
{
static
FORCE_INLINE
int
tDecodeI32v
(
S
C
oder
*
pDecoder
,
int32_t
*
val
)
{
uint32_t
tval
;
if
(
tDecodeU32v
(
pDecoder
,
&
tval
)
<
0
)
{
return
-
1
;
...
...
@@ -425,50 +325,79 @@ static FORCE_INLINE int tDecodeI32v(SDecoder* pDecoder, int32_t* val) {
}
// 64v
static
FORCE_INLINE
int
tDecodeU64v
(
SDecoder
*
pDecoder
,
uint64_t
*
val
)
{
int64_t
i
=
0
;
*
val
=
0
;
for
(;;)
{
if
(
TD_CHECK_CODER_CAPACITY_FAILED
(
pDecoder
,
1
))
return
-
1
;
uint64_t
tval
=
TD_CODER_CURRENT
(
pDecoder
)[
i
];
if
(
tval
<
ENCODE_LIMIT
)
{
(
*
val
)
|=
(
tval
<<
(
7
*
i
));
break
;
}
else
{
(
*
val
)
|=
(((
tval
)
&
(
ENCODE_LIMIT
-
1
))
<<
(
7
*
i
));
i
++
;
}
static
FORCE_INLINE
int
tDecodeU64v
(
SCoder
*
pDecoder
,
uint64_t
*
val
)
{
TD_DECODE_VARIANT_MACRO
(
pDecoder
,
val
,
uint64_t
);
}
static
FORCE_INLINE
int
tDecodeI64v
(
SCoder
*
pDecoder
,
int64_t
*
val
)
{
uint64_t
tval
;
if
(
tDecodeU64v
(
pDecoder
,
&
tval
)
<
0
)
{
return
-
1
;
}
*
val
=
ZIGZAGD
(
int64_t
,
tval
);
return
0
;
}
TD_CODER_MOVE_POS
(
pDecoder
,
i
);
static
FORCE_INLINE
int
tDecodeFloat
(
SCoder
*
pDecoder
,
float
*
val
)
{
union
{
uint32_t
ui
;
float
f
;
}
v
;
if
(
tDecodeU32
(
pDecoder
,
&
(
v
.
ui
))
<
0
)
{
return
-
1
;
}
*
val
=
v
.
f
;
return
0
;
}
static
FORCE_INLINE
int
tDecodeI64v
(
SDecoder
*
pDecoder
,
int64_t
*
val
)
{
uint64_t
tval
;
if
(
tDecodeU64v
(
pDecoder
,
&
tval
)
<
0
)
{
static
FORCE_INLINE
int
tDecodeDouble
(
SCoder
*
pDecoder
,
double
*
val
)
{
union
{
uint64_t
ui
;
double
d
;
}
v
;
if
(
tDecodeU64
(
pDecoder
,
&
(
v
.
ui
))
<
0
)
{
return
-
1
;
}
*
val
=
ZIGZAGD
(
int64_t
,
tval
);
*
val
=
v
.
d
;
return
0
;
}
static
FORCE_INLINE
int
tDecodeFloat
(
SDecoder
*
pDecoder
,
float
*
val
)
{
// TODO
static
FORCE_INLINE
int
tDecodeBinary
(
SCoder
*
pDecoder
,
const
void
**
val
,
uint64_t
*
len
)
{
if
(
tDecodeU64v
(
pDecoder
,
len
)
<
0
)
return
-
1
;
if
(
TD_CODER_CHECK_CAPACITY_FAILED
(
pDecoder
,
*
len
))
return
-
1
;
*
val
=
(
void
*
)
TD_CODER_CURRENT
(
pDecoder
);
TD_CODER_MOVE_POS
(
pDecoder
,
*
len
);
return
0
;
}
static
FORCE_INLINE
int
tDecodeDouble
(
SDecoder
*
pDecoder
,
double
*
val
)
{
// TODO
static
FORCE_INLINE
int
tDecodeCStrAndLen
(
SCoder
*
pDecoder
,
const
char
**
val
,
uint64_t
*
len
)
{
if
(
tDecodeBinary
(
pDecoder
,
(
const
void
**
)
val
,
len
)
<
0
)
return
-
1
;
(
*
len
)
-=
1
;
return
0
;
}
static
FORCE_INLINE
int
tDecodeCStr
(
SDecoder
*
pEncoder
,
const
char
**
val
)
{
// TODO
static
FORCE_INLINE
int
tDecodeCStr
(
SCoder
*
pDecoder
,
const
char
**
val
)
{
uint64_t
len
;
return
tDecodeCStrAndLen
(
pDecoder
,
val
,
&
len
);
}
static
int
tDecodeCStrTo
(
SCoder
*
pDecoder
,
char
*
val
)
{
const
char
*
pStr
;
uint64_t
len
;
if
(
tDecodeCStrAndLen
(
pDecoder
,
&
pStr
,
&
len
)
<
0
)
return
-
1
;
memcpy
(
val
,
pStr
,
len
+
1
);
return
0
;
}
static
FORCE_INLINE
bool
tDecodeIsEnd
(
SCoder
*
pCoder
)
{
return
(
pCoder
->
size
==
pCoder
->
pos
);
}
#ifdef __cplusplus
}
#endif
...
...
source/client/CMakeLists.txt
浏览文件 @
10952778
...
...
@@ -11,4 +11,6 @@ target_link_libraries(
PRIVATE os util common transport parser planner catalog scheduler function qcom
)
ADD_SUBDIRECTORY
(
test
)
\ No newline at end of file
if
(
${
BUILD_TEST
}
)
ADD_SUBDIRECTORY
(
test
)
endif
(
${
BUILD_TEST
}
)
\ No newline at end of file
source/client/src/clientMain.c
浏览文件 @
10952778
...
...
@@ -29,7 +29,7 @@ int taos_options(TSDB_OPTION option, const void *arg, ...) {
// this function may be called by user or system, or by both simultaneously.
void
taos_cleanup
(
void
)
{
tsc
Debug
(
"start to cleanup client environment"
);
tsc
Info
(
"start to cleanup client environment"
);
if
(
atomic_val_compare_exchange_32
(
&
sentinel
,
TSC_VAR_NOT_RELEASE
,
TSC_VAR_RELEASED
)
!=
TSC_VAR_NOT_RELEASE
)
{
return
;
...
...
@@ -47,6 +47,8 @@ void taos_cleanup(void) {
rpcCleanup
();
taosCloseLog
();
tscInfo
(
"all local resources released"
);
}
TAOS
*
taos_connect
(
const
char
*
ip
,
const
char
*
user
,
const
char
*
pass
,
const
char
*
db
,
uint16_t
port
)
{
...
...
@@ -140,7 +142,9 @@ TAOS_ROW taos_fetch_row(TAOS_RES *pRes) {
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
pRes
;
if
(
pRequest
->
type
==
TSDB_SQL_RETRIEVE_EMPTY_RESULT
||
pRequest
->
type
==
TSDB_SQL_INSERT
||
pRequest
->
code
!=
TSDB_CODE_SUCCESS
)
{
pRequest
->
type
==
TSDB_SQL_INSERT
||
pRequest
->
code
!=
TSDB_CODE_SUCCESS
||
taos_num_fields
(
pRes
)
==
0
)
{
return
NULL
;
}
...
...
source/client/test/clientTests.cpp
浏览文件 @
10952778
...
...
@@ -279,7 +279,7 @@ TEST(testCase, connect_Test) {
// taos_free_result(pRes);
// taos_close(pConn);
//}
//
//TEST(testCase, create_table_Test) {
// // TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0);
// // assert(pConn != NULL);
...
...
@@ -470,9 +470,9 @@ TEST(testCase, create_multiple_tables) {
TAOS_RES
*
pRes
=
taos_query
(
pConn
,
"use abc1"
);
taos_free_result
(
pRes
);
pRes
=
taos_query
(
pConn
,
"create table t_2 using st1 tags(1)
t_3 using st1 tags(2)
"
);
pRes
=
taos_query
(
pConn
,
"create table t_2 using st1 tags(1)"
);
if
(
taos_errno
(
pRes
)
!=
0
)
{
printf
(
"failed to
show vgroup
s, reason:%s
\n
"
,
taos_errstr
(
pRes
));
printf
(
"failed to
create multiple table
s, reason:%s
\n
"
,
taos_errstr
(
pRes
));
taos_free_result
(
pRes
);
ASSERT_TRUE
(
false
);
}
...
...
source/common/CMakeLists.txt
浏览文件 @
10952778
...
...
@@ -12,4 +12,6 @@ target_link_libraries(
INTERFACE api
)
ADD_SUBDIRECTORY
(
test
)
if
(
${
BUILD_TEST
}
)
ADD_SUBDIRECTORY
(
test
)
endif
(
${
BUILD_TEST
}
)
source/common/src/tmsg.c
浏览文件 @
10952778
...
...
@@ -27,77 +27,6 @@
#undef TD_MSG_SEG_CODE_
#include "tmsgdef.h"
static
int
tmsgStartEncode
(
SMsgEncoder
*
pME
);
static
void
tmsgEndEncode
(
SMsgEncoder
*
pME
);
static
int
tmsgStartDecode
(
SMsgDecoder
*
pMD
);
static
void
tmsgEndDecode
(
SMsgDecoder
*
pMD
);
/* ------------------------ ENCODE/DECODE FUNCTIONS ------------------------ */
void
tmsgInitMsgEncoder
(
SMsgEncoder
*
pME
,
td_endian_t
endian
,
uint8_t
*
data
,
int64_t
size
)
{
tInitEncoder
(
&
(
pME
->
coder
),
endian
,
data
,
size
);
TD_SLIST_INIT
(
&
(
pME
->
eStack
));
}
void
tmsgClearMsgEncoder
(
SMsgEncoder
*
pME
)
{
struct
SMEListNode
*
pNode
;
for
(;;)
{
pNode
=
TD_SLIST_HEAD
(
&
(
pME
->
eStack
));
if
(
TD_IS_NULL
(
pNode
))
break
;
TD_SLIST_POP
(
&
(
pME
->
eStack
));
free
(
pNode
);
}
}
void
tmsgInitMsgDecoder
(
SMsgDecoder
*
pMD
,
td_endian_t
endian
,
uint8_t
*
data
,
int64_t
size
)
{
tInitDecoder
(
&
pMD
->
coder
,
endian
,
data
,
size
);
TD_SLIST_INIT
(
&
(
pMD
->
dStack
));
TD_SLIST_INIT
(
&
(
pMD
->
freeList
));
}
void
tmsgClearMsgDecoder
(
SMsgDecoder
*
pMD
)
{
{
struct
SMDFreeListNode
*
pNode
;
for
(;;)
{
pNode
=
TD_SLIST_HEAD
(
&
(
pMD
->
freeList
));
if
(
TD_IS_NULL
(
pNode
))
break
;
TD_SLIST_POP
(
&
(
pMD
->
freeList
));
free
(
pNode
);
}
}
{
struct
SMDListNode
*
pNode
;
for
(;;)
{
pNode
=
TD_SLIST_HEAD
(
&
(
pMD
->
dStack
));
if
(
TD_IS_NULL
(
pNode
))
break
;
TD_SLIST_POP
(
&
(
pMD
->
dStack
));
free
(
pNode
);
}
}
}
/* ------------------------ MESSAGE ENCODE/DECODE ------------------------ */
int
tmsgSVCreateTbReqEncode
(
SMsgEncoder
*
pCoder
,
SVCreateTbReq
*
pReq
)
{
tmsgStartEncode
(
pCoder
);
// TODO
tmsgEndEncode
(
pCoder
);
return
0
;
}
int
tmsgSVCreateTbReqDecode
(
SMsgDecoder
*
pCoder
,
SVCreateTbReq
*
pReq
)
{
tmsgStartDecode
(
pCoder
);
// TODO: decode
// Decode is not end
if
(
pCoder
->
coder
.
pos
!=
pCoder
->
coder
.
size
)
{
// Continue decode
}
tmsgEndDecode
(
pCoder
);
return
0
;
}
int
tSerializeSVCreateTbReq
(
void
**
buf
,
SVCreateTbReq
*
pReq
)
{
int
tlen
=
0
;
...
...
@@ -219,63 +148,3 @@ void *tSVCreateTbBatchReqDeserialize(void *buf, SVCreateTbBatchReq *pReq) {
return
buf
;
}
\ No newline at end of file
/* ------------------------ STATIC METHODS ------------------------ */
static
int
tmsgStartEncode
(
SMsgEncoder
*
pME
)
{
struct
SMEListNode
*
pNode
=
(
struct
SMEListNode
*
)
malloc
(
sizeof
(
*
pNode
));
if
(
TD_IS_NULL
(
pNode
))
return
-
1
;
pNode
->
coder
=
pME
->
coder
;
TD_SLIST_PUSH
(
&
(
pME
->
eStack
),
pNode
);
TD_CODER_MOVE_POS
(
&
(
pME
->
coder
),
sizeof
(
int32_t
));
return
0
;
}
static
void
tmsgEndEncode
(
SMsgEncoder
*
pME
)
{
int32_t
size
;
struct
SMEListNode
*
pNode
;
pNode
=
TD_SLIST_HEAD
(
&
(
pME
->
eStack
));
ASSERT
(
pNode
);
TD_SLIST_POP
(
&
(
pME
->
eStack
));
size
=
pME
->
coder
.
pos
-
pNode
->
coder
.
pos
;
tEncodeI32
(
&
(
pNode
->
coder
),
size
);
free
(
pNode
);
}
static
int
tmsgStartDecode
(
SMsgDecoder
*
pMD
)
{
struct
SMDListNode
*
pNode
;
int32_t
size
;
pNode
=
(
struct
SMDListNode
*
)
malloc
(
sizeof
(
*
pNode
));
if
(
pNode
==
NULL
)
return
-
1
;
tDecodeI32
(
&
(
pMD
->
coder
),
&
size
);
pNode
->
coder
=
pMD
->
coder
;
TD_SLIST_PUSH
(
&
(
pMD
->
dStack
),
pNode
);
pMD
->
coder
.
pos
=
0
;
pMD
->
coder
.
size
=
size
-
sizeof
(
int32_t
);
pMD
->
coder
.
data
=
TD_CODER_CURRENT
(
&
(
pNode
->
coder
));
return
0
;
}
static
void
tmsgEndDecode
(
SMsgDecoder
*
pMD
)
{
ASSERT
(
pMD
->
coder
.
pos
==
pMD
->
coder
.
size
);
struct
SMDListNode
*
pNode
;
pNode
=
TD_SLIST_HEAD
(
&
(
pMD
->
dStack
));
ASSERT
(
pNode
);
TD_SLIST_POP
(
&
(
pMD
->
dStack
));
pNode
->
coder
.
pos
+=
pMD
->
coder
.
size
;
pMD
->
coder
=
pNode
->
coder
;
free
(
pNode
);
}
\ No newline at end of file
source/libs/catalog/CMakeLists.txt
浏览文件 @
10952778
...
...
@@ -11,4 +11,6 @@ target_link_libraries(
PRIVATE os util transport qcom
)
ADD_SUBDIRECTORY
(
test
)
\ No newline at end of file
if
(
${
BUILD_TEST
}
)
ADD_SUBDIRECTORY
(
test
)
endif
(
${
BUILD_TEST
}
)
\ No newline at end of file
source/libs/index/inc/index_fst_counting_writer.h
浏览文件 @
10952778
...
...
@@ -38,6 +38,7 @@ typedef struct WriterCtx {
int
fd
;
bool
readOnly
;
char
buf
[
256
];
int
size
;
}
file
;
struct
{
int32_t
capa
;
...
...
source/libs/index/src/index.c
浏览文件 @
10952778
...
...
@@ -73,6 +73,7 @@ int indexOpen(SIndexOpts* opts, const char* path, SIndex** index) {
#ifdef USE_INVERTED_INDEX
// sIdx->cache = (void*)indexCacheCreate(sIdx);
sIdx
->
tindex
=
indexTFileCreate
(
path
);
if
(
sIdx
->
tindex
==
NULL
)
{
goto
END
;
}
sIdx
->
colObj
=
taosHashInit
(
8
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
true
,
HASH_ENTRY_LOCK
);
sIdx
->
cVersion
=
1
;
sIdx
->
path
=
calloc
(
1
,
strlen
(
path
)
+
1
);
...
...
@@ -83,6 +84,8 @@ int indexOpen(SIndexOpts* opts, const char* path, SIndex** index) {
return
0
;
#endif
END:
if
(
sIdx
!=
NULL
)
{
indexClose
(
sIdx
);
}
*
index
=
NULL
;
return
-
1
;
...
...
@@ -135,7 +138,7 @@ int indexPut(SIndex* index, SIndexMultiTerm* fVals, uint64_t uid) {
SIndexTerm
*
p
=
taosArrayGetP
(
fVals
,
i
);
char
buf
[
128
]
=
{
0
};
ICacheKey
key
=
{.
suid
=
p
->
suid
,
.
colName
=
p
->
colName
};
ICacheKey
key
=
{.
suid
=
p
->
suid
,
.
colName
=
p
->
colName
,
.
nColName
=
strlen
(
p
->
colName
)
};
int32_t
sz
=
indexSerialCacheKey
(
&
key
,
buf
);
IndexCache
**
cache
=
taosHashGet
(
index
->
colObj
,
buf
,
sz
);
...
...
@@ -150,7 +153,7 @@ int indexPut(SIndex* index, SIndexMultiTerm* fVals, uint64_t uid) {
SIndexTerm
*
p
=
taosArrayGetP
(
fVals
,
i
);
char
buf
[
128
]
=
{
0
};
ICacheKey
key
=
{.
suid
=
p
->
suid
,
.
colName
=
p
->
colName
};
ICacheKey
key
=
{.
suid
=
p
->
suid
,
.
colName
=
p
->
colName
,
.
nColName
=
strlen
(
p
->
colName
)
};
int32_t
sz
=
indexSerialCacheKey
(
&
key
,
buf
);
IndexCache
**
cache
=
taosHashGet
(
index
->
colObj
,
buf
,
sz
);
...
...
@@ -212,7 +215,7 @@ int indexSearch(SIndex* index, SIndexMultiTermQuery* multiQuerys, SArray* result
indexInterResultsDestroy
(
interResults
);
#endif
return
1
;
return
0
;
}
int
indexDelete
(
SIndex
*
index
,
SIndexMultiTermQuery
*
query
)
{
...
...
@@ -310,7 +313,7 @@ static int indexTermSearch(SIndex* sIdx, SIndexTermQuery* query, SArray** result
pthread_mutex_lock
(
&
sIdx
->
mtx
);
char
buf
[
128
]
=
{
0
};
ICacheKey
key
=
{.
suid
=
term
->
suid
,
.
colName
=
term
->
colName
};
ICacheKey
key
=
{.
suid
=
term
->
suid
,
.
colName
=
term
->
colName
,
.
nColName
=
strlen
(
term
->
colName
)
};
int32_t
sz
=
indexSerialCacheKey
(
&
key
,
buf
);
IndexCache
**
pCache
=
taosHashGet
(
sIdx
->
colObj
,
buf
,
sz
);
...
...
source/libs/index/src/index_cache.c
浏览文件 @
10952778
...
...
@@ -20,7 +20,7 @@
#define MAX_INDEX_KEY_LEN 256 // test only, change later
#define MEM_TERM_LIMIT
10
* 10000
#define MEM_TERM_LIMIT
5
* 10000
// ref index_cache.h:22
//#define CACHE_KEY_LEN(p) \
// (sizeof(int32_t) + sizeof(uint16_t) + sizeof(p->colType) + sizeof(p->nColVal) + p->nColVal + sizeof(uint64_t) +
...
...
source/libs/index/src/index_fst_counting_writer.c
浏览文件 @
10952778
...
...
@@ -72,9 +72,17 @@ WriterCtx* writerCtxCreate(WriterType type, const char* path, bool readOnly, int
if
(
readOnly
==
false
)
{
// ctx->file.fd = open(path, O_WRONLY | O_CREAT | O_APPEND, S_IRWXU | S_IRWXG | S_IRWXO);
ctx
->
file
.
fd
=
tfOpenCreateWriteAppend
(
path
);
struct
stat
fstat
;
stat
(
path
,
&
fstat
);
ctx
->
file
.
size
=
fstat
.
st_size
;
}
else
{
// ctx->file.fd = open(path, O_RDONLY, S_IRWXU | S_IRWXG | S_IRWXO);
ctx
->
file
.
fd
=
tfOpenRead
(
path
);
struct
stat
fstat
;
stat
(
path
,
&
fstat
);
ctx
->
file
.
size
=
fstat
.
st_size
;
}
memcpy
(
ctx
->
file
.
buf
,
path
,
strlen
(
path
));
if
(
ctx
->
file
.
fd
<
0
)
{
...
...
@@ -104,6 +112,7 @@ void writerCtxDestroy(WriterCtx* ctx, bool remove) {
free
(
ctx
->
mem
.
buf
);
}
else
{
tfClose
(
ctx
->
file
.
fd
);
ctx
->
flush
(
ctx
);
if
(
remove
)
{
unlink
(
ctx
->
file
.
buf
);
}
}
free
(
ctx
);
...
...
source/libs/index/src/index_tfile.c
浏览文件 @
10952778
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
p
*
* 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.
...
...
@@ -45,12 +45,13 @@ static int tfileReaderLoadHeader(TFileReader* reader);
static
int
tfileReaderLoadFst
(
TFileReader
*
reader
);
static
int
tfileReaderLoadTableIds
(
TFileReader
*
reader
,
int32_t
offset
,
SArray
*
result
);
static
int
tfileGetFileList
(
const
char
*
path
,
SArray
*
result
);
static
SArray
*
tfileGetFileList
(
const
char
*
path
);
static
int
tfileRmExpireFile
(
SArray
*
result
);
static
void
tfileDestroyFileName
(
void
*
elem
);
static
int
tfileCompare
(
const
void
*
a
,
const
void
*
b
);
static
int
tfileParseFileName
(
const
char
*
filename
,
uint64_t
*
suid
,
int
*
colId
,
int
*
version
);
static
void
tfileGenFileName
(
char
*
filename
,
uint64_t
suid
,
int
colId
,
int
version
);
static
int
tfileParseFileName
(
const
char
*
filename
,
uint64_t
*
suid
,
char
*
col
,
int
*
version
);
static
void
tfileGenFileName
(
char
*
filename
,
uint64_t
suid
,
const
char
*
col
,
int
version
);
static
void
tfileGenFileFullName
(
char
*
fullname
,
const
char
*
path
,
uint64_t
suid
,
const
char
*
col
,
int32_t
version
);
TFileCache
*
tfileCacheCreate
(
const
char
*
path
)
{
TFileCache
*
tcache
=
calloc
(
1
,
sizeof
(
TFileCache
));
...
...
@@ -59,21 +60,24 @@ TFileCache* tfileCacheCreate(const char* path) {
tcache
->
tableCache
=
taosHashInit
(
8
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
true
,
HASH_ENTRY_LOCK
);
tcache
->
capacity
=
64
;
SArray
*
files
=
taosArrayInit
(
4
,
sizeof
(
void
*
));
tfileGetFileList
(
path
,
files
);
taosArraySort
(
files
,
tfileCompare
);
tfileRmExpireFile
(
files
);
SArray
*
files
=
tfileGetFileList
(
path
);
uint64_t
suid
;
int32_t
colId
,
version
;
for
(
size_t
i
=
0
;
i
<
taosArrayGetSize
(
files
);
i
++
)
{
char
*
file
=
taosArrayGetP
(
files
,
i
);
if
(
0
!=
tfileParseFileName
(
file
,
&
suid
,
(
int
*
)
&
colId
,
(
int
*
)
&
version
))
{
// refactor later, use colname and version info
char
colName
[
256
]
=
{
0
};
if
(
0
!=
tfileParseFileName
(
file
,
&
suid
,
colName
,
(
int
*
)
&
version
))
{
indexInfo
(
"try parse invalid file: %s, skip it"
,
file
);
continue
;
}
WriterCtx
*
wc
=
writerCtxCreate
(
TFile
,
file
,
true
,
1024
*
1024
*
64
);
char
fullName
[
256
]
=
{
0
};
sprintf
(
fullName
,
"%s/%s"
,
path
,
file
);
WriterCtx
*
wc
=
writerCtxCreate
(
TFile
,
fullName
,
true
,
1024
*
1024
*
64
);
if
(
wc
==
NULL
)
{
indexError
(
"failed to open index:%s"
,
file
);
goto
End
;
...
...
@@ -200,12 +204,9 @@ int tfileReaderSearch(TFileReader* reader, SIndexTermQuery* query, SArray* resul
}
TFileWriter
*
tfileWriterOpen
(
char
*
path
,
uint64_t
suid
,
int32_t
version
,
const
char
*
colName
,
uint8_t
colType
)
{
char
filename
[
128
]
=
{
0
};
int32_t
coldId
=
1
;
tfileGenFileName
(
filename
,
suid
,
coldId
,
version
);
char
fullname
[
256
]
=
{
0
};
snprintf
(
fullname
,
sizeof
(
fullname
),
"%s/%s"
,
path
,
filename
);
tfileGenFileFullName
(
fullname
,
path
,
suid
,
colName
,
version
);
// indexInfo("open write file name %s", fullname);
WriterCtx
*
wcx
=
writerCtxCreate
(
TFile
,
fullname
,
false
,
1024
*
1024
*
64
);
if
(
wcx
==
NULL
)
{
return
NULL
;
}
...
...
@@ -218,13 +219,11 @@ TFileWriter* tfileWriterOpen(char* path, uint64_t suid, int32_t version, const c
return
tfileWriterCreate
(
wcx
,
&
tfh
);
}
TFileReader
*
tfileReaderOpen
(
char
*
path
,
uint64_t
suid
,
int32_t
version
,
const
char
*
colName
)
{
char
filename
[
128
]
=
{
0
};
int32_t
coldId
=
1
;
tfileGenFileName
(
filename
,
suid
,
coldId
,
version
);
char
fullname
[
256
]
=
{
0
};
snprintf
(
fullname
,
sizeof
(
fullname
),
"%s/%s"
,
path
,
filename
);
tfileGenFileFullName
(
fullname
,
path
,
suid
,
colName
,
version
);
WriterCtx
*
wc
=
writerCtxCreate
(
TFile
,
fullname
,
true
,
1024
*
1024
*
1024
);
// indexInfo("open read file name:%s, size: %d", wc->file.buf, wc->file.size);
if
(
wc
==
NULL
)
{
return
NULL
;
}
TFileReader
*
reader
=
tfileReaderCreate
(
wc
);
...
...
@@ -324,7 +323,6 @@ int tfileWriterPut(TFileWriter* tw, void* data, bool order) {
}
// write data
indexError
(
"--------Begin----------------"
);
for
(
size_t
i
=
0
;
i
<
sz
;
i
++
)
{
// TODO, fst batch write later
TFileValue
*
v
=
taosArrayGetP
((
SArray
*
)
data
,
i
);
...
...
@@ -332,11 +330,10 @@ int tfileWriterPut(TFileWriter* tw, void* data, bool order) {
indexError
(
"failed to write data: %s, offset: %d len: %d"
,
v
->
colVal
,
v
->
offset
,
(
int
)
taosArrayGetSize
(
v
->
tableId
));
}
else
{
indexInfo
(
"success to write data: %s, offset: %d len: %d"
,
v
->
colVal
,
v
->
offset
,
(
int
)
taosArrayGetSize
(
v
->
tableId
));
//
indexInfo("success to write data: %s, offset: %d len: %d", v->colVal, v->offset,
//
(int)taosArrayGetSize(v->tableId));
}
}
indexError
(
"--------End----------------"
);
fstBuilderFinish
(
tw
->
fb
);
fstBuilderDestroy
(
tw
->
fb
);
tw
->
fb
=
NULL
;
...
...
@@ -361,6 +358,7 @@ IndexTFile* indexTFileCreate(const char* path) {
return
tfile
;
}
void
indexTFileDestroy
(
IndexTFile
*
tfile
)
{
if
(
tfile
==
NULL
)
{
return
;
}
tfileCacheDestroy
(
tfile
->
cache
);
free
(
tfile
);
}
...
...
@@ -550,6 +548,9 @@ static int tfileReaderLoadHeader(TFileReader* reader) {
//
indexError
(
"actual Read: %d, to read: %d, errno: %d, filefd: %d, filename: %s"
,
(
int
)(
nread
),
(
int
)
sizeof
(
buf
),
errno
,
reader
->
ctx
->
file
.
fd
,
reader
->
ctx
->
file
.
buf
);
}
else
{
indexError
(
"actual Read: %d, to read: %d, errno: %d, filefd: %d, filename: %s"
,
(
int
)(
nread
),
(
int
)
sizeof
(
buf
),
errno
,
reader
->
ctx
->
file
.
fd
,
reader
->
ctx
->
file
.
buf
);
}
// assert(nread == sizeof(buf));
memcpy
(
&
reader
->
header
,
buf
,
sizeof
(
buf
));
...
...
@@ -558,13 +559,14 @@ static int tfileReaderLoadHeader(TFileReader* reader) {
}
static
int
tfileReaderLoadFst
(
TFileReader
*
reader
)
{
// current load fst into memory, refactor it later
static
int
FST_MAX_SIZE
=
64
*
1024
;
static
int
FST_MAX_SIZE
=
64
*
1024
*
1024
;
char
*
buf
=
calloc
(
1
,
sizeof
(
char
)
*
FST_MAX_SIZE
);
if
(
buf
==
NULL
)
{
return
-
1
;
}
WriterCtx
*
ctx
=
reader
->
ctx
;
int32_t
nread
=
ctx
->
readFrom
(
ctx
,
buf
,
FST_MAX_SIZE
,
reader
->
header
.
fstOffset
);
indexError
(
"nread = %d, and fst offset=%d, filename: %s "
,
nread
,
reader
->
header
.
fstOffset
,
ctx
->
file
.
buf
);
// we assuse fst size less than FST_MAX_SIZE
assert
(
nread
>
0
&&
nread
<
FST_MAX_SIZE
);
...
...
@@ -608,19 +610,26 @@ void tfileReaderUnRef(TFileReader* reader) {
}
}
static
int
tfileGetFileList
(
const
char
*
path
,
SArray
*
result
)
{
static
SArray
*
tfileGetFileList
(
const
char
*
path
)
{
SArray
*
files
=
taosArrayInit
(
4
,
sizeof
(
void
*
));
DIR
*
dir
=
opendir
(
path
);
if
(
NULL
==
dir
)
{
return
-
1
;
}
if
(
NULL
==
dir
)
{
return
NULL
;
}
struct
dirent
*
entry
;
while
((
entry
=
readdir
(
dir
))
!=
NULL
)
{
if
(
entry
->
d_type
&&
DT_DIR
)
{
continue
;
}
size_t
len
=
strlen
(
entry
->
d_name
);
char
*
buf
=
calloc
(
1
,
len
+
1
);
memcpy
(
buf
,
entry
->
d_name
,
len
);
taosArrayPush
(
result
,
&
buf
);
taosArrayPush
(
files
,
&
buf
);
}
closedir
(
dir
);
return
0
;
taosArraySort
(
files
,
tfileCompare
);
tfileRmExpireFile
(
files
);
return
files
;
}
static
int
tfileRmExpireFile
(
SArray
*
result
)
{
// TODO(yihao): remove expire tindex after restart
...
...
@@ -641,15 +650,21 @@ static int tfileCompare(const void* a, const void* b) {
if
(
ret
==
0
)
{
return
ret
;
}
return
ret
<
0
?
-
1
:
1
;
}
// tfile name suid-colId-version.tindex
static
void
tfileGenFileName
(
char
*
filename
,
uint64_t
suid
,
int
colId
,
int
version
)
{
sprintf
(
filename
,
"%"
PRIu64
"-%d-%d.tindex"
,
suid
,
colId
,
version
);
return
;
}
static
int
tfileParseFileName
(
const
char
*
filename
,
uint64_t
*
suid
,
int
*
colId
,
int
*
version
)
{
if
(
3
==
sscanf
(
filename
,
"%"
PRIu64
"-%d-%d.tindex"
,
suid
,
colId
,
version
))
{
static
int
tfileParseFileName
(
const
char
*
filename
,
uint64_t
*
suid
,
char
*
col
,
int
*
version
)
{
if
(
3
==
sscanf
(
filename
,
"%"
PRIu64
"-%[^-]-%d.tindex"
,
suid
,
col
,
version
))
{
// read suid & colid & version success
return
0
;
}
return
-
1
;
}
// tfile name suid-colId-version.tindex
static
void
tfileGenFileName
(
char
*
filename
,
uint64_t
suid
,
const
char
*
col
,
int
version
)
{
sprintf
(
filename
,
"%"
PRIu64
"-%s-%d.tindex"
,
suid
,
col
,
version
);
return
;
}
static
void
tfileGenFileFullName
(
char
*
fullname
,
const
char
*
path
,
uint64_t
suid
,
const
char
*
col
,
int32_t
version
)
{
char
filename
[
128
]
=
{
0
};
tfileGenFileName
(
filename
,
suid
,
col
,
version
);
sprintf
(
fullname
,
"%s/%s"
,
path
,
filename
);
}
source/libs/index/test/indexTests.cc
浏览文件 @
10952778
...
...
@@ -13,6 +13,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <gtest/gtest.h>
#include <algorithm>
#include <iostream>
#include <string>
#include <thread>
...
...
@@ -638,7 +639,7 @@ class IndexObj {
indexInit
();
}
int
Init
(
const
std
::
string
&
dir
)
{
taosRemoveDir
(
dir
.
c_str
());
//
taosRemoveDir(dir.c_str());
taosMkDir
(
dir
.
c_str
());
int
ret
=
indexOpen
(
&
opts
,
dir
.
c_str
(),
&
idx
);
if
(
ret
!=
0
)
{
...
...
@@ -663,10 +664,11 @@ class IndexObj {
int
WriteMultiMillonData
(
const
std
::
string
&
colName
,
const
std
::
string
&
colVal
=
"Hello world"
,
size_t
numOfTable
=
100
*
10000
)
{
std
::
string
tColVal
=
colVal
;
size_t
colValSize
=
tColVal
.
size
();
for
(
int
i
=
0
;
i
<
numOfTable
;
i
++
)
{
tColVal
[
tColVal
.
size
()
-
1
]
=
'a'
+
i
%
26
;
tColVal
[
i
%
colValSize
]
=
'a'
+
i
%
26
;
SIndexTerm
*
term
=
indexTermCreate
(
0
,
ADD_VALUE
,
TSDB_DATA_TYPE_BINARY
,
colName
.
c_str
(),
colName
.
size
(),
colVal
.
c_str
(),
c
olVal
.
size
());
tColVal
.
c_str
(),
tC
olVal
.
size
());
SIndexMultiTerm
*
terms
=
indexMultiTermCreate
();
indexMultiTermAdd
(
terms
,
term
);
for
(
size_t
i
=
0
;
i
<
10
;
i
++
)
{
...
...
@@ -695,7 +697,13 @@ class IndexObj {
indexMultiTermQueryAdd
(
mq
,
term
,
QUERY_TERM
);
SArray
*
result
=
(
SArray
*
)
taosArrayInit
(
1
,
sizeof
(
uint64_t
));
if
(
Search
(
mq
,
result
)
==
0
)
{
std
::
cout
<<
"search one successfully"
<<
std
::
endl
;
}
int64_t
s
=
taosGetTimestampUs
();
if
(
Search
(
mq
,
result
)
==
0
)
{
int64_t
e
=
taosGetTimestampUs
();
std
::
cout
<<
"search one successfully and time cost:"
<<
e
-
s
<<
std
::
endl
;
}
else
{
}
int
sz
=
taosArrayGetSize
(
result
);
indexMultiTermQueryDestroy
(
mq
);
taosArrayDestroy
(
result
);
...
...
@@ -810,7 +818,7 @@ TEST_F(IndexEnv2, testIndexOpen) {
}
TEST_F
(
IndexEnv2
,
testIndex_TrigeFlush
)
{
std
::
string
path
=
"/tmp/test
1
"
;
std
::
string
path
=
"/tmp/test
xxx
"
;
if
(
index
->
Init
(
path
)
!=
0
)
{
// r
std
::
cout
<<
"failed to init"
<<
std
::
endl
;
...
...
@@ -826,6 +834,10 @@ static void write_and_search(IndexObj* idx) {
std
::
string
colName
(
"tag1"
),
colVal
(
"Hello"
);
int
target
=
idx
->
SearchOne
(
"tag1"
,
"Hello"
);
std
::
cout
<<
"search: "
<<
target
<<
std
::
endl
;
target
=
idx
->
SearchOne
(
"tag2"
,
"Test"
);
std
::
cout
<<
"search: "
<<
target
<<
std
::
endl
;
idx
->
PutOne
(
colName
,
colVal
);
}
TEST_F
(
IndexEnv2
,
testIndex_serarch_cache_and_tfile
)
{
...
...
@@ -833,7 +845,10 @@ TEST_F(IndexEnv2, testIndex_serarch_cache_and_tfile) {
if
(
index
->
Init
(
path
)
!=
0
)
{
// opt
}
index
->
WriteMultiMillonData
(
"tag1"
,
"Hello"
,
200000
);
index
->
PutOne
(
"tag1"
,
"Hello"
);
index
->
PutOne
(
"tag2"
,
"Test"
);
index
->
WriteMultiMillonData
(
"tag1"
,
"Hello"
,
50
*
10000
);
index
->
WriteMultiMillonData
(
"tag2"
,
"Test"
,
50
*
10000
);
std
::
thread
threads
[
NUM_OF_THREAD
];
for
(
int
i
=
0
;
i
<
NUM_OF_THREAD
;
i
++
)
{
...
...
@@ -847,15 +862,15 @@ TEST_F(IndexEnv2, testIndex_serarch_cache_and_tfile) {
}
TEST_F
(
IndexEnv2
,
testIndex_restart
)
{
std
::
string
path
=
"/tmp"
;
std
::
string
path
=
"/tmp
/test1
"
;
if
(
index
->
Init
(
path
)
!=
0
)
{}
}
TEST_F
(
IndexEnv2
,
testIndex_performance
)
{
std
::
string
path
=
"/tmp"
;
std
::
string
path
=
"/tmp
/test2
"
;
if
(
index
->
Init
(
path
)
!=
0
)
{}
}
TEST_F
(
IndexEnv2
,
testIndexMultiTag
)
{
std
::
string
path
=
"/tmp"
;
std
::
string
path
=
"/tmp
/test3
"
;
if
(
index
->
Init
(
path
)
!=
0
)
{}
}
source/libs/parser/CMakeLists.txt
浏览文件 @
10952778
...
...
@@ -11,4 +11,6 @@ target_link_libraries(
PRIVATE os util catalog function transport qcom
)
ADD_SUBDIRECTORY
(
test
)
if
(
${
BUILD_TEST
}
)
ADD_SUBDIRECTORY
(
test
)
endif
(
${
BUILD_TEST
}
)
source/libs/parser/inc/sql.y
浏览文件 @
10952778
...
...
@@ -392,7 +392,7 @@ create_table_args(A) ::= ifnotexists(U) ids(V) cpxName(Z) LP columnlist(X) RP. {
%type create_stable_args{SCreateTableSql*}
create_stable_args(A) ::= ifnotexists(U) ids(V) cpxName(Z) LP columnlist(X) RP TAGS LP columnlist(Y) RP. {
A = tSetCreateTableInfo(X, Y, NULL, TSQL_CREATE_STABLE);
setSqlInfo(pInfo, A, NULL, TSDB_SQL_CREATE_TABLE);
setSqlInfo(pInfo, A, NULL, TSDB_SQL_CREATE_
S
TABLE);
V.n += Z.n;
setCreatedTableName(pInfo, &V, &U);
...
...
source/libs/parser/src/astGenerator.c
浏览文件 @
10952778
...
...
@@ -785,7 +785,7 @@ void destroySqlInfo(SSqlInfo *pInfo) {
taosArrayDestroy
(
pInfo
->
funcs
);
if
(
pInfo
->
type
==
TSDB_SQL_SELECT
)
{
destroyAllSqlNode
(
&
pInfo
->
sub
);
}
else
if
(
pInfo
->
type
==
TSDB_SQL_CREATE_TABLE
)
{
}
else
if
(
pInfo
->
type
==
TSDB_SQL_CREATE_
S
TABLE
)
{
pInfo
->
pCreateTableInfo
=
destroyCreateTableSql
(
pInfo
->
pCreateTableInfo
);
}
else
if
(
pInfo
->
type
==
TSDB_SQL_ALTER_TABLE
)
{
taosArrayDestroyEx
(
pInfo
->
pAlterInfo
->
varList
,
freeItem
);
...
...
source/libs/parser/src/dCDAstProcess.c
浏览文件 @
10952778
...
...
@@ -761,8 +761,9 @@ SDclStmtInfo* qParserValidateDclSqlNode(SSqlInfo* pInfo, SParseBasicCtx* pCtx, c
break
;
}
case
TSDB_SQL_CREATE_TABLE
:
{
case
TSDB_SQL_CREATE_
S
TABLE
:
{
SCreateTableSql
*
pCreateTable
=
pInfo
->
pCreateTableInfo
;
assert
(
pCreateTable
->
type
!=
TSQL_CREATE_CTABLE
);
if
(
pCreateTable
->
type
==
TSQL_CREATE_TABLE
||
pCreateTable
->
type
==
TSQL_CREATE_STABLE
)
{
if
((
code
=
doCheckForCreateTable
(
pInfo
,
pMsgBuf
))
!=
TSDB_CODE_SUCCESS
)
{
...
...
@@ -772,13 +773,6 @@ SDclStmtInfo* qParserValidateDclSqlNode(SSqlInfo* pInfo, SParseBasicCtx* pCtx, c
pDcl
->
pMsg
=
(
char
*
)
buildCreateTableMsg
(
pCreateTable
,
&
pDcl
->
msgLen
,
pCtx
,
pMsgBuf
);
pDcl
->
msgType
=
(
pCreateTable
->
type
==
TSQL_CREATE_TABLE
)
?
TDMT_VND_CREATE_TABLE
:
TDMT_MND_CREATE_STB
;
}
else
if
(
pCreateTable
->
type
==
TSQL_CREATE_CTABLE
)
{
if
((
code
=
doCheckForCreateCTable
(
pInfo
,
pCtx
,
pMsgBuf
,
&
pDcl
->
pMsg
,
&
pDcl
->
msgLen
))
!=
TSDB_CODE_SUCCESS
)
{
goto
_error
;
}
pDcl
->
msgType
=
TDMT_VND_CREATE_TABLE
;
}
else
if
(
pCreateTable
->
type
==
TSQL_CREATE_STREAM
)
{
// if ((code = doCheckForStream(pSql, pInfo)) != TSDB_CODE_SUCCESS) {
// return code;
...
...
source/libs/parser/src/sql.c
浏览文件 @
10952778
...
...
@@ -131,16 +131,16 @@ typedef union {
#define ParseARG_STORE yypParser->pInfo = pInfo
#define YYFALLBACK 1
#define YYNSTATE 366
#define YYNRULE 30
3
#define YYNRULE 30
2
#define YYNTOKEN 191
#define YY_MAX_SHIFT 365
#define YY_MIN_SHIFTREDUCE 58
7
#define YY_MAX_SHIFTREDUCE 88
9
#define YY_ERROR_ACTION 8
90
#define YY_ACCEPT_ACTION 8
91
#define YY_NO_ACTION 89
2
#define YY_MIN_REDUCE 89
3
#define YY_MAX_REDUCE 119
5
#define YY_MIN_SHIFTREDUCE 58
6
#define YY_MAX_SHIFTREDUCE 88
7
#define YY_ERROR_ACTION 8
88
#define YY_ACCEPT_ACTION 8
89
#define YY_NO_ACTION 89
0
#define YY_MIN_REDUCE 89
1
#define YY_MAX_REDUCE 119
2
/************* End control #defines *******************************************/
/* Define the yytestcase() macro to be a no-op if is not already defined
...
...
@@ -206,168 +206,167 @@ typedef union {
** yy_default[] Default action for each state.
**
*********** Begin parsing tables **********************************************/
#define YY_ACTTAB_COUNT (7
82
)
#define YY_ACTTAB_COUNT (7
77
)
static
const
YYACTIONTYPE
yy_action
[]
=
{
/* 0 */
249
,
638
,
364
,
230
,
162
,
639
,
248
,
55
,
56
,
638
,
/* 10 */
59
,
60
,
1031
,
639
,
252
,
49
,
48
,
47
,
94
,
58
,
/* 20 */
323
,
63
,
61
,
64
,
62
,
674
,
1080
,
891
,
365
,
54
,
/* 30 */
53
,
206
,
82
,
52
,
51
,
50
,
253
,
55
,
56
,
638
,
/* 40 */
59
,
60
,
1171
,
639
,
252
,
49
,
48
,
47
,
21
,
58
,
/* 50 */
323
,
63
,
61
,
64
,
62
,
1017
,
203
,
1015
,
1016
,
54
,
/* 60 */
53
,
206
,
1018
,
52
,
51
,
50
,
1019
,
206
,
1020
,
1021
,
/* 70 */
832
,
835
,
1172
,
55
,
56
,
1070
,
59
,
60
,
1172
,
1118
,
/* 80 */
252
,
49
,
48
,
47
,
81
,
58
,
323
,
63
,
61
,
64
,
/* 90 */
62
,
321
,
319
,
274
,
1077
,
54
,
53
,
206
,
638
,
52
,
/* 100 */
51
,
50
,
639
,
55
,
57
,
353
,
59
,
60
,
1172
,
826
,
/* 110 */
252
,
49
,
48
,
47
,
155
,
58
,
323
,
63
,
61
,
64
,
/* 120 */
62
,
42
,
319
,
359
,
358
,
54
,
53
,
162
,
357
,
52
,
/* 130 */
51
,
50
,
356
,
87
,
355
,
354
,
162
,
162
,
588
,
589
,
/* 140 */
590
,
591
,
592
,
593
,
594
,
595
,
596
,
597
,
598
,
599
,
/* 150 */
600
,
601
,
153
,
56
,
231
,
59
,
60
,
236
,
1057
,
252
,
/* 160 */
49
,
48
,
47
,
87
,
58
,
323
,
63
,
61
,
64
,
62
,
/* 170 */
772
,
43
,
32
,
86
,
54
,
53
,
255
,
204
,
52
,
51
,
/* 180 */
50
,
309
,
209
,
280
,
279
,
59
,
60
,
941
,
839
,
252
,
/* 190 */
49
,
48
,
47
,
188
,
58
,
323
,
63
,
61
,
64
,
62
,
/* 200 */
294
,
43
,
92
,
242
,
54
,
53
,
300
,
1045
,
52
,
51
,
/* 210 */
50
,
1119
,
93
,
292
,
42
,
317
,
359
,
358
,
316
,
315
,
/* 220 */
314
,
357
,
313
,
312
,
311
,
356
,
310
,
355
,
354
,
99
,
/* 230 */
22
,
1010
,
998
,
999
,
1000
,
1001
,
1002
,
1003
,
1004
,
1005
,
/* 240 */
1006
,
1007
,
1008
,
1009
,
1011
,
1012
,
1013
,
215
,
251
,
841
,
/* 250 */
830
,
833
,
836
,
256
,
216
,
254
,
776
,
331
,
330
,
250
,
/* 260 */
137
,
136
,
135
,
217
,
1033
,
266
,
719
,
328
,
87
,
251
,
/* 270 */
841
,
830
,
833
,
836
,
270
,
269
,
228
,
229
,
831
,
834
,
/* 280 */
324
,
4
,
63
,
61
,
64
,
62
,
755
,
752
,
753
,
754
,
/* 290 */
54
,
53
,
343
,
342
,
52
,
51
,
50
,
228
,
229
,
747
,
/* 300 */
744
,
745
,
746
,
52
,
51
,
50
,
43
,
3
,
39
,
178
,
/* 310 */
152
,
150
,
149
,
257
,
258
,
105
,
77
,
101
,
108
,
1039
,
/* 320 */
96
,
791
,
792
,
260
,
36
,
65
,
244
,
245
,
273
,
36
,
/* 330 */
79
,
197
,
195
,
193
,
36
,
305
,
210
,
224
,
192
,
141
,
/* 340 */
140
,
139
,
138
,
36
,
36
,
36
,
65
,
122
,
116
,
126
,
/* 350 */
36
,
211
,
1028
,
1029
,
33
,
1032
,
131
,
134
,
125
,
638
,
/* 360 */
36
,
842
,
837
,
639
,
243
,
128
,
36
,
232
,
838
,
54
,
/* 370 */
53
,
1042
,
240
,
52
,
51
,
50
,
1042
,
241
,
36
,
36
,
/* 380 */
36
,
1042
,
842
,
837
,
1166
,
261
,
332
,
333
,
334
,
838
,
/* 390 */
1042
,
1042
,
1042
,
335
,
176
,
12
,
840
,
1042
,
756
,
757
,
/* 400 */
262
,
95
,
259
,
339
,
338
,
337
,
171
,
1042
,
363
,
362
,
/* 410 */
146
,
748
,
749
,
1041
,
246
,
80
,
808
,
1070
,
1045
,
1070
,
/* 420 */
261
,
340
,
341
,
345
,
282
,
1042
,
1042
,
1042
,
124
,
177
,
/* 430 */
98
,
261
,
952
,
942
,
769
,
233
,
27
,
234
,
188
,
188
,
/* 440 */
1043
,
275
,
353
,
360
,
979
,
84
,
85
,
788
,
1030
,
798
,
/* 450 */
799
,
71
,
74
,
729
,
297
,
731
,
299
,
37
,
325
,
7
,
/* 460 */
742
,
743
,
730
,
157
,
828
,
66
,
24
,
740
,
741
,
37
,
/* 470 */
37
,
67
,
97
,
864
,
807
,
760
,
761
,
843
,
67
,
637
,
/* 480 */
14
,
78
,
13
,
70
,
70
,
115
,
1165
,
114
,
16
,
23
,
/* 490 */
15
,
75
,
72
,
23
,
1111
,
23
,
829
,
758
,
759
,
133
,
/* 500 */
132
,
18
,
121
,
17
,
120
,
20
,
1164
,
19
,
1129
,
226
,
/* 510 */
322
,
227
,
207
,
1056
,
718
,
208
,
212
,
205
,
213
,
214
,
/* 520 */
1044
,
219
,
1072
,
220
,
1191
,
221
,
218
,
202
,
1128
,
1183
,
/* 530 */
238
,
1125
,
1124
,
239
,
344
,
271
,
154
,
44
,
172
,
1079
,
/* 540 */
151
,
1110
,
1090
,
1087
,
1088
,
1071
,
277
,
1092
,
1040
,
156
,
/* 550 */
1068
,
281
,
235
,
283
,
31
,
161
,
285
,
165
,
288
,
173
,
/* 560 */
163
,
168
,
787
,
845
,
164
,
276
,
1038
,
174
,
166
,
169
,
/* 570 */
167
,
291
,
175
,
956
,
302
,
303
,
304
,
76
,
307
,
308
,
/* 580 */
200
,
40
,
320
,
951
,
950
,
329
,
1190
,
112
,
73
,
1189
,
/* 590 */
1186
,
179
,
46
,
336
,
295
,
1182
,
118
,
287
,
1181
,
1178
,
/* 600 */
180
,
976
,
41
,
38
,
201
,
939
,
127
,
937
,
129
,
130
,
/* 610 */
935
,
934
,
263
,
190
,
191
,
931
,
930
,
929
,
928
,
293
,
/* 620 */
927
,
926
,
925
,
194
,
196
,
922
,
920
,
918
,
916
,
198
,
/* 630 */
913
,
199
,
909
,
289
,
284
,
83
,
88
,
45
,
286
,
1112
,
/* 640 */
306
,
123
,
346
,
225
,
247
,
347
,
301
,
348
,
349
,
351
,
/* 650 */
222
,
223
,
350
,
352
,
361
,
955
,
954
,
106
,
889
,
264
,
/* 660 */
265
,
888
,
267
,
268
,
887
,
870
,
933
,
869
,
272
,
183
,
/* 670 */
182
,
977
,
932
,
181
,
142
,
184
,
185
,
187
,
186
,
143
,
/* 680 */
144
,
924
,
978
,
923
,
2
,
70
,
145
,
915
,
914
,
296
,
/* 690 */
8
,
28
,
1
,
763
,
278
,
170
,
789
,
89
,
158
,
160
,
/* 700 */
800
,
159
,
237
,
794
,
90
,
29
,
796
,
91
,
290
,
9
,
/* 710 */
30
,
10
,
11
,
25
,
26
,
298
,
100
,
34
,
98
,
103
,
/* 720 */
652
,
102
,
690
,
35
,
104
,
687
,
685
,
684
,
683
,
681
,
/* 730 */
680
,
679
,
676
,
642
,
326
,
327
,
107
,
111
,
109
,
318
,
/* 740 */
113
,
110
,
5
,
68
,
844
,
846
,
6
,
69
,
721
,
37
,
/* 750 */
117
,
119
,
720
,
717
,
668
,
666
,
658
,
664
,
660
,
662
,
/* 760 */
656
,
654
,
689
,
688
,
686
,
682
,
678
,
677
,
189
,
640
,
/* 770 */
893
,
605
,
892
,
892
,
892
,
892
,
892
,
892
,
892
,
892
,
/* 780 */
147
,
148
,
/* 0 */
249
,
637
,
637
,
1077
,
83
,
717
,
248
,
55
,
56
,
88
,
/* 10 */
59
,
60
,
364
,
230
,
252
,
49
,
48
,
47
,
78
,
58
,
/* 20 */
323
,
63
,
61
,
64
,
62
,
236
,
1054
,
889
,
365
,
54
,
/* 30 */
53
,
343
,
342
,
52
,
51
,
50
,
253
,
55
,
56
,
242
,
/* 40 */
59
,
60
,
1027
,
1042
,
252
,
49
,
48
,
47
,
104
,
58
,
/* 50 */
323
,
63
,
61
,
64
,
62
,
1014
,
637
,
1012
,
1013
,
54
,
/* 60 */
53
,
206
,
1015
,
52
,
51
,
50
,
1016
,
206
,
1017
,
1018
,
/* 70 */
121
,
1074
,
1169
,
55
,
56
,
1067
,
59
,
60
,
1169
,
27
,
/* 80 */
252
,
49
,
48
,
47
,
89
,
58
,
323
,
63
,
61
,
64
,
/* 90 */
62
,
206
,
39
,
274
,
246
,
54
,
53
,
206
,
1042
,
52
,
/* 100 */
51
,
50
,
1168
,
55
,
57
,
1030
,
59
,
60
,
1169
,
824
,
/* 110 */
252
,
49
,
48
,
47
,
80
,
58
,
323
,
63
,
61
,
64
,
/* 120 */
62
,
294
,
637
,
81
,
159
,
54
,
53
,
91
,
319
,
52
,
/* 130 */
51
,
50
,
104
,
1067
,
56
,
232
,
59
,
60
,
353
,
1039
,
/* 140 */
252
,
49
,
48
,
47
,
261
,
58
,
323
,
63
,
61
,
64
,
/* 150 */
62
,
233
,
43
,
124
,
79
,
54
,
53
,
80
,
39
,
52
,
/* 160 */
51
,
50
,
587
,
588
,
589
,
590
,
591
,
592
,
593
,
594
,
/* 170 */
595
,
596
,
597
,
598
,
599
,
600
,
199
,
309
,
231
,
59
,
/* 180 */
60
,
939
,
1067
,
252
,
49
,
48
,
47
,
158
,
58
,
323
,
/* 190 */
63
,
61
,
64
,
62
,
353
,
43
,
280
,
279
,
54
,
53
,
/* 200 */
234
,
240
,
52
,
51
,
50
,
1039
,
14
,
1116
,
13
,
292
,
/* 210 */
42
,
317
,
359
,
358
,
316
,
315
,
314
,
357
,
313
,
312
,
/* 220 */
311
,
356
,
310
,
355
,
354
,
1007
,
995
,
996
,
997
,
998
,
/* 230 */
999
,
1000
,
1001
,
1002
,
1003
,
1004
,
1005
,
1006
,
1008
,
1009
,
/* 240 */
1010
,
266
,
12
,
22
,
63
,
61
,
64
,
62
,
84
,
21
,
/* 250 */
270
,
269
,
54
,
53
,
789
,
790
,
52
,
51
,
50
,
946
,
/* 260 */
215
,
113
,
251
,
839
,
828
,
831
,
834
,
216
,
753
,
750
,
/* 270 */
751
,
752
,
672
,
175
,
174
,
172
,
217
,
119
,
261
,
282
,
/* 280 */
328
,
80
,
251
,
839
,
828
,
831
,
834
,
127
,
116
,
203
,
/* 290 */
228
,
229
,
255
,
39
,
324
,
257
,
258
,
745
,
742
,
743
,
/* 300 */
744
,
204
,
39
,
1036
,
3
,
32
,
131
,
261
,
209
,
260
,
/* 310 */
228
,
229
,
129
,
85
,
123
,
133
,
1040
,
39
,
39
,
43
,
/* 320 */
1025
,
1026
,
30
,
1029
,
244
,
245
,
189
,
186
,
183
,
52
,
/* 330 */
51
,
50
,
305
,
181
,
179
,
178
,
177
,
176
,
319
,
65
,
/* 340 */
1038
,
273
,
637
,
86
,
42
,
241
,
359
,
358
,
243
,
1039
,
/* 350 */
224
,
357
,
770
,
830
,
833
,
356
,
39
,
355
,
354
,
65
,
/* 360 */
332
,
333
,
54
,
53
,
1039
,
1039
,
52
,
51
,
50
,
256
,
/* 370 */
39
,
254
,
39
,
331
,
330
,
840
,
835
,
104
,
39
,
39
,
/* 380 */
754
,
755
,
836
,
149
,
142
,
162
,
262
,
39
,
259
,
806
,
/* 390 */
338
,
337
,
167
,
170
,
160
,
840
,
835
,
829
,
832
,
334
,
/* 400 */
104
,
164
,
836
,
1039
,
826
,
363
,
362
,
190
,
767
,
746
,
/* 410 */
747
,
92
,
949
,
335
,
940
,
339
,
93
,
1039
,
158
,
1039
,
/* 420 */
158
,
340
,
341
,
71
,
321
,
1039
,
1039
,
198
,
195
,
193
,
/* 430 */
345
,
360
,
976
,
7
,
1039
,
275
,
827
,
786
,
774
,
796
,
/* 440 */
797
,
74
,
727
,
297
,
729
,
299
,
325
,
805
,
35
,
70
,
/* 450 */
210
,
40
,
1115
,
97
,
70
,
66
,
24
,
728
,
40
,
40
,
/* 460 */
67
,
117
,
740
,
741
,
72
,
738
,
739
,
862
,
841
,
250
,
/* 470 */
636
,
837
,
140
,
67
,
139
,
82
,
16
,
18
,
15
,
17
,
/* 480 */
75
,
211
,
300
,
23
,
23
,
77
,
23
,
758
,
759
,
169
,
/* 490 */
168
,
4
,
756
,
757
,
147
,
20
,
146
,
19
,
1163
,
1162
,
/* 500 */
1161
,
226
,
227
,
207
,
208
,
212
,
1053
,
1041
,
205
,
1126
,
/* 510 */
213
,
214
,
219
,
220
,
221
,
838
,
218
,
202
,
716
,
1188
,
/* 520 */
1180
,
1125
,
1069
,
238
,
1122
,
1121
,
239
,
44
,
1068
,
344
,
/* 530 */
277
,
114
,
322
,
1108
,
1107
,
196
,
271
,
785
,
1037
,
276
,
/* 540 */
1065
,
87
,
1076
,
1087
,
281
,
235
,
73
,
90
,
1084
,
1085
,
/* 550 */
76
,
843
,
283
,
1089
,
295
,
46
,
105
,
106
,
94
,
107
,
/* 560 */
293
,
95
,
101
,
108
,
285
,
291
,
288
,
286
,
109
,
1109
,
/* 570 */
289
,
110
,
287
,
111
,
284
,
112
,
29
,
45
,
225
,
115
,
/* 580 */
1035
,
306
,
150
,
247
,
118
,
952
,
346
,
120
,
301
,
953
,
/* 590 */
302
,
303
,
304
,
974
,
307
,
308
,
200
,
347
,
348
,
38
,
/* 600 */
320
,
349
,
948
,
951
,
947
,
130
,
329
,
350
,
1187
,
351
,
/* 610 */
352
,
361
,
137
,
1186
,
1183
,
887
,
141
,
222
,
336
,
1179
,
/* 620 */
152
,
144
,
1178
,
265
,
1175
,
886
,
148
,
223
,
973
,
268
,
/* 630 */
885
,
868
,
867
,
70
,
296
,
8
,
28
,
41
,
31
,
761
,
/* 640 */
278
,
96
,
153
,
201
,
937
,
151
,
154
,
156
,
157
,
155
,
/* 650 */
163
,
935
,
165
,
1
,
166
,
933
,
264
,
932
,
263
,
171
,
/* 660 */
267
,
975
,
931
,
930
,
173
,
929
,
928
,
927
,
926
,
925
,
/* 670 */
924
,
272
,
923
,
787
,
180
,
184
,
98
,
182
,
922
,
798
,
/* 680 */
185
,
921
,
99
,
188
,
187
,
920
,
918
,
792
,
100
,
916
,
/* 690 */
914
,
102
,
194
,
913
,
911
,
912
,
197
,
907
,
794
,
2
,
/* 700 */
237
,
103
,
290
,
9
,
33
,
34
,
10
,
11
,
25
,
298
,
/* 710 */
26
,
122
,
119
,
36
,
126
,
125
,
650
,
688
,
37
,
128
,
/* 720 */
685
,
683
,
682
,
681
,
679
,
678
,
677
,
674
,
640
,
132
,
/* 730 */
5
,
134
,
135
,
842
,
318
,
844
,
6
,
326
,
327
,
68
,
/* 740 */
136
,
40
,
69
,
719
,
718
,
138
,
143
,
145
,
715
,
666
,
/* 750 */
664
,
656
,
662
,
658
,
660
,
654
,
652
,
687
,
686
,
684
,
/* 760 */
680
,
676
,
675
,
161
,
604
,
638
,
891
,
890
,
890
,
890
,
/* 770 */
890
,
890
,
890
,
890
,
890
,
191
,
192
,
};
static
const
YYCODETYPE
yy_lookahead
[]
=
{
/* 0 */
200
,
1
,
194
,
195
,
194
,
5
,
200
,
7
,
8
,
1
,
/* 10 */
10
,
11
,
0
,
5
,
14
,
15
,
16
,
17
,
245
,
19
,
/* 20 */
20
,
21
,
22
,
23
,
24
,
3
,
19
4
,
192
,
193
,
29
,
/* 30 */
30
,
261
,
259
,
33
,
34
,
35
,
200
,
7
,
8
,
1
,
/* 40 */
10
,
11
,
2
72
,
5
,
14
,
15
,
16
,
17
,
261
,
19
,
/* 50 */
20
,
21
,
22
,
23
,
24
,
216
,
26
1
,
218
,
219
,
29
,
/* 0 */
200
,
1
,
1
,
194
,
245
,
3
,
200
,
7
,
8
,
20
1
,
/* 10 */
10
,
11
,
194
,
195
,
14
,
15
,
16
,
17
,
259
,
19
,
/* 20 */
20
,
21
,
22
,
23
,
24
,
243
,
24
4
,
192
,
193
,
29
,
/* 30 */
30
,
29
,
30
,
33
,
34
,
35
,
200
,
7
,
8
,
238
,
/* 40 */
10
,
11
,
2
34
,
242
,
14
,
15
,
16
,
17
,
194
,
19
,
/* 50 */
20
,
21
,
22
,
23
,
24
,
216
,
1
,
218
,
219
,
29
,
/* 60 */
30
,
261
,
223
,
33
,
34
,
35
,
227
,
261
,
229
,
230
,
/* 70 */
3
,
4
,
272
,
7
,
8
,
240
,
10
,
11
,
272
,
269
,
/* 70 */
201
,
262
,
272
,
7
,
8
,
240
,
10
,
11
,
272
,
78
,
/* 80 */
14
,
15
,
16
,
17
,
84
,
19
,
20
,
21
,
22
,
23
,
/* 90 */
24
,
83
,
80
,
258
,
262
,
29
,
30
,
261
,
1
,
33
,
/* 100 */
34
,
35
,
5
,
7
,
8
,
88
,
10
,
11
,
272
,
79
,
/* 110 */
14
,
15
,
16
,
17
,
194
,
19
,
20
,
21
,
22
,
23
,
/* 120 */
24
,
96
,
80
,
98
,
99
,
29
,
30
,
194
,
103
,
33
,
/* 130 */
34
,
35
,
1
07
,
78
,
109
,
110
,
194
,
194
,
41
,
42
,
/* 140 */
43
,
44
,
45
,
46
,
47
,
48
,
49
,
50
,
51
,
52
,
/* 150 */
53
,
54
,
55
,
8
,
57
,
10
,
11
,
243
,
244
,
14
,
/* 160 */
15
,
16
,
17
,
78
,
19
,
20
,
21
,
22
,
23
,
24
,
/* 170 */
33
,
116
,
78
,
118
,
29
,
30
,
64
,
261
,
33
,
34
,
/* 180 */
35
,
63
,
261
,
263
,
264
,
10
,
11
,
199
,
121
,
14
,
/* 190 */
15
,
16
,
17
,
205
,
19
,
20
,
21
,
22
,
23
,
24
,
/* 200 */
2
67
,
116
,
269
,
238
,
29
,
30
,
112
,
242
,
33
,
34
,
/* 210 */
35
,
269
,
269
,
271
,
96
,
97
,
98
,
99
,
100
,
101
,
/* 220 */
10
2
,
103
,
104
,
105
,
106
,
107
,
108
,
109
,
110
,
201
,
/* 230 */
40
,
216
,
217
,
218
,
219
,
220
,
221
,
222
,
223
,
224
,
/* 240 */
2
25
,
226
,
227
,
228
,
229
,
230
,
231
,
57
,
1
,
2
,
/* 250 */
3
,
4
,
5
,
141
,
64
,
143
,
119
,
145
,
146
,
56
,
/* 260 */
70
,
71
,
72
,
73
,
236
,
139
,
3
,
77
,
78
,
1
,
/* 270 */
2
,
3
,
4
,
5
,
148
,
149
,
29
,
30
,
3
,
4
,
/* 280 */
33
,
78
,
21
,
22
,
23
,
24
,
2
,
3
,
4
,
5
,
/* 290 */
29
,
30
,
29
,
30
,
33
,
34
,
35
,
29
,
30
,
2
,
/* 300 */
3
,
4
,
5
,
33
,
34
,
35
,
116
,
58
,
59
,
60
,
/* 310 */
58
,
59
,
60
,
29
,
30
,
66
,
67
,
68
,
69
,
194
,
/* 320 */
2
01
,
122
,
123
,
64
,
194
,
78
,
29
,
30
,
138
,
194
,
/* 330 */
140
,
58
,
59
,
60
,
194
,
86
,
261
,
147
,
65
,
66
,
/* 340 */
67
,
68
,
69
,
194
,
194
,
194
,
78
,
58
,
59
,
60
,
/* 350 */
1
94
,
261
,
233
,
234
,
235
,
236
,
67
,
68
,
69
,
1
,
/* 360 */
194
,
114
,
115
,
5
,
239
,
76
,
194
,
237
,
121
,
29
,
/* 370 */
30
,
241
,
237
,
33
,
34
,
35
,
241
,
237
,
194
,
194
,
/* 380 */
1
94
,
241
,
114
,
115
,
261
,
194
,
237
,
237
,
237
,
121
,
/* 390 */
241
,
241
,
241
,
237
,
203
,
78
,
121
,
241
,
114
,
115
,
/* 400 */
1
41
,
84
,
143
,
237
,
145
,
146
,
248
,
241
,
61
,
62
,
/* 410 */
63
,
114
,
115
,
241
,
238
,
201
,
72
,
240
,
242
,
240
,
/* 420 */
194
,
237
,
237
,
237
,
266
,
241
,
241
,
241
,
74
,
203
,
/* 430 */
113
,
194
,
199
,
199
,
95
,
258
,
78
,
258
,
205
,
205
,
/* 440 */
203
,
79
,
88
,
214
,
215
,
79
,
79
,
79
,
234
,
79
,
/* 450 */
79
,
95
,
95
,
79
,
79
,
79
,
79
,
95
,
9
,
120
,
/* 460 */
3
,
4
,
79
,
95
,
1
,
95
,
95
,
3
,
4
,
95
,
/* 470 */
95
,
95
,
95
,
79
,
130
,
3
,
4
,
79
,
95
,
79
,
/* 480 */
1
42
,
78
,
144
,
117
,
117
,
142
,
261
,
144
,
142
,
95
,
/* 490 */
144
,
134
,
136
,
95
,
270
,
95
,
33
,
3
,
4
,
74
,
/* 500 */
75
,
142
,
142
,
144
,
144
,
142
,
261
,
144
,
232
,
261
,
/* 510 */
194
,
261
,
261
,
244
,
111
,
261
,
261
,
261
,
261
,
261
,
/* 520 */
24
2
,
261
,
240
,
261
,
244
,
261
,
261
,
261
,
232
,
244
,
/* 530 */
2
32
,
232
,
232
,
232
,
232
,
194
,
194
,
260
,
246
,
194
,
/* 540 */
56
,
270
,
194
,
194
,
194
,
240
,
240
,
194
,
240
,
194
,
/* 550 */
257
,
265
,
265
,
265
,
247
,
194
,
265
,
254
,
194
,
19
4
,
/* 560 */
256
,
251
,
121
,
114
,
255
,
196
,
194
,
194
,
253
,
250
,
/* 570 */
252
,
126
,
194
,
194
,
194
,
194
,
194
,
133
,
194
,
194
,
/* 580 */
194
,
194
,
194
,
194
,
194
,
194
,
194
,
194
,
135
,
194
,
/* 590 */
194
,
194
,
1
32
,
194
,
128
,
194
,
194
,
124
,
194
,
194
,
/* 600 */
194
,
194
,
194
,
194
,
194
,
194
,
194
,
194
,
194
,
194
,
/* 610 */
194
,
194
,
194
,
194
,
194
,
194
,
194
,
194
,
194
,
131
,
/* 620 */
194
,
194
,
194
,
194
,
194
,
194
,
194
,
194
,
194
,
194
,
/* 630 */
194
,
194
,
194
,
125
,
127
,
196
,
196
,
137
,
196
,
196
,
/* 640 */
87
,
94
,
93
,
196
,
196
,
47
,
196
,
90
,
92
,
91
,
/* 650 */
19
6
,
196
,
51
,
89
,
80
,
204
,
204
,
201
,
3
,
150
,
/* 660 */
3
,
3
,
150
,
3
,
3
,
98
,
196
,
97
,
139
,
207
,
/* 670 */
211
,
213
,
196
,
212
,
197
,
210
,
208
,
206
,
209
,
197
,
/* 680 */
197
,
196
,
215
,
196
,
198
,
117
,
197
,
196
,
196
,
112
,
/* 690 */
78
,
78
,
202
,
79
,
95
,
249
,
79
,
95
,
78
,
95
,
/* 700 */
79
,
78
,
1
,
79
,
78
,
95
,
79
,
78
,
78
,
129
,
/* 710 */
95
,
129
,
78
,
78
,
78
,
112
,
74
,
85
,
113
,
66
,
/* 720 */
3
,
84
,
3
,
85
,
84
,
5
,
3
,
3
,
3
,
3
,
/* 730 */
3
,
3
,
3
,
81
,
20
,
55
,
74
,
144
,
82
,
9
,
/* 740 */
144
,
82
,
78
,
10
,
79
,
114
,
78
,
10
,
3
,
95
,
/* 750 */
144
,
144
,
3
,
79
,
3
,
3
,
3
,
3
,
3
,
3
,
/* 760 */
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
95
,
81
,
/* 770 */
0
,
56
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
/* 780 */
15
,
15
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
/* 90 */
24
,
261
,
194
,
258
,
238
,
29
,
30
,
261
,
242
,
33
,
/* 100 */
34
,
35
,
272
,
7
,
8
,
236
,
10
,
11
,
272
,
79
,
/* 110 */
14
,
15
,
16
,
17
,
78
,
19
,
20
,
21
,
22
,
23
,
/* 120 */
24
,
267
,
1
,
269
,
74
,
29
,
30
,
194
,
80
,
33
,
/* 130 */
34
,
35
,
1
94
,
240
,
8
,
237
,
10
,
11
,
88
,
241
,
/* 140 */
14
,
15
,
16
,
17
,
194
,
19
,
20
,
21
,
22
,
23
,
/* 150 */
24
,
258
,
116
,
203
,
118
,
29
,
30
,
78
,
194
,
33
,
/* 160 */
34
,
35
,
41
,
42
,
43
,
44
,
45
,
46
,
47
,
48
,
/* 170 */
49
,
50
,
51
,
52
,
53
,
54
,
55
,
63
,
57
,
10
,
/* 180 */
11
,
199
,
240
,
14
,
15
,
16
,
17
,
205
,
19
,
20
,
/* 190 */
21
,
22
,
23
,
24
,
88
,
116
,
263
,
264
,
29
,
30
,
/* 200 */
2
58
,
237
,
33
,
34
,
35
,
241
,
142
,
269
,
144
,
271
,
/* 210 */
96
,
97
,
98
,
99
,
100
,
101
,
102
,
103
,
104
,
105
,
/* 220 */
10
6
,
107
,
108
,
109
,
110
,
216
,
217
,
218
,
219
,
220
,
/* 230 */
221
,
222
,
223
,
224
,
225
,
226
,
227
,
228
,
229
,
230
,
/* 240 */
2
31
,
139
,
78
,
40
,
21
,
22
,
23
,
24
,
84
,
261
,
/* 250 */
148
,
149
,
29
,
30
,
122
,
123
,
33
,
34
,
35
,
1
,
/* 260 */
57
,
248
,
1
,
2
,
3
,
4
,
5
,
64
,
2
,
3
,
/* 270 */
4
,
5
,
3
,
70
,
71
,
72
,
73
,
113
,
194
,
266
,
/* 280 */
77
,
78
,
1
,
2
,
3
,
4
,
5
,
203
,
201
,
261
,
/* 290 */
29
,
30
,
64
,
194
,
33
,
29
,
30
,
2
,
3
,
4
,
/* 300 */
5
,
261
,
194
,
194
,
58
,
59
,
60
,
194
,
261
,
64
,
/* 310 */
29
,
30
,
66
,
67
,
68
,
69
,
203
,
194
,
194
,
116
,
/* 320 */
2
33
,
234
,
235
,
236
,
29
,
30
,
58
,
59
,
60
,
33
,
/* 330 */
34
,
35
,
86
,
65
,
66
,
67
,
68
,
69
,
80
,
78
,
/* 340 */
241
,
138
,
1
,
140
,
96
,
237
,
98
,
99
,
239
,
241
,
/* 350 */
1
47
,
103
,
33
,
3
,
4
,
107
,
194
,
109
,
110
,
78
,
/* 360 */
237
,
237
,
29
,
30
,
241
,
241
,
33
,
34
,
35
,
141
,
/* 370 */
194
,
143
,
194
,
145
,
146
,
114
,
115
,
194
,
194
,
194
,
/* 380 */
1
14
,
115
,
121
,
58
,
59
,
60
,
141
,
194
,
143
,
72
,
/* 390 */
145
,
146
,
67
,
68
,
69
,
114
,
115
,
3
,
4
,
237
,
/* 400 */
1
94
,
76
,
121
,
241
,
1
,
61
,
62
,
63
,
95
,
114
,
/* 410 */
115
,
79
,
199
,
237
,
199
,
237
,
79
,
241
,
205
,
241
,
/* 420 */
205
,
237
,
237
,
95
,
83
,
241
,
241
,
58
,
59
,
60
,
/* 430 */
237
,
214
,
215
,
120
,
241
,
79
,
33
,
79
,
119
,
79
,
/* 440 */
79
,
95
,
79
,
79
,
79
,
79
,
9
,
130
,
78
,
117
,
/* 450 */
261
,
95
,
269
,
95
,
117
,
95
,
95
,
79
,
95
,
95
,
/* 460 */
95
,
95
,
3
,
4
,
136
,
3
,
4
,
79
,
79
,
56
,
/* 470 */
79
,
121
,
142
,
95
,
144
,
269
,
142
,
142
,
144
,
144
,
/* 480 */
1
34
,
261
,
112
,
95
,
95
,
78
,
95
,
3
,
4
,
74
,
/* 490 */
75
,
78
,
3
,
4
,
142
,
142
,
144
,
144
,
261
,
261
,
/* 500 */
261
,
261
,
261
,
261
,
261
,
261
,
244
,
242
,
261
,
232
,
/* 510 */
261
,
261
,
261
,
261
,
261
,
121
,
261
,
261
,
111
,
244
,
/* 520 */
24
4
,
232
,
240
,
232
,
232
,
232
,
232
,
260
,
240
,
232
,
/* 530 */
2
40
,
246
,
194
,
270
,
270
,
56
,
194
,
121
,
240
,
196
,
/* 540 */
257
,
194
,
194
,
194
,
265
,
265
,
135
,
196
,
194
,
194
,
/* 550 */
133
,
114
,
265
,
194
,
128
,
132
,
256
,
255
,
196
,
25
4
,
/* 560 */
131
,
194
,
194
,
253
,
265
,
126
,
194
,
196
,
252
,
196
,
/* 570 */
125
,
251
,
124
,
250
,
127
,
249
,
247
,
137
,
196
,
194
,
/* 580 */
194
,
87
,
94
,
196
,
194
,
204
,
93
,
194
,
196
,
194
,
/* 590 */
194
,
194
,
1
94
,
213
,
194
,
194
,
194
,
47
,
90
,
194
,
/* 600 */
194
,
92
,
194
,
204
,
194
,
201
,
194
,
51
,
194
,
91
,
/* 610 */
89
,
80
,
194
,
194
,
194
,
3
,
194
,
196
,
194
,
194
,
/* 620 */
211
,
194
,
194
,
3
,
194
,
3
,
194
,
196
,
194
,
3
,
/* 630 */
3
,
98
,
97
,
117
,
112
,
78
,
78
,
194
,
194
,
79
,
/* 640 */
95
,
95
,
207
,
194
,
194
,
212
,
210
,
209
,
206
,
208
,
/* 650 */
19
4
,
194
,
194
,
202
,
194
,
194
,
150
,
194
,
194
,
194
,
/* 660 */
150
,
215
,
196
,
196
,
194
,
194
,
194
,
194
,
194
,
194
,
/* 670 */
194
,
139
,
194
,
79
,
197
,
194
,
78
,
197
,
196
,
79
,
/* 680 */
197
,
196
,
78
,
197
,
194
,
194
,
194
,
79
,
95
,
194
,
/* 690 */
194
,
78
,
194
,
196
,
194
,
196
,
194
,
194
,
79
,
198
,
/* 700 */
1
,
78
,
78
,
129
,
95
,
95
,
129
,
78
,
78
,
112
,
/* 710 */
78
,
74
,
113
,
85
,
66
,
84
,
3
,
3
,
85
,
84
,
/* 720 */
5
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
81
,
74
,
/* 730 */
78
,
82
,
82
,
79
,
9
,
114
,
78
,
20
,
55
,
10
,
/* 740 */
144
,
95
,
10
,
3
,
3
,
144
,
144
,
144
,
79
,
3
,
/* 750 */
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
/* 760 */
3
,
3
,
3
,
95
,
56
,
81
,
0
,
273
,
273
,
273
,
/* 770 */
273
,
273
,
273
,
273
,
273
,
15
,
15
,
273
,
273
,
273
,
/* 780 */
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
/* 790 */
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
/* 800 */
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
/* 810 */
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
...
...
@@ -385,115 +384,114 @@ static const YYCODETYPE yy_lookahead[] = {
/* 930 */
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
/* 940 */
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
/* 950 */
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
/* 960 */
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
/* 970 */
273
,
273
,
273
,
/* 960 */
273
,
273
,
273
,
273
,
273
,
273
,
273
,
273
,
};
#define YY_SHIFT_COUNT (365)
#define YY_SHIFT_MIN (0)
#define YY_SHIFT_MAX (7
70
)
#define YY_SHIFT_MAX (7
66
)
static
const
unsigned
short
int
yy_shift_ofst
[]
=
{
/* 0 */
190
,
118
,
25
,
42
,
247
,
268
,
268
,
358
,
38
,
38
,
/* 10 */
38
,
38
,
38
,
38
,
38
,
38
,
38
,
38
,
38
,
38
,
/* 20 */
38
,
0
,
97
,
268
,
284
,
297
,
297
,
85
,
85
,
38
,
/* 30 */
38
,
199
,
38
,
12
,
38
,
38
,
38
,
38
,
354
,
42
,
/* 40 */
17
,
17
,
22
,
782
,
268
,
268
,
268
,
268
,
268
,
268
,
/* 50 */
2
68
,
268
,
268
,
268
,
268
,
268
,
268
,
268
,
268
,
268
,
/* 60 */
2
68
,
268
,
268
,
268
,
268
,
268
,
284
,
297
,
284
,
284
,
/* 70 */
55
,
263
,
263
,
263
,
263
,
263
,
263
,
8
,
263
,
38
,
/* 80 */
38
,
38
,
137
,
38
,
38
,
38
,
85
,
85
,
38
,
38
,
/* 90 */
38
,
38
,
344
,
344
,
339
,
85
,
38
,
38
,
38
,
38
,
/* 100 */
38
,
38
,
38
,
38
,
38
,
38
,
38
,
38
,
38
,
38
,
/* 110 */
38
,
38
,
38
,
38
,
38
,
38
,
38
,
38
,
38
,
38
,
/* 120 */
38
,
38
,
38
,
38
,
38
,
38
,
38
,
38
,
38
,
38
,
/* 130 */
38
,
38
,
38
,
38
,
38
,
38
,
38
,
38
,
38
,
38
,
/* 140 */
38
,
38
,
38
,
38
,
38
,
38
,
38
,
38
,
38
,
38
,
/* 150 */
38
,
38
,
38
,
38
,
484
,
484
,
484
,
441
,
441
,
441
,
/* 160 */
441
,
484
,
484
,
444
,
453
,
466
,
460
,
488
,
445
,
508
,
/* 170 */
473
,
507
,
500
,
484
,
484
,
484
,
553
,
553
,
42
,
484
,
/* 180 */
484
,
547
,
549
,
598
,
557
,
556
,
601
,
558
,
564
,
22
,
/* 190 */
484
,
484
,
574
,
574
,
484
,
574
,
484
,
574
,
484
,
484
,
/* 200 */
7
82
,
782
,
30
,
66
,
66
,
96
,
66
,
145
,
175
,
261
,
/* 210 */
2
61
,
261
,
261
,
261
,
261
,
249
,
273
,
289
,
340
,
340
,
/* 220 */
3
40
,
340
,
112
,
259
,
126
,
317
,
270
,
270
,
67
,
275
,
/* 230 */
34
7
,
252
,
362
,
366
,
367
,
368
,
370
,
371
,
356
,
357
,
/* 240 */
3
74
,
375
,
376
,
377
,
457
,
464
,
383
,
94
,
394
,
398
,
/* 250 */
4
63
,
203
,
449
,
400
,
338
,
343
,
346
,
472
,
494
,
359
,
/* 260 */
3
60
,
403
,
363
,
425
,
655
,
509
,
657
,
658
,
512
,
660
,
/* 270 */
6
61
,
567
,
570
,
529
,
568
,
577
,
612
,
614
,
613
,
599
,
/* 280 */
602
,
617
,
620
,
621
,
623
,
624
,
604
,
626
,
627
,
629
,
/* 290 */
701
,
630
,
610
,
580
,
615
,
582
,
634
,
577
,
635
,
603
,
/* 300 */
63
6
,
605
,
642
,
632
,
637
,
653
,
717
,
638
,
640
,
719
,
/* 310 */
7
20
,
723
,
724
,
725
,
726
,
727
,
728
,
729
,
652
,
730
,
/* 320 */
6
62
,
656
,
659
,
664
,
665
,
631
,
668
,
714
,
680
,
733
,
/* 330 */
59
3
,
596
,
654
,
654
,
654
,
654
,
737
,
606
,
607
,
654
,
/* 340 */
6
54
,
654
,
745
,
749
,
674
,
654
,
751
,
752
,
753
,
754
,
/* 350 */
75
5
,
756
,
757
,
758
,
759
,
760
,
761
,
762
,
763
,
764
,
/* 360 */
6
73
,
688
,
765
,
766
,
715
,
770
,
/* 0 */
203
,
114
,
248
,
48
,
261
,
281
,
281
,
1
,
55
,
55
,
/* 10 */
55
,
55
,
55
,
55
,
55
,
55
,
55
,
55
,
55
,
55
,
/* 20 */
55
,
0
,
121
,
281
,
266
,
295
,
295
,
79
,
79
,
132
,
/* 30 */
258
,
50
,
48
,
55
,
55
,
55
,
55
,
55
,
106
,
55
,
/* 40 */
55
,
106
,
269
,
777
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 50 */
2
81
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 60 */
2
81
,
281
,
281
,
281
,
281
,
281
,
266
,
295
,
266
,
266
,
/* 70 */
36
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
319
,
79
,
/* 80 */
79
,
317
,
317
,
313
,
79
,
341
,
55
,
479
,
55
,
55
,
/* 90 */
55
,
479
,
55
,
55
,
55
,
479
,
55
,
416
,
416
,
416
,
/* 100 */
416
,
479
,
55
,
55
,
479
,
417
,
411
,
426
,
423
,
429
,
/* 110 */
439
,
445
,
448
,
447
,
440
,
479
,
55
,
55
,
479
,
55
,
/* 120 */
479
,
55
,
55
,
55
,
494
,
55
,
55
,
494
,
55
,
55
,
/* 130 */
55
,
48
,
55
,
55
,
55
,
55
,
55
,
55
,
55
,
55
,
/* 140 */
55
,
479
,
55
,
55
,
55
,
55
,
55
,
55
,
479
,
55
,
/* 150 */
55
,
488
,
493
,
550
,
508
,
509
,
556
,
518
,
521
,
55
,
/* 160 */
55
,
269
,
55
,
55
,
55
,
55
,
55
,
55
,
55
,
55
,
/* 170 */
55
,
479
,
55
,
479
,
55
,
55
,
55
,
55
,
55
,
55
,
/* 180 */
55
,
531
,
55
,
531
,
479
,
55
,
531
,
479
,
55
,
531
,
/* 190 */
55
,
55
,
55
,
55
,
479
,
55
,
55
,
479
,
55
,
55
,
/* 200 */
7
77
,
777
,
30
,
66
,
66
,
96
,
66
,
126
,
169
,
223
,
/* 210 */
2
23
,
223
,
223
,
223
,
223
,
246
,
268
,
325
,
333
,
333
,
/* 220 */
3
33
,
333
,
228
,
245
,
102
,
164
,
296
,
296
,
350
,
394
,
/* 230 */
34
4
,
369
,
356
,
332
,
337
,
358
,
360
,
361
,
328
,
346
,
/* 240 */
3
63
,
364
,
365
,
366
,
459
,
462
,
378
,
370
,
388
,
389
,
/* 250 */
4
03
,
413
,
437
,
391
,
64
,
330
,
334
,
484
,
489
,
335
,
/* 260 */
3
52
,
407
,
353
,
415
,
612
,
506
,
620
,
622
,
510
,
626
,
/* 270 */
6
27
,
533
,
535
,
532
,
516
,
522
,
557
,
560
,
558
,
545
,
/* 280 */
546
,
594
,
598
,
600
,
604
,
608
,
593
,
613
,
619
,
623
,
/* 290 */
699
,
624
,
609
,
574
,
610
,
577
,
629
,
522
,
630
,
597
,
/* 300 */
63
2
,
599
,
637
,
628
,
631
,
648
,
713
,
633
,
635
,
714
,
/* 310 */
7
15
,
718
,
719
,
720
,
721
,
722
,
723
,
724
,
647
,
725
,
/* 320 */
6
55
,
649
,
650
,
652
,
654
,
621
,
658
,
717
,
683
,
729
,
/* 330 */
59
6
,
601
,
646
,
646
,
646
,
646
,
732
,
602
,
603
,
646
,
/* 340 */
6
46
,
646
,
740
,
741
,
669
,
646
,
746
,
747
,
748
,
749
,
/* 350 */
75
0
,
751
,
752
,
753
,
754
,
755
,
756
,
757
,
758
,
759
,
/* 360 */
6
68
,
684
,
760
,
761
,
708
,
766
,
};
#define YY_REDUCE_COUNT (201)
#define YY_REDUCE_MIN (-2
30
)
#define YY_REDUCE_MAX (
492
)
#define YY_REDUCE_MIN (-2
41
)
#define YY_REDUCE_MAX (
503
)
static
const
short
yy_reduce_ofst
[]
=
{
/* 0 */
-
165
,
15
,
-
161
,
119
,
-
200
,
-
194
,
-
164
,
-
80
,
130
,
-
58
,
/* 10 */
-
67
,
135
,
140
,
149
,
150
,
151
,
156
,
166
,
184
,
185
,
/* 20 */
1
86
,
-
168
,
-
192
,
-
230
,
-
86
,
-
35
,
176
,
177
,
179
,
-
190
,
/* 30 */
-
57
,
158
,
125
,
28
,
191
,
226
,
237
,
172
,
-
12
,
214
,
/* 40 */
233
,
234
,
229
,
-
227
,
-
213
,
-
205
,
-
84
,
-
79
,
75
,
9
0
,
/* 50 */
123
,
225
,
245
,
248
,
250
,
251
,
254
,
255
,
256
,
257
,
/* 60 */
25
8
,
260
,
262
,
264
,
265
,
266
,
269
,
278
,
280
,
285
,
/* 70 */
282
,
27
6
,
296
,
298
,
299
,
300
,
301
,
316
,
302
,
341
,
/* 80 */
342
,
345
,
277
,
348
,
349
,
350
,
305
,
306
,
353
,
355
,
/* 90 */
3
61
,
364
,
224
,
271
,
292
,
308
,
365
,
372
,
373
,
378
,
/* 100 */
379
,
380
,
381
,
382
,
384
,
385
,
386
,
387
,
388
,
389
,
/* 110 */
3
90
,
391
,
392
,
393
,
395
,
396
,
397
,
399
,
401
,
402
,
/* 120 */
404
,
405
,
406
,
407
,
408
,
409
,
410
,
411
,
412
,
413
,
/* 130 */
4
14
,
415
,
416
,
417
,
418
,
419
,
420
,
421
,
422
,
423
,
/* 140 */
42
4
,
426
,
427
,
428
,
429
,
430
,
431
,
432
,
433
,
434
,
/* 150 */
43
5
,
436
,
437
,
438
,
369
,
439
,
440
,
286
,
287
,
288
,
/* 160 */
291
,
442
,
443
,
293
,
304
,
309
,
303
,
315
,
318
,
310
,
/* 170 */
319
,
446
,
307
,
447
,
448
,
450
,
451
,
452
,
456
,
454
,
/* 180 */
4
55
,
458
,
461
,
459
,
462
,
465
,
468
,
469
,
471
,
467
,
/* 190 */
4
70
,
476
,
477
,
482
,
485
,
483
,
487
,
489
,
491
,
492
,
/* 200 */
4
90
,
486
,
/* 0 */
-
165
,
9
,
-
161
,
87
,
-
200
,
-
194
,
-
164
,
-
67
,
-
102
,
-
62
,
/* 10 */
-
146
,
-
36
,
108
,
123
,
124
,
162
,
176
,
178
,
184
,
185
,
/* 20 */
1
93
,
-
191
,
-
182
,
-
170
,
-
218
,
-
199
,
-
144
,
-
107
,
-
58
,
13
,
/* 30 */
-
131
,
-
18
,
-
192
,
183
,
206
,
109
,
-
50
,
84
,
213
,
113
,
/* 40 */
99
,
215
,
217
,
-
241
,
-
12
,
28
,
40
,
47
,
189
,
22
0
,
/* 50 */
237
,
238
,
239
,
240
,
241
,
242
,
243
,
244
,
247
,
249
,
/* 60 */
25
0
,
251
,
252
,
253
,
255
,
256
,
262
,
265
,
275
,
276
,
/* 70 */
282
,
27
7
,
289
,
291
,
292
,
293
,
294
,
297
,
267
,
288
,
/* 80 */
290
,
263
,
264
,
285
,
298
,
338
,
342
,
343
,
347
,
348
,
/* 90 */
3
49
,
351
,
354
,
355
,
359
,
362
,
367
,
279
,
280
,
287
,
/* 100 */
299
,
371
,
368
,
372
,
373
,
283
,
300
,
302
,
305
,
310
,
/* 110 */
3
16
,
320
,
323
,
326
,
329
,
382
,
385
,
386
,
387
,
390
,
/* 120 */
392
,
393
,
395
,
396
,
381
,
397
,
398
,
399
,
400
,
401
,
/* 130 */
4
02
,
404
,
405
,
406
,
408
,
410
,
412
,
414
,
418
,
419
,
/* 140 */
42
0
,
421
,
422
,
424
,
425
,
427
,
428
,
430
,
431
,
432
,
/* 150 */
43
4
,
380
,
433
,
409
,
435
,
436
,
441
,
438
,
442
,
443
,
/* 160 */
444
,
446
,
449
,
450
,
456
,
457
,
458
,
460
,
461
,
463
,
/* 170 */
464
,
466
,
465
,
467
,
470
,
471
,
472
,
473
,
474
,
475
,
/* 180 */
4
76
,
477
,
478
,
480
,
482
,
481
,
483
,
485
,
490
,
486
,
/* 190 */
4
91
,
492
,
495
,
496
,
497
,
498
,
500
,
499
,
502
,
503
,
/* 200 */
4
51
,
501
,
};
static
const
YYACTIONTYPE
yy_default
[]
=
{
/* 0 */
8
90
,
953
,
940
,
949
,
1174
,
1174
,
1174
,
890
,
890
,
890
,
/* 10 */
8
90
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
/* 20 */
8
90
,
1081
,
910
,
1174
,
890
,
890
,
890
,
890
,
890
,
890
,
/* 30 */
890
,
1096
,
890
,
949
,
890
,
890
,
890
,
890
,
959
,
949
,
/* 40 */
959
,
959
,
890
,
1076
,
890
,
890
,
890
,
890
,
890
,
890
,
/* 50 */
8
90
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
/* 60 */
8
90
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
/* 70 */
8
90
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
/* 80 */
8
90
,
890
,
1083
,
1089
,
1086
,
890
,
890
,
890
,
1091
,
890
,
/* 90 */
890
,
890
,
1115
,
1115
,
1074
,
890
,
890
,
890
,
890
,
890
,
/* 100 */
8
90
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
/* 110 */
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
/* 120 */
890
,
890
,
890
,
890
,
890
,
890
,
890
,
938
,
890
,
936
,
/* 130 */
8
90
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
/* 140 */
8
90
,
890
,
890
,
890
,
890
,
890
,
921
,
890
,
890
,
890
,
/* 150 */
8
90
,
890
,
890
,
908
,
912
,
912
,
912
,
890
,
890
,
890
,
/* 160 */
8
90
,
912
,
912
,
1122
,
1126
,
1108
,
1120
,
1116
,
1103
,
1101
,
/* 170 */
1099
,
1107
,
1130
,
912
,
912
,
912
,
957
,
957
,
949
,
912
,
/* 180 */
912
,
975
,
973
,
971
,
963
,
969
,
965
,
967
,
961
,
890
,
/* 190 */
91
2
,
912
,
947
,
947
,
912
,
947
,
912
,
947
,
912
,
912
,
/* 200 */
99
7
,
1014
,
890
,
1131
,
1121
,
890
,
1173
,
1161
,
1160
,
1169
,
/* 210 */
116
8
,
1167
,
1159
,
1158
,
1157
,
890
,
890
,
890
,
1153
,
1156
,
/* 220 */
115
5
,
1154
,
890
,
890
,
890
,
890
,
1163
,
1162
,
890
,
890
,
/* 230 */
8
90
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
1127
,
1123
,
/* 240 */
8
90
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
/* 250 */
8
90
,
1133
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
/* 260 */
8
90
,
1022
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
/* 270 */
8
90
,
890
,
890
,
890
,
1073
,
890
,
890
,
890
,
890
,
1085
,
/* 280 */
108
4
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
/* 290 */
8
90
,
890
,
1117
,
890
,
1109
,
890
,
890
,
1034
,
890
,
890
,
/* 300 */
8
90
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
/* 310 */
8
90
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
/* 320 */
8
90
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
/* 330 */
8
90
,
890
,
1192
,
1187
,
1188
,
1185
,
890
,
890
,
890
,
1184
,
/* 340 */
117
9
,
1180
,
890
,
890
,
890
,
1177
,
890
,
890
,
890
,
890
,
/* 350 */
8
90
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
890
,
/* 360 */
9
81
,
890
,
919
,
917
,
890
,
890
,
/* 0 */
8
88
,
950
,
938
,
946
,
1171
,
1171
,
1171
,
888
,
888
,
888
,
/* 10 */
8
88
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
/* 20 */
8
88
,
1078
,
908
,
1171
,
888
,
888
,
888
,
888
,
888
,
1093
,
/* 30 */
1028
,
956
,
946
,
888
,
888
,
888
,
888
,
888
,
956
,
888
,
/* 40 */
888
,
956
,
888
,
1073
,
888
,
888
,
888
,
888
,
888
,
888
,
/* 50 */
8
88
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
/* 60 */
8
88
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
/* 70 */
8
88
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
1080
,
888
,
/* 80 */
8
88
,
1112
,
1112
,
1071
,
888
,
888
,
888
,
910
,
888
,
888
,
/* 90 */
1086
,
910
,
1083
,
888
,
1088
,
910
,
888
,
888
,
888
,
888
,
/* 100 */
8
88
,
910
,
888
,
888
,
910
,
1119
,
1123
,
1105
,
1117
,
1113
,
/* 110 */
1100
,
1098
,
1096
,
1104
,
1127
,
910
,
888
,
888
,
910
,
888
,
/* 120 */
910
,
888
,
888
,
888
,
954
,
888
,
888
,
954
,
888
,
888
,
/* 130 */
8
88
,
946
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
/* 140 */
8
88
,
910
,
888
,
888
,
888
,
888
,
888
,
888
,
910
,
888
,
/* 150 */
8
88
,
972
,
970
,
968
,
960
,
966
,
962
,
964
,
958
,
888
,
/* 160 */
8
88
,
888
,
888
,
936
,
888
,
934
,
888
,
888
,
888
,
888
,
/* 170 */
888
,
910
,
888
,
910
,
888
,
888
,
888
,
888
,
888
,
888
,
/* 180 */
888
,
944
,
888
,
944
,
910
,
888
,
944
,
910
,
888
,
944
,
/* 190 */
91
9
,
888
,
888
,
888
,
910
,
888
,
888
,
910
,
888
,
906
,
/* 200 */
99
4
,
1011
,
888
,
1128
,
1118
,
888
,
1170
,
1158
,
1157
,
1166
,
/* 210 */
116
5
,
1164
,
1156
,
1155
,
1154
,
888
,
888
,
888
,
1150
,
1153
,
/* 220 */
115
2
,
1151
,
888
,
888
,
888
,
888
,
1160
,
1159
,
888
,
888
,
/* 230 */
8
88
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
1124
,
1120
,
/* 240 */
8
88
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
/* 250 */
8
88
,
1130
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
/* 260 */
8
88
,
1019
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
/* 270 */
8
88
,
888
,
888
,
888
,
1070
,
888
,
888
,
888
,
888
,
1082
,
/* 280 */
108
1
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
/* 290 */
8
88
,
888
,
1114
,
888
,
1106
,
888
,
888
,
1031
,
888
,
888
,
/* 300 */
8
88
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
/* 310 */
8
88
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
/* 320 */
8
88
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
/* 330 */
8
88
,
888
,
1189
,
1184
,
1185
,
1182
,
888
,
888
,
888
,
1181
,
/* 340 */
117
6
,
1177
,
888
,
888
,
888
,
1174
,
888
,
888
,
888
,
888
,
/* 350 */
8
88
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
888
,
/* 360 */
9
78
,
888
,
917
,
915
,
888
,
888
,
};
/********** End of lemon-generated parsing tables *****************************/
...
...
@@ -1122,257 +1120,256 @@ static const char *const yyRuleName[] = {
/* 49 */
"cmd ::= ALTER ACCOUNT ids PASS ids acct_optr"
,
/* 50 */
"cmd ::= COMPACT VNODES IN LP exprlist RP"
,
/* 51 */
"ids ::= ID"
,
/* 52 */
"ids ::= STRING"
,
/* 53 */
"ifexists ::= IF EXISTS"
,
/* 54 */
"ifexists ::="
,
/* 55 */
"ifnotexists ::= IF NOT EXISTS"
,
/* 56 */
"ifnotexists ::="
,
/* 57 */
"cmd ::= CREATE DNODE ids PORT ids"
,
/* 58 */
"cmd ::= CREATE DNODE IPTOKEN PORT ids"
,
/* 59 */
"cmd ::= CREATE ACCOUNT ids PASS ids acct_optr"
,
/* 60 */
"cmd ::= CREATE DATABASE ifnotexists ids db_optr"
,
/* 61 */
"cmd ::= CREATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize"
,
/* 62 */
"cmd ::= CREATE AGGREGATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize"
,
/* 63 */
"cmd ::= CREATE USER ids PASS ids"
,
/* 64 */
"bufsize ::="
,
/* 65 */
"bufsize ::= BUFSIZE INTEGER"
,
/* 66 */
"pps ::="
,
/* 67 */
"pps ::= PPS INTEGER"
,
/* 68 */
"tseries ::="
,
/* 69 */
"tseries ::= TSERIES INTEGER"
,
/* 70 */
"dbs ::="
,
/* 71 */
"dbs ::= DBS INTEGER"
,
/* 72 */
"streams ::="
,
/* 73 */
"streams ::= STREAMS INTEGER"
,
/* 74 */
"storage ::="
,
/* 75 */
"storage ::= STORAGE INTEGER"
,
/* 76 */
"qtime ::="
,
/* 77 */
"qtime ::= QTIME INTEGER"
,
/* 78 */
"users ::="
,
/* 79 */
"users ::= USERS INTEGER"
,
/* 80 */
"conns ::="
,
/* 81 */
"conns ::= CONNS INTEGER"
,
/* 82 */
"state ::="
,
/* 83 */
"state ::= STATE ids"
,
/* 84 */
"acct_optr ::= pps tseries storage streams qtime dbs users conns state"
,
/* 85 */
"intitemlist ::= intitemlist COMMA intitem"
,
/* 86 */
"intitemlist ::= intitem"
,
/* 87 */
"intitem ::= INTEGER"
,
/* 88 */
"keep ::= KEEP intitemlist"
,
/* 89 */
"cache ::= CACHE INTEGER"
,
/* 90 */
"replica ::= REPLICA INTEGER"
,
/* 91 */
"quorum ::= QUORUM INTEGER"
,
/* 92 */
"days ::= DAYS INTEGER"
,
/* 93 */
"minrows ::= MINROWS INTEGER"
,
/* 94 */
"maxrows ::= MAXROWS INTEGER"
,
/* 95 */
"blocks ::= BLOCKS INTEGER"
,
/* 96 */
"ctime ::= CTIME INTEGER"
,
/* 97 */
"wal ::= WAL INTEGER"
,
/* 98 */
"fsync ::= FSYNC INTEGER"
,
/* 99 */
"comp ::= COMP INTEGER"
,
/* 100 */
"prec ::= PRECISION STRING"
,
/* 101 */
"update ::= UPDATE INTEGER"
,
/* 102 */
"cachelast ::= CACHELAST INTEGER"
,
/* 103 */
"vgroups ::= VGROUPS INTEGER"
,
/* 104 */
"db_optr ::="
,
/* 105 */
"db_optr ::= db_optr cache"
,
/* 106 */
"db_optr ::= db_optr replica"
,
/* 107 */
"db_optr ::= db_optr quorum"
,
/* 108 */
"db_optr ::= db_optr days"
,
/* 109 */
"db_optr ::= db_optr minrows"
,
/* 110 */
"db_optr ::= db_optr maxrows"
,
/* 111 */
"db_optr ::= db_optr blocks"
,
/* 112 */
"db_optr ::= db_optr ctime"
,
/* 113 */
"db_optr ::= db_optr wal"
,
/* 114 */
"db_optr ::= db_optr fsync"
,
/* 115 */
"db_optr ::= db_optr comp"
,
/* 116 */
"db_optr ::= db_optr prec"
,
/* 117 */
"db_optr ::= db_optr keep"
,
/* 118 */
"db_optr ::= db_optr update"
,
/* 119 */
"db_optr ::= db_optr cachelast"
,
/* 120 */
"db_optr ::= db_optr vgroups"
,
/* 121 */
"alter_db_optr ::="
,
/* 122 */
"alter_db_optr ::= alter_db_optr replica"
,
/* 123 */
"alter_db_optr ::= alter_db_optr quorum"
,
/* 124 */
"alter_db_optr ::= alter_db_optr keep"
,
/* 125 */
"alter_db_optr ::= alter_db_optr blocks"
,
/* 126 */
"alter_db_optr ::= alter_db_optr comp"
,
/* 127 */
"alter_db_optr ::= alter_db_optr update"
,
/* 128 */
"alter_db_optr ::= alter_db_optr cachelast"
,
/* 129 */
"typename ::= ids"
,
/* 130 */
"typename ::= ids LP signed RP"
,
/* 131 */
"typename ::= ids UNSIGNED"
,
/* 132 */
"signed ::= INTEGER"
,
/* 133 */
"signed ::= PLUS INTEGER"
,
/* 134 */
"signed ::= MINUS INTEGER"
,
/* 135 */
"cmd ::= CREATE TABLE create_table_args"
,
/* 136 */
"cmd ::= CREATE TABLE create_stable_args"
,
/* 137 */
"cmd ::= CREATE STABLE create_stable_args"
,
/* 138 */
"cmd ::= CREATE TABLE create_table_list"
,
/* 139 */
"create_table_list ::= create_from_stable"
,
/* 140 */
"create_table_list ::= create_table_list create_from_stable"
,
/* 141 */
"create_table_args ::= ifnotexists ids cpxName LP columnlist RP"
,
/* 142 */
"create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP"
,
/* 143 */
"create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist1 RP"
,
/* 144 */
"create_from_stable ::= ifnotexists ids cpxName USING ids cpxName LP tagNamelist RP TAGS LP tagitemlist1 RP"
,
/* 145 */
"tagNamelist ::= tagNamelist COMMA ids"
,
/* 146 */
"tagNamelist ::= ids"
,
/* 147 */
"create_table_args ::= ifnotexists ids cpxName AS select"
,
/* 148 */
"columnlist ::= columnlist COMMA column"
,
/* 149 */
"columnlist ::= column"
,
/* 150 */
"column ::= ids typename"
,
/* 151 */
"tagitemlist1 ::= tagitemlist1 COMMA tagitem1"
,
/* 152 */
"tagitemlist1 ::= tagitem1"
,
/* 153 */
"tagitem1 ::= MINUS INTEGER"
,
/* 154 */
"tagitem1 ::= MINUS FLOAT"
,
/* 155 */
"tagitem1 ::= PLUS INTEGER"
,
/* 156 */
"tagitem1 ::= PLUS FLOAT"
,
/* 157 */
"tagitem1 ::= INTEGER"
,
/* 158 */
"tagitem1 ::= FLOAT"
,
/* 159 */
"tagitem1 ::= STRING"
,
/* 160 */
"tagitem1 ::= BOOL"
,
/* 161 */
"tagitem1 ::= NULL"
,
/* 162 */
"tagitem1 ::= NOW"
,
/* 163 */
"tagitemlist ::= tagitemlist COMMA tagitem"
,
/* 164 */
"tagitemlist ::= tagitem"
,
/* 165 */
"tagitem ::= INTEGER"
,
/* 166 */
"tagitem ::= FLOAT"
,
/* 167 */
"tagitem ::= STRING"
,
/* 168 */
"tagitem ::= BOOL"
,
/* 169 */
"tagitem ::= NULL"
,
/* 170 */
"tagitem ::= NOW"
,
/* 171 */
"tagitem ::= MINUS INTEGER"
,
/* 172 */
"tagitem ::= MINUS FLOAT"
,
/* 173 */
"tagitem ::= PLUS INTEGER"
,
/* 174 */
"tagitem ::= PLUS FLOAT"
,
/* 175 */
"select ::= SELECT selcollist from where_opt interval_option sliding_opt session_option windowstate_option fill_opt groupby_opt having_opt orderby_opt slimit_opt limit_opt"
,
/* 176 */
"select ::= LP select RP"
,
/* 177 */
"union ::= select"
,
/* 178 */
"union ::= union UNION ALL select"
,
/* 179 */
"union ::= union UNION select"
,
/* 180 */
"cmd ::= union"
,
/* 181 */
"select ::= SELECT selcollist"
,
/* 182 */
"sclp ::= selcollist COMMA"
,
/* 183 */
"sclp ::="
,
/* 184 */
"selcollist ::= sclp distinct expr as"
,
/* 185 */
"selcollist ::= sclp STAR"
,
/* 186 */
"as ::= AS ids"
,
/* 187 */
"as ::= ids"
,
/* 188 */
"as ::="
,
/* 189 */
"distinct ::= DISTINCT"
,
/* 190 */
"distinct ::="
,
/* 191 */
"from ::= FROM tablelist"
,
/* 192 */
"from ::= FROM sub"
,
/* 193 */
"sub ::= LP union RP"
,
/* 194 */
"sub ::= LP union RP ids"
,
/* 195 */
"sub ::= sub COMMA LP union RP ids"
,
/* 196 */
"tablelist ::= ids cpxName"
,
/* 197 */
"tablelist ::= ids cpxName ids"
,
/* 198 */
"tablelist ::= tablelist COMMA ids cpxName"
,
/* 199 */
"tablelist ::= tablelist COMMA ids cpxName ids"
,
/* 200 */
"tmvar ::= VARIABLE"
,
/* 201 */
"interval_option ::= intervalKey LP tmvar RP"
,
/* 202 */
"interval_option ::= intervalKey LP tmvar COMMA tmvar RP"
,
/* 203 */
"interval_option ::="
,
/* 204 */
"intervalKey ::= INTERVAL"
,
/* 205 */
"intervalKey ::= EVERY"
,
/* 206 */
"session_option ::="
,
/* 207 */
"session_option ::= SESSION LP ids cpxName COMMA tmvar RP"
,
/* 208 */
"windowstate_option ::="
,
/* 209 */
"windowstate_option ::= STATE_WINDOW LP ids RP"
,
/* 210 */
"fill_opt ::="
,
/* 211 */
"fill_opt ::= FILL LP ID COMMA tagitemlist RP"
,
/* 212 */
"fill_opt ::= FILL LP ID RP"
,
/* 213 */
"sliding_opt ::= SLIDING LP tmvar RP"
,
/* 214 */
"sliding_opt ::="
,
/* 215 */
"orderby_opt ::="
,
/* 216 */
"orderby_opt ::= ORDER BY sortlist"
,
/* 217 */
"sortlist ::= sortlist COMMA item sortorder"
,
/* 218 */
"sortlist ::= item sortorder"
,
/* 219 */
"item ::= ids cpxName"
,
/* 220 */
"sortorder ::= ASC"
,
/* 221 */
"sortorder ::= DESC"
,
/* 222 */
"sortorder ::="
,
/* 223 */
"groupby_opt ::="
,
/* 224 */
"groupby_opt ::= GROUP BY grouplist"
,
/* 225 */
"grouplist ::= grouplist COMMA item"
,
/* 226 */
"grouplist ::= item"
,
/* 227 */
"having_opt ::="
,
/* 228 */
"having_opt ::= HAVING expr"
,
/* 229 */
"limit_opt ::="
,
/* 230 */
"limit_opt ::= LIMIT signed"
,
/* 231 */
"limit_opt ::= LIMIT signed OFFSET signed"
,
/* 232 */
"limit_opt ::= LIMIT signed COMMA signed"
,
/* 233 */
"slimit_opt ::="
,
/* 234 */
"slimit_opt ::= SLIMIT signed"
,
/* 235 */
"slimit_opt ::= SLIMIT signed SOFFSET signed"
,
/* 236 */
"slimit_opt ::= SLIMIT signed COMMA signed"
,
/* 237 */
"where_opt ::="
,
/* 238 */
"where_opt ::= WHERE expr"
,
/* 239 */
"expr ::= LP expr RP"
,
/* 240 */
"expr ::= ID"
,
/* 241 */
"expr ::= ID DOT ID"
,
/* 242 */
"expr ::= ID DOT STAR"
,
/* 243 */
"expr ::= INTEGER"
,
/* 244 */
"expr ::= MINUS INTEGER"
,
/* 245 */
"expr ::= PLUS INTEGER"
,
/* 246 */
"expr ::= FLOAT"
,
/* 247 */
"expr ::= MINUS FLOAT"
,
/* 248 */
"expr ::= PLUS FLOAT"
,
/* 249 */
"expr ::= STRING"
,
/* 250 */
"expr ::= NOW"
,
/* 251 */
"expr ::= VARIABLE"
,
/* 252 */
"expr ::= PLUS VARIABLE"
,
/* 253 */
"expr ::= MINUS VARIABLE"
,
/* 254 */
"expr ::= BOOL"
,
/* 255 */
"expr ::= NULL"
,
/* 256 */
"expr ::= ID LP exprlist RP"
,
/* 257 */
"expr ::= ID LP STAR RP"
,
/* 258 */
"expr ::= expr IS NULL"
,
/* 259 */
"expr ::= expr IS NOT NULL"
,
/* 260 */
"expr ::= expr LT expr"
,
/* 261 */
"expr ::= expr GT expr"
,
/* 262 */
"expr ::= expr LE expr"
,
/* 263 */
"expr ::= expr GE expr"
,
/* 264 */
"expr ::= expr NE expr"
,
/* 265 */
"expr ::= expr EQ expr"
,
/* 266 */
"expr ::= expr BETWEEN expr AND expr"
,
/* 267 */
"expr ::= expr AND expr"
,
/* 268 */
"expr ::= expr OR expr"
,
/* 269 */
"expr ::= expr PLUS expr"
,
/* 270 */
"expr ::= expr MINUS expr"
,
/* 271 */
"expr ::= expr STAR expr"
,
/* 272 */
"expr ::= expr SLASH expr"
,
/* 273 */
"expr ::= expr REM expr"
,
/* 274 */
"expr ::= expr LIKE expr"
,
/* 275 */
"expr ::= expr MATCH expr"
,
/* 276 */
"expr ::= expr NMATCH expr"
,
/* 277 */
"expr ::= expr IN LP exprlist RP"
,
/* 278 */
"exprlist ::= exprlist COMMA expritem"
,
/* 279 */
"exprlist ::= expritem"
,
/* 280 */
"expritem ::= expr"
,
/* 281 */
"expritem ::="
,
/* 282 */
"cmd ::= RESET QUERY CACHE"
,
/* 283 */
"cmd ::= SYNCDB ids REPLICA"
,
/* 284 */
"cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist"
,
/* 285 */
"cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids"
,
/* 286 */
"cmd ::= ALTER TABLE ids cpxName MODIFY COLUMN columnlist"
,
/* 287 */
"cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist"
,
/* 288 */
"cmd ::= ALTER TABLE ids cpxName DROP TAG ids"
,
/* 289 */
"cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids"
,
/* 290 */
"cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem"
,
/* 291 */
"cmd ::= ALTER TABLE ids cpxName MODIFY TAG columnlist"
,
/* 292 */
"cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist"
,
/* 293 */
"cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids"
,
/* 294 */
"cmd ::= ALTER STABLE ids cpxName MODIFY COLUMN columnlist"
,
/* 295 */
"cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist"
,
/* 296 */
"cmd ::= ALTER STABLE ids cpxName DROP TAG ids"
,
/* 297 */
"cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids"
,
/* 298 */
"cmd ::= ALTER STABLE ids cpxName SET TAG ids EQ tagitem"
,
/* 299 */
"cmd ::= ALTER STABLE ids cpxName MODIFY TAG columnlist"
,
/* 300 */
"cmd ::= KILL CONNECTION INTEGER"
,
/* 301 */
"cmd ::= KILL STREAM INTEGER COLON INTEGER"
,
/* 302 */
"cmd ::= KILL QUERY INTEGER COLON INTEGER"
,
/* 52 */
"ifexists ::= IF EXISTS"
,
/* 53 */
"ifexists ::="
,
/* 54 */
"ifnotexists ::= IF NOT EXISTS"
,
/* 55 */
"ifnotexists ::="
,
/* 56 */
"cmd ::= CREATE DNODE ids PORT ids"
,
/* 57 */
"cmd ::= CREATE DNODE IPTOKEN PORT ids"
,
/* 58 */
"cmd ::= CREATE ACCOUNT ids PASS ids acct_optr"
,
/* 59 */
"cmd ::= CREATE DATABASE ifnotexists ids db_optr"
,
/* 60 */
"cmd ::= CREATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize"
,
/* 61 */
"cmd ::= CREATE AGGREGATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize"
,
/* 62 */
"cmd ::= CREATE USER ids PASS ids"
,
/* 63 */
"bufsize ::="
,
/* 64 */
"bufsize ::= BUFSIZE INTEGER"
,
/* 65 */
"pps ::="
,
/* 66 */
"pps ::= PPS INTEGER"
,
/* 67 */
"tseries ::="
,
/* 68 */
"tseries ::= TSERIES INTEGER"
,
/* 69 */
"dbs ::="
,
/* 70 */
"dbs ::= DBS INTEGER"
,
/* 71 */
"streams ::="
,
/* 72 */
"streams ::= STREAMS INTEGER"
,
/* 73 */
"storage ::="
,
/* 74 */
"storage ::= STORAGE INTEGER"
,
/* 75 */
"qtime ::="
,
/* 76 */
"qtime ::= QTIME INTEGER"
,
/* 77 */
"users ::="
,
/* 78 */
"users ::= USERS INTEGER"
,
/* 79 */
"conns ::="
,
/* 80 */
"conns ::= CONNS INTEGER"
,
/* 81 */
"state ::="
,
/* 82 */
"state ::= STATE ids"
,
/* 83 */
"acct_optr ::= pps tseries storage streams qtime dbs users conns state"
,
/* 84 */
"intitemlist ::= intitemlist COMMA intitem"
,
/* 85 */
"intitemlist ::= intitem"
,
/* 86 */
"intitem ::= INTEGER"
,
/* 87 */
"keep ::= KEEP intitemlist"
,
/* 88 */
"cache ::= CACHE INTEGER"
,
/* 89 */
"replica ::= REPLICA INTEGER"
,
/* 90 */
"quorum ::= QUORUM INTEGER"
,
/* 91 */
"days ::= DAYS INTEGER"
,
/* 92 */
"minrows ::= MINROWS INTEGER"
,
/* 93 */
"maxrows ::= MAXROWS INTEGER"
,
/* 94 */
"blocks ::= BLOCKS INTEGER"
,
/* 95 */
"ctime ::= CTIME INTEGER"
,
/* 96 */
"wal ::= WAL INTEGER"
,
/* 97 */
"fsync ::= FSYNC INTEGER"
,
/* 98 */
"comp ::= COMP INTEGER"
,
/* 99 */
"prec ::= PRECISION STRING"
,
/* 100 */
"update ::= UPDATE INTEGER"
,
/* 101 */
"cachelast ::= CACHELAST INTEGER"
,
/* 102 */
"vgroups ::= VGROUPS INTEGER"
,
/* 103 */
"db_optr ::="
,
/* 104 */
"db_optr ::= db_optr cache"
,
/* 105 */
"db_optr ::= db_optr replica"
,
/* 106 */
"db_optr ::= db_optr quorum"
,
/* 107 */
"db_optr ::= db_optr days"
,
/* 108 */
"db_optr ::= db_optr minrows"
,
/* 109 */
"db_optr ::= db_optr maxrows"
,
/* 110 */
"db_optr ::= db_optr blocks"
,
/* 111 */
"db_optr ::= db_optr ctime"
,
/* 112 */
"db_optr ::= db_optr wal"
,
/* 113 */
"db_optr ::= db_optr fsync"
,
/* 114 */
"db_optr ::= db_optr comp"
,
/* 115 */
"db_optr ::= db_optr prec"
,
/* 116 */
"db_optr ::= db_optr keep"
,
/* 117 */
"db_optr ::= db_optr update"
,
/* 118 */
"db_optr ::= db_optr cachelast"
,
/* 119 */
"db_optr ::= db_optr vgroups"
,
/* 120 */
"alter_db_optr ::="
,
/* 121 */
"alter_db_optr ::= alter_db_optr replica"
,
/* 122 */
"alter_db_optr ::= alter_db_optr quorum"
,
/* 123 */
"alter_db_optr ::= alter_db_optr keep"
,
/* 124 */
"alter_db_optr ::= alter_db_optr blocks"
,
/* 125 */
"alter_db_optr ::= alter_db_optr comp"
,
/* 126 */
"alter_db_optr ::= alter_db_optr update"
,
/* 127 */
"alter_db_optr ::= alter_db_optr cachelast"
,
/* 128 */
"typename ::= ids"
,
/* 129 */
"typename ::= ids LP signed RP"
,
/* 130 */
"typename ::= ids UNSIGNED"
,
/* 131 */
"signed ::= INTEGER"
,
/* 132 */
"signed ::= PLUS INTEGER"
,
/* 133 */
"signed ::= MINUS INTEGER"
,
/* 134 */
"cmd ::= CREATE TABLE create_table_args"
,
/* 135 */
"cmd ::= CREATE TABLE create_stable_args"
,
/* 136 */
"cmd ::= CREATE STABLE create_stable_args"
,
/* 137 */
"cmd ::= CREATE TABLE create_table_list"
,
/* 138 */
"create_table_list ::= create_from_stable"
,
/* 139 */
"create_table_list ::= create_table_list create_from_stable"
,
/* 140 */
"create_table_args ::= ifnotexists ids cpxName LP columnlist RP"
,
/* 141 */
"create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP"
,
/* 142 */
"create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist1 RP"
,
/* 143 */
"create_from_stable ::= ifnotexists ids cpxName USING ids cpxName LP tagNamelist RP TAGS LP tagitemlist1 RP"
,
/* 144 */
"tagNamelist ::= tagNamelist COMMA ids"
,
/* 145 */
"tagNamelist ::= ids"
,
/* 146 */
"create_table_args ::= ifnotexists ids cpxName AS select"
,
/* 147 */
"columnlist ::= columnlist COMMA column"
,
/* 148 */
"columnlist ::= column"
,
/* 149 */
"column ::= ids typename"
,
/* 150 */
"tagitemlist1 ::= tagitemlist1 COMMA tagitem1"
,
/* 151 */
"tagitemlist1 ::= tagitem1"
,
/* 152 */
"tagitem1 ::= MINUS INTEGER"
,
/* 153 */
"tagitem1 ::= MINUS FLOAT"
,
/* 154 */
"tagitem1 ::= PLUS INTEGER"
,
/* 155 */
"tagitem1 ::= PLUS FLOAT"
,
/* 156 */
"tagitem1 ::= INTEGER"
,
/* 157 */
"tagitem1 ::= FLOAT"
,
/* 158 */
"tagitem1 ::= STRING"
,
/* 159 */
"tagitem1 ::= BOOL"
,
/* 160 */
"tagitem1 ::= NULL"
,
/* 161 */
"tagitem1 ::= NOW"
,
/* 162 */
"tagitemlist ::= tagitemlist COMMA tagitem"
,
/* 163 */
"tagitemlist ::= tagitem"
,
/* 164 */
"tagitem ::= INTEGER"
,
/* 165 */
"tagitem ::= FLOAT"
,
/* 166 */
"tagitem ::= STRING"
,
/* 167 */
"tagitem ::= BOOL"
,
/* 168 */
"tagitem ::= NULL"
,
/* 169 */
"tagitem ::= NOW"
,
/* 170 */
"tagitem ::= MINUS INTEGER"
,
/* 171 */
"tagitem ::= MINUS FLOAT"
,
/* 172 */
"tagitem ::= PLUS INTEGER"
,
/* 173 */
"tagitem ::= PLUS FLOAT"
,
/* 174 */
"select ::= SELECT selcollist from where_opt interval_option sliding_opt session_option windowstate_option fill_opt groupby_opt having_opt orderby_opt slimit_opt limit_opt"
,
/* 175 */
"select ::= LP select RP"
,
/* 176 */
"union ::= select"
,
/* 177 */
"union ::= union UNION ALL select"
,
/* 178 */
"union ::= union UNION select"
,
/* 179 */
"cmd ::= union"
,
/* 180 */
"select ::= SELECT selcollist"
,
/* 181 */
"sclp ::= selcollist COMMA"
,
/* 182 */
"sclp ::="
,
/* 183 */
"selcollist ::= sclp distinct expr as"
,
/* 184 */
"selcollist ::= sclp STAR"
,
/* 185 */
"as ::= AS ids"
,
/* 186 */
"as ::= ids"
,
/* 187 */
"as ::="
,
/* 188 */
"distinct ::= DISTINCT"
,
/* 189 */
"distinct ::="
,
/* 190 */
"from ::= FROM tablelist"
,
/* 191 */
"from ::= FROM sub"
,
/* 192 */
"sub ::= LP union RP"
,
/* 193 */
"sub ::= LP union RP ids"
,
/* 194 */
"sub ::= sub COMMA LP union RP ids"
,
/* 195 */
"tablelist ::= ids cpxName"
,
/* 196 */
"tablelist ::= ids cpxName ids"
,
/* 197 */
"tablelist ::= tablelist COMMA ids cpxName"
,
/* 198 */
"tablelist ::= tablelist COMMA ids cpxName ids"
,
/* 199 */
"tmvar ::= VARIABLE"
,
/* 200 */
"interval_option ::= intervalKey LP tmvar RP"
,
/* 201 */
"interval_option ::= intervalKey LP tmvar COMMA tmvar RP"
,
/* 202 */
"interval_option ::="
,
/* 203 */
"intervalKey ::= INTERVAL"
,
/* 204 */
"intervalKey ::= EVERY"
,
/* 205 */
"session_option ::="
,
/* 206 */
"session_option ::= SESSION LP ids cpxName COMMA tmvar RP"
,
/* 207 */
"windowstate_option ::="
,
/* 208 */
"windowstate_option ::= STATE_WINDOW LP ids RP"
,
/* 209 */
"fill_opt ::="
,
/* 210 */
"fill_opt ::= FILL LP ID COMMA tagitemlist RP"
,
/* 211 */
"fill_opt ::= FILL LP ID RP"
,
/* 212 */
"sliding_opt ::= SLIDING LP tmvar RP"
,
/* 213 */
"sliding_opt ::="
,
/* 214 */
"orderby_opt ::="
,
/* 215 */
"orderby_opt ::= ORDER BY sortlist"
,
/* 216 */
"sortlist ::= sortlist COMMA item sortorder"
,
/* 217 */
"sortlist ::= item sortorder"
,
/* 218 */
"item ::= ids cpxName"
,
/* 219 */
"sortorder ::= ASC"
,
/* 220 */
"sortorder ::= DESC"
,
/* 221 */
"sortorder ::="
,
/* 222 */
"groupby_opt ::="
,
/* 223 */
"groupby_opt ::= GROUP BY grouplist"
,
/* 224 */
"grouplist ::= grouplist COMMA item"
,
/* 225 */
"grouplist ::= item"
,
/* 226 */
"having_opt ::="
,
/* 227 */
"having_opt ::= HAVING expr"
,
/* 228 */
"limit_opt ::="
,
/* 229 */
"limit_opt ::= LIMIT signed"
,
/* 230 */
"limit_opt ::= LIMIT signed OFFSET signed"
,
/* 231 */
"limit_opt ::= LIMIT signed COMMA signed"
,
/* 232 */
"slimit_opt ::="
,
/* 233 */
"slimit_opt ::= SLIMIT signed"
,
/* 234 */
"slimit_opt ::= SLIMIT signed SOFFSET signed"
,
/* 235 */
"slimit_opt ::= SLIMIT signed COMMA signed"
,
/* 236 */
"where_opt ::="
,
/* 237 */
"where_opt ::= WHERE expr"
,
/* 238 */
"expr ::= LP expr RP"
,
/* 239 */
"expr ::= ID"
,
/* 240 */
"expr ::= ID DOT ID"
,
/* 241 */
"expr ::= ID DOT STAR"
,
/* 242 */
"expr ::= INTEGER"
,
/* 243 */
"expr ::= MINUS INTEGER"
,
/* 244 */
"expr ::= PLUS INTEGER"
,
/* 245 */
"expr ::= FLOAT"
,
/* 246 */
"expr ::= MINUS FLOAT"
,
/* 247 */
"expr ::= PLUS FLOAT"
,
/* 248 */
"expr ::= STRING"
,
/* 249 */
"expr ::= NOW"
,
/* 250 */
"expr ::= VARIABLE"
,
/* 251 */
"expr ::= PLUS VARIABLE"
,
/* 252 */
"expr ::= MINUS VARIABLE"
,
/* 253 */
"expr ::= BOOL"
,
/* 254 */
"expr ::= NULL"
,
/* 255 */
"expr ::= ID LP exprlist RP"
,
/* 256 */
"expr ::= ID LP STAR RP"
,
/* 257 */
"expr ::= expr IS NULL"
,
/* 258 */
"expr ::= expr IS NOT NULL"
,
/* 259 */
"expr ::= expr LT expr"
,
/* 260 */
"expr ::= expr GT expr"
,
/* 261 */
"expr ::= expr LE expr"
,
/* 262 */
"expr ::= expr GE expr"
,
/* 263 */
"expr ::= expr NE expr"
,
/* 264 */
"expr ::= expr EQ expr"
,
/* 265 */
"expr ::= expr BETWEEN expr AND expr"
,
/* 266 */
"expr ::= expr AND expr"
,
/* 267 */
"expr ::= expr OR expr"
,
/* 268 */
"expr ::= expr PLUS expr"
,
/* 269 */
"expr ::= expr MINUS expr"
,
/* 270 */
"expr ::= expr STAR expr"
,
/* 271 */
"expr ::= expr SLASH expr"
,
/* 272 */
"expr ::= expr REM expr"
,
/* 273 */
"expr ::= expr LIKE expr"
,
/* 274 */
"expr ::= expr MATCH expr"
,
/* 275 */
"expr ::= expr NMATCH expr"
,
/* 276 */
"expr ::= expr IN LP exprlist RP"
,
/* 277 */
"exprlist ::= exprlist COMMA expritem"
,
/* 278 */
"exprlist ::= expritem"
,
/* 279 */
"expritem ::= expr"
,
/* 280 */
"expritem ::="
,
/* 281 */
"cmd ::= RESET QUERY CACHE"
,
/* 282 */
"cmd ::= SYNCDB ids REPLICA"
,
/* 283 */
"cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist"
,
/* 284 */
"cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids"
,
/* 285 */
"cmd ::= ALTER TABLE ids cpxName MODIFY COLUMN columnlist"
,
/* 286 */
"cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist"
,
/* 287 */
"cmd ::= ALTER TABLE ids cpxName DROP TAG ids"
,
/* 288 */
"cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids"
,
/* 289 */
"cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem"
,
/* 290 */
"cmd ::= ALTER TABLE ids cpxName MODIFY TAG columnlist"
,
/* 291 */
"cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist"
,
/* 292 */
"cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids"
,
/* 293 */
"cmd ::= ALTER STABLE ids cpxName MODIFY COLUMN columnlist"
,
/* 294 */
"cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist"
,
/* 295 */
"cmd ::= ALTER STABLE ids cpxName DROP TAG ids"
,
/* 296 */
"cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids"
,
/* 297 */
"cmd ::= ALTER STABLE ids cpxName SET TAG ids EQ tagitem"
,
/* 298 */
"cmd ::= ALTER STABLE ids cpxName MODIFY TAG columnlist"
,
/* 299 */
"cmd ::= KILL CONNECTION INTEGER"
,
/* 300 */
"cmd ::= KILL STREAM INTEGER COLON INTEGER"
,
/* 301 */
"cmd ::= KILL QUERY INTEGER COLON INTEGER"
,
};
#endif
/* NDEBUG */
...
...
@@ -1893,257 +1890,256 @@ static const struct {
{
193
,
-
6
},
/* (49) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */
{
193
,
-
6
},
/* (50) cmd ::= COMPACT VNODES IN LP exprlist RP */
{
194
,
-
1
},
/* (51) ids ::= ID */
{
194
,
-
1
},
/* (52) ids ::= STRING */
{
197
,
-
2
},
/* (53) ifexists ::= IF EXISTS */
{
197
,
0
},
/* (54) ifexists ::= */
{
201
,
-
3
},
/* (55) ifnotexists ::= IF NOT EXISTS */
{
201
,
0
},
/* (56) ifnotexists ::= */
{
193
,
-
5
},
/* (57) cmd ::= CREATE DNODE ids PORT ids */
{
193
,
-
5
},
/* (58) cmd ::= CREATE DNODE IPTOKEN PORT ids */
{
193
,
-
6
},
/* (59) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */
{
193
,
-
5
},
/* (60) cmd ::= CREATE DATABASE ifnotexists ids db_optr */
{
193
,
-
8
},
/* (61) cmd ::= CREATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize */
{
193
,
-
9
},
/* (62) cmd ::= CREATE AGGREGATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize */
{
193
,
-
5
},
/* (63) cmd ::= CREATE USER ids PASS ids */
{
204
,
0
},
/* (64) bufsize ::= */
{
204
,
-
2
},
/* (65) bufsize ::= BUFSIZE INTEGER */
{
205
,
0
},
/* (66) pps ::= */
{
205
,
-
2
},
/* (67) pps ::= PPS INTEGER */
{
206
,
0
},
/* (68) tseries ::= */
{
206
,
-
2
},
/* (69) tseries ::= TSERIES INTEGER */
{
207
,
0
},
/* (70) dbs ::= */
{
207
,
-
2
},
/* (71) dbs ::= DBS INTEGER */
{
208
,
0
},
/* (72) streams ::= */
{
208
,
-
2
},
/* (73) streams ::= STREAMS INTEGER */
{
209
,
0
},
/* (74) storage ::= */
{
209
,
-
2
},
/* (75) storage ::= STORAGE INTEGER */
{
210
,
0
},
/* (76) qtime ::= */
{
210
,
-
2
},
/* (77) qtime ::= QTIME INTEGER */
{
211
,
0
},
/* (78) users ::= */
{
211
,
-
2
},
/* (79) users ::= USERS INTEGER */
{
212
,
0
},
/* (80) conns ::= */
{
212
,
-
2
},
/* (81) conns ::= CONNS INTEGER */
{
213
,
0
},
/* (82) state ::= */
{
213
,
-
2
},
/* (83) state ::= STATE ids */
{
199
,
-
9
},
/* (84) acct_optr ::= pps tseries storage streams qtime dbs users conns state */
{
214
,
-
3
},
/* (85) intitemlist ::= intitemlist COMMA intitem */
{
214
,
-
1
},
/* (86) intitemlist ::= intitem */
{
215
,
-
1
},
/* (87) intitem ::= INTEGER */
{
216
,
-
2
},
/* (88) keep ::= KEEP intitemlist */
{
217
,
-
2
},
/* (89) cache ::= CACHE INTEGER */
{
218
,
-
2
},
/* (90) replica ::= REPLICA INTEGER */
{
219
,
-
2
},
/* (91) quorum ::= QUORUM INTEGER */
{
220
,
-
2
},
/* (92) days ::= DAYS INTEGER */
{
221
,
-
2
},
/* (93) minrows ::= MINROWS INTEGER */
{
222
,
-
2
},
/* (94) maxrows ::= MAXROWS INTEGER */
{
223
,
-
2
},
/* (95) blocks ::= BLOCKS INTEGER */
{
224
,
-
2
},
/* (96) ctime ::= CTIME INTEGER */
{
225
,
-
2
},
/* (97) wal ::= WAL INTEGER */
{
226
,
-
2
},
/* (98) fsync ::= FSYNC INTEGER */
{
227
,
-
2
},
/* (99) comp ::= COMP INTEGER */
{
228
,
-
2
},
/* (100) prec ::= PRECISION STRING */
{
229
,
-
2
},
/* (101) update ::= UPDATE INTEGER */
{
230
,
-
2
},
/* (102) cachelast ::= CACHELAST INTEGER */
{
231
,
-
2
},
/* (103) vgroups ::= VGROUPS INTEGER */
{
202
,
0
},
/* (104) db_optr ::= */
{
202
,
-
2
},
/* (105) db_optr ::= db_optr cache */
{
202
,
-
2
},
/* (106) db_optr ::= db_optr replica */
{
202
,
-
2
},
/* (107) db_optr ::= db_optr quorum */
{
202
,
-
2
},
/* (108) db_optr ::= db_optr days */
{
202
,
-
2
},
/* (109) db_optr ::= db_optr minrows */
{
202
,
-
2
},
/* (110) db_optr ::= db_optr maxrows */
{
202
,
-
2
},
/* (111) db_optr ::= db_optr blocks */
{
202
,
-
2
},
/* (112) db_optr ::= db_optr ctime */
{
202
,
-
2
},
/* (113) db_optr ::= db_optr wal */
{
202
,
-
2
},
/* (114) db_optr ::= db_optr fsync */
{
202
,
-
2
},
/* (115) db_optr ::= db_optr comp */
{
202
,
-
2
},
/* (116) db_optr ::= db_optr prec */
{
202
,
-
2
},
/* (117) db_optr ::= db_optr keep */
{
202
,
-
2
},
/* (118) db_optr ::= db_optr update */
{
202
,
-
2
},
/* (119) db_optr ::= db_optr cachelast */
{
202
,
-
2
},
/* (120) db_optr ::= db_optr vgroups */
{
198
,
0
},
/* (121) alter_db_optr ::= */
{
198
,
-
2
},
/* (122) alter_db_optr ::= alter_db_optr replica */
{
198
,
-
2
},
/* (123) alter_db_optr ::= alter_db_optr quorum */
{
198
,
-
2
},
/* (124) alter_db_optr ::= alter_db_optr keep */
{
198
,
-
2
},
/* (125) alter_db_optr ::= alter_db_optr blocks */
{
198
,
-
2
},
/* (126) alter_db_optr ::= alter_db_optr comp */
{
198
,
-
2
},
/* (127) alter_db_optr ::= alter_db_optr update */
{
198
,
-
2
},
/* (128) alter_db_optr ::= alter_db_optr cachelast */
{
203
,
-
1
},
/* (129) typename ::= ids */
{
203
,
-
4
},
/* (130) typename ::= ids LP signed RP */
{
203
,
-
2
},
/* (131) typename ::= ids UNSIGNED */
{
232
,
-
1
},
/* (132) signed ::= INTEGER */
{
232
,
-
2
},
/* (133) signed ::= PLUS INTEGER */
{
232
,
-
2
},
/* (134) signed ::= MINUS INTEGER */
{
193
,
-
3
},
/* (135) cmd ::= CREATE TABLE create_table_args */
{
193
,
-
3
},
/* (136) cmd ::= CREATE TABLE create_stable_args */
{
193
,
-
3
},
/* (137) cmd ::= CREATE STABLE create_stable_args */
{
193
,
-
3
},
/* (138) cmd ::= CREATE TABLE create_table_list */
{
235
,
-
1
},
/* (139) create_table_list ::= create_from_stable */
{
235
,
-
2
},
/* (140) create_table_list ::= create_table_list create_from_stable */
{
233
,
-
6
},
/* (141) create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
{
234
,
-
10
},
/* (142) create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
{
236
,
-
10
},
/* (143) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist1 RP */
{
236
,
-
13
},
/* (144) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName LP tagNamelist RP TAGS LP tagitemlist1 RP */
{
239
,
-
3
},
/* (145) tagNamelist ::= tagNamelist COMMA ids */
{
239
,
-
1
},
/* (146) tagNamelist ::= ids */
{
233
,
-
5
},
/* (147) create_table_args ::= ifnotexists ids cpxName AS select */
{
237
,
-
3
},
/* (148) columnlist ::= columnlist COMMA column */
{
237
,
-
1
},
/* (149) columnlist ::= column */
{
241
,
-
2
},
/* (150) column ::= ids typename */
{
238
,
-
3
},
/* (151) tagitemlist1 ::= tagitemlist1 COMMA tagitem1 */
{
238
,
-
1
},
/* (152) tagitemlist1 ::= tagitem1 */
{
242
,
-
2
},
/* (153) tagitem1 ::= MINUS INTEGER */
{
242
,
-
2
},
/* (154) tagitem1 ::= MINUS FLOAT */
{
242
,
-
2
},
/* (155) tagitem1 ::= PLUS INTEGER */
{
242
,
-
2
},
/* (156) tagitem1 ::= PLUS FLOAT */
{
242
,
-
1
},
/* (157) tagitem1 ::= INTEGER */
{
242
,
-
1
},
/* (158) tagitem1 ::= FLOAT */
{
242
,
-
1
},
/* (159) tagitem1 ::= STRING */
{
242
,
-
1
},
/* (160) tagitem1 ::= BOOL */
{
242
,
-
1
},
/* (161) tagitem1 ::= NULL */
{
242
,
-
1
},
/* (162) tagitem1 ::= NOW */
{
243
,
-
3
},
/* (163) tagitemlist ::= tagitemlist COMMA tagitem */
{
243
,
-
1
},
/* (164) tagitemlist ::= tagitem */
{
244
,
-
1
},
/* (165) tagitem ::= INTEGER */
{
244
,
-
1
},
/* (166) tagitem ::= FLOAT */
{
244
,
-
1
},
/* (167) tagitem ::= STRING */
{
244
,
-
1
},
/* (168) tagitem ::= BOOL */
{
244
,
-
1
},
/* (169) tagitem ::= NULL */
{
244
,
-
1
},
/* (170) tagitem ::= NOW */
{
244
,
-
2
},
/* (171) tagitem ::= MINUS INTEGER */
{
244
,
-
2
},
/* (172) tagitem ::= MINUS FLOAT */
{
244
,
-
2
},
/* (173) tagitem ::= PLUS INTEGER */
{
244
,
-
2
},
/* (174) tagitem ::= PLUS FLOAT */
{
240
,
-
14
},
/* (175) select ::= SELECT selcollist from where_opt interval_option sliding_opt session_option windowstate_option fill_opt groupby_opt having_opt orderby_opt slimit_opt limit_opt */
{
240
,
-
3
},
/* (176) select ::= LP select RP */
{
258
,
-
1
},
/* (177) union ::= select */
{
258
,
-
4
},
/* (178) union ::= union UNION ALL select */
{
258
,
-
3
},
/* (179) union ::= union UNION select */
{
193
,
-
1
},
/* (180) cmd ::= union */
{
240
,
-
2
},
/* (181) select ::= SELECT selcollist */
{
259
,
-
2
},
/* (182) sclp ::= selcollist COMMA */
{
259
,
0
},
/* (183) sclp ::= */
{
245
,
-
4
},
/* (184) selcollist ::= sclp distinct expr as */
{
245
,
-
2
},
/* (185) selcollist ::= sclp STAR */
{
262
,
-
2
},
/* (186) as ::= AS ids */
{
262
,
-
1
},
/* (187) as ::= ids */
{
262
,
0
},
/* (188) as ::= */
{
260
,
-
1
},
/* (189) distinct ::= DISTINCT */
{
260
,
0
},
/* (190) distinct ::= */
{
246
,
-
2
},
/* (191) from ::= FROM tablelist */
{
246
,
-
2
},
/* (192) from ::= FROM sub */
{
264
,
-
3
},
/* (193) sub ::= LP union RP */
{
264
,
-
4
},
/* (194) sub ::= LP union RP ids */
{
264
,
-
6
},
/* (195) sub ::= sub COMMA LP union RP ids */
{
263
,
-
2
},
/* (196) tablelist ::= ids cpxName */
{
263
,
-
3
},
/* (197) tablelist ::= ids cpxName ids */
{
263
,
-
4
},
/* (198) tablelist ::= tablelist COMMA ids cpxName */
{
263
,
-
5
},
/* (199) tablelist ::= tablelist COMMA ids cpxName ids */
{
265
,
-
1
},
/* (200) tmvar ::= VARIABLE */
{
248
,
-
4
},
/* (201) interval_option ::= intervalKey LP tmvar RP */
{
248
,
-
6
},
/* (202) interval_option ::= intervalKey LP tmvar COMMA tmvar RP */
{
248
,
0
},
/* (203) interval_option ::= */
{
266
,
-
1
},
/* (204) intervalKey ::= INTERVAL */
{
266
,
-
1
},
/* (205) intervalKey ::= EVERY */
{
250
,
0
},
/* (206) session_option ::= */
{
250
,
-
7
},
/* (207) session_option ::= SESSION LP ids cpxName COMMA tmvar RP */
{
251
,
0
},
/* (208) windowstate_option ::= */
{
251
,
-
4
},
/* (209) windowstate_option ::= STATE_WINDOW LP ids RP */
{
252
,
0
},
/* (210) fill_opt ::= */
{
252
,
-
6
},
/* (211) fill_opt ::= FILL LP ID COMMA tagitemlist RP */
{
252
,
-
4
},
/* (212) fill_opt ::= FILL LP ID RP */
{
249
,
-
4
},
/* (213) sliding_opt ::= SLIDING LP tmvar RP */
{
249
,
0
},
/* (214) sliding_opt ::= */
{
255
,
0
},
/* (215) orderby_opt ::= */
{
255
,
-
3
},
/* (216) orderby_opt ::= ORDER BY sortlist */
{
267
,
-
4
},
/* (217) sortlist ::= sortlist COMMA item sortorder */
{
267
,
-
2
},
/* (218) sortlist ::= item sortorder */
{
269
,
-
2
},
/* (219) item ::= ids cpxName */
{
270
,
-
1
},
/* (220) sortorder ::= ASC */
{
270
,
-
1
},
/* (221) sortorder ::= DESC */
{
270
,
0
},
/* (222) sortorder ::= */
{
253
,
0
},
/* (223) groupby_opt ::= */
{
253
,
-
3
},
/* (224) groupby_opt ::= GROUP BY grouplist */
{
271
,
-
3
},
/* (225) grouplist ::= grouplist COMMA item */
{
271
,
-
1
},
/* (226) grouplist ::= item */
{
254
,
0
},
/* (227) having_opt ::= */
{
254
,
-
2
},
/* (228) having_opt ::= HAVING expr */
{
257
,
0
},
/* (229) limit_opt ::= */
{
257
,
-
2
},
/* (230) limit_opt ::= LIMIT signed */
{
257
,
-
4
},
/* (231) limit_opt ::= LIMIT signed OFFSET signed */
{
257
,
-
4
},
/* (232) limit_opt ::= LIMIT signed COMMA signed */
{
256
,
0
},
/* (233) slimit_opt ::= */
{
256
,
-
2
},
/* (234) slimit_opt ::= SLIMIT signed */
{
256
,
-
4
},
/* (235) slimit_opt ::= SLIMIT signed SOFFSET signed */
{
256
,
-
4
},
/* (236) slimit_opt ::= SLIMIT signed COMMA signed */
{
247
,
0
},
/* (237) where_opt ::= */
{
247
,
-
2
},
/* (238) where_opt ::= WHERE expr */
{
261
,
-
3
},
/* (239) expr ::= LP expr RP */
{
261
,
-
1
},
/* (240) expr ::= ID */
{
261
,
-
3
},
/* (241) expr ::= ID DOT ID */
{
261
,
-
3
},
/* (242) expr ::= ID DOT STAR */
{
261
,
-
1
},
/* (243) expr ::= INTEGER */
{
261
,
-
2
},
/* (244) expr ::= MINUS INTEGER */
{
261
,
-
2
},
/* (245) expr ::= PLUS INTEGER */
{
261
,
-
1
},
/* (246) expr ::= FLOAT */
{
261
,
-
2
},
/* (247) expr ::= MINUS FLOAT */
{
261
,
-
2
},
/* (248) expr ::= PLUS FLOAT */
{
261
,
-
1
},
/* (249) expr ::= STRING */
{
261
,
-
1
},
/* (250) expr ::= NOW */
{
261
,
-
1
},
/* (251) expr ::= VARIABLE */
{
261
,
-
2
},
/* (252) expr ::= PLUS VARIABLE */
{
261
,
-
2
},
/* (253) expr ::= MINUS VARIABLE */
{
261
,
-
1
},
/* (254) expr ::= BOOL */
{
261
,
-
1
},
/* (255) expr ::= NULL */
{
261
,
-
4
},
/* (256) expr ::= ID LP exprlist RP */
{
261
,
-
4
},
/* (257) expr ::= ID LP STAR RP */
{
261
,
-
3
},
/* (258) expr ::= expr IS NULL */
{
261
,
-
4
},
/* (259) expr ::= expr IS NOT NULL */
{
261
,
-
3
},
/* (260) expr ::= expr LT expr */
{
261
,
-
3
},
/* (261) expr ::= expr GT expr */
{
261
,
-
3
},
/* (262) expr ::= expr LE expr */
{
261
,
-
3
},
/* (263) expr ::= expr GE expr */
{
261
,
-
3
},
/* (264) expr ::= expr NE expr */
{
261
,
-
3
},
/* (265) expr ::= expr EQ expr */
{
261
,
-
5
},
/* (266) expr ::= expr BETWEEN expr AND expr */
{
261
,
-
3
},
/* (267) expr ::= expr AND expr */
{
261
,
-
3
},
/* (268) expr ::= expr OR expr */
{
261
,
-
3
},
/* (269) expr ::= expr PLUS expr */
{
261
,
-
3
},
/* (270) expr ::= expr MINUS expr */
{
261
,
-
3
},
/* (271) expr ::= expr STAR expr */
{
261
,
-
3
},
/* (272) expr ::= expr SLASH expr */
{
261
,
-
3
},
/* (273) expr ::= expr REM expr */
{
261
,
-
3
},
/* (274) expr ::= expr LIKE expr */
{
261
,
-
3
},
/* (275) expr ::= expr MATCH expr */
{
261
,
-
3
},
/* (276) expr ::= expr NMATCH expr */
{
261
,
-
5
},
/* (277) expr ::= expr IN LP exprlist RP */
{
200
,
-
3
},
/* (278) exprlist ::= exprlist COMMA expritem */
{
200
,
-
1
},
/* (279) exprlist ::= expritem */
{
272
,
-
1
},
/* (280) expritem ::= expr */
{
272
,
0
},
/* (281) expritem ::= */
{
193
,
-
3
},
/* (282) cmd ::= RESET QUERY CACHE */
{
193
,
-
3
},
/* (283) cmd ::= SYNCDB ids REPLICA */
{
193
,
-
7
},
/* (284) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
{
193
,
-
7
},
/* (285) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
{
193
,
-
7
},
/* (286) cmd ::= ALTER TABLE ids cpxName MODIFY COLUMN columnlist */
{
193
,
-
7
},
/* (287) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
{
193
,
-
7
},
/* (288) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
{
193
,
-
8
},
/* (289) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
{
193
,
-
9
},
/* (290) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
{
193
,
-
7
},
/* (291) cmd ::= ALTER TABLE ids cpxName MODIFY TAG columnlist */
{
193
,
-
7
},
/* (292) cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
{
193
,
-
7
},
/* (293) cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
{
193
,
-
7
},
/* (294) cmd ::= ALTER STABLE ids cpxName MODIFY COLUMN columnlist */
{
193
,
-
7
},
/* (295) cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
{
193
,
-
7
},
/* (296) cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
{
193
,
-
8
},
/* (297) cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
{
193
,
-
9
},
/* (298) cmd ::= ALTER STABLE ids cpxName SET TAG ids EQ tagitem */
{
193
,
-
7
},
/* (299) cmd ::= ALTER STABLE ids cpxName MODIFY TAG columnlist */
{
193
,
-
3
},
/* (300) cmd ::= KILL CONNECTION INTEGER */
{
193
,
-
5
},
/* (301) cmd ::= KILL STREAM INTEGER COLON INTEGER */
{
193
,
-
5
},
/* (302) cmd ::= KILL QUERY INTEGER COLON INTEGER */
{
197
,
-
2
},
/* (52) ifexists ::= IF EXISTS */
{
197
,
0
},
/* (53) ifexists ::= */
{
201
,
-
3
},
/* (54) ifnotexists ::= IF NOT EXISTS */
{
201
,
0
},
/* (55) ifnotexists ::= */
{
193
,
-
5
},
/* (56) cmd ::= CREATE DNODE ids PORT ids */
{
193
,
-
5
},
/* (57) cmd ::= CREATE DNODE IPTOKEN PORT ids */
{
193
,
-
6
},
/* (58) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */
{
193
,
-
5
},
/* (59) cmd ::= CREATE DATABASE ifnotexists ids db_optr */
{
193
,
-
8
},
/* (60) cmd ::= CREATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize */
{
193
,
-
9
},
/* (61) cmd ::= CREATE AGGREGATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize */
{
193
,
-
5
},
/* (62) cmd ::= CREATE USER ids PASS ids */
{
204
,
0
},
/* (63) bufsize ::= */
{
204
,
-
2
},
/* (64) bufsize ::= BUFSIZE INTEGER */
{
205
,
0
},
/* (65) pps ::= */
{
205
,
-
2
},
/* (66) pps ::= PPS INTEGER */
{
206
,
0
},
/* (67) tseries ::= */
{
206
,
-
2
},
/* (68) tseries ::= TSERIES INTEGER */
{
207
,
0
},
/* (69) dbs ::= */
{
207
,
-
2
},
/* (70) dbs ::= DBS INTEGER */
{
208
,
0
},
/* (71) streams ::= */
{
208
,
-
2
},
/* (72) streams ::= STREAMS INTEGER */
{
209
,
0
},
/* (73) storage ::= */
{
209
,
-
2
},
/* (74) storage ::= STORAGE INTEGER */
{
210
,
0
},
/* (75) qtime ::= */
{
210
,
-
2
},
/* (76) qtime ::= QTIME INTEGER */
{
211
,
0
},
/* (77) users ::= */
{
211
,
-
2
},
/* (78) users ::= USERS INTEGER */
{
212
,
0
},
/* (79) conns ::= */
{
212
,
-
2
},
/* (80) conns ::= CONNS INTEGER */
{
213
,
0
},
/* (81) state ::= */
{
213
,
-
2
},
/* (82) state ::= STATE ids */
{
199
,
-
9
},
/* (83) acct_optr ::= pps tseries storage streams qtime dbs users conns state */
{
214
,
-
3
},
/* (84) intitemlist ::= intitemlist COMMA intitem */
{
214
,
-
1
},
/* (85) intitemlist ::= intitem */
{
215
,
-
1
},
/* (86) intitem ::= INTEGER */
{
216
,
-
2
},
/* (87) keep ::= KEEP intitemlist */
{
217
,
-
2
},
/* (88) cache ::= CACHE INTEGER */
{
218
,
-
2
},
/* (89) replica ::= REPLICA INTEGER */
{
219
,
-
2
},
/* (90) quorum ::= QUORUM INTEGER */
{
220
,
-
2
},
/* (91) days ::= DAYS INTEGER */
{
221
,
-
2
},
/* (92) minrows ::= MINROWS INTEGER */
{
222
,
-
2
},
/* (93) maxrows ::= MAXROWS INTEGER */
{
223
,
-
2
},
/* (94) blocks ::= BLOCKS INTEGER */
{
224
,
-
2
},
/* (95) ctime ::= CTIME INTEGER */
{
225
,
-
2
},
/* (96) wal ::= WAL INTEGER */
{
226
,
-
2
},
/* (97) fsync ::= FSYNC INTEGER */
{
227
,
-
2
},
/* (98) comp ::= COMP INTEGER */
{
228
,
-
2
},
/* (99) prec ::= PRECISION STRING */
{
229
,
-
2
},
/* (100) update ::= UPDATE INTEGER */
{
230
,
-
2
},
/* (101) cachelast ::= CACHELAST INTEGER */
{
231
,
-
2
},
/* (102) vgroups ::= VGROUPS INTEGER */
{
202
,
0
},
/* (103) db_optr ::= */
{
202
,
-
2
},
/* (104) db_optr ::= db_optr cache */
{
202
,
-
2
},
/* (105) db_optr ::= db_optr replica */
{
202
,
-
2
},
/* (106) db_optr ::= db_optr quorum */
{
202
,
-
2
},
/* (107) db_optr ::= db_optr days */
{
202
,
-
2
},
/* (108) db_optr ::= db_optr minrows */
{
202
,
-
2
},
/* (109) db_optr ::= db_optr maxrows */
{
202
,
-
2
},
/* (110) db_optr ::= db_optr blocks */
{
202
,
-
2
},
/* (111) db_optr ::= db_optr ctime */
{
202
,
-
2
},
/* (112) db_optr ::= db_optr wal */
{
202
,
-
2
},
/* (113) db_optr ::= db_optr fsync */
{
202
,
-
2
},
/* (114) db_optr ::= db_optr comp */
{
202
,
-
2
},
/* (115) db_optr ::= db_optr prec */
{
202
,
-
2
},
/* (116) db_optr ::= db_optr keep */
{
202
,
-
2
},
/* (117) db_optr ::= db_optr update */
{
202
,
-
2
},
/* (118) db_optr ::= db_optr cachelast */
{
202
,
-
2
},
/* (119) db_optr ::= db_optr vgroups */
{
198
,
0
},
/* (120) alter_db_optr ::= */
{
198
,
-
2
},
/* (121) alter_db_optr ::= alter_db_optr replica */
{
198
,
-
2
},
/* (122) alter_db_optr ::= alter_db_optr quorum */
{
198
,
-
2
},
/* (123) alter_db_optr ::= alter_db_optr keep */
{
198
,
-
2
},
/* (124) alter_db_optr ::= alter_db_optr blocks */
{
198
,
-
2
},
/* (125) alter_db_optr ::= alter_db_optr comp */
{
198
,
-
2
},
/* (126) alter_db_optr ::= alter_db_optr update */
{
198
,
-
2
},
/* (127) alter_db_optr ::= alter_db_optr cachelast */
{
203
,
-
1
},
/* (128) typename ::= ids */
{
203
,
-
4
},
/* (129) typename ::= ids LP signed RP */
{
203
,
-
2
},
/* (130) typename ::= ids UNSIGNED */
{
232
,
-
1
},
/* (131) signed ::= INTEGER */
{
232
,
-
2
},
/* (132) signed ::= PLUS INTEGER */
{
232
,
-
2
},
/* (133) signed ::= MINUS INTEGER */
{
193
,
-
3
},
/* (134) cmd ::= CREATE TABLE create_table_args */
{
193
,
-
3
},
/* (135) cmd ::= CREATE TABLE create_stable_args */
{
193
,
-
3
},
/* (136) cmd ::= CREATE STABLE create_stable_args */
{
193
,
-
3
},
/* (137) cmd ::= CREATE TABLE create_table_list */
{
235
,
-
1
},
/* (138) create_table_list ::= create_from_stable */
{
235
,
-
2
},
/* (139) create_table_list ::= create_table_list create_from_stable */
{
233
,
-
6
},
/* (140) create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
{
234
,
-
10
},
/* (141) create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
{
236
,
-
10
},
/* (142) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist1 RP */
{
236
,
-
13
},
/* (143) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName LP tagNamelist RP TAGS LP tagitemlist1 RP */
{
239
,
-
3
},
/* (144) tagNamelist ::= tagNamelist COMMA ids */
{
239
,
-
1
},
/* (145) tagNamelist ::= ids */
{
233
,
-
5
},
/* (146) create_table_args ::= ifnotexists ids cpxName AS select */
{
237
,
-
3
},
/* (147) columnlist ::= columnlist COMMA column */
{
237
,
-
1
},
/* (148) columnlist ::= column */
{
241
,
-
2
},
/* (149) column ::= ids typename */
{
238
,
-
3
},
/* (150) tagitemlist1 ::= tagitemlist1 COMMA tagitem1 */
{
238
,
-
1
},
/* (151) tagitemlist1 ::= tagitem1 */
{
242
,
-
2
},
/* (152) tagitem1 ::= MINUS INTEGER */
{
242
,
-
2
},
/* (153) tagitem1 ::= MINUS FLOAT */
{
242
,
-
2
},
/* (154) tagitem1 ::= PLUS INTEGER */
{
242
,
-
2
},
/* (155) tagitem1 ::= PLUS FLOAT */
{
242
,
-
1
},
/* (156) tagitem1 ::= INTEGER */
{
242
,
-
1
},
/* (157) tagitem1 ::= FLOAT */
{
242
,
-
1
},
/* (158) tagitem1 ::= STRING */
{
242
,
-
1
},
/* (159) tagitem1 ::= BOOL */
{
242
,
-
1
},
/* (160) tagitem1 ::= NULL */
{
242
,
-
1
},
/* (161) tagitem1 ::= NOW */
{
243
,
-
3
},
/* (162) tagitemlist ::= tagitemlist COMMA tagitem */
{
243
,
-
1
},
/* (163) tagitemlist ::= tagitem */
{
244
,
-
1
},
/* (164) tagitem ::= INTEGER */
{
244
,
-
1
},
/* (165) tagitem ::= FLOAT */
{
244
,
-
1
},
/* (166) tagitem ::= STRING */
{
244
,
-
1
},
/* (167) tagitem ::= BOOL */
{
244
,
-
1
},
/* (168) tagitem ::= NULL */
{
244
,
-
1
},
/* (169) tagitem ::= NOW */
{
244
,
-
2
},
/* (170) tagitem ::= MINUS INTEGER */
{
244
,
-
2
},
/* (171) tagitem ::= MINUS FLOAT */
{
244
,
-
2
},
/* (172) tagitem ::= PLUS INTEGER */
{
244
,
-
2
},
/* (173) tagitem ::= PLUS FLOAT */
{
240
,
-
14
},
/* (174) select ::= SELECT selcollist from where_opt interval_option sliding_opt session_option windowstate_option fill_opt groupby_opt having_opt orderby_opt slimit_opt limit_opt */
{
240
,
-
3
},
/* (175) select ::= LP select RP */
{
258
,
-
1
},
/* (176) union ::= select */
{
258
,
-
4
},
/* (177) union ::= union UNION ALL select */
{
258
,
-
3
},
/* (178) union ::= union UNION select */
{
193
,
-
1
},
/* (179) cmd ::= union */
{
240
,
-
2
},
/* (180) select ::= SELECT selcollist */
{
259
,
-
2
},
/* (181) sclp ::= selcollist COMMA */
{
259
,
0
},
/* (182) sclp ::= */
{
245
,
-
4
},
/* (183) selcollist ::= sclp distinct expr as */
{
245
,
-
2
},
/* (184) selcollist ::= sclp STAR */
{
262
,
-
2
},
/* (185) as ::= AS ids */
{
262
,
-
1
},
/* (186) as ::= ids */
{
262
,
0
},
/* (187) as ::= */
{
260
,
-
1
},
/* (188) distinct ::= DISTINCT */
{
260
,
0
},
/* (189) distinct ::= */
{
246
,
-
2
},
/* (190) from ::= FROM tablelist */
{
246
,
-
2
},
/* (191) from ::= FROM sub */
{
264
,
-
3
},
/* (192) sub ::= LP union RP */
{
264
,
-
4
},
/* (193) sub ::= LP union RP ids */
{
264
,
-
6
},
/* (194) sub ::= sub COMMA LP union RP ids */
{
263
,
-
2
},
/* (195) tablelist ::= ids cpxName */
{
263
,
-
3
},
/* (196) tablelist ::= ids cpxName ids */
{
263
,
-
4
},
/* (197) tablelist ::= tablelist COMMA ids cpxName */
{
263
,
-
5
},
/* (198) tablelist ::= tablelist COMMA ids cpxName ids */
{
265
,
-
1
},
/* (199) tmvar ::= VARIABLE */
{
248
,
-
4
},
/* (200) interval_option ::= intervalKey LP tmvar RP */
{
248
,
-
6
},
/* (201) interval_option ::= intervalKey LP tmvar COMMA tmvar RP */
{
248
,
0
},
/* (202) interval_option ::= */
{
266
,
-
1
},
/* (203) intervalKey ::= INTERVAL */
{
266
,
-
1
},
/* (204) intervalKey ::= EVERY */
{
250
,
0
},
/* (205) session_option ::= */
{
250
,
-
7
},
/* (206) session_option ::= SESSION LP ids cpxName COMMA tmvar RP */
{
251
,
0
},
/* (207) windowstate_option ::= */
{
251
,
-
4
},
/* (208) windowstate_option ::= STATE_WINDOW LP ids RP */
{
252
,
0
},
/* (209) fill_opt ::= */
{
252
,
-
6
},
/* (210) fill_opt ::= FILL LP ID COMMA tagitemlist RP */
{
252
,
-
4
},
/* (211) fill_opt ::= FILL LP ID RP */
{
249
,
-
4
},
/* (212) sliding_opt ::= SLIDING LP tmvar RP */
{
249
,
0
},
/* (213) sliding_opt ::= */
{
255
,
0
},
/* (214) orderby_opt ::= */
{
255
,
-
3
},
/* (215) orderby_opt ::= ORDER BY sortlist */
{
267
,
-
4
},
/* (216) sortlist ::= sortlist COMMA item sortorder */
{
267
,
-
2
},
/* (217) sortlist ::= item sortorder */
{
269
,
-
2
},
/* (218) item ::= ids cpxName */
{
270
,
-
1
},
/* (219) sortorder ::= ASC */
{
270
,
-
1
},
/* (220) sortorder ::= DESC */
{
270
,
0
},
/* (221) sortorder ::= */
{
253
,
0
},
/* (222) groupby_opt ::= */
{
253
,
-
3
},
/* (223) groupby_opt ::= GROUP BY grouplist */
{
271
,
-
3
},
/* (224) grouplist ::= grouplist COMMA item */
{
271
,
-
1
},
/* (225) grouplist ::= item */
{
254
,
0
},
/* (226) having_opt ::= */
{
254
,
-
2
},
/* (227) having_opt ::= HAVING expr */
{
257
,
0
},
/* (228) limit_opt ::= */
{
257
,
-
2
},
/* (229) limit_opt ::= LIMIT signed */
{
257
,
-
4
},
/* (230) limit_opt ::= LIMIT signed OFFSET signed */
{
257
,
-
4
},
/* (231) limit_opt ::= LIMIT signed COMMA signed */
{
256
,
0
},
/* (232) slimit_opt ::= */
{
256
,
-
2
},
/* (233) slimit_opt ::= SLIMIT signed */
{
256
,
-
4
},
/* (234) slimit_opt ::= SLIMIT signed SOFFSET signed */
{
256
,
-
4
},
/* (235) slimit_opt ::= SLIMIT signed COMMA signed */
{
247
,
0
},
/* (236) where_opt ::= */
{
247
,
-
2
},
/* (237) where_opt ::= WHERE expr */
{
261
,
-
3
},
/* (238) expr ::= LP expr RP */
{
261
,
-
1
},
/* (239) expr ::= ID */
{
261
,
-
3
},
/* (240) expr ::= ID DOT ID */
{
261
,
-
3
},
/* (241) expr ::= ID DOT STAR */
{
261
,
-
1
},
/* (242) expr ::= INTEGER */
{
261
,
-
2
},
/* (243) expr ::= MINUS INTEGER */
{
261
,
-
2
},
/* (244) expr ::= PLUS INTEGER */
{
261
,
-
1
},
/* (245) expr ::= FLOAT */
{
261
,
-
2
},
/* (246) expr ::= MINUS FLOAT */
{
261
,
-
2
},
/* (247) expr ::= PLUS FLOAT */
{
261
,
-
1
},
/* (248) expr ::= STRING */
{
261
,
-
1
},
/* (249) expr ::= NOW */
{
261
,
-
1
},
/* (250) expr ::= VARIABLE */
{
261
,
-
2
},
/* (251) expr ::= PLUS VARIABLE */
{
261
,
-
2
},
/* (252) expr ::= MINUS VARIABLE */
{
261
,
-
1
},
/* (253) expr ::= BOOL */
{
261
,
-
1
},
/* (254) expr ::= NULL */
{
261
,
-
4
},
/* (255) expr ::= ID LP exprlist RP */
{
261
,
-
4
},
/* (256) expr ::= ID LP STAR RP */
{
261
,
-
3
},
/* (257) expr ::= expr IS NULL */
{
261
,
-
4
},
/* (258) expr ::= expr IS NOT NULL */
{
261
,
-
3
},
/* (259) expr ::= expr LT expr */
{
261
,
-
3
},
/* (260) expr ::= expr GT expr */
{
261
,
-
3
},
/* (261) expr ::= expr LE expr */
{
261
,
-
3
},
/* (262) expr ::= expr GE expr */
{
261
,
-
3
},
/* (263) expr ::= expr NE expr */
{
261
,
-
3
},
/* (264) expr ::= expr EQ expr */
{
261
,
-
5
},
/* (265) expr ::= expr BETWEEN expr AND expr */
{
261
,
-
3
},
/* (266) expr ::= expr AND expr */
{
261
,
-
3
},
/* (267) expr ::= expr OR expr */
{
261
,
-
3
},
/* (268) expr ::= expr PLUS expr */
{
261
,
-
3
},
/* (269) expr ::= expr MINUS expr */
{
261
,
-
3
},
/* (270) expr ::= expr STAR expr */
{
261
,
-
3
},
/* (271) expr ::= expr SLASH expr */
{
261
,
-
3
},
/* (272) expr ::= expr REM expr */
{
261
,
-
3
},
/* (273) expr ::= expr LIKE expr */
{
261
,
-
3
},
/* (274) expr ::= expr MATCH expr */
{
261
,
-
3
},
/* (275) expr ::= expr NMATCH expr */
{
261
,
-
5
},
/* (276) expr ::= expr IN LP exprlist RP */
{
200
,
-
3
},
/* (277) exprlist ::= exprlist COMMA expritem */
{
200
,
-
1
},
/* (278) exprlist ::= expritem */
{
272
,
-
1
},
/* (279) expritem ::= expr */
{
272
,
0
},
/* (280) expritem ::= */
{
193
,
-
3
},
/* (281) cmd ::= RESET QUERY CACHE */
{
193
,
-
3
},
/* (282) cmd ::= SYNCDB ids REPLICA */
{
193
,
-
7
},
/* (283) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
{
193
,
-
7
},
/* (284) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
{
193
,
-
7
},
/* (285) cmd ::= ALTER TABLE ids cpxName MODIFY COLUMN columnlist */
{
193
,
-
7
},
/* (286) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
{
193
,
-
7
},
/* (287) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
{
193
,
-
8
},
/* (288) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
{
193
,
-
9
},
/* (289) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
{
193
,
-
7
},
/* (290) cmd ::= ALTER TABLE ids cpxName MODIFY TAG columnlist */
{
193
,
-
7
},
/* (291) cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
{
193
,
-
7
},
/* (292) cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
{
193
,
-
7
},
/* (293) cmd ::= ALTER STABLE ids cpxName MODIFY COLUMN columnlist */
{
193
,
-
7
},
/* (294) cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
{
193
,
-
7
},
/* (295) cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
{
193
,
-
8
},
/* (296) cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
{
193
,
-
9
},
/* (297) cmd ::= ALTER STABLE ids cpxName SET TAG ids EQ tagitem */
{
193
,
-
7
},
/* (298) cmd ::= ALTER STABLE ids cpxName MODIFY TAG columnlist */
{
193
,
-
3
},
/* (299) cmd ::= KILL CONNECTION INTEGER */
{
193
,
-
5
},
/* (300) cmd ::= KILL STREAM INTEGER COLON INTEGER */
{
193
,
-
5
},
/* (301) cmd ::= KILL QUERY INTEGER COLON INTEGER */
};
static
void
yy_accept
(
yyParser
*
);
/* Forward Declaration */
...
...
@@ -2224,9 +2220,9 @@ static void yy_reduce(
/********** Begin reduce actions **********************************************/
YYMINORTYPE
yylhsminor
;
case
0
:
/* program ::= cmd */
case
13
5
:
/* cmd ::= CREATE TABLE create_table_args */
yytestcase
(
yyruleno
==
135
);
case
13
6
:
/* cmd ::= CREATE TABLE create_stable_args */
yytestcase
(
yyruleno
==
136
);
case
13
7
:
/* cmd ::= CREATE STABLE create_stable_args */
yytestcase
(
yyruleno
==
137
);
case
13
4
:
/* cmd ::= CREATE TABLE create_table_args */
yytestcase
(
yyruleno
==
134
);
case
13
5
:
/* cmd ::= CREATE TABLE create_stable_args */
yytestcase
(
yyruleno
==
135
);
case
13
6
:
/* cmd ::= CREATE STABLE create_stable_args */
yytestcase
(
yyruleno
==
136
);
{}
break
;
case
1
:
/* cmd ::= SHOW DATABASES */
...
...
@@ -2414,65 +2410,64 @@ static void yy_reduce(
{
setCompactVnodeSql
(
pInfo
,
TSDB_SQL_COMPACT_VNODE
,
yymsp
[
-
1
].
minor
.
yy165
);}
break
;
case
51
:
/* ids ::= ID */
case
52
:
/* ids ::= STRING */
yytestcase
(
yyruleno
==
52
);
{
yylhsminor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;
}
yymsp
[
0
].
minor
.
yy0
=
yylhsminor
.
yy0
;
break
;
case
5
3
:
/* ifexists ::= IF EXISTS */
case
5
2
:
/* ifexists ::= IF EXISTS */
{
yymsp
[
-
1
].
minor
.
yy0
.
n
=
1
;}
break
;
case
5
4
:
/* ifexists ::= */
case
5
6
:
/* ifnotexists ::= */
yytestcase
(
yyruleno
==
56
);
case
1
90
:
/* distinct ::= */
yytestcase
(
yyruleno
==
190
);
case
5
3
:
/* ifexists ::= */
case
5
5
:
/* ifnotexists ::= */
yytestcase
(
yyruleno
==
55
);
case
1
89
:
/* distinct ::= */
yytestcase
(
yyruleno
==
189
);
{
yymsp
[
1
].
minor
.
yy0
.
n
=
0
;}
break
;
case
5
5
:
/* ifnotexists ::= IF NOT EXISTS */
case
5
4
:
/* ifnotexists ::= IF NOT EXISTS */
{
yymsp
[
-
2
].
minor
.
yy0
.
n
=
1
;}
break
;
case
5
7
:
/* cmd ::= CREATE DNODE ids PORT ids */
case
5
8
:
/* cmd ::= CREATE DNODE IPTOKEN PORT ids */
yytestcase
(
yyruleno
==
58
);
case
5
6
:
/* cmd ::= CREATE DNODE ids PORT ids */
case
5
7
:
/* cmd ::= CREATE DNODE IPTOKEN PORT ids */
yytestcase
(
yyruleno
==
57
);
{
setDCLSqlElems
(
pInfo
,
TSDB_SQL_CREATE_DNODE
,
2
,
&
yymsp
[
-
2
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
);}
break
;
case
5
9
:
/* cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */
case
5
8
:
/* cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */
{
setCreateAcctSql
(
pInfo
,
TSDB_SQL_CREATE_ACCT
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy211
);}
break
;
case
60
:
/* cmd ::= CREATE DATABASE ifnotexists ids db_optr */
case
59
:
/* cmd ::= CREATE DATABASE ifnotexists ids db_optr */
{
setCreateDbInfo
(
pInfo
,
TSDB_SQL_CREATE_DB
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy16
,
&
yymsp
[
-
2
].
minor
.
yy0
);}
break
;
case
6
1
:
/* cmd ::= CREATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize */
case
6
0
:
/* cmd ::= CREATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize */
{
setCreateFuncInfo
(
pInfo
,
TSDB_SQL_CREATE_FUNCTION
,
&
yymsp
[
-
5
].
minor
.
yy0
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
-
1
].
minor
.
yy106
,
&
yymsp
[
0
].
minor
.
yy0
,
1
);}
break
;
case
6
2
:
/* cmd ::= CREATE AGGREGATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize */
case
6
1
:
/* cmd ::= CREATE AGGREGATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize */
{
setCreateFuncInfo
(
pInfo
,
TSDB_SQL_CREATE_FUNCTION
,
&
yymsp
[
-
5
].
minor
.
yy0
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
-
1
].
minor
.
yy106
,
&
yymsp
[
0
].
minor
.
yy0
,
2
);}
break
;
case
6
3
:
/* cmd ::= CREATE USER ids PASS ids */
case
6
2
:
/* cmd ::= CREATE USER ids PASS ids */
{
setCreateUserSql
(
pInfo
,
&
yymsp
[
-
2
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
);}
break
;
case
6
4
:
/* bufsize ::= */
case
6
6
:
/* pps ::= */
yytestcase
(
yyruleno
==
66
);
case
6
8
:
/* tseries ::= */
yytestcase
(
yyruleno
==
68
);
case
70
:
/* dbs ::= */
yytestcase
(
yyruleno
==
70
);
case
7
2
:
/* streams ::= */
yytestcase
(
yyruleno
==
72
);
case
7
4
:
/* storage ::= */
yytestcase
(
yyruleno
==
74
);
case
7
6
:
/* qtime ::= */
yytestcase
(
yyruleno
==
76
);
case
7
8
:
/* users ::= */
yytestcase
(
yyruleno
==
78
);
case
80
:
/* conns ::= */
yytestcase
(
yyruleno
==
80
);
case
8
2
:
/* state ::= */
yytestcase
(
yyruleno
==
82
);
case
6
3
:
/* bufsize ::= */
case
6
5
:
/* pps ::= */
yytestcase
(
yyruleno
==
65
);
case
6
7
:
/* tseries ::= */
yytestcase
(
yyruleno
==
67
);
case
69
:
/* dbs ::= */
yytestcase
(
yyruleno
==
69
);
case
7
1
:
/* streams ::= */
yytestcase
(
yyruleno
==
71
);
case
7
3
:
/* storage ::= */
yytestcase
(
yyruleno
==
73
);
case
7
5
:
/* qtime ::= */
yytestcase
(
yyruleno
==
75
);
case
7
7
:
/* users ::= */
yytestcase
(
yyruleno
==
77
);
case
79
:
/* conns ::= */
yytestcase
(
yyruleno
==
79
);
case
8
1
:
/* state ::= */
yytestcase
(
yyruleno
==
81
);
{
yymsp
[
1
].
minor
.
yy0
.
n
=
0
;
}
break
;
case
6
5
:
/* bufsize ::= BUFSIZE INTEGER */
case
6
7
:
/* pps ::= PPS INTEGER */
yytestcase
(
yyruleno
==
67
);
case
6
9
:
/* tseries ::= TSERIES INTEGER */
yytestcase
(
yyruleno
==
69
);
case
7
1
:
/* dbs ::= DBS INTEGER */
yytestcase
(
yyruleno
==
71
);
case
7
3
:
/* streams ::= STREAMS INTEGER */
yytestcase
(
yyruleno
==
73
);
case
7
5
:
/* storage ::= STORAGE INTEGER */
yytestcase
(
yyruleno
==
75
);
case
7
7
:
/* qtime ::= QTIME INTEGER */
yytestcase
(
yyruleno
==
77
);
case
7
9
:
/* users ::= USERS INTEGER */
yytestcase
(
yyruleno
==
79
);
case
8
1
:
/* conns ::= CONNS INTEGER */
yytestcase
(
yyruleno
==
81
);
case
8
3
:
/* state ::= STATE ids */
yytestcase
(
yyruleno
==
83
);
case
6
4
:
/* bufsize ::= BUFSIZE INTEGER */
case
6
6
:
/* pps ::= PPS INTEGER */
yytestcase
(
yyruleno
==
66
);
case
6
8
:
/* tseries ::= TSERIES INTEGER */
yytestcase
(
yyruleno
==
68
);
case
7
0
:
/* dbs ::= DBS INTEGER */
yytestcase
(
yyruleno
==
70
);
case
7
2
:
/* streams ::= STREAMS INTEGER */
yytestcase
(
yyruleno
==
72
);
case
7
4
:
/* storage ::= STORAGE INTEGER */
yytestcase
(
yyruleno
==
74
);
case
7
6
:
/* qtime ::= QTIME INTEGER */
yytestcase
(
yyruleno
==
76
);
case
7
8
:
/* users ::= USERS INTEGER */
yytestcase
(
yyruleno
==
78
);
case
8
0
:
/* conns ::= CONNS INTEGER */
yytestcase
(
yyruleno
==
80
);
case
8
2
:
/* state ::= STATE ids */
yytestcase
(
yyruleno
==
82
);
{
yymsp
[
-
1
].
minor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;
}
break
;
case
8
4
:
/* acct_optr ::= pps tseries storage streams qtime dbs users conns state */
case
8
3
:
/* acct_optr ::= pps tseries storage streams qtime dbs users conns state */
{
yylhsminor
.
yy211
.
maxUsers
=
(
yymsp
[
-
2
].
minor
.
yy0
.
n
>
0
)
?
atoi
(
yymsp
[
-
2
].
minor
.
yy0
.
z
)
:-
1
;
yylhsminor
.
yy211
.
maxDbs
=
(
yymsp
[
-
3
].
minor
.
yy0
.
n
>
0
)
?
atoi
(
yymsp
[
-
3
].
minor
.
yy0
.
z
)
:-
1
;
...
...
@@ -2486,129 +2481,129 @@ static void yy_reduce(
}
yymsp
[
-
8
].
minor
.
yy211
=
yylhsminor
.
yy211
;
break
;
case
8
5
:
/* intitemlist ::= intitemlist COMMA intitem */
case
16
3
:
/* tagitemlist ::= tagitemlist COMMA tagitem */
yytestcase
(
yyruleno
==
163
);
case
8
4
:
/* intitemlist ::= intitemlist COMMA intitem */
case
16
2
:
/* tagitemlist ::= tagitemlist COMMA tagitem */
yytestcase
(
yyruleno
==
162
);
{
yylhsminor
.
yy165
=
tListItemAppend
(
yymsp
[
-
2
].
minor
.
yy165
,
&
yymsp
[
0
].
minor
.
yy425
,
-
1
);
}
yymsp
[
-
2
].
minor
.
yy165
=
yylhsminor
.
yy165
;
break
;
case
8
6
:
/* intitemlist ::= intitem */
case
16
4
:
/* tagitemlist ::= tagitem */
yytestcase
(
yyruleno
==
164
);
case
8
5
:
/* intitemlist ::= intitem */
case
16
3
:
/* tagitemlist ::= tagitem */
yytestcase
(
yyruleno
==
163
);
{
yylhsminor
.
yy165
=
tListItemAppend
(
NULL
,
&
yymsp
[
0
].
minor
.
yy425
,
-
1
);
}
yymsp
[
0
].
minor
.
yy165
=
yylhsminor
.
yy165
;
break
;
case
8
7
:
/* intitem ::= INTEGER */
case
16
5
:
/* tagitem ::= INTEGER */
yytestcase
(
yyruleno
==
165
);
case
16
6
:
/* tagitem ::= FLOAT */
yytestcase
(
yyruleno
==
166
);
case
16
7
:
/* tagitem ::= STRING */
yytestcase
(
yyruleno
==
167
);
case
16
8
:
/* tagitem ::= BOOL */
yytestcase
(
yyruleno
==
168
);
case
8
6
:
/* intitem ::= INTEGER */
case
16
4
:
/* tagitem ::= INTEGER */
yytestcase
(
yyruleno
==
164
);
case
16
5
:
/* tagitem ::= FLOAT */
yytestcase
(
yyruleno
==
165
);
case
16
6
:
/* tagitem ::= STRING */
yytestcase
(
yyruleno
==
166
);
case
16
7
:
/* tagitem ::= BOOL */
yytestcase
(
yyruleno
==
167
);
{
toTSDBType
(
yymsp
[
0
].
minor
.
yy0
.
type
);
taosVariantCreate
(
&
yylhsminor
.
yy425
,
yymsp
[
0
].
minor
.
yy0
.
z
,
yymsp
[
0
].
minor
.
yy0
.
n
,
yymsp
[
0
].
minor
.
yy0
.
type
);
}
yymsp
[
0
].
minor
.
yy425
=
yylhsminor
.
yy425
;
break
;
case
8
8
:
/* keep ::= KEEP intitemlist */
case
8
7
:
/* keep ::= KEEP intitemlist */
{
yymsp
[
-
1
].
minor
.
yy165
=
yymsp
[
0
].
minor
.
yy165
;
}
break
;
case
8
9
:
/* cache ::= CACHE INTEGER */
case
90
:
/* replica ::= REPLICA INTEGER */
yytestcase
(
yyruleno
==
90
);
case
9
1
:
/* quorum ::= QUORUM INTEGER */
yytestcase
(
yyruleno
==
91
);
case
9
2
:
/* days ::= DAYS INTEGER */
yytestcase
(
yyruleno
==
92
);
case
9
3
:
/* minrows ::= MINROWS INTEGER */
yytestcase
(
yyruleno
==
93
);
case
9
4
:
/* maxrows ::= MAXROWS INTEGER */
yytestcase
(
yyruleno
==
94
);
case
9
5
:
/* blocks ::= BLOCKS INTEGER */
yytestcase
(
yyruleno
==
95
);
case
9
6
:
/* ctime ::= CTIME INTEGER */
yytestcase
(
yyruleno
==
96
);
case
9
7
:
/* wal ::= WAL INTEGER */
yytestcase
(
yyruleno
==
97
);
case
9
8
:
/* fsync ::= FSYNC INTEGER */
yytestcase
(
yyruleno
==
98
);
case
9
9
:
/* comp ::= COMP INTEGER */
yytestcase
(
yyruleno
==
99
);
case
100
:
/* prec ::= PRECISION STRING */
yytestcase
(
yyruleno
==
100
);
case
10
1
:
/* update ::= UPDATE INTEGER */
yytestcase
(
yyruleno
==
101
);
case
10
2
:
/* cachelast ::= CACHELAST INTEGER */
yytestcase
(
yyruleno
==
102
);
case
10
3
:
/* vgroups ::= VGROUPS INTEGER */
yytestcase
(
yyruleno
==
103
);
case
8
8
:
/* cache ::= CACHE INTEGER */
case
89
:
/* replica ::= REPLICA INTEGER */
yytestcase
(
yyruleno
==
89
);
case
9
0
:
/* quorum ::= QUORUM INTEGER */
yytestcase
(
yyruleno
==
90
);
case
9
1
:
/* days ::= DAYS INTEGER */
yytestcase
(
yyruleno
==
91
);
case
9
2
:
/* minrows ::= MINROWS INTEGER */
yytestcase
(
yyruleno
==
92
);
case
9
3
:
/* maxrows ::= MAXROWS INTEGER */
yytestcase
(
yyruleno
==
93
);
case
9
4
:
/* blocks ::= BLOCKS INTEGER */
yytestcase
(
yyruleno
==
94
);
case
9
5
:
/* ctime ::= CTIME INTEGER */
yytestcase
(
yyruleno
==
95
);
case
9
6
:
/* wal ::= WAL INTEGER */
yytestcase
(
yyruleno
==
96
);
case
9
7
:
/* fsync ::= FSYNC INTEGER */
yytestcase
(
yyruleno
==
97
);
case
9
8
:
/* comp ::= COMP INTEGER */
yytestcase
(
yyruleno
==
98
);
case
99
:
/* prec ::= PRECISION STRING */
yytestcase
(
yyruleno
==
99
);
case
10
0
:
/* update ::= UPDATE INTEGER */
yytestcase
(
yyruleno
==
100
);
case
10
1
:
/* cachelast ::= CACHELAST INTEGER */
yytestcase
(
yyruleno
==
101
);
case
10
2
:
/* vgroups ::= VGROUPS INTEGER */
yytestcase
(
yyruleno
==
102
);
{
yymsp
[
-
1
].
minor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;
}
break
;
case
10
4
:
/* db_optr ::= */
case
10
3
:
/* db_optr ::= */
{
setDefaultCreateDbOption
(
&
yymsp
[
1
].
minor
.
yy16
);}
break
;
case
10
5
:
/* db_optr ::= db_optr cache */
case
10
4
:
/* db_optr ::= db_optr cache */
{
yylhsminor
.
yy16
=
yymsp
[
-
1
].
minor
.
yy16
;
yylhsminor
.
yy16
.
cacheBlockSize
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
-
1
].
minor
.
yy16
=
yylhsminor
.
yy16
;
break
;
case
10
6
:
/* db_optr ::= db_optr replica */
case
12
2
:
/* alter_db_optr ::= alter_db_optr replica */
yytestcase
(
yyruleno
==
122
);
case
10
5
:
/* db_optr ::= db_optr replica */
case
12
1
:
/* alter_db_optr ::= alter_db_optr replica */
yytestcase
(
yyruleno
==
121
);
{
yylhsminor
.
yy16
=
yymsp
[
-
1
].
minor
.
yy16
;
yylhsminor
.
yy16
.
replica
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
-
1
].
minor
.
yy16
=
yylhsminor
.
yy16
;
break
;
case
10
7
:
/* db_optr ::= db_optr quorum */
case
12
3
:
/* alter_db_optr ::= alter_db_optr quorum */
yytestcase
(
yyruleno
==
123
);
case
10
6
:
/* db_optr ::= db_optr quorum */
case
12
2
:
/* alter_db_optr ::= alter_db_optr quorum */
yytestcase
(
yyruleno
==
122
);
{
yylhsminor
.
yy16
=
yymsp
[
-
1
].
minor
.
yy16
;
yylhsminor
.
yy16
.
quorum
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
-
1
].
minor
.
yy16
=
yylhsminor
.
yy16
;
break
;
case
10
8
:
/* db_optr ::= db_optr days */
case
10
7
:
/* db_optr ::= db_optr days */
{
yylhsminor
.
yy16
=
yymsp
[
-
1
].
minor
.
yy16
;
yylhsminor
.
yy16
.
daysPerFile
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
-
1
].
minor
.
yy16
=
yylhsminor
.
yy16
;
break
;
case
10
9
:
/* db_optr ::= db_optr minrows */
case
10
8
:
/* db_optr ::= db_optr minrows */
{
yylhsminor
.
yy16
=
yymsp
[
-
1
].
minor
.
yy16
;
yylhsminor
.
yy16
.
minRowsPerBlock
=
strtod
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
);
}
yymsp
[
-
1
].
minor
.
yy16
=
yylhsminor
.
yy16
;
break
;
case
1
10
:
/* db_optr ::= db_optr maxrows */
case
1
09
:
/* db_optr ::= db_optr maxrows */
{
yylhsminor
.
yy16
=
yymsp
[
-
1
].
minor
.
yy16
;
yylhsminor
.
yy16
.
maxRowsPerBlock
=
strtod
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
);
}
yymsp
[
-
1
].
minor
.
yy16
=
yylhsminor
.
yy16
;
break
;
case
11
1
:
/* db_optr ::= db_optr blocks */
case
12
5
:
/* alter_db_optr ::= alter_db_optr blocks */
yytestcase
(
yyruleno
==
125
);
case
11
0
:
/* db_optr ::= db_optr blocks */
case
12
4
:
/* alter_db_optr ::= alter_db_optr blocks */
yytestcase
(
yyruleno
==
124
);
{
yylhsminor
.
yy16
=
yymsp
[
-
1
].
minor
.
yy16
;
yylhsminor
.
yy16
.
numOfBlocks
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
-
1
].
minor
.
yy16
=
yylhsminor
.
yy16
;
break
;
case
11
2
:
/* db_optr ::= db_optr ctime */
case
11
1
:
/* db_optr ::= db_optr ctime */
{
yylhsminor
.
yy16
=
yymsp
[
-
1
].
minor
.
yy16
;
yylhsminor
.
yy16
.
commitTime
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
-
1
].
minor
.
yy16
=
yylhsminor
.
yy16
;
break
;
case
11
3
:
/* db_optr ::= db_optr wal */
case
11
2
:
/* db_optr ::= db_optr wal */
{
yylhsminor
.
yy16
=
yymsp
[
-
1
].
minor
.
yy16
;
yylhsminor
.
yy16
.
walLevel
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
-
1
].
minor
.
yy16
=
yylhsminor
.
yy16
;
break
;
case
11
4
:
/* db_optr ::= db_optr fsync */
case
11
3
:
/* db_optr ::= db_optr fsync */
{
yylhsminor
.
yy16
=
yymsp
[
-
1
].
minor
.
yy16
;
yylhsminor
.
yy16
.
fsyncPeriod
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
-
1
].
minor
.
yy16
=
yylhsminor
.
yy16
;
break
;
case
11
5
:
/* db_optr ::= db_optr comp */
case
12
6
:
/* alter_db_optr ::= alter_db_optr comp */
yytestcase
(
yyruleno
==
126
);
case
11
4
:
/* db_optr ::= db_optr comp */
case
12
5
:
/* alter_db_optr ::= alter_db_optr comp */
yytestcase
(
yyruleno
==
125
);
{
yylhsminor
.
yy16
=
yymsp
[
-
1
].
minor
.
yy16
;
yylhsminor
.
yy16
.
compressionLevel
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
-
1
].
minor
.
yy16
=
yylhsminor
.
yy16
;
break
;
case
11
6
:
/* db_optr ::= db_optr prec */
case
11
5
:
/* db_optr ::= db_optr prec */
{
yylhsminor
.
yy16
=
yymsp
[
-
1
].
minor
.
yy16
;
yylhsminor
.
yy16
.
precision
=
yymsp
[
0
].
minor
.
yy0
;
}
yymsp
[
-
1
].
minor
.
yy16
=
yylhsminor
.
yy16
;
break
;
case
11
7
:
/* db_optr ::= db_optr keep */
case
12
4
:
/* alter_db_optr ::= alter_db_optr keep */
yytestcase
(
yyruleno
==
124
);
case
11
6
:
/* db_optr ::= db_optr keep */
case
12
3
:
/* alter_db_optr ::= alter_db_optr keep */
yytestcase
(
yyruleno
==
123
);
{
yylhsminor
.
yy16
=
yymsp
[
-
1
].
minor
.
yy16
;
yylhsminor
.
yy16
.
keep
=
yymsp
[
0
].
minor
.
yy165
;
}
yymsp
[
-
1
].
minor
.
yy16
=
yylhsminor
.
yy16
;
break
;
case
11
8
:
/* db_optr ::= db_optr update */
case
12
7
:
/* alter_db_optr ::= alter_db_optr update */
yytestcase
(
yyruleno
==
127
);
case
11
7
:
/* db_optr ::= db_optr update */
case
12
6
:
/* alter_db_optr ::= alter_db_optr update */
yytestcase
(
yyruleno
==
126
);
{
yylhsminor
.
yy16
=
yymsp
[
-
1
].
minor
.
yy16
;
yylhsminor
.
yy16
.
update
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
-
1
].
minor
.
yy16
=
yylhsminor
.
yy16
;
break
;
case
11
9
:
/* db_optr ::= db_optr cachelast */
case
12
8
:
/* alter_db_optr ::= alter_db_optr cachelast */
yytestcase
(
yyruleno
==
128
);
case
11
8
:
/* db_optr ::= db_optr cachelast */
case
12
7
:
/* alter_db_optr ::= alter_db_optr cachelast */
yytestcase
(
yyruleno
==
127
);
{
yylhsminor
.
yy16
=
yymsp
[
-
1
].
minor
.
yy16
;
yylhsminor
.
yy16
.
cachelast
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
-
1
].
minor
.
yy16
=
yylhsminor
.
yy16
;
break
;
case
1
20
:
/* db_optr ::= db_optr vgroups */
case
1
19
:
/* db_optr ::= db_optr vgroups */
{
yylhsminor
.
yy16
=
yymsp
[
-
1
].
minor
.
yy16
;
yylhsminor
.
yy16
.
numOfVgroups
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
-
1
].
minor
.
yy16
=
yylhsminor
.
yy16
;
break
;
case
12
1
:
/* alter_db_optr ::= */
case
12
0
:
/* alter_db_optr ::= */
{
setDefaultCreateDbOption
(
&
yymsp
[
1
].
minor
.
yy16
);}
break
;
case
12
9
:
/* typename ::= ids */
case
12
8
:
/* typename ::= ids */
{
yymsp
[
0
].
minor
.
yy0
.
type
=
0
;
tSetColumnType
(
&
yylhsminor
.
yy106
,
&
yymsp
[
0
].
minor
.
yy0
);
}
yymsp
[
0
].
minor
.
yy106
=
yylhsminor
.
yy106
;
break
;
case
1
30
:
/* typename ::= ids LP signed RP */
case
1
29
:
/* typename ::= ids LP signed RP */
{
if
(
yymsp
[
-
1
].
minor
.
yy207
<=
0
)
{
yymsp
[
-
3
].
minor
.
yy0
.
type
=
0
;
...
...
@@ -2620,7 +2615,7 @@ static void yy_reduce(
}
yymsp
[
-
3
].
minor
.
yy106
=
yylhsminor
.
yy106
;
break
;
case
13
1
:
/* typename ::= ids UNSIGNED */
case
13
0
:
/* typename ::= ids UNSIGNED */
{
yymsp
[
-
1
].
minor
.
yy0
.
type
=
0
;
yymsp
[
-
1
].
minor
.
yy0
.
n
=
((
yymsp
[
0
].
minor
.
yy0
.
z
+
yymsp
[
0
].
minor
.
yy0
.
n
)
-
yymsp
[
-
1
].
minor
.
yy0
.
z
);
...
...
@@ -2628,20 +2623,20 @@ static void yy_reduce(
}
yymsp
[
-
1
].
minor
.
yy106
=
yylhsminor
.
yy106
;
break
;
case
13
2
:
/* signed ::= INTEGER */
case
13
1
:
/* signed ::= INTEGER */
{
yylhsminor
.
yy207
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
0
].
minor
.
yy207
=
yylhsminor
.
yy207
;
break
;
case
13
3
:
/* signed ::= PLUS INTEGER */
case
13
2
:
/* signed ::= PLUS INTEGER */
{
yymsp
[
-
1
].
minor
.
yy207
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
break
;
case
13
4
:
/* signed ::= MINUS INTEGER */
case
13
3
:
/* signed ::= MINUS INTEGER */
{
yymsp
[
-
1
].
minor
.
yy207
=
-
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);}
break
;
case
13
8
:
/* cmd ::= CREATE TABLE create_table_list */
case
13
7
:
/* cmd ::= CREATE TABLE create_table_list */
{
pInfo
->
type
=
TSDB_SQL_CREATE_TABLE
;
pInfo
->
pCreateTableInfo
=
yymsp
[
0
].
minor
.
yy326
;}
break
;
case
13
9
:
/* create_table_list ::= create_from_stable */
case
13
8
:
/* create_table_list ::= create_from_stable */
{
SCreateTableSql
*
pCreateTable
=
calloc
(
1
,
sizeof
(
SCreateTableSql
));
pCreateTable
->
childTableInfo
=
taosArrayInit
(
4
,
sizeof
(
SCreatedTableInfo
));
...
...
@@ -2652,14 +2647,14 @@ static void yy_reduce(
}
yymsp
[
0
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
1
40
:
/* create_table_list ::= create_table_list create_from_stable */
case
1
39
:
/* create_table_list ::= create_table_list create_from_stable */
{
taosArrayPush
(
yymsp
[
-
1
].
minor
.
yy326
->
childTableInfo
,
&
yymsp
[
0
].
minor
.
yy150
);
yylhsminor
.
yy326
=
yymsp
[
-
1
].
minor
.
yy326
;
}
yymsp
[
-
1
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
14
1
:
/* create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
case
14
0
:
/* create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
{
yylhsminor
.
yy326
=
tSetCreateTableInfo
(
yymsp
[
-
1
].
minor
.
yy165
,
NULL
,
NULL
,
TSQL_CREATE_TABLE
);
setSqlInfo
(
pInfo
,
yylhsminor
.
yy326
,
NULL
,
TSDB_SQL_CREATE_TABLE
);
...
...
@@ -2669,17 +2664,17 @@ static void yy_reduce(
}
yymsp
[
-
5
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
14
2
:
/* create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
case
14
1
:
/* create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
{
yylhsminor
.
yy326
=
tSetCreateTableInfo
(
yymsp
[
-
5
].
minor
.
yy165
,
yymsp
[
-
1
].
minor
.
yy165
,
NULL
,
TSQL_CREATE_STABLE
);
setSqlInfo
(
pInfo
,
yylhsminor
.
yy326
,
NULL
,
TSDB_SQL_CREATE_TABLE
);
setSqlInfo
(
pInfo
,
yylhsminor
.
yy326
,
NULL
,
TSDB_SQL_CREATE_
S
TABLE
);
yymsp
[
-
8
].
minor
.
yy0
.
n
+=
yymsp
[
-
7
].
minor
.
yy0
.
n
;
setCreatedTableName
(
pInfo
,
&
yymsp
[
-
8
].
minor
.
yy0
,
&
yymsp
[
-
9
].
minor
.
yy0
);
}
yymsp
[
-
9
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
14
3
:
/* create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist1 RP */
case
14
2
:
/* create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist1 RP */
{
yymsp
[
-
5
].
minor
.
yy0
.
n
+=
yymsp
[
-
4
].
minor
.
yy0
.
n
;
yymsp
[
-
8
].
minor
.
yy0
.
n
+=
yymsp
[
-
7
].
minor
.
yy0
.
n
;
...
...
@@ -2687,7 +2682,7 @@ static void yy_reduce(
}
yymsp
[
-
9
].
minor
.
yy150
=
yylhsminor
.
yy150
;
break
;
case
14
4
:
/* create_from_stable ::= ifnotexists ids cpxName USING ids cpxName LP tagNamelist RP TAGS LP tagitemlist1 RP */
case
14
3
:
/* create_from_stable ::= ifnotexists ids cpxName USING ids cpxName LP tagNamelist RP TAGS LP tagitemlist1 RP */
{
yymsp
[
-
8
].
minor
.
yy0
.
n
+=
yymsp
[
-
7
].
minor
.
yy0
.
n
;
yymsp
[
-
11
].
minor
.
yy0
.
n
+=
yymsp
[
-
10
].
minor
.
yy0
.
n
;
...
...
@@ -2695,15 +2690,15 @@ static void yy_reduce(
}
yymsp
[
-
12
].
minor
.
yy150
=
yylhsminor
.
yy150
;
break
;
case
14
5
:
/* tagNamelist ::= tagNamelist COMMA ids */
case
14
4
:
/* tagNamelist ::= tagNamelist COMMA ids */
{
taosArrayPush
(
yymsp
[
-
2
].
minor
.
yy165
,
&
yymsp
[
0
].
minor
.
yy0
);
yylhsminor
.
yy165
=
yymsp
[
-
2
].
minor
.
yy165
;
}
yymsp
[
-
2
].
minor
.
yy165
=
yylhsminor
.
yy165
;
break
;
case
14
6
:
/* tagNamelist ::= ids */
case
14
5
:
/* tagNamelist ::= ids */
{
yylhsminor
.
yy165
=
taosArrayInit
(
4
,
sizeof
(
SToken
));
taosArrayPush
(
yylhsminor
.
yy165
,
&
yymsp
[
0
].
minor
.
yy0
);}
yymsp
[
0
].
minor
.
yy165
=
yylhsminor
.
yy165
;
break
;
case
14
7
:
/* create_table_args ::= ifnotexists ids cpxName AS select */
case
14
6
:
/* create_table_args ::= ifnotexists ids cpxName AS select */
{
yylhsminor
.
yy326
=
tSetCreateTableInfo
(
NULL
,
NULL
,
yymsp
[
0
].
minor
.
yy278
,
TSQL_CREATE_STREAM
);
setSqlInfo
(
pInfo
,
yylhsminor
.
yy326
,
NULL
,
TSDB_SQL_CREATE_TABLE
);
...
...
@@ -2713,56 +2708,56 @@ static void yy_reduce(
}
yymsp
[
-
4
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
14
8
:
/* columnlist ::= columnlist COMMA column */
case
14
7
:
/* columnlist ::= columnlist COMMA column */
{
taosArrayPush
(
yymsp
[
-
2
].
minor
.
yy165
,
&
yymsp
[
0
].
minor
.
yy106
);
yylhsminor
.
yy165
=
yymsp
[
-
2
].
minor
.
yy165
;
}
yymsp
[
-
2
].
minor
.
yy165
=
yylhsminor
.
yy165
;
break
;
case
14
9
:
/* columnlist ::= column */
case
14
8
:
/* columnlist ::= column */
{
yylhsminor
.
yy165
=
taosArrayInit
(
4
,
sizeof
(
SField
));
taosArrayPush
(
yylhsminor
.
yy165
,
&
yymsp
[
0
].
minor
.
yy106
);}
yymsp
[
0
].
minor
.
yy165
=
yylhsminor
.
yy165
;
break
;
case
1
50
:
/* column ::= ids typename */
case
1
49
:
/* column ::= ids typename */
{
tSetColumnInfo
(
&
yylhsminor
.
yy106
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy106
);
}
yymsp
[
-
1
].
minor
.
yy106
=
yylhsminor
.
yy106
;
break
;
case
15
1
:
/* tagitemlist1 ::= tagitemlist1 COMMA tagitem1 */
case
15
0
:
/* tagitemlist1 ::= tagitemlist1 COMMA tagitem1 */
{
taosArrayPush
(
yymsp
[
-
2
].
minor
.
yy165
,
&
yymsp
[
0
].
minor
.
yy0
);
yylhsminor
.
yy165
=
yymsp
[
-
2
].
minor
.
yy165
;}
yymsp
[
-
2
].
minor
.
yy165
=
yylhsminor
.
yy165
;
break
;
case
15
2
:
/* tagitemlist1 ::= tagitem1 */
case
15
1
:
/* tagitemlist1 ::= tagitem1 */
{
yylhsminor
.
yy165
=
taosArrayInit
(
4
,
sizeof
(
SToken
));
taosArrayPush
(
yylhsminor
.
yy165
,
&
yymsp
[
0
].
minor
.
yy0
);
}
yymsp
[
0
].
minor
.
yy165
=
yylhsminor
.
yy165
;
break
;
case
15
3
:
/* tagitem1 ::= MINUS INTEGER */
case
15
4
:
/* tagitem1 ::= MINUS FLOAT */
yytestcase
(
yyruleno
==
154
);
case
15
5
:
/* tagitem1 ::= PLUS INTEGER */
yytestcase
(
yyruleno
==
155
);
case
15
6
:
/* tagitem1 ::= PLUS FLOAT */
yytestcase
(
yyruleno
==
156
);
case
15
2
:
/* tagitem1 ::= MINUS INTEGER */
case
15
3
:
/* tagitem1 ::= MINUS FLOAT */
yytestcase
(
yyruleno
==
153
);
case
15
4
:
/* tagitem1 ::= PLUS INTEGER */
yytestcase
(
yyruleno
==
154
);
case
15
5
:
/* tagitem1 ::= PLUS FLOAT */
yytestcase
(
yyruleno
==
155
);
{
yylhsminor
.
yy0
.
n
=
yymsp
[
-
1
].
minor
.
yy0
.
n
+
yymsp
[
0
].
minor
.
yy0
.
n
;
yylhsminor
.
yy0
.
type
=
yymsp
[
0
].
minor
.
yy0
.
type
;
}
yymsp
[
-
1
].
minor
.
yy0
=
yylhsminor
.
yy0
;
break
;
case
15
7
:
/* tagitem1 ::= INTEGER */
case
15
8
:
/* tagitem1 ::= FLOAT */
yytestcase
(
yyruleno
==
158
);
case
15
9
:
/* tagitem1 ::= STRING */
yytestcase
(
yyruleno
==
159
);
case
1
60
:
/* tagitem1 ::= BOOL */
yytestcase
(
yyruleno
==
160
);
case
16
1
:
/* tagitem1 ::= NULL */
yytestcase
(
yyruleno
==
161
);
case
16
2
:
/* tagitem1 ::= NOW */
yytestcase
(
yyruleno
==
162
);
case
15
6
:
/* tagitem1 ::= INTEGER */
case
15
7
:
/* tagitem1 ::= FLOAT */
yytestcase
(
yyruleno
==
157
);
case
15
8
:
/* tagitem1 ::= STRING */
yytestcase
(
yyruleno
==
158
);
case
1
59
:
/* tagitem1 ::= BOOL */
yytestcase
(
yyruleno
==
159
);
case
16
0
:
/* tagitem1 ::= NULL */
yytestcase
(
yyruleno
==
160
);
case
16
1
:
/* tagitem1 ::= NOW */
yytestcase
(
yyruleno
==
161
);
{
yylhsminor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;
}
yymsp
[
0
].
minor
.
yy0
=
yylhsminor
.
yy0
;
break
;
case
16
9
:
/* tagitem ::= NULL */
case
16
8
:
/* tagitem ::= NULL */
{
yymsp
[
0
].
minor
.
yy0
.
type
=
0
;
taosVariantCreate
(
&
yylhsminor
.
yy425
,
yymsp
[
0
].
minor
.
yy0
.
z
,
yymsp
[
0
].
minor
.
yy0
.
n
,
yymsp
[
0
].
minor
.
yy0
.
type
);
}
yymsp
[
0
].
minor
.
yy425
=
yylhsminor
.
yy425
;
break
;
case
1
70
:
/* tagitem ::= NOW */
case
1
69
:
/* tagitem ::= NOW */
{
yymsp
[
0
].
minor
.
yy0
.
type
=
TSDB_DATA_TYPE_TIMESTAMP
;
taosVariantCreate
(
&
yylhsminor
.
yy425
,
yymsp
[
0
].
minor
.
yy0
.
z
,
yymsp
[
0
].
minor
.
yy0
.
n
,
yymsp
[
0
].
minor
.
yy0
.
type
);}
yymsp
[
0
].
minor
.
yy425
=
yylhsminor
.
yy425
;
break
;
case
17
1
:
/* tagitem ::= MINUS INTEGER */
case
17
2
:
/* tagitem ::= MINUS FLOAT */
yytestcase
(
yyruleno
==
172
);
case
17
3
:
/* tagitem ::= PLUS INTEGER */
yytestcase
(
yyruleno
==
173
);
case
17
4
:
/* tagitem ::= PLUS FLOAT */
yytestcase
(
yyruleno
==
174
);
case
17
0
:
/* tagitem ::= MINUS INTEGER */
case
17
1
:
/* tagitem ::= MINUS FLOAT */
yytestcase
(
yyruleno
==
171
);
case
17
2
:
/* tagitem ::= PLUS INTEGER */
yytestcase
(
yyruleno
==
172
);
case
17
3
:
/* tagitem ::= PLUS FLOAT */
yytestcase
(
yyruleno
==
173
);
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yymsp
[
-
1
].
minor
.
yy0
.
type
=
yymsp
[
0
].
minor
.
yy0
.
type
;
...
...
@@ -2771,154 +2766,154 @@ static void yy_reduce(
}
yymsp
[
-
1
].
minor
.
yy425
=
yylhsminor
.
yy425
;
break
;
case
17
5
:
/* select ::= SELECT selcollist from where_opt interval_option sliding_opt session_option windowstate_option fill_opt groupby_opt having_opt orderby_opt slimit_opt limit_opt */
case
17
4
:
/* select ::= SELECT selcollist from where_opt interval_option sliding_opt session_option windowstate_option fill_opt groupby_opt having_opt orderby_opt slimit_opt limit_opt */
{
yylhsminor
.
yy278
=
tSetQuerySqlNode
(
&
yymsp
[
-
13
].
minor
.
yy0
,
yymsp
[
-
12
].
minor
.
yy165
,
yymsp
[
-
11
].
minor
.
yy10
,
yymsp
[
-
10
].
minor
.
yy202
,
yymsp
[
-
4
].
minor
.
yy165
,
yymsp
[
-
2
].
minor
.
yy165
,
&
yymsp
[
-
9
].
minor
.
yy532
,
&
yymsp
[
-
7
].
minor
.
yy97
,
&
yymsp
[
-
6
].
minor
.
yy6
,
&
yymsp
[
-
8
].
minor
.
yy0
,
yymsp
[
-
5
].
minor
.
yy165
,
&
yymsp
[
0
].
minor
.
yy367
,
&
yymsp
[
-
1
].
minor
.
yy367
,
yymsp
[
-
3
].
minor
.
yy202
);
}
yymsp
[
-
13
].
minor
.
yy278
=
yylhsminor
.
yy278
;
break
;
case
17
6
:
/* select ::= LP select RP */
case
17
5
:
/* select ::= LP select RP */
{
yymsp
[
-
2
].
minor
.
yy278
=
yymsp
[
-
1
].
minor
.
yy278
;}
break
;
case
17
7
:
/* union ::= select */
case
17
6
:
/* union ::= select */
{
yylhsminor
.
yy503
=
setSubclause
(
NULL
,
yymsp
[
0
].
minor
.
yy278
);
}
yymsp
[
0
].
minor
.
yy503
=
yylhsminor
.
yy503
;
break
;
case
17
8
:
/* union ::= union UNION ALL select */
case
17
7
:
/* union ::= union UNION ALL select */
{
yylhsminor
.
yy503
=
appendSelectClause
(
yymsp
[
-
3
].
minor
.
yy503
,
SQL_TYPE_UNIONALL
,
yymsp
[
0
].
minor
.
yy278
);
}
yymsp
[
-
3
].
minor
.
yy503
=
yylhsminor
.
yy503
;
break
;
case
17
9
:
/* union ::= union UNION select */
case
17
8
:
/* union ::= union UNION select */
{
yylhsminor
.
yy503
=
appendSelectClause
(
yymsp
[
-
2
].
minor
.
yy503
,
SQL_TYPE_UNION
,
yymsp
[
0
].
minor
.
yy278
);
}
yymsp
[
-
2
].
minor
.
yy503
=
yylhsminor
.
yy503
;
break
;
case
1
80
:
/* cmd ::= union */
case
1
79
:
/* cmd ::= union */
{
setSqlInfo
(
pInfo
,
yymsp
[
0
].
minor
.
yy503
,
NULL
,
TSDB_SQL_SELECT
);
}
break
;
case
18
1
:
/* select ::= SELECT selcollist */
case
18
0
:
/* select ::= SELECT selcollist */
{
yylhsminor
.
yy278
=
tSetQuerySqlNode
(
&
yymsp
[
-
1
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy165
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
);
}
yymsp
[
-
1
].
minor
.
yy278
=
yylhsminor
.
yy278
;
break
;
case
18
2
:
/* sclp ::= selcollist COMMA */
case
18
1
:
/* sclp ::= selcollist COMMA */
{
yylhsminor
.
yy165
=
yymsp
[
-
1
].
minor
.
yy165
;}
yymsp
[
-
1
].
minor
.
yy165
=
yylhsminor
.
yy165
;
break
;
case
18
3
:
/* sclp ::= */
case
21
5
:
/* orderby_opt ::= */
yytestcase
(
yyruleno
==
215
);
case
18
2
:
/* sclp ::= */
case
21
4
:
/* orderby_opt ::= */
yytestcase
(
yyruleno
==
214
);
{
yymsp
[
1
].
minor
.
yy165
=
0
;}
break
;
case
18
4
:
/* selcollist ::= sclp distinct expr as */
case
18
3
:
/* selcollist ::= sclp distinct expr as */
{
yylhsminor
.
yy165
=
tSqlExprListAppend
(
yymsp
[
-
3
].
minor
.
yy165
,
yymsp
[
-
1
].
minor
.
yy202
,
yymsp
[
-
2
].
minor
.
yy0
.
n
?
&
yymsp
[
-
2
].
minor
.
yy0
:
0
,
yymsp
[
0
].
minor
.
yy0
.
n
?&
yymsp
[
0
].
minor
.
yy0
:
0
);
}
yymsp
[
-
3
].
minor
.
yy165
=
yylhsminor
.
yy165
;
break
;
case
18
5
:
/* selcollist ::= sclp STAR */
case
18
4
:
/* selcollist ::= sclp STAR */
{
tSqlExpr
*
pNode
=
tSqlExprCreateIdValue
(
NULL
,
TK_ALL
);
yylhsminor
.
yy165
=
tSqlExprListAppend
(
yymsp
[
-
1
].
minor
.
yy165
,
pNode
,
0
,
0
);
}
yymsp
[
-
1
].
minor
.
yy165
=
yylhsminor
.
yy165
;
break
;
case
18
6
:
/* as ::= AS ids */
case
18
5
:
/* as ::= AS ids */
{
yymsp
[
-
1
].
minor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;
}
break
;
case
18
7
:
/* as ::= ids */
case
18
6
:
/* as ::= ids */
{
yylhsminor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;
}
yymsp
[
0
].
minor
.
yy0
=
yylhsminor
.
yy0
;
break
;
case
18
8
:
/* as ::= */
case
18
7
:
/* as ::= */
{
yymsp
[
1
].
minor
.
yy0
.
n
=
0
;
}
break
;
case
18
9
:
/* distinct ::= DISTINCT */
case
18
8
:
/* distinct ::= DISTINCT */
{
yylhsminor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;
}
yymsp
[
0
].
minor
.
yy0
=
yylhsminor
.
yy0
;
break
;
case
19
1
:
/* from ::= FROM tablelist */
case
19
2
:
/* from ::= FROM sub */
yytestcase
(
yyruleno
==
192
);
case
19
0
:
/* from ::= FROM tablelist */
case
19
1
:
/* from ::= FROM sub */
yytestcase
(
yyruleno
==
191
);
{
yymsp
[
-
1
].
minor
.
yy10
=
yymsp
[
0
].
minor
.
yy10
;}
break
;
case
19
3
:
/* sub ::= LP union RP */
case
19
2
:
/* sub ::= LP union RP */
{
yymsp
[
-
2
].
minor
.
yy10
=
addSubquery
(
NULL
,
yymsp
[
-
1
].
minor
.
yy503
,
NULL
);}
break
;
case
19
4
:
/* sub ::= LP union RP ids */
case
19
3
:
/* sub ::= LP union RP ids */
{
yymsp
[
-
3
].
minor
.
yy10
=
addSubquery
(
NULL
,
yymsp
[
-
2
].
minor
.
yy503
,
&
yymsp
[
0
].
minor
.
yy0
);}
break
;
case
19
5
:
/* sub ::= sub COMMA LP union RP ids */
case
19
4
:
/* sub ::= sub COMMA LP union RP ids */
{
yylhsminor
.
yy10
=
addSubquery
(
yymsp
[
-
5
].
minor
.
yy10
,
yymsp
[
-
2
].
minor
.
yy503
,
&
yymsp
[
0
].
minor
.
yy0
);}
yymsp
[
-
5
].
minor
.
yy10
=
yylhsminor
.
yy10
;
break
;
case
19
6
:
/* tablelist ::= ids cpxName */
case
19
5
:
/* tablelist ::= ids cpxName */
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yylhsminor
.
yy10
=
setTableNameList
(
NULL
,
&
yymsp
[
-
1
].
minor
.
yy0
,
NULL
);
}
yymsp
[
-
1
].
minor
.
yy10
=
yylhsminor
.
yy10
;
break
;
case
19
7
:
/* tablelist ::= ids cpxName ids */
case
19
6
:
/* tablelist ::= ids cpxName ids */
{
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
yymsp
[
-
1
].
minor
.
yy0
.
n
;
yylhsminor
.
yy10
=
setTableNameList
(
NULL
,
&
yymsp
[
-
2
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
);
}
yymsp
[
-
2
].
minor
.
yy10
=
yylhsminor
.
yy10
;
break
;
case
19
8
:
/* tablelist ::= tablelist COMMA ids cpxName */
case
19
7
:
/* tablelist ::= tablelist COMMA ids cpxName */
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yylhsminor
.
yy10
=
setTableNameList
(
yymsp
[
-
3
].
minor
.
yy10
,
&
yymsp
[
-
1
].
minor
.
yy0
,
NULL
);
}
yymsp
[
-
3
].
minor
.
yy10
=
yylhsminor
.
yy10
;
break
;
case
19
9
:
/* tablelist ::= tablelist COMMA ids cpxName ids */
case
19
8
:
/* tablelist ::= tablelist COMMA ids cpxName ids */
{
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
yymsp
[
-
1
].
minor
.
yy0
.
n
;
yylhsminor
.
yy10
=
setTableNameList
(
yymsp
[
-
4
].
minor
.
yy10
,
&
yymsp
[
-
2
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
);
}
yymsp
[
-
4
].
minor
.
yy10
=
yylhsminor
.
yy10
;
break
;
case
200
:
/* tmvar ::= VARIABLE */
case
199
:
/* tmvar ::= VARIABLE */
{
yylhsminor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;}
yymsp
[
0
].
minor
.
yy0
=
yylhsminor
.
yy0
;
break
;
case
20
1
:
/* interval_option ::= intervalKey LP tmvar RP */
case
20
0
:
/* interval_option ::= intervalKey LP tmvar RP */
{
yylhsminor
.
yy532
.
interval
=
yymsp
[
-
1
].
minor
.
yy0
;
yylhsminor
.
yy532
.
offset
.
n
=
0
;
yylhsminor
.
yy532
.
token
=
yymsp
[
-
3
].
minor
.
yy46
;}
yymsp
[
-
3
].
minor
.
yy532
=
yylhsminor
.
yy532
;
break
;
case
20
2
:
/* interval_option ::= intervalKey LP tmvar COMMA tmvar RP */
case
20
1
:
/* interval_option ::= intervalKey LP tmvar COMMA tmvar RP */
{
yylhsminor
.
yy532
.
interval
=
yymsp
[
-
3
].
minor
.
yy0
;
yylhsminor
.
yy532
.
offset
=
yymsp
[
-
1
].
minor
.
yy0
;
yylhsminor
.
yy532
.
token
=
yymsp
[
-
5
].
minor
.
yy46
;}
yymsp
[
-
5
].
minor
.
yy532
=
yylhsminor
.
yy532
;
break
;
case
20
3
:
/* interval_option ::= */
case
20
2
:
/* interval_option ::= */
{
memset
(
&
yymsp
[
1
].
minor
.
yy532
,
0
,
sizeof
(
yymsp
[
1
].
minor
.
yy532
));}
break
;
case
20
4
:
/* intervalKey ::= INTERVAL */
case
20
3
:
/* intervalKey ::= INTERVAL */
{
yymsp
[
0
].
minor
.
yy46
=
TK_INTERVAL
;}
break
;
case
20
5
:
/* intervalKey ::= EVERY */
case
20
4
:
/* intervalKey ::= EVERY */
{
yymsp
[
0
].
minor
.
yy46
=
TK_EVERY
;
}
break
;
case
20
6
:
/* session_option ::= */
case
20
5
:
/* session_option ::= */
{
yymsp
[
1
].
minor
.
yy97
.
col
.
n
=
0
;
yymsp
[
1
].
minor
.
yy97
.
gap
.
n
=
0
;}
break
;
case
20
7
:
/* session_option ::= SESSION LP ids cpxName COMMA tmvar RP */
case
20
6
:
/* session_option ::= SESSION LP ids cpxName COMMA tmvar RP */
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
yymsp
[
-
6
].
minor
.
yy97
.
col
=
yymsp
[
-
4
].
minor
.
yy0
;
yymsp
[
-
6
].
minor
.
yy97
.
gap
=
yymsp
[
-
1
].
minor
.
yy0
;
}
break
;
case
20
8
:
/* windowstate_option ::= */
case
20
7
:
/* windowstate_option ::= */
{
yymsp
[
1
].
minor
.
yy6
.
col
.
n
=
0
;
yymsp
[
1
].
minor
.
yy6
.
col
.
z
=
NULL
;}
break
;
case
20
9
:
/* windowstate_option ::= STATE_WINDOW LP ids RP */
case
20
8
:
/* windowstate_option ::= STATE_WINDOW LP ids RP */
{
yymsp
[
-
3
].
minor
.
yy6
.
col
=
yymsp
[
-
1
].
minor
.
yy0
;
}
break
;
case
2
10
:
/* fill_opt ::= */
case
2
09
:
/* fill_opt ::= */
{
yymsp
[
1
].
minor
.
yy165
=
0
;
}
break
;
case
21
1
:
/* fill_opt ::= FILL LP ID COMMA tagitemlist RP */
case
21
0
:
/* fill_opt ::= FILL LP ID COMMA tagitemlist RP */
{
SVariant
A
=
{
0
};
toTSDBType
(
yymsp
[
-
3
].
minor
.
yy0
.
type
);
...
...
@@ -2928,34 +2923,34 @@ static void yy_reduce(
yymsp
[
-
5
].
minor
.
yy165
=
yymsp
[
-
1
].
minor
.
yy165
;
}
break
;
case
21
2
:
/* fill_opt ::= FILL LP ID RP */
case
21
1
:
/* fill_opt ::= FILL LP ID RP */
{
toTSDBType
(
yymsp
[
-
1
].
minor
.
yy0
.
type
);
yymsp
[
-
3
].
minor
.
yy165
=
tListItemAppendToken
(
NULL
,
&
yymsp
[
-
1
].
minor
.
yy0
,
-
1
);
}
break
;
case
21
3
:
/* sliding_opt ::= SLIDING LP tmvar RP */
case
21
2
:
/* sliding_opt ::= SLIDING LP tmvar RP */
{
yymsp
[
-
3
].
minor
.
yy0
=
yymsp
[
-
1
].
minor
.
yy0
;
}
break
;
case
21
4
:
/* sliding_opt ::= */
case
21
3
:
/* sliding_opt ::= */
{
yymsp
[
1
].
minor
.
yy0
.
n
=
0
;
yymsp
[
1
].
minor
.
yy0
.
z
=
NULL
;
yymsp
[
1
].
minor
.
yy0
.
type
=
0
;
}
break
;
case
21
6
:
/* orderby_opt ::= ORDER BY sortlist */
case
21
5
:
/* orderby_opt ::= ORDER BY sortlist */
{
yymsp
[
-
2
].
minor
.
yy165
=
yymsp
[
0
].
minor
.
yy165
;}
break
;
case
21
7
:
/* sortlist ::= sortlist COMMA item sortorder */
case
21
6
:
/* sortlist ::= sortlist COMMA item sortorder */
{
yylhsminor
.
yy165
=
tListItemAppend
(
yymsp
[
-
3
].
minor
.
yy165
,
&
yymsp
[
-
1
].
minor
.
yy425
,
yymsp
[
0
].
minor
.
yy47
);
}
yymsp
[
-
3
].
minor
.
yy165
=
yylhsminor
.
yy165
;
break
;
case
21
8
:
/* sortlist ::= item sortorder */
case
21
7
:
/* sortlist ::= item sortorder */
{
yylhsminor
.
yy165
=
tListItemAppend
(
NULL
,
&
yymsp
[
-
1
].
minor
.
yy425
,
yymsp
[
0
].
minor
.
yy47
);
}
yymsp
[
-
1
].
minor
.
yy165
=
yylhsminor
.
yy165
;
break
;
case
21
9
:
/* item ::= ids cpxName */
case
21
8
:
/* item ::= ids cpxName */
{
toTSDBType
(
yymsp
[
-
1
].
minor
.
yy0
.
type
);
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
...
...
@@ -2964,235 +2959,235 @@ static void yy_reduce(
}
yymsp
[
-
1
].
minor
.
yy425
=
yylhsminor
.
yy425
;
break
;
case
2
20
:
/* sortorder ::= ASC */
case
2
19
:
/* sortorder ::= ASC */
{
yymsp
[
0
].
minor
.
yy47
=
TSDB_ORDER_ASC
;
}
break
;
case
22
1
:
/* sortorder ::= DESC */
case
22
0
:
/* sortorder ::= DESC */
{
yymsp
[
0
].
minor
.
yy47
=
TSDB_ORDER_DESC
;}
break
;
case
22
2
:
/* sortorder ::= */
case
22
1
:
/* sortorder ::= */
{
yymsp
[
1
].
minor
.
yy47
=
TSDB_ORDER_ASC
;
}
break
;
case
22
3
:
/* groupby_opt ::= */
case
22
2
:
/* groupby_opt ::= */
{
yymsp
[
1
].
minor
.
yy165
=
0
;}
break
;
case
22
4
:
/* groupby_opt ::= GROUP BY grouplist */
case
22
3
:
/* groupby_opt ::= GROUP BY grouplist */
{
yymsp
[
-
2
].
minor
.
yy165
=
yymsp
[
0
].
minor
.
yy165
;}
break
;
case
22
5
:
/* grouplist ::= grouplist COMMA item */
case
22
4
:
/* grouplist ::= grouplist COMMA item */
{
yylhsminor
.
yy165
=
tListItemAppend
(
yymsp
[
-
2
].
minor
.
yy165
,
&
yymsp
[
0
].
minor
.
yy425
,
-
1
);
}
yymsp
[
-
2
].
minor
.
yy165
=
yylhsminor
.
yy165
;
break
;
case
22
6
:
/* grouplist ::= item */
case
22
5
:
/* grouplist ::= item */
{
yylhsminor
.
yy165
=
tListItemAppend
(
NULL
,
&
yymsp
[
0
].
minor
.
yy425
,
-
1
);
}
yymsp
[
0
].
minor
.
yy165
=
yylhsminor
.
yy165
;
break
;
case
22
7
:
/* having_opt ::= */
case
23
7
:
/* where_opt ::= */
yytestcase
(
yyruleno
==
237
);
case
28
1
:
/* expritem ::= */
yytestcase
(
yyruleno
==
281
);
case
22
6
:
/* having_opt ::= */
case
23
6
:
/* where_opt ::= */
yytestcase
(
yyruleno
==
236
);
case
28
0
:
/* expritem ::= */
yytestcase
(
yyruleno
==
280
);
{
yymsp
[
1
].
minor
.
yy202
=
0
;}
break
;
case
22
8
:
/* having_opt ::= HAVING expr */
case
23
8
:
/* where_opt ::= WHERE expr */
yytestcase
(
yyruleno
==
238
);
case
22
7
:
/* having_opt ::= HAVING expr */
case
23
7
:
/* where_opt ::= WHERE expr */
yytestcase
(
yyruleno
==
237
);
{
yymsp
[
-
1
].
minor
.
yy202
=
yymsp
[
0
].
minor
.
yy202
;}
break
;
case
22
9
:
/* limit_opt ::= */
case
23
3
:
/* slimit_opt ::= */
yytestcase
(
yyruleno
==
233
);
case
22
8
:
/* limit_opt ::= */
case
23
2
:
/* slimit_opt ::= */
yytestcase
(
yyruleno
==
232
);
{
yymsp
[
1
].
minor
.
yy367
.
limit
=
-
1
;
yymsp
[
1
].
minor
.
yy367
.
offset
=
0
;}
break
;
case
2
30
:
/* limit_opt ::= LIMIT signed */
case
23
4
:
/* slimit_opt ::= SLIMIT signed */
yytestcase
(
yyruleno
==
234
);
case
2
29
:
/* limit_opt ::= LIMIT signed */
case
23
3
:
/* slimit_opt ::= SLIMIT signed */
yytestcase
(
yyruleno
==
233
);
{
yymsp
[
-
1
].
minor
.
yy367
.
limit
=
yymsp
[
0
].
minor
.
yy207
;
yymsp
[
-
1
].
minor
.
yy367
.
offset
=
0
;}
break
;
case
23
1
:
/* limit_opt ::= LIMIT signed OFFSET signed */
case
23
0
:
/* limit_opt ::= LIMIT signed OFFSET signed */
{
yymsp
[
-
3
].
minor
.
yy367
.
limit
=
yymsp
[
-
2
].
minor
.
yy207
;
yymsp
[
-
3
].
minor
.
yy367
.
offset
=
yymsp
[
0
].
minor
.
yy207
;}
break
;
case
23
2
:
/* limit_opt ::= LIMIT signed COMMA signed */
case
23
1
:
/* limit_opt ::= LIMIT signed COMMA signed */
{
yymsp
[
-
3
].
minor
.
yy367
.
limit
=
yymsp
[
0
].
minor
.
yy207
;
yymsp
[
-
3
].
minor
.
yy367
.
offset
=
yymsp
[
-
2
].
minor
.
yy207
;}
break
;
case
23
5
:
/* slimit_opt ::= SLIMIT signed SOFFSET signed */
case
23
4
:
/* slimit_opt ::= SLIMIT signed SOFFSET signed */
{
yymsp
[
-
3
].
minor
.
yy367
.
limit
=
yymsp
[
-
2
].
minor
.
yy207
;
yymsp
[
-
3
].
minor
.
yy367
.
offset
=
yymsp
[
0
].
minor
.
yy207
;}
break
;
case
23
6
:
/* slimit_opt ::= SLIMIT signed COMMA signed */
case
23
5
:
/* slimit_opt ::= SLIMIT signed COMMA signed */
{
yymsp
[
-
3
].
minor
.
yy367
.
limit
=
yymsp
[
0
].
minor
.
yy207
;
yymsp
[
-
3
].
minor
.
yy367
.
offset
=
yymsp
[
-
2
].
minor
.
yy207
;}
break
;
case
23
9
:
/* expr ::= LP expr RP */
case
23
8
:
/* expr ::= LP expr RP */
{
yylhsminor
.
yy202
=
yymsp
[
-
1
].
minor
.
yy202
;
yylhsminor
.
yy202
->
exprToken
.
z
=
yymsp
[
-
2
].
minor
.
yy0
.
z
;
yylhsminor
.
yy202
->
exprToken
.
n
=
(
yymsp
[
0
].
minor
.
yy0
.
z
-
yymsp
[
-
2
].
minor
.
yy0
.
z
+
1
);}
yymsp
[
-
2
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
2
40
:
/* expr ::= ID */
case
2
39
:
/* expr ::= ID */
{
yylhsminor
.
yy202
=
tSqlExprCreateIdValue
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_ID
);}
yymsp
[
0
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
24
1
:
/* expr ::= ID DOT ID */
case
24
0
:
/* expr ::= ID DOT ID */
{
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
(
1
+
yymsp
[
0
].
minor
.
yy0
.
n
);
yylhsminor
.
yy202
=
tSqlExprCreateIdValue
(
&
yymsp
[
-
2
].
minor
.
yy0
,
TK_ID
);}
yymsp
[
-
2
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
24
2
:
/* expr ::= ID DOT STAR */
case
24
1
:
/* expr ::= ID DOT STAR */
{
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
(
1
+
yymsp
[
0
].
minor
.
yy0
.
n
);
yylhsminor
.
yy202
=
tSqlExprCreateIdValue
(
&
yymsp
[
-
2
].
minor
.
yy0
,
TK_ALL
);}
yymsp
[
-
2
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
24
3
:
/* expr ::= INTEGER */
case
24
2
:
/* expr ::= INTEGER */
{
yylhsminor
.
yy202
=
tSqlExprCreateIdValue
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_INTEGER
);}
yymsp
[
0
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
24
4
:
/* expr ::= MINUS INTEGER */
case
24
5
:
/* expr ::= PLUS INTEGER */
yytestcase
(
yyruleno
==
245
);
case
24
3
:
/* expr ::= MINUS INTEGER */
case
24
4
:
/* expr ::= PLUS INTEGER */
yytestcase
(
yyruleno
==
244
);
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yymsp
[
-
1
].
minor
.
yy0
.
type
=
TK_INTEGER
;
yylhsminor
.
yy202
=
tSqlExprCreateIdValue
(
&
yymsp
[
-
1
].
minor
.
yy0
,
TK_INTEGER
);}
yymsp
[
-
1
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
24
6
:
/* expr ::= FLOAT */
case
24
5
:
/* expr ::= FLOAT */
{
yylhsminor
.
yy202
=
tSqlExprCreateIdValue
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_FLOAT
);}
yymsp
[
0
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
24
7
:
/* expr ::= MINUS FLOAT */
case
24
8
:
/* expr ::= PLUS FLOAT */
yytestcase
(
yyruleno
==
248
);
case
24
6
:
/* expr ::= MINUS FLOAT */
case
24
7
:
/* expr ::= PLUS FLOAT */
yytestcase
(
yyruleno
==
247
);
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yymsp
[
-
1
].
minor
.
yy0
.
type
=
TK_FLOAT
;
yylhsminor
.
yy202
=
tSqlExprCreateIdValue
(
&
yymsp
[
-
1
].
minor
.
yy0
,
TK_FLOAT
);}
yymsp
[
-
1
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
24
9
:
/* expr ::= STRING */
case
24
8
:
/* expr ::= STRING */
{
yylhsminor
.
yy202
=
tSqlExprCreateIdValue
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_STRING
);}
yymsp
[
0
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
2
50
:
/* expr ::= NOW */
case
2
49
:
/* expr ::= NOW */
{
yylhsminor
.
yy202
=
tSqlExprCreateIdValue
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_NOW
);
}
yymsp
[
0
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
25
1
:
/* expr ::= VARIABLE */
case
25
0
:
/* expr ::= VARIABLE */
{
yylhsminor
.
yy202
=
tSqlExprCreateIdValue
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_VARIABLE
);}
yymsp
[
0
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
25
2
:
/* expr ::= PLUS VARIABLE */
case
25
3
:
/* expr ::= MINUS VARIABLE */
yytestcase
(
yyruleno
==
253
);
case
25
1
:
/* expr ::= PLUS VARIABLE */
case
25
2
:
/* expr ::= MINUS VARIABLE */
yytestcase
(
yyruleno
==
252
);
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yymsp
[
-
1
].
minor
.
yy0
.
type
=
TK_VARIABLE
;
yylhsminor
.
yy202
=
tSqlExprCreateIdValue
(
&
yymsp
[
-
1
].
minor
.
yy0
,
TK_VARIABLE
);}
yymsp
[
-
1
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
25
4
:
/* expr ::= BOOL */
case
25
3
:
/* expr ::= BOOL */
{
yylhsminor
.
yy202
=
tSqlExprCreateIdValue
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_BOOL
);}
yymsp
[
0
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
25
5
:
/* expr ::= NULL */
case
25
4
:
/* expr ::= NULL */
{
yylhsminor
.
yy202
=
tSqlExprCreateIdValue
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_NULL
);}
yymsp
[
0
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
25
6
:
/* expr ::= ID LP exprlist RP */
case
25
5
:
/* expr ::= ID LP exprlist RP */
{
tRecordFuncName
(
pInfo
->
funcs
,
&
yymsp
[
-
3
].
minor
.
yy0
);
yylhsminor
.
yy202
=
tSqlExprCreateFunction
(
yymsp
[
-
1
].
minor
.
yy165
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
,
yymsp
[
-
3
].
minor
.
yy0
.
type
);
}
yymsp
[
-
3
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
25
7
:
/* expr ::= ID LP STAR RP */
case
25
6
:
/* expr ::= ID LP STAR RP */
{
tRecordFuncName
(
pInfo
->
funcs
,
&
yymsp
[
-
3
].
minor
.
yy0
);
yylhsminor
.
yy202
=
tSqlExprCreateFunction
(
NULL
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
,
yymsp
[
-
3
].
minor
.
yy0
.
type
);
}
yymsp
[
-
3
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
25
8
:
/* expr ::= expr IS NULL */
case
25
7
:
/* expr ::= expr IS NULL */
{
yylhsminor
.
yy202
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy202
,
NULL
,
TK_ISNULL
);}
yymsp
[
-
2
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
25
9
:
/* expr ::= expr IS NOT NULL */
case
25
8
:
/* expr ::= expr IS NOT NULL */
{
yylhsminor
.
yy202
=
tSqlExprCreate
(
yymsp
[
-
3
].
minor
.
yy202
,
NULL
,
TK_NOTNULL
);}
yymsp
[
-
3
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
2
60
:
/* expr ::= expr LT expr */
case
2
59
:
/* expr ::= expr LT expr */
{
yylhsminor
.
yy202
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy202
,
yymsp
[
0
].
minor
.
yy202
,
TK_LT
);}
yymsp
[
-
2
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
26
1
:
/* expr ::= expr GT expr */
case
26
0
:
/* expr ::= expr GT expr */
{
yylhsminor
.
yy202
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy202
,
yymsp
[
0
].
minor
.
yy202
,
TK_GT
);}
yymsp
[
-
2
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
26
2
:
/* expr ::= expr LE expr */
case
26
1
:
/* expr ::= expr LE expr */
{
yylhsminor
.
yy202
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy202
,
yymsp
[
0
].
minor
.
yy202
,
TK_LE
);}
yymsp
[
-
2
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
26
3
:
/* expr ::= expr GE expr */
case
26
2
:
/* expr ::= expr GE expr */
{
yylhsminor
.
yy202
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy202
,
yymsp
[
0
].
minor
.
yy202
,
TK_GE
);}
yymsp
[
-
2
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
26
4
:
/* expr ::= expr NE expr */
case
26
3
:
/* expr ::= expr NE expr */
{
yylhsminor
.
yy202
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy202
,
yymsp
[
0
].
minor
.
yy202
,
TK_NE
);}
yymsp
[
-
2
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
26
5
:
/* expr ::= expr EQ expr */
case
26
4
:
/* expr ::= expr EQ expr */
{
yylhsminor
.
yy202
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy202
,
yymsp
[
0
].
minor
.
yy202
,
TK_EQ
);}
yymsp
[
-
2
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
26
6
:
/* expr ::= expr BETWEEN expr AND expr */
case
26
5
:
/* expr ::= expr BETWEEN expr AND expr */
{
tSqlExpr
*
X2
=
tSqlExprClone
(
yymsp
[
-
4
].
minor
.
yy202
);
yylhsminor
.
yy202
=
tSqlExprCreate
(
tSqlExprCreate
(
yymsp
[
-
4
].
minor
.
yy202
,
yymsp
[
-
2
].
minor
.
yy202
,
TK_GE
),
tSqlExprCreate
(
X2
,
yymsp
[
0
].
minor
.
yy202
,
TK_LE
),
TK_AND
);}
yymsp
[
-
4
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
26
7
:
/* expr ::= expr AND expr */
case
26
6
:
/* expr ::= expr AND expr */
{
yylhsminor
.
yy202
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy202
,
yymsp
[
0
].
minor
.
yy202
,
TK_AND
);}
yymsp
[
-
2
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
26
8
:
/* expr ::= expr OR expr */
case
26
7
:
/* expr ::= expr OR expr */
{
yylhsminor
.
yy202
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy202
,
yymsp
[
0
].
minor
.
yy202
,
TK_OR
);
}
yymsp
[
-
2
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
26
9
:
/* expr ::= expr PLUS expr */
case
26
8
:
/* expr ::= expr PLUS expr */
{
yylhsminor
.
yy202
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy202
,
yymsp
[
0
].
minor
.
yy202
,
TK_PLUS
);
}
yymsp
[
-
2
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
2
70
:
/* expr ::= expr MINUS expr */
case
2
69
:
/* expr ::= expr MINUS expr */
{
yylhsminor
.
yy202
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy202
,
yymsp
[
0
].
minor
.
yy202
,
TK_MINUS
);
}
yymsp
[
-
2
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
27
1
:
/* expr ::= expr STAR expr */
case
27
0
:
/* expr ::= expr STAR expr */
{
yylhsminor
.
yy202
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy202
,
yymsp
[
0
].
minor
.
yy202
,
TK_STAR
);
}
yymsp
[
-
2
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
27
2
:
/* expr ::= expr SLASH expr */
case
27
1
:
/* expr ::= expr SLASH expr */
{
yylhsminor
.
yy202
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy202
,
yymsp
[
0
].
minor
.
yy202
,
TK_DIVIDE
);}
yymsp
[
-
2
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
27
3
:
/* expr ::= expr REM expr */
case
27
2
:
/* expr ::= expr REM expr */
{
yylhsminor
.
yy202
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy202
,
yymsp
[
0
].
minor
.
yy202
,
TK_REM
);
}
yymsp
[
-
2
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
27
4
:
/* expr ::= expr LIKE expr */
case
27
3
:
/* expr ::= expr LIKE expr */
{
yylhsminor
.
yy202
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy202
,
yymsp
[
0
].
minor
.
yy202
,
TK_LIKE
);
}
yymsp
[
-
2
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
27
5
:
/* expr ::= expr MATCH expr */
case
27
4
:
/* expr ::= expr MATCH expr */
{
yylhsminor
.
yy202
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy202
,
yymsp
[
0
].
minor
.
yy202
,
TK_MATCH
);
}
yymsp
[
-
2
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
27
6
:
/* expr ::= expr NMATCH expr */
case
27
5
:
/* expr ::= expr NMATCH expr */
{
yylhsminor
.
yy202
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy202
,
yymsp
[
0
].
minor
.
yy202
,
TK_NMATCH
);
}
yymsp
[
-
2
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
27
7
:
/* expr ::= expr IN LP exprlist RP */
case
27
6
:
/* expr ::= expr IN LP exprlist RP */
{
yylhsminor
.
yy202
=
tSqlExprCreate
(
yymsp
[
-
4
].
minor
.
yy202
,
(
tSqlExpr
*
)
yymsp
[
-
1
].
minor
.
yy165
,
TK_IN
);
}
yymsp
[
-
4
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
27
8
:
/* exprlist ::= exprlist COMMA expritem */
case
27
7
:
/* exprlist ::= exprlist COMMA expritem */
{
yylhsminor
.
yy165
=
tSqlExprListAppend
(
yymsp
[
-
2
].
minor
.
yy165
,
yymsp
[
0
].
minor
.
yy202
,
0
,
0
);}
yymsp
[
-
2
].
minor
.
yy165
=
yylhsminor
.
yy165
;
break
;
case
27
9
:
/* exprlist ::= expritem */
case
27
8
:
/* exprlist ::= expritem */
{
yylhsminor
.
yy165
=
tSqlExprListAppend
(
0
,
yymsp
[
0
].
minor
.
yy202
,
0
,
0
);}
yymsp
[
0
].
minor
.
yy165
=
yylhsminor
.
yy165
;
break
;
case
2
80
:
/* expritem ::= expr */
case
2
79
:
/* expritem ::= expr */
{
yylhsminor
.
yy202
=
yymsp
[
0
].
minor
.
yy202
;}
yymsp
[
0
].
minor
.
yy202
=
yylhsminor
.
yy202
;
break
;
case
28
2
:
/* cmd ::= RESET QUERY CACHE */
case
28
1
:
/* cmd ::= RESET QUERY CACHE */
{
setDCLSqlElems
(
pInfo
,
TSDB_SQL_RESET_CACHE
,
0
);}
break
;
case
28
3
:
/* cmd ::= SYNCDB ids REPLICA */
case
28
2
:
/* cmd ::= SYNCDB ids REPLICA */
{
setDCLSqlElems
(
pInfo
,
TSDB_SQL_SYNC_DB_REPLICA
,
1
,
&
yymsp
[
-
1
].
minor
.
yy0
);}
break
;
case
28
4
:
/* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
case
28
3
:
/* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy165
,
NULL
,
TSDB_ALTER_TABLE_ADD_COLUMN
,
-
1
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
28
5
:
/* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
case
28
4
:
/* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
toTSDBType
(
yymsp
[
0
].
minor
.
yy0
.
type
);
...
...
@@ -3201,21 +3196,21 @@ static void yy_reduce(
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
28
6
:
/* cmd ::= ALTER TABLE ids cpxName MODIFY COLUMN columnlist */
case
28
5
:
/* cmd ::= ALTER TABLE ids cpxName MODIFY COLUMN columnlist */
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy165
,
NULL
,
TSDB_ALTER_TABLE_CHANGE_COLUMN
,
-
1
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
28
7
:
/* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
case
28
6
:
/* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy165
,
NULL
,
TSDB_ALTER_TABLE_ADD_TAG_COLUMN
,
-
1
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
28
8
:
/* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
case
28
7
:
/* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
...
...
@@ -3226,7 +3221,7 @@ static void yy_reduce(
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
28
9
:
/* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
case
28
8
:
/* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
{
yymsp
[
-
5
].
minor
.
yy0
.
n
+=
yymsp
[
-
4
].
minor
.
yy0
.
n
;
...
...
@@ -3240,7 +3235,7 @@ static void yy_reduce(
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
2
90
:
/* cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
case
2
89
:
/* cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
{
yymsp
[
-
6
].
minor
.
yy0
.
n
+=
yymsp
[
-
5
].
minor
.
yy0
.
n
;
...
...
@@ -3252,21 +3247,21 @@ static void yy_reduce(
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
29
1
:
/* cmd ::= ALTER TABLE ids cpxName MODIFY TAG columnlist */
case
29
0
:
/* cmd ::= ALTER TABLE ids cpxName MODIFY TAG columnlist */
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy165
,
NULL
,
TSDB_ALTER_TABLE_MODIFY_TAG_COLUMN
,
-
1
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
29
2
:
/* cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
case
29
1
:
/* cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy165
,
NULL
,
TSDB_ALTER_TABLE_ADD_COLUMN
,
TSDB_SUPER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
29
3
:
/* cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
case
29
2
:
/* cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
...
...
@@ -3277,21 +3272,21 @@ static void yy_reduce(
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
29
4
:
/* cmd ::= ALTER STABLE ids cpxName MODIFY COLUMN columnlist */
case
29
3
:
/* cmd ::= ALTER STABLE ids cpxName MODIFY COLUMN columnlist */
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy165
,
NULL
,
TSDB_ALTER_TABLE_CHANGE_COLUMN
,
TSDB_SUPER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
29
5
:
/* cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
case
29
4
:
/* cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy165
,
NULL
,
TSDB_ALTER_TABLE_ADD_TAG_COLUMN
,
TSDB_SUPER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
29
6
:
/* cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
case
29
5
:
/* cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
...
...
@@ -3302,7 +3297,7 @@ static void yy_reduce(
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
29
7
:
/* cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
case
29
6
:
/* cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
{
yymsp
[
-
5
].
minor
.
yy0
.
n
+=
yymsp
[
-
4
].
minor
.
yy0
.
n
;
...
...
@@ -3316,7 +3311,7 @@ static void yy_reduce(
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
29
8
:
/* cmd ::= ALTER STABLE ids cpxName SET TAG ids EQ tagitem */
case
29
7
:
/* cmd ::= ALTER STABLE ids cpxName SET TAG ids EQ tagitem */
{
yymsp
[
-
6
].
minor
.
yy0
.
n
+=
yymsp
[
-
5
].
minor
.
yy0
.
n
;
...
...
@@ -3328,20 +3323,20 @@ static void yy_reduce(
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
29
9
:
/* cmd ::= ALTER STABLE ids cpxName MODIFY TAG columnlist */
case
29
8
:
/* cmd ::= ALTER STABLE ids cpxName MODIFY TAG columnlist */
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy165
,
NULL
,
TSDB_ALTER_TABLE_MODIFY_TAG_COLUMN
,
TSDB_SUPER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
300
:
/* cmd ::= KILL CONNECTION INTEGER */
case
299
:
/* cmd ::= KILL CONNECTION INTEGER */
{
setKillSql
(
pInfo
,
TSDB_SQL_KILL_CONNECTION
,
&
yymsp
[
0
].
minor
.
yy0
);}
break
;
case
30
1
:
/* cmd ::= KILL STREAM INTEGER COLON INTEGER */
case
30
0
:
/* cmd ::= KILL STREAM INTEGER COLON INTEGER */
{
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
(
yymsp
[
-
1
].
minor
.
yy0
.
n
+
yymsp
[
0
].
minor
.
yy0
.
n
);
setKillSql
(
pInfo
,
TSDB_SQL_KILL_STREAM
,
&
yymsp
[
-
2
].
minor
.
yy0
);}
break
;
case
30
2
:
/* cmd ::= KILL QUERY INTEGER COLON INTEGER */
case
30
1
:
/* cmd ::= KILL QUERY INTEGER COLON INTEGER */
{
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
(
yymsp
[
-
1
].
minor
.
yy0
.
n
+
yymsp
[
0
].
minor
.
yy0
.
n
);
setKillSql
(
pInfo
,
TSDB_SQL_KILL_QUERY
,
&
yymsp
[
-
2
].
minor
.
yy0
);}
break
;
default:
...
...
source/libs/planner/CMakeLists.txt
浏览文件 @
10952778
...
...
@@ -11,4 +11,6 @@ target_link_libraries(
PRIVATE os util catalog cjson parser transport function qcom
)
ADD_SUBDIRECTORY
(
test
)
if
(
${
BUILD_TEST
}
)
ADD_SUBDIRECTORY
(
test
)
endif
(
${
BUILD_TEST
}
)
source/libs/planner/inc/plannerInt.h
浏览文件 @
10952778
...
...
@@ -70,6 +70,11 @@ typedef struct SQueryPlanNode {
struct
SQueryPlanNode
*
pParent
;
}
SQueryPlanNode
;
typedef
struct
SDataPayloadInfo
{
int32_t
msgType
;
SArray
*
payload
;
}
SDataPayloadInfo
;
/**
* Optimize the query execution plan, currently not implement yet.
* @param pQueryNode
...
...
@@ -101,7 +106,7 @@ int32_t queryPlanToString(struct SQueryPlanNode* pQueryNode, char** str);
int32_t
queryPlanToSql
(
struct
SQueryPlanNode
*
pQueryNode
,
char
**
sql
);
int32_t
createDag
(
SQueryPlanNode
*
pQueryNode
,
struct
SCatalog
*
pCatalog
,
SQueryDag
**
pDag
);
int32_t
setSubplanExecutionNode
(
SSubplan
*
subplan
,
uint64_t
templateId
,
S
Ep
Addr
*
ep
);
int32_t
setSubplanExecutionNode
(
SSubplan
*
subplan
,
uint64_t
templateId
,
S
QueryNode
Addr
*
ep
);
int32_t
subPlanToString
(
const
SSubplan
*
pPhyNode
,
char
**
str
,
int32_t
*
len
);
int32_t
stringToSubplan
(
const
char
*
str
,
SSubplan
**
subplan
);
...
...
source/libs/planner/src/logicPlan.c
浏览文件 @
10952778
...
...
@@ -37,18 +37,28 @@ int32_t optimizeQueryPlan(struct SQueryPlanNode* pQueryNode) {
return
0
;
}
static
int32_t
create
Insert
Plan
(
const
SQueryNode
*
pNode
,
SQueryPlanNode
**
pQueryPlan
)
{
static
int32_t
create
ModificationOp
Plan
(
const
SQueryNode
*
pNode
,
SQueryPlanNode
**
pQueryPlan
)
{
SInsertStmtInfo
*
pInsert
=
(
SInsertStmtInfo
*
)
pNode
;
*
pQueryPlan
=
calloc
(
1
,
sizeof
(
SQueryPlanNode
));
SArray
*
blocks
=
taosArrayInit
(
taosArrayGetSize
(
pInsert
->
pDataBlocks
),
POINTER_BYTES
);
if
(
NULL
==
*
pQueryPlan
||
NULL
==
blocks
)
{
SDataPayloadInfo
*
pPayload
=
calloc
(
1
,
sizeof
(
SDataPayloadInfo
));
if
(
NULL
==
*
pQueryPlan
||
NULL
==
blocks
||
NULL
==
pPayload
)
{
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
(
*
pQueryPlan
)
->
info
.
type
=
QNODE_MODIFY
;
taosArrayAddAll
(
blocks
,
pInsert
->
pDataBlocks
);
(
*
pQueryPlan
)
->
pExtInfo
=
blocks
;
if
(
pNode
->
type
==
TSDB_SQL_INSERT
)
{
pPayload
->
msgType
=
TDMT_VND_SUBMIT
;
}
else
if
(
pNode
->
type
==
TSDB_SQL_CREATE_TABLE
)
{
pPayload
->
msgType
=
TDMT_VND_CREATE_TABLE
;
}
pPayload
->
payload
=
blocks
;
(
*
pQueryPlan
)
->
pExtInfo
=
pPayload
;
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -69,7 +79,7 @@ int32_t createQueryPlan(const SQueryNode* pNode, SQueryPlanNode** pQueryPlan) {
case
TSDB_SQL_INSERT
:
case
TSDB_SQL_CREATE_TABLE
:
return
create
Insert
Plan
(
pNode
,
pQueryPlan
);
return
create
ModificationOp
Plan
(
pNode
,
pQueryPlan
);
default:
return
TSDB_CODE_FAILED
;
...
...
source/libs/planner/src/physicalPlan.c
浏览文件 @
10952778
...
...
@@ -191,13 +191,15 @@ static SSubplan* initSubplan(SPlanContext* pCxt, int32_t type) {
subplan
->
level
=
0
;
if
(
NULL
!=
pCxt
->
pCurrentSubplan
)
{
subplan
->
level
=
pCxt
->
pCurrentSubplan
->
level
+
1
;
if
(
NULL
==
pCxt
->
pCurrentSubplan
->
pChild
er
n
)
{
pCxt
->
pCurrentSubplan
->
pChild
er
n
=
validPointer
(
taosArrayInit
(
TARRAY_MIN_SIZE
,
POINTER_BYTES
));
if
(
NULL
==
pCxt
->
pCurrentSubplan
->
pChild
re
n
)
{
pCxt
->
pCurrentSubplan
->
pChild
re
n
=
validPointer
(
taosArrayInit
(
TARRAY_MIN_SIZE
,
POINTER_BYTES
));
}
taosArrayPush
(
pCxt
->
pCurrentSubplan
->
pChildern
,
&
subplan
);
taosArrayPush
(
pCxt
->
pCurrentSubplan
->
pChildren
,
&
subplan
);
subplan
->
pParents
=
validPointer
(
taosArrayInit
(
TARRAY_MIN_SIZE
,
POINTER_BYTES
));
taosArrayPush
(
subplan
->
pParents
,
&
pCxt
->
pCurrentSubplan
);
}
SArray
*
currentLevel
;
if
(
subplan
->
level
>=
taosArrayGetSize
(
pCxt
->
pDag
->
pSubplans
))
{
currentLevel
=
validPointer
(
taosArrayInit
(
TARRAY_MIN_SIZE
,
POINTER_BYTES
));
...
...
@@ -205,6 +207,7 @@ static SSubplan* initSubplan(SPlanContext* pCxt, int32_t type) {
}
else
{
currentLevel
=
taosArrayGetP
(
pCxt
->
pDag
->
pSubplans
,
subplan
->
level
);
}
taosArrayPush
(
currentLevel
,
&
subplan
);
pCxt
->
pCurrentSubplan
=
subplan
;
++
(
pCxt
->
pDag
->
numOfSubplans
);
...
...
@@ -278,6 +281,7 @@ static SPhyNode* createPhyNode(SPlanContext* pCxt, SQueryPlanNode* pPlanNode) {
default:
assert
(
false
);
}
if
(
pPlanNode
->
pChildren
!=
NULL
&&
taosArrayGetSize
(
pPlanNode
->
pChildren
)
>
0
)
{
node
->
pChildren
=
taosArrayInit
(
TARRAY_MIN_SIZE
,
POINTER_BYTES
);
size_t
size
=
taosArrayGetSize
(
pPlanNode
->
pChildren
);
...
...
@@ -287,30 +291,37 @@ static SPhyNode* createPhyNode(SPlanContext* pCxt, SQueryPlanNode* pPlanNode) {
taosArrayPush
(
node
->
pChildren
,
&
child
);
}
}
return
node
;
}
static
void
splitInsertSubplan
(
SPlanContext
*
pCxt
,
SQueryPlanNode
*
pPlanNode
)
{
SArray
*
vgs
=
(
SArray
*
)
pPlanNode
->
pExtInfo
;
size_t
numOfVg
=
taosArrayGetSize
(
vgs
);
for
(
int32_t
i
=
0
;
i
<
numOfVg
;
++
i
)
{
static
void
splitModificationOpSubPlan
(
SPlanContext
*
pCxt
,
SQueryPlanNode
*
pPlanNode
)
{
SDataPayloadInfo
*
pPayload
=
(
SDataPayloadInfo
*
)
pPlanNode
->
pExtInfo
;
size_t
numOfVgroups
=
taosArrayGetSize
(
pPayload
->
payload
);
for
(
int32_t
i
=
0
;
i
<
numOfVgroups
;
++
i
)
{
STORE_CURRENT_SUBPLAN
(
pCxt
);
SSubplan
*
subplan
=
initSubplan
(
pCxt
,
QUERY_TYPE_MODIFY
);
SVgDataBlocks
*
blocks
=
(
SVgDataBlocks
*
)
taosArrayGetP
(
vgs
,
i
);
SVgDataBlocks
*
blocks
=
(
SVgDataBlocks
*
)
taosArrayGetP
(
pPayload
->
payload
,
i
);
vgroupInfoToEpSet
(
&
blocks
->
vg
,
&
subplan
->
execNode
);
subplan
->
pNode
=
NULL
;
subplan
->
pDataSink
=
createDataInserter
(
pCxt
,
blocks
);
subplan
->
pNode
=
NULL
;
subplan
->
type
=
QUERY_TYPE_MODIFY
;
subplan
->
msgType
=
pPayload
->
msgType
;
RECOVERY_CURRENT_SUBPLAN
(
pCxt
);
}
}
static
void
createSubplanByLevel
(
SPlanContext
*
pCxt
,
SQueryPlanNode
*
pRoot
)
{
if
(
QNODE_MODIFY
==
pRoot
->
info
.
type
)
{
split
InsertSubp
lan
(
pCxt
,
pRoot
);
split
ModificationOpSubP
lan
(
pCxt
,
pRoot
);
}
else
{
SSubplan
*
subplan
=
initSubplan
(
pCxt
,
QUERY_TYPE_MERGE
);
++
(
pCxt
->
nextId
.
templateId
);
subplan
->
msgType
=
TDMT_VND_QUERY
;
subplan
->
pNode
=
createPhyNode
(
pCxt
,
pRoot
);
subplan
->
pDataSink
=
createDataDispatcher
(
pCxt
,
pRoot
);
}
...
...
@@ -325,6 +336,7 @@ int32_t createDag(SQueryPlanNode* pQueryNode, struct SCatalog* pCatalog, SQueryD
.
pCurrentSubplan
=
NULL
,
.
nextId
=
{
0
}
// todo queryid
};
*
pDag
=
context
.
pDag
;
context
.
pDag
->
pSubplans
=
validPointer
(
taosArrayInit
(
TARRAY_MIN_SIZE
,
POINTER_BYTES
));
createSubplanByLevel
(
&
context
,
pQueryNode
);
...
...
@@ -336,6 +348,6 @@ int32_t createDag(SQueryPlanNode* pQueryNode, struct SCatalog* pCatalog, SQueryD
return
TSDB_CODE_SUCCESS
;
}
int32_t
setSubplanExecutionNode
(
SSubplan
*
subplan
,
uint64_t
templateId
,
S
Ep
Addr
*
ep
)
{
int32_t
setSubplanExecutionNode
(
SSubplan
*
subplan
,
uint64_t
templateId
,
S
QueryNode
Addr
*
ep
)
{
//todo
}
source/libs/planner/src/physicalPlanJson.c
浏览文件 @
10952778
...
...
@@ -793,7 +793,7 @@ static cJSON* subplanToJson(const SSubplan* subplan) {
return
NULL
;
}
// The 'type', 'level', 'execEpSet', 'pChild
er
n' and 'pParents' fields do not need to be serialized.
// The 'type', 'level', 'execEpSet', 'pChild
re
n' and 'pParents' fields do not need to be serialized.
bool
res
=
addObject
(
jSubplan
,
jkSubplanId
,
subplanIdToJson
,
&
subplan
->
id
);
if
(
res
)
{
...
...
@@ -835,7 +835,7 @@ int32_t subPlanToString(const SSubplan* subplan, char** str, int32_t* len) {
SDataInserter
*
insert
=
(
SDataInserter
*
)(
subplan
->
pDataSink
);
*
len
=
insert
->
size
;
*
str
=
insert
->
pData
;
insert
->
pData
=
=
NULL
;
insert
->
pData
=
NULL
;
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -844,6 +844,7 @@ int32_t subPlanToString(const SSubplan* subplan, char** str, int32_t* len) {
terrno
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
return
TSDB_CODE_FAILED
;
}
*
str
=
cJSON_Print
(
json
);
*
len
=
strlen
(
*
str
)
+
1
;
return
TSDB_CODE_SUCCESS
;
...
...
source/libs/planner/src/planner.c
浏览文件 @
10952778
...
...
@@ -31,22 +31,25 @@ int32_t qCreateQueryDag(const struct SQueryNode* pNode, struct SQueryDag** pDag)
destroyQueryPlan
(
logicPlan
);
return
code
;
}
code
=
optimizeQueryPlan
(
logicPlan
);
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
destroyQueryPlan
(
logicPlan
);
return
code
;
}
code
=
createDag
(
logicPlan
,
NULL
,
pDag
);
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
destroyQueryPlan
(
logicPlan
);
qDestroyQueryDag
(
*
pDag
);
return
code
;
}
destroyQueryPlan
(
logicPlan
);
return
TSDB_CODE_SUCCESS
;
}
int32_t
qSetSubplanExecutionNode
(
SSubplan
*
subplan
,
uint64_t
templateId
,
S
Ep
Addr
*
ep
)
{
int32_t
qSetSubplanExecutionNode
(
SSubplan
*
subplan
,
uint64_t
templateId
,
S
QueryNode
Addr
*
ep
)
{
return
setSubplanExecutionNode
(
subplan
,
templateId
,
ep
);
}
...
...
source/libs/qcom/CMakeLists.txt
浏览文件 @
10952778
...
...
@@ -11,4 +11,6 @@ target_link_libraries(
PRIVATE os util transport
)
ADD_SUBDIRECTORY
(
test
)
if
(
${
BUILD_TEST
}
)
ADD_SUBDIRECTORY
(
test
)
endif
(
${
BUILD_TEST
}
)
source/libs/qworker/CMakeLists.txt
浏览文件 @
10952778
...
...
@@ -11,4 +11,6 @@ target_link_libraries(
PRIVATE os util transport planner qcom
)
ADD_SUBDIRECTORY
(
test
)
\ No newline at end of file
if
(
${
BUILD_TEST
}
)
ADD_SUBDIRECTORY
(
test
)
endif
(
${
BUILD_TEST
}
)
\ No newline at end of file
source/libs/scheduler/CMakeLists.txt
浏览文件 @
10952778
...
...
@@ -12,4 +12,6 @@ target_link_libraries(
PRIVATE os util planner qcom common catalog transport
)
ADD_SUBDIRECTORY
(
test
)
\ No newline at end of file
if
(
${
BUILD_TEST
}
)
ADD_SUBDIRECTORY
(
test
)
endif
(
${
BUILD_TEST
}
)
\ No newline at end of file
source/libs/scheduler/inc/schedulerInt.h
浏览文件 @
10952778
...
...
@@ -66,7 +66,9 @@ typedef struct SSchTask {
char
*
msg
;
// operator tree
int32_t
msgLen
;
// msg length
int8_t
status
;
// task status
SEpAddr
execAddr
;
// task actual executed node address
SQueryNodeAddr
execAddr
;
// task actual executed node address
int8_t
condidateIdx
;
// current try condidation index
SArray
*
condidateAddrs
;
// condidate node addresses, element is SQueryNodeAddr
SQueryProfileSummary
summary
;
// task execution summary
int32_t
childReady
;
// child task ready number
SArray
*
children
;
// the datasource tasks,from which to fetch the result, element is SQueryTask*
...
...
source/libs/scheduler/src/scheduler.c
浏览文件 @
10952778
...
...
@@ -28,7 +28,7 @@ int32_t schBuildTaskRalation(SSchJob *job, SHashObj *planToTask) {
for
(
int32_t
m
=
0
;
m
<
level
->
taskNum
;
++
m
)
{
SSchTask
*
task
=
taosArrayGet
(
level
->
subTasks
,
m
);
SSubplan
*
plan
=
task
->
plan
;
int32_t
childNum
=
plan
->
pChild
ern
?
(
int32_t
)
taosArrayGetSize
(
plan
->
pChilder
n
)
:
0
;
int32_t
childNum
=
plan
->
pChild
ren
?
(
int32_t
)
taosArrayGetSize
(
plan
->
pChildre
n
)
:
0
;
int32_t
parentNum
=
plan
->
pParents
?
(
int32_t
)
taosArrayGetSize
(
plan
->
pParents
)
:
0
;
if
(
childNum
>
0
)
{
...
...
@@ -40,7 +40,7 @@ int32_t schBuildTaskRalation(SSchJob *job, SHashObj *planToTask) {
}
for
(
int32_t
n
=
0
;
n
<
childNum
;
++
n
)
{
SSubplan
**
child
=
taosArrayGet
(
plan
->
pChild
er
n
,
n
);
SSubplan
**
child
=
taosArrayGet
(
plan
->
pChild
re
n
,
n
);
SSchTask
**
childTask
=
taosHashGet
(
planToTask
,
child
,
POINTER_BYTES
);
if
(
NULL
==
childTask
||
NULL
==
*
childTask
)
{
qError
(
"subplan relationship error, level:%d, taskIdx:%d, childIdx:%d"
,
i
,
m
,
n
);
...
...
@@ -122,6 +122,7 @@ int32_t schValidateAndBuildJob(SQueryDag *dag, SSchJob *job) {
SCH_ERR_JRET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
}
//??
job
->
attr
.
needFetch
=
true
;
job
->
levelNum
=
levelNum
;
...
...
@@ -215,28 +216,49 @@ _return:
SCH_RET
(
code
);
}
int32_t
schSetTask
ExecEpSet
(
SSchJob
*
job
,
SEpSet
*
epSet
)
{
if
(
epSet
->
numOfEps
>=
SCH_MAX_CONDIDATE_EP_NUM
)
{
int32_t
schSetTask
CondidateAddrs
(
SSchJob
*
job
,
SSchTask
*
task
)
{
if
(
task
->
condidateAddrs
)
{
return
TSDB_CODE_SUCCESS
;
}
task
->
condidateIdx
=
0
;
task
->
condidateAddrs
=
taosArrayInit
(
SCH_MAX_CONDIDATE_EP_NUM
,
sizeof
(
SQueryNodeAddr
));
if
(
NULL
==
task
->
condidateAddrs
)
{
qError
(
"taosArrayInit failed"
);
SCH_ERR_RET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
}
if
(
task
->
plan
->
execNode
.
numOfEps
>
0
)
{
if
(
NULL
==
taosArrayPush
(
task
->
condidateAddrs
,
&
task
->
plan
->
execNode
))
{
qError
(
"taosArrayPush failed"
);
SCH_ERR_RET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
}
return
TSDB_CODE_SUCCESS
;
}
int32_t
addNum
=
0
;
int32_t
nodeNum
=
taosArrayGetSize
(
job
->
nodeList
);
for
(
int32_t
i
=
0
;
i
<
nodeNum
&&
epSet
->
numOfEps
<
tListLen
(
epSet
->
port
)
;
++
i
)
{
S
EpAddr
*
addr
=
taosArrayGet
(
job
->
nodeList
,
i
);
for
(
int32_t
i
=
0
;
i
<
nodeNum
&&
addNum
<
SCH_MAX_CONDIDATE_EP_NUM
;
++
i
)
{
S
QueryNodeAddr
*
n
addr
=
taosArrayGet
(
job
->
nodeList
,
i
);
strncpy
(
epSet
->
fqdn
[
epSet
->
numOfEps
],
addr
->
fqdn
,
sizeof
(
addr
->
fqdn
));
epSet
->
port
[
epSet
->
numOfEps
]
=
addr
->
port
;
if
(
NULL
==
taosArrayPush
(
task
->
condidateAddrs
,
&
task
->
plan
->
execNode
))
{
qError
(
"taosArrayPush failed"
);
SCH_ERR_RET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
}
++
epSet
->
numOfEps
;
++
addNum
;
}
for
(
int32_t
i
=
0
;
i
<
job
->
dataSrcEps
.
numOfEps
&&
epSet
->
numOfEps
<
tListLen
(
epSet
->
port
);
++
i
)
{
/*
for (int32_t i = 0; i < job->dataSrcEps.numOfEps && addNum < SCH_MAX_CONDIDATE_EP_NUM; ++i) {
strncpy(epSet->fqdn[epSet->numOfEps], job->dataSrcEps.fqdn[i], sizeof(job->dataSrcEps.fqdn[i]));
epSet->port[epSet->numOfEps] = job->dataSrcEps.port[i];
++epSet->numOfEps;
}
*/
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -383,8 +405,8 @@ int32_t schProcessOnTaskSuccess(SSchJob *job, SSchTask *task) {
return
TSDB_CODE_SUCCESS
;
}
}
else
{
strncpy
(
job
->
resEp
.
fqdn
,
task
->
execAddr
.
fqdn
,
sizeof
(
job
->
resEp
.
fqdn
));
job
->
resEp
.
port
=
task
->
execAddr
.
port
;
strncpy
(
job
->
resEp
.
fqdn
,
task
->
execAddr
.
epAddr
[
task
->
execAddr
.
inUse
].
fqdn
,
sizeof
(
job
->
resEp
.
fqdn
));
job
->
resEp
.
port
=
task
->
execAddr
.
epAddr
[
task
->
execAddr
.
inUse
].
port
;
}
job
->
fetchTask
=
task
;
...
...
@@ -394,12 +416,14 @@ int32_t schProcessOnTaskSuccess(SSchJob *job, SSchTask *task) {
return
TSDB_CODE_SUCCESS
;
}
/*
if (SCH_IS_DATA_SRC_TASK(task) && job->dataSrcEps.numOfEps < SCH_MAX_CONDIDATE_EP_NUM) {
strncpy(job->dataSrcEps.fqdn[job->dataSrcEps.numOfEps], task->execAddr.fqdn, sizeof(task->execAddr.fqdn));
job->dataSrcEps.port[job->dataSrcEps.numOfEps] = task->execAddr.port;
++job->dataSrcEps.numOfEps;
}
*/
for
(
int32_t
i
=
0
;
i
<
parentNum
;
++
i
)
{
SSchTask
*
par
=
*
(
SSchTask
**
)
taosArrayGet
(
task
->
parents
,
i
);
...
...
@@ -456,12 +480,24 @@ int32_t schProcessOnTaskFailure(SSchJob *job, SSchTask *task, int32_t errCode) {
int32_t
schProcessRspMsg
(
SSchJob
*
job
,
SSchTask
*
task
,
int32_t
msgType
,
char
*
msg
,
int32_t
msgSize
,
int32_t
rspCode
)
{
int32_t
code
=
0
;
switch
(
msgType
)
{
case
TDMT_VND_CREATE_TABLE_RSP
:
{
if
(
rspCode
!=
TSDB_CODE_SUCCESS
)
{
SCH_ERR_JRET
(
schProcessOnTaskFailure
(
job
,
task
,
rspCode
));
}
else
{
// job->resNumOfRows += rsp->affectedRows;
code
=
schProcessOnTaskSuccess
(
job
,
task
);
if
(
code
)
{
goto
_task_error
;
}
}
}
case
TDMT_VND_SUBMIT_RSP
:
{
SShellSubmitRspMsg
*
rsp
=
(
SShellSubmitRspMsg
*
)
msg
;
if
(
rsp
->
code
!=
TSDB_CODE_SUCCESS
)
{
SCH_ERR_JRET
(
schProcessOnTaskFailure
(
job
,
task
,
rsp
->
code
));
if
(
rspCode
!=
TSDB_CODE_SUCCESS
)
{
SCH_ERR_JRET
(
schProcessOnTaskFailure
(
job
,
task
,
rspCode
));
}
else
{
SShellSubmitRspMsg
*
rsp
=
(
SShellSubmitRspMsg
*
)
msg
;
job
->
resNumOfRows
+=
rsp
->
affectedRows
;
code
=
schProcessOnTaskSuccess
(
job
,
task
);
...
...
@@ -547,22 +583,29 @@ int32_t schHandleCallback(void* param, const SDataBuf* pMsg, int32_t msgType, in
_return:
tfree
(
param
);
SCH_RET
(
code
);
}
int32_t
schHandleSubmitCallback
(
void
*
param
,
const
SDataBuf
*
pMsg
,
int32_t
code
)
{
return
schHandleCallback
(
param
,
pMsg
,
TDMT_VND_SUBMIT_RSP
,
code
);
}
int32_t
schHandleCreateTableCallback
(
void
*
param
,
const
SDataBuf
*
pMsg
,
int32_t
code
)
{
return
schHandleCallback
(
param
,
pMsg
,
TDMT_VND_CREATE_TABLE_RSP
,
code
);
}
int32_t
schHandleQueryCallback
(
void
*
param
,
const
SDataBuf
*
pMsg
,
int32_t
code
)
{
return
schHandleCallback
(
param
,
pMsg
,
TDMT_VND_QUERY_RSP
,
code
);
}
int32_t
schHandleFetchCallback
(
void
*
param
,
const
SDataBuf
*
pMsg
,
int32_t
code
)
{
return
schHandleCallback
(
param
,
pMsg
,
TDMT_VND_FETCH_RSP
,
code
);
}
int32_t
schHandleReadyCallback
(
void
*
param
,
const
SDataBuf
*
pMsg
,
int32_t
code
)
{
return
schHandleCallback
(
param
,
pMsg
,
TDMT_VND_RES_READY_RSP
,
code
);
}
int32_t
schHandleDropCallback
(
void
*
param
,
const
SDataBuf
*
pMsg
,
int32_t
code
)
{
SSchCallbackParam
*
pParam
=
(
SSchCallbackParam
*
)
param
;
qDebug
(
"drop task rsp received, queryId:%"
PRIx64
",taksId:%"
PRIx64
",code:%d"
,
pParam
->
queryId
,
pParam
->
taskId
,
code
);
...
...
@@ -570,6 +613,9 @@ int32_t schHandleDropCallback(void* param, const SDataBuf* pMsg, int32_t code) {
int32_t
schGetCallbackFp
(
int32_t
msgType
,
__async_send_cb_fn_t
*
fp
)
{
switch
(
msgType
)
{
case
TDMT_VND_CREATE_TABLE
:
*
fp
=
schHandleCreateTableCallback
;
break
;
case
TDMT_VND_SUBMIT
:
*
fp
=
schHandleSubmitCallback
;
break
;
...
...
@@ -633,6 +679,16 @@ _return:
SCH_RET
(
code
);
}
void
schConvertAddrToEpSet
(
SQueryNodeAddr
*
addr
,
SEpSet
*
epSet
)
{
epSet
->
inUse
=
addr
->
inUse
;
epSet
->
numOfEps
=
addr
->
numOfEps
;
for
(
int8_t
i
=
0
;
i
<
epSet
->
numOfEps
;
++
i
)
{
strncpy
(
epSet
->
fqdn
[
i
],
addr
->
epAddr
[
i
].
fqdn
,
sizeof
(
addr
->
epAddr
[
i
].
fqdn
));
epSet
->
port
[
i
]
=
addr
->
epAddr
[
i
].
port
;
}
}
int32_t
schBuildAndSendMsg
(
SSchJob
*
job
,
SSchTask
*
task
,
int32_t
msgType
)
{
uint32_t
msgSize
=
0
;
...
...
@@ -640,6 +696,7 @@ int32_t schBuildAndSendMsg(SSchJob *job, SSchTask *task, int32_t msgType) {
int32_t
code
=
0
;
switch
(
msgType
)
{
case
TDMT_VND_CREATE_TABLE
:
case
TDMT_VND_SUBMIT
:
{
if
(
NULL
==
task
->
msg
||
task
->
msgLen
<=
0
)
{
qError
(
"submit msg is NULL"
);
...
...
@@ -665,6 +722,7 @@ int32_t schBuildAndSendMsg(SSchJob *job, SSchTask *task, int32_t msgType) {
SSubQueryMsg
*
pMsg
=
msg
;
pMsg
->
header
.
vgId
=
htonl
(
task
->
plan
->
execNode
.
nodeId
);
pMsg
->
sId
=
htobe64
(
schMgmt
.
sId
);
pMsg
->
queryId
=
htobe64
(
job
->
queryId
);
pMsg
->
taskId
=
htobe64
(
task
->
taskId
);
...
...
@@ -681,6 +739,8 @@ int32_t schBuildAndSendMsg(SSchJob *job, SSchTask *task, int32_t msgType) {
}
SResReadyMsg
*
pMsg
=
msg
;
pMsg
->
header
.
vgId
=
htonl
(
task
->
plan
->
execNode
.
nodeId
);
pMsg
->
sId
=
htobe64
(
schMgmt
.
sId
);
pMsg
->
queryId
=
htobe64
(
job
->
queryId
);
pMsg
->
taskId
=
htobe64
(
task
->
taskId
);
...
...
@@ -698,6 +758,8 @@ int32_t schBuildAndSendMsg(SSchJob *job, SSchTask *task, int32_t msgType) {
}
SResFetchMsg
*
pMsg
=
msg
;
pMsg
->
header
.
vgId
=
htonl
(
task
->
plan
->
execNode
.
nodeId
);
pMsg
->
sId
=
htobe64
(
schMgmt
.
sId
);
pMsg
->
queryId
=
htobe64
(
job
->
queryId
);
pMsg
->
taskId
=
htobe64
(
task
->
taskId
);
...
...
@@ -712,6 +774,8 @@ int32_t schBuildAndSendMsg(SSchJob *job, SSchTask *task, int32_t msgType) {
}
STaskDropMsg
*
pMsg
=
msg
;
pMsg
->
header
.
vgId
=
htonl
(
task
->
plan
->
execNode
.
nodeId
);
pMsg
->
sId
=
htobe64
(
schMgmt
.
sId
);
pMsg
->
queryId
=
htobe64
(
job
->
queryId
);
pMsg
->
taskId
=
htobe64
(
task
->
taskId
);
...
...
@@ -723,7 +787,12 @@ int32_t schBuildAndSendMsg(SSchJob *job, SSchTask *task, int32_t msgType) {
break
;
}
SCH_ERR_JRET
(
schAsyncSendMsg
(
job
->
transport
,
&
task
->
plan
->
execEpSet
,
job
->
queryId
,
task
->
taskId
,
msgType
,
msg
,
msgSize
));
SEpSet
epSet
;
SQueryNodeAddr
*
addr
=
taosArrayGet
(
task
->
condidateAddrs
,
task
->
condidateIdx
);
schConvertAddrToEpSet
(
addr
,
&
epSet
);
SCH_ERR_JRET
(
schAsyncSendMsg
(
job
->
transport
,
&
epSet
,
job
->
queryId
,
task
->
taskId
,
msgType
,
msg
,
msgSize
));
return
TSDB_CODE_SUCCESS
;
...
...
@@ -737,28 +806,22 @@ _return:
int32_t
schLaunchTask
(
SSchJob
*
job
,
SSchTask
*
task
)
{
SSubplan
*
plan
=
task
->
plan
;
SCH_ERR_RET
(
qSubPlanToString
(
plan
,
&
task
->
msg
,
&
task
->
msgLen
));
if
(
plan
->
execEpSet
.
numOfEps
<=
0
)
{
SCH_ERR_RET
(
schSetTaskExecEpSet
(
job
,
&
plan
->
execEpSet
));
}
SCH_ERR_RET
(
schSetTaskCondidateAddrs
(
job
,
task
));
if
(
plan
->
execEpSet
.
numOfEps
<=
0
)
{
SCH_TASK_ERR_LOG
(
"
invalid execEpSet num:%d"
,
plan
->
execEpSet
.
numOfEps
);
if
(
NULL
==
task
->
condidateAddrs
||
taosArrayGetSize
(
task
->
condidateAddrs
)
<=
0
)
{
SCH_TASK_ERR_LOG
(
"
no valid condidate node for task:%"
PRIx64
,
task
->
taskId
);
SCH_ERR_RET
(
TSDB_CODE_SCH_INTERNAL_ERROR
);
}
int32_t
msgType
=
(
plan
->
type
==
QUERY_TYPE_MODIFY
)
?
TDMT_VND_SUBMIT
:
TDMT_VND_QUERY
;
SCH_ERR_RET
(
schBuildAndSendMsg
(
job
,
task
,
msgType
));
// int32_t msgType = (plan->type == QUERY_TYPE_MODIFY)? TDMT_VND_SUBMIT : TDMT_VND_QUERY;
SCH_ERR_RET
(
schBuildAndSendMsg
(
job
,
task
,
plan
->
msgType
));
SCH_ERR_RET
(
schPushTaskToExecList
(
job
,
task
));
task
->
status
=
JOB_TASK_STATUS_EXECUTING
;
return
TSDB_CODE_SUCCESS
;
}
int32_t
schLaunchJob
(
SSchJob
*
job
)
{
SSchLevel
*
level
=
taosArrayGet
(
job
->
levels
,
job
->
levelIdx
);
for
(
int32_t
i
=
0
;
i
<
level
->
taskNum
;
++
i
)
{
...
...
source/libs/scheduler/test/schedulerTests.cpp
浏览文件 @
10952778
...
...
@@ -54,11 +54,13 @@ void schtBuildQueryDag(SQueryDag *dag) {
scanPlan
.
id
.
templateId
=
0x0000000000000002
;
scanPlan
.
id
.
subplanId
=
0x0000000000000003
;
scanPlan
.
type
=
QUERY_TYPE_SCAN
;
scanPlan
.
execNode
.
numOfEps
=
1
;
scanPlan
.
execNode
.
nodeId
=
1
;
scanPlan
.
execNode
.
inUse
=
0
;
scanPlan
.
execNode
.
epAddr
[
0
].
port
=
6030
;
strcpy
(
scanPlan
.
execNode
.
epAddr
[
0
].
fqdn
,
"ep0"
);
scanPlan
.
pChildren
=
NULL
;
scanPlan
.
level
=
1
;
scanPlan
.
execEpSet
.
numOfEps
=
1
;
scanPlan
.
execEpSet
.
port
[
0
]
=
6030
;
strcpy
(
scanPlan
.
execEpSet
.
fqdn
[
0
],
"ep0"
);
scanPlan
.
pChildern
=
NULL
;
scanPlan
.
pParents
=
taosArrayInit
(
1
,
POINTER_BYTES
);
scanPlan
.
pNode
=
(
SPhyNode
*
)
calloc
(
1
,
sizeof
(
SPhyNode
));
...
...
@@ -67,15 +69,15 @@ void schtBuildQueryDag(SQueryDag *dag) {
mergePlan
.
id
.
subplanId
=
0x5555555555
;
mergePlan
.
type
=
QUERY_TYPE_MERGE
;
mergePlan
.
level
=
0
;
mergePlan
.
exec
EpSet
.
numOfEps
=
0
;
mergePlan
.
pChild
er
n
=
taosArrayInit
(
1
,
POINTER_BYTES
);
mergePlan
.
exec
Node
.
numOfEps
=
0
;
mergePlan
.
pChild
re
n
=
taosArrayInit
(
1
,
POINTER_BYTES
);
mergePlan
.
pParents
=
NULL
;
mergePlan
.
pNode
=
(
SPhyNode
*
)
calloc
(
1
,
sizeof
(
SPhyNode
));
SSubplan
*
mergePointer
=
(
SSubplan
*
)
taosArrayPush
(
merge
,
&
mergePlan
);
SSubplan
*
scanPointer
=
(
SSubplan
*
)
taosArrayPush
(
scan
,
&
scanPlan
);
taosArrayPush
(
mergePointer
->
pChild
er
n
,
&
scanPointer
);
taosArrayPush
(
mergePointer
->
pChild
re
n
,
&
scanPointer
);
taosArrayPush
(
scanPointer
->
pParents
,
&
mergePointer
);
taosArrayPush
(
dag
->
pSubplans
,
&
merge
);
...
...
@@ -97,10 +99,12 @@ void schtBuildInsertDag(SQueryDag *dag) {
insertPlan
[
0
].
id
.
subplanId
=
0x0000000000000004
;
insertPlan
[
0
].
type
=
QUERY_TYPE_MODIFY
;
insertPlan
[
0
].
level
=
0
;
insertPlan
[
0
].
execEpSet
.
numOfEps
=
1
;
insertPlan
[
0
].
execEpSet
.
port
[
0
]
=
6030
;
strcpy
(
insertPlan
[
0
].
execEpSet
.
fqdn
[
0
],
"ep0"
);
insertPlan
[
0
].
pChildern
=
NULL
;
insertPlan
[
0
].
execNode
.
numOfEps
=
1
;
insertPlan
[
0
].
execNode
.
nodeId
=
1
;
insertPlan
[
0
].
execNode
.
inUse
=
0
;
insertPlan
[
0
].
execNode
.
epAddr
[
0
].
port
=
6030
;
strcpy
(
insertPlan
[
0
].
execNode
.
epAddr
[
0
].
fqdn
,
"ep0"
);
insertPlan
[
0
].
pChildren
=
NULL
;
insertPlan
[
0
].
pParents
=
NULL
;
insertPlan
[
0
].
pNode
=
NULL
;
insertPlan
[
0
].
pDataSink
=
(
SDataSink
*
)
calloc
(
1
,
sizeof
(
SDataSink
));
...
...
@@ -110,10 +114,12 @@ void schtBuildInsertDag(SQueryDag *dag) {
insertPlan
[
1
].
id
.
subplanId
=
0x0000000000000005
;
insertPlan
[
1
].
type
=
QUERY_TYPE_MODIFY
;
insertPlan
[
1
].
level
=
0
;
insertPlan
[
1
].
execEpSet
.
numOfEps
=
1
;
insertPlan
[
1
].
execEpSet
.
port
[
0
]
=
6030
;
strcpy
(
insertPlan
[
1
].
execEpSet
.
fqdn
[
0
],
"ep1"
);
insertPlan
[
1
].
pChildern
=
NULL
;
insertPlan
[
1
].
execNode
.
numOfEps
=
1
;
insertPlan
[
1
].
execNode
.
nodeId
=
1
;
insertPlan
[
1
].
execNode
.
inUse
=
1
;
insertPlan
[
1
].
execNode
.
epAddr
[
0
].
port
=
6030
;
strcpy
(
insertPlan
[
1
].
execNode
.
epAddr
[
0
].
fqdn
,
"ep1"
);
insertPlan
[
1
].
pChildren
=
NULL
;
insertPlan
[
1
].
pParents
=
NULL
;
insertPlan
[
1
].
pNode
=
NULL
;
insertPlan
[
1
].
pDataSink
=
(
SDataSink
*
)
calloc
(
1
,
sizeof
(
SDataSink
));
...
...
@@ -132,7 +138,7 @@ int32_t schtPlanToString(const SSubplan *subplan, char** str, int32_t* len) {
return
0
;
}
int32_t
schtExecNode
(
SSubplan
*
subplan
,
uint64_t
templateId
,
S
Ep
Addr
*
ep
)
{
int32_t
schtExecNode
(
SSubplan
*
subplan
,
uint64_t
templateId
,
S
QueryNode
Addr
*
ep
)
{
return
0
;
}
...
...
source/util/CMakeLists.txt
浏览文件 @
10952778
...
...
@@ -14,4 +14,7 @@ target_link_libraries(
PUBLIC api
)
ADD_SUBDIRECTORY
(
test
)
if
(
${
BUILD_TEST
}
)
ADD_SUBDIRECTORY
(
test
)
endif
(
${
BUILD_TEST
}
)
source/util/src/encode.c
0 → 100644
浏览文件 @
10952778
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "encode.h"
#if __STDC_VERSION__ >= 201112L
static_assert
(
sizeof
(
float
)
==
sizeof
(
uint32_t
),
"sizeof(float) must equal to sizeof(uint32_t)"
);
static_assert
(
sizeof
(
double
)
==
sizeof
(
uint64_t
),
"sizeof(double) must equal to sizeof(uint64_t)"
);
#endif
void
tCoderInit
(
SCoder
*
pCoder
,
td_endian_t
endian
,
uint8_t
*
data
,
int32_t
size
,
td_coder_t
type
)
{
if
(
type
==
TD_ENCODER
)
{
if
(
data
==
NULL
)
size
=
0
;
}
else
{
ASSERT
(
data
&&
size
>
0
);
}
pCoder
->
type
=
type
;
pCoder
->
endian
=
endian
;
pCoder
->
data
=
data
;
pCoder
->
size
=
size
;
pCoder
->
pos
=
0
;
tFreeListInit
(
&
(
pCoder
->
fl
));
TD_SLIST_INIT
(
&
(
pCoder
->
stack
));
}
void
tCoderClear
(
SCoder
*
pCoder
)
{
tFreeListClear
(
&
(
pCoder
->
fl
));
struct
SCoderNode
*
pNode
;
for
(;;)
{
pNode
=
TD_SLIST_HEAD
(
&
(
pCoder
->
stack
));
if
(
pNode
==
NULL
)
break
;
TD_SLIST_POP
(
&
(
pCoder
->
stack
));
free
(
pNode
);
}
}
int
tStartEncode
(
SCoder
*
pCoder
)
{
struct
SCoderNode
*
pNode
;
ASSERT
(
pCoder
->
type
==
TD_ENCODER
);
if
(
pCoder
->
data
)
{
if
(
pCoder
->
size
-
pCoder
->
pos
<
sizeof
(
int32_t
))
return
-
1
;
pNode
=
malloc
(
sizeof
(
*
pNode
));
if
(
pNode
==
NULL
)
return
-
1
;
pNode
->
data
=
pCoder
->
data
;
pNode
->
pos
=
pCoder
->
pos
;
pNode
->
size
=
pCoder
->
size
;
pCoder
->
data
=
pNode
->
data
+
pNode
->
pos
+
sizeof
(
int32_t
);
pCoder
->
pos
=
0
;
pCoder
->
size
=
pNode
->
size
-
pNode
->
pos
-
sizeof
(
int32_t
);
TD_SLIST_PUSH
(
&
(
pCoder
->
stack
),
pNode
);
}
else
{
pCoder
->
pos
+=
sizeof
(
int32_t
);
}
return
0
;
}
void
tEndEncode
(
SCoder
*
pCoder
)
{
struct
SCoderNode
*
pNode
;
int32_t
len
;
ASSERT
(
pCoder
->
type
==
TD_ENCODER
);
if
(
pCoder
->
data
)
{
pNode
=
TD_SLIST_HEAD
(
&
(
pCoder
->
stack
));
ASSERT
(
pNode
);
TD_SLIST_POP
(
&
(
pCoder
->
stack
));
len
=
pCoder
->
pos
;
pCoder
->
data
=
pNode
->
data
;
pCoder
->
size
=
pNode
->
size
;
pCoder
->
pos
=
pNode
->
pos
;
if
(
TD_RT_ENDIAN
()
==
pCoder
->
endian
)
{
tPut
(
int32_t
,
pCoder
->
data
+
pCoder
->
pos
,
len
);
}
else
{
tRPut32
(
pCoder
->
data
+
pCoder
->
pos
,
len
);
}
TD_CODER_MOVE_POS
(
pCoder
,
len
+
sizeof
(
int32_t
));
free
(
pNode
);
}
}
int
tStartDecode
(
SCoder
*
pCoder
)
{
int32_t
len
;
struct
SCoderNode
*
pNode
;
ASSERT
(
pCoder
->
type
==
TD_DECODER
);
if
(
tDecodeI32
(
pCoder
,
&
len
)
<
0
)
return
-
1
;
pNode
=
malloc
(
sizeof
(
*
pNode
));
if
(
pNode
==
NULL
)
return
-
1
;
pNode
->
data
=
pCoder
->
data
;
pNode
->
pos
=
pCoder
->
pos
;
pNode
->
size
=
pCoder
->
size
;
pCoder
->
data
=
pNode
->
data
+
pNode
->
pos
;
pCoder
->
size
=
len
;
pCoder
->
pos
=
0
;
TD_SLIST_PUSH
(
&
(
pCoder
->
stack
),
pNode
);
return
0
;
}
void
tEndDecode
(
SCoder
*
pCoder
)
{
struct
SCoderNode
*
pNode
;
ASSERT
(
pCoder
->
type
==
TD_DECODER
);
ASSERT
(
tDecodeIsEnd
(
pCoder
));
pNode
=
TD_SLIST_HEAD
(
&
(
pCoder
->
stack
));
ASSERT
(
pNode
);
TD_SLIST_POP
(
&
(
pCoder
->
stack
));
pCoder
->
data
=
pNode
->
data
;
pCoder
->
size
=
pNode
->
size
;
pCoder
->
pos
=
pCoder
->
pos
+
pNode
->
pos
;
free
(
pNode
);
}
source/util/test/CMakeLists.txt
浏览文件 @
10952778
...
...
@@ -41,4 +41,8 @@ target_sources(freelistTest
)
target_link_libraries
(
freelistTest os util gtest gtest_main
)
# encodeTest
add_executable
(
encodeTest
"encodeTest.cpp"
)
target_link_libraries
(
encodeTest os util gtest gtest_main
)
source/util/test/encodeTest.cpp
0 → 100644
浏览文件 @
10952778
#include <iostream>
#include "gtest/gtest.h"
#include "encode.h"
#define BUF_SIZE 64
td_endian_t
endian_arr
[
2
]
=
{
TD_LITTLE_ENDIAN
,
TD_BIG_ENDIAN
};
static
int
encode
(
SCoder
*
pCoder
,
int8_t
val
)
{
return
tEncodeI8
(
pCoder
,
val
);
}
static
int
encode
(
SCoder
*
pCoder
,
uint8_t
val
)
{
return
tEncodeU8
(
pCoder
,
val
);
}
static
int
encode
(
SCoder
*
pCoder
,
int16_t
val
)
{
return
tEncodeI16
(
pCoder
,
val
);
}
static
int
encode
(
SCoder
*
pCoder
,
uint16_t
val
)
{
return
tEncodeU16
(
pCoder
,
val
);
}
static
int
encode
(
SCoder
*
pCoder
,
int32_t
val
)
{
return
tEncodeI32
(
pCoder
,
val
);
}
static
int
encode
(
SCoder
*
pCoder
,
uint32_t
val
)
{
return
tEncodeU32
(
pCoder
,
val
);
}
static
int
encode
(
SCoder
*
pCoder
,
int64_t
val
)
{
return
tEncodeI64
(
pCoder
,
val
);
}
static
int
encode
(
SCoder
*
pCoder
,
uint64_t
val
)
{
return
tEncodeU64
(
pCoder
,
val
);
}
static
int
decode
(
SCoder
*
pCoder
,
int8_t
*
val
)
{
return
tDecodeI8
(
pCoder
,
val
);
}
static
int
decode
(
SCoder
*
pCoder
,
uint8_t
*
val
)
{
return
tDecodeU8
(
pCoder
,
val
);
}
static
int
decode
(
SCoder
*
pCoder
,
int16_t
*
val
)
{
return
tDecodeI16
(
pCoder
,
val
);
}
static
int
decode
(
SCoder
*
pCoder
,
uint16_t
*
val
)
{
return
tDecodeU16
(
pCoder
,
val
);
}
static
int
decode
(
SCoder
*
pCoder
,
int32_t
*
val
)
{
return
tDecodeI32
(
pCoder
,
val
);
}
static
int
decode
(
SCoder
*
pCoder
,
uint32_t
*
val
)
{
return
tDecodeU32
(
pCoder
,
val
);
}
static
int
decode
(
SCoder
*
pCoder
,
int64_t
*
val
)
{
return
tDecodeI64
(
pCoder
,
val
);
}
static
int
decode
(
SCoder
*
pCoder
,
uint64_t
*
val
)
{
return
tDecodeU64
(
pCoder
,
val
);
}
static
int
encodev
(
SCoder
*
pCoder
,
int8_t
val
)
{
return
tEncodeI8
(
pCoder
,
val
);
}
static
int
encodev
(
SCoder
*
pCoder
,
uint8_t
val
)
{
return
tEncodeU8
(
pCoder
,
val
);
}
static
int
encodev
(
SCoder
*
pCoder
,
int16_t
val
)
{
return
tEncodeI16v
(
pCoder
,
val
);
}
static
int
encodev
(
SCoder
*
pCoder
,
uint16_t
val
)
{
return
tEncodeU16v
(
pCoder
,
val
);
}
static
int
encodev
(
SCoder
*
pCoder
,
int32_t
val
)
{
return
tEncodeI32v
(
pCoder
,
val
);
}
static
int
encodev
(
SCoder
*
pCoder
,
uint32_t
val
)
{
return
tEncodeU32v
(
pCoder
,
val
);
}
static
int
encodev
(
SCoder
*
pCoder
,
int64_t
val
)
{
return
tEncodeI64v
(
pCoder
,
val
);
}
static
int
encodev
(
SCoder
*
pCoder
,
uint64_t
val
)
{
return
tEncodeU64v
(
pCoder
,
val
);
}
static
int
decodev
(
SCoder
*
pCoder
,
int8_t
*
val
)
{
return
tDecodeI8
(
pCoder
,
val
);
}
static
int
decodev
(
SCoder
*
pCoder
,
uint8_t
*
val
)
{
return
tDecodeU8
(
pCoder
,
val
);
}
static
int
decodev
(
SCoder
*
pCoder
,
int16_t
*
val
)
{
return
tDecodeI16v
(
pCoder
,
val
);
}
static
int
decodev
(
SCoder
*
pCoder
,
uint16_t
*
val
)
{
return
tDecodeU16v
(
pCoder
,
val
);
}
static
int
decodev
(
SCoder
*
pCoder
,
int32_t
*
val
)
{
return
tDecodeI32v
(
pCoder
,
val
);
}
static
int
decodev
(
SCoder
*
pCoder
,
uint32_t
*
val
)
{
return
tDecodeU32v
(
pCoder
,
val
);
}
static
int
decodev
(
SCoder
*
pCoder
,
int64_t
*
val
)
{
return
tDecodeI64v
(
pCoder
,
val
);
}
static
int
decodev
(
SCoder
*
pCoder
,
uint64_t
*
val
)
{
return
tDecodeU64v
(
pCoder
,
val
);
}
template
<
typename
T
>
static
void
simple_encode_decode_func
(
bool
var_len
)
{
uint8_t
buf
[
BUF_SIZE
];
SCoder
coder
;
T
min_val
,
max_val
;
T
step
=
1
;
if
(
typeid
(
T
)
==
typeid
(
int8_t
))
{
min_val
=
INT8_MIN
;
max_val
=
INT8_MAX
;
step
=
1
;
}
else
if
(
typeid
(
T
)
==
typeid
(
uint8_t
))
{
min_val
=
0
;
max_val
=
UINT8_MAX
;
step
=
1
;
}
else
if
(
typeid
(
T
)
==
typeid
(
int16_t
))
{
min_val
=
INT16_MIN
;
max_val
=
INT16_MAX
;
step
=
1
;
}
else
if
(
typeid
(
T
)
==
typeid
(
uint16_t
))
{
min_val
=
0
;
max_val
=
UINT16_MAX
;
step
=
1
;
}
else
if
(
typeid
(
T
)
==
typeid
(
int32_t
))
{
min_val
=
INT32_MIN
;
max_val
=
INT32_MAX
;
step
=
((
T
)
1
)
<<
16
;
}
else
if
(
typeid
(
T
)
==
typeid
(
uint32_t
))
{
min_val
=
0
;
max_val
=
UINT32_MAX
;
step
=
((
T
)
1
)
<<
16
;
}
else
if
(
typeid
(
T
)
==
typeid
(
int64_t
))
{
min_val
=
INT64_MIN
;
max_val
=
INT64_MAX
;
step
=
((
T
)
1
)
<<
48
;
}
else
if
(
typeid
(
T
)
==
typeid
(
uint64_t
))
{
min_val
=
0
;
max_val
=
UINT64_MAX
;
step
=
((
T
)
1
)
<<
48
;
}
T
i
=
min_val
;
for
(;;
/*T i = min_val; i <= max_val; i += step*/
)
{
T
dval
;
// Encode NULL
for
(
td_endian_t
endian
:
endian_arr
)
{
tCoderInit
(
&
coder
,
endian
,
NULL
,
0
,
TD_ENCODER
);
if
(
var_len
)
{
GTEST_ASSERT_EQ
(
encodev
(
&
coder
,
i
),
0
);
}
else
{
GTEST_ASSERT_EQ
(
encode
(
&
coder
,
i
),
0
);
GTEST_ASSERT_EQ
(
coder
.
pos
,
sizeof
(
T
));
}
tCoderClear
(
&
coder
);
}
// Encode and decode
for
(
td_endian_t
e_endian
:
endian_arr
)
{
for
(
td_endian_t
d_endian
:
endian_arr
)
{
// Encode
tCoderInit
(
&
coder
,
e_endian
,
buf
,
BUF_SIZE
,
TD_ENCODER
);
if
(
var_len
)
{
GTEST_ASSERT_EQ
(
encodev
(
&
coder
,
i
),
0
);
}
else
{
GTEST_ASSERT_EQ
(
encode
(
&
coder
,
i
),
0
);
GTEST_ASSERT_EQ
(
coder
.
pos
,
sizeof
(
T
));
}
int32_t
epos
=
coder
.
pos
;
tCoderClear
(
&
coder
);
// Decode
tCoderInit
(
&
coder
,
d_endian
,
buf
,
BUF_SIZE
,
TD_DECODER
);
if
(
var_len
)
{
GTEST_ASSERT_EQ
(
decodev
(
&
coder
,
&
dval
),
0
);
}
else
{
GTEST_ASSERT_EQ
(
decode
(
&
coder
,
&
dval
),
0
);
GTEST_ASSERT_EQ
(
coder
.
pos
,
sizeof
(
T
));
}
GTEST_ASSERT_EQ
(
coder
.
pos
,
epos
);
if
(
typeid
(
T
)
==
typeid
(
int8_t
)
||
typeid
(
T
)
==
typeid
(
uint8_t
)
||
e_endian
==
d_endian
)
{
GTEST_ASSERT_EQ
(
i
,
dval
);
}
tCoderClear
(
&
coder
);
}
}
if
(
i
==
max_val
)
break
;
if
(
max_val
-
i
<
step
)
{
i
=
max_val
;
}
else
{
i
=
i
+
step
;
}
}
}
TEST
(
td_encode_test
,
encode_decode_fixed_len_integer
)
{
simple_encode_decode_func
<
int8_t
>
(
false
);
simple_encode_decode_func
<
uint8_t
>
(
false
);
simple_encode_decode_func
<
int16_t
>
(
false
);
simple_encode_decode_func
<
uint16_t
>
(
false
);
simple_encode_decode_func
<
int32_t
>
(
false
);
simple_encode_decode_func
<
uint32_t
>
(
false
);
simple_encode_decode_func
<
int64_t
>
(
false
);
simple_encode_decode_func
<
uint64_t
>
(
false
);
}
TEST
(
td_encode_test
,
encode_decode_variant_len_integer
)
{
simple_encode_decode_func
<
int16_t
>
(
true
);
simple_encode_decode_func
<
uint16_t
>
(
true
);
simple_encode_decode_func
<
int32_t
>
(
true
);
simple_encode_decode_func
<
uint32_t
>
(
true
);
simple_encode_decode_func
<
int64_t
>
(
true
);
simple_encode_decode_func
<
uint64_t
>
(
true
);
}
TEST
(
td_encode_test
,
encode_decode_cstr
)
{
uint8_t
*
buf
=
new
uint8_t
[
1024
*
1024
];
char
*
cstr
=
new
char
[
1024
*
1024
];
const
char
*
dcstr
;
SCoder
encoder
;
SCoder
decoder
;
for
(
size_t
i
=
0
;
i
<
1024
*
2
-
1
;
i
++
)
{
memset
(
cstr
,
'a'
,
i
);
cstr
[
i
]
=
'\0'
;
for
(
td_endian_t
endian
:
endian_arr
)
{
// Encode
tCoderInit
(
&
encoder
,
endian
,
buf
,
1024
*
1024
,
TD_ENCODER
);
GTEST_ASSERT_EQ
(
tEncodeCStr
(
&
encoder
,
cstr
),
0
);
tCoderClear
(
&
encoder
);
// Decode
tCoderInit
(
&
decoder
,
endian
,
buf
,
1024
*
1024
,
TD_DECODER
);
GTEST_ASSERT_EQ
(
tDecodeCStr
(
&
decoder
,
&
dcstr
),
0
);
GTEST_ASSERT_EQ
(
memcmp
(
dcstr
,
cstr
,
i
+
1
),
0
);
tCoderClear
(
&
decoder
);
}
}
delete
buf
;
delete
cstr
;
}
typedef
struct
{
int32_t
A_a
;
int64_t
A_b
;
char
*
A_c
;
}
SStructA_v1
;
static
int
tSStructA_v1_encode
(
SCoder
*
pCoder
,
const
SStructA_v1
*
pSAV1
)
{
if
(
tStartEncode
(
pCoder
)
<
0
)
return
-
1
;
if
(
tEncodeI32
(
pCoder
,
pSAV1
->
A_a
)
<
0
)
return
-
1
;
if
(
tEncodeI64
(
pCoder
,
pSAV1
->
A_b
)
<
0
)
return
-
1
;
if
(
tEncodeCStr
(
pCoder
,
pSAV1
->
A_c
)
<
0
)
return
-
1
;
tEndEncode
(
pCoder
);
return
0
;
}
static
int
tSStructA_v1_decode
(
SCoder
*
pCoder
,
SStructA_v1
*
pSAV1
)
{
if
(
tStartDecode
(
pCoder
)
<
0
)
return
-
1
;
if
(
tDecodeI32
(
pCoder
,
&
pSAV1
->
A_a
)
<
0
)
return
-
1
;
if
(
tDecodeI64
(
pCoder
,
&
pSAV1
->
A_b
)
<
0
)
return
-
1
;
const
char
*
tstr
;
uint64_t
len
;
if
(
tDecodeCStrAndLen
(
pCoder
,
&
tstr
,
&
len
)
<
0
)
return
-
1
;
pSAV1
->
A_c
=
(
char
*
)
TCODER_MALLOC
(
len
+
1
,
pCoder
);
memcpy
(
pSAV1
->
A_c
,
tstr
,
len
+
1
);
tEndDecode
(
pCoder
);
return
0
;
}
typedef
struct
{
int32_t
A_a
;
int64_t
A_b
;
char
*
A_c
;
// -------------------BELOW FEILDS ARE ADDED IN A NEW VERSION--------------
int16_t
A_d
;
int16_t
A_e
;
}
SStructA_v2
;
static
int
tSStructA_v2_encode
(
SCoder
*
pCoder
,
const
SStructA_v2
*
pSAV2
)
{
if
(
tStartEncode
(
pCoder
)
<
0
)
return
-
1
;
if
(
tEncodeI32
(
pCoder
,
pSAV2
->
A_a
)
<
0
)
return
-
1
;
if
(
tEncodeI64
(
pCoder
,
pSAV2
->
A_b
)
<
0
)
return
-
1
;
if
(
tEncodeCStr
(
pCoder
,
pSAV2
->
A_c
)
<
0
)
return
-
1
;
// ------------------------NEW FIELDS ENCODE-------------------------------
if
(
tEncodeI16
(
pCoder
,
pSAV2
->
A_d
)
<
0
)
return
-
1
;
if
(
tEncodeI16
(
pCoder
,
pSAV2
->
A_e
)
<
0
)
return
-
1
;
tEndEncode
(
pCoder
);
return
0
;
}
static
int
tSStructA_v2_decode
(
SCoder
*
pCoder
,
SStructA_v2
*
pSAV2
)
{
if
(
tStartDecode
(
pCoder
)
<
0
)
return
-
1
;
if
(
tDecodeI32
(
pCoder
,
&
pSAV2
->
A_a
)
<
0
)
return
-
1
;
if
(
tDecodeI64
(
pCoder
,
&
pSAV2
->
A_b
)
<
0
)
return
-
1
;
const
char
*
tstr
;
uint64_t
len
;
if
(
tDecodeCStrAndLen
(
pCoder
,
&
tstr
,
&
len
)
<
0
)
return
-
1
;
pSAV2
->
A_c
=
(
char
*
)
TCODER_MALLOC
(
len
+
1
,
pCoder
);
memcpy
(
pSAV2
->
A_c
,
tstr
,
len
+
1
);
// ------------------------NEW FIELDS DECODE-------------------------------
if
(
!
tDecodeIsEnd
(
pCoder
))
{
if
(
tDecodeI16
(
pCoder
,
&
pSAV2
->
A_d
)
<
0
)
return
-
1
;
if
(
tDecodeI16
(
pCoder
,
&
pSAV2
->
A_e
)
<
0
)
return
-
1
;
}
else
{
pSAV2
->
A_d
=
0
;
pSAV2
->
A_e
=
0
;
}
tEndDecode
(
pCoder
);
return
0
;
}
typedef
struct
{
SStructA_v1
*
pA
;
int32_t
v_a
;
int8_t
v_b
;
}
SFinalReq_v1
;
static
int
tSFinalReq_v1_encode
(
SCoder
*
pCoder
,
const
SFinalReq_v1
*
ps1
)
{
if
(
tStartEncode
(
pCoder
)
<
0
)
return
-
1
;
if
(
tSStructA_v1_encode
(
pCoder
,
ps1
->
pA
)
<
0
)
return
-
1
;
if
(
tEncodeI32
(
pCoder
,
ps1
->
v_a
)
<
0
)
return
-
1
;
if
(
tEncodeI8
(
pCoder
,
ps1
->
v_b
)
<
0
)
return
-
1
;
tEndEncode
(
pCoder
);
return
0
;
}
static
int
tSFinalReq_v1_decode
(
SCoder
*
pCoder
,
SFinalReq_v1
*
ps1
)
{
if
(
tStartDecode
(
pCoder
)
<
0
)
return
-
1
;
ps1
->
pA
=
(
SStructA_v1
*
)
TCODER_MALLOC
(
sizeof
(
*
(
ps1
->
pA
)),
pCoder
);
if
(
tSStructA_v1_decode
(
pCoder
,
ps1
->
pA
)
<
0
)
return
-
1
;
if
(
tDecodeI32
(
pCoder
,
&
ps1
->
v_a
)
<
0
)
return
-
1
;
if
(
tDecodeI8
(
pCoder
,
&
ps1
->
v_b
)
<
0
)
return
-
1
;
tEndDecode
(
pCoder
);
return
0
;
}
typedef
struct
{
SStructA_v2
*
pA
;
int32_t
v_a
;
int8_t
v_b
;
// ----------------------- Feilds added -----------------------
int16_t
v_c
;
}
SFinalReq_v2
;
static
int
tSFinalReq_v2_encode
(
SCoder
*
pCoder
,
const
SFinalReq_v2
*
ps2
)
{
if
(
tStartEncode
(
pCoder
)
<
0
)
return
-
1
;
if
(
tSStructA_v2_encode
(
pCoder
,
ps2
->
pA
)
<
0
)
return
-
1
;
if
(
tEncodeI32
(
pCoder
,
ps2
->
v_a
)
<
0
)
return
-
1
;
if
(
tEncodeI8
(
pCoder
,
ps2
->
v_b
)
<
0
)
return
-
1
;
// ----------------------- Feilds added encode -----------------------
if
(
tEncodeI16
(
pCoder
,
ps2
->
v_c
)
<
0
)
return
-
1
;
tEndEncode
(
pCoder
);
return
0
;
}
static
int
tSFinalReq_v2_decode
(
SCoder
*
pCoder
,
SFinalReq_v2
*
ps2
)
{
if
(
tStartDecode
(
pCoder
)
<
0
)
return
-
1
;
ps2
->
pA
=
(
SStructA_v2
*
)
TCODER_MALLOC
(
sizeof
(
*
(
ps2
->
pA
)),
pCoder
);
if
(
tSStructA_v2_decode
(
pCoder
,
ps2
->
pA
)
<
0
)
return
-
1
;
if
(
tDecodeI32
(
pCoder
,
&
ps2
->
v_a
)
<
0
)
return
-
1
;
if
(
tDecodeI8
(
pCoder
,
&
ps2
->
v_b
)
<
0
)
return
-
1
;
// ----------------------- Feilds added decode -----------------------
if
(
tDecodeIsEnd
(
pCoder
))
{
ps2
->
v_c
=
0
;
}
else
{
if
(
tDecodeI16
(
pCoder
,
&
ps2
->
v_c
)
<
0
)
return
-
1
;
}
tEndDecode
(
pCoder
);
return
0
;
}
TEST
(
td_encode_test
,
compound_struct_encode_test
)
{
SCoder
encoder
,
decoder
;
uint8_t
*
buf1
;
int32_t
buf1size
;
uint8_t
*
buf2
;
int32_t
buf2size
;
SStructA_v1
sa1
=
{.
A_a
=
10
,
.
A_b
=
65478
,
.
A_c
=
"Hello"
};
SStructA_v2
sa2
=
{.
A_a
=
10
,
.
A_b
=
65478
,
.
A_c
=
"Hello"
,
.
A_d
=
67
,
.
A_e
=
13
};
SFinalReq_v1
req1
=
{.
pA
=
&
sa1
,
.
v_a
=
15
,
.
v_b
=
35
};
SFinalReq_v2
req2
=
{.
pA
=
&
sa2
,
.
v_a
=
15
,
.
v_b
=
32
,
.
v_c
=
37
};
SFinalReq_v1
dreq1
;
SFinalReq_v2
dreq21
,
dreq22
;
// Get size
tCoderInit
(
&
encoder
,
TD_LITTLE_ENDIAN
,
nullptr
,
0
,
TD_ENCODER
);
GTEST_ASSERT_EQ
(
tSFinalReq_v1_encode
(
&
encoder
,
&
req1
),
0
);
buf1size
=
encoder
.
pos
;
buf1
=
new
uint8_t
[
encoder
.
pos
];
tCoderClear
(
&
encoder
);
tCoderInit
(
&
encoder
,
TD_LITTLE_ENDIAN
,
nullptr
,
0
,
TD_ENCODER
);
GTEST_ASSERT_EQ
(
tSFinalReq_v2_encode
(
&
encoder
,
&
req2
),
0
);
buf2size
=
encoder
.
pos
;
buf2
=
new
uint8_t
[
encoder
.
pos
];
tCoderClear
(
&
encoder
);
// Encode
tCoderInit
(
&
encoder
,
TD_LITTLE_ENDIAN
,
buf1
,
buf1size
,
TD_ENCODER
);
GTEST_ASSERT_EQ
(
tSFinalReq_v1_encode
(
&
encoder
,
&
req1
),
0
);
tCoderClear
(
&
encoder
);
tCoderInit
(
&
encoder
,
TD_LITTLE_ENDIAN
,
buf2
,
buf2size
,
TD_ENCODER
);
GTEST_ASSERT_EQ
(
tSFinalReq_v2_encode
(
&
encoder
,
&
req2
),
0
);
tCoderClear
(
&
encoder
);
// Decode
tCoderInit
(
&
decoder
,
TD_LITTLE_ENDIAN
,
buf1
,
buf1size
,
TD_DECODER
);
GTEST_ASSERT_EQ
(
tSFinalReq_v1_decode
(
&
decoder
,
&
dreq1
),
0
);
GTEST_ASSERT_EQ
(
dreq1
.
pA
->
A_a
,
req1
.
pA
->
A_a
);
GTEST_ASSERT_EQ
(
dreq1
.
pA
->
A_b
,
req1
.
pA
->
A_b
);
GTEST_ASSERT_EQ
(
strcmp
(
dreq1
.
pA
->
A_c
,
req1
.
pA
->
A_c
),
0
);
GTEST_ASSERT_EQ
(
dreq1
.
v_a
,
req1
.
v_a
);
GTEST_ASSERT_EQ
(
dreq1
.
v_b
,
req1
.
v_b
);
tCoderClear
(
&
decoder
);
tCoderInit
(
&
decoder
,
TD_LITTLE_ENDIAN
,
buf1
,
buf1size
,
TD_DECODER
);
GTEST_ASSERT_EQ
(
tSFinalReq_v2_decode
(
&
decoder
,
&
dreq21
),
0
);
GTEST_ASSERT_EQ
(
dreq21
.
pA
->
A_a
,
req1
.
pA
->
A_a
);
GTEST_ASSERT_EQ
(
dreq21
.
pA
->
A_b
,
req1
.
pA
->
A_b
);
GTEST_ASSERT_EQ
(
strcmp
(
dreq21
.
pA
->
A_c
,
req1
.
pA
->
A_c
),
0
);
GTEST_ASSERT_EQ
(
dreq21
.
pA
->
A_d
,
0
);
GTEST_ASSERT_EQ
(
dreq21
.
pA
->
A_e
,
0
);
GTEST_ASSERT_EQ
(
dreq21
.
v_a
,
req1
.
v_a
);
GTEST_ASSERT_EQ
(
dreq21
.
v_b
,
req1
.
v_b
);
GTEST_ASSERT_EQ
(
dreq21
.
v_c
,
0
);
tCoderClear
(
&
decoder
);
tCoderInit
(
&
decoder
,
TD_LITTLE_ENDIAN
,
buf2
,
buf2size
,
TD_DECODER
);
GTEST_ASSERT_EQ
(
tSFinalReq_v2_decode
(
&
decoder
,
&
dreq22
),
0
);
GTEST_ASSERT_EQ
(
dreq22
.
pA
->
A_a
,
req2
.
pA
->
A_a
);
GTEST_ASSERT_EQ
(
dreq22
.
pA
->
A_b
,
req2
.
pA
->
A_b
);
GTEST_ASSERT_EQ
(
strcmp
(
dreq22
.
pA
->
A_c
,
req2
.
pA
->
A_c
),
0
);
GTEST_ASSERT_EQ
(
dreq22
.
pA
->
A_d
,
req2
.
pA
->
A_d
);
GTEST_ASSERT_EQ
(
dreq22
.
pA
->
A_e
,
req2
.
pA
->
A_e
);
GTEST_ASSERT_EQ
(
dreq22
.
v_a
,
req2
.
v_a
);
GTEST_ASSERT_EQ
(
dreq22
.
v_b
,
req2
.
v_b
);
GTEST_ASSERT_EQ
(
dreq22
.
v_c
,
req2
.
v_c
);
tCoderClear
(
&
decoder
);
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录