Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
e7614def
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
e7614def
编写于
1月 24, 2021
作者:
S
Shengliang Guan
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/develop' into feature/win
上级
a368b7b4
0620cf5e
变更
43
隐藏空白更改
内联
并排
Showing
43 changed file
with
2465 addition
and
1814 deletion
+2465
-1814
src/client/inc/tscUtil.h
src/client/inc/tscUtil.h
+2
-2
src/client/inc/tsclient.h
src/client/inc/tsclient.h
+6
-4
src/client/src/tscAsync.c
src/client/src/tscAsync.c
+1
-1
src/client/src/tscLocalMerge.c
src/client/src/tscLocalMerge.c
+3
-3
src/client/src/tscParseInsert.c
src/client/src/tscParseInsert.c
+5
-8
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+69
-23
src/client/src/tscServer.c
src/client/src/tscServer.c
+2
-0
src/client/src/tscSql.c
src/client/src/tscSql.c
+3
-2
src/client/src/tscStream.c
src/client/src/tscStream.c
+8
-7
src/client/src/tscSubquery.c
src/client/src/tscSubquery.c
+37
-15
src/client/src/tscUtil.c
src/client/src/tscUtil.c
+20
-11
src/common/inc/tarithoperator.h
src/common/inc/tarithoperator.h
+0
-0
src/common/inc/texpr.h
src/common/inc/texpr.h
+23
-15
src/common/inc/tname.h
src/common/inc/tname.h
+17
-0
src/common/src/tarithoperator.c
src/common/src/tarithoperator.c
+1
-1
src/common/src/texpr.c
src/common/src/texpr.c
+14
-14
src/common/src/tname.c
src/common/src/tname.c
+16
-3
src/inc/taosdef.h
src/inc/taosdef.h
+2
-0
src/inc/tsdb.h
src/inc/tsdb.h
+24
-3
src/inc/ttokendef.h
src/inc/ttokendef.h
+99
-98
src/inc/ttype.h
src/inc/ttype.h
+38
-0
src/query/inc/qAggMain.h
src/query/inc/qAggMain.h
+4
-8
src/query/inc/qExecutor.h
src/query/inc/qExecutor.h
+5
-3
src/query/inc/qFill.h
src/query/inc/qFill.h
+1
-1
src/query/inc/qSqlparser.h
src/query/inc/qSqlparser.h
+2
-1
src/query/inc/sql.y
src/query/inc/sql.y
+11
-7
src/query/src/qAggMain.c
src/query/src/qAggMain.c
+57
-79
src/query/src/qExecutor.c
src/query/src/qExecutor.c
+254
-51
src/query/src/qExtbuffer.c
src/query/src/qExtbuffer.c
+2
-2
src/query/src/qFill.c
src/query/src/qFill.c
+7
-19
src/query/src/qParserImpl.c
src/query/src/qParserImpl.c
+2
-1
src/query/src/qPercentile.c
src/query/src/qPercentile.c
+22
-4
src/query/src/qTokenizer.c
src/query/src/qTokenizer.c
+1
-0
src/query/src/sql.c
src/query/src/sql.c
+1113
-1105
src/query/tests/astTest.cpp
src/query/tests/astTest.cpp
+1
-1
src/query/tests/patternMatchTest.cpp
src/query/tests/patternMatchTest.cpp
+1
-1
src/tsdb/src/tsdbRead.c
src/tsdb/src/tsdbRead.c
+236
-116
src/util/inc/tstoken.h
src/util/inc/tstoken.h
+3
-0
src/util/src/tref.c
src/util/src/tref.c
+1
-1
tests/script/general/parser/interp_test.sim
tests/script/general/parser/interp_test.sim
+288
-204
tests/script/general/parser/select_distinct_tag.sim
tests/script/general/parser/select_distinct_tag.sim
+61
-0
tests/script/general/parser/testSuite.sim
tests/script/general/parser/testSuite.sim
+2
-0
tests/script/jenkins/basic.txt
tests/script/jenkins/basic.txt
+1
-0
未找到文件。
src/client/inc/tscUtil.h
浏览文件 @
e7614def
...
@@ -99,14 +99,14 @@ static FORCE_INLINE SQueryInfo* tscGetQueryInfoDetail(SSqlCmd* pCmd, int32_t sub
...
@@ -99,14 +99,14 @@ static FORCE_INLINE SQueryInfo* tscGetQueryInfoDetail(SSqlCmd* pCmd, int32_t sub
}
}
int32_t
tscCreateDataBlock
(
size_t
initialSize
,
int32_t
rowSize
,
int32_t
startOffset
,
SName
*
name
,
STableMeta
*
pTableMeta
,
STableDataBlocks
**
dataBlocks
);
int32_t
tscCreateDataBlock
(
size_t
initialSize
,
int32_t
rowSize
,
int32_t
startOffset
,
SName
*
name
,
STableMeta
*
pTableMeta
,
STableDataBlocks
**
dataBlocks
);
void
tscDestroyDataBlock
(
STableDataBlocks
*
pDataBlock
);
void
tscDestroyDataBlock
(
STableDataBlocks
*
pDataBlock
,
bool
removeMeta
);
void
tscSortRemoveDataBlockDupRows
(
STableDataBlocks
*
dataBuf
);
void
tscSortRemoveDataBlockDupRows
(
STableDataBlocks
*
dataBuf
);
SParamInfo
*
tscAddParamToDataBlock
(
STableDataBlocks
*
pDataBlock
,
char
type
,
uint8_t
timePrec
,
int16_t
bytes
,
SParamInfo
*
tscAddParamToDataBlock
(
STableDataBlocks
*
pDataBlock
,
char
type
,
uint8_t
timePrec
,
int16_t
bytes
,
uint32_t
offset
);
uint32_t
offset
);
void
*
tscDestroyBlockArrayList
(
SArray
*
pDataBlockList
);
void
*
tscDestroyBlockArrayList
(
SArray
*
pDataBlockList
);
void
*
tscDestroyBlockHashTable
(
SHashObj
*
pBlockHashTable
);
void
*
tscDestroyBlockHashTable
(
SHashObj
*
pBlockHashTable
,
bool
removeMeta
);
int32_t
tscCopyDataBlockToPayload
(
SSqlObj
*
pSql
,
STableDataBlocks
*
pDataBlock
);
int32_t
tscCopyDataBlockToPayload
(
SSqlObj
*
pSql
,
STableDataBlocks
*
pDataBlock
);
int32_t
tscMergeTableDataBlocks
(
SSqlObj
*
pSql
,
bool
freeBlockMap
);
int32_t
tscMergeTableDataBlocks
(
SSqlObj
*
pSql
,
bool
freeBlockMap
);
...
...
src/client/inc/tsclient.h
浏览文件 @
e7614def
...
@@ -22,15 +22,15 @@ extern "C" {
...
@@ -22,15 +22,15 @@ extern "C" {
#include "os.h"
#include "os.h"
#include "qAggMain.h"
#include "taos.h"
#include "taos.h"
#include "taosdef.h"
#include "taosdef.h"
#include "taosmsg.h"
#include "taosmsg.h"
#include "tarray.h"
#include "tarray.h"
#include "tglobal.h"
#include "tsqlfunction.h"
#include "tutil.h"
#include "tcache.h"
#include "tcache.h"
#include "tglobal.h"
#include "tref.h"
#include "tref.h"
#include "tutil.h"
#include "qExecutor.h"
#include "qExecutor.h"
#include "qSqlparser.h"
#include "qSqlparser.h"
...
@@ -223,6 +223,8 @@ typedef struct SQueryInfo {
...
@@ -223,6 +223,8 @@ typedef struct SQueryInfo {
int32_t
udColumnId
;
// current user-defined constant output field column id, monotonically decreases from TSDB_UD_COLUMN_INDEX
int32_t
udColumnId
;
// current user-defined constant output field column id, monotonically decreases from TSDB_UD_COLUMN_INDEX
int16_t
resColumnId
;
// result column id
int16_t
resColumnId
;
// result column id
bool
distinctTag
;
// distinct tag or not
}
SQueryInfo
;
}
SQueryInfo
;
typedef
struct
{
typedef
struct
{
...
@@ -411,7 +413,7 @@ void tscRestoreSQLFuncForSTableQuery(SQueryInfo *pQueryInfo);
...
@@ -411,7 +413,7 @@ void tscRestoreSQLFuncForSTableQuery(SQueryInfo *pQueryInfo);
int32_t
tscCreateResPointerInfo
(
SSqlRes
*
pRes
,
SQueryInfo
*
pQueryInfo
);
int32_t
tscCreateResPointerInfo
(
SSqlRes
*
pRes
,
SQueryInfo
*
pQueryInfo
);
void
tscSetResRawPtr
(
SSqlRes
*
pRes
,
SQueryInfo
*
pQueryInfo
);
void
tscSetResRawPtr
(
SSqlRes
*
pRes
,
SQueryInfo
*
pQueryInfo
);
void
tscResetSqlCmd
Obj
(
SSqlCmd
*
pCmd
);
void
tscResetSqlCmd
(
SSqlCmd
*
pCmd
,
bool
removeMeta
);
/**
/**
* free query result of the sql object
* free query result of the sql object
...
...
src/client/src/tscAsync.c
浏览文件 @
e7614def
...
@@ -351,7 +351,7 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
...
@@ -351,7 +351,7 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
if
(
pCmd
->
command
==
TSDB_SQL_SELECT
)
{
if
(
pCmd
->
command
==
TSDB_SQL_SELECT
)
{
tscDebug
(
"%p redo parse sql string and proceed"
,
pSql
);
tscDebug
(
"%p redo parse sql string and proceed"
,
pSql
);
pCmd
->
parseFinished
=
false
;
pCmd
->
parseFinished
=
false
;
tscResetSqlCmd
Obj
(
pCmd
);
tscResetSqlCmd
(
pCmd
,
true
);
code
=
tsParseSql
(
pSql
,
true
);
code
=
tsParseSql
(
pSql
,
true
);
if
(
code
==
TSDB_CODE_TSC_ACTION_IN_PROGRESS
)
{
if
(
code
==
TSDB_CODE_TSC_ACTION_IN_PROGRESS
)
{
...
...
src/client/src/tscLocalMerge.c
浏览文件 @
e7614def
...
@@ -16,7 +16,7 @@
...
@@ -16,7 +16,7 @@
#include "tscLocalMerge.h"
#include "tscLocalMerge.h"
#include "tscSubquery.h"
#include "tscSubquery.h"
#include "os.h"
#include "os.h"
#include "
qAst
.h"
#include "
texpr
.h"
#include "tlosertree.h"
#include "tlosertree.h"
#include "tscLog.h"
#include "tscLog.h"
#include "tscUtil.h"
#include "tscUtil.h"
...
@@ -1101,7 +1101,7 @@ static int64_t getNumOfResultLocal(SQueryInfo *pQueryInfo, SQLFunctionCtx *pCtx)
...
@@ -1101,7 +1101,7 @@ static int64_t getNumOfResultLocal(SQueryInfo *pQueryInfo, SQLFunctionCtx *pCtx)
* the number of output result is decided by main output
* the number of output result is decided by main output
*/
*/
int32_t
functionId
=
pCtx
[
j
].
functionId
;
int32_t
functionId
=
pCtx
[
j
].
functionId
;
if
(
functionId
==
TSDB_FUNC_TS
||
functionId
==
TSDB_FUNC_TAG
||
functionId
==
TSDB_FUNC_TAGPRJ
)
{
if
(
functionId
==
TSDB_FUNC_TS
||
functionId
==
TSDB_FUNC_TAG
)
{
continue
;
continue
;
}
}
...
@@ -1183,7 +1183,7 @@ bool needToMerge(SQueryInfo *pQueryInfo, SLocalMerger *pLocalMerge, tFilePage *t
...
@@ -1183,7 +1183,7 @@ bool needToMerge(SQueryInfo *pQueryInfo, SLocalMerger *pLocalMerge, tFilePage *t
int16_t
functionId
=
pLocalMerge
->
pCtx
[
0
].
functionId
;
int16_t
functionId
=
pLocalMerge
->
pCtx
[
0
].
functionId
;
// todo opt performance
// todo opt performance
if
((
/*functionId == TSDB_FUNC_PRJ || */
functionId
==
TSDB_FUNC_ARITHM
)
||
(
tscIsProjectionQueryOnSTable
(
pQueryInfo
,
0
)))
{
// column projection query
if
((
/*functionId == TSDB_FUNC_PRJ || */
functionId
==
TSDB_FUNC_ARITHM
)
||
(
tscIsProjectionQueryOnSTable
(
pQueryInfo
,
0
)
&&
pQueryInfo
->
distinctTag
==
false
))
{
// column projection query
ret
=
1
;
// disable merge procedure
ret
=
1
;
// disable merge procedure
}
else
{
}
else
{
tOrderDescriptor
*
pDesc
=
pLocalMerge
->
pDesc
;
tOrderDescriptor
*
pDesc
=
pLocalMerge
->
pDesc
;
...
...
src/client/src/tscParseInsert.c
浏览文件 @
e7614def
...
@@ -1036,11 +1036,7 @@ static int32_t validateDataSource(SSqlCmd *pCmd, int8_t type, const char *sql) {
...
@@ -1036,11 +1036,7 @@ static int32_t validateDataSource(SSqlCmd *pCmd, int8_t type, const char *sql) {
}
}
/**
/**
* usage: insert into table1 values() () table2 values()()
* parse insert sql
*
* @param str
* @param acct
* @param db
* @param pSql
* @param pSql
* @return
* @return
*/
*/
...
@@ -1343,10 +1339,11 @@ int tsParseSql(SSqlObj *pSql, bool initial) {
...
@@ -1343,10 +1339,11 @@ int tsParseSql(SSqlObj *pSql, bool initial) {
// make a backup as tsParseInsertSql may modify the string
// make a backup as tsParseInsertSql may modify the string
char
*
sqlstr
=
strdup
(
pSql
->
sqlstr
);
char
*
sqlstr
=
strdup
(
pSql
->
sqlstr
);
ret
=
tsParseInsertSql
(
pSql
);
ret
=
tsParseInsertSql
(
pSql
);
if
(
sqlstr
==
NULL
||
pSql
->
parseRetry
>=
1
||
ret
!=
TSDB_CODE_TSC_INVALID_SQL
)
{
if
((
sqlstr
==
NULL
)
||
(
pSql
->
parseRetry
>=
1
)
||
(
ret
!=
TSDB_CODE_TSC_SQL_SYNTAX_ERROR
&&
ret
!=
TSDB_CODE_TSC_INVALID_SQL
))
{
free
(
sqlstr
);
free
(
sqlstr
);
}
else
{
}
else
{
tscResetSqlCmd
Obj
(
pCmd
);
tscResetSqlCmd
(
pCmd
,
true
);
free
(
pSql
->
sqlstr
);
free
(
pSql
->
sqlstr
);
pSql
->
sqlstr
=
sqlstr
;
pSql
->
sqlstr
=
sqlstr
;
pSql
->
parseRetry
++
;
pSql
->
parseRetry
++
;
...
@@ -1358,7 +1355,7 @@ int tsParseSql(SSqlObj *pSql, bool initial) {
...
@@ -1358,7 +1355,7 @@ int tsParseSql(SSqlObj *pSql, bool initial) {
SSqlInfo
SQLInfo
=
qSQLParse
(
pSql
->
sqlstr
);
SSqlInfo
SQLInfo
=
qSQLParse
(
pSql
->
sqlstr
);
ret
=
tscToSQLCmd
(
pSql
,
&
SQLInfo
);
ret
=
tscToSQLCmd
(
pSql
,
&
SQLInfo
);
if
(
ret
==
TSDB_CODE_TSC_INVALID_SQL
&&
pSql
->
parseRetry
==
0
&&
SQLInfo
.
type
==
TSDB_SQL_NULL
)
{
if
(
ret
==
TSDB_CODE_TSC_INVALID_SQL
&&
pSql
->
parseRetry
==
0
&&
SQLInfo
.
type
==
TSDB_SQL_NULL
)
{
tscResetSqlCmd
Obj
(
pCmd
);
tscResetSqlCmd
(
pCmd
,
true
);
pSql
->
parseRetry
++
;
pSql
->
parseRetry
++
;
ret
=
tscToSQLCmd
(
pSql
,
&
SQLInfo
);
ret
=
tscToSQLCmd
(
pSql
,
&
SQLInfo
);
}
}
...
...
src/client/src/tscSQLParser.c
浏览文件 @
e7614def
...
@@ -20,7 +20,7 @@
...
@@ -20,7 +20,7 @@
#include "os.h"
#include "os.h"
#include "ttype.h"
#include "ttype.h"
#include "
qAst
.h"
#include "
texpr
.h"
#include "taos.h"
#include "taos.h"
#include "taosmsg.h"
#include "taosmsg.h"
#include "tcompare.h"
#include "tcompare.h"
...
@@ -41,7 +41,7 @@
...
@@ -41,7 +41,7 @@
#define COLUMN_INDEX_INITIAL_VAL (-3)
#define COLUMN_INDEX_INITIAL_VAL (-3)
#define COLUMN_INDEX_INITIALIZER \
#define COLUMN_INDEX_INITIALIZER \
{ COLUMN_INDEX_INITIAL_VAL, COLUMN_INDEX_INITIAL_VAL }
{ COLUMN_INDEX_INITIAL_VAL, COLUMN_INDEX_INITIAL_VAL }
#define COLUMN_INDEX_VALIDE(index) (((index).tableIndex >= 0) && ((index).columnIndex >= TSDB_
TBNAME
_COLUMN_INDEX))
#define COLUMN_INDEX_VALIDE(index) (((index).tableIndex >= 0) && ((index).columnIndex >= TSDB_
BLOCK_DIST
_COLUMN_INDEX))
#define TBNAME_LIST_SEP ","
#define TBNAME_LIST_SEP ","
typedef
struct
SColumnList
{
// todo refactor
typedef
struct
SColumnList
{
// todo refactor
...
@@ -902,13 +902,17 @@ int32_t parseSlidingClause(SSqlObj* pSql, SQueryInfo* pQueryInfo, SQuerySQL* pQu
...
@@ -902,13 +902,17 @@ int32_t parseSlidingClause(SSqlObj* pSql, SQueryInfo* pQueryInfo, SQuerySQL* pQu
int32_t
tscSetTableFullName
(
STableMetaInfo
*
pTableMetaInfo
,
SStrToken
*
pTableName
,
SSqlObj
*
pSql
)
{
int32_t
tscSetTableFullName
(
STableMetaInfo
*
pTableMetaInfo
,
SStrToken
*
pTableName
,
SSqlObj
*
pSql
)
{
const
char
*
msg1
=
"name too long"
;
const
char
*
msg1
=
"name too long"
;
const
char
*
msg2
=
"acctId too long"
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
int32_t
code
=
TSDB_CODE_SUCCESS
;
int32_t
code
=
TSDB_CODE_SUCCESS
;
if
(
hasSpecifyDB
(
pTableName
))
{
// db has been specified in sql string so we ignore current db path
if
(
hasSpecifyDB
(
pTableName
))
{
// db has been specified in sql string so we ignore current db path
tNameSetAcctId
(
&
pTableMetaInfo
->
name
,
getAccountId
(
pSql
));
code
=
tNameSetAcctId
(
&
pTableMetaInfo
->
name
,
getAccountId
(
pSql
));
if
(
code
!=
0
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg2
);
}
char
name
[
TSDB_TABLE_FNAME_LEN
]
=
{
0
};
char
name
[
TSDB_TABLE_FNAME_LEN
]
=
{
0
};
strncpy
(
name
,
pTableName
->
z
,
pTableName
->
n
);
strncpy
(
name
,
pTableName
->
z
,
pTableName
->
n
);
...
@@ -1354,7 +1358,7 @@ static int32_t handleArithmeticExpr(SSqlCmd* pCmd, int32_t clauseIndex, int32_t
...
@@ -1354,7 +1358,7 @@ static int32_t handleArithmeticExpr(SSqlCmd* pCmd, int32_t clauseIndex, int32_t
int32_t
ret
=
exprTreeFromSqlExpr
(
pCmd
,
&
pNode
,
pItem
->
pNode
,
pQueryInfo
,
colList
,
NULL
);
int32_t
ret
=
exprTreeFromSqlExpr
(
pCmd
,
&
pNode
,
pItem
->
pNode
,
pQueryInfo
,
colList
,
NULL
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
taosArrayDestroy
(
colList
);
taosArrayDestroy
(
colList
);
tExprTreeDestroy
(
&
pNode
,
NULL
);
tExprTreeDestroy
(
pNode
,
NULL
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg2
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg2
);
}
}
...
@@ -1363,9 +1367,9 @@ static int32_t handleArithmeticExpr(SSqlCmd* pCmd, int32_t clauseIndex, int32_t
...
@@ -1363,9 +1367,9 @@ static int32_t handleArithmeticExpr(SSqlCmd* pCmd, int32_t clauseIndex, int32_t
for
(
int32_t
k
=
0
;
k
<
numOfNode
;
++
k
)
{
for
(
int32_t
k
=
0
;
k
<
numOfNode
;
++
k
)
{
SColIndex
*
pIndex
=
taosArrayGet
(
colList
,
k
);
SColIndex
*
pIndex
=
taosArrayGet
(
colList
,
k
);
if
(
TSDB_COL_IS_TAG
(
pIndex
->
flag
))
{
if
(
TSDB_COL_IS_TAG
(
pIndex
->
flag
))
{
tExprTreeDestroy
(
&
pNode
,
NULL
);
tExprTreeDestroy
(
pNode
,
NULL
);
taosArrayDestroy
(
colList
);
taosArrayDestroy
(
colList
);
tExprTreeDestroy
(
&
pNode
,
NULL
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg3
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg3
);
}
}
}
}
...
@@ -1392,7 +1396,7 @@ static int32_t handleArithmeticExpr(SSqlCmd* pCmd, int32_t clauseIndex, int32_t
...
@@ -1392,7 +1396,7 @@ static int32_t handleArithmeticExpr(SSqlCmd* pCmd, int32_t clauseIndex, int32_t
tbufCloseWriter
(
&
bw
);
tbufCloseWriter
(
&
bw
);
taosArrayDestroy
(
colList
);
taosArrayDestroy
(
colList
);
tExprTreeDestroy
(
&
pNode
,
NULL
);
tExprTreeDestroy
(
pNode
,
NULL
);
}
else
{
}
else
{
columnList
.
num
=
0
;
columnList
.
num
=
0
;
columnList
.
ids
[
0
]
=
(
SColumnIndex
)
{
0
,
0
};
columnList
.
ids
[
0
]
=
(
SColumnIndex
)
{
0
,
0
};
...
@@ -1424,7 +1428,7 @@ static int32_t handleArithmeticExpr(SSqlCmd* pCmd, int32_t clauseIndex, int32_t
...
@@ -1424,7 +1428,7 @@ static int32_t handleArithmeticExpr(SSqlCmd* pCmd, int32_t clauseIndex, int32_t
int32_t
ret
=
exprTreeFromSqlExpr
(
pCmd
,
&
pArithExprInfo
->
pExpr
,
pItem
->
pNode
,
pQueryInfo
,
NULL
,
&
pArithExprInfo
->
uid
);
int32_t
ret
=
exprTreeFromSqlExpr
(
pCmd
,
&
pArithExprInfo
->
pExpr
,
pItem
->
pNode
,
pQueryInfo
,
NULL
,
&
pArithExprInfo
->
uid
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
tExprTreeDestroy
(
&
pArithExprInfo
->
pExpr
,
NULL
);
tExprTreeDestroy
(
pArithExprInfo
->
pExpr
,
NULL
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
"invalid expression in select clause"
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
"invalid expression in select clause"
);
}
}
...
@@ -1501,23 +1505,39 @@ static void addPrimaryTsColIntoResult(SQueryInfo* pQueryInfo) {
...
@@ -1501,23 +1505,39 @@ static void addPrimaryTsColIntoResult(SQueryInfo* pQueryInfo) {
pQueryInfo
->
type
|=
TSDB_QUERY_TYPE_PROJECTION_QUERY
;
pQueryInfo
->
type
|=
TSDB_QUERY_TYPE_PROJECTION_QUERY
;
}
}
bool
isValidDistinctSql
(
SQueryInfo
*
pQueryInfo
)
{
if
(
pQueryInfo
==
NULL
)
{
return
false
;
}
if
((
pQueryInfo
->
type
&
TSDB_QUERY_TYPE_STABLE_QUERY
)
!=
TSDB_QUERY_TYPE_STABLE_QUERY
)
{
return
false
;
}
if
(
tscQueryTags
(
pQueryInfo
)
&&
tscSqlExprNumOfExprs
(
pQueryInfo
)
==
1
){
return
true
;
}
return
false
;
}
int32_t
parseSelectClause
(
SSqlCmd
*
pCmd
,
int32_t
clauseIndex
,
tSQLExprList
*
pSelection
,
bool
isSTable
,
bool
joinQuery
,
bool
intervalQuery
)
{
int32_t
parseSelectClause
(
SSqlCmd
*
pCmd
,
int32_t
clauseIndex
,
tSQLExprList
*
pSelection
,
bool
isSTable
,
bool
joinQuery
,
bool
intervalQuery
)
{
assert
(
pSelection
!=
NULL
&&
pCmd
!=
NULL
);
assert
(
pSelection
!=
NULL
&&
pCmd
!=
NULL
);
const
char
*
msg2
=
"functions can not be mixed up"
;
const
char
*
msg2
=
"functions can not be mixed up"
;
const
char
*
msg3
=
"not support query expression"
;
const
char
*
msg3
=
"not support query expression"
;
const
char
*
msg5
=
"invalid function name"
;
const
char
*
msg5
=
"invalid function name"
;
const
char
*
msg6
=
"only support distinct one tag"
;
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
pCmd
,
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
pCmd
,
clauseIndex
);
if
(
pQueryInfo
->
colList
==
NULL
)
{
if
(
pQueryInfo
->
colList
==
NULL
)
{
pQueryInfo
->
colList
=
taosArrayInit
(
4
,
POINTER_BYTES
);
pQueryInfo
->
colList
=
taosArrayInit
(
4
,
POINTER_BYTES
);
}
}
bool
hasDistinct
=
false
;
for
(
int32_t
i
=
0
;
i
<
pSelection
->
nExpr
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pSelection
->
nExpr
;
++
i
)
{
int32_t
outputIndex
=
(
int32_t
)
tscSqlExprNumOfExprs
(
pQueryInfo
);
int32_t
outputIndex
=
(
int32_t
)
tscSqlExprNumOfExprs
(
pQueryInfo
);
tSqlExprItem
*
pItem
=
&
pSelection
->
a
[
i
];
tSqlExprItem
*
pItem
=
&
pSelection
->
a
[
i
];
if
(
hasDistinct
==
false
)
{
hasDistinct
=
(
pItem
->
distinct
==
true
);
}
// project on all fields
// project on all fields
int32_t
optr
=
pItem
->
pNode
->
nSQLOptr
;
int32_t
optr
=
pItem
->
pNode
->
nSQLOptr
;
...
@@ -1551,6 +1571,13 @@ int32_t parseSelectClause(SSqlCmd* pCmd, int32_t clauseIndex, tSQLExprList* pSel
...
@@ -1551,6 +1571,13 @@ int32_t parseSelectClause(SSqlCmd* pCmd, int32_t clauseIndex, tSQLExprList* pSel
}
}
}
}
if
(
hasDistinct
==
true
)
{
if
(
!
isValidDistinctSql
(
pQueryInfo
))
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg6
);
}
pQueryInfo
->
distinctTag
=
true
;
}
// there is only one user-defined column in the final result field, add the timestamp column.
// there is only one user-defined column in the final result field, add the timestamp column.
size_t
numOfSrcCols
=
taosArrayGetSize
(
pQueryInfo
->
colList
);
size_t
numOfSrcCols
=
taosArrayGetSize
(
pQueryInfo
->
colList
);
if
(
numOfSrcCols
<=
0
&&
!
tscQueryTags
(
pQueryInfo
))
{
if
(
numOfSrcCols
<=
0
&&
!
tscQueryTags
(
pQueryInfo
))
{
...
@@ -1727,6 +1754,9 @@ int32_t addProjectionExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, t
...
@@ -1727,6 +1754,9 @@ int32_t addProjectionExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, t
if
(
index
.
columnIndex
==
TSDB_TBNAME_COLUMN_INDEX
)
{
if
(
index
.
columnIndex
==
TSDB_TBNAME_COLUMN_INDEX
)
{
SSchema
colSchema
=
tGetTableNameColumnSchema
();
SSchema
colSchema
=
tGetTableNameColumnSchema
();
tscAddSpecialColumnForSelect
(
pQueryInfo
,
startPos
,
TSDB_FUNC_TAGPRJ
,
&
index
,
&
colSchema
,
TSDB_COL_TAG
);
tscAddSpecialColumnForSelect
(
pQueryInfo
,
startPos
,
TSDB_FUNC_TAGPRJ
,
&
index
,
&
colSchema
,
TSDB_COL_TAG
);
}
else
if
(
index
.
columnIndex
==
TSDB_BLOCK_DIST_COLUMN_INDEX
)
{
SSchema
colSchema
=
tGetBlockDistColumnSchema
();
tscAddSpecialColumnForSelect
(
pQueryInfo
,
startPos
,
TSDB_FUNC_PRJ
,
&
index
,
&
colSchema
,
TSDB_COL_TAG
);
}
else
{
}
else
{
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
index
.
tableIndex
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
index
.
tableIndex
);
STableMeta
*
pTableMeta
=
pTableMetaInfo
->
pTableMeta
;
STableMeta
*
pTableMeta
=
pTableMetaInfo
->
pTableMeta
;
...
@@ -2194,6 +2224,7 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
...
@@ -2194,6 +2224,7 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
if
(
getColumnIndexByName
(
pCmd
,
&
pParamElem
->
pNode
->
colInfo
,
pQueryInfo
,
&
index
)
!=
TSDB_CODE_SUCCESS
)
{
if
(
getColumnIndexByName
(
pCmd
,
&
pParamElem
->
pNode
->
colInfo
,
pQueryInfo
,
&
index
)
!=
TSDB_CODE_SUCCESS
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg3
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg3
);
}
}
if
(
index
.
columnIndex
==
TSDB_TBNAME_COLUMN_INDEX
)
{
if
(
index
.
columnIndex
==
TSDB_TBNAME_COLUMN_INDEX
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg6
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg6
);
}
}
...
@@ -2402,6 +2433,14 @@ static bool isTablenameToken(SStrToken* token) {
...
@@ -2402,6 +2433,14 @@ static bool isTablenameToken(SStrToken* token) {
return
(
strncasecmp
(
TSQL_TBNAME_L
,
tmpToken
.
z
,
tmpToken
.
n
)
==
0
&&
tmpToken
.
n
==
strlen
(
TSQL_TBNAME_L
));
return
(
strncasecmp
(
TSQL_TBNAME_L
,
tmpToken
.
z
,
tmpToken
.
n
)
==
0
&&
tmpToken
.
n
==
strlen
(
TSQL_TBNAME_L
));
}
}
static
bool
isTableBlockDistToken
(
SStrToken
*
token
)
{
SStrToken
tmpToken
=
*
token
;
SStrToken
tableToken
=
{
0
};
extractTableNameFromToken
(
&
tmpToken
,
&
tableToken
);
return
(
strncasecmp
(
TSQL_BLOCK_DIST
,
tmpToken
.
z
,
tmpToken
.
n
)
==
0
&&
tmpToken
.
n
==
strlen
(
TSQL_BLOCK_DIST_L
));
}
static
int16_t
doGetColumnIndex
(
SQueryInfo
*
pQueryInfo
,
int32_t
index
,
SStrToken
*
pToken
)
{
static
int16_t
doGetColumnIndex
(
SQueryInfo
*
pQueryInfo
,
int32_t
index
,
SStrToken
*
pToken
)
{
STableMeta
*
pTableMeta
=
tscGetMetaInfo
(
pQueryInfo
,
index
)
->
pTableMeta
;
STableMeta
*
pTableMeta
=
tscGetMetaInfo
(
pQueryInfo
,
index
)
->
pTableMeta
;
...
@@ -2431,6 +2470,8 @@ int32_t doGetColumnIndexByName(SSqlCmd* pCmd, SStrToken* pToken, SQueryInfo* pQu
...
@@ -2431,6 +2470,8 @@ int32_t doGetColumnIndexByName(SSqlCmd* pCmd, SStrToken* pToken, SQueryInfo* pQu
if
(
isTablenameToken
(
pToken
))
{
if
(
isTablenameToken
(
pToken
))
{
pIndex
->
columnIndex
=
TSDB_TBNAME_COLUMN_INDEX
;
pIndex
->
columnIndex
=
TSDB_TBNAME_COLUMN_INDEX
;
}
else
if
(
isTableBlockDistToken
(
pToken
))
{
pIndex
->
columnIndex
=
TSDB_BLOCK_DIST_COLUMN_INDEX
;
}
else
if
(
strncasecmp
(
pToken
->
z
,
DEFAULT_PRIMARY_TIMESTAMP_COL_NAME
,
pToken
->
n
)
==
0
)
{
}
else
if
(
strncasecmp
(
pToken
->
z
,
DEFAULT_PRIMARY_TIMESTAMP_COL_NAME
,
pToken
->
n
)
==
0
)
{
pIndex
->
columnIndex
=
PRIMARYKEY_TIMESTAMP_COL_INDEX
;
pIndex
->
columnIndex
=
PRIMARYKEY_TIMESTAMP_COL_INDEX
;
}
else
{
}
else
{
...
@@ -2671,8 +2712,7 @@ int32_t setShowInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
...
@@ -2671,8 +2712,7 @@ int32_t setShowInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
if
(
!
validateIpAddress
(
pDnodeIp
->
z
,
pDnodeIp
->
n
))
{
if
(
!
validateIpAddress
(
pDnodeIp
->
z
,
pDnodeIp
->
n
))
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg4
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg4
);
}
}
}
}
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
@@ -4303,7 +4343,7 @@ static int32_t getTagQueryCondExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SCondE
...
@@ -4303,7 +4343,7 @@ static int32_t getTagQueryCondExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SCondE
doCompactQueryExpr
(
pExpr
);
doCompactQueryExpr
(
pExpr
);
tSqlExprDestroy
(
p1
);
tSqlExprDestroy
(
p1
);
tExprTreeDestroy
(
&
p
,
NULL
);
tExprTreeDestroy
(
p
,
NULL
);
taosArrayDestroy
(
colList
);
taosArrayDestroy
(
colList
);
if
(
pQueryInfo
->
tagCond
.
pCond
!=
NULL
&&
taosArrayGetSize
(
pQueryInfo
->
tagCond
.
pCond
)
>
0
&&
!
UTIL_TABLE_IS_SUPER_TABLE
(
pTableMetaInfo
))
{
if
(
pQueryInfo
->
tagCond
.
pCond
!=
NULL
&&
taosArrayGetSize
(
pQueryInfo
->
tagCond
.
pCond
)
>
0
&&
!
UTIL_TABLE_IS_SUPER_TABLE
(
pTableMetaInfo
))
{
...
@@ -4524,10 +4564,10 @@ int32_t parseFillClause(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SQuerySQL* pQuery
...
@@ -4524,10 +4564,10 @@ int32_t parseFillClause(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SQuerySQL* pQuery
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg2
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg2
);
}
}
size_t
size
=
tscNumOfFields
(
pQueryInfo
);
size_t
numOfFields
=
tscNumOfFields
(
pQueryInfo
);
if
(
pQueryInfo
->
fillVal
==
NULL
)
{
if
(
pQueryInfo
->
fillVal
==
NULL
)
{
pQueryInfo
->
fillVal
=
calloc
(
size
,
sizeof
(
int64_t
));
pQueryInfo
->
fillVal
=
calloc
(
numOfFields
,
sizeof
(
int64_t
));
if
(
pQueryInfo
->
fillVal
==
NULL
)
{
if
(
pQueryInfo
->
fillVal
==
NULL
)
{
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
}
...
@@ -4537,7 +4577,7 @@ int32_t parseFillClause(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SQuerySQL* pQuery
...
@@ -4537,7 +4577,7 @@ int32_t parseFillClause(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SQuerySQL* pQuery
pQueryInfo
->
fillType
=
TSDB_FILL_NONE
;
pQueryInfo
->
fillType
=
TSDB_FILL_NONE
;
}
else
if
(
strncasecmp
(
pItem
->
pVar
.
pz
,
"null"
,
4
)
==
0
&&
pItem
->
pVar
.
nLen
==
4
)
{
}
else
if
(
strncasecmp
(
pItem
->
pVar
.
pz
,
"null"
,
4
)
==
0
&&
pItem
->
pVar
.
nLen
==
4
)
{
pQueryInfo
->
fillType
=
TSDB_FILL_NULL
;
pQueryInfo
->
fillType
=
TSDB_FILL_NULL
;
for
(
int32_t
i
=
START_INTERPO_COL_IDX
;
i
<
size
;
++
i
)
{
for
(
int32_t
i
=
START_INTERPO_COL_IDX
;
i
<
numOfFields
;
++
i
)
{
TAOS_FIELD
*
pField
=
tscFieldInfoGetField
(
&
pQueryInfo
->
fieldsInfo
,
i
);
TAOS_FIELD
*
pField
=
tscFieldInfoGetField
(
&
pQueryInfo
->
fieldsInfo
,
i
);
setNull
((
char
*
)
&
pQueryInfo
->
fillVal
[
i
],
pField
->
type
,
pField
->
bytes
);
setNull
((
char
*
)
&
pQueryInfo
->
fillVal
[
i
],
pField
->
type
,
pField
->
bytes
);
}
}
...
@@ -4551,7 +4591,7 @@ int32_t parseFillClause(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SQuerySQL* pQuery
...
@@ -4551,7 +4591,7 @@ int32_t parseFillClause(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SQuerySQL* pQuery
pQueryInfo
->
fillType
=
TSDB_FILL_SET_VALUE
;
pQueryInfo
->
fillType
=
TSDB_FILL_SET_VALUE
;
size_t
num
=
taosArrayGetSize
(
pFillToken
);
size_t
num
=
taosArrayGetSize
(
pFillToken
);
if
(
num
==
1
)
{
if
(
num
==
1
)
{
// no actual value, return with error code
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg1
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg1
);
}
}
...
@@ -4562,11 +4602,11 @@ int32_t parseFillClause(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SQuerySQL* pQuery
...
@@ -4562,11 +4602,11 @@ int32_t parseFillClause(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SQuerySQL* pQuery
if
(
tscIsPointInterpQuery
(
pQueryInfo
))
{
if
(
tscIsPointInterpQuery
(
pQueryInfo
))
{
startPos
=
0
;
startPos
=
0
;
if
(
numOfFillVal
>
size
)
{
if
(
numOfFillVal
>
numOfFields
)
{
numOfFillVal
=
(
int32_t
)
size
;
numOfFillVal
=
(
int32_t
)
numOfFields
;
}
}
}
else
{
}
else
{
numOfFillVal
=
(
int16_t
)((
num
>
(
int32_t
)
size
)
?
(
int32_t
)
size
:
num
);
numOfFillVal
=
(
int16_t
)((
num
>
(
int32_t
)
numOfFields
)
?
(
int32_t
)
numOfFields
:
num
);
}
}
int32_t
j
=
1
;
int32_t
j
=
1
;
...
@@ -4586,10 +4626,10 @@ int32_t parseFillClause(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SQuerySQL* pQuery
...
@@ -4586,10 +4626,10 @@ int32_t parseFillClause(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SQuerySQL* pQuery
}
}
}
}
if
((
num
<
size
)
||
((
num
-
1
<
size
)
&&
(
tscIsPointInterpQuery
(
pQueryInfo
))))
{
if
((
num
<
numOfFields
)
||
((
num
-
1
<
numOfFields
)
&&
(
tscIsPointInterpQuery
(
pQueryInfo
))))
{
tVariantListItem
*
lastItem
=
taosArrayGetLast
(
pFillToken
);
tVariantListItem
*
lastItem
=
taosArrayGetLast
(
pFillToken
);
for
(
int32_t
i
=
numOfFillVal
;
i
<
size
;
++
i
)
{
for
(
int32_t
i
=
numOfFillVal
;
i
<
numOfFields
;
++
i
)
{
TAOS_FIELD
*
pField
=
tscFieldInfoGetField
(
&
pQueryInfo
->
fieldsInfo
,
i
);
TAOS_FIELD
*
pField
=
tscFieldInfoGetField
(
&
pQueryInfo
->
fieldsInfo
,
i
);
if
(
pField
->
type
==
TSDB_DATA_TYPE_BINARY
||
pField
->
type
==
TSDB_DATA_TYPE_NCHAR
)
{
if
(
pField
->
type
==
TSDB_DATA_TYPE_BINARY
||
pField
->
type
==
TSDB_DATA_TYPE_NCHAR
)
{
...
@@ -4640,6 +4680,12 @@ int32_t parseOrderbyClause(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SQuerySQL* pQu
...
@@ -4640,6 +4680,12 @@ int32_t parseOrderbyClause(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SQuerySQL* pQu
setDefaultOrderInfo
(
pQueryInfo
);
setDefaultOrderInfo
(
pQueryInfo
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
if
(
pQueryInfo
->
distinctTag
==
true
)
{
pQueryInfo
->
order
.
order
=
TSDB_ORDER_ASC
;
pQueryInfo
->
order
.
orderColId
=
0
;
return
TSDB_CODE_SUCCESS
;
}
if
(
pQuerySql
->
pSortOrder
==
NULL
)
{
if
(
pQuerySql
->
pSortOrder
==
NULL
)
{
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
...
src/client/src/tscServer.c
浏览文件 @
e7614def
...
@@ -2228,6 +2228,8 @@ int tscProcessRetrieveRspFromNode(SSqlObj *pSql) {
...
@@ -2228,6 +2228,8 @@ int tscProcessRetrieveRspFromNode(SSqlObj *pSql) {
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
assert
(
pRes
->
rspLen
>=
sizeof
(
SRetrieveTableRsp
));
SRetrieveTableRsp
*
pRetrieve
=
(
SRetrieveTableRsp
*
)
pRes
->
pRsp
;
SRetrieveTableRsp
*
pRetrieve
=
(
SRetrieveTableRsp
*
)
pRes
->
pRsp
;
if
(
pRetrieve
==
NULL
)
{
if
(
pRetrieve
==
NULL
)
{
pRes
->
code
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
pRes
->
code
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
...
...
src/client/src/tscSql.c
浏览文件 @
e7614def
...
@@ -15,7 +15,7 @@
...
@@ -15,7 +15,7 @@
#include "hash.h"
#include "hash.h"
#include "os.h"
#include "os.h"
#include "
qAst
.h"
#include "
texpr
.h"
#include "tkey.h"
#include "tkey.h"
#include "tcache.h"
#include "tcache.h"
#include "tnote.h"
#include "tnote.h"
...
@@ -110,6 +110,7 @@ static SSqlObj *taosConnectImpl(const char *ip, const char *user, const char *pa
...
@@ -110,6 +110,7 @@ static SSqlObj *taosConnectImpl(const char *ip, const char *user, const char *pa
rpcClose
(
pDnodeConn
);
rpcClose
(
pDnodeConn
);
free
(
pObj
->
tscCorMgmtEpSet
);
free
(
pObj
->
tscCorMgmtEpSet
);
free
(
pObj
);
free
(
pObj
);
return
NULL
;
}
}
memcpy
(
pObj
->
tscCorMgmtEpSet
,
&
corMgmtEpSet
,
sizeof
(
SRpcCorEpSet
));
memcpy
(
pObj
->
tscCorMgmtEpSet
,
&
corMgmtEpSet
,
sizeof
(
SRpcCorEpSet
));
...
@@ -936,7 +937,7 @@ int taos_validate_sql(TAOS *taos, const char *sql) {
...
@@ -936,7 +937,7 @@ int taos_validate_sql(TAOS *taos, const char *sql) {
static
int
tscParseTblNameList
(
SSqlObj
*
pSql
,
const
char
*
tblNameList
,
int32_t
tblListLen
)
{
static
int
tscParseTblNameList
(
SSqlObj
*
pSql
,
const
char
*
tblNameList
,
int32_t
tblListLen
)
{
// must before clean the sqlcmd object
// must before clean the sqlcmd object
tscResetSqlCmd
Obj
(
&
pSql
->
cmd
);
tscResetSqlCmd
(
&
pSql
->
cmd
,
false
);
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
...
...
src/client/src/tscStream.c
浏览文件 @
e7614def
...
@@ -191,9 +191,10 @@ static void tscProcessStreamQueryCallback(void *param, TAOS_RES *tres, int numOf
...
@@ -191,9 +191,10 @@ static void tscProcessStreamQueryCallback(void *param, TAOS_RES *tres, int numOf
STableMetaInfo
*
pTableMetaInfo
=
tscGetTableMetaInfoFromCmd
(
&
pStream
->
pSql
->
cmd
,
0
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetTableMetaInfoFromCmd
(
&
pStream
->
pSql
->
cmd
,
0
,
0
);
assert
(
0
);
char
name
[
TSDB_TABLE_FNAME_LEN
]
=
{
0
};
// char* name = pTableMetaInfo->name;
tNameExtractFullName
(
&
pTableMetaInfo
->
name
,
name
);
// taosHashRemove(tscTableMetaInfo, name, strnlen(name, TSDB_TABLE_FNAME_LEN));
taosHashRemove
(
tscTableMetaInfo
,
name
,
strnlen
(
name
,
TSDB_TABLE_FNAME_LEN
));
pTableMetaInfo
->
vgroupList
=
tscVgroupInfoClear
(
pTableMetaInfo
->
vgroupList
);
pTableMetaInfo
->
vgroupList
=
tscVgroupInfoClear
(
pTableMetaInfo
->
vgroupList
);
tscSetRetryTimer
(
pStream
,
pStream
->
pSql
,
retryDelay
);
tscSetRetryTimer
(
pStream
,
pStream
->
pSql
,
retryDelay
);
...
@@ -292,8 +293,8 @@ static void tscProcessStreamRetrieveResult(void *param, TAOS_RES *res, int numOf
...
@@ -292,8 +293,8 @@ static void tscProcessStreamRetrieveResult(void *param, TAOS_RES *res, int numOf
pStream
->
stime
+=
1
;
pStream
->
stime
+=
1
;
}
}
// tscDebug("%p stream:%p, query on:%s, fetch result completed, fetched rows:%" PRId64, pSql, pStream, pTableMetaInfo->name
,
tscDebug
(
"%p stream:%p, query on:%s, fetch result completed, fetched rows:%"
PRId64
,
pSql
,
pStream
,
tNameGetTableName
(
&
pTableMetaInfo
->
name
)
,
//
pStream->numOfRes);
pStream
->
numOfRes
);
tfree
(
pTableMetaInfo
->
pTableMeta
);
tfree
(
pTableMetaInfo
->
pTableMeta
);
...
@@ -556,8 +557,8 @@ static void tscCreateStream(void *param, TAOS_RES *res, int code) {
...
@@ -556,8 +557,8 @@ static void tscCreateStream(void *param, TAOS_RES *res, int code) {
taosTmrReset
(
tscProcessStreamTimer
,
(
int32_t
)
starttime
,
pStream
,
tscTmr
,
&
pStream
->
pTimer
);
taosTmrReset
(
tscProcessStreamTimer
,
(
int32_t
)
starttime
,
pStream
,
tscTmr
,
&
pStream
->
pTimer
);
//
tscDebug("%p stream:%p is opened, query on:%s, interval:%" PRId64 ", sliding:%" PRId64 ", first launched in:%" PRId64 ", sql:%s", pSql,
tscDebug
(
"%p stream:%p is opened, query on:%s, interval:%"
PRId64
", sliding:%"
PRId64
", first launched in:%"
PRId64
", sql:%s"
,
pSql
,
// pStream, pTableMetaInfo->name
, pStream->interval.interval, pStream->interval.sliding, starttime, pSql->sqlstr);
pStream
,
tNameGetTableName
(
&
pTableMetaInfo
->
name
)
,
pStream
->
interval
.
interval
,
pStream
->
interval
.
sliding
,
starttime
,
pSql
->
sqlstr
);
}
}
void
tscSetStreamDestTable
(
SSqlStream
*
pStream
,
const
char
*
dstTable
)
{
void
tscSetStreamDestTable
(
SSqlStream
*
pStream
,
const
char
*
dstTable
)
{
...
...
src/client/src/tscSubquery.c
浏览文件 @
e7614def
...
@@ -16,7 +16,7 @@
...
@@ -16,7 +16,7 @@
#include "os.h"
#include "os.h"
#include "
qAst
.h"
#include "
texpr
.h"
#include "qTsbuf.h"
#include "qTsbuf.h"
#include "tcompare.h"
#include "tcompare.h"
#include "tscLog.h"
#include "tscLog.h"
...
@@ -582,13 +582,14 @@ void freeJoinSubqueryObj(SSqlObj* pSql) {
...
@@ -582,13 +582,14 @@ void freeJoinSubqueryObj(SSqlObj* pSql) {
pSql
->
subState
.
numOfSub
=
0
;
pSql
->
subState
.
numOfSub
=
0
;
}
}
static
void
quitAllSubquery
(
SSqlObj
*
pSqlSub
,
SSqlObj
*
pSqlObj
,
SJoinSupporter
*
pSupporter
)
{
static
int32_t
quitAllSubquery
(
SSqlObj
*
pSqlSub
,
SSqlObj
*
pSqlObj
,
SJoinSupporter
*
pSupporter
)
{
if
(
subAndCheckDone
(
pSqlSub
,
pSqlObj
,
pSupporter
->
subqueryIndex
))
{
if
(
subAndCheckDone
(
pSqlSub
,
pSqlObj
,
pSupporter
->
subqueryIndex
))
{
tscError
(
"%p all subquery return and query failed, global code:%s"
,
pSqlObj
,
tstrerror
(
pSqlObj
->
res
.
code
));
tscError
(
"%p all subquery return and query failed, global code:%s"
,
pSqlObj
,
tstrerror
(
pSqlObj
->
res
.
code
));
freeJoinSubqueryObj
(
pSqlObj
);
freeJoinSubqueryObj
(
pSqlObj
);
return
;
return
0
;
}
}
return
1
;
//tscDestroyJoinSupporter(pSupporter);
//tscDestroyJoinSupporter(pSupporter);
}
}
...
@@ -835,7 +836,9 @@ static void tidTagRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
...
@@ -835,7 +836,9 @@ static void tidTagRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
if
(
pParentSql
->
res
.
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
pParentSql
->
res
.
code
!=
TSDB_CODE_SUCCESS
)
{
tscError
(
"%p abort query due to other subquery failure. code:%d, global code:%d"
,
pSql
,
numOfRows
,
pParentSql
->
res
.
code
);
tscError
(
"%p abort query due to other subquery failure. code:%d, global code:%d"
,
pSql
,
numOfRows
,
pParentSql
->
res
.
code
);
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
);
if
(
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
))
{
return
;
}
tscAsyncResultOnError
(
pParentSql
);
tscAsyncResultOnError
(
pParentSql
);
...
@@ -850,7 +853,9 @@ static void tidTagRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
...
@@ -850,7 +853,9 @@ static void tidTagRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
tscError
(
"%p sub query failed, code:%s, index:%d"
,
pSql
,
tstrerror
(
numOfRows
),
pSupporter
->
subqueryIndex
);
tscError
(
"%p sub query failed, code:%s, index:%d"
,
pSql
,
tstrerror
(
numOfRows
),
pSupporter
->
subqueryIndex
);
pParentSql
->
res
.
code
=
numOfRows
;
pParentSql
->
res
.
code
=
numOfRows
;
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
);
if
(
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
))
{
return
;
}
tscAsyncResultOnError
(
pParentSql
);
tscAsyncResultOnError
(
pParentSql
);
return
;
return
;
...
@@ -867,7 +872,9 @@ static void tidTagRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
...
@@ -867,7 +872,9 @@ static void tidTagRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
tscError
(
"%p failed to malloc memory"
,
pSql
);
tscError
(
"%p failed to malloc memory"
,
pSql
);
pParentSql
->
res
.
code
=
TAOS_SYSTEM_ERROR
(
errno
);
pParentSql
->
res
.
code
=
TAOS_SYSTEM_ERROR
(
errno
);
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
);
if
(
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
))
{
return
;
}
tscAsyncResultOnError
(
pParentSql
);
tscAsyncResultOnError
(
pParentSql
);
return
;
return
;
...
@@ -985,7 +992,9 @@ static void tsCompRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
...
@@ -985,7 +992,9 @@ static void tsCompRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
if
(
pParentSql
->
res
.
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
pParentSql
->
res
.
code
!=
TSDB_CODE_SUCCESS
)
{
tscError
(
"%p abort query due to other subquery failure. code:%d, global code:%d"
,
pSql
,
numOfRows
,
pParentSql
->
res
.
code
);
tscError
(
"%p abort query due to other subquery failure. code:%d, global code:%d"
,
pSql
,
numOfRows
,
pParentSql
->
res
.
code
);
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
);
if
(
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
)){
return
;
}
tscAsyncResultOnError
(
pParentSql
);
tscAsyncResultOnError
(
pParentSql
);
...
@@ -999,7 +1008,9 @@ static void tsCompRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
...
@@ -999,7 +1008,9 @@ static void tsCompRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
tscError
(
"%p sub query failed, code:%s, index:%d"
,
pSql
,
tstrerror
(
numOfRows
),
pSupporter
->
subqueryIndex
);
tscError
(
"%p sub query failed, code:%s, index:%d"
,
pSql
,
tstrerror
(
numOfRows
),
pSupporter
->
subqueryIndex
);
pParentSql
->
res
.
code
=
numOfRows
;
pParentSql
->
res
.
code
=
numOfRows
;
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
);
if
(
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
)){
return
;
}
tscAsyncResultOnError
(
pParentSql
);
tscAsyncResultOnError
(
pParentSql
);
return
;
return
;
...
@@ -1014,7 +1025,9 @@ static void tsCompRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
...
@@ -1014,7 +1025,9 @@ static void tsCompRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
pParentSql
->
res
.
code
=
TAOS_SYSTEM_ERROR
(
errno
);
pParentSql
->
res
.
code
=
TAOS_SYSTEM_ERROR
(
errno
);
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
);
if
(
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
))
{
return
;
}
tscAsyncResultOnError
(
pParentSql
);
tscAsyncResultOnError
(
pParentSql
);
...
@@ -1032,7 +1045,9 @@ static void tsCompRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
...
@@ -1032,7 +1045,9 @@ static void tsCompRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
pParentSql
->
res
.
code
=
TAOS_SYSTEM_ERROR
(
errno
);
pParentSql
->
res
.
code
=
TAOS_SYSTEM_ERROR
(
errno
);
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
);
if
(
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
)){
return
;
}
tscAsyncResultOnError
(
pParentSql
);
tscAsyncResultOnError
(
pParentSql
);
...
@@ -1129,8 +1144,10 @@ static void joinRetrieveFinalResCallback(void* param, TAOS_RES* tres, int numOfR
...
@@ -1129,8 +1144,10 @@ static void joinRetrieveFinalResCallback(void* param, TAOS_RES* tres, int numOfR
if
(
pParentSql
->
res
.
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
pParentSql
->
res
.
code
!=
TSDB_CODE_SUCCESS
)
{
tscError
(
"%p abort query due to other subquery failure. code:%d, global code:%d"
,
pSql
,
numOfRows
,
pParentSql
->
res
.
code
);
tscError
(
"%p abort query due to other subquery failure. code:%d, global code:%d"
,
pSql
,
numOfRows
,
pParentSql
->
res
.
code
);
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
);
if
(
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
))
{
return
;
}
tscAsyncResultOnError
(
pParentSql
);
tscAsyncResultOnError
(
pParentSql
);
return
;
return
;
...
@@ -1472,7 +1489,9 @@ void tscJoinQueryCallback(void* param, TAOS_RES* tres, int code) {
...
@@ -1472,7 +1489,9 @@ void tscJoinQueryCallback(void* param, TAOS_RES* tres, int code) {
// retrieve actual query results from vnode during the second stage join subquery
// retrieve actual query results from vnode during the second stage join subquery
if
(
pParentSql
->
res
.
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
pParentSql
->
res
.
code
!=
TSDB_CODE_SUCCESS
)
{
tscError
(
"%p abort query due to other subquery failure. code:%d, global code:%d"
,
pSql
,
code
,
pParentSql
->
res
.
code
);
tscError
(
"%p abort query due to other subquery failure. code:%d, global code:%d"
,
pSql
,
code
,
pParentSql
->
res
.
code
);
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
);
if
(
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
))
{
return
;
}
tscAsyncResultOnError
(
pParentSql
);
tscAsyncResultOnError
(
pParentSql
);
...
@@ -1486,7 +1505,10 @@ void tscJoinQueryCallback(void* param, TAOS_RES* tres, int code) {
...
@@ -1486,7 +1505,10 @@ void tscJoinQueryCallback(void* param, TAOS_RES* tres, int code) {
tscError
(
"%p abort query, code:%s, global code:%s"
,
pSql
,
tstrerror
(
code
),
tstrerror
(
pParentSql
->
res
.
code
));
tscError
(
"%p abort query, code:%s, global code:%s"
,
pSql
,
tstrerror
(
code
),
tstrerror
(
pParentSql
->
res
.
code
));
pParentSql
->
res
.
code
=
code
;
pParentSql
->
res
.
code
=
code
;
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
);
if
(
quitAllSubquery
(
pSql
,
pParentSql
,
pSupporter
))
{
return
;
}
tscAsyncResultOnError
(
pParentSql
);
tscAsyncResultOnError
(
pParentSql
);
return
;
return
;
...
@@ -2441,7 +2463,7 @@ static void multiVnodeInsertFinalize(void* param, TAOS_RES* tres, int numOfRows)
...
@@ -2441,7 +2463,7 @@ static void multiVnodeInsertFinalize(void* param, TAOS_RES* tres, int numOfRows)
pParentObj
->
cmd
.
parseFinished
=
false
;
pParentObj
->
cmd
.
parseFinished
=
false
;
tscResetSqlCmd
Obj
(
&
pParentObj
->
cmd
);
tscResetSqlCmd
(
&
pParentObj
->
cmd
,
false
);
// in case of insert, redo parsing the sql string and build new submit data block for two reasons:
// in case of insert, redo parsing the sql string and build new submit data block for two reasons:
// 1. the table Id(tid & uid) may have been update, the submit block needs to be updated accordingly.
// 1. the table Id(tid & uid) may have been update, the submit block needs to be updated accordingly.
...
...
src/client/src/tscUtil.c
浏览文件 @
e7614def
...
@@ -16,7 +16,7 @@
...
@@ -16,7 +16,7 @@
#include "tscUtil.h"
#include "tscUtil.h"
#include "hash.h"
#include "hash.h"
#include "os.h"
#include "os.h"
#include "
qAst
.h"
#include "
texpr
.h"
#include "taosmsg.h"
#include "taosmsg.h"
#include "tkey.h"
#include "tkey.h"
#include "tmd5.h"
#include "tmd5.h"
...
@@ -381,7 +381,7 @@ void tscFreeQueryInfo(SSqlCmd* pCmd) {
...
@@ -381,7 +381,7 @@ void tscFreeQueryInfo(SSqlCmd* pCmd) {
tfree
(
pCmd
->
pQueryInfo
);
tfree
(
pCmd
->
pQueryInfo
);
}
}
void
tscResetSqlCmd
Obj
(
SSqlCmd
*
pCmd
)
{
void
tscResetSqlCmd
(
SSqlCmd
*
pCmd
,
bool
removeMeta
)
{
pCmd
->
command
=
0
;
pCmd
->
command
=
0
;
pCmd
->
numOfCols
=
0
;
pCmd
->
numOfCols
=
0
;
pCmd
->
count
=
0
;
pCmd
->
count
=
0
;
...
@@ -399,7 +399,7 @@ void tscResetSqlCmdObj(SSqlCmd* pCmd) {
...
@@ -399,7 +399,7 @@ void tscResetSqlCmdObj(SSqlCmd* pCmd) {
pCmd
->
numOfTables
=
0
;
pCmd
->
numOfTables
=
0
;
tfree
(
pCmd
->
pTableNameList
);
tfree
(
pCmd
->
pTableNameList
);
pCmd
->
pTableBlockHashList
=
tscDestroyBlockHashTable
(
pCmd
->
pTableBlockHashList
);
pCmd
->
pTableBlockHashList
=
tscDestroyBlockHashTable
(
pCmd
->
pTableBlockHashList
,
removeMeta
);
pCmd
->
pDataBlocks
=
tscDestroyBlockArrayList
(
pCmd
->
pDataBlocks
);
pCmd
->
pDataBlocks
=
tscDestroyBlockArrayList
(
pCmd
->
pDataBlocks
);
tscFreeQueryInfo
(
pCmd
);
tscFreeQueryInfo
(
pCmd
);
}
}
...
@@ -501,7 +501,7 @@ void tscFreeSqlObj(SSqlObj* pSql) {
...
@@ -501,7 +501,7 @@ void tscFreeSqlObj(SSqlObj* pSql) {
pSql
->
self
=
0
;
pSql
->
self
=
0
;
tscFreeSqlResult
(
pSql
);
tscFreeSqlResult
(
pSql
);
tscResetSqlCmd
Obj
(
pCmd
);
tscResetSqlCmd
(
pCmd
,
false
);
tfree
(
pCmd
->
tagData
.
data
);
tfree
(
pCmd
->
tagData
.
data
);
pCmd
->
tagData
.
dataLen
=
0
;
pCmd
->
tagData
.
dataLen
=
0
;
...
@@ -515,7 +515,7 @@ void tscFreeSqlObj(SSqlObj* pSql) {
...
@@ -515,7 +515,7 @@ void tscFreeSqlObj(SSqlObj* pSql) {
free
(
pSql
);
free
(
pSql
);
}
}
void
tscDestroyDataBlock
(
STableDataBlocks
*
pDataBlock
)
{
void
tscDestroyDataBlock
(
STableDataBlocks
*
pDataBlock
,
bool
removeMeta
)
{
if
(
pDataBlock
==
NULL
)
{
if
(
pDataBlock
==
NULL
)
{
return
;
return
;
}
}
...
@@ -528,6 +528,13 @@ void tscDestroyDataBlock(STableDataBlocks* pDataBlock) {
...
@@ -528,6 +528,13 @@ void tscDestroyDataBlock(STableDataBlocks* pDataBlock) {
tfree
(
pDataBlock
->
pTableMeta
);
tfree
(
pDataBlock
->
pTableMeta
);
}
}
if
(
removeMeta
)
{
char
name
[
TSDB_TABLE_FNAME_LEN
]
=
{
0
};
tNameExtractFullName
(
&
pDataBlock
->
tableName
,
name
);
taosHashRemove
(
tscTableMetaInfo
,
name
,
strnlen
(
name
,
TSDB_TABLE_FNAME_LEN
));
}
tfree
(
pDataBlock
);
tfree
(
pDataBlock
);
}
}
...
@@ -563,21 +570,21 @@ void* tscDestroyBlockArrayList(SArray* pDataBlockList) {
...
@@ -563,21 +570,21 @@ void* tscDestroyBlockArrayList(SArray* pDataBlockList) {
size_t
size
=
taosArrayGetSize
(
pDataBlockList
);
size_t
size
=
taosArrayGetSize
(
pDataBlockList
);
for
(
int32_t
i
=
0
;
i
<
size
;
i
++
)
{
for
(
int32_t
i
=
0
;
i
<
size
;
i
++
)
{
void
*
d
=
taosArrayGetP
(
pDataBlockList
,
i
);
void
*
d
=
taosArrayGetP
(
pDataBlockList
,
i
);
tscDestroyDataBlock
(
d
);
tscDestroyDataBlock
(
d
,
false
);
}
}
taosArrayDestroy
(
pDataBlockList
);
taosArrayDestroy
(
pDataBlockList
);
return
NULL
;
return
NULL
;
}
}
void
*
tscDestroyBlockHashTable
(
SHashObj
*
pBlockHashTable
)
{
void
*
tscDestroyBlockHashTable
(
SHashObj
*
pBlockHashTable
,
bool
removeMeta
)
{
if
(
pBlockHashTable
==
NULL
)
{
if
(
pBlockHashTable
==
NULL
)
{
return
NULL
;
return
NULL
;
}
}
STableDataBlocks
**
p
=
taosHashIterate
(
pBlockHashTable
,
NULL
);
STableDataBlocks
**
p
=
taosHashIterate
(
pBlockHashTable
,
NULL
);
while
(
p
)
{
while
(
p
)
{
tscDestroyDataBlock
(
*
p
);
tscDestroyDataBlock
(
*
p
,
removeMeta
);
p
=
taosHashIterate
(
pBlockHashTable
,
p
);
p
=
taosHashIterate
(
pBlockHashTable
,
p
);
}
}
...
@@ -791,7 +798,7 @@ static void extractTableNameList(SSqlCmd* pCmd, bool freeBlockMap) {
...
@@ -791,7 +798,7 @@ static void extractTableNameList(SSqlCmd* pCmd, bool freeBlockMap) {
}
}
if
(
freeBlockMap
)
{
if
(
freeBlockMap
)
{
pCmd
->
pTableBlockHashList
=
tscDestroyBlockHashTable
(
pCmd
->
pTableBlockHashList
);
pCmd
->
pTableBlockHashList
=
tscDestroyBlockHashTable
(
pCmd
->
pTableBlockHashList
,
false
);
}
}
}
}
...
@@ -1047,7 +1054,7 @@ void tscFieldInfoClear(SFieldInfo* pFieldInfo) {
...
@@ -1047,7 +1054,7 @@ void tscFieldInfoClear(SFieldInfo* pFieldInfo) {
SInternalField
*
pInfo
=
taosArrayGet
(
pFieldInfo
->
internalField
,
i
);
SInternalField
*
pInfo
=
taosArrayGet
(
pFieldInfo
->
internalField
,
i
);
if
(
pInfo
->
pArithExprInfo
!=
NULL
)
{
if
(
pInfo
->
pArithExprInfo
!=
NULL
)
{
tExprTreeDestroy
(
&
pInfo
->
pArithExprInfo
->
pExpr
,
NULL
);
tExprTreeDestroy
(
pInfo
->
pArithExprInfo
->
pExpr
,
NULL
);
SSqlFuncMsg
*
pFuncMsg
=
&
pInfo
->
pArithExprInfo
->
base
;
SSqlFuncMsg
*
pFuncMsg
=
&
pInfo
->
pArithExprInfo
->
base
;
for
(
int32_t
j
=
0
;
j
<
pFuncMsg
->
numOfParams
;
++
j
)
{
for
(
int32_t
j
=
0
;
j
<
pFuncMsg
->
numOfParams
;
++
j
)
{
...
@@ -1080,6 +1087,8 @@ static SSqlExpr* doBuildSqlExpr(SQueryInfo* pQueryInfo, int16_t functionId, SCol
...
@@ -1080,6 +1087,8 @@ static SSqlExpr* doBuildSqlExpr(SQueryInfo* pQueryInfo, int16_t functionId, SCol
// set the correct columnIndex index
// set the correct columnIndex index
if
(
pColIndex
->
columnIndex
==
TSDB_TBNAME_COLUMN_INDEX
)
{
if
(
pColIndex
->
columnIndex
==
TSDB_TBNAME_COLUMN_INDEX
)
{
pExpr
->
colInfo
.
colId
=
TSDB_TBNAME_COLUMN_INDEX
;
pExpr
->
colInfo
.
colId
=
TSDB_TBNAME_COLUMN_INDEX
;
}
else
if
(
pColIndex
->
columnIndex
==
TSDB_BLOCK_DIST_COLUMN_INDEX
)
{
pExpr
->
colInfo
.
colId
=
TSDB_BLOCK_DIST_COLUMN_INDEX
;
}
else
if
(
pColIndex
->
columnIndex
<=
TSDB_UD_COLUMN_INDEX
)
{
}
else
if
(
pColIndex
->
columnIndex
<=
TSDB_UD_COLUMN_INDEX
)
{
pExpr
->
colInfo
.
colId
=
pColIndex
->
columnIndex
;
pExpr
->
colInfo
.
colId
=
pColIndex
->
columnIndex
;
}
else
{
}
else
{
...
@@ -1496,7 +1505,7 @@ bool tscValidateColumnId(STableMetaInfo* pTableMetaInfo, int32_t colId, int32_t
...
@@ -1496,7 +1505,7 @@ bool tscValidateColumnId(STableMetaInfo* pTableMetaInfo, int32_t colId, int32_t
return
false
;
return
false
;
}
}
if
(
colId
==
TSDB_TBNAME_COLUMN_INDEX
||
(
colId
<=
TSDB_UD_COLUMN_INDEX
&&
numOfParams
==
2
))
{
if
(
colId
==
TSDB_TBNAME_COLUMN_INDEX
||
colId
==
TSDB_BLOCK_DIST_COLUMN_INDEX
||
(
colId
<=
TSDB_UD_COLUMN_INDEX
&&
numOfParams
==
2
))
{
return
true
;
return
true
;
}
}
...
...
src/
query/inc/qArithmeticO
perator.h
→
src/
common/inc/taritho
perator.h
浏览文件 @
e7614def
文件已移动
src/
query/inc/qAst
.h
→
src/
common/inc/texpr
.h
浏览文件 @
e7614def
...
@@ -31,6 +31,15 @@ extern "C" {
...
@@ -31,6 +31,15 @@ extern "C" {
struct
tExprNode
;
struct
tExprNode
;
struct
SSchema
;
struct
SSchema
;
#define QUERY_COND_REL_PREFIX_IN "IN|"
#define QUERY_COND_REL_PREFIX_LIKE "LIKE|"
#define QUERY_COND_REL_PREFIX_IN_LEN 3
#define QUERY_COND_REL_PREFIX_LIKE_LEN 5
typedef
bool
(
*
__result_filter_fn_t
)(
const
void
*
,
void
*
);
typedef
void
(
*
__do_filter_suppl_fn_t
)(
void
*
,
void
*
);
enum
{
enum
{
TSQL_NODE_DUMMY
=
0x0
,
TSQL_NODE_DUMMY
=
0x0
,
TSQL_NODE_EXPR
=
0x1
,
TSQL_NODE_EXPR
=
0x1
,
...
@@ -38,9 +47,6 @@ enum {
...
@@ -38,9 +47,6 @@ enum {
TSQL_NODE_VALUE
=
0x4
,
TSQL_NODE_VALUE
=
0x4
,
};
};
typedef
bool
(
*
__result_filter_fn_t
)(
const
void
*
,
void
*
);
typedef
void
(
*
__do_filter_suppl_fn_t
)(
void
*
,
void
*
);
/**
/**
* this structure is used to filter data in tags, so the offset of filtered tag column in tagdata string is required
* this structure is used to filter data in tags, so the offset of filtered tag column in tagdata string is required
*/
*/
...
@@ -52,12 +58,6 @@ typedef struct tQueryInfo {
...
@@ -52,12 +58,6 @@ typedef struct tQueryInfo {
bool
indexed
;
// indexed columns
bool
indexed
;
// indexed columns
}
tQueryInfo
;
}
tQueryInfo
;
typedef
struct
SExprTraverseSupp
{
__result_filter_fn_t
nodeFilterFn
;
__do_filter_suppl_fn_t
setupInfoFn
;
void
*
pExtInfo
;
}
SExprTraverseSupp
;
typedef
struct
tExprNode
{
typedef
struct
tExprNode
{
uint8_t
nodeType
;
uint8_t
nodeType
;
union
{
union
{
...
@@ -65,7 +65,7 @@ typedef struct tExprNode {
...
@@ -65,7 +65,7 @@ typedef struct tExprNode {
uint8_t
optr
;
// filter operator
uint8_t
optr
;
// filter operator
uint8_t
hasPK
;
// 0: do not contain primary filter, 1: contain
uint8_t
hasPK
;
// 0: do not contain primary filter, 1: contain
void
*
info
;
// support filter operation on this expression only available for leaf node
void
*
info
;
// support filter operation on this expression only available for leaf node
struct
tExprNode
*
pLeft
;
// left child pointer
struct
tExprNode
*
pLeft
;
// left child pointer
struct
tExprNode
*
pRight
;
// right child pointer
struct
tExprNode
*
pRight
;
// right child pointer
}
_node
;
}
_node
;
...
@@ -74,19 +74,27 @@ typedef struct tExprNode {
...
@@ -74,19 +74,27 @@ typedef struct tExprNode {
};
};
}
tExprNode
;
}
tExprNode
;
void
arithmeticTreeTraverse
(
tExprNode
*
pExprs
,
int32_t
numOfRows
,
char
*
pOutput
,
void
*
param
,
int32_t
order
,
typedef
struct
SExprTraverseSupp
{
char
*
(
*
cb
)(
void
*
,
const
char
*
,
int32_t
));
__result_filter_fn_t
nodeFilterFn
;
__do_filter_suppl_fn_t
setupInfoFn
;
void
*
pExtInfo
;
}
SExprTraverseSupp
;
void
tExprTreeDestroy
(
tExprNode
*
pNode
,
void
(
*
fp
)(
void
*
));
tExprNode
*
exprTreeFromBinary
(
const
void
*
data
,
size_t
size
);
tExprNode
*
exprTreeFromBinary
(
const
void
*
data
,
size_t
size
);
tExprNode
*
exprTreeFromTableName
(
const
char
*
tbnameCond
);
tExprNode
*
exprTreeFromTableName
(
const
char
*
tbnameCond
);
void
exprTreeToBinary
(
SBufferWriter
*
bw
,
tExprNode
*
pExprTree
);
void
exprTreeToBinary
(
SBufferWriter
*
bw
,
tExprNode
*
pExprTree
);
void
tExprNodeDestroy
(
tExprNode
*
pNode
,
void
(
*
fp
)(
void
*
));
void
tExprTreeDestroy
(
tExprNode
**
pExprs
,
void
(
*
fp
)(
void
*
));
bool
exprTreeApplayFilter
(
tExprNode
*
pExpr
,
const
void
*
pItem
,
SExprTraverseSupp
*
param
);
bool
exprTreeApplayFilter
(
tExprNode
*
pExpr
,
const
void
*
pItem
,
SExprTraverseSupp
*
param
);
typedef
void
(
*
_arithmetic_operator_fn_t
)(
void
*
left
,
int32_t
numLeft
,
int32_t
leftType
,
void
*
right
,
int32_t
numRight
,
int32_t
rightType
,
void
*
output
,
int32_t
order
);
void
arithmeticTreeTraverse
(
tExprNode
*
pExprs
,
int32_t
numOfRows
,
char
*
pOutput
,
void
*
param
,
int32_t
order
,
char
*
(
*
cb
)(
void
*
,
const
char
*
,
int32_t
));
#ifdef __cplusplus
#ifdef __cplusplus
}
}
#endif
#endif
...
...
src/common/inc/tname.h
浏览文件 @
e7614def
/*
* 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/>.
*/
#ifndef TDENGINE_NAME_H
#ifndef TDENGINE_NAME_H
#define TDENGINE_NAME_H
#define TDENGINE_NAME_H
...
@@ -45,6 +60,8 @@ void extractTableNameFromToken(SStrToken *pToken, SStrToken* pTable);
...
@@ -45,6 +60,8 @@ void extractTableNameFromToken(SStrToken *pToken, SStrToken* pTable);
SSchema
tGetTableNameColumnSchema
();
SSchema
tGetTableNameColumnSchema
();
SSchema
tGetBlockDistColumnSchema
();
SSchema
tGetUserSpecifiedColumnSchema
(
tVariant
*
pVal
,
SStrToken
*
exprStr
,
const
char
*
name
);
SSchema
tGetUserSpecifiedColumnSchema
(
tVariant
*
pVal
,
SStrToken
*
exprStr
,
const
char
*
name
);
bool
tscValidateTableNameLength
(
size_t
len
);
bool
tscValidateTableNameLength
(
size_t
len
);
...
...
src/
query/src/qArithmeticO
perator.c
→
src/
common/src/taritho
perator.c
浏览文件 @
e7614def
...
@@ -15,9 +15,9 @@
...
@@ -15,9 +15,9 @@
#include "os.h"
#include "os.h"
#include "qArithmeticOperator.h"
#include "ttype.h"
#include "ttype.h"
#include "tutil.h"
#include "tutil.h"
#include "tarithoperator.h"
#define ARRAY_LIST_OP(left, right, _left_type, _right_type, len1, len2, out, op, _res_type, _ord) \
#define ARRAY_LIST_OP(left, right, _left_type, _right_type, len1, len2, out, op, _res_type, _ord) \
{ \
{ \
...
...
src/
query/src/qAst
.c
→
src/
common/src/texpr
.c
浏览文件 @
e7614def
...
@@ -16,18 +16,15 @@
...
@@ -16,18 +16,15 @@
#include "os.h"
#include "os.h"
#include "exception.h"
#include "exception.h"
#include "qArithmeticOperator.h"
#include "qAst.h"
#include "taosdef.h"
#include "taosdef.h"
#include "taosmsg.h"
#include "taosmsg.h"
#include "tarray.h"
#include "tarray.h"
#include "tbuffer.h"
#include "tbuffer.h"
#include "tcompare.h"
#include "tcompare.h"
#include "tname.h"
#include "tschemautil.h"
#include "tsdb.h"
#include "tsdb.h"
#include "tskiplist.h"
#include "tskiplist.h"
#include "tsqlfunction.h"
#include "texpr.h"
#include "tarithoperator.h"
static
uint8_t
UNUSED_FUNC
isQueryOnPrimaryKey
(
const
char
*
primaryColumnName
,
const
tExprNode
*
pLeft
,
const
tExprNode
*
pRight
)
{
static
uint8_t
UNUSED_FUNC
isQueryOnPrimaryKey
(
const
char
*
primaryColumnName
,
const
tExprNode
*
pLeft
,
const
tExprNode
*
pRight
)
{
if
(
pLeft
->
nodeType
==
TSQL_NODE_COL
)
{
if
(
pLeft
->
nodeType
==
TSQL_NODE_COL
)
{
...
@@ -102,13 +99,15 @@ static void reverseCopy(char* dest, const char* src, int16_t type, int32_t numOf
...
@@ -102,13 +99,15 @@ static void reverseCopy(char* dest, const char* src, int16_t type, int32_t numOf
}
}
}
}
void
tExprNodeDestroy
(
tExprNode
*
pNode
,
void
(
*
fp
)(
void
*
))
{
static
void
doExprTreeDestroy
(
tExprNode
**
pExpr
,
void
(
*
fp
)(
void
*
));
void
tExprTreeDestroy
(
tExprNode
*
pNode
,
void
(
*
fp
)(
void
*
))
{
if
(
pNode
==
NULL
)
{
if
(
pNode
==
NULL
)
{
return
;
return
;
}
}
if
(
pNode
->
nodeType
==
TSQL_NODE_EXPR
)
{
if
(
pNode
->
nodeType
==
TSQL_NODE_EXPR
)
{
t
ExprTreeDestroy
(
&
pNode
,
fp
);
do
ExprTreeDestroy
(
&
pNode
,
fp
);
}
else
if
(
pNode
->
nodeType
==
TSQL_NODE_VALUE
)
{
}
else
if
(
pNode
->
nodeType
==
TSQL_NODE_VALUE
)
{
tVariantDestroy
(
pNode
->
pVal
);
tVariantDestroy
(
pNode
->
pVal
);
}
else
if
(
pNode
->
nodeType
==
TSQL_NODE_COL
)
{
}
else
if
(
pNode
->
nodeType
==
TSQL_NODE_COL
)
{
...
@@ -118,14 +117,14 @@ void tExprNodeDestroy(tExprNode *pNode, void (*fp)(void *)) {
...
@@ -118,14 +117,14 @@ void tExprNodeDestroy(tExprNode *pNode, void (*fp)(void *)) {
free
(
pNode
);
free
(
pNode
);
}
}
void
t
ExprTreeDestroy
(
tExprNode
**
pExpr
,
void
(
*
fp
)(
void
*
))
{
static
void
do
ExprTreeDestroy
(
tExprNode
**
pExpr
,
void
(
*
fp
)(
void
*
))
{
if
(
*
pExpr
==
NULL
)
{
if
(
*
pExpr
==
NULL
)
{
return
;
return
;
}
}
if
((
*
pExpr
)
->
nodeType
==
TSQL_NODE_EXPR
)
{
if
((
*
pExpr
)
->
nodeType
==
TSQL_NODE_EXPR
)
{
t
ExprTreeDestroy
(
&
(
*
pExpr
)
->
_node
.
pLeft
,
fp
);
do
ExprTreeDestroy
(
&
(
*
pExpr
)
->
_node
.
pLeft
,
fp
);
t
ExprTreeDestroy
(
&
(
*
pExpr
)
->
_node
.
pRight
,
fp
);
do
ExprTreeDestroy
(
&
(
*
pExpr
)
->
_node
.
pRight
,
fp
);
if
(
fp
!=
NULL
)
{
if
(
fp
!=
NULL
)
{
fp
((
*
pExpr
)
->
_node
.
info
);
fp
((
*
pExpr
)
->
_node
.
info
);
...
@@ -270,8 +269,9 @@ void arithmeticTreeTraverse(tExprNode *pExprs, int32_t numOfRows, char *pOutput,
...
@@ -270,8 +269,9 @@ void arithmeticTreeTraverse(tExprNode *pExprs, int32_t numOfRows, char *pOutput,
}
}
}
}
free
(
pLeftOutput
);
tfree
(
pdata
);
free
(
pRightOutput
);
tfree
(
pLeftOutput
);
tfree
(
pRightOutput
);
}
}
static
void
exprTreeToBinaryImpl
(
SBufferWriter
*
bw
,
tExprNode
*
expr
)
{
static
void
exprTreeToBinaryImpl
(
SBufferWriter
*
bw
,
tExprNode
*
expr
)
{
...
@@ -342,7 +342,7 @@ static tExprNode* exprTreeFromBinaryImpl(SBufferReader* br) {
...
@@ -342,7 +342,7 @@ static tExprNode* exprTreeFromBinaryImpl(SBufferReader* br) {
}
}
tExprNode
*
pExpr
=
exception_calloc
(
1
,
sizeof
(
tExprNode
));
tExprNode
*
pExpr
=
exception_calloc
(
1
,
sizeof
(
tExprNode
));
CLEANUP_PUSH_VOID_PTR_PTR
(
true
,
tExpr
Nod
eDestroy
,
pExpr
,
NULL
);
CLEANUP_PUSH_VOID_PTR_PTR
(
true
,
tExpr
Tre
eDestroy
,
pExpr
,
NULL
);
pExpr
->
nodeType
=
tbufReadUint8
(
br
);
pExpr
->
nodeType
=
tbufReadUint8
(
br
);
if
(
pExpr
->
nodeType
==
TSQL_NODE_VALUE
)
{
if
(
pExpr
->
nodeType
==
TSQL_NODE_VALUE
)
{
...
@@ -396,7 +396,7 @@ tExprNode* exprTreeFromTableName(const char* tbnameCond) {
...
@@ -396,7 +396,7 @@ tExprNode* exprTreeFromTableName(const char* tbnameCond) {
int32_t
anchor
=
CLEANUP_GET_ANCHOR
();
int32_t
anchor
=
CLEANUP_GET_ANCHOR
();
tExprNode
*
expr
=
exception_calloc
(
1
,
sizeof
(
tExprNode
));
tExprNode
*
expr
=
exception_calloc
(
1
,
sizeof
(
tExprNode
));
CLEANUP_PUSH_VOID_PTR_PTR
(
true
,
tExpr
Nod
eDestroy
,
expr
,
NULL
);
CLEANUP_PUSH_VOID_PTR_PTR
(
true
,
tExpr
Tre
eDestroy
,
expr
,
NULL
);
expr
->
nodeType
=
TSQL_NODE_EXPR
;
expr
->
nodeType
=
TSQL_NODE_EXPR
;
...
...
src/common/src/tname.c
浏览文件 @
e7614def
...
@@ -39,6 +39,14 @@ SSchema tGetTableNameColumnSchema() {
...
@@ -39,6 +39,14 @@ SSchema tGetTableNameColumnSchema() {
tstrncpy
(
s
.
name
,
TSQL_TBNAME_L
,
TSDB_COL_NAME_LEN
);
tstrncpy
(
s
.
name
,
TSQL_TBNAME_L
,
TSDB_COL_NAME_LEN
);
return
s
;
return
s
;
}
}
SSchema
tGetBlockDistColumnSchema
()
{
SSchema
s
=
{
0
};
s
.
bytes
=
TSDB_MAX_BINARY_LEN
;;
s
.
type
=
TSDB_DATA_TYPE_BINARY
;
s
.
colId
=
TSDB_BLOCK_DIST_COLUMN_INDEX
;
tstrncpy
(
s
.
name
,
TSQL_BLOCK_DIST_L
,
TSDB_COL_NAME_LEN
);
return
s
;
}
SSchema
tGetUserSpecifiedColumnSchema
(
tVariant
*
pVal
,
SStrToken
*
exprStr
,
const
char
*
name
)
{
SSchema
tGetUserSpecifiedColumnSchema
(
tVariant
*
pVal
,
SStrToken
*
exprStr
,
const
char
*
name
)
{
SSchema
s
=
{
0
};
SSchema
s
=
{
0
};
...
@@ -367,6 +375,9 @@ int32_t tNameSetAcctId(SName* dst, const char* acct) {
...
@@ -367,6 +375,9 @@ int32_t tNameSetAcctId(SName* dst, const char* acct) {
}
}
tstrncpy
(
dst
->
acctId
,
acct
,
tListLen
(
dst
->
acctId
));
tstrncpy
(
dst
->
acctId
,
acct
,
tListLen
(
dst
->
acctId
));
assert
(
strlen
(
dst
->
acctId
)
>
0
);
return
0
;
return
0
;
}
}
...
@@ -383,12 +394,14 @@ int32_t tNameFromString(SName* dst, const char* str, uint32_t type) {
...
@@ -383,12 +394,14 @@ int32_t tNameFromString(SName* dst, const char* str, uint32_t type) {
int32_t
len
=
(
int32_t
)(
p
-
str
);
int32_t
len
=
(
int32_t
)(
p
-
str
);
// too long account id or too long db name
// too long account id or too long db name
if
(
len
>=
tListLen
(
dst
->
acctId
)
||
len
==
0
)
{
if
(
(
len
>=
tListLen
(
dst
->
acctId
))
||
(
len
<=
0
)
)
{
return
-
1
;
return
-
1
;
}
}
memcpy
(
dst
->
acctId
,
str
,
len
);
memcpy
(
dst
->
acctId
,
str
,
len
);
dst
->
acctId
[
len
]
=
0
;
dst
->
acctId
[
len
]
=
0
;
assert
(
strlen
(
dst
->
acctId
)
>
0
);
}
}
if
((
type
&
T_NAME_DB
)
==
T_NAME_DB
)
{
if
((
type
&
T_NAME_DB
)
==
T_NAME_DB
)
{
...
@@ -404,7 +417,7 @@ int32_t tNameFromString(SName* dst, const char* str, uint32_t type) {
...
@@ -404,7 +417,7 @@ int32_t tNameFromString(SName* dst, const char* str, uint32_t type) {
}
}
// too long account id or too long db name
// too long account id or too long db name
if
(
len
>=
tListLen
(
dst
->
dbname
)
||
len
==
0
)
{
if
(
(
len
>=
tListLen
(
dst
->
dbname
))
||
(
len
<=
0
)
)
{
return
-
1
;
return
-
1
;
}
}
...
@@ -419,7 +432,7 @@ int32_t tNameFromString(SName* dst, const char* str, uint32_t type) {
...
@@ -419,7 +432,7 @@ int32_t tNameFromString(SName* dst, const char* str, uint32_t type) {
int32_t
len
=
(
int32_t
)
strlen
(
start
);
int32_t
len
=
(
int32_t
)
strlen
(
start
);
// too long account id or too long db name
// too long account id or too long db name
if
(
len
>=
tListLen
(
dst
->
tname
)
||
len
==
0
)
{
if
(
(
len
>=
tListLen
(
dst
->
tname
))
||
(
len
<=
0
)
)
{
return
-
1
;
return
-
1
;
}
}
...
...
src/inc/taosdef.h
浏览文件 @
e7614def
...
@@ -235,7 +235,9 @@ do { \
...
@@ -235,7 +235,9 @@ do { \
#define TSDB_MAX_REPLICA 5
#define TSDB_MAX_REPLICA 5
#define TSDB_TBNAME_COLUMN_INDEX (-1)
#define TSDB_TBNAME_COLUMN_INDEX (-1)
#define TSDB_BLOCK_DIST_COLUMN_INDEX (-2)
#define TSDB_UD_COLUMN_INDEX (-100)
#define TSDB_UD_COLUMN_INDEX (-100)
#define TSDB_MULTI_TABLEMETA_MAX_NUM 100000 // maximum batch size allowed to load table meta
#define TSDB_MULTI_TABLEMETA_MAX_NUM 100000 // maximum batch size allowed to load table meta
#define TSDB_MIN_CACHE_BLOCK_SIZE 1
#define TSDB_MIN_CACHE_BLOCK_SIZE 1
...
...
src/inc/tsdb.h
浏览文件 @
e7614def
...
@@ -114,6 +114,8 @@ void* tsdbGetTableTagVal(const void* pTable, int32_t colId, int16_t type, int16_
...
@@ -114,6 +114,8 @@ void* tsdbGetTableTagVal(const void* pTable, int32_t colId, int16_t type, int16_
char
*
tsdbGetTableName
(
void
*
pTable
);
char
*
tsdbGetTableName
(
void
*
pTable
);
#define TSDB_TABLEID(_table) ((STableId*) (_table))
#define TSDB_TABLEID(_table) ((STableId*) (_table))
#define TSDB_PREV_ROW 0x1
#define TSDB_NEXT_ROW 0x2
STableCfg
*
tsdbCreateTableCfgFromMsg
(
SMDCreateTableMsg
*
pMsg
);
STableCfg
*
tsdbCreateTableCfgFromMsg
(
SMDCreateTableMsg
*
pMsg
);
...
@@ -141,7 +143,6 @@ typedef struct {
...
@@ -141,7 +143,6 @@ typedef struct {
int64_t
tableTotalDataSize
;
// In bytes
int64_t
tableTotalDataSize
;
// In bytes
int64_t
tableTotalDiskSize
;
// In bytes
int64_t
tableTotalDiskSize
;
// In bytes
}
STableInfo
;
}
STableInfo
;
STableInfo
*
tsdbGetTableInfo
(
TSDB_REPO_T
*
pRepo
,
STableId
tid
);
// -- FOR INSERT DATA
// -- FOR INSERT DATA
/**
/**
...
@@ -160,9 +161,10 @@ typedef void *TsdbQueryHandleT; // Use void to hide implementation details
...
@@ -160,9 +161,10 @@ typedef void *TsdbQueryHandleT; // Use void to hide implementation details
// query condition to build vnode iterator
// query condition to build vnode iterator
typedef
struct
STsdbQueryCond
{
typedef
struct
STsdbQueryCond
{
STimeWindow
twindow
;
STimeWindow
twindow
;
int32_t
order
;
// desc|asc order to iterate the data block
int32_t
order
;
// desc|asc order to iterate the data block
int32_t
numOfCols
;
int32_t
numOfCols
;
SColumnInfo
*
colList
;
SColumnInfo
*
colList
;
bool
loadExternalRows
;
// load external rows or not
}
STsdbQueryCond
;
}
STsdbQueryCond
;
typedef
struct
SMemRef
{
typedef
struct
SMemRef
{
...
@@ -232,13 +234,32 @@ SArray* tsdbGetQueriedTableList(TsdbQueryHandleT *pHandle);
...
@@ -232,13 +234,32 @@ SArray* tsdbGetQueriedTableList(TsdbQueryHandleT *pHandle);
TsdbQueryHandleT
tsdbQueryRowsInExternalWindow
(
TSDB_REPO_T
*
tsdb
,
STsdbQueryCond
*
pCond
,
STableGroupInfo
*
groupList
,
TsdbQueryHandleT
tsdbQueryRowsInExternalWindow
(
TSDB_REPO_T
*
tsdb
,
STsdbQueryCond
*
pCond
,
STableGroupInfo
*
groupList
,
void
*
qinfo
,
SMemRef
*
pRef
);
void
*
qinfo
,
SMemRef
*
pRef
);
/**
* get num of rows in mem table
*
* @param pHandle
* @return row size
*/
int64_t
tsdbGetNumOfRowsInMemTable
(
TsdbQueryHandleT
*
pHandle
);
/**
/**
* move to next block if exists
* move to next block if exists
*
*
* @param pQueryHandle
* @param pQueryHandle
* @return
* @return
*/
*/
bool
tsdbNextDataBlock
(
TsdbQueryHandleT
*
pQueryHandle
);
bool
tsdbNextDataBlock
(
TsdbQueryHandleT
*
pQueryHandle
);
/**
* move to next block if exists but not merge data in memtable
*
* @param pQueryHandle
* @return
*/
bool
tsdbNextDataBlockWithoutMerge
(
TsdbQueryHandleT
*
pQueryHandle
);
SArray
*
tsdbGetExternalRow
(
TsdbQueryHandleT
*
pHandle
,
SMemRef
*
pMemRef
,
int16_t
type
);
/**
/**
* Get current data block information
* Get current data block information
...
...
src/inc/ttokendef.h
浏览文件 @
e7614def
...
@@ -16,6 +16,7 @@
...
@@ -16,6 +16,7 @@
#ifndef TDENGINE_TTOKENDEF_H
#ifndef TDENGINE_TTOKENDEF_H
#define TDENGINE_TTOKENDEF_H
#define TDENGINE_TTOKENDEF_H
#define TK_ID 1
#define TK_ID 1
#define TK_BOOL 2
#define TK_BOOL 2
#define TK_TINYINT 3
#define TK_TINYINT 3
...
@@ -127,104 +128,104 @@
...
@@ -127,104 +128,104 @@
#define TK_SELECT 109
#define TK_SELECT 109
#define TK_UNION 110
#define TK_UNION 110
#define TK_ALL 111
#define TK_ALL 111
#define TK_
FROM
112
#define TK_
DISTINCT
112
#define TK_
VARIABLE
113
#define TK_
FROM
113
#define TK_
INTERVAL
114
#define TK_
VARIABLE
114
#define TK_
FILL
115
#define TK_
INTERVAL
115
#define TK_
SLIDING
116
#define TK_
FILL
116
#define TK_
ORDER
117
#define TK_
SLIDING
117
#define TK_
BY
118
#define TK_
ORDER
118
#define TK_
ASC
119
#define TK_
BY
119
#define TK_
DESC
120
#define TK_
ASC
120
#define TK_
GROUP
121
#define TK_
DESC
121
#define TK_
HAVING
122
#define TK_
GROUP
122
#define TK_
LIMIT
123
#define TK_
HAVING
123
#define TK_
OFFSET
124
#define TK_
LIMIT
124
#define TK_
SLIMI
T 125
#define TK_
OFFSE
T 125
#define TK_S
OFFSET
126
#define TK_S
LIMIT
126
#define TK_
WHERE
127
#define TK_
SOFFSET
127
#define TK_
NOW
128
#define TK_
WHERE
128
#define TK_
RESET
129
#define TK_
NOW
129
#define TK_
QUERY
130
#define TK_
RESET
130
#define TK_
ADD
131
#define TK_
QUERY
131
#define TK_
COLUMN
132
#define TK_
ADD
132
#define TK_
TAG
133
#define TK_
COLUMN
133
#define TK_
CHANGE
134
#define TK_
TAG
134
#define TK_
SET
135
#define TK_
CHANGE
135
#define TK_
KILL
136
#define TK_
SET
136
#define TK_
CONNECTION
137
#define TK_
KILL
137
#define TK_
STREAM
138
#define TK_
CONNECTION
138
#define TK_
COLON
139
#define TK_
STREAM
139
#define TK_
ABORT
140
#define TK_
COLON
140
#define TK_A
FTER
141
#define TK_A
BORT
141
#define TK_A
TTACH
142
#define TK_A
FTER
142
#define TK_
BEFORE
143
#define TK_
ATTACH
143
#define TK_BE
GIN
144
#define TK_BE
FORE
144
#define TK_
CASCADE
145
#define TK_
BEGIN
145
#define TK_C
LUSTER
146
#define TK_C
ASCADE
146
#define TK_C
ONFLICT
147
#define TK_C
LUSTER
147
#define TK_CO
PY
148
#define TK_CO
NFLICT
148
#define TK_
DEFERRED
149
#define TK_
COPY
149
#define TK_DE
LIMITERS
150
#define TK_DE
FERRED
150
#define TK_DE
TACH
151
#define TK_DE
LIMITERS
151
#define TK_
EACH
152
#define TK_
DETACH
152
#define TK_E
ND
153
#define TK_E
ACH
153
#define TK_E
XPLAIN
154
#define TK_E
ND
154
#define TK_
FAIL
155
#define TK_
EXPLAIN
155
#define TK_F
OR
156
#define TK_F
AIL
156
#define TK_
IGNORE
157
#define TK_
FOR
157
#define TK_I
MMEDIATE
158
#define TK_I
GNORE
158
#define TK_I
NITIALLY
159
#define TK_I
MMEDIATE
159
#define TK_IN
STEAD
160
#define TK_IN
ITIALLY
160
#define TK_
MATCH
161
#define TK_
INSTEAD
161
#define TK_
KEY
162
#define TK_
MATCH
162
#define TK_
OF
163
#define TK_
KEY
163
#define TK_
RAISE
164
#define TK_
OF
164
#define TK_R
EPLACE
165
#define TK_R
AISE
165
#define TK_RE
STRICT
166
#define TK_RE
PLACE
166
#define TK_R
OW
167
#define TK_R
ESTRICT
167
#define TK_
STATEMENT
168
#define TK_
ROW
168
#define TK_
TRIGGER
169
#define TK_
STATEMENT
169
#define TK_
VIEW
170
#define TK_
TRIGGER
170
#define TK_
COUNT
171
#define TK_
VIEW
171
#define TK_
SUM
172
#define TK_
COUNT
172
#define TK_
AVG
173
#define TK_
SUM
173
#define TK_
MIN
174
#define TK_
AVG
174
#define TK_M
AX
175
#define TK_M
IN
175
#define TK_
FIRST
176
#define TK_
MAX
176
#define TK_
LAST
177
#define TK_
FIRST
177
#define TK_
TOP
178
#define TK_
LAST
178
#define TK_
BOTTOM
179
#define TK_
TOP
179
#define TK_
STDDEV
180
#define TK_
BOTTOM
180
#define TK_
PERCENTILE
181
#define TK_
STDDEV
181
#define TK_
APERCENTILE
182
#define TK_
PERCENTILE
182
#define TK_
LEASTSQUARES
183
#define TK_
APERCENTILE
183
#define TK_
HISTOGRAM
184
#define TK_
LEASTSQUARES
184
#define TK_
DIFF
185
#define TK_
HISTOGRAM
185
#define TK_
SPREAD
186
#define TK_
DIFF
186
#define TK_
TWA
187
#define TK_
SPREAD
187
#define TK_
INTERP
188
#define TK_
TWA
188
#define TK_
LAST_ROW
189
#define TK_
INTERP
189
#define TK_
RATE
190
#define TK_
LAST_ROW
190
#define TK_
IRATE
191
#define TK_
RATE
191
#define TK_
SUM_RATE
192
#define TK_
IRATE
192
#define TK_SUM_
IRATE
193
#define TK_SUM_
RATE
193
#define TK_
AVG_RATE
194
#define TK_
SUM_IRATE
194
#define TK_AVG_
IRATE
195
#define TK_AVG_
RATE
195
#define TK_
TBID
196
#define TK_
AVG_IRATE
196
#define TK_
SEMI
197
#define TK_
TBID
197
#define TK_
NONE
198
#define TK_
SEMI
198
#define TK_
PREV
199
#define TK_
NONE
199
#define TK_
LINEAR
200
#define TK_
PREV
200
#define TK_
IMPORT
201
#define TK_
LINEAR
201
#define TK_
METRIC
202
#define TK_
IMPORT
202
#define TK_
TBNAME
203
#define TK_
METRIC
203
#define TK_
JOIN
204
#define TK_
TBNAME
204
#define TK_
METRICS
205
#define TK_
JOIN
205
#define TK_
INSERT
206
#define TK_
METRICS
206
#define TK_IN
TO
207
#define TK_IN
SERT
207
#define TK_
VALUES
208
#define TK_
INTO
208
#define TK_VALUES 209
#define TK_SPACE 300
#define TK_SPACE 300
...
...
src/inc/ttype.h
浏览文件 @
e7614def
...
@@ -45,6 +45,7 @@ typedef struct tstr {
...
@@ -45,6 +45,7 @@ typedef struct tstr {
case TSDB_DATA_TYPE_USMALLINT: \
case TSDB_DATA_TYPE_USMALLINT: \
(_v) = (_finalType)GET_UINT16_VAL(_data); \
(_v) = (_finalType)GET_UINT16_VAL(_data); \
break; \
break; \
case TSDB_DATA_TYPE_TIMESTAMP:\
case TSDB_DATA_TYPE_BIGINT: \
case TSDB_DATA_TYPE_BIGINT: \
(_v) = (_finalType)(GET_INT64_VAL(_data)); \
(_v) = (_finalType)(GET_INT64_VAL(_data)); \
break; \
break; \
...
@@ -66,6 +67,43 @@ typedef struct tstr {
...
@@ -66,6 +67,43 @@ typedef struct tstr {
} \
} \
} while (0)
} while (0)
#define SET_TYPED_DATA(_v, _type, _data) \
do { \
switch (_type) { \
case TSDB_DATA_TYPE_BOOL: \
case TSDB_DATA_TYPE_TINYINT: \
*(int8_t *)(_v) = (int8_t)(_data); \
break; \
case TSDB_DATA_TYPE_UTINYINT: \
*(uint8_t *)(_v) = (uint8_t)(_data); \
break; \
case TSDB_DATA_TYPE_SMALLINT: \
*(int16_t *)(_v) = (int16_t)(_data); \
break; \
case TSDB_DATA_TYPE_USMALLINT: \
*(uint16_t *)(_v) = (uint16_t)(_data); \
break; \
case TSDB_DATA_TYPE_BIGINT: \
*(int64_t *)(_v) = (int64_t)(_data); \
break; \
case TSDB_DATA_TYPE_UBIGINT: \
*(uint64_t *)(_v) = (uint64_t)(_data); \
break; \
case TSDB_DATA_TYPE_FLOAT: \
*(float *)(_v) = (float)(_data); \
break; \
case TSDB_DATA_TYPE_DOUBLE: \
*(double *)(_v) = (double)(_data); \
break; \
case TSDB_DATA_TYPE_UINT: \
*(uint32_t *)(_v) = (uint32_t)(_data); \
break; \
default: \
*(int32_t *)(_v) = (int32_t)(_data); \
break; \
} \
} while (0)
#define IS_SIGNED_NUMERIC_TYPE(_t) ((_t) >= TSDB_DATA_TYPE_TINYINT && (_t) <= TSDB_DATA_TYPE_BIGINT)
#define IS_SIGNED_NUMERIC_TYPE(_t) ((_t) >= TSDB_DATA_TYPE_TINYINT && (_t) <= TSDB_DATA_TYPE_BIGINT)
#define IS_UNSIGNED_NUMERIC_TYPE(_t) ((_t) >= TSDB_DATA_TYPE_UTINYINT && (_t) <= TSDB_DATA_TYPE_UBIGINT)
#define IS_UNSIGNED_NUMERIC_TYPE(_t) ((_t) >= TSDB_DATA_TYPE_UTINYINT && (_t) <= TSDB_DATA_TYPE_UBIGINT)
#define IS_FLOAT_TYPE(_t) ((_t) == TSDB_DATA_TYPE_FLOAT || (_t) == TSDB_DATA_TYPE_DOUBLE)
#define IS_FLOAT_TYPE(_t) ((_t) == TSDB_DATA_TYPE_FLOAT || (_t) == TSDB_DATA_TYPE_DOUBLE)
...
...
src/query/inc/
tsqlfunctio
n.h
→
src/query/inc/
qAggMai
n.h
浏览文件 @
e7614def
...
@@ -13,8 +13,8 @@
...
@@ -13,8 +13,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
*/
#ifndef TDENGINE_
TSQLFUNCTIO
N_H
#ifndef TDENGINE_
QAGGMAI
N_H
#define TDENGINE_
TSQLFUNCTIO
N_H
#define TDENGINE_
QAGGMAI
N_H
#ifdef __cplusplus
#ifdef __cplusplus
extern
"C"
{
extern
"C"
{
...
@@ -97,11 +97,7 @@ extern "C" {
...
@@ -97,11 +97,7 @@ extern "C" {
#define DATA_SET_FLAG ',' // to denote the output area has data, not null value
#define DATA_SET_FLAG ',' // to denote the output area has data, not null value
#define DATA_SET_FLAG_SIZE sizeof(DATA_SET_FLAG)
#define DATA_SET_FLAG_SIZE sizeof(DATA_SET_FLAG)
#define QUERY_COND_REL_PREFIX_IN "IN|"
#define QUERY_COND_REL_PREFIX_LIKE "LIKE|"
#define QUERY_COND_REL_PREFIX_IN_LEN 3
#define QUERY_COND_REL_PREFIX_LIKE_LEN 5
#define QUERY_ASC_FORWARD_STEP 1
#define QUERY_ASC_FORWARD_STEP 1
#define QUERY_DESC_FORWARD_STEP -1
#define QUERY_DESC_FORWARD_STEP -1
...
@@ -153,7 +149,7 @@ typedef struct SResultRowCellInfo {
...
@@ -153,7 +149,7 @@ typedef struct SResultRowCellInfo {
typedef
struct
SPoint1
{
typedef
struct
SPoint1
{
int64_t
key
;
int64_t
key
;
double
val
;
union
{
double
val
;
char
*
ptr
;}
;
}
SPoint1
;
}
SPoint1
;
#define GET_ROWCELL_INTERBUF(_c) ((void*) ((char*)(_c) + sizeof(SResultRowCellInfo)))
#define GET_ROWCELL_INTERBUF(_c) ((void*) ((char*)(_c) + sizeof(SResultRowCellInfo)))
...
@@ -279,4 +275,4 @@ static FORCE_INLINE void initResultInfo(SResultRowCellInfo *pResInfo, uint32_t b
...
@@ -279,4 +275,4 @@ static FORCE_INLINE void initResultInfo(SResultRowCellInfo *pResInfo, uint32_t b
}
}
#endif
#endif
#endif // TDENGINE_
TSQLFUNCTIO
N_H
#endif // TDENGINE_
QAGGMAI
N_H
src/query/inc/qExecutor.h
浏览文件 @
e7614def
...
@@ -18,6 +18,7 @@
...
@@ -18,6 +18,7 @@
#include "os.h"
#include "os.h"
#include "hash.h"
#include "hash.h"
#include "qAggMain.h"
#include "qFill.h"
#include "qFill.h"
#include "qResultbuf.h"
#include "qResultbuf.h"
#include "qSqlparser.h"
#include "qSqlparser.h"
...
@@ -27,7 +28,6 @@
...
@@ -27,7 +28,6 @@
#include "tarray.h"
#include "tarray.h"
#include "tlockfree.h"
#include "tlockfree.h"
#include "tsdb.h"
#include "tsdb.h"
#include "tsqlfunction.h"
struct
SColumnFilterElem
;
struct
SColumnFilterElem
;
typedef
bool
(
*
__filter_func_t
)(
struct
SColumnFilterElem
*
pFilter
,
const
char
*
val1
,
const
char
*
val2
,
int16_t
type
);
typedef
bool
(
*
__filter_func_t
)(
struct
SColumnFilterElem
*
pFilter
,
const
char
*
val1
,
const
char
*
val2
,
int16_t
type
);
...
@@ -164,13 +164,14 @@ typedef struct SQuery {
...
@@ -164,13 +164,14 @@ typedef struct SQuery {
SColumnInfo
*
tagColList
;
SColumnInfo
*
tagColList
;
int32_t
numOfFilterCols
;
int32_t
numOfFilterCols
;
int64_t
*
fillVal
;
int64_t
*
fillVal
;
uint32_t
status
;
// query status
uint32_t
status
;
// query status
SResultRec
rec
;
SResultRec
rec
;
int32_t
pos
;
int32_t
pos
;
tFilePage
**
sdata
;
tFilePage
**
sdata
;
STableQueryInfo
*
current
;
STableQueryInfo
*
current
;
int32_t
numOfCheckedBlocks
;
// number of check data blocks
SOrderedPrjQueryInfo
prjInfo
;
// limit value for each vgroup, only available in global order projection query.
SOrderedPrjQueryInfo
prjInfo
;
// limit value for each vgroup, only available in global order projection query.
SSingleColumnFilterInfo
*
pFilterInfo
;
SSingleColumnFilterInfo
*
pFilterInfo
;
}
SQuery
;
}
SQuery
;
...
@@ -194,6 +195,7 @@ typedef struct SQueryRuntimeEnv {
...
@@ -194,6 +195,7 @@ typedef struct SQueryRuntimeEnv {
bool
hasTagResults
;
// if there are tag values in final result or not
bool
hasTagResults
;
// if there are tag values in final result or not
bool
timeWindowInterpo
;
// if the time window start/end required interpolation
bool
timeWindowInterpo
;
// if the time window start/end required interpolation
bool
queryWindowIdentical
;
// all query time windows are identical for all tables in one group
bool
queryWindowIdentical
;
// all query time windows are identical for all tables in one group
bool
queryBlockDist
;
// if query data block distribution
int32_t
interBufSize
;
// intermediate buffer sizse
int32_t
interBufSize
;
// intermediate buffer sizse
int32_t
prevGroupId
;
// previous executed group id
int32_t
prevGroupId
;
// previous executed group id
SDiskbasedResultBuf
*
pResultBuf
;
// query result buffer based on blocked-wised disk file
SDiskbasedResultBuf
*
pResultBuf
;
// query result buffer based on blocked-wised disk file
...
...
src/query/inc/qFill.h
浏览文件 @
e7614def
...
@@ -86,7 +86,7 @@ bool taosFillHasMoreResults(SFillInfo* pFillInfo);
...
@@ -86,7 +86,7 @@ bool taosFillHasMoreResults(SFillInfo* pFillInfo);
int64_t
getNumOfResultsAfterFillGap
(
SFillInfo
*
pFillInfo
,
int64_t
ekey
,
int32_t
maxNumOfRows
);
int64_t
getNumOfResultsAfterFillGap
(
SFillInfo
*
pFillInfo
,
int64_t
ekey
,
int32_t
maxNumOfRows
);
int32_t
taosGetLinearInterpolationVal
(
int32_t
type
,
SPoint
*
point1
,
SPoint
*
point2
,
SPoint
*
point
);
int32_t
taosGetLinearInterpolationVal
(
SPoint
*
point
,
int32_t
outputType
,
SPoint
*
point1
,
SPoint
*
point2
,
int32_t
inputType
);
int64_t
taosFillResultDataBlock
(
SFillInfo
*
pFillInfo
,
tFilePage
**
output
,
int32_t
capacity
);
int64_t
taosFillResultDataBlock
(
SFillInfo
*
pFillInfo
,
tFilePage
**
output
,
int32_t
capacity
);
...
...
src/query/inc/qSqlparser.h
浏览文件 @
e7614def
...
@@ -200,6 +200,7 @@ typedef struct tSQLExpr {
...
@@ -200,6 +200,7 @@ typedef struct tSQLExpr {
typedef
struct
tSqlExprItem
{
typedef
struct
tSqlExprItem
{
tSQLExpr
*
pNode
;
// The list of expressions
tSQLExpr
*
pNode
;
// The list of expressions
char
*
aliasName
;
// alias name, null-terminated string
char
*
aliasName
;
// alias name, null-terminated string
bool
distinct
;
}
tSqlExprItem
;
}
tSqlExprItem
;
// todo refactor by using SArray
// todo refactor by using SArray
...
@@ -232,7 +233,7 @@ tSQLExpr *tSqlExprCreate(tSQLExpr *pLeft, tSQLExpr *pRight, int32_t optrType);
...
@@ -232,7 +233,7 @@ tSQLExpr *tSqlExprCreate(tSQLExpr *pLeft, tSQLExpr *pRight, int32_t optrType);
void
tSqlExprDestroy
(
tSQLExpr
*
pExpr
);
void
tSqlExprDestroy
(
tSQLExpr
*
pExpr
);
tSQLExprList
*
tSqlExprListAppend
(
tSQLExprList
*
pList
,
tSQLExpr
*
pNode
,
SStrToken
*
pToken
);
tSQLExprList
*
tSqlExprListAppend
(
tSQLExprList
*
pList
,
tSQLExpr
*
pNode
,
SStrToken
*
p
Distinct
,
SStrToken
*
p
Token
);
void
tSqlExprListDestroy
(
tSQLExprList
*
pList
);
void
tSqlExprListDestroy
(
tSQLExprList
*
pList
);
...
...
src/query/inc/sql.y
浏览文件 @
e7614def
...
@@ -161,7 +161,7 @@ cmd ::= ALTER DNODE ids(X) ids(Y). { setDCLSQLElems(pInfo, TSDB_SQL
...
@@ -161,7 +161,7 @@ cmd ::= ALTER DNODE ids(X) ids(Y). { setDCLSQLElems(pInfo, TSDB_SQL
cmd ::= ALTER DNODE ids(X) ids(Y) ids(Z). { setDCLSQLElems(pInfo, TSDB_SQL_CFG_DNODE, 3, &X, &Y, &Z); }
cmd ::= ALTER DNODE ids(X) ids(Y) ids(Z). { setDCLSQLElems(pInfo, TSDB_SQL_CFG_DNODE, 3, &X, &Y, &Z); }
cmd ::= ALTER LOCAL ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_CFG_LOCAL, 1, &X); }
cmd ::= ALTER LOCAL ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_CFG_LOCAL, 1, &X); }
cmd ::= ALTER LOCAL ids(X) ids(Y). { setDCLSQLElems(pInfo, TSDB_SQL_CFG_LOCAL, 2, &X, &Y); }
cmd ::= ALTER LOCAL ids(X) ids(Y). { setDCLSQLElems(pInfo, TSDB_SQL_CFG_LOCAL, 2, &X, &Y); }
cmd ::= ALTER DATABASE ids(X) alter_db_optr(Y). { SStrToken t = {0}; setCreateD
BSQL
(pInfo, TSDB_SQL_ALTER_DB, &X, &Y, &t);}
cmd ::= ALTER DATABASE ids(X) alter_db_optr(Y). { SStrToken t = {0}; setCreateD
bInfo
(pInfo, TSDB_SQL_ALTER_DB, &X, &Y, &t);}
cmd ::= ALTER ACCOUNT ids(X) acct_optr(Z). { setCreateAcctSql(pInfo, TSDB_SQL_ALTER_ACCT, &X, NULL, &Z);}
cmd ::= ALTER ACCOUNT ids(X) acct_optr(Z). { setCreateAcctSql(pInfo, TSDB_SQL_ALTER_ACCT, &X, NULL, &Z);}
cmd ::= ALTER ACCOUNT ids(X) PASS ids(Y) acct_optr(Z). { setCreateAcctSql(pInfo, TSDB_SQL_ALTER_ACCT, &X, &Y, &Z);}
cmd ::= ALTER ACCOUNT ids(X) PASS ids(Y) acct_optr(Z). { setCreateAcctSql(pInfo, TSDB_SQL_ALTER_ACCT, &X, &Y, &Z);}
...
@@ -186,7 +186,7 @@ ifnotexists(X) ::= . { X.n = 0;}
...
@@ -186,7 +186,7 @@ ifnotexists(X) ::= . { X.n = 0;}
cmd ::= CREATE DNODE ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_CREATE_DNODE, 1, &X);}
cmd ::= CREATE DNODE ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_CREATE_DNODE, 1, &X);}
cmd ::= CREATE ACCOUNT ids(X) PASS ids(Y) acct_optr(Z).
cmd ::= CREATE ACCOUNT ids(X) PASS ids(Y) acct_optr(Z).
{ setCreateAcctSql(pInfo, TSDB_SQL_CREATE_ACCT, &X, &Y, &Z);}
{ setCreateAcctSql(pInfo, TSDB_SQL_CREATE_ACCT, &X, &Y, &Z);}
cmd ::= CREATE DATABASE ifnotexists(Z) ids(X) db_optr(Y). { setCreateD
BSQL
(pInfo, TSDB_SQL_CREATE_DB, &X, &Y, &Z);}
cmd ::= CREATE DATABASE ifnotexists(Z) ids(X) db_optr(Y). { setCreateD
bInfo
(pInfo, TSDB_SQL_CREATE_DB, &X, &Y, &Z);}
cmd ::= CREATE USER ids(X) PASS ids(Y). { setCreateUserSql(pInfo, &X, &Y);}
cmd ::= CREATE USER ids(X) PASS ids(Y). { setCreateUserSql(pInfo, &X, &Y);}
pps(Y) ::= . { Y.n = 0; }
pps(Y) ::= . { Y.n = 0; }
...
@@ -457,13 +457,13 @@ select(A) ::= SELECT(T) selcollist(W). {
...
@@ -457,13 +457,13 @@ select(A) ::= SELECT(T) selcollist(W). {
%destructor sclp {tSqlExprListDestroy($$);}
%destructor sclp {tSqlExprListDestroy($$);}
sclp(A) ::= selcollist(X) COMMA. {A = X;}
sclp(A) ::= selcollist(X) COMMA. {A = X;}
sclp(A) ::= . {A = 0;}
sclp(A) ::= . {A = 0;}
selcollist(A) ::= sclp(P) expr(X) as(Y). {
selcollist(A) ::= sclp(P)
distinct(Z)
expr(X) as(Y). {
A = tSqlExprListAppend(P, X, Y.n?&Y:0);
A = tSqlExprListAppend(P, X,
Z.n? &Z:0,
Y.n?&Y:0);
}
}
selcollist(A) ::= sclp(P) STAR. {
selcollist(A) ::= sclp(P) STAR. {
tSQLExpr *pNode = tSqlExprIdValueCreate(NULL, TK_ALL);
tSQLExpr *pNode = tSqlExprIdValueCreate(NULL, TK_ALL);
A = tSqlExprListAppend(P, pNode, 0);
A = tSqlExprListAppend(P, pNode, 0
, 0
);
}
}
// An option "AS <id>" phrase that can follow one of the expressions that
// An option "AS <id>" phrase that can follow one of the expressions that
...
@@ -474,6 +474,10 @@ as(X) ::= AS ids(Y). { X = Y; }
...
@@ -474,6 +474,10 @@ as(X) ::= AS ids(Y). { X = Y; }
as(X) ::= ids(Y). { X = Y; }
as(X) ::= ids(Y). { X = Y; }
as(X) ::= . { X.n = 0; }
as(X) ::= . { X.n = 0; }
%type distinct {SStrToken}
distinct(X) ::= DISTINCT(Y). { X = Y; }
distinct(X) ::= . { X.n = 0;}
// A complete FROM clause.
// A complete FROM clause.
%type from {SArray*}
%type from {SArray*}
// current not support query from no-table
// current not support query from no-table
...
@@ -681,8 +685,8 @@ expr(A) ::= expr(X) IN LP exprlist(Y) RP. {A = tSqlExprCreate(X, (tSQLExpr*)Y,
...
@@ -681,8 +685,8 @@ expr(A) ::= expr(X) IN LP exprlist(Y) RP. {A = tSqlExprCreate(X, (tSQLExpr*)Y,
%type expritem {tSQLExpr*}
%type expritem {tSQLExpr*}
%destructor expritem {tSqlExprDestroy($$);}
%destructor expritem {tSqlExprDestroy($$);}
exprlist(A) ::= exprlist(X) COMMA expritem(Y). {A = tSqlExprListAppend(X,Y,0);}
exprlist(A) ::= exprlist(X) COMMA expritem(Y). {A = tSqlExprListAppend(X,Y,0
, 0
);}
exprlist(A) ::= expritem(X). {A = tSqlExprListAppend(0,X,0);}
exprlist(A) ::= expritem(X). {A = tSqlExprListAppend(0,X,0
, 0
);}
expritem(A) ::= expr(X). {A = X;}
expritem(A) ::= expr(X). {A = X;}
expritem(A) ::= . {A = 0;}
expritem(A) ::= . {A = 0;}
...
...
src/query/src/qAggMain.c
浏览文件 @
e7614def
...
@@ -14,17 +14,17 @@
...
@@ -14,17 +14,17 @@
*/
*/
#include "os.h"
#include "os.h"
#include "qAst.h"
#include "taosdef.h"
#include "taosmsg.h"
#include "texpr.h"
#include "ttype.h"
#include "qAggMain.h"
#include "qFill.h"
#include "qFill.h"
#include "qHistogram.h"
#include "qHistogram.h"
#include "qPercentile.h"
#include "qPercentile.h"
#include "qTsbuf.h"
#include "qTsbuf.h"
#include "taosdef.h"
#include "taosmsg.h"
#include "queryLog.h"
#include "queryLog.h"
#include "tscSubquery.h"
#include "tsqlfunction.h"
#include "ttype.h"
#define GET_INPUT_DATA_LIST(x) (((char *)((x)->aInputElemBuf)) + ((x)->startOffset) * ((x)->inputBytes))
#define GET_INPUT_DATA_LIST(x) (((char *)((x)->aInputElemBuf)) + ((x)->startOffset) * ((x)->inputBytes))
#define GET_INPUT_DATA(x, y) (GET_INPUT_DATA_LIST(x) + (y) * (x)->inputBytes)
#define GET_INPUT_DATA(x, y) (GET_INPUT_DATA_LIST(x) + (y) * (x)->inputBytes)
...
@@ -3776,89 +3776,67 @@ void twa_function_finalizer(SQLFunctionCtx *pCtx) {
...
@@ -3776,89 +3776,67 @@ void twa_function_finalizer(SQLFunctionCtx *pCtx) {
*
*
* @param pCtx
* @param pCtx
*/
*/
static
void
interp_function
(
SQLFunctionCtx
*
pCtx
)
{
// at this point, the value is existed, return directly
SResultRowCellInfo
*
pResInfo
=
GET_RES_INFO
(
pCtx
);
SInterpInfoDetail
*
pInfo
=
GET_ROWCELL_INTERBUF
(
pResInfo
);
assert
(
pCtx
->
startOffset
==
0
);
static
void
interp_function_impl
(
SQLFunctionCtx
*
pCtx
)
{
int32_t
type
=
(
int32_t
)
pCtx
->
param
[
2
].
i64
;
if
(
type
==
TSDB_FILL_NONE
)
{
return
;
}
if
(
pCtx
->
size
==
1
)
{
if
(
pCtx
->
inputType
==
TSDB_DATA_TYPE_TIMESTAMP
)
{
char
*
pData
=
GET_INPUT_DATA_LIST
(
pCtx
);
*
(
TSKEY
*
)
pCtx
->
aOutputBuf
=
pCtx
->
nStartQueryTimestamp
;
assignVal
(
pCtx
->
aOutputBuf
,
pData
,
pCtx
->
inputBytes
,
pCtx
->
inputType
);
}
else
{
}
else
{
/*
if
(
pCtx
->
start
.
key
==
INT64_MIN
)
{
* use interpolation to generate the result.
assert
(
pCtx
->
end
.
key
==
INT64_MIN
);
* Note: the result of primary timestamp column uses the timestamp specified by user in the query sql
*/
assert
(
pCtx
->
size
==
2
);
if
(
pInfo
->
type
==
TSDB_FILL_NONE
)
{
// set no output result
return
;
return
;
}
}
if
(
pInfo
->
primaryCol
==
1
)
{
if
(
type
==
TSDB_FILL_NULL
)
{
*
(
TSKEY
*
)
pCtx
->
aOutputBuf
=
pInfo
->
ts
;
setNull
(
pCtx
->
aOutputBuf
,
pCtx
->
outputType
,
pCtx
->
outputBytes
);
}
else
{
}
else
if
(
type
==
TSDB_FILL_SET_VALUE
)
{
if
(
pInfo
->
type
==
TSDB_FILL_NULL
)
{
tVariantDump
(
&
pCtx
->
param
[
1
],
pCtx
->
aOutputBuf
,
pCtx
->
inputType
,
true
);
if
(
pCtx
->
outputType
==
TSDB_DATA_TYPE_BINARY
||
pCtx
->
outputType
==
TSDB_DATA_TYPE_NCHAR
)
{
}
else
if
(
type
==
TSDB_FILL_PREV
)
{
setVardataNull
(
pCtx
->
aOutputBuf
,
pCtx
->
outputType
);
if
(
IS_NUMERIC_TYPE
(
pCtx
->
inputType
)
||
pCtx
->
inputType
==
TSDB_DATA_TYPE_BOOL
)
{
}
else
{
SET_TYPED_DATA
(
pCtx
->
aOutputBuf
,
pCtx
->
inputType
,
pCtx
->
start
.
val
);
setNull
(
pCtx
->
aOutputBuf
,
pCtx
->
outputType
,
pCtx
->
outputBytes
);
}
else
{
}
assignVal
(
pCtx
->
aOutputBuf
,
pCtx
->
start
.
ptr
,
pCtx
->
outputBytes
,
pCtx
->
inputType
);
}
SET_VAL
(
pCtx
,
pCtx
->
size
,
1
);
}
else
if
(
type
==
TSDB_FILL_LINEAR
)
{
}
else
if
(
pInfo
->
type
==
TSDB_FILL_SET_VALUE
)
{
SPoint
point1
=
{.
key
=
pCtx
->
start
.
key
,
.
val
=
&
pCtx
->
start
.
val
};
tVariantDump
(
&
pCtx
->
param
[
1
],
pCtx
->
aOutputBuf
,
pCtx
->
inputType
,
true
);
SPoint
point2
=
{.
key
=
pCtx
->
end
.
key
,
.
val
=
&
pCtx
->
end
.
val
};
}
else
if
(
pInfo
->
type
==
TSDB_FILL_PREV
)
{
SPoint
point
=
{.
key
=
pCtx
->
nStartQueryTimestamp
,
.
val
=
pCtx
->
aOutputBuf
};
char
*
data
=
GET_INPUT_DATA
(
pCtx
,
0
);
assignVal
(
pCtx
->
aOutputBuf
,
data
,
pCtx
->
outputBytes
,
pCtx
->
outputType
);
int32_t
srcType
=
pCtx
->
inputType
;
if
(
IS_NUMERIC_TYPE
(
srcType
))
{
// TODO should find the not null data?
SET_VAL
(
pCtx
,
pCtx
->
size
,
1
);
if
(
isNull
((
char
*
)
&
pCtx
->
start
.
val
,
srcType
)
||
isNull
((
char
*
)
&
pCtx
->
end
.
val
,
srcType
))
{
}
else
if
(
pInfo
->
type
==
TSDB_FILL_LINEAR
)
{
setNull
(
pCtx
->
aOutputBuf
,
srcType
,
pCtx
->
inputBytes
);
char
*
data1
=
GET_INPUT_DATA
(
pCtx
,
0
);
char
*
data2
=
GET_INPUT_DATA
(
pCtx
,
1
);
TSKEY
key1
=
pCtx
->
ptsList
[
0
];
TSKEY
key2
=
pCtx
->
ptsList
[
1
];
SPoint
point1
=
{.
key
=
key1
,
.
val
=
data1
};
SPoint
point2
=
{.
key
=
key2
,
.
val
=
data2
};
SPoint
point
=
{.
key
=
pInfo
->
ts
,
.
val
=
pCtx
->
aOutputBuf
};
int32_t
srcType
=
pCtx
->
inputType
;
if
((
srcType
>=
TSDB_DATA_TYPE_TINYINT
&&
srcType
<=
TSDB_DATA_TYPE_BIGINT
)
||
srcType
==
TSDB_DATA_TYPE_TIMESTAMP
||
srcType
==
TSDB_DATA_TYPE_DOUBLE
)
{
point1
.
val
=
data1
;
point2
.
val
=
data2
;
if
(
isNull
(
data1
,
srcType
)
||
isNull
(
data2
,
srcType
))
{
setNull
(
pCtx
->
aOutputBuf
,
srcType
,
pCtx
->
inputBytes
);
}
else
{
taosGetLinearInterpolationVal
(
pCtx
->
outputType
,
&
point1
,
&
point2
,
&
point
);
}
}
else
if
(
srcType
==
TSDB_DATA_TYPE_FLOAT
)
{
point1
.
val
=
data1
;
point2
.
val
=
data2
;
if
(
isNull
(
data1
,
srcType
)
||
isNull
(
data2
,
srcType
))
{
setNull
(
pCtx
->
aOutputBuf
,
srcType
,
pCtx
->
inputBytes
);
}
else
{
taosGetLinearInterpolationVal
(
pCtx
->
outputType
,
&
point1
,
&
point2
,
&
point
);
}
}
else
{
}
else
{
if
(
srcType
==
TSDB_DATA_TYPE_BINARY
||
srcType
==
TSDB_DATA_TYPE_NCHAR
)
{
taosGetLinearInterpolationVal
(
&
point
,
pCtx
->
outputType
,
&
point1
,
&
point2
,
TSDB_DATA_TYPE_DOUBLE
);
setVardataNull
(
pCtx
->
aOutputBuf
,
pCtx
->
inputType
);
}
else
{
setNull
(
pCtx
->
aOutputBuf
,
srcType
,
pCtx
->
inputBytes
);
}
}
}
}
else
{
setNull
(
pCtx
->
aOutputBuf
,
srcType
,
pCtx
->
inputBytes
);
}
}
}
}
}
}
SET_VAL
(
pCtx
,
pCtx
->
size
,
1
);
SET_VAL
(
pCtx
,
1
,
1
);
}
static
void
interp_function
(
SQLFunctionCtx
*
pCtx
)
{
// at this point, the value is existed, return directly
if
(
pCtx
->
size
>
0
)
{
// impose the timestamp check
TSKEY
key
=
GET_TS_DATA
(
pCtx
,
0
);
if
(
key
==
pCtx
->
nStartQueryTimestamp
)
{
char
*
pData
=
GET_INPUT_DATA
(
pCtx
,
0
);
assignVal
(
pCtx
->
aOutputBuf
,
pData
,
pCtx
->
inputBytes
,
pCtx
->
inputType
);
SET_VAL
(
pCtx
,
1
,
1
);
}
else
{
interp_function_impl
(
pCtx
);
}
}
else
{
//no qualified data rows and interpolation is required
interp_function_impl
(
pCtx
);
}
}
}
static
bool
ts_comp_function_setup
(
SQLFunctionCtx
*
pCtx
)
{
static
bool
ts_comp_function_setup
(
SQLFunctionCtx
*
pCtx
)
{
...
...
src/query/src/qExecutor.c
浏览文件 @
e7614def
...
@@ -20,7 +20,7 @@
...
@@ -20,7 +20,7 @@
#include "exception.h"
#include "exception.h"
#include "hash.h"
#include "hash.h"
#include "
qAst
.h"
#include "
texpr
.h"
#include "qExecutor.h"
#include "qExecutor.h"
#include "qResultbuf.h"
#include "qResultbuf.h"
#include "qUtil.h"
#include "qUtil.h"
...
@@ -28,6 +28,7 @@
...
@@ -28,6 +28,7 @@
#include "queryLog.h"
#include "queryLog.h"
#include "tlosertree.h"
#include "tlosertree.h"
#include "ttype.h"
#include "ttype.h"
#include "tcompare.h"
#define MAX_ROWS_PER_RESBUF_PAGE ((1u<<12) - 1)
#define MAX_ROWS_PER_RESBUF_PAGE ((1u<<12) - 1)
...
@@ -90,6 +91,13 @@ typedef struct {
...
@@ -90,6 +91,13 @@ typedef struct {
STSCursor
cur
;
STSCursor
cur
;
}
SQueryStatusInfo
;
}
SQueryStatusInfo
;
typedef
struct
{
SArray
*
dataBlockInfos
;
int64_t
firstSeekTimeUs
;
int64_t
numOfRowsInMemTable
;
char
*
result
;
}
STableBlockDist
;
#if 0
#if 0
static UNUSED_FUNC void *u_malloc (size_t __size) {
static UNUSED_FUNC void *u_malloc (size_t __size) {
uint32_t v = rand();
uint32_t v = rand();
...
@@ -408,7 +416,7 @@ static bool isTopBottomQuery(SQuery *pQuery) {
...
@@ -408,7 +416,7 @@ static bool isTopBottomQuery(SQuery *pQuery) {
static
bool
timeWindowInterpoRequired
(
SQuery
*
pQuery
)
{
static
bool
timeWindowInterpoRequired
(
SQuery
*
pQuery
)
{
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfOutput
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfOutput
;
++
i
)
{
int32_t
functionId
=
pQuery
->
pExpr1
[
i
].
base
.
functionId
;
int32_t
functionId
=
pQuery
->
pExpr1
[
i
].
base
.
functionId
;
if
(
functionId
==
TSDB_FUNC_TWA
)
{
if
(
functionId
==
TSDB_FUNC_TWA
||
functionId
==
TSDB_FUNC_INTERP
)
{
return
true
;
return
true
;
}
}
}
}
...
@@ -818,6 +826,7 @@ static int32_t getNumOfRowsInTimeWindow(SQuery *pQuery, SDataBlockInfo *pDataBlo
...
@@ -818,6 +826,7 @@ static int32_t getNumOfRowsInTimeWindow(SQuery *pQuery, SDataBlockInfo *pDataBlo
return
num
;
return
num
;
}
}
// TODO decouple the data block and the SQLFunctionCtx
static
void
doBlockwiseApplyFunctions
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
STimeWindow
*
pWin
,
int32_t
offset
,
int32_t
forwardStep
,
TSKEY
*
tsCol
,
int32_t
numOfTotal
)
{
static
void
doBlockwiseApplyFunctions
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
STimeWindow
*
pWin
,
int32_t
offset
,
int32_t
forwardStep
,
TSKEY
*
tsCol
,
int32_t
numOfTotal
)
{
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
SQLFunctionCtx
*
pCtx
=
pRuntimeEnv
->
pCtx
;
SQLFunctionCtx
*
pCtx
=
pRuntimeEnv
->
pCtx
;
...
@@ -825,8 +834,8 @@ static void doBlockwiseApplyFunctions(SQueryRuntimeEnv *pRuntimeEnv, STimeWindow
...
@@ -825,8 +834,8 @@ static void doBlockwiseApplyFunctions(SQueryRuntimeEnv *pRuntimeEnv, STimeWindow
bool
hasPrev
=
pCtx
[
0
].
preAggVals
.
isSet
;
bool
hasPrev
=
pCtx
[
0
].
preAggVals
.
isSet
;
for
(
int32_t
k
=
0
;
k
<
pQuery
->
numOfOutput
;
++
k
)
{
for
(
int32_t
k
=
0
;
k
<
pQuery
->
numOfOutput
;
++
k
)
{
pCtx
[
k
].
nStartQueryTimestamp
=
pWin
->
skey
;
pCtx
[
k
].
size
=
forwardStep
;
pCtx
[
k
].
size
=
forwardStep
;
pCtx
[
k
].
nStartQueryTimestamp
=
pWin
->
skey
;
pCtx
[
k
].
startOffset
=
(
QUERY_IS_ASC_QUERY
(
pQuery
))
?
offset
:
offset
-
(
forwardStep
-
1
);
pCtx
[
k
].
startOffset
=
(
QUERY_IS_ASC_QUERY
(
pQuery
))
?
offset
:
offset
-
(
forwardStep
-
1
);
int32_t
functionId
=
pQuery
->
pExpr1
[
k
].
base
.
functionId
;
int32_t
functionId
=
pQuery
->
pExpr1
[
k
].
base
.
functionId
;
...
@@ -1029,7 +1038,8 @@ static void setNotInterpoWindowKey(SQLFunctionCtx* pCtx, int32_t numOfOutput, in
...
@@ -1029,7 +1038,8 @@ static void setNotInterpoWindowKey(SQLFunctionCtx* pCtx, int32_t numOfOutput, in
}
}
// window start key interpolation
// window start key interpolation
static
bool
setTimeWindowInterpolationStartTs
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
int32_t
pos
,
int32_t
numOfRows
,
SArray
*
pDataBlock
,
TSKEY
*
tsCols
,
STimeWindow
*
win
)
{
static
bool
setTimeWindowInterpolationStartTs
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
int32_t
pos
,
int32_t
numOfRows
,
SArray
*
pDataBlock
,
TSKEY
*
tsCols
,
STimeWindow
*
win
,
int16_t
type
)
{
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
TSKEY
curTs
=
tsCols
[
pos
];
TSKEY
curTs
=
tsCols
[
pos
];
...
@@ -1118,6 +1128,8 @@ static void doWindowBorderInterpolation(SQueryRuntimeEnv* pRuntimeEnv, SDataBloc
...
@@ -1118,6 +1128,8 @@ static void doWindowBorderInterpolation(SQueryRuntimeEnv* pRuntimeEnv, SDataBloc
assert
(
pDataBlock
!=
NULL
);
assert
(
pDataBlock
!=
NULL
);
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
int32_t
fillType
=
pQuery
->
fillType
;
int32_t
step
=
GET_FORWARD_DIRECTION_FACTOR
(
pQuery
->
order
.
order
);
int32_t
step
=
GET_FORWARD_DIRECTION_FACTOR
(
pQuery
->
order
.
order
);
SColumnInfoData
*
pColInfo
=
taosArrayGet
(
pDataBlock
,
0
);
SColumnInfoData
*
pColInfo
=
taosArrayGet
(
pDataBlock
,
0
);
...
@@ -1126,7 +1138,7 @@ static void doWindowBorderInterpolation(SQueryRuntimeEnv* pRuntimeEnv, SDataBloc
...
@@ -1126,7 +1138,7 @@ static void doWindowBorderInterpolation(SQueryRuntimeEnv* pRuntimeEnv, SDataBloc
bool
done
=
resultRowInterpolated
(
pResult
,
RESULT_ROW_START_INTERP
);
bool
done
=
resultRowInterpolated
(
pResult
,
RESULT_ROW_START_INTERP
);
if
(
!
done
)
{
if
(
!
done
)
{
int32_t
startRowIndex
=
startPos
;
int32_t
startRowIndex
=
startPos
;
bool
interp
=
setTimeWindowInterpolationStartTs
(
pRuntimeEnv
,
startRowIndex
,
pDataBlockInfo
->
rows
,
pDataBlock
,
tsCols
,
win
);
bool
interp
=
setTimeWindowInterpolationStartTs
(
pRuntimeEnv
,
startRowIndex
,
pDataBlockInfo
->
rows
,
pDataBlock
,
tsCols
,
win
,
fillType
);
if
(
interp
)
{
if
(
interp
)
{
setResultRowInterpo
(
pResult
,
RESULT_ROW_START_INTERP
);
setResultRowInterpo
(
pResult
,
RESULT_ROW_START_INTERP
);
}
}
...
@@ -1134,6 +1146,12 @@ static void doWindowBorderInterpolation(SQueryRuntimeEnv* pRuntimeEnv, SDataBloc
...
@@ -1134,6 +1146,12 @@ static void doWindowBorderInterpolation(SQueryRuntimeEnv* pRuntimeEnv, SDataBloc
setNotInterpoWindowKey
(
pRuntimeEnv
->
pCtx
,
pQuery
->
numOfOutput
,
RESULT_ROW_START_INTERP
);
setNotInterpoWindowKey
(
pRuntimeEnv
->
pCtx
,
pQuery
->
numOfOutput
,
RESULT_ROW_START_INTERP
);
}
}
// point interpolation does not require the end key time window interpolation.
if
(
isPointInterpoQuery
(
pQuery
))
{
return
;
}
// interpolation query does not generate the time window end interpolation
done
=
resultRowInterpolated
(
pResult
,
RESULT_ROW_END_INTERP
);
done
=
resultRowInterpolated
(
pResult
,
RESULT_ROW_END_INTERP
);
if
(
!
done
)
{
if
(
!
done
)
{
int32_t
endRowIndex
=
startPos
+
(
forwardStep
-
1
)
*
step
;
int32_t
endRowIndex
=
startPos
+
(
forwardStep
-
1
)
*
step
;
...
@@ -1259,7 +1277,7 @@ static void blockwiseApplyFunctions(SQueryRuntimeEnv *pRuntimeEnv, SDataStatis *
...
@@ -1259,7 +1277,7 @@ static void blockwiseApplyFunctions(SQueryRuntimeEnv *pRuntimeEnv, SDataStatis *
for
(
int32_t
k
=
0
;
k
<
pQuery
->
numOfOutput
;
++
k
)
{
for
(
int32_t
k
=
0
;
k
<
pQuery
->
numOfOutput
;
++
k
)
{
int32_t
functionId
=
pQuery
->
pExpr1
[
k
].
base
.
functionId
;
int32_t
functionId
=
pQuery
->
pExpr1
[
k
].
base
.
functionId
;
if
(
functionNeedToExecute
(
pRuntimeEnv
,
&
pCtx
[
k
],
functionId
))
{
if
(
functionNeedToExecute
(
pRuntimeEnv
,
&
pCtx
[
k
],
functionId
))
{
pCtx
[
k
].
nStartQueryTimestamp
=
p
DataBlockInfo
->
window
.
skey
;
pCtx
[
k
].
nStartQueryTimestamp
=
p
Query
->
window
.
skey
;
aAggs
[
functionId
].
xFunction
(
&
pCtx
[
k
]);
aAggs
[
functionId
].
xFunction
(
&
pCtx
[
k
]);
}
}
}
}
...
@@ -1423,18 +1441,20 @@ static bool functionNeedToExecute(SQueryRuntimeEnv *pRuntimeEnv, SQLFunctionCtx
...
@@ -1423,18 +1441,20 @@ static bool functionNeedToExecute(SQueryRuntimeEnv *pRuntimeEnv, SQLFunctionCtx
return
true
;
return
true
;
}
}
void
doRowwiseTimeWindowInterpolation
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
SArray
*
pDataBlock
,
TSKEY
prevTs
,
int32_t
prevRowIndex
,
TSKEY
curTs
,
int32_t
curRowIndex
,
TSKEY
windowKey
,
int32_t
type
)
{
void
doRowwiseTimeWindowInterpolation
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
SArray
*
pDataBlock
,
TSKEY
prevTs
,
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
int32_t
prevRowIndex
,
TSKEY
curTs
,
int32_t
curRowIndex
,
TSKEY
windowKey
,
int32_t
type
)
{
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
for
(
int32_t
k
=
0
;
k
<
pQuery
->
numOfOutput
;
++
k
)
{
for
(
int32_t
k
=
0
;
k
<
pQuery
->
numOfOutput
;
++
k
)
{
int32_t
functionId
=
pQuery
->
pExpr1
[
k
].
base
.
functionId
;
int32_t
functionId
=
pQuery
->
pExpr1
[
k
].
base
.
functionId
;
if
(
functionId
!=
TSDB_FUNC_TWA
)
{
if
(
functionId
!=
TSDB_FUNC_TWA
&&
functionId
!=
TSDB_FUNC_INTERP
)
{
pRuntimeEnv
->
pCtx
[
k
].
start
.
key
=
INT64_MIN
;
pRuntimeEnv
->
pCtx
[
k
].
start
.
key
=
INT64_MIN
;
continue
;
continue
;
}
}
SColIndex
*
pColIndex
=
&
pQuery
->
pExpr1
[
k
].
base
.
colInfo
;
SColIndex
*
pColIndex
=
&
pQuery
->
pExpr1
[
k
].
base
.
colInfo
;
int16_t
index
=
pColIndex
->
colIndex
;
int16_t
index
=
pColIndex
->
colIndex
;
SColumnInfoData
*
pColInfo
=
taosArrayGet
(
pDataBlock
,
index
);
SColumnInfoData
*
pColInfo
=
taosArrayGet
(
pDataBlock
,
index
);
assert
(
pColInfo
->
info
.
colId
==
pColIndex
->
colId
&&
curTs
!=
windowKey
);
assert
(
pColInfo
->
info
.
colId
==
pColIndex
->
colId
&&
curTs
!=
windowKey
);
double
v1
=
0
,
v2
=
0
,
v
=
0
;
double
v1
=
0
,
v2
=
0
,
v
=
0
;
...
@@ -1450,14 +1470,25 @@ void doRowwiseTimeWindowInterpolation(SQueryRuntimeEnv* pRuntimeEnv, SArray* pDa
...
@@ -1450,14 +1470,25 @@ void doRowwiseTimeWindowInterpolation(SQueryRuntimeEnv* pRuntimeEnv, SArray* pDa
SPoint
point1
=
(
SPoint
){.
key
=
prevTs
,
.
val
=
&
v1
};
SPoint
point1
=
(
SPoint
){.
key
=
prevTs
,
.
val
=
&
v1
};
SPoint
point2
=
(
SPoint
){.
key
=
curTs
,
.
val
=
&
v2
};
SPoint
point2
=
(
SPoint
){.
key
=
curTs
,
.
val
=
&
v2
};
SPoint
point
=
(
SPoint
){.
key
=
windowKey
,
.
val
=
&
v
};
SPoint
point
=
(
SPoint
){.
key
=
windowKey
,
.
val
=
&
v
};
taosGetLinearInterpolationVal
(
TSDB_DATA_TYPE_DOUBLE
,
&
point1
,
&
point2
,
&
point
);
if
(
type
==
RESULT_ROW_START_INTERP
)
{
if
(
functionId
==
TSDB_FUNC_TWA
)
{
pRuntimeEnv
->
pCtx
[
k
].
start
.
key
=
point
.
key
;
taosGetLinearInterpolationVal
(
&
point
,
TSDB_DATA_TYPE_DOUBLE
,
&
point1
,
&
point2
,
TSDB_DATA_TYPE_DOUBLE
);
pRuntimeEnv
->
pCtx
[
k
].
start
.
val
=
v
;
if
(
type
==
RESULT_ROW_START_INTERP
)
{
pRuntimeEnv
->
pCtx
[
k
].
start
.
key
=
point
.
key
;
pRuntimeEnv
->
pCtx
[
k
].
start
.
val
=
v
;
}
else
{
pRuntimeEnv
->
pCtx
[
k
].
end
.
key
=
point
.
key
;
pRuntimeEnv
->
pCtx
[
k
].
end
.
val
=
v
;
}
}
else
{
}
else
{
pRuntimeEnv
->
pCtx
[
k
].
end
.
key
=
point
.
key
;
if
(
type
==
RESULT_ROW_START_INTERP
)
{
pRuntimeEnv
->
pCtx
[
k
].
end
.
val
=
v
;
pRuntimeEnv
->
pCtx
[
k
].
start
.
key
=
prevTs
;
pRuntimeEnv
->
pCtx
[
k
].
start
.
val
=
v1
;
pRuntimeEnv
->
pCtx
[
k
].
end
.
key
=
curTs
;
pRuntimeEnv
->
pCtx
[
k
].
end
.
val
=
v2
;
}
}
}
}
}
}
}
...
@@ -1796,13 +1827,7 @@ void setExecParams(SQuery *pQuery, SQLFunctionCtx *pCtx, void* inputData, TSKEY
...
@@ -1796,13 +1827,7 @@ void setExecParams(SQuery *pQuery, SQLFunctionCtx *pCtx, void* inputData, TSKEY
pCtx
->
preAggVals
.
statis
.
max
=
pBlockInfo
->
window
.
ekey
;
pCtx
->
preAggVals
.
statis
.
max
=
pBlockInfo
->
window
.
ekey
;
}
}
}
else
if
(
functionId
==
TSDB_FUNC_INTERP
)
{
}
else
if
(
functionId
==
TSDB_FUNC_INTERP
)
{
SResultRowCellInfo
*
pInfo
=
GET_RES_INFO
(
pCtx
);
pCtx
->
param
[
2
].
i64
=
(
int8_t
)
pQuery
->
fillType
;
SInterpInfoDetail
*
pInterpInfo
=
(
SInterpInfoDetail
*
)
GET_ROWCELL_INTERBUF
(
pInfo
);
pInterpInfo
->
type
=
(
int8_t
)
pQuery
->
fillType
;
pInterpInfo
->
ts
=
pQuery
->
window
.
skey
;
pInterpInfo
->
primaryCol
=
(
colId
==
PRIMARYKEY_TIMESTAMP_COL_INDEX
);
if
(
pQuery
->
fillVal
!=
NULL
)
{
if
(
pQuery
->
fillVal
!=
NULL
)
{
if
(
isNull
((
const
char
*
)
&
pQuery
->
fillVal
[
colIndex
],
pCtx
->
inputType
))
{
if
(
isNull
((
const
char
*
)
&
pQuery
->
fillVal
[
colIndex
],
pCtx
->
inputType
))
{
pCtx
->
param
[
1
].
nType
=
TSDB_DATA_TYPE_NULL
;
pCtx
->
param
[
1
].
nType
=
TSDB_DATA_TYPE_NULL
;
...
@@ -1908,6 +1933,10 @@ static int32_t setupQueryRuntimeEnv(SQueryRuntimeEnv *pRuntimeEnv, int16_t order
...
@@ -1908,6 +1933,10 @@ static int32_t setupQueryRuntimeEnv(SQueryRuntimeEnv *pRuntimeEnv, int16_t order
if
(
pIndex
->
colId
==
TSDB_TBNAME_COLUMN_INDEX
)
{
// todo refactor
if
(
pIndex
->
colId
==
TSDB_TBNAME_COLUMN_INDEX
)
{
// todo refactor
SSchema
s
=
tGetTableNameColumnSchema
();
SSchema
s
=
tGetTableNameColumnSchema
();
pCtx
->
inputBytes
=
s
.
bytes
;
pCtx
->
inputType
=
s
.
type
;
}
else
if
(
pIndex
->
colId
==
TSDB_BLOCK_DIST_COLUMN_INDEX
)
{
SSchema
s
=
tGetBlockDistColumnSchema
();
pCtx
->
inputBytes
=
s
.
bytes
;
pCtx
->
inputBytes
=
s
.
bytes
;
pCtx
->
inputType
=
s
.
type
;
pCtx
->
inputType
=
s
.
type
;
}
else
{
}
else
{
...
@@ -2579,7 +2608,6 @@ int32_t loadDataBlockOnDemand(SQueryRuntimeEnv *pRuntimeEnv, SResultRowInfo * pW
...
@@ -2579,7 +2608,6 @@ int32_t loadDataBlockOnDemand(SQueryRuntimeEnv *pRuntimeEnv, SResultRowInfo * pW
if
(
pQuery
->
numOfFilterCols
>
0
||
pRuntimeEnv
->
pTsBuf
>
0
)
{
if
(
pQuery
->
numOfFilterCols
>
0
||
pRuntimeEnv
->
pTsBuf
>
0
)
{
*
status
=
BLK_DATA_ALL_NEEDED
;
*
status
=
BLK_DATA_ALL_NEEDED
;
}
else
{
// check if this data block is required to load
}
else
{
// check if this data block is required to load
// Calculate all time windows that are overlapping or contain current data block.
// Calculate all time windows that are overlapping or contain current data block.
// If current data block is contained by all possible time window, do not load current data block.
// If current data block is contained by all possible time window, do not load current data block.
if
(
QUERY_IS_INTERVAL_QUERY
(
pQuery
)
&&
overlapWithTimeWindow
(
pQuery
,
pBlockInfo
))
{
if
(
QUERY_IS_INTERVAL_QUERY
(
pQuery
)
&&
overlapWithTimeWindow
(
pQuery
,
pBlockInfo
))
{
...
@@ -2818,6 +2846,10 @@ static int64_t doScanAllDataBlocks(SQueryRuntimeEnv *pRuntimeEnv) {
...
@@ -2818,6 +2846,10 @@ static int64_t doScanAllDataBlocks(SQueryRuntimeEnv *pRuntimeEnv) {
while
(
tsdbNextDataBlock
(
pQueryHandle
))
{
while
(
tsdbNextDataBlock
(
pQueryHandle
))
{
summary
->
totalBlocks
+=
1
;
summary
->
totalBlocks
+=
1
;
if
(
IS_MASTER_SCAN
(
pRuntimeEnv
))
{
pQuery
->
numOfCheckedBlocks
+=
1
;
}
if
(
isQueryKilled
(
GET_QINFO_ADDR
(
pRuntimeEnv
)))
{
if
(
isQueryKilled
(
GET_QINFO_ADDR
(
pRuntimeEnv
)))
{
longjmp
(
pRuntimeEnv
->
env
,
TSDB_CODE_TSC_QUERY_CANCELLED
);
longjmp
(
pRuntimeEnv
->
env
,
TSDB_CODE_TSC_QUERY_CANCELLED
);
}
}
...
@@ -3557,7 +3589,7 @@ void setQueryStatus(SQuery *pQuery, int8_t status) {
...
@@ -3557,7 +3589,7 @@ void setQueryStatus(SQuery *pQuery, int8_t status) {
}
}
}
}
bool
need
ScanDataBlocksAgai
n
(
SQueryRuntimeEnv
*
pRuntimeEnv
)
{
bool
need
RepeatSca
n
(
SQueryRuntimeEnv
*
pRuntimeEnv
)
{
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
bool
toContinue
=
false
;
bool
toContinue
=
false
;
...
@@ -3684,6 +3716,67 @@ static void restoreTimeWindow(STableGroupInfo* pTableGroupInfo, STsdbQueryCond*
...
@@ -3684,6 +3716,67 @@ static void restoreTimeWindow(STableGroupInfo* pTableGroupInfo, STsdbQueryCond*
pKeyInfo
->
lastKey
=
pCond
->
twindow
.
skey
;
pKeyInfo
->
lastKey
=
pCond
->
twindow
.
skey
;
}
}
static
void
handleInterpolationQuery
(
SQInfo
*
pQInfo
)
{
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
if
(
pQuery
->
numOfCheckedBlocks
>
0
||
!
isPointInterpoQuery
(
pQuery
))
{
return
;
}
SArray
*
prev
=
tsdbGetExternalRow
(
pRuntimeEnv
->
pQueryHandle
,
&
pQInfo
->
memRef
,
TSDB_PREV_ROW
);
SArray
*
next
=
tsdbGetExternalRow
(
pRuntimeEnv
->
pQueryHandle
,
&
pQInfo
->
memRef
,
TSDB_NEXT_ROW
);
if
(
prev
==
NULL
||
next
==
NULL
)
{
return
;
}
// setup the pCtx->start/end info and calculate the interpolation value
SColumnInfoData
*
startTs
=
taosArrayGet
(
prev
,
0
);
SColumnInfoData
*
endTs
=
taosArrayGet
(
next
,
0
);
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfOutput
;
++
i
)
{
SQLFunctionCtx
*
pCtx
=
&
pRuntimeEnv
->
pCtx
[
i
];
int32_t
functionId
=
pQuery
->
pExpr1
[
i
].
base
.
functionId
;
SColIndex
*
pColIndex
=
&
pQuery
->
pExpr1
[
i
].
base
.
colInfo
;
if
(
!
TSDB_COL_IS_NORMAL_COL
(
pColIndex
->
flag
))
{
aAggs
[
functionId
].
xFunction
(
pCtx
);
continue
;
}
SColumnInfoData
*
p
=
taosArrayGet
(
prev
,
pColIndex
->
colIndex
);
SColumnInfoData
*
n
=
taosArrayGet
(
next
,
pColIndex
->
colIndex
);
assert
(
p
->
info
.
colId
==
pColIndex
->
colId
);
pCtx
->
start
.
key
=
*
(
TSKEY
*
)
startTs
->
pData
;
pCtx
->
end
.
key
=
*
(
TSKEY
*
)
endTs
->
pData
;
if
(
p
->
info
.
type
!=
TSDB_DATA_TYPE_BINARY
&&
p
->
info
.
type
!=
TSDB_DATA_TYPE_NCHAR
)
{
GET_TYPED_DATA
(
pCtx
->
start
.
val
,
double
,
p
->
info
.
type
,
p
->
pData
);
GET_TYPED_DATA
(
pCtx
->
end
.
val
,
double
,
n
->
info
.
type
,
n
->
pData
);
}
else
{
// string pointer
pCtx
->
start
.
ptr
=
p
->
pData
;
pCtx
->
end
.
ptr
=
n
->
pData
;
}
pCtx
->
param
[
2
].
i64
=
(
int8_t
)
pQuery
->
fillType
;
pCtx
->
nStartQueryTimestamp
=
pQuery
->
window
.
skey
;
if
(
pQuery
->
fillVal
!=
NULL
)
{
if
(
isNull
((
const
char
*
)
&
pQuery
->
fillVal
[
i
],
pCtx
->
inputType
))
{
pCtx
->
param
[
1
].
nType
=
TSDB_DATA_TYPE_NULL
;
}
else
{
// todo refactor, tVariantCreateFromBinary should handle the NULL value
if
(
pCtx
->
inputType
!=
TSDB_DATA_TYPE_BINARY
&&
pCtx
->
inputType
!=
TSDB_DATA_TYPE_NCHAR
)
{
tVariantCreateFromBinary
(
&
pCtx
->
param
[
1
],
(
char
*
)
&
pQuery
->
fillVal
[
i
],
pCtx
->
inputBytes
,
pCtx
->
inputType
);
}
}
}
aAggs
[
functionId
].
xFunction
(
pCtx
);
}
}
void
scanOneTableDataBlocks
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
TSKEY
start
)
{
void
scanOneTableDataBlocks
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
TSKEY
start
)
{
SQInfo
*
pQInfo
=
(
SQInfo
*
)
GET_QINFO_ADDR
(
pRuntimeEnv
);
SQInfo
*
pQInfo
=
(
SQInfo
*
)
GET_QINFO_ADDR
(
pRuntimeEnv
);
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
...
@@ -3711,7 +3804,7 @@ void scanOneTableDataBlocks(SQueryRuntimeEnv *pRuntimeEnv, TSKEY start) {
...
@@ -3711,7 +3804,7 @@ void scanOneTableDataBlocks(SQueryRuntimeEnv *pRuntimeEnv, TSKEY start) {
}
}
}
}
if
(
!
need
ScanDataBlocksAgai
n
(
pRuntimeEnv
))
{
if
(
!
need
RepeatSca
n
(
pRuntimeEnv
))
{
// restore the status code and jump out of loop
// restore the status code and jump out of loop
if
(
pRuntimeEnv
->
scanFlag
==
REPEAT_SCAN
)
{
if
(
pRuntimeEnv
->
scanFlag
==
REPEAT_SCAN
)
{
pQuery
->
status
=
qstatus
.
status
;
pQuery
->
status
=
qstatus
.
status
;
...
@@ -3737,24 +3830,19 @@ void scanOneTableDataBlocks(SQueryRuntimeEnv *pRuntimeEnv, TSKEY start) {
...
@@ -3737,24 +3830,19 @@ void scanOneTableDataBlocks(SQueryRuntimeEnv *pRuntimeEnv, TSKEY start) {
qDebug
(
"QInfo:%p start to repeat scan data blocks due to query func required, qrange:%"
PRId64
"-%"
PRId64
,
pQInfo
,
qDebug
(
"QInfo:%p start to repeat scan data blocks due to query func required, qrange:%"
PRId64
"-%"
PRId64
,
pQInfo
,
cond
.
twindow
.
skey
,
cond
.
twindow
.
ekey
);
cond
.
twindow
.
skey
,
cond
.
twindow
.
ekey
);
// check if query is killed or not
if
(
isQueryKilled
(
pQInfo
))
{
longjmp
(
pRuntimeEnv
->
env
,
TSDB_CODE_TSC_QUERY_CANCELLED
);
}
}
}
if
(
!
needReverseScan
(
pQuery
))
{
if
(
needReverseScan
(
pQuery
))
{
return
;
setEnvBeforeReverseScan
(
pRuntimeEnv
,
&
qstatus
);
}
setEnvBeforeReverseScan
(
pRuntimeEnv
,
&
qstatus
);
// reverse scan from current position
qDebug
(
"QInfo:%p start to reverse scan"
,
pQInfo
);
doScanAllDataBlocks
(
pRuntimeEnv
);
// reverse scan from current position
clearEnvAfterReverseScan
(
pRuntimeEnv
,
&
qstatus
);
qDebug
(
"QInfo:%p start to reverse scan"
,
pQInfo
);
}
doScanAllDataBlocks
(
pRuntimeEnv
);
clearEnvAfterReverseScan
(
pRuntimeEnv
,
&
qstatus
);
handleInterpolationQuery
(
pQInfo
);
}
}
void
finalizeQueryResult
(
SQueryRuntimeEnv
*
pRuntimeEnv
)
{
void
finalizeQueryResult
(
SQueryRuntimeEnv
*
pRuntimeEnv
)
{
...
@@ -4377,7 +4465,59 @@ static void updateOffsetVal(SQueryRuntimeEnv *pRuntimeEnv, SDataBlockInfo *pBloc
...
@@ -4377,7 +4465,59 @@ static void updateOffsetVal(SQueryRuntimeEnv *pRuntimeEnv, SDataBlockInfo *pBloc
qDebug
(
"QInfo:%p check data block, brange:%"
PRId64
"-%"
PRId64
", numOfRows:%d, numOfRes:%d, lastKey:%"
PRId64
,
GET_QINFO_ADDR
(
pRuntimeEnv
),
qDebug
(
"QInfo:%p check data block, brange:%"
PRId64
"-%"
PRId64
", numOfRows:%d, numOfRes:%d, lastKey:%"
PRId64
,
GET_QINFO_ADDR
(
pRuntimeEnv
),
pBlockInfo
->
window
.
skey
,
pBlockInfo
->
window
.
ekey
,
pBlockInfo
->
rows
,
numOfRes
,
pQuery
->
current
->
lastKey
);
pBlockInfo
->
window
.
skey
,
pBlockInfo
->
window
.
ekey
,
pBlockInfo
->
rows
,
numOfRes
,
pQuery
->
current
->
lastKey
);
}
}
static
void
freeTableBlockDist
(
STableBlockDist
*
pTableBlockDist
)
{
if
(
pTableBlockDist
!=
NULL
)
{
taosArrayDestroy
(
pTableBlockDist
->
dataBlockInfos
);
free
(
pTableBlockDist
->
result
);
free
(
pTableBlockDist
);
}
}
static
int32_t
getPercentileFromSortedArray
(
const
SArray
*
pArray
,
double
rate
)
{
int32_t
len
=
(
int32_t
)
taosArrayGetSize
(
pArray
);
if
(
len
<=
0
)
{
return
0
;
}
assert
(
rate
>=
0
&&
rate
<=
1
.
0
);
int
idx
=
(
int32_t
)((
len
-
1
)
*
rate
);
return
((
SDataBlockInfo
*
)(
taosArrayGet
(
pArray
,
idx
)))
->
rows
;
}
static
int
compareBlockInfo
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
int32_t
left
=
((
SDataBlockInfo
*
)
pLeft
)
->
rows
;
int32_t
right
=
((
SDataBlockInfo
*
)
pRight
)
->
rows
;
if
(
left
>
right
)
return
1
;
if
(
left
<
right
)
return
-
1
;
return
0
;
}
static
void
generateBlockDistResult
(
STableBlockDist
*
pTableBlockDist
)
{
if
(
pTableBlockDist
==
NULL
)
{
return
;
}
int64_t
min
=
INT64_MAX
,
max
=
INT64_MIN
,
avg
=
0
;
SArray
*
blockInfos
=
pTableBlockDist
->
dataBlockInfos
;
int64_t
totalRows
=
0
,
totalBlocks
=
taosArrayGetSize
(
blockInfos
);
for
(
size_t
i
=
0
;
i
<
taosArrayGetSize
(
blockInfos
);
i
++
)
{
SDataBlockInfo
*
blockInfo
=
taosArrayGet
(
blockInfos
,
i
);
int64_t
rows
=
blockInfo
->
rows
;
min
=
MIN
(
min
,
rows
);
max
=
MAX
(
max
,
rows
);
totalRows
+=
rows
;
}
avg
=
totalBlocks
>
0
?
(
int64_t
)(
totalRows
/
totalBlocks
)
:
0
;
taosArraySort
(
blockInfos
,
compareBlockInfo
);
int
sz
=
sprintf
(
pTableBlockDist
->
result
,
"summery:
\n\t
5th=[%d], 25th=[%d], 50th=[%d],75th=[%d], 95th=[%d], 99th=[%d]
\n\t
min=[%"
PRId64
"], max=[%"
PRId64
"], avg = [%"
PRId64
"]
\n\t
totalRows=[%"
PRId64
"], totalBlocks=[%"
PRId64
"]
\n\t
seekHeaderTimeCost=[%"
PRId64
"(us)]
\n\t
rowsInMem=[%"
PRId64
"]"
,
getPercentileFromSortedArray
(
blockInfos
,
0
.
05
),
getPercentileFromSortedArray
(
blockInfos
,
0
.
25
),
getPercentileFromSortedArray
(
blockInfos
,
0
.
50
),
getPercentileFromSortedArray
(
blockInfos
,
0
.
75
),
getPercentileFromSortedArray
(
blockInfos
,
0
.
95
),
getPercentileFromSortedArray
(
blockInfos
,
0
.
99
),
min
,
max
,
avg
,
totalRows
,
totalBlocks
,
pTableBlockDist
->
firstSeekTimeUs
,
pTableBlockDist
->
numOfRowsInMemTable
);
UNUSED
(
sz
);
return
;
}
void
skipBlocks
(
SQueryRuntimeEnv
*
pRuntimeEnv
)
{
void
skipBlocks
(
SQueryRuntimeEnv
*
pRuntimeEnv
)
{
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
...
@@ -4891,6 +5031,7 @@ static bool multiTableMultioutputHelper(SQInfo *pQInfo, int32_t index) {
...
@@ -4891,6 +5031,7 @@ static bool multiTableMultioutputHelper(SQInfo *pQInfo, int32_t index) {
.
order
=
pQuery
->
order
.
order
,
.
order
=
pQuery
->
order
.
order
,
.
colList
=
pQuery
->
colList
,
.
colList
=
pQuery
->
colList
,
.
numOfCols
=
pQuery
->
numOfCols
,
.
numOfCols
=
pQuery
->
numOfCols
,
.
loadExternalRows
=
false
,
};
};
// todo refactor
// todo refactor
...
@@ -4985,6 +5126,7 @@ STsdbQueryCond createTsdbQueryCond(SQuery* pQuery, STimeWindow* win) {
...
@@ -4985,6 +5126,7 @@ STsdbQueryCond createTsdbQueryCond(SQuery* pQuery, STimeWindow* win) {
.
colList
=
pQuery
->
colList
,
.
colList
=
pQuery
->
colList
,
.
order
=
pQuery
->
order
.
order
,
.
order
=
pQuery
->
order
.
order
,
.
numOfCols
=
pQuery
->
numOfCols
,
.
numOfCols
=
pQuery
->
numOfCols
,
.
loadExternalRows
=
false
,
};
};
TIME_WINDOW_COPY
(
cond
.
twindow
,
*
win
);
TIME_WINDOW_COPY
(
cond
.
twindow
,
*
win
);
...
@@ -5728,15 +5870,13 @@ static void tableIntervalProcess(SQInfo *pQInfo, STableQueryInfo* pTableInfo) {
...
@@ -5728,15 +5870,13 @@ static void tableIntervalProcess(SQInfo *pQInfo, STableQueryInfo* pTableInfo) {
}
}
scanOneTableDataBlocks
(
pRuntimeEnv
,
newStartKey
);
scanOneTableDataBlocks
(
pRuntimeEnv
,
newStartKey
);
assert
(
!
Q_STATUS_EQUAL
(
pQuery
->
status
,
QUERY_NOT_COMPLETED
));
finalizeQueryResult
(
pRuntimeEnv
);
finalizeQueryResult
(
pRuntimeEnv
);
// skip offset result rows
// skip offset result rows
pQuery
->
rec
.
rows
=
0
;
pQuery
->
rec
.
rows
=
0
;
// not fill or no result generated during this query
// not fill or no result generated during this query
if
(
pQuery
->
fillType
==
TSDB_FILL_NONE
||
pRuntimeEnv
->
windowResInfo
.
size
==
0
)
{
if
(
pQuery
->
fillType
==
TSDB_FILL_NONE
||
pRuntimeEnv
->
windowResInfo
.
size
==
0
||
isPointInterpoQuery
(
pQuery
)
)
{
// all data scanned, the group by normal column can return
// all data scanned, the group by normal column can return
int32_t
numOfClosed
=
numOfClosedResultRows
(
&
pRuntimeEnv
->
windowResInfo
);
int32_t
numOfClosed
=
numOfClosedResultRows
(
&
pRuntimeEnv
->
windowResInfo
);
if
(
pQuery
->
limit
.
offset
>
numOfClosed
)
{
if
(
pQuery
->
limit
.
offset
>
numOfClosed
)
{
...
@@ -5771,7 +5911,7 @@ static void tableQueryImpl(SQInfo *pQInfo) {
...
@@ -5771,7 +5911,7 @@ static void tableQueryImpl(SQInfo *pQInfo) {
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
if
(
hasNotReturnedResults
(
pRuntimeEnv
))
{
if
(
hasNotReturnedResults
(
pRuntimeEnv
))
{
if
(
pQuery
->
fillType
!=
TSDB_FILL_NONE
)
{
if
(
pQuery
->
fillType
!=
TSDB_FILL_NONE
&&
!
isPointInterpoQuery
(
pQuery
)
)
{
/*
/*
* There are remain results that are not returned due to result interpolation
* There are remain results that are not returned due to result interpolation
* So, we do keep in this procedure instead of launching retrieve procedure for next results.
* So, we do keep in this procedure instead of launching retrieve procedure for next results.
...
@@ -5830,6 +5970,58 @@ static void tableQueryImpl(SQInfo *pQInfo) {
...
@@ -5830,6 +5970,58 @@ static void tableQueryImpl(SQInfo *pQInfo) {
pRuntimeEnv
->
summary
.
elapsedTime
+=
(
taosGetTimestampUs
()
-
st
);
pRuntimeEnv
->
summary
.
elapsedTime
+=
(
taosGetTimestampUs
()
-
st
);
assert
(
pQInfo
->
tableqinfoGroupInfo
.
numOfTables
==
1
);
assert
(
pQInfo
->
tableqinfoGroupInfo
.
numOfTables
==
1
);
}
}
static
void
buildTableBlockDistResult
(
SQInfo
*
pQInfo
)
{
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
pQuery
->
pos
=
0
;
STableBlockDist
*
pTableBlockDist
=
calloc
(
1
,
sizeof
(
STableBlockDist
));
pTableBlockDist
->
dataBlockInfos
=
taosArrayInit
(
512
,
sizeof
(
SDataBlockInfo
));
pTableBlockDist
->
result
=
(
char
*
)
malloc
(
512
);
TsdbQueryHandleT
pQueryHandle
=
pRuntimeEnv
->
pQueryHandle
;
SDataBlockInfo
blockInfo
=
SDATA_BLOCK_INITIALIZER
;
SSchema
blockDistSchema
=
tGetBlockDistColumnSchema
();
int64_t
startTime
=
taosGetTimestampUs
();
while
(
tsdbNextDataBlockWithoutMerge
(
pQueryHandle
))
{
if
(
isQueryKilled
(
GET_QINFO_ADDR
(
pRuntimeEnv
)))
{
freeTableBlockDist
(
pTableBlockDist
);
longjmp
(
pRuntimeEnv
->
env
,
TSDB_CODE_TSC_QUERY_CANCELLED
);
}
if
(
pTableBlockDist
->
firstSeekTimeUs
==
0
)
{
pTableBlockDist
->
firstSeekTimeUs
=
taosGetTimestampUs
()
-
startTime
;
}
tsdbRetrieveDataBlockInfo
(
pQueryHandle
,
&
blockInfo
);
taosArrayPush
(
pTableBlockDist
->
dataBlockInfos
,
&
blockInfo
);
}
if
(
terrno
!=
TSDB_CODE_SUCCESS
)
{
freeTableBlockDist
(
pTableBlockDist
);
longjmp
(
pRuntimeEnv
->
env
,
terrno
);
}
pTableBlockDist
->
numOfRowsInMemTable
=
tsdbGetNumOfRowsInMemTable
(
pQueryHandle
);
generateBlockDistResult
(
pTableBlockDist
);
int
type
=
-
1
;
assert
(
pQuery
->
numOfOutput
==
1
);
SExprInfo
*
pExprInfo
=
pQuery
->
pExpr1
;
for
(
int32_t
j
=
0
;
j
<
pQuery
->
numOfOutput
;
j
++
)
{
if
(
pExprInfo
[
j
].
base
.
colInfo
.
colId
==
TSDB_BLOCK_DIST_COLUMN_INDEX
)
{
type
=
blockDistSchema
.
type
;
}
assert
(
type
==
TSDB_DATA_TYPE_BINARY
);
STR_WITH_SIZE_TO_VARSTR
(
pQuery
->
sdata
[
j
]
->
data
,
pTableBlockDist
->
result
,
(
VarDataLenT
)
strlen
(
pTableBlockDist
->
result
));
}
freeTableBlockDist
(
pTableBlockDist
);
pQuery
->
rec
.
rows
=
1
;
setQueryStatus
(
pQuery
,
QUERY_COMPLETED
);
return
;
}
static
void
stableQueryImpl
(
SQInfo
*
pQInfo
)
{
static
void
stableQueryImpl
(
SQInfo
*
pQInfo
)
{
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
...
@@ -5857,7 +6049,10 @@ static int32_t getColumnIndexInSource(SQueryTableMsg *pQueryMsg, SSqlFuncMsg *pE
...
@@ -5857,7 +6049,10 @@ static int32_t getColumnIndexInSource(SQueryTableMsg *pQueryMsg, SSqlFuncMsg *pE
if
(
TSDB_COL_IS_TAG
(
pExprMsg
->
colInfo
.
flag
))
{
if
(
TSDB_COL_IS_TAG
(
pExprMsg
->
colInfo
.
flag
))
{
if
(
pExprMsg
->
colInfo
.
colId
==
TSDB_TBNAME_COLUMN_INDEX
)
{
if
(
pExprMsg
->
colInfo
.
colId
==
TSDB_TBNAME_COLUMN_INDEX
)
{
return
TSDB_TBNAME_COLUMN_INDEX
;
return
TSDB_TBNAME_COLUMN_INDEX
;
}
else
if
(
pExprMsg
->
colInfo
.
colId
==
TSDB_BLOCK_DIST_COLUMN_INDEX
)
{
return
TSDB_BLOCK_DIST_COLUMN_INDEX
;
}
}
while
(
j
<
pQueryMsg
->
numOfTags
)
{
while
(
j
<
pQueryMsg
->
numOfTags
)
{
if
(
pExprMsg
->
colInfo
.
colId
==
pTagCols
[
j
].
colId
)
{
if
(
pExprMsg
->
colInfo
.
colId
==
pTagCols
[
j
].
colId
)
{
...
@@ -6314,6 +6509,10 @@ static int32_t createQueryFuncExprFromMsg(SQueryTableMsg *pQueryMsg, int32_t num
...
@@ -6314,6 +6509,10 @@ static int32_t createQueryFuncExprFromMsg(SQueryTableMsg *pQueryMsg, int32_t num
SSchema
s
=
tGetTableNameColumnSchema
();
SSchema
s
=
tGetTableNameColumnSchema
();
type
=
s
.
type
;
type
=
s
.
type
;
bytes
=
s
.
bytes
;
bytes
=
s
.
bytes
;
}
else
if
(
pExprs
[
i
].
base
.
colInfo
.
colId
==
TSDB_BLOCK_DIST_COLUMN_INDEX
)
{
SSchema
s
=
tGetBlockDistColumnSchema
();
type
=
s
.
type
;
bytes
=
s
.
bytes
;
}
else
if
(
pExprs
[
i
].
base
.
colInfo
.
colId
<=
TSDB_UD_COLUMN_INDEX
)
{
}
else
if
(
pExprs
[
i
].
base
.
colInfo
.
colId
<=
TSDB_UD_COLUMN_INDEX
)
{
// it is a user-defined constant value column
// it is a user-defined constant value column
assert
(
pExprs
[
i
].
base
.
functionId
==
TSDB_FUNC_PRJ
);
assert
(
pExprs
[
i
].
base
.
functionId
==
TSDB_FUNC_PRJ
);
...
@@ -6327,7 +6526,7 @@ static int32_t createQueryFuncExprFromMsg(SQueryTableMsg *pQueryMsg, int32_t num
...
@@ -6327,7 +6526,7 @@ static int32_t createQueryFuncExprFromMsg(SQueryTableMsg *pQueryMsg, int32_t num
}
else
{
}
else
{
int32_t
j
=
getColumnIndexInSource
(
pQueryMsg
,
&
pExprs
[
i
].
base
,
pTagCols
);
int32_t
j
=
getColumnIndexInSource
(
pQueryMsg
,
&
pExprs
[
i
].
base
,
pTagCols
);
if
(
TSDB_COL_IS_TAG
(
pExprs
[
i
].
base
.
colInfo
.
flag
))
{
if
(
TSDB_COL_IS_TAG
(
pExprs
[
i
].
base
.
colInfo
.
flag
))
{
if
(
j
<
TSDB_
TBNAME
_COLUMN_INDEX
||
j
>=
pQueryMsg
->
numOfTags
)
{
if
(
j
<
TSDB_
BLOCK_DIST
_COLUMN_INDEX
||
j
>=
pQueryMsg
->
numOfTags
)
{
return
TSDB_CODE_QRY_INVALID_MSG
;
return
TSDB_CODE_QRY_INVALID_MSG
;
}
}
}
else
{
}
else
{
...
@@ -6497,7 +6696,7 @@ static void doUpdateExprColumnIndex(SQuery *pQuery) {
...
@@ -6497,7 +6696,7 @@ static void doUpdateExprColumnIndex(SQuery *pQuery) {
}
}
}
}
assert
(
f
<
pQuery
->
numOfTags
||
pColIndex
->
colId
==
TSDB_TBNAME_COLUMN_INDEX
);
assert
(
f
<
pQuery
->
numOfTags
||
pColIndex
->
colId
==
TSDB_TBNAME_COLUMN_INDEX
||
pColIndex
->
colId
==
TSDB_BLOCK_DIST_COLUMN_INDEX
);
}
}
}
}
}
}
...
@@ -6700,9 +6899,10 @@ static SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SSqlGroupbyExpr *pGrou
...
@@ -6700,9 +6899,10 @@ static SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SSqlGroupbyExpr *pGrou
index
+=
1
;
index
+=
1
;
}
}
}
}
colIdCheck
(
pQuery
);
colIdCheck
(
pQuery
);
pQInfo
->
runtimeEnv
.
queryBlockDist
=
(
numOfOutput
==
1
&&
pExprs
[
0
].
base
.
colInfo
.
colId
==
TSDB_BLOCK_DIST_COLUMN_INDEX
);
qDebug
(
"qmsg:%p QInfo:%p created"
,
pQueryMsg
,
pQInfo
);
qDebug
(
"qmsg:%p QInfo:%p created"
,
pQueryMsg
,
pQInfo
);
return
pQInfo
;
return
pQInfo
;
...
@@ -6719,7 +6919,8 @@ _cleanup_query:
...
@@ -6719,7 +6919,8 @@ _cleanup_query:
for
(
int32_t
i
=
0
;
i
<
numOfOutput
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfOutput
;
++
i
)
{
SExprInfo
*
pExprInfo
=
&
pExprs
[
i
];
SExprInfo
*
pExprInfo
=
&
pExprs
[
i
];
if
(
pExprInfo
->
pExpr
!=
NULL
)
{
if
(
pExprInfo
->
pExpr
!=
NULL
)
{
tExprTreeDestroy
(
&
pExprInfo
->
pExpr
,
NULL
);
tExprTreeDestroy
(
pExprInfo
->
pExpr
,
NULL
);
pExprInfo
->
pExpr
=
NULL
;
}
}
}
}
...
@@ -6835,7 +7036,7 @@ static void* destroyQueryFuncExpr(SExprInfo* pExprInfo, int32_t numOfExpr) {
...
@@ -6835,7 +7036,7 @@ static void* destroyQueryFuncExpr(SExprInfo* pExprInfo, int32_t numOfExpr) {
for
(
int32_t
i
=
0
;
i
<
numOfExpr
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfExpr
;
++
i
)
{
if
(
pExprInfo
[
i
].
pExpr
!=
NULL
)
{
if
(
pExprInfo
[
i
].
pExpr
!=
NULL
)
{
tExpr
Nod
eDestroy
(
pExprInfo
[
i
].
pExpr
,
NULL
);
tExpr
Tre
eDestroy
(
pExprInfo
[
i
].
pExpr
,
NULL
);
}
}
}
}
...
@@ -7212,6 +7413,8 @@ bool qTableQuery(qinfo_t qinfo) {
...
@@ -7212,6 +7413,8 @@ bool qTableQuery(qinfo_t qinfo) {
buildTagQueryResult
(
pQInfo
);
buildTagQueryResult
(
pQInfo
);
}
else
if
(
pQInfo
->
runtimeEnv
.
stableQuery
)
{
}
else
if
(
pQInfo
->
runtimeEnv
.
stableQuery
)
{
stableQueryImpl
(
pQInfo
);
stableQueryImpl
(
pQInfo
);
}
else
if
(
pQInfo
->
runtimeEnv
.
queryBlockDist
){
buildTableBlockDistResult
(
pQInfo
);
}
else
{
}
else
{
tableQueryImpl
(
pQInfo
);
tableQueryImpl
(
pQInfo
);
}
}
...
...
src/query/src/qExtbuffer.c
浏览文件 @
e7614def
...
@@ -12,13 +12,13 @@
...
@@ -12,13 +12,13 @@
* You should have received a copy of the GNU Affero General Public License
* 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/>.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
*/
#include "os.h"
#include "qExtbuffer.h"
#include "qExtbuffer.h"
#include "os.h"
#include "qAggMain.h"
#include "queryLog.h"
#include "queryLog.h"
#include "taos.h"
#include "taos.h"
#include "taosdef.h"
#include "taosdef.h"
#include "taosmsg.h"
#include "taosmsg.h"
#include "tsqlfunction.h"
#include "tulog.h"
#include "tulog.h"
#define COLMODEL_GET_VAL(data, schema, allrow, rowId, colId) \
#define COLMODEL_GET_VAL(data, schema, allrow, rowId, colId) \
...
...
src/query/src/qFill.c
浏览文件 @
e7614def
...
@@ -15,9 +15,9 @@
...
@@ -15,9 +15,9 @@
#include "os.h"
#include "os.h"
#include "qAggMain.h"
#include "taosdef.h"
#include "taosdef.h"
#include "taosmsg.h"
#include "taosmsg.h"
#include "tsqlfunction.h"
#include "ttype.h"
#include "ttype.h"
#include "qFill.h"
#include "qFill.h"
...
@@ -120,7 +120,7 @@ static void doFillOneRowResult(SFillInfo* pFillInfo, tFilePage** data, char** sr
...
@@ -120,7 +120,7 @@ static void doFillOneRowResult(SFillInfo* pFillInfo, tFilePage** data, char** sr
point1
=
(
SPoint
){.
key
=
*
(
TSKEY
*
)(
prev
),
.
val
=
prev
+
pCol
->
col
.
offset
};
point1
=
(
SPoint
){.
key
=
*
(
TSKEY
*
)(
prev
),
.
val
=
prev
+
pCol
->
col
.
offset
};
point2
=
(
SPoint
){.
key
=
ts
,
.
val
=
srcData
[
i
]
+
pFillInfo
->
index
*
bytes
};
point2
=
(
SPoint
){.
key
=
ts
,
.
val
=
srcData
[
i
]
+
pFillInfo
->
index
*
bytes
};
point
=
(
SPoint
){.
key
=
pFillInfo
->
currentKey
,
.
val
=
val1
};
point
=
(
SPoint
){.
key
=
pFillInfo
->
currentKey
,
.
val
=
val1
};
taosGetLinearInterpolationVal
(
type
,
&
point1
,
&
point2
,
&
point
);
taosGetLinearInterpolationVal
(
&
point
,
type
,
&
point1
,
&
point2
,
type
);
}
}
}
else
{
}
else
{
setNullValueForRow
(
pFillInfo
,
data
,
pFillInfo
->
numOfCols
,
index
);
setNullValueForRow
(
pFillInfo
,
data
,
pFillInfo
->
numOfCols
,
index
);
...
@@ -479,25 +479,13 @@ int64_t getNumOfResultsAfterFillGap(SFillInfo* pFillInfo, TSKEY ekey, int32_t ma
...
@@ -479,25 +479,13 @@ int64_t getNumOfResultsAfterFillGap(SFillInfo* pFillInfo, TSKEY ekey, int32_t ma
return
(
numOfRes
>
maxNumOfRows
)
?
maxNumOfRows
:
numOfRes
;
return
(
numOfRes
>
maxNumOfRows
)
?
maxNumOfRows
:
numOfRes
;
}
}
int32_t
taosGetLinearInterpolationVal
(
int32_t
type
,
SPoint
*
point1
,
SPoint
*
point2
,
SPoint
*
point
)
{
int32_t
taosGetLinearInterpolationVal
(
SPoint
*
point
,
int32_t
outputType
,
SPoint
*
point1
,
SPoint
*
point2
,
int32_t
inputType
)
{
double
v1
=
-
1
;
double
v1
=
-
1
,
v2
=
-
1
;
double
v2
=
-
1
;
GET_TYPED_DATA
(
v1
,
double
,
inputType
,
point1
->
val
);
GET_TYPED_DATA
(
v2
,
double
,
inputType
,
point2
->
val
);
GET_TYPED_DATA
(
v1
,
double
,
type
,
point1
->
val
);
GET_TYPED_DATA
(
v2
,
double
,
type
,
point2
->
val
);
double
r
=
DO_INTERPOLATION
(
v1
,
v2
,
point1
->
key
,
point2
->
key
,
point
->
key
);
double
r
=
DO_INTERPOLATION
(
v1
,
v2
,
point1
->
key
,
point2
->
key
,
point
->
key
);
SET_TYPED_DATA
(
point
->
val
,
outputType
,
r
);
switch
(
type
)
{
case
TSDB_DATA_TYPE_TINYINT
:
*
(
int8_t
*
)
point
->
val
=
(
int8_t
)
r
;
break
;
case
TSDB_DATA_TYPE_SMALLINT
:
*
(
int16_t
*
)
point
->
val
=
(
int16_t
)
r
;
break
;
case
TSDB_DATA_TYPE_INT
:
*
(
int32_t
*
)
point
->
val
=
(
int32_t
)
r
;
break
;
case
TSDB_DATA_TYPE_BIGINT
:
*
(
int64_t
*
)
point
->
val
=
(
int64_t
)
r
;
break
;
case
TSDB_DATA_TYPE_DOUBLE
:
*
(
double
*
)
point
->
val
=
(
double
)
r
;
break
;
case
TSDB_DATA_TYPE_FLOAT
:
*
(
float
*
)
point
->
val
=
(
float
)
r
;
break
;
default:
assert
(
0
);
}
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
...
src/query/src/qParserImpl.c
浏览文件 @
e7614def
...
@@ -71,7 +71,7 @@ abort_parse:
...
@@ -71,7 +71,7 @@ abort_parse:
return
sqlInfo
;
return
sqlInfo
;
}
}
tSQLExprList
*
tSqlExprListAppend
(
tSQLExprList
*
pList
,
tSQLExpr
*
pNode
,
SStrToken
*
pToken
)
{
tSQLExprList
*
tSqlExprListAppend
(
tSQLExprList
*
pList
,
tSQLExpr
*
pNode
,
SStrToken
*
p
Distinct
,
SStrToken
*
p
Token
)
{
if
(
pList
==
NULL
)
{
if
(
pList
==
NULL
)
{
pList
=
calloc
(
1
,
sizeof
(
tSQLExprList
));
pList
=
calloc
(
1
,
sizeof
(
tSQLExprList
));
}
}
...
@@ -97,6 +97,7 @@ tSQLExprList *tSqlExprListAppend(tSQLExprList *pList, tSQLExpr *pNode, SStrToken
...
@@ -97,6 +97,7 @@ tSQLExprList *tSqlExprListAppend(tSQLExprList *pList, tSQLExpr *pNode, SStrToken
strdequote
(
pItem
->
aliasName
);
strdequote
(
pItem
->
aliasName
);
}
}
pItem
->
distinct
=
(
pDistinct
!=
NULL
);
}
}
return
pList
;
return
pList
;
}
}
...
...
src/query/src/qPercentile.c
浏览文件 @
e7614def
...
@@ -115,6 +115,11 @@ int32_t tBucketIntHash(tMemBucket *pBucket, const void *value) {
...
@@ -115,6 +115,11 @@ int32_t tBucketIntHash(tMemBucket *pBucket, const void *value) {
GET_TYPED_DATA
(
v
,
int64_t
,
pBucket
->
type
,
value
);
GET_TYPED_DATA
(
v
,
int64_t
,
pBucket
->
type
,
value
);
int32_t
index
=
-
1
;
int32_t
index
=
-
1
;
if
(
v
>
pBucket
->
range
.
i64MaxVal
||
v
<
pBucket
->
range
.
i64MinVal
)
{
return
index
;
}
// divide the value range into 1024 buckets
// divide the value range into 1024 buckets
uint64_t
span
=
pBucket
->
range
.
i64MaxVal
-
pBucket
->
range
.
i64MinVal
;
uint64_t
span
=
pBucket
->
range
.
i64MaxVal
-
pBucket
->
range
.
i64MinVal
;
if
(
span
<
pBucket
->
numOfSlots
)
{
if
(
span
<
pBucket
->
numOfSlots
)
{
...
@@ -128,7 +133,7 @@ int32_t tBucketIntHash(tMemBucket *pBucket, const void *value) {
...
@@ -128,7 +133,7 @@ int32_t tBucketIntHash(tMemBucket *pBucket, const void *value) {
}
}
}
}
assert
(
v
>=
pBucket
->
range
.
i64MinVal
&&
v
<=
pBucket
->
range
.
i64MaxVal
&&
index
>=
0
&&
index
<
pBucket
->
numOfSlots
);
assert
(
index
>=
0
&&
index
<
pBucket
->
numOfSlots
);
return
index
;
return
index
;
}
}
...
@@ -137,6 +142,11 @@ int32_t tBucketUintHash(tMemBucket *pBucket, const void *value) {
...
@@ -137,6 +142,11 @@ int32_t tBucketUintHash(tMemBucket *pBucket, const void *value) {
GET_TYPED_DATA
(
v
,
uint64_t
,
pBucket
->
type
,
value
);
GET_TYPED_DATA
(
v
,
uint64_t
,
pBucket
->
type
,
value
);
int32_t
index
=
-
1
;
int32_t
index
=
-
1
;
if
(
v
>
pBucket
->
range
.
u64MaxVal
||
v
<
pBucket
->
range
.
u64MinVal
)
{
return
index
;
}
// divide the value range into 1024 buckets
// divide the value range into 1024 buckets
uint64_t
span
=
pBucket
->
range
.
u64MaxVal
-
pBucket
->
range
.
u64MinVal
;
uint64_t
span
=
pBucket
->
range
.
u64MaxVal
-
pBucket
->
range
.
u64MinVal
;
if
(
span
<
pBucket
->
numOfSlots
)
{
if
(
span
<
pBucket
->
numOfSlots
)
{
...
@@ -150,7 +160,7 @@ int32_t tBucketUintHash(tMemBucket *pBucket, const void *value) {
...
@@ -150,7 +160,7 @@ int32_t tBucketUintHash(tMemBucket *pBucket, const void *value) {
}
}
}
}
assert
(
v
>=
pBucket
->
range
.
u64MinVal
&&
v
<=
pBucket
->
range
.
i64MaxVal
&&
index
>=
0
&&
index
<
pBucket
->
numOfSlots
);
assert
(
index
>=
0
&&
index
<
pBucket
->
numOfSlots
);
return
index
;
return
index
;
}
}
...
@@ -164,6 +174,10 @@ int32_t tBucketDoubleHash(tMemBucket *pBucket, const void *value) {
...
@@ -164,6 +174,10 @@ int32_t tBucketDoubleHash(tMemBucket *pBucket, const void *value) {
int32_t
index
=
-
1
;
int32_t
index
=
-
1
;
if
(
v
>
pBucket
->
range
.
dMaxVal
||
v
<
pBucket
->
range
.
dMinVal
)
{
return
index
;
}
// divide a range of [dMinVal, dMaxVal] into 1024 buckets
// divide a range of [dMinVal, dMaxVal] into 1024 buckets
double
span
=
pBucket
->
range
.
dMaxVal
-
pBucket
->
range
.
dMinVal
;
double
span
=
pBucket
->
range
.
dMaxVal
-
pBucket
->
range
.
dMinVal
;
if
(
span
<
pBucket
->
numOfSlots
)
{
if
(
span
<
pBucket
->
numOfSlots
)
{
...
@@ -177,7 +191,7 @@ int32_t tBucketDoubleHash(tMemBucket *pBucket, const void *value) {
...
@@ -177,7 +191,7 @@ int32_t tBucketDoubleHash(tMemBucket *pBucket, const void *value) {
}
}
}
}
assert
(
v
>=
pBucket
->
range
.
dMinVal
&&
v
<=
pBucket
->
range
.
dMaxVal
&&
index
>=
0
&&
index
<
pBucket
->
numOfSlots
);
assert
(
index
>=
0
&&
index
<
pBucket
->
numOfSlots
);
return
index
;
return
index
;
}
}
...
@@ -309,9 +323,13 @@ int32_t tMemBucketPut(tMemBucket *pBucket, const void *data, size_t size) {
...
@@ -309,9 +323,13 @@ int32_t tMemBucketPut(tMemBucket *pBucket, const void *data, size_t size) {
int32_t
bytes
=
pBucket
->
bytes
;
int32_t
bytes
=
pBucket
->
bytes
;
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
char
*
d
=
(
char
*
)
data
+
i
*
bytes
;
char
*
d
=
(
char
*
)
data
+
i
*
bytes
;
count
+=
1
;
int32_t
index
=
(
pBucket
->
hashFunc
)(
pBucket
,
d
);
int32_t
index
=
(
pBucket
->
hashFunc
)(
pBucket
,
d
);
if
(
index
<
0
)
{
continue
;
}
count
+=
1
;
tMemBucketSlot
*
pSlot
=
&
pBucket
->
pSlots
[
index
];
tMemBucketSlot
*
pSlot
=
&
pBucket
->
pSlots
[
index
];
tMemBucketUpdateBoundingBox
(
&
pSlot
->
range
,
d
,
pBucket
->
type
);
tMemBucketUpdateBoundingBox
(
&
pSlot
->
range
,
d
,
pBucket
->
type
);
...
...
src/query/src/qTokenizer.c
浏览文件 @
e7614def
...
@@ -240,6 +240,7 @@ static SKeyword keywordTable[] = {
...
@@ -240,6 +240,7 @@ static SKeyword keywordTable[] = {
{
"AVG_RATE"
,
TK_AVG_RATE
},
{
"AVG_RATE"
,
TK_AVG_RATE
},
{
"AVG_IRATE"
,
TK_AVG_IRATE
},
{
"AVG_IRATE"
,
TK_AVG_IRATE
},
{
"CACHELAST"
,
TK_CACHELAST
},
{
"CACHELAST"
,
TK_CACHELAST
},
{
"DISTINCT"
,
TK_DISTINCT
},
};
};
static
const
char
isIdChar
[]
=
{
static
const
char
isIdChar
[]
=
{
...
...
src/query/src/sql.c
浏览文件 @
e7614def
...
@@ -97,27 +97,27 @@
...
@@ -97,27 +97,27 @@
#endif
#endif
/************* Begin control #defines *****************************************/
/************* Begin control #defines *****************************************/
#define YYCODETYPE unsigned short int
#define YYCODETYPE unsigned short int
#define YYNOCODE 28
0
#define YYNOCODE 28
2
#define YYACTIONTYPE unsigned short int
#define YYACTIONTYPE unsigned short int
#define ParseTOKENTYPE SStrToken
#define ParseTOKENTYPE SStrToken
typedef
union
{
typedef
union
{
int
yyinit
;
int
yyinit
;
ParseTOKENTYPE
yy0
;
ParseTOKENTYPE
yy0
;
S
QuerySQL
*
yy30
;
S
CreatedTableInfo
yy42
;
SCreate
TableSQL
*
yy38
;
SCreate
AcctInfo
yy47
;
S
CreatedTableInfo
yy78
;
S
QuerySQL
*
yy114
;
SLimitVal
yy126
;
TAOS_FIELD
yy179
;
int
yy130
;
SLimitVal
yy204
;
S
Array
*
yy135
;
S
SubclauseInfo
*
yy219
;
SSubclauseInfo
*
yy153
;
int
yy222
;
S
IntervalVal
yy160
;
S
Array
*
yy247
;
TAOS_FIELD
yy181
;
SCreateDbInfo
yy262
;
SCreateDbInfo
yy25
6
;
tSQLExpr
*
yy32
6
;
tSQLExprList
*
yy266
;
SCreateTableSQL
*
yy358
;
SCreateAcctInfo
yy277
;
tVariant
yy378
;
tVariant
yy308
;
int64_t
yy403
;
tSQLExpr
*
yy316
;
SIntervalVal
yy430
;
int64_t
yy531
;
tSQLExprList
*
yy522
;
}
YYMINORTYPE
;
}
YYMINORTYPE
;
#ifndef YYSTACKDEPTH
#ifndef YYSTACKDEPTH
#define YYSTACKDEPTH 100
#define YYSTACKDEPTH 100
...
@@ -127,17 +127,17 @@ typedef union {
...
@@ -127,17 +127,17 @@ typedef union {
#define ParseARG_FETCH SSqlInfo* pInfo = yypParser->pInfo
#define ParseARG_FETCH SSqlInfo* pInfo = yypParser->pInfo
#define ParseARG_STORE yypParser->pInfo = pInfo
#define ParseARG_STORE yypParser->pInfo = pInfo
#define YYFALLBACK 1
#define YYFALLBACK 1
#define YYNSTATE 28
2
#define YYNSTATE 28
3
#define YYNRULE 2
48
#define YYNRULE 2
50
#define YYNTOKEN 2
09
#define YYNTOKEN 2
10
#define YY_MAX_SHIFT 28
1
#define YY_MAX_SHIFT 28
2
#define YY_MIN_SHIFTREDUCE 46
1
#define YY_MIN_SHIFTREDUCE 46
3
#define YY_MAX_SHIFTREDUCE 7
08
#define YY_MAX_SHIFTREDUCE 7
12
#define YY_ERROR_ACTION 7
09
#define YY_ERROR_ACTION 7
13
#define YY_ACCEPT_ACTION 71
0
#define YY_ACCEPT_ACTION 71
4
#define YY_NO_ACTION 71
1
#define YY_NO_ACTION 71
5
#define YY_MIN_REDUCE 71
2
#define YY_MIN_REDUCE 71
6
#define YY_MAX_REDUCE 9
59
#define YY_MAX_REDUCE 9
65
/************* End control #defines *******************************************/
/************* End control #defines *******************************************/
/* Define the yytestcase() macro to be a no-op if is not already defined
/* Define the yytestcase() macro to be a no-op if is not already defined
...
@@ -203,243 +203,241 @@ typedef union {
...
@@ -203,243 +203,241 @@ typedef union {
** yy_default[] Default action for each state.
** yy_default[] Default action for each state.
**
**
*********** Begin parsing tables **********************************************/
*********** Begin parsing tables **********************************************/
#define YY_ACTTAB_COUNT (6
22
)
#define YY_ACTTAB_COUNT (6
15
)
static
const
YYACTIONTYPE
yy_action
[]
=
{
static
const
YYACTIONTYPE
yy_action
[]
=
{
/* 0 */
158
,
505
,
158
,
710
,
281
,
857
,
15
,
578
,
182
,
506
,
/* 0 */
872
,
507
,
159
,
714
,
282
,
159
,
15
,
580
,
183
,
508
,
/* 10 */
941
,
185
,
942
,
41
,
42
,
157
,
43
,
44
,
26
,
179
,
/* 10 */
663
,
186
,
948
,
41
,
42
,
947
,
43
,
44
,
26
,
158
,
/* 20 */
190
,
35
,
505
,
505
,
231
,
47
,
45
,
49
,
46
,
868
,
/* 20 */
191
,
35
,
507
,
507
,
232
,
47
,
45
,
49
,
46
,
163
,
/* 30 */
506
,
506
,
846
,
40
,
39
,
256
,
255
,
38
,
37
,
36
,
/* 30 */
508
,
508
,
850
,
40
,
39
,
257
,
256
,
38
,
37
,
36
,
/* 40 */
41
,
42
,
162
,
43
,
44
,
857
,
951
,
190
,
35
,
178
,
/* 40 */
41
,
42
,
118
,
43
,
44
,
861
,
664
,
191
,
35
,
179
,
/* 50 */
279
,
231
,
47
,
45
,
49
,
46
,
180
,
195
,
843
,
214
,
/* 50 */
280
,
232
,
47
,
45
,
49
,
46
,
181
,
869
,
847
,
215
,
/* 60 */
40
,
39
,
938
,
61
,
38
,
37
,
36
,
462
,
463
,
464
,
/* 60 */
40
,
39
,
957
,
123
,
38
,
37
,
36
,
464
,
465
,
466
,
/* 70 */
465
,
466
,
467
,
468
,
469
,
470
,
471
,
472
,
473
,
280
,
/* 70 */
467
,
468
,
469
,
470
,
471
,
472
,
473
,
474
,
475
,
281
,
/* 80 */
198
,
846
,
204
,
41
,
42
,
865
,
43
,
44
,
246
,
266
,
/* 80 */
91
,
196
,
205
,
41
,
42
,
267
,
43
,
44
,
839
,
247
,
/* 90 */
190
,
35
,
158
,
834
,
231
,
47
,
45
,
49
,
46
,
122
,
/* 90 */
191
,
35
,
159
,
944
,
232
,
47
,
45
,
49
,
46
,
123
,
/* 100 */
122
,
184
,
942
,
40
,
39
,
122
,
62
,
38
,
37
,
36
,
/* 100 */
220
,
185
,
948
,
40
,
39
,
850
,
62
,
38
,
37
,
36
,
/* 110 */
20
,
244
,
274
,
273
,
243
,
242
,
241
,
272
,
240
,
271
,
/* 110 */
20
,
245
,
275
,
274
,
244
,
243
,
242
,
273
,
241
,
272
,
/* 120 */
270
,
269
,
239
,
268
,
267
,
38
,
37
,
36
,
813
,
657
,
/* 120 */
271
,
270
,
240
,
269
,
268
,
901
,
267
,
227
,
817
,
661
,
/* 130 */
801
,
802
,
803
,
804
,
805
,
806
,
807
,
808
,
809
,
810
,
/* 130 */
805
,
806
,
807
,
808
,
809
,
810
,
811
,
812
,
813
,
814
,
/* 140 */
811
,
812
,
814
,
815
,
42
,
200
,
43
,
44
,
253
,
252
,
/* 140 */
815
,
816
,
818
,
819
,
42
,
208
,
43
,
44
,
642
,
643
,
/* 150 */
190
,
35
,
937
,
275
,
231
,
47
,
45
,
49
,
46
,
228
,
/* 150 */
191
,
35
,
212
,
211
,
232
,
47
,
45
,
49
,
46
,
229
,
/* 160 */
895
,
66
,
226
,
40
,
39
,
115
,
894
,
38
,
37
,
36
,
/* 160 */
861
,
67
,
21
,
40
,
39
,
247
,
276
,
38
,
37
,
36
,
/* 170 */
26
,
43
,
44
,
32
,
26
,
190
,
35
,
846
,
207
,
231
,
/* 170 */
32
,
43
,
44
,
197
,
180
,
191
,
35
,
849
,
70
,
232
,
/* 180 */
47
,
45
,
49
,
46
,
26
,
211
,
210
,
754
,
40
,
39
,
/* 180 */
47
,
45
,
49
,
46
,
16
,
38
,
37
,
36
,
40
,
39
,
/* 190 */
146
,
845
,
38
,
37
,
36
,
189
,
670
,
117
,
835
,
661
,
/* 190 */
850
,
123
,
38
,
37
,
36
,
190
,
674
,
72
,
26
,
665
,
/* 200 */
71
,
664
,
26
,
667
,
763
,
189
,
670
,
146
,
193
,
661
,
/* 200 */
167
,
668
,
667
,
671
,
670
,
61
,
168
,
836
,
837
,
25
,
/* 210 */
843
,
664
,
194
,
667
,
843
,
189
,
670
,
16
,
26
,
661
,
/* 210 */
840
,
103
,
102
,
166
,
190
,
674
,
758
,
199
,
665
,
147
,
/* 220 */
936
,
664
,
249
,
667
,
843
,
10
,
21
,
186
,
187
,
70
,
/* 220 */
668
,
767
,
671
,
20
,
147
,
275
,
274
,
187
,
188
,
841
,
/* 230 */
132
,
230
,
837
,
166
,
32
,
196
,
69
,
186
,
187
,
167
,
/* 230 */
273
,
231
,
272
,
271
,
270
,
838
,
269
,
268
,
846
,
198
,
/* 240 */
250
,
615
,
843
,
122
,
102
,
101
,
165
,
186
,
187
,
174
,
/* 240 */
823
,
21
,
249
,
821
,
822
,
943
,
187
,
188
,
824
,
32
,
/* 250 */
20
,
26
,
274
,
273
,
219
,
905
,
254
,
272
,
843
,
271
,
/* 250 */
826
,
827
,
825
,
900
,
828
,
829
,
123
,
3
,
137
,
47
,
/* 260 */
270
,
269
,
607
,
268
,
267
,
832
,
833
,
25
,
836
,
819
,
/* 260 */
45
,
49
,
46
,
29
,
78
,
74
,
77
,
40
,
39
,
617
,
/* 270 */
216
,
90
,
817
,
818
,
21
,
246
,
266
,
820
,
68
,
822
,
/* 270 */
214
,
38
,
37
,
36
,
233
,
601
,
759
,
174
,
598
,
147
,
/* 280 */
823
,
821
,
32
,
824
,
825
,
47
,
45
,
49
,
46
,
258
,
/* 280 */
599
,
26
,
600
,
201
,
89
,
93
,
254
,
253
,
26
,
942
,
/* 290 */
33
,
843
,
199
,
40
,
39
,
48
,
26
,
38
,
37
,
36
,
/* 290 */
83
,
98
,
101
,
92
,
26
,
48
,
153
,
149
,
26
,
95
,
/* 300 */
197
,
217
,
213
,
248
,
67
,
48
,
27
,
669
,
659
,
173
,
/* 300 */
175
,
26
,
151
,
106
,
105
,
104
,
202
,
203
,
673
,
26
,
/* 310 */
278
,
277
,
109
,
755
,
232
,
48
,
146
,
669
,
599
,
638
,
/* 310 */
69
,
40
,
39
,
200
,
48
,
38
,
37
,
36
,
68
,
194
,
/* 320 */
639
,
596
,
668
,
597
,
844
,
598
,
612
,
669
,
175
,
40
,
/* 320 */
10
,
847
,
63
,
672
,
71
,
133
,
195
,
673
,
847
,
279
,
/* 330 */
39
,
22
,
668
,
38
,
37
,
36
,
842
,
160
,
625
,
88
,
/* 330 */
278
,
110
,
250
,
666
,
847
,
669
,
251
,
614
,
847
,
255
,
/* 340 */
92
,
188
,
668
,
119
,
660
,
82
,
97
,
100
,
91
,
201
,
/* 340 */
116
,
847
,
672
,
22
,
621
,
848
,
609
,
259
,
32
,
847
,
/* 350 */
202
,
99
,
98
,
629
,
94
,
3
,
136
,
161
,
52
,
152
,
/* 350 */
218
,
629
,
633
,
634
,
217
,
27
,
120
,
52
,
18
,
693
,
/* 360 */
148
,
29
,
77
,
73
,
76
,
150
,
105
,
104
,
103
,
630
,
/* 360 */
675
,
189
,
53
,
176
,
17
,
17
,
590
,
677
,
56
,
235
,
/* 370 */
689
,
671
,
53
,
56
,
18
,
17
,
17
,
663
,
163
,
666
,
/* 370 */
591
,
27
,
100
,
99
,
27
,
52
,
82
,
81
,
12
,
11
,
/* 380 */
662
,
588
,
665
,
4
,
81
,
80
,
27
,
234
,
589
,
164
,
/* 380 */
161
,
602
,
54
,
59
,
162
,
579
,
57
,
88
,
87
,
14
,
/* 390 */
57
,
54
,
27
,
52
,
12
,
11
,
87
,
86
,
59
,
603
,
/* 390 */
13
,
605
,
603
,
606
,
604
,
115
,
113
,
164
,
165
,
171
,
/* 400 */
577
,
604
,
14
,
13
,
601
,
170
,
602
,
673
,
114
,
112
,
/* 400 */
911
,
172
,
170
,
4
,
157
,
169
,
160
,
910
,
192
,
907
,
/* 410 */
171
,
169
,
156
,
168
,
159
,
859
,
904
,
191
,
901
,
116
,
/* 410 */
906
,
193
,
258
,
117
,
871
,
33
,
878
,
880
,
119
,
863
,
/* 420 */
900
,
192
,
257
,
867
,
600
,
872
,
874
,
887
,
118
,
886
,
/* 420 */
893
,
892
,
134
,
135
,
132
,
136
,
769
,
32
,
239
,
155
,
/* 430 */
133
,
134
,
32
,
131
,
135
,
765
,
238
,
154
,
30
,
247
,
/* 430 */
30
,
248
,
766
,
216
,
962
,
79
,
961
,
114
,
959
,
138
,
/* 440 */
762
,
956
,
78
,
955
,
953
,
137
,
251
,
950
,
84
,
113
,
/* 440 */
252
,
956
,
85
,
955
,
628
,
953
,
221
,
139
,
182
,
225
,
/* 450 */
949
,
947
,
138
,
783
,
31
,
28
,
155
,
752
,
93
,
750
,
/* 450 */
787
,
31
,
28
,
58
,
156
,
756
,
94
,
860
,
55
,
50
,
/* 460 */
215
,
95
,
96
,
748
,
624
,
58
,
747
,
203
,
147
,
745
,
/* 460 */
754
,
96
,
230
,
124
,
228
,
125
,
97
,
752
,
126
,
127
,
/* 470 */
744
,
743
,
742
,
220
,
741
,
55
,
149
,
50
,
181
,
229
,
/* 470 */
226
,
128
,
224
,
222
,
751
,
34
,
204
,
148
,
90
,
749
,
/* 480 */
224
,
856
,
227
,
124
,
151
,
738
,
736
,
734
,
732
,
730
,
/* 480 */
260
,
261
,
262
,
748
,
747
,
746
,
745
,
263
,
150
,
152
,
/* 490 */
225
,
223
,
221
,
153
,
34
,
218
,
89
,
63
,
64
,
259
,
/* 490 */
742
,
740
,
264
,
738
,
736
,
734
,
265
,
154
,
266
,
219
,
/* 500 */
260
,
888
,
261
,
262
,
264
,
263
,
265
,
276
,
708
,
205
,
/* 500 */
64
,
65
,
894
,
277
,
712
,
206
,
207
,
177
,
237
,
238
,
/* 510 */
206
,
707
,
208
,
209
,
706
,
176
,
236
,
237
,
694
,
177
,
/* 510 */
711
,
178
,
173
,
209
,
75
,
210
,
710
,
698
,
217
,
213
,
/* 520 */
172
,
212
,
74
,
216
,
65
,
609
,
746
,
60
,
233
,
106
,
/* 520 */
750
,
611
,
107
,
60
,
744
,
234
,
142
,
141
,
788
,
140
,
/* 530 */
6
,
183
,
740
,
141
,
107
,
140
,
784
,
139
,
142
,
144
,
/* 530 */
143
,
144
,
146
,
145
,
1
,
108
,
743
,
2
,
109
,
735
,
/* 540 */
143
,
145
,
739
,
1
,
108
,
841
,
731
,
2
,
626
,
129
,
/* 540 */
66
,
6
,
184
,
630
,
845
,
121
,
223
,
131
,
129
,
130
,
/* 550 */
127
,
125
,
123
,
126
,
128
,
120
,
222
,
130
,
631
,
121
,
/* 550 */
635
,
122
,
5
,
23
,
7
,
8
,
24
,
676
,
9
,
19
,
/* 560 */
23
,
7
,
8
,
672
,
24
,
5
,
9
,
674
,
19
,
72
,
/* 560 */
678
,
71
,
73
,
236
,
548
,
544
,
542
,
541
,
540
,
537
,
/* 570 */
235
,
546
,
542
,
70
,
540
,
539
,
538
,
535
,
509
,
245
,
/* 570 */
511
,
246
,
76
,
27
,
51
,
582
,
80
,
84
,
581
,
578
,
/* 580 */
79
,
75
,
27
,
83
,
51
,
580
,
579
,
576
,
530
,
528
,
/* 580 */
532
,
86
,
530
,
522
,
528
,
524
,
526
,
520
,
518
,
550
,
/* 590 */
520
,
526
,
522
,
85
,
524
,
518
,
516
,
548
,
547
,
545
,
/* 590 */
549
,
547
,
546
,
545
,
543
,
539
,
538
,
52
,
509
,
479
,
/* 600 */
544
,
543
,
541
,
537
,
536
,
52
,
507
,
477
,
475
,
110
,
/* 600 */
477
,
716
,
715
,
715
,
715
,
715
,
715
,
715
,
715
,
715
,
/* 610 */
712
,
711
,
711
,
711
,
711
,
711
,
711
,
711
,
711
,
711
,
/* 610 */
715
,
715
,
715
,
111
,
112
,
/* 620 */
711
,
111
,
};
};
static
const
YYCODETYPE
yy_lookahead
[]
=
{
static
const
YYCODETYPE
yy_lookahead
[]
=
{
/* 0 */
2
68
,
1
,
268
,
210
,
211
,
252
,
268
,
5
,
230
,
9
,
/* 0 */
2
14
,
1
,
270
,
211
,
212
,
270
,
270
,
5
,
231
,
9
,
/* 10 */
278
,
277
,
278
,
13
,
14
,
268
,
16
,
17
,
213
,
266
,
/* 10 */
1
,
279
,
280
,
13
,
14
,
280
,
16
,
17
,
214
,
270
,
/* 20 */
20
,
21
,
1
,
1
,
24
,
25
,
26
,
27
,
28
,
2
13
,
/* 20 */
20
,
21
,
1
,
1
,
24
,
25
,
26
,
27
,
28
,
2
70
,
/* 30 */
9
,
9
,
25
4
,
33
,
34
,
33
,
34
,
37
,
38
,
39
,
/* 30 */
9
,
9
,
25
5
,
33
,
34
,
33
,
34
,
37
,
38
,
39
,
/* 40 */
13
,
14
,
2
68
,
16
,
17
,
252
,
254
,
20
,
21
,
212
,
/* 40 */
13
,
14
,
2
14
,
16
,
17
,
253
,
37
,
20
,
21
,
213
,
/* 50 */
21
3
,
24
,
25
,
26
,
27
,
28
,
251
,
230
,
253
,
266
,
/* 50 */
21
4
,
24
,
25
,
26
,
27
,
28
,
252
,
271
,
254
,
267
,
/* 60 */
33
,
34
,
2
68
,
218
,
37
,
38
,
39
,
45
,
46
,
47
,
/* 60 */
33
,
34
,
2
55
,
214
,
37
,
38
,
39
,
45
,
46
,
47
,
/* 70 */
48
,
49
,
50
,
51
,
52
,
53
,
54
,
55
,
56
,
57
,
/* 70 */
48
,
49
,
50
,
51
,
52
,
53
,
54
,
55
,
56
,
57
,
/* 80 */
66
,
254
,
60
,
13
,
14
,
269
,
16
,
17
,
77
,
79
,
/* 80 */
74
,
231
,
60
,
13
,
14
,
79
,
16
,
17
,
0
,
77
,
/* 90 */
20
,
21
,
2
68
,
248
,
24
,
25
,
26
,
27
,
28
,
213
,
/* 90 */
20
,
21
,
2
70
,
270
,
24
,
25
,
26
,
27
,
28
,
214
,
/* 100 */
2
13
,
277
,
278
,
33
,
34
,
213
,
106
,
37
,
38
,
39
,
/* 100 */
2
72
,
279
,
280
,
33
,
34
,
255
,
106
,
37
,
38
,
39
,
/* 110 */
86
,
87
,
88
,
89
,
90
,
91
,
92
,
93
,
94
,
95
,
/* 110 */
86
,
87
,
88
,
89
,
90
,
91
,
92
,
93
,
94
,
95
,
/* 120 */
96
,
97
,
98
,
99
,
100
,
37
,
38
,
39
,
229
,
102
,
/* 120 */
96
,
97
,
98
,
99
,
100
,
276
,
79
,
278
,
230
,
102
,
/* 130 */
231
,
232
,
233
,
234
,
235
,
236
,
237
,
238
,
239
,
240
,
/* 130 */
232
,
233
,
234
,
235
,
236
,
237
,
238
,
239
,
240
,
241
,
/* 140 */
241
,
242
,
243
,
244
,
14
,
131
,
16
,
17
,
134
,
135
,
/* 140 */
242
,
243
,
244
,
245
,
14
,
131
,
16
,
17
,
120
,
121
,
/* 150 */
20
,
21
,
268
,
230
,
24
,
25
,
26
,
27
,
28
,
272
,
/* 150 */
20
,
21
,
138
,
139
,
24
,
25
,
26
,
27
,
28
,
274
,
/* 160 */
274
,
274
,
276
,
33
,
34
,
101
,
274
,
37
,
38
,
39
,
/* 160 */
253
,
276
,
101
,
33
,
34
,
77
,
231
,
37
,
38
,
39
,
/* 170 */
213
,
16
,
17
,
109
,
213
,
20
,
21
,
254
,
130
,
24
,
/* 170 */
109
,
16
,
17
,
66
,
267
,
20
,
21
,
255
,
219
,
24
,
/* 180 */
25
,
26
,
27
,
28
,
213
,
137
,
138
,
217
,
33
,
34
,
/* 180 */
25
,
26
,
27
,
28
,
44
,
37
,
38
,
39
,
33
,
34
,
/* 190 */
220
,
254
,
37
,
38
,
39
,
1
,
2
,
213
,
0
,
5
,
/* 190 */
255
,
214
,
37
,
38
,
39
,
1
,
2
,
219
,
214
,
5
,
/* 200 */
218
,
7
,
213
,
9
,
217
,
1
,
2
,
220
,
251
,
5
,
/* 200 */
60
,
7
,
5
,
9
,
7
,
219
,
66
,
248
,
249
,
250
,
/* 210 */
253
,
7
,
251
,
9
,
253
,
1
,
2
,
44
,
213
,
5
,
/* 210 */
251
,
71
,
72
,
73
,
1
,
2
,
218
,
66
,
5
,
221
,
/* 220 */
268
,
7
,
251
,
9
,
253
,
101
,
101
,
33
,
34
,
105
,
/* 220 */
7
,
218
,
9
,
86
,
221
,
88
,
89
,
33
,
34
,
251
,
/* 230 */
106
,
37
,
250
,
60
,
109
,
66
,
218
,
33
,
34
,
66
,
/* 230 */
93
,
37
,
95
,
96
,
97
,
249
,
99
,
100
,
254
,
132
,
/* 240 */
251
,
37
,
253
,
213
,
71
,
72
,
73
,
33
,
34
,
268
,
/* 240 */
230
,
101
,
135
,
233
,
234
,
270
,
33
,
34
,
238
,
109
,
/* 250 */
86
,
213
,
88
,
89
,
270
,
246
,
251
,
93
,
253
,
95
,
/* 250 */
240
,
241
,
242
,
276
,
244
,
245
,
214
,
61
,
62
,
25
,
/* 260 */
96
,
97
,
102
,
99
,
100
,
247
,
248
,
249
,
250
,
229
,
/* 260 */
26
,
27
,
28
,
67
,
68
,
69
,
70
,
33
,
34
,
37
,
/* 270 */
110
,
74
,
232
,
233
,
101
,
77
,
79
,
237
,
255
,
239
,
/* 270 */
130
,
37
,
38
,
39
,
15
,
2
,
218
,
137
,
5
,
221
,
/* 280 */
240
,
241
,
109
,
243
,
244
,
25
,
26
,
27
,
28
,
251
,
/* 280 */
7
,
214
,
9
,
132
,
61
,
62
,
135
,
136
,
214
,
270
,
/* 290 */
267
,
253
,
213
,
33
,
34
,
101
,
213
,
37
,
38
,
39
,
/* 290 */
67
,
68
,
69
,
70
,
214
,
101
,
61
,
62
,
214
,
76
,
/* 300 */
131
,
102
,
129
,
134
,
274
,
101
,
107
,
113
,
1
,
136
,
/* 300 */
270
,
214
,
67
,
68
,
69
,
70
,
33
,
34
,
114
,
214
,
/* 310 */
63
,
64
,
65
,
217
,
15
,
101
,
220
,
113
,
2
,
119
,
/* 310 */
256
,
33
,
34
,
214
,
101
,
37
,
38
,
39
,
276
,
252
,
/* 320 */
120
,
5
,
128
,
7
,
245
,
9
,
107
,
113
,
268
,
33
,
/* 320 */
101
,
254
,
268
,
129
,
105
,
106
,
252
,
114
,
254
,
63
,
/* 330 */
34
,
112
,
128
,
37
,
38
,
39
,
253
,
268
,
102
,
61
,
/* 330 */
64
,
65
,
252
,
5
,
254
,
7
,
252
,
107
,
254
,
252
,
/* 340 */
62
,
59
,
128
,
107
,
37
,
67
,
68
,
69
,
70
,
33
,
/* 340 */
101
,
254
,
129
,
113
,
112
,
246
,
102
,
252
,
109
,
254
,
/* 350 */
34
,
74
,
75
,
102
,
76
,
61
,
62
,
268
,
107
,
61
,
/* 350 */
102
,
102
,
102
,
102
,
110
,
107
,
107
,
107
,
107
,
102
,
/* 360 */
62
,
67
,
68
,
69
,
70
,
67
,
68
,
69
,
70
,
102
,
/* 360 */
102
,
59
,
107
,
270
,
107
,
107
,
102
,
108
,
107
,
102
,
/* 370 */
102
,
102
,
107
,
107
,
107
,
107
,
107
,
5
,
268
,
7
,
/* 370 */
102
,
107
,
74
,
75
,
107
,
107
,
133
,
134
,
133
,
134
,
/* 380 */
5
,
102
,
7
,
101
,
132
,
133
,
107
,
102
,
102
,
268
,
/* 380 */
270
,
108
,
127
,
101
,
270
,
103
,
125
,
133
,
134
,
133
,
/* 390 */
124
,
126
,
107
,
107
,
132
,
133
,
132
,
133
,
101
,
5
,
/* 390 */
134
,
5
,
5
,
7
,
7
,
61
,
62
,
270
,
270
,
270
,
/* 400 */
103
,
7
,
132
,
133
,
5
,
268
,
7
,
108
,
61
,
62
,
/* 400 */
247
,
270
,
270
,
101
,
270
,
270
,
270
,
247
,
247
,
247
,
/* 410 */
268
,
268
,
268
,
268
,
268
,
252
,
246
,
246
,
246
,
213
,
/* 410 */
247
,
247
,
247
,
214
,
214
,
269
,
214
,
214
,
214
,
253
,
/* 420 */
246
,
246
,
246
,
213
,
108
,
213
,
213
,
275
,
213
,
275
,
/* 420 */
277
,
277
,
214
,
214
,
257
,
214
,
214
,
109
,
214
,
214
,
/* 430 */
213
,
213
,
109
,
256
,
213
,
213
,
213
,
213
,
213
,
213
,
/* 430 */
214
,
214
,
214
,
253
,
214
,
214
,
214
,
59
,
214
,
214
,
/* 440 */
213
,
213
,
213
,
213
,
213
,
213
,
213
,
213
,
213
,
59
,
/* 440 */
214
,
214
,
214
,
214
,
114
,
214
,
273
,
214
,
273
,
273
,
/* 450 */
213
,
213
,
213
,
213
,
213
,
213
,
213
,
213
,
213
,
213
,
/* 450 */
214
,
214
,
214
,
124
,
214
,
214
,
214
,
266
,
126
,
123
,
/* 460 */
252
,
213
,
213
,
213
,
113
,
123
,
213
,
213
,
213
,
213
,
/* 460 */
214
,
214
,
118
,
265
,
122
,
264
,
214
,
214
,
263
,
262
,
/* 470 */
213
,
213
,
213
,
271
,
213
,
125
,
213
,
122
,
271
,
117
,
/* 470 */
117
,
261
,
116
,
115
,
214
,
128
,
214
,
214
,
85
,
214
,
/* 480 */
271
,
265
,
121
,
263
,
213
,
213
,
213
,
213
,
213
,
213
,
/* 480 */
84
,
49
,
81
,
214
,
214
,
214
,
214
,
83
,
214
,
214
,
/* 490 */
116
,
115
,
114
,
213
,
127
,
214
,
85
,
214
,
214
,
84
,
/* 490 */
214
,
214
,
53
,
214
,
214
,
214
,
82
,
214
,
80
,
215
,
/* 500 */
49
,
214
,
81
,
83
,
82
,
53
,
80
,
77
,
5
,
139
,
/* 500 */
215
,
215
,
215
,
77
,
5
,
140
,
5
,
215
,
215
,
215
,
/* 510 */
5
,
5
,
139
,
5
,
5
,
214
,
214
,
214
,
87
,
214
,
/* 510 */
5
,
215
,
215
,
140
,
219
,
5
,
5
,
87
,
110
,
131
,
/* 520 */
214
,
130
,
218
,
110
,
107
,
102
,
214
,
111
,
104
,
215
,
/* 520 */
215
,
102
,
216
,
111
,
215
,
104
,
223
,
227
,
229
,
228
,
/* 530 */
101
,
1
,
214
,
222
,
215
,
226
,
228
,
227
,
225
,
224
,
/* 530 */
226
,
224
,
222
,
225
,
220
,
216
,
215
,
217
,
216
,
215
,
/* 540 */
223
,
221
,
214
,
219
,
215
,
252
,
214
,
216
,
102
,
258
,
/* 540 */
107
,
101
,
1
,
102
,
253
,
101
,
101
,
258
,
260
,
259
,
/* 550 */
260
,
262
,
264
,
261
,
259
,
101
,
101
,
257
,
102
,
101
,
/* 550 */
102
,
101
,
101
,
107
,
119
,
119
,
107
,
102
,
101
,
101
,
/* 560 */
107
,
118
,
118
,
102
,
107
,
101
,
101
,
108
,
101
,
74
,
/* 560 */
108
,
105
,
74
,
104
,
9
,
5
,
5
,
5
,
5
,
5
,
/* 570 */
104
,
9
,
5
,
105
,
5
,
5
,
5
,
5
,
78
,
15
,
/* 570 */
78
,
15
,
74
,
107
,
16
,
5
,
134
,
134
,
5
,
102
,
/* 580 */
133
,
74
,
107
,
133
,
16
,
5
,
5
,
102
,
5
,
5
,
/* 580 */
5
,
134
,
5
,
5
,
5
,
5
,
5
,
5
,
5
,
5
,
/* 590 */
5
,
5
,
5
,
133
,
5
,
5
,
5
,
5
,
5
,
5
,
/* 590 */
5
,
5
,
5
,
5
,
5
,
5
,
5
,
107
,
78
,
59
,
/* 600 */
5
,
5
,
5
,
5
,
5
,
107
,
78
,
59
,
58
,
21
,
/* 600 */
58
,
0
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 610 */
0
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
/* 610 */
281
,
281
,
281
,
21
,
21
,
281
,
281
,
281
,
281
,
281
,
/* 620 */
279
,
21
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
/* 620 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 630 */
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
/* 630 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 640 */
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
/* 640 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 650 */
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
/* 650 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 660 */
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
/* 660 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 670 */
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
/* 670 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 680 */
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
/* 680 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 690 */
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
/* 690 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 700 */
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
/* 700 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 710 */
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
/* 710 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 720 */
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
/* 720 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 730 */
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
/* 730 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 740 */
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
/* 740 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 750 */
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
/* 750 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 760 */
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
/* 760 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 770 */
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
/* 770 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 780 */
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
/* 780 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 790 */
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
/* 790 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 800 */
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
/* 800 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 810 */
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
/* 810 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 820 */
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
279
,
/* 820 */
281
,
281
,
281
,
281
,
281
,
/* 830 */
279
,
};
};
#define YY_SHIFT_COUNT (28
1
)
#define YY_SHIFT_COUNT (28
2
)
#define YY_SHIFT_MIN (0)
#define YY_SHIFT_MIN (0)
#define YY_SHIFT_MAX (6
10
)
#define YY_SHIFT_MAX (6
01
)
static
const
unsigned
short
int
yy_shift_ofst
[]
=
{
static
const
unsigned
short
int
yy_shift_ofst
[]
=
{
/* 0 */
1
73
,
24
,
164
,
11
,
194
,
214
,
21
,
21
,
21
,
21
,
/* 0 */
1
40
,
24
,
137
,
12
,
194
,
213
,
21
,
21
,
21
,
21
,
/* 10 */
21
,
21
,
21
,
21
,
21
,
0
,
22
,
21
4
,
316
,
316
,
/* 10 */
21
,
21
,
21
,
21
,
21
,
0
,
22
,
21
3
,
273
,
273
,
/* 20 */
316
,
125
,
21
,
21
,
21
,
198
,
21
,
21
,
197
,
11
,
/* 20 */
273
,
61
,
21
,
21
,
21
,
88
,
21
,
21
,
6
,
12
,
/* 30 */
10
,
10
,
622
,
204
,
214
,
214
,
214
,
214
,
214
,
214
,
/* 30 */
47
,
47
,
615
,
213
,
213
,
213
,
213
,
213
,
213
,
213
,
/* 40 */
21
4
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
214
,
/* 40 */
21
3
,
213
,
213
,
213
,
213
,
213
,
213
,
213
,
213
,
213
,
/* 50 */
21
4
,
316
,
316
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
/* 50 */
21
3
,
273
,
273
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
/* 60 */
64
,
21
,
21
,
21
,
21
,
21
,
200
,
200
,
219
,
21
,
/* 60 */
239
,
21
,
21
,
232
,
21
,
21
,
21
,
28
,
28
,
230
,
/* 70 */
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
/* 70 */
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
/* 80 */
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
/* 80 */
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
/* 90 */
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
/* 90 */
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
/* 100 */
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
/* 100 */
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
/* 110 */
21
,
21
,
21
,
21
,
21
,
323
,
390
,
390
,
390
,
351
,
/* 110 */
21
,
21
,
21
,
21
,
21
,
21
,
318
,
378
,
378
,
378
,
/* 120 */
3
51
,
351
,
390
,
342
,
350
,
355
,
362
,
361
,
374
,
376
,
/* 120 */
3
30
,
330
,
330
,
378
,
329
,
332
,
336
,
344
,
342
,
353
,
/* 130 */
3
78
,
367
,
323
,
390
,
390
,
390
,
11
,
390
,
390
,
411
,
/* 130 */
3
56
,
358
,
347
,
318
,
378
,
378
,
378
,
12
,
378
,
378
,
/* 140 */
415
,
451
,
421
,
420
,
452
,
422
,
426
,
390
,
430
,
390
,
/* 140 */
393
,
396
,
432
,
401
,
404
,
439
,
414
,
418
,
378
,
426
,
/* 150 */
430
,
390
,
430
,
390
,
622
,
622
,
27
,
70
,
70
,
70
,
/* 150 */
378
,
426
,
378
,
426
,
378
,
615
,
615
,
27
,
70
,
70
,
/* 160 */
130
,
155
,
260
,
260
,
260
,
278
,
294
,
298
,
296
,
296
,
/* 160 */
70
,
130
,
155
,
234
,
234
,
234
,
223
,
196
,
235
,
278
,
/* 170 */
2
96
,
296
,
14
,
48
,
88
,
88
,
124
,
169
,
247
,
160
,
/* 170 */
2
78
,
278
,
278
,
151
,
14
,
148
,
148
,
219
,
107
,
266
,
/* 180 */
199
,
236
,
251
,
267
,
268
,
269
,
372
,
375
,
307
,
282
,
/* 180 */
244
,
248
,
249
,
250
,
251
,
257
,
258
,
197
,
328
,
9
,
/* 190 */
299
,
265
,
266
,
279
,
285
,
286
,
252
,
262
,
264
,
297
,
/* 190 */
302
,
259
,
255
,
261
,
264
,
267
,
268
,
243
,
245
,
254
,
/* 200 */
2
70
,
394
,
399
,
277
,
347
,
503
,
370
,
505
,
506
,
373
,
/* 200 */
2
82
,
256
,
386
,
387
,
298
,
334
,
499
,
365
,
501
,
505
,
/* 210 */
508
,
509
,
431
,
391
,
413
,
423
,
416
,
424
,
429
,
417
,
/* 210 */
373
,
510
,
511
,
430
,
388
,
408
,
419
,
412
,
421
,
440
,
/* 220 */
4
46
,
454
,
530
,
455
,
456
,
458
,
453
,
443
,
457
,
444
,
/* 220 */
4
33
,
441
,
444
,
541
,
445
,
448
,
450
,
446
,
435
,
449
,
/* 230 */
4
61
,
464
,
459
,
465
,
424
,
467
,
466
,
468
,
495
,
562
,
/* 230 */
4
36
,
455
,
451
,
452
,
457
,
421
,
458
,
459
,
456
,
488
,
/* 240 */
5
67
,
569
,
570
,
571
,
572
,
500
,
564
,
507
,
447
,
475
,
/* 240 */
5
55
,
560
,
561
,
562
,
563
,
564
,
492
,
556
,
498
,
442
,
/* 250 */
4
75
,
568
,
450
,
460
,
475
,
580
,
581
,
485
,
475
,
583
,
/* 250 */
4
66
,
466
,
558
,
443
,
447
,
466
,
570
,
573
,
477
,
466
,
/* 260 */
5
84
,
585
,
586
,
587
,
589
,
590
,
591
,
592
,
593
,
594
,
/* 260 */
5
75
,
577
,
578
,
579
,
580
,
581
,
582
,
583
,
584
,
585
,
/* 270 */
5
95
,
596
,
597
,
598
,
599
,
498
,
528
,
588
,
600
,
548
,
/* 270 */
5
86
,
587
,
588
,
589
,
590
,
591
,
490
,
520
,
592
,
593
,
/* 280 */
5
50
,
610
,
/* 280 */
5
40
,
542
,
601
,
};
};
#define YY_REDUCE_COUNT (15
5
)
#define YY_REDUCE_COUNT (15
6
)
#define YY_REDUCE_MIN (-268)
#define YY_REDUCE_MIN (-268)
#define YY_REDUCE_MAX (3
32
)
#define YY_REDUCE_MAX (3
24
)
static
const
short
yy_reduce_ofst
[]
=
{
static
const
short
yy_reduce_ofst
[]
=
{
/* 0 */
-
20
7
,
-
101
,
40
,
18
,
-
266
,
-
176
,
-
195
,
-
114
,
-
113
,
-
43
,
/* 0 */
-
20
8
,
-
102
,
10
,
-
41
,
-
268
,
-
178
,
-
196
,
-
151
,
-
115
,
67
,
/* 10 */
-
39
,
-
29
,
-
11
,
5
,
38
,
-
184
,
-
163
,
-
268
,
-
222
,
-
173
,
/* 10 */
74
,
80
,
84
,
87
,
95
,
-
214
,
-
164
,
-
265
,
-
223
,
-
150
,
/* 20 */
-
77
,
-
247
,
-
16
,
-
108
,
30
,
-
18
,
79
,
83
,
-
30
,
-
155
,
/* 20 */
-
65
,
-
93
,
-
172
,
-
23
,
42
,
-
22
,
99
,
-
16
,
-
2
,
-
14
,
/* 30 */
-
13
,
96
,
23
,
-
262
,
-
253
,
-
226
,
-
206
,
-
116
,
-
48
,
-
19
,
/* 30 */
3
,
58
,
54
,
-
264
,
-
251
,
-
241
,
-
177
,
-
25
,
19
,
30
,
/* 40 */
60
,
69
,
89
,
110
,
121
,
137
,
142
,
143
,
144
,
14
5
,
/* 40 */
93
,
110
,
114
,
127
,
128
,
129
,
131
,
132
,
134
,
13
5
,
/* 50 */
1
46
,
-
208
,
-
63
,
9
,
170
,
171
,
172
,
174
,
175
,
176
,
/* 50 */
1
36
,
-
193
,
-
78
,
153
,
160
,
161
,
162
,
163
,
164
,
165
,
/* 60 */
16
3
,
206
,
210
,
212
,
213
,
215
,
152
,
154
,
177
,
21
7
,
/* 60 */
16
6
,
199
,
200
,
146
,
202
,
203
,
204
,
143
,
144
,
16
7
,
/* 70 */
2
18
,
221
,
222
,
223
,
224
,
225
,
226
,
227
,
228
,
229
,
/* 70 */
2
08
,
209
,
211
,
212
,
214
,
215
,
216
,
217
,
218
,
220
,
/* 80 */
2
30
,
231
,
232
,
233
,
234
,
235
,
237
,
238
,
239
,
240
,
/* 80 */
2
21
,
222
,
224
,
225
,
226
,
227
,
228
,
229
,
231
,
233
,
/* 90 */
2
41
,
242
,
243
,
244
,
245
,
246
,
248
,
249
,
250
,
253
,
/* 90 */
2
36
,
237
,
238
,
240
,
241
,
242
,
246
,
247
,
252
,
253
,
/* 100 */
2
54
,
255
,
256
,
257
,
258
,
259
,
261
,
263
,
271
,
272
,
/* 100 */
2
60
,
262
,
263
,
265
,
269
,
270
,
271
,
272
,
274
,
275
,
/* 110 */
27
3
,
274
,
275
,
276
,
280
,
208
,
281
,
283
,
284
,
202
,
/* 110 */
27
6
,
277
,
279
,
280
,
281
,
283
,
180
,
284
,
285
,
286
,
/* 120 */
207
,
209
,
287
,
216
,
288
,
220
,
289
,
292
,
290
,
295
,
/* 120 */
173
,
175
,
176
,
287
,
191
,
198
,
201
,
205
,
207
,
210
,
/* 130 */
2
91
,
300
,
293
,
301
,
302
,
303
,
304
,
305
,
306
,
308
,
/* 130 */
2
88
,
290
,
289
,
291
,
292
,
293
,
294
,
295
,
296
,
297
,
/* 140 */
310
,
309
,
311
,
313
,
317
,
315
,
320
,
312
,
314
,
318
,
/* 140 */
299
,
301
,
300
,
303
,
304
,
307
,
308
,
310
,
305
,
306
,
/* 150 */
3
19
,
328
,
329
,
332
,
324
,
331
,
/* 150 */
3
09
,
319
,
321
,
322
,
324
,
314
,
320
,
};
};
static
const
YYACTIONTYPE
yy_default
[]
=
{
static
const
YYACTIONTYPE
yy_default
[]
=
{
/* 0 */
7
09
,
764
,
753
,
761
,
944
,
944
,
709
,
709
,
709
,
709
,
/* 0 */
7
13
,
768
,
757
,
765
,
950
,
950
,
713
,
713
,
713
,
713
,
/* 10 */
7
09
,
709
,
709
,
709
,
709
,
869
,
727
,
944
,
709
,
709
,
/* 10 */
7
13
,
713
,
713
,
713
,
713
,
873
,
731
,
950
,
713
,
713
,
/* 20 */
7
09
,
709
,
709
,
709
,
709
,
761
,
709
,
709
,
766
,
761
,
/* 20 */
7
13
,
713
,
713
,
713
,
713
,
765
,
713
,
713
,
770
,
765
,
/* 30 */
7
66
,
766
,
864
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
/* 30 */
7
70
,
770
,
868
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
/* 40 */
7
09
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
/* 40 */
7
13
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
/* 50 */
7
09
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
/* 50 */
7
13
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
/* 60 */
7
09
,
709
,
709
,
871
,
873
,
709
,
891
,
891
,
862
,
709
,
/* 60 */
7
13
,
713
,
713
,
875
,
877
,
879
,
713
,
897
,
897
,
866
,
/* 70 */
7
09
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
/* 70 */
7
13
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
/* 80 */
7
09
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
/* 80 */
7
13
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
/* 90 */
7
09
,
709
,
709
,
751
,
709
,
749
,
709
,
709
,
709
,
709
,
/* 90 */
7
13
,
713
,
713
,
713
,
755
,
713
,
753
,
713
,
713
,
713
,
/* 100 */
7
09
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
737
,
/* 100 */
7
13
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
/* 110 */
7
09
,
709
,
709
,
709
,
709
,
709
,
729
,
729
,
729
,
709
,
/* 110 */
7
41
,
713
,
713
,
713
,
713
,
713
,
713
,
733
,
733
,
733
,
/* 120 */
7
09
,
709
,
729
,
898
,
902
,
896
,
884
,
892
,
883
,
87
9
,
/* 120 */
7
13
,
713
,
713
,
733
,
904
,
908
,
902
,
890
,
898
,
88
9
,
/* 130 */
8
78
,
906
,
709
,
729
,
729
,
729
,
761
,
729
,
729
,
782
,
/* 130 */
8
85
,
884
,
912
,
713
,
733
,
733
,
733
,
765
,
733
,
733
,
/* 140 */
78
0
,
778
,
770
,
776
,
772
,
774
,
768
,
729
,
759
,
729
,
/* 140 */
78
6
,
784
,
782
,
774
,
780
,
776
,
778
,
772
,
733
,
763
,
/* 150 */
7
59
,
729
,
759
,
729
,
800
,
816
,
709
,
907
,
943
,
897
,
/* 150 */
7
33
,
763
,
733
,
763
,
733
,
804
,
820
,
713
,
913
,
949
,
/* 160 */
9
33
,
932
,
939
,
931
,
930
,
709
,
709
,
709
,
926
,
927
,
/* 160 */
9
03
,
939
,
938
,
945
,
937
,
936
,
713
,
713
,
713
,
932
,
/* 170 */
9
29
,
928
,
709
,
709
,
935
,
934
,
709
,
709
,
709
,
709
,
/* 170 */
9
33
,
935
,
934
,
713
,
713
,
941
,
940
,
713
,
713
,
713
,
/* 180 */
7
09
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
909
,
/* 180 */
7
13
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
/* 190 */
709
,
903
,
899
,
709
,
709
,
709
,
709
,
709
,
709
,
826
,
/* 190 */
915
,
713
,
909
,
905
,
713
,
713
,
713
,
713
,
713
,
713
,
/* 200 */
709
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
/* 200 */
830
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
/* 210 */
7
09
,
709
,
709
,
709
,
861
,
709
,
709
,
709
,
709
,
870
,
/* 210 */
7
13
,
713
,
713
,
713
,
713
,
865
,
713
,
713
,
713
,
713
,
/* 220 */
709
,
709
,
709
,
709
,
709
,
709
,
893
,
709
,
885
,
709
,
/* 220 */
876
,
713
,
713
,
713
,
713
,
713
,
713
,
899
,
713
,
891
,
/* 230 */
7
09
,
709
,
709
,
709
,
838
,
709
,
709
,
709
,
709
,
709
,
/* 230 */
7
13
,
713
,
713
,
713
,
713
,
842
,
713
,
713
,
713
,
713
,
/* 240 */
7
09
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
954
,
/* 240 */
7
13
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
/* 250 */
9
52
,
709
,
709
,
709
,
948
,
709
,
709
,
709
,
946
,
709
,
/* 250 */
9
60
,
958
,
713
,
713
,
713
,
954
,
713
,
713
,
713
,
952
,
/* 260 */
7
09
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
709
,
/* 260 */
7
13
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
/* 270 */
7
09
,
709
,
709
,
709
,
709
,
785
,
709
,
735
,
733
,
709
,
/* 270 */
7
13
,
713
,
713
,
713
,
713
,
713
,
789
,
713
,
739
,
737
,
/* 280 */
7
25
,
709
,
/* 280 */
7
13
,
729
,
713
,
};
};
/********** End of lemon-generated parsing tables *****************************/
/********** End of lemon-generated parsing tables *****************************/
...
@@ -571,6 +569,7 @@ static const YYCODETYPE yyFallback[] = {
...
@@ -571,6 +569,7 @@ static const YYCODETYPE yyFallback[] = {
0
,
/* SELECT => nothing */
0
,
/* SELECT => nothing */
0
,
/* UNION => nothing */
0
,
/* UNION => nothing */
1
,
/* ALL => ID */
1
,
/* ALL => ID */
0
,
/* DISTINCT => nothing */
0
,
/* FROM => nothing */
0
,
/* FROM => nothing */
0
,
/* VARIABLE => nothing */
0
,
/* VARIABLE => nothing */
0
,
/* INTERVAL => nothing */
0
,
/* INTERVAL => nothing */
...
@@ -866,173 +865,175 @@ static const char *const yyTokenName[] = {
...
@@ -866,173 +865,175 @@ static const char *const yyTokenName[] = {
/* 109 */
"SELECT"
,
/* 109 */
"SELECT"
,
/* 110 */
"UNION"
,
/* 110 */
"UNION"
,
/* 111 */
"ALL"
,
/* 111 */
"ALL"
,
/* 112 */
"FROM"
,
/* 112 */
"DISTINCT"
,
/* 113 */
"VARIABLE"
,
/* 113 */
"FROM"
,
/* 114 */
"INTERVAL"
,
/* 114 */
"VARIABLE"
,
/* 115 */
"FILL"
,
/* 115 */
"INTERVAL"
,
/* 116 */
"SLIDING"
,
/* 116 */
"FILL"
,
/* 117 */
"ORDER"
,
/* 117 */
"SLIDING"
,
/* 118 */
"BY"
,
/* 118 */
"ORDER"
,
/* 119 */
"ASC"
,
/* 119 */
"BY"
,
/* 120 */
"DESC"
,
/* 120 */
"ASC"
,
/* 121 */
"GROUP"
,
/* 121 */
"DESC"
,
/* 122 */
"HAVING"
,
/* 122 */
"GROUP"
,
/* 123 */
"LIMIT"
,
/* 123 */
"HAVING"
,
/* 124 */
"OFFSET"
,
/* 124 */
"LIMIT"
,
/* 125 */
"SLIMIT"
,
/* 125 */
"OFFSET"
,
/* 126 */
"SOFFSET"
,
/* 126 */
"SLIMIT"
,
/* 127 */
"WHERE"
,
/* 127 */
"SOFFSET"
,
/* 128 */
"NOW"
,
/* 128 */
"WHERE"
,
/* 129 */
"RESET"
,
/* 129 */
"NOW"
,
/* 130 */
"QUERY"
,
/* 130 */
"RESET"
,
/* 131 */
"ADD"
,
/* 131 */
"QUERY"
,
/* 132 */
"COLUMN"
,
/* 132 */
"ADD"
,
/* 133 */
"TAG"
,
/* 133 */
"COLUMN"
,
/* 134 */
"CHANGE"
,
/* 134 */
"TAG"
,
/* 135 */
"SET"
,
/* 135 */
"CHANGE"
,
/* 136 */
"KILL"
,
/* 136 */
"SET"
,
/* 137 */
"CONNECTION"
,
/* 137 */
"KILL"
,
/* 138 */
"STREAM"
,
/* 138 */
"CONNECTION"
,
/* 139 */
"COLON"
,
/* 139 */
"STREAM"
,
/* 140 */
"ABORT"
,
/* 140 */
"COLON"
,
/* 141 */
"AFTER"
,
/* 141 */
"ABORT"
,
/* 142 */
"ATTACH"
,
/* 142 */
"AFTER"
,
/* 143 */
"BEFORE"
,
/* 143 */
"ATTACH"
,
/* 144 */
"BEGIN"
,
/* 144 */
"BEFORE"
,
/* 145 */
"CASCADE"
,
/* 145 */
"BEGIN"
,
/* 146 */
"CLUSTER"
,
/* 146 */
"CASCADE"
,
/* 147 */
"CONFLICT"
,
/* 147 */
"CLUSTER"
,
/* 148 */
"COPY"
,
/* 148 */
"CONFLICT"
,
/* 149 */
"DEFERRED"
,
/* 149 */
"COPY"
,
/* 150 */
"DELIMITERS"
,
/* 150 */
"DEFERRED"
,
/* 151 */
"DETACH"
,
/* 151 */
"DELIMITERS"
,
/* 152 */
"EACH"
,
/* 152 */
"DETACH"
,
/* 153 */
"END"
,
/* 153 */
"EACH"
,
/* 154 */
"EXPLAIN"
,
/* 154 */
"END"
,
/* 155 */
"FAIL"
,
/* 155 */
"EXPLAIN"
,
/* 156 */
"FOR"
,
/* 156 */
"FAIL"
,
/* 157 */
"IGNORE"
,
/* 157 */
"FOR"
,
/* 158 */
"IMMEDIATE"
,
/* 158 */
"IGNORE"
,
/* 159 */
"INITIALLY"
,
/* 159 */
"IMMEDIATE"
,
/* 160 */
"INSTEAD"
,
/* 160 */
"INITIALLY"
,
/* 161 */
"MATCH"
,
/* 161 */
"INSTEAD"
,
/* 162 */
"KEY"
,
/* 162 */
"MATCH"
,
/* 163 */
"OF"
,
/* 163 */
"KEY"
,
/* 164 */
"RAISE"
,
/* 164 */
"OF"
,
/* 165 */
"REPLACE"
,
/* 165 */
"RAISE"
,
/* 166 */
"RESTRICT"
,
/* 166 */
"REPLACE"
,
/* 167 */
"ROW"
,
/* 167 */
"RESTRICT"
,
/* 168 */
"STATEMENT"
,
/* 168 */
"ROW"
,
/* 169 */
"TRIGGER"
,
/* 169 */
"STATEMENT"
,
/* 170 */
"VIEW"
,
/* 170 */
"TRIGGER"
,
/* 171 */
"COUNT"
,
/* 171 */
"VIEW"
,
/* 172 */
"SUM"
,
/* 172 */
"COUNT"
,
/* 173 */
"AVG"
,
/* 173 */
"SUM"
,
/* 174 */
"MIN"
,
/* 174 */
"AVG"
,
/* 175 */
"MAX"
,
/* 175 */
"MIN"
,
/* 176 */
"FIRST"
,
/* 176 */
"MAX"
,
/* 177 */
"LAST"
,
/* 177 */
"FIRST"
,
/* 178 */
"TOP"
,
/* 178 */
"LAST"
,
/* 179 */
"BOTTOM"
,
/* 179 */
"TOP"
,
/* 180 */
"STDDEV"
,
/* 180 */
"BOTTOM"
,
/* 181 */
"PERCENTILE"
,
/* 181 */
"STDDEV"
,
/* 182 */
"APERCENTILE"
,
/* 182 */
"PERCENTILE"
,
/* 183 */
"LEASTSQUARES"
,
/* 183 */
"APERCENTILE"
,
/* 184 */
"HISTOGRAM"
,
/* 184 */
"LEASTSQUARES"
,
/* 185 */
"DIFF"
,
/* 185 */
"HISTOGRAM"
,
/* 186 */
"SPREAD"
,
/* 186 */
"DIFF"
,
/* 187 */
"TWA"
,
/* 187 */
"SPREAD"
,
/* 188 */
"INTERP"
,
/* 188 */
"TWA"
,
/* 189 */
"LAST_ROW"
,
/* 189 */
"INTERP"
,
/* 190 */
"RATE"
,
/* 190 */
"LAST_ROW"
,
/* 191 */
"IRATE"
,
/* 191 */
"RATE"
,
/* 192 */
"SUM_RATE"
,
/* 192 */
"IRATE"
,
/* 193 */
"SUM_IRATE"
,
/* 193 */
"SUM_RATE"
,
/* 194 */
"AVG_RATE"
,
/* 194 */
"SUM_IRATE"
,
/* 195 */
"AVG_IRATE"
,
/* 195 */
"AVG_RATE"
,
/* 196 */
"TBID"
,
/* 196 */
"AVG_IRATE"
,
/* 197 */
"SEMI"
,
/* 197 */
"TBID"
,
/* 198 */
"NONE"
,
/* 198 */
"SEMI"
,
/* 199 */
"PREV"
,
/* 199 */
"NONE"
,
/* 200 */
"LINEAR"
,
/* 200 */
"PREV"
,
/* 201 */
"IMPORT"
,
/* 201 */
"LINEAR"
,
/* 202 */
"METRIC"
,
/* 202 */
"IMPORT"
,
/* 203 */
"TBNAME"
,
/* 203 */
"METRIC"
,
/* 204 */
"JOIN"
,
/* 204 */
"TBNAME"
,
/* 205 */
"METRICS"
,
/* 205 */
"JOIN"
,
/* 206 */
"INSERT"
,
/* 206 */
"METRICS"
,
/* 207 */
"INTO"
,
/* 207 */
"INSERT"
,
/* 208 */
"VALUES"
,
/* 208 */
"INTO"
,
/* 209 */
"error"
,
/* 209 */
"VALUES"
,
/* 210 */
"program"
,
/* 210 */
"error"
,
/* 211 */
"cmd"
,
/* 211 */
"program"
,
/* 212 */
"dbPrefix"
,
/* 212 */
"cmd"
,
/* 213 */
"ids"
,
/* 213 */
"dbPrefix"
,
/* 214 */
"cpxName"
,
/* 214 */
"ids"
,
/* 215 */
"ifexists"
,
/* 215 */
"cpxName"
,
/* 216 */
"alter_db_optr"
,
/* 216 */
"ifexists"
,
/* 217 */
"acct_optr"
,
/* 217 */
"alter_db_optr"
,
/* 218 */
"ifnotexists"
,
/* 218 */
"acct_optr"
,
/* 219 */
"db_optr"
,
/* 219 */
"ifnotexists"
,
/* 220 */
"pps"
,
/* 220 */
"db_optr"
,
/* 221 */
"tseries"
,
/* 221 */
"pps"
,
/* 222 */
"dbs"
,
/* 222 */
"tseries"
,
/* 223 */
"streams"
,
/* 223 */
"dbs"
,
/* 224 */
"storage"
,
/* 224 */
"streams"
,
/* 225 */
"qtime"
,
/* 225 */
"storage"
,
/* 226 */
"users"
,
/* 226 */
"qtime"
,
/* 227 */
"conns"
,
/* 227 */
"users"
,
/* 228 */
"state"
,
/* 228 */
"conns"
,
/* 229 */
"keep"
,
/* 229 */
"state"
,
/* 230 */
"tagitemlist"
,
/* 230 */
"keep"
,
/* 231 */
"cache"
,
/* 231 */
"tagitemlist"
,
/* 232 */
"replica"
,
/* 232 */
"cache"
,
/* 233 */
"quorum"
,
/* 233 */
"replica"
,
/* 234 */
"days"
,
/* 234 */
"quorum"
,
/* 235 */
"minrows"
,
/* 235 */
"days"
,
/* 236 */
"maxrows"
,
/* 236 */
"minrows"
,
/* 237 */
"blocks"
,
/* 237 */
"maxrows"
,
/* 238 */
"ctime"
,
/* 238 */
"blocks"
,
/* 239 */
"wal"
,
/* 239 */
"ctime"
,
/* 240 */
"fsync"
,
/* 240 */
"wal"
,
/* 241 */
"comp"
,
/* 241 */
"fsync"
,
/* 242 */
"prec"
,
/* 242 */
"comp"
,
/* 243 */
"update"
,
/* 243 */
"prec"
,
/* 244 */
"cachelast"
,
/* 244 */
"update"
,
/* 245 */
"typename"
,
/* 245 */
"cachelast"
,
/* 246 */
"signed"
,
/* 246 */
"typename"
,
/* 247 */
"create_table_args"
,
/* 247 */
"signed"
,
/* 248 */
"create_stable_args"
,
/* 248 */
"create_table_args"
,
/* 249 */
"create_table_list"
,
/* 249 */
"create_stable_args"
,
/* 250 */
"create_from_stable"
,
/* 250 */
"create_table_list"
,
/* 251 */
"columnlist"
,
/* 251 */
"create_from_stable"
,
/* 252 */
"select"
,
/* 252 */
"columnlist"
,
/* 253 */
"column"
,
/* 253 */
"select"
,
/* 254 */
"tagitem"
,
/* 254 */
"column"
,
/* 255 */
"selcollist"
,
/* 255 */
"tagitem"
,
/* 256 */
"from"
,
/* 256 */
"selcollist"
,
/* 257 */
"where_opt"
,
/* 257 */
"from"
,
/* 258 */
"interval_opt"
,
/* 258 */
"where_opt"
,
/* 259 */
"fill_opt"
,
/* 259 */
"interval_opt"
,
/* 260 */
"sliding_opt"
,
/* 260 */
"fill_opt"
,
/* 261 */
"groupby_opt"
,
/* 261 */
"sliding_opt"
,
/* 262 */
"orderby_opt"
,
/* 262 */
"groupby_opt"
,
/* 263 */
"having_opt"
,
/* 263 */
"orderby_opt"
,
/* 264 */
"slimit_opt"
,
/* 264 */
"having_opt"
,
/* 265 */
"limit_opt"
,
/* 265 */
"slimit_opt"
,
/* 266 */
"union"
,
/* 266 */
"limit_opt"
,
/* 267 */
"sclp"
,
/* 267 */
"union"
,
/* 268 */
"expr"
,
/* 268 */
"sclp"
,
/* 269 */
"as"
,
/* 269 */
"distinct"
,
/* 270 */
"tablelist"
,
/* 270 */
"expr"
,
/* 271 */
"tmvar"
,
/* 271 */
"as"
,
/* 272 */
"sortlist"
,
/* 272 */
"tablelist"
,
/* 273 */
"sortitem"
,
/* 273 */
"tmvar"
,
/* 274 */
"item"
,
/* 274 */
"sortlist"
,
/* 275 */
"sortorder"
,
/* 275 */
"sortitem"
,
/* 276 */
"grouplist"
,
/* 276 */
"item"
,
/* 277 */
"exprlist"
,
/* 277 */
"sortorder"
,
/* 278 */
"expritem"
,
/* 278 */
"grouplist"
,
/* 279 */
"exprlist"
,
/* 280 */
"expritem"
,
};
};
#endif
/* defined(YYCOVERAGE) || !defined(NDEBUG) */
#endif
/* defined(YYCOVERAGE) || !defined(NDEBUG) */
...
@@ -1193,101 +1194,103 @@ static const char *const yyRuleName[] = {
...
@@ -1193,101 +1194,103 @@ static const char *const yyRuleName[] = {
/* 150 */
"select ::= SELECT selcollist"
,
/* 150 */
"select ::= SELECT selcollist"
,
/* 151 */
"sclp ::= selcollist COMMA"
,
/* 151 */
"sclp ::= selcollist COMMA"
,
/* 152 */
"sclp ::="
,
/* 152 */
"sclp ::="
,
/* 153 */
"selcollist ::= sclp expr as"
,
/* 153 */
"selcollist ::= sclp
distinct
expr as"
,
/* 154 */
"selcollist ::= sclp STAR"
,
/* 154 */
"selcollist ::= sclp STAR"
,
/* 155 */
"as ::= AS ids"
,
/* 155 */
"as ::= AS ids"
,
/* 156 */
"as ::= ids"
,
/* 156 */
"as ::= ids"
,
/* 157 */
"as ::="
,
/* 157 */
"as ::="
,
/* 158 */
"from ::= FROM tablelist"
,
/* 158 */
"distinct ::= DISTINCT"
,
/* 159 */
"tablelist ::= ids cpxName"
,
/* 159 */
"distinct ::="
,
/* 160 */
"tablelist ::= ids cpxName ids"
,
/* 160 */
"from ::= FROM tablelist"
,
/* 161 */
"tablelist ::= tablelist COMMA ids cpxName"
,
/* 161 */
"tablelist ::= ids cpxName"
,
/* 162 */
"tablelist ::= tablelist COMMA ids cpxName ids"
,
/* 162 */
"tablelist ::= ids cpxName ids"
,
/* 163 */
"tmvar ::= VARIABLE"
,
/* 163 */
"tablelist ::= tablelist COMMA ids cpxName"
,
/* 164 */
"interval_opt ::= INTERVAL LP tmvar RP"
,
/* 164 */
"tablelist ::= tablelist COMMA ids cpxName ids"
,
/* 165 */
"interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP"
,
/* 165 */
"tmvar ::= VARIABLE"
,
/* 166 */
"interval_opt ::="
,
/* 166 */
"interval_opt ::= INTERVAL LP tmvar RP"
,
/* 167 */
"fill_opt ::="
,
/* 167 */
"interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP"
,
/* 168 */
"fill_opt ::= FILL LP ID COMMA tagitemlist RP"
,
/* 168 */
"interval_opt ::="
,
/* 169 */
"fill_opt ::= FILL LP ID RP"
,
/* 169 */
"fill_opt ::="
,
/* 170 */
"sliding_opt ::= SLIDING LP tmvar RP"
,
/* 170 */
"fill_opt ::= FILL LP ID COMMA tagitemlist RP"
,
/* 171 */
"sliding_opt ::="
,
/* 171 */
"fill_opt ::= FILL LP ID RP"
,
/* 172 */
"orderby_opt ::="
,
/* 172 */
"sliding_opt ::= SLIDING LP tmvar RP"
,
/* 173 */
"orderby_opt ::= ORDER BY sortlist"
,
/* 173 */
"sliding_opt ::="
,
/* 174 */
"sortlist ::= sortlist COMMA item sortorder"
,
/* 174 */
"orderby_opt ::="
,
/* 175 */
"sortlist ::= item sortorder"
,
/* 175 */
"orderby_opt ::= ORDER BY sortlist"
,
/* 176 */
"item ::= ids cpxName"
,
/* 176 */
"sortlist ::= sortlist COMMA item sortorder"
,
/* 177 */
"sortorder ::= ASC"
,
/* 177 */
"sortlist ::= item sortorder"
,
/* 178 */
"sortorder ::= DESC"
,
/* 178 */
"item ::= ids cpxName"
,
/* 179 */
"sortorder ::="
,
/* 179 */
"sortorder ::= ASC"
,
/* 180 */
"groupby_opt ::="
,
/* 180 */
"sortorder ::= DESC"
,
/* 181 */
"groupby_opt ::= GROUP BY grouplist"
,
/* 181 */
"sortorder ::="
,
/* 182 */
"grouplist ::= grouplist COMMA item"
,
/* 182 */
"groupby_opt ::="
,
/* 183 */
"grouplist ::= item"
,
/* 183 */
"groupby_opt ::= GROUP BY grouplist"
,
/* 184 */
"having_opt ::="
,
/* 184 */
"grouplist ::= grouplist COMMA item"
,
/* 185 */
"having_opt ::= HAVING expr"
,
/* 185 */
"grouplist ::= item"
,
/* 186 */
"limit_opt ::="
,
/* 186 */
"having_opt ::="
,
/* 187 */
"limit_opt ::= LIMIT signed"
,
/* 187 */
"having_opt ::= HAVING expr"
,
/* 188 */
"limit_opt ::= LIMIT signed OFFSET signed"
,
/* 188 */
"limit_opt ::="
,
/* 189 */
"limit_opt ::= LIMIT signed COMMA signed"
,
/* 189 */
"limit_opt ::= LIMIT signed"
,
/* 190 */
"slimit_opt ::="
,
/* 190 */
"limit_opt ::= LIMIT signed OFFSET signed"
,
/* 191 */
"slimit_opt ::= SLIMIT signed"
,
/* 191 */
"limit_opt ::= LIMIT signed COMMA signed"
,
/* 192 */
"slimit_opt ::= SLIMIT signed SOFFSET signed"
,
/* 192 */
"slimit_opt ::="
,
/* 193 */
"slimit_opt ::= SLIMIT signed COMMA signed"
,
/* 193 */
"slimit_opt ::= SLIMIT signed"
,
/* 194 */
"where_opt ::="
,
/* 194 */
"slimit_opt ::= SLIMIT signed SOFFSET signed"
,
/* 195 */
"where_opt ::= WHERE expr"
,
/* 195 */
"slimit_opt ::= SLIMIT signed COMMA signed"
,
/* 196 */
"expr ::= LP expr RP"
,
/* 196 */
"where_opt ::="
,
/* 197 */
"expr ::= ID"
,
/* 197 */
"where_opt ::= WHERE expr"
,
/* 198 */
"expr ::= ID DOT ID"
,
/* 198 */
"expr ::= LP expr RP"
,
/* 199 */
"expr ::= ID DOT STAR"
,
/* 199 */
"expr ::= ID"
,
/* 200 */
"expr ::= INTEGER"
,
/* 200 */
"expr ::= ID DOT ID"
,
/* 201 */
"expr ::= MINUS INTEGER"
,
/* 201 */
"expr ::= ID DOT STAR"
,
/* 202 */
"expr ::= PLUS INTEGER"
,
/* 202 */
"expr ::= INTEGER"
,
/* 203 */
"expr ::= FLOAT"
,
/* 203 */
"expr ::= MINUS INTEGER"
,
/* 204 */
"expr ::= MINUS FLOAT"
,
/* 204 */
"expr ::= PLUS INTEGER"
,
/* 205 */
"expr ::= PLUS FLOAT"
,
/* 205 */
"expr ::= FLOAT"
,
/* 206 */
"expr ::= STRING"
,
/* 206 */
"expr ::= MINUS FLOAT"
,
/* 207 */
"expr ::= NOW"
,
/* 207 */
"expr ::= PLUS FLOAT"
,
/* 208 */
"expr ::= VARIABLE"
,
/* 208 */
"expr ::= STRING"
,
/* 209 */
"expr ::= BOOL"
,
/* 209 */
"expr ::= NOW"
,
/* 210 */
"expr ::= ID LP exprlist RP"
,
/* 210 */
"expr ::= VARIABLE"
,
/* 211 */
"expr ::= ID LP STAR RP"
,
/* 211 */
"expr ::= BOOL"
,
/* 212 */
"expr ::= expr IS NULL"
,
/* 212 */
"expr ::= ID LP exprlist RP"
,
/* 213 */
"expr ::= expr IS NOT NULL"
,
/* 213 */
"expr ::= ID LP STAR RP"
,
/* 214 */
"expr ::= expr LT expr"
,
/* 214 */
"expr ::= expr IS NULL"
,
/* 215 */
"expr ::= expr GT expr"
,
/* 215 */
"expr ::= expr IS NOT NULL"
,
/* 216 */
"expr ::= expr LE expr"
,
/* 216 */
"expr ::= expr LT expr"
,
/* 217 */
"expr ::= expr GE expr"
,
/* 217 */
"expr ::= expr GT expr"
,
/* 218 */
"expr ::= expr NE expr"
,
/* 218 */
"expr ::= expr LE expr"
,
/* 219 */
"expr ::= expr EQ expr"
,
/* 219 */
"expr ::= expr GE expr"
,
/* 220 */
"expr ::= expr AND expr"
,
/* 220 */
"expr ::= expr NE expr"
,
/* 221 */
"expr ::= expr OR expr"
,
/* 221 */
"expr ::= expr EQ expr"
,
/* 222 */
"expr ::= expr PLUS expr"
,
/* 222 */
"expr ::= expr AND expr"
,
/* 223 */
"expr ::= expr MINUS expr"
,
/* 223 */
"expr ::= expr OR expr"
,
/* 224 */
"expr ::= expr STAR expr"
,
/* 224 */
"expr ::= expr PLUS expr"
,
/* 225 */
"expr ::= expr SLASH expr"
,
/* 225 */
"expr ::= expr MINUS expr"
,
/* 226 */
"expr ::= expr REM expr"
,
/* 226 */
"expr ::= expr STAR expr"
,
/* 227 */
"expr ::= expr LIKE expr"
,
/* 227 */
"expr ::= expr SLASH expr"
,
/* 228 */
"expr ::= expr IN LP exprlist RP"
,
/* 228 */
"expr ::= expr REM expr"
,
/* 229 */
"exprlist ::= exprlist COMMA expritem"
,
/* 229 */
"expr ::= expr LIKE expr"
,
/* 230 */
"exprlist ::= expritem"
,
/* 230 */
"expr ::= expr IN LP exprlist RP"
,
/* 231 */
"expritem ::= expr"
,
/* 231 */
"exprlist ::= exprlist COMMA expritem"
,
/* 232 */
"expritem ::="
,
/* 232 */
"exprlist ::= expritem"
,
/* 233 */
"cmd ::= RESET QUERY CACHE"
,
/* 233 */
"expritem ::= expr"
,
/* 234 */
"cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist"
,
/* 234 */
"expritem ::="
,
/* 235 */
"cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids"
,
/* 235 */
"cmd ::= RESET QUERY CACHE"
,
/* 236 */
"cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist"
,
/* 236 */
"cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist"
,
/* 237 */
"cmd ::= ALTER TABLE ids cpxName DROP TAG ids"
,
/* 237 */
"cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids"
,
/* 238 */
"cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids"
,
/* 238 */
"cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist"
,
/* 239 */
"cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem"
,
/* 239 */
"cmd ::= ALTER TABLE ids cpxName DROP TAG ids"
,
/* 240 */
"cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist"
,
/* 240 */
"cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids"
,
/* 241 */
"cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids"
,
/* 241 */
"cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem"
,
/* 242 */
"cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist"
,
/* 242 */
"cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist"
,
/* 243 */
"cmd ::= ALTER STABLE ids cpxName DROP TAG ids"
,
/* 243 */
"cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids"
,
/* 244 */
"cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids"
,
/* 244 */
"cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist"
,
/* 245 */
"cmd ::= KILL CONNECTION INTEGER"
,
/* 245 */
"cmd ::= ALTER STABLE ids cpxName DROP TAG ids"
,
/* 246 */
"cmd ::= KILL STREAM INTEGER COLON INTEGER"
,
/* 246 */
"cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids"
,
/* 247 */
"cmd ::= KILL QUERY INTEGER COLON INTEGER"
,
/* 247 */
"cmd ::= KILL CONNECTION INTEGER"
,
/* 248 */
"cmd ::= KILL STREAM INTEGER COLON INTEGER"
,
/* 249 */
"cmd ::= KILL QUERY INTEGER COLON INTEGER"
,
};
};
#endif
/* NDEBUG */
#endif
/* NDEBUG */
...
@@ -1408,51 +1411,51 @@ static void yy_destructor(
...
@@ -1408,51 +1411,51 @@ static void yy_destructor(
** inside the C code.
** inside the C code.
*/
*/
/********* Begin destructor definitions ***************************************/
/********* Begin destructor definitions ***************************************/
case
2
29
:
/* keep */
case
2
30
:
/* keep */
case
23
0
:
/* tagitemlist */
case
23
1
:
/* tagitemlist */
case
25
1
:
/* columnlist */
case
25
2
:
/* columnlist */
case
2
59
:
/* fill_opt */
case
2
60
:
/* fill_opt */
case
26
1
:
/* groupby_opt */
case
26
2
:
/* groupby_opt */
case
26
2
:
/* orderby_opt */
case
26
3
:
/* orderby_opt */
case
27
2
:
/* sortlist */
case
27
4
:
/* sortlist */
case
27
6
:
/* grouplist */
case
27
8
:
/* grouplist */
{
{
taosArrayDestroy
((
yypminor
->
yy
135
));
taosArrayDestroy
((
yypminor
->
yy
247
));
}
}
break
;
break
;
case
2
49
:
/* create_table_list */
case
2
50
:
/* create_table_list */
{
{
destroyCreateTableSql
((
yypminor
->
yy38
));
destroyCreateTableSql
((
yypminor
->
yy3
5
8
));
}
}
break
;
break
;
case
25
2
:
/* select */
case
25
3
:
/* select */
{
{
doDestroyQuerySql
((
yypminor
->
yy
30
));
doDestroyQuerySql
((
yypminor
->
yy
114
));
}
}
break
;
break
;
case
25
5
:
/* selcollist */
case
25
6
:
/* selcollist */
case
26
7
:
/* sclp */
case
26
8
:
/* sclp */
case
27
7
:
/* exprlist */
case
27
9
:
/* exprlist */
{
{
tSqlExprListDestroy
((
yypminor
->
yy
266
));
tSqlExprListDestroy
((
yypminor
->
yy
522
));
}
}
break
;
break
;
case
25
7
:
/* where_opt */
case
25
8
:
/* where_opt */
case
26
3
:
/* having_opt */
case
26
4
:
/* having_opt */
case
2
68
:
/* expr */
case
2
70
:
/* expr */
case
2
78
:
/* expritem */
case
2
80
:
/* expritem */
{
{
tSqlExprDestroy
((
yypminor
->
yy3
1
6
));
tSqlExprDestroy
((
yypminor
->
yy3
2
6
));
}
}
break
;
break
;
case
26
6
:
/* union */
case
26
7
:
/* union */
{
{
destroyAllSelectClause
((
yypminor
->
yy
153
));
destroyAllSelectClause
((
yypminor
->
yy
219
));
}
}
break
;
break
;
case
27
3
:
/* sortitem */
case
27
5
:
/* sortitem */
{
{
tVariantDestroy
(
&
(
yypminor
->
yy3
0
8
));
tVariantDestroy
(
&
(
yypminor
->
yy3
7
8
));
}
}
break
;
break
;
/********* End destructor definitions *****************************************/
/********* End destructor definitions *****************************************/
...
@@ -1746,254 +1749,256 @@ static const struct {
...
@@ -1746,254 +1749,256 @@ static const struct {
YYCODETYPE
lhs
;
/* Symbol on the left-hand side of the rule */
YYCODETYPE
lhs
;
/* Symbol on the left-hand side of the rule */
signed
char
nrhs
;
/* Negative of the number of RHS symbols in the rule */
signed
char
nrhs
;
/* Negative of the number of RHS symbols in the rule */
}
yyRuleInfo
[]
=
{
}
yyRuleInfo
[]
=
{
{
210
,
-
1
},
/* (0) program ::= cmd */
{
211
,
-
1
},
/* (0) program ::= cmd */
{
211
,
-
2
},
/* (1) cmd ::= SHOW DATABASES */
{
212
,
-
2
},
/* (1) cmd ::= SHOW DATABASES */
{
211
,
-
2
},
/* (2) cmd ::= SHOW MNODES */
{
212
,
-
2
},
/* (2) cmd ::= SHOW MNODES */
{
211
,
-
2
},
/* (3) cmd ::= SHOW DNODES */
{
212
,
-
2
},
/* (3) cmd ::= SHOW DNODES */
{
211
,
-
2
},
/* (4) cmd ::= SHOW ACCOUNTS */
{
212
,
-
2
},
/* (4) cmd ::= SHOW ACCOUNTS */
{
211
,
-
2
},
/* (5) cmd ::= SHOW USERS */
{
212
,
-
2
},
/* (5) cmd ::= SHOW USERS */
{
211
,
-
2
},
/* (6) cmd ::= SHOW MODULES */
{
212
,
-
2
},
/* (6) cmd ::= SHOW MODULES */
{
211
,
-
2
},
/* (7) cmd ::= SHOW QUERIES */
{
212
,
-
2
},
/* (7) cmd ::= SHOW QUERIES */
{
211
,
-
2
},
/* (8) cmd ::= SHOW CONNECTIONS */
{
212
,
-
2
},
/* (8) cmd ::= SHOW CONNECTIONS */
{
211
,
-
2
},
/* (9) cmd ::= SHOW STREAMS */
{
212
,
-
2
},
/* (9) cmd ::= SHOW STREAMS */
{
211
,
-
2
},
/* (10) cmd ::= SHOW VARIABLES */
{
212
,
-
2
},
/* (10) cmd ::= SHOW VARIABLES */
{
211
,
-
2
},
/* (11) cmd ::= SHOW SCORES */
{
212
,
-
2
},
/* (11) cmd ::= SHOW SCORES */
{
211
,
-
2
},
/* (12) cmd ::= SHOW GRANTS */
{
212
,
-
2
},
/* (12) cmd ::= SHOW GRANTS */
{
211
,
-
2
},
/* (13) cmd ::= SHOW VNODES */
{
212
,
-
2
},
/* (13) cmd ::= SHOW VNODES */
{
211
,
-
3
},
/* (14) cmd ::= SHOW VNODES IPTOKEN */
{
212
,
-
3
},
/* (14) cmd ::= SHOW VNODES IPTOKEN */
{
212
,
0
},
/* (15) dbPrefix ::= */
{
213
,
0
},
/* (15) dbPrefix ::= */
{
212
,
-
2
},
/* (16) dbPrefix ::= ids DOT */
{
213
,
-
2
},
/* (16) dbPrefix ::= ids DOT */
{
214
,
0
},
/* (17) cpxName ::= */
{
215
,
0
},
/* (17) cpxName ::= */
{
214
,
-
2
},
/* (18) cpxName ::= DOT ids */
{
215
,
-
2
},
/* (18) cpxName ::= DOT ids */
{
211
,
-
5
},
/* (19) cmd ::= SHOW CREATE TABLE ids cpxName */
{
212
,
-
5
},
/* (19) cmd ::= SHOW CREATE TABLE ids cpxName */
{
211
,
-
4
},
/* (20) cmd ::= SHOW CREATE DATABASE ids */
{
212
,
-
4
},
/* (20) cmd ::= SHOW CREATE DATABASE ids */
{
211
,
-
3
},
/* (21) cmd ::= SHOW dbPrefix TABLES */
{
212
,
-
3
},
/* (21) cmd ::= SHOW dbPrefix TABLES */
{
211
,
-
5
},
/* (22) cmd ::= SHOW dbPrefix TABLES LIKE ids */
{
212
,
-
5
},
/* (22) cmd ::= SHOW dbPrefix TABLES LIKE ids */
{
211
,
-
3
},
/* (23) cmd ::= SHOW dbPrefix STABLES */
{
212
,
-
3
},
/* (23) cmd ::= SHOW dbPrefix STABLES */
{
211
,
-
5
},
/* (24) cmd ::= SHOW dbPrefix STABLES LIKE ids */
{
212
,
-
5
},
/* (24) cmd ::= SHOW dbPrefix STABLES LIKE ids */
{
211
,
-
3
},
/* (25) cmd ::= SHOW dbPrefix VGROUPS */
{
212
,
-
3
},
/* (25) cmd ::= SHOW dbPrefix VGROUPS */
{
211
,
-
4
},
/* (26) cmd ::= SHOW dbPrefix VGROUPS ids */
{
212
,
-
4
},
/* (26) cmd ::= SHOW dbPrefix VGROUPS ids */
{
211
,
-
5
},
/* (27) cmd ::= DROP TABLE ifexists ids cpxName */
{
212
,
-
5
},
/* (27) cmd ::= DROP TABLE ifexists ids cpxName */
{
211
,
-
5
},
/* (28) cmd ::= DROP STABLE ifexists ids cpxName */
{
212
,
-
5
},
/* (28) cmd ::= DROP STABLE ifexists ids cpxName */
{
211
,
-
4
},
/* (29) cmd ::= DROP DATABASE ifexists ids */
{
212
,
-
4
},
/* (29) cmd ::= DROP DATABASE ifexists ids */
{
211
,
-
3
},
/* (30) cmd ::= DROP DNODE ids */
{
212
,
-
3
},
/* (30) cmd ::= DROP DNODE ids */
{
211
,
-
3
},
/* (31) cmd ::= DROP USER ids */
{
212
,
-
3
},
/* (31) cmd ::= DROP USER ids */
{
211
,
-
3
},
/* (32) cmd ::= DROP ACCOUNT ids */
{
212
,
-
3
},
/* (32) cmd ::= DROP ACCOUNT ids */
{
211
,
-
2
},
/* (33) cmd ::= USE ids */
{
212
,
-
2
},
/* (33) cmd ::= USE ids */
{
211
,
-
3
},
/* (34) cmd ::= DESCRIBE ids cpxName */
{
212
,
-
3
},
/* (34) cmd ::= DESCRIBE ids cpxName */
{
211
,
-
5
},
/* (35) cmd ::= ALTER USER ids PASS ids */
{
212
,
-
5
},
/* (35) cmd ::= ALTER USER ids PASS ids */
{
211
,
-
5
},
/* (36) cmd ::= ALTER USER ids PRIVILEGE ids */
{
212
,
-
5
},
/* (36) cmd ::= ALTER USER ids PRIVILEGE ids */
{
211
,
-
4
},
/* (37) cmd ::= ALTER DNODE ids ids */
{
212
,
-
4
},
/* (37) cmd ::= ALTER DNODE ids ids */
{
211
,
-
5
},
/* (38) cmd ::= ALTER DNODE ids ids ids */
{
212
,
-
5
},
/* (38) cmd ::= ALTER DNODE ids ids ids */
{
211
,
-
3
},
/* (39) cmd ::= ALTER LOCAL ids */
{
212
,
-
3
},
/* (39) cmd ::= ALTER LOCAL ids */
{
211
,
-
4
},
/* (40) cmd ::= ALTER LOCAL ids ids */
{
212
,
-
4
},
/* (40) cmd ::= ALTER LOCAL ids ids */
{
211
,
-
4
},
/* (41) cmd ::= ALTER DATABASE ids alter_db_optr */
{
212
,
-
4
},
/* (41) cmd ::= ALTER DATABASE ids alter_db_optr */
{
211
,
-
4
},
/* (42) cmd ::= ALTER ACCOUNT ids acct_optr */
{
212
,
-
4
},
/* (42) cmd ::= ALTER ACCOUNT ids acct_optr */
{
211
,
-
6
},
/* (43) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */
{
212
,
-
6
},
/* (43) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */
{
213
,
-
1
},
/* (44) ids ::= ID */
{
214
,
-
1
},
/* (44) ids ::= ID */
{
213
,
-
1
},
/* (45) ids ::= STRING */
{
214
,
-
1
},
/* (45) ids ::= STRING */
{
215
,
-
2
},
/* (46) ifexists ::= IF EXISTS */
{
216
,
-
2
},
/* (46) ifexists ::= IF EXISTS */
{
215
,
0
},
/* (47) ifexists ::= */
{
216
,
0
},
/* (47) ifexists ::= */
{
218
,
-
3
},
/* (48) ifnotexists ::= IF NOT EXISTS */
{
219
,
-
3
},
/* (48) ifnotexists ::= IF NOT EXISTS */
{
218
,
0
},
/* (49) ifnotexists ::= */
{
219
,
0
},
/* (49) ifnotexists ::= */
{
211
,
-
3
},
/* (50) cmd ::= CREATE DNODE ids */
{
212
,
-
3
},
/* (50) cmd ::= CREATE DNODE ids */
{
211
,
-
6
},
/* (51) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */
{
212
,
-
6
},
/* (51) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */
{
211
,
-
5
},
/* (52) cmd ::= CREATE DATABASE ifnotexists ids db_optr */
{
212
,
-
5
},
/* (52) cmd ::= CREATE DATABASE ifnotexists ids db_optr */
{
211
,
-
5
},
/* (53) cmd ::= CREATE USER ids PASS ids */
{
212
,
-
5
},
/* (53) cmd ::= CREATE USER ids PASS ids */
{
220
,
0
},
/* (54) pps ::= */
{
221
,
0
},
/* (54) pps ::= */
{
220
,
-
2
},
/* (55) pps ::= PPS INTEGER */
{
221
,
-
2
},
/* (55) pps ::= PPS INTEGER */
{
221
,
0
},
/* (56) tseries ::= */
{
222
,
0
},
/* (56) tseries ::= */
{
221
,
-
2
},
/* (57) tseries ::= TSERIES INTEGER */
{
222
,
-
2
},
/* (57) tseries ::= TSERIES INTEGER */
{
222
,
0
},
/* (58) dbs ::= */
{
223
,
0
},
/* (58) dbs ::= */
{
222
,
-
2
},
/* (59) dbs ::= DBS INTEGER */
{
223
,
-
2
},
/* (59) dbs ::= DBS INTEGER */
{
223
,
0
},
/* (60) streams ::= */
{
224
,
0
},
/* (60) streams ::= */
{
223
,
-
2
},
/* (61) streams ::= STREAMS INTEGER */
{
224
,
-
2
},
/* (61) streams ::= STREAMS INTEGER */
{
224
,
0
},
/* (62) storage ::= */
{
225
,
0
},
/* (62) storage ::= */
{
224
,
-
2
},
/* (63) storage ::= STORAGE INTEGER */
{
225
,
-
2
},
/* (63) storage ::= STORAGE INTEGER */
{
225
,
0
},
/* (64) qtime ::= */
{
226
,
0
},
/* (64) qtime ::= */
{
225
,
-
2
},
/* (65) qtime ::= QTIME INTEGER */
{
226
,
-
2
},
/* (65) qtime ::= QTIME INTEGER */
{
226
,
0
},
/* (66) users ::= */
{
227
,
0
},
/* (66) users ::= */
{
226
,
-
2
},
/* (67) users ::= USERS INTEGER */
{
227
,
-
2
},
/* (67) users ::= USERS INTEGER */
{
227
,
0
},
/* (68) conns ::= */
{
228
,
0
},
/* (68) conns ::= */
{
227
,
-
2
},
/* (69) conns ::= CONNS INTEGER */
{
228
,
-
2
},
/* (69) conns ::= CONNS INTEGER */
{
228
,
0
},
/* (70) state ::= */
{
229
,
0
},
/* (70) state ::= */
{
228
,
-
2
},
/* (71) state ::= STATE ids */
{
229
,
-
2
},
/* (71) state ::= STATE ids */
{
217
,
-
9
},
/* (72) acct_optr ::= pps tseries storage streams qtime dbs users conns state */
{
218
,
-
9
},
/* (72) acct_optr ::= pps tseries storage streams qtime dbs users conns state */
{
229
,
-
2
},
/* (73) keep ::= KEEP tagitemlist */
{
230
,
-
2
},
/* (73) keep ::= KEEP tagitemlist */
{
231
,
-
2
},
/* (74) cache ::= CACHE INTEGER */
{
232
,
-
2
},
/* (74) cache ::= CACHE INTEGER */
{
232
,
-
2
},
/* (75) replica ::= REPLICA INTEGER */
{
233
,
-
2
},
/* (75) replica ::= REPLICA INTEGER */
{
233
,
-
2
},
/* (76) quorum ::= QUORUM INTEGER */
{
234
,
-
2
},
/* (76) quorum ::= QUORUM INTEGER */
{
234
,
-
2
},
/* (77) days ::= DAYS INTEGER */
{
235
,
-
2
},
/* (77) days ::= DAYS INTEGER */
{
235
,
-
2
},
/* (78) minrows ::= MINROWS INTEGER */
{
236
,
-
2
},
/* (78) minrows ::= MINROWS INTEGER */
{
236
,
-
2
},
/* (79) maxrows ::= MAXROWS INTEGER */
{
237
,
-
2
},
/* (79) maxrows ::= MAXROWS INTEGER */
{
237
,
-
2
},
/* (80) blocks ::= BLOCKS INTEGER */
{
238
,
-
2
},
/* (80) blocks ::= BLOCKS INTEGER */
{
238
,
-
2
},
/* (81) ctime ::= CTIME INTEGER */
{
239
,
-
2
},
/* (81) ctime ::= CTIME INTEGER */
{
239
,
-
2
},
/* (82) wal ::= WAL INTEGER */
{
240
,
-
2
},
/* (82) wal ::= WAL INTEGER */
{
240
,
-
2
},
/* (83) fsync ::= FSYNC INTEGER */
{
241
,
-
2
},
/* (83) fsync ::= FSYNC INTEGER */
{
241
,
-
2
},
/* (84) comp ::= COMP INTEGER */
{
242
,
-
2
},
/* (84) comp ::= COMP INTEGER */
{
242
,
-
2
},
/* (85) prec ::= PRECISION STRING */
{
243
,
-
2
},
/* (85) prec ::= PRECISION STRING */
{
243
,
-
2
},
/* (86) update ::= UPDATE INTEGER */
{
244
,
-
2
},
/* (86) update ::= UPDATE INTEGER */
{
244
,
-
2
},
/* (87) cachelast ::= CACHELAST INTEGER */
{
245
,
-
2
},
/* (87) cachelast ::= CACHELAST INTEGER */
{
219
,
0
},
/* (88) db_optr ::= */
{
220
,
0
},
/* (88) db_optr ::= */
{
219
,
-
2
},
/* (89) db_optr ::= db_optr cache */
{
220
,
-
2
},
/* (89) db_optr ::= db_optr cache */
{
219
,
-
2
},
/* (90) db_optr ::= db_optr replica */
{
220
,
-
2
},
/* (90) db_optr ::= db_optr replica */
{
219
,
-
2
},
/* (91) db_optr ::= db_optr quorum */
{
220
,
-
2
},
/* (91) db_optr ::= db_optr quorum */
{
219
,
-
2
},
/* (92) db_optr ::= db_optr days */
{
220
,
-
2
},
/* (92) db_optr ::= db_optr days */
{
219
,
-
2
},
/* (93) db_optr ::= db_optr minrows */
{
220
,
-
2
},
/* (93) db_optr ::= db_optr minrows */
{
219
,
-
2
},
/* (94) db_optr ::= db_optr maxrows */
{
220
,
-
2
},
/* (94) db_optr ::= db_optr maxrows */
{
219
,
-
2
},
/* (95) db_optr ::= db_optr blocks */
{
220
,
-
2
},
/* (95) db_optr ::= db_optr blocks */
{
219
,
-
2
},
/* (96) db_optr ::= db_optr ctime */
{
220
,
-
2
},
/* (96) db_optr ::= db_optr ctime */
{
219
,
-
2
},
/* (97) db_optr ::= db_optr wal */
{
220
,
-
2
},
/* (97) db_optr ::= db_optr wal */
{
219
,
-
2
},
/* (98) db_optr ::= db_optr fsync */
{
220
,
-
2
},
/* (98) db_optr ::= db_optr fsync */
{
219
,
-
2
},
/* (99) db_optr ::= db_optr comp */
{
220
,
-
2
},
/* (99) db_optr ::= db_optr comp */
{
219
,
-
2
},
/* (100) db_optr ::= db_optr prec */
{
220
,
-
2
},
/* (100) db_optr ::= db_optr prec */
{
219
,
-
2
},
/* (101) db_optr ::= db_optr keep */
{
220
,
-
2
},
/* (101) db_optr ::= db_optr keep */
{
219
,
-
2
},
/* (102) db_optr ::= db_optr update */
{
220
,
-
2
},
/* (102) db_optr ::= db_optr update */
{
219
,
-
2
},
/* (103) db_optr ::= db_optr cachelast */
{
220
,
-
2
},
/* (103) db_optr ::= db_optr cachelast */
{
216
,
0
},
/* (104) alter_db_optr ::= */
{
217
,
0
},
/* (104) alter_db_optr ::= */
{
216
,
-
2
},
/* (105) alter_db_optr ::= alter_db_optr replica */
{
217
,
-
2
},
/* (105) alter_db_optr ::= alter_db_optr replica */
{
216
,
-
2
},
/* (106) alter_db_optr ::= alter_db_optr quorum */
{
217
,
-
2
},
/* (106) alter_db_optr ::= alter_db_optr quorum */
{
216
,
-
2
},
/* (107) alter_db_optr ::= alter_db_optr keep */
{
217
,
-
2
},
/* (107) alter_db_optr ::= alter_db_optr keep */
{
216
,
-
2
},
/* (108) alter_db_optr ::= alter_db_optr blocks */
{
217
,
-
2
},
/* (108) alter_db_optr ::= alter_db_optr blocks */
{
216
,
-
2
},
/* (109) alter_db_optr ::= alter_db_optr comp */
{
217
,
-
2
},
/* (109) alter_db_optr ::= alter_db_optr comp */
{
216
,
-
2
},
/* (110) alter_db_optr ::= alter_db_optr wal */
{
217
,
-
2
},
/* (110) alter_db_optr ::= alter_db_optr wal */
{
216
,
-
2
},
/* (111) alter_db_optr ::= alter_db_optr fsync */
{
217
,
-
2
},
/* (111) alter_db_optr ::= alter_db_optr fsync */
{
216
,
-
2
},
/* (112) alter_db_optr ::= alter_db_optr update */
{
217
,
-
2
},
/* (112) alter_db_optr ::= alter_db_optr update */
{
216
,
-
2
},
/* (113) alter_db_optr ::= alter_db_optr cachelast */
{
217
,
-
2
},
/* (113) alter_db_optr ::= alter_db_optr cachelast */
{
245
,
-
1
},
/* (114) typename ::= ids */
{
246
,
-
1
},
/* (114) typename ::= ids */
{
245
,
-
4
},
/* (115) typename ::= ids LP signed RP */
{
246
,
-
4
},
/* (115) typename ::= ids LP signed RP */
{
245
,
-
2
},
/* (116) typename ::= ids UNSIGNED */
{
246
,
-
2
},
/* (116) typename ::= ids UNSIGNED */
{
246
,
-
1
},
/* (117) signed ::= INTEGER */
{
247
,
-
1
},
/* (117) signed ::= INTEGER */
{
246
,
-
2
},
/* (118) signed ::= PLUS INTEGER */
{
247
,
-
2
},
/* (118) signed ::= PLUS INTEGER */
{
246
,
-
2
},
/* (119) signed ::= MINUS INTEGER */
{
247
,
-
2
},
/* (119) signed ::= MINUS INTEGER */
{
211
,
-
3
},
/* (120) cmd ::= CREATE TABLE create_table_args */
{
212
,
-
3
},
/* (120) cmd ::= CREATE TABLE create_table_args */
{
211
,
-
3
},
/* (121) cmd ::= CREATE TABLE create_stable_args */
{
212
,
-
3
},
/* (121) cmd ::= CREATE TABLE create_stable_args */
{
211
,
-
3
},
/* (122) cmd ::= CREATE STABLE create_stable_args */
{
212
,
-
3
},
/* (122) cmd ::= CREATE STABLE create_stable_args */
{
211
,
-
3
},
/* (123) cmd ::= CREATE TABLE create_table_list */
{
212
,
-
3
},
/* (123) cmd ::= CREATE TABLE create_table_list */
{
249
,
-
1
},
/* (124) create_table_list ::= create_from_stable */
{
250
,
-
1
},
/* (124) create_table_list ::= create_from_stable */
{
249
,
-
2
},
/* (125) create_table_list ::= create_table_list create_from_stable */
{
250
,
-
2
},
/* (125) create_table_list ::= create_table_list create_from_stable */
{
247
,
-
6
},
/* (126) create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
{
248
,
-
6
},
/* (126) create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
{
248
,
-
10
},
/* (127) create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
{
249
,
-
10
},
/* (127) create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
{
250
,
-
10
},
/* (128) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */
{
251
,
-
10
},
/* (128) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */
{
247
,
-
5
},
/* (129) create_table_args ::= ifnotexists ids cpxName AS select */
{
248
,
-
5
},
/* (129) create_table_args ::= ifnotexists ids cpxName AS select */
{
251
,
-
3
},
/* (130) columnlist ::= columnlist COMMA column */
{
252
,
-
3
},
/* (130) columnlist ::= columnlist COMMA column */
{
251
,
-
1
},
/* (131) columnlist ::= column */
{
252
,
-
1
},
/* (131) columnlist ::= column */
{
253
,
-
2
},
/* (132) column ::= ids typename */
{
254
,
-
2
},
/* (132) column ::= ids typename */
{
230
,
-
3
},
/* (133) tagitemlist ::= tagitemlist COMMA tagitem */
{
231
,
-
3
},
/* (133) tagitemlist ::= tagitemlist COMMA tagitem */
{
230
,
-
1
},
/* (134) tagitemlist ::= tagitem */
{
231
,
-
1
},
/* (134) tagitemlist ::= tagitem */
{
254
,
-
1
},
/* (135) tagitem ::= INTEGER */
{
255
,
-
1
},
/* (135) tagitem ::= INTEGER */
{
254
,
-
1
},
/* (136) tagitem ::= FLOAT */
{
255
,
-
1
},
/* (136) tagitem ::= FLOAT */
{
254
,
-
1
},
/* (137) tagitem ::= STRING */
{
255
,
-
1
},
/* (137) tagitem ::= STRING */
{
254
,
-
1
},
/* (138) tagitem ::= BOOL */
{
255
,
-
1
},
/* (138) tagitem ::= BOOL */
{
254
,
-
1
},
/* (139) tagitem ::= NULL */
{
255
,
-
1
},
/* (139) tagitem ::= NULL */
{
254
,
-
2
},
/* (140) tagitem ::= MINUS INTEGER */
{
255
,
-
2
},
/* (140) tagitem ::= MINUS INTEGER */
{
254
,
-
2
},
/* (141) tagitem ::= MINUS FLOAT */
{
255
,
-
2
},
/* (141) tagitem ::= MINUS FLOAT */
{
254
,
-
2
},
/* (142) tagitem ::= PLUS INTEGER */
{
255
,
-
2
},
/* (142) tagitem ::= PLUS INTEGER */
{
254
,
-
2
},
/* (143) tagitem ::= PLUS FLOAT */
{
255
,
-
2
},
/* (143) tagitem ::= PLUS FLOAT */
{
252
,
-
12
},
/* (144) select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
{
253
,
-
12
},
/* (144) select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
{
266
,
-
1
},
/* (145) union ::= select */
{
267
,
-
1
},
/* (145) union ::= select */
{
266
,
-
3
},
/* (146) union ::= LP union RP */
{
267
,
-
3
},
/* (146) union ::= LP union RP */
{
266
,
-
4
},
/* (147) union ::= union UNION ALL select */
{
267
,
-
4
},
/* (147) union ::= union UNION ALL select */
{
266
,
-
6
},
/* (148) union ::= union UNION ALL LP select RP */
{
267
,
-
6
},
/* (148) union ::= union UNION ALL LP select RP */
{
211
,
-
1
},
/* (149) cmd ::= union */
{
212
,
-
1
},
/* (149) cmd ::= union */
{
252
,
-
2
},
/* (150) select ::= SELECT selcollist */
{
253
,
-
2
},
/* (150) select ::= SELECT selcollist */
{
267
,
-
2
},
/* (151) sclp ::= selcollist COMMA */
{
268
,
-
2
},
/* (151) sclp ::= selcollist COMMA */
{
267
,
0
},
/* (152) sclp ::= */
{
268
,
0
},
/* (152) sclp ::= */
{
255
,
-
3
},
/* (153) selcollist ::= sclp expr as */
{
256
,
-
4
},
/* (153) selcollist ::= sclp distinct expr as */
{
255
,
-
2
},
/* (154) selcollist ::= sclp STAR */
{
256
,
-
2
},
/* (154) selcollist ::= sclp STAR */
{
269
,
-
2
},
/* (155) as ::= AS ids */
{
271
,
-
2
},
/* (155) as ::= AS ids */
{
269
,
-
1
},
/* (156) as ::= ids */
{
271
,
-
1
},
/* (156) as ::= ids */
{
269
,
0
},
/* (157) as ::= */
{
271
,
0
},
/* (157) as ::= */
{
256
,
-
2
},
/* (158) from ::= FROM tablelist */
{
269
,
-
1
},
/* (158) distinct ::= DISTINCT */
{
270
,
-
2
},
/* (159) tablelist ::= ids cpxName */
{
269
,
0
},
/* (159) distinct ::= */
{
270
,
-
3
},
/* (160) tablelist ::= ids cpxName ids */
{
257
,
-
2
},
/* (160) from ::= FROM tablelist */
{
270
,
-
4
},
/* (161) tablelist ::= tablelist COMMA ids cpxName */
{
272
,
-
2
},
/* (161) tablelist ::= ids cpxName */
{
270
,
-
5
},
/* (162) tablelist ::= tablelist COMMA ids cpxName ids */
{
272
,
-
3
},
/* (162) tablelist ::= ids cpxName ids */
{
271
,
-
1
},
/* (163) tmvar ::= VARIABLE */
{
272
,
-
4
},
/* (163) tablelist ::= tablelist COMMA ids cpxName */
{
258
,
-
4
},
/* (164) interval_opt ::= INTERVAL LP tmvar RP */
{
272
,
-
5
},
/* (164) tablelist ::= tablelist COMMA ids cpxName ids */
{
258
,
-
6
},
/* (165) interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */
{
273
,
-
1
},
/* (165) tmvar ::= VARIABLE */
{
258
,
0
},
/* (166) interval_opt ::= */
{
259
,
-
4
},
/* (166) interval_opt ::= INTERVAL LP tmvar RP */
{
259
,
0
},
/* (167) fill_opt ::= */
{
259
,
-
6
},
/* (167) interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */
{
259
,
-
6
},
/* (168) fill_opt ::= FILL LP ID COMMA tagitemlist RP */
{
259
,
0
},
/* (168) interval_opt ::= */
{
259
,
-
4
},
/* (169) fill_opt ::= FILL LP ID RP */
{
260
,
0
},
/* (169) fill_opt ::= */
{
260
,
-
4
},
/* (170) sliding_opt ::= SLIDING LP tmvar RP */
{
260
,
-
6
},
/* (170) fill_opt ::= FILL LP ID COMMA tagitemlist RP */
{
260
,
0
},
/* (171) sliding_opt ::= */
{
260
,
-
4
},
/* (171) fill_opt ::= FILL LP ID RP */
{
262
,
0
},
/* (172) orderby_opt ::= */
{
261
,
-
4
},
/* (172) sliding_opt ::= SLIDING LP tmvar RP */
{
262
,
-
3
},
/* (173) orderby_opt ::= ORDER BY sortlist */
{
261
,
0
},
/* (173) sliding_opt ::= */
{
272
,
-
4
},
/* (174) sortlist ::= sortlist COMMA item sortorder */
{
263
,
0
},
/* (174) orderby_opt ::= */
{
272
,
-
2
},
/* (175) sortlist ::= item sortorder */
{
263
,
-
3
},
/* (175) orderby_opt ::= ORDER BY sortlist */
{
274
,
-
2
},
/* (176) item ::= ids cpxName */
{
274
,
-
4
},
/* (176) sortlist ::= sortlist COMMA item sortorder */
{
275
,
-
1
},
/* (177) sortorder ::= ASC */
{
274
,
-
2
},
/* (177) sortlist ::= item sortorder */
{
275
,
-
1
},
/* (178) sortorder ::= DESC */
{
276
,
-
2
},
/* (178) item ::= ids cpxName */
{
275
,
0
},
/* (179) sortorder ::= */
{
277
,
-
1
},
/* (179) sortorder ::= ASC */
{
261
,
0
},
/* (180) groupby_opt ::= */
{
277
,
-
1
},
/* (180) sortorder ::= DESC */
{
261
,
-
3
},
/* (181) groupby_opt ::= GROUP BY grouplist */
{
277
,
0
},
/* (181) sortorder ::= */
{
276
,
-
3
},
/* (182) grouplist ::= grouplist COMMA item */
{
262
,
0
},
/* (182) groupby_opt ::= */
{
276
,
-
1
},
/* (183) grouplist ::= item */
{
262
,
-
3
},
/* (183) groupby_opt ::= GROUP BY grouplist */
{
263
,
0
},
/* (184) having_opt ::= */
{
278
,
-
3
},
/* (184) grouplist ::= grouplist COMMA item */
{
263
,
-
2
},
/* (185) having_opt ::= HAVING expr */
{
278
,
-
1
},
/* (185) grouplist ::= item */
{
265
,
0
},
/* (186) limit_opt ::= */
{
264
,
0
},
/* (186) having_opt ::= */
{
265
,
-
2
},
/* (187) limit_opt ::= LIMIT signed */
{
264
,
-
2
},
/* (187) having_opt ::= HAVING expr */
{
265
,
-
4
},
/* (188) limit_opt ::= LIMIT signed OFFSET signed */
{
266
,
0
},
/* (188) limit_opt ::= */
{
265
,
-
4
},
/* (189) limit_opt ::= LIMIT signed COMMA signed */
{
266
,
-
2
},
/* (189) limit_opt ::= LIMIT signed */
{
264
,
0
},
/* (190) slimit_opt ::= */
{
266
,
-
4
},
/* (190) limit_opt ::= LIMIT signed OFFSET signed */
{
264
,
-
2
},
/* (191) slimit_opt ::= SLIMIT signed */
{
266
,
-
4
},
/* (191) limit_opt ::= LIMIT signed COMMA signed */
{
264
,
-
4
},
/* (192) slimit_opt ::= SLIMIT signed SOFFSET signed */
{
265
,
0
},
/* (192) slimit_opt ::= */
{
264
,
-
4
},
/* (193) slimit_opt ::= SLIMIT signed COMMA signed */
{
265
,
-
2
},
/* (193) slimit_opt ::= SLIMIT signed */
{
257
,
0
},
/* (194) where_opt ::= */
{
265
,
-
4
},
/* (194) slimit_opt ::= SLIMIT signed SOFFSET signed */
{
257
,
-
2
},
/* (195) where_opt ::= WHERE expr */
{
265
,
-
4
},
/* (195) slimit_opt ::= SLIMIT signed COMMA signed */
{
268
,
-
3
},
/* (196) expr ::= LP expr RP */
{
258
,
0
},
/* (196) where_opt ::= */
{
268
,
-
1
},
/* (197) expr ::= ID */
{
258
,
-
2
},
/* (197) where_opt ::= WHERE expr */
{
268
,
-
3
},
/* (198) expr ::= ID DOT ID */
{
270
,
-
3
},
/* (198) expr ::= LP expr RP */
{
268
,
-
3
},
/* (199) expr ::= ID DOT STAR */
{
270
,
-
1
},
/* (199) expr ::= ID */
{
268
,
-
1
},
/* (200) expr ::= INTEGER */
{
270
,
-
3
},
/* (200) expr ::= ID DOT ID */
{
268
,
-
2
},
/* (201) expr ::= MINUS INTEGER */
{
270
,
-
3
},
/* (201) expr ::= ID DOT STAR */
{
268
,
-
2
},
/* (202) expr ::= PLUS INTEGER */
{
270
,
-
1
},
/* (202) expr ::= INTEGER */
{
268
,
-
1
},
/* (203) expr ::= FLOAT */
{
270
,
-
2
},
/* (203) expr ::= MINUS INTEGER */
{
268
,
-
2
},
/* (204) expr ::= MINUS FLOAT */
{
270
,
-
2
},
/* (204) expr ::= PLUS INTEGER */
{
268
,
-
2
},
/* (205) expr ::= PLUS FLOAT */
{
270
,
-
1
},
/* (205) expr ::= FLOAT */
{
268
,
-
1
},
/* (206) expr ::= STRING */
{
270
,
-
2
},
/* (206) expr ::= MINUS FLOAT */
{
268
,
-
1
},
/* (207) expr ::= NOW */
{
270
,
-
2
},
/* (207) expr ::= PLUS FLOAT */
{
268
,
-
1
},
/* (208) expr ::= VARIABLE */
{
270
,
-
1
},
/* (208) expr ::= STRING */
{
268
,
-
1
},
/* (209) expr ::= BOOL */
{
270
,
-
1
},
/* (209) expr ::= NOW */
{
268
,
-
4
},
/* (210) expr ::= ID LP exprlist RP */
{
270
,
-
1
},
/* (210) expr ::= VARIABLE */
{
268
,
-
4
},
/* (211) expr ::= ID LP STAR RP */
{
270
,
-
1
},
/* (211) expr ::= BOOL */
{
268
,
-
3
},
/* (212) expr ::= expr IS NULL */
{
270
,
-
4
},
/* (212) expr ::= ID LP exprlist RP */
{
268
,
-
4
},
/* (213) expr ::= expr IS NOT NULL */
{
270
,
-
4
},
/* (213) expr ::= ID LP STAR RP */
{
268
,
-
3
},
/* (214) expr ::= expr LT expr */
{
270
,
-
3
},
/* (214) expr ::= expr IS NULL */
{
268
,
-
3
},
/* (215) expr ::= expr GT expr */
{
270
,
-
4
},
/* (215) expr ::= expr IS NOT NULL */
{
268
,
-
3
},
/* (216) expr ::= expr LE expr */
{
270
,
-
3
},
/* (216) expr ::= expr LT expr */
{
268
,
-
3
},
/* (217) expr ::= expr GE expr */
{
270
,
-
3
},
/* (217) expr ::= expr GT expr */
{
268
,
-
3
},
/* (218) expr ::= expr NE expr */
{
270
,
-
3
},
/* (218) expr ::= expr LE expr */
{
268
,
-
3
},
/* (219) expr ::= expr EQ expr */
{
270
,
-
3
},
/* (219) expr ::= expr GE expr */
{
268
,
-
3
},
/* (220) expr ::= expr AND expr */
{
270
,
-
3
},
/* (220) expr ::= expr NE expr */
{
268
,
-
3
},
/* (221) expr ::= expr OR expr */
{
270
,
-
3
},
/* (221) expr ::= expr EQ expr */
{
268
,
-
3
},
/* (222) expr ::= expr PLUS expr */
{
270
,
-
3
},
/* (222) expr ::= expr AND expr */
{
268
,
-
3
},
/* (223) expr ::= expr MINUS expr */
{
270
,
-
3
},
/* (223) expr ::= expr OR expr */
{
268
,
-
3
},
/* (224) expr ::= expr STAR expr */
{
270
,
-
3
},
/* (224) expr ::= expr PLUS expr */
{
268
,
-
3
},
/* (225) expr ::= expr SLASH expr */
{
270
,
-
3
},
/* (225) expr ::= expr MINUS expr */
{
268
,
-
3
},
/* (226) expr ::= expr REM expr */
{
270
,
-
3
},
/* (226) expr ::= expr STAR expr */
{
268
,
-
3
},
/* (227) expr ::= expr LIKE expr */
{
270
,
-
3
},
/* (227) expr ::= expr SLASH expr */
{
268
,
-
5
},
/* (228) expr ::= expr IN LP exprlist RP */
{
270
,
-
3
},
/* (228) expr ::= expr REM expr */
{
277
,
-
3
},
/* (229) exprlist ::= exprlist COMMA expritem */
{
270
,
-
3
},
/* (229) expr ::= expr LIKE expr */
{
277
,
-
1
},
/* (230) exprlist ::= expritem */
{
270
,
-
5
},
/* (230) expr ::= expr IN LP exprlist RP */
{
278
,
-
1
},
/* (231) expritem ::= expr */
{
279
,
-
3
},
/* (231) exprlist ::= exprlist COMMA expritem */
{
278
,
0
},
/* (232) expritem ::= */
{
279
,
-
1
},
/* (232) exprlist ::= expritem */
{
211
,
-
3
},
/* (233) cmd ::= RESET QUERY CACHE */
{
280
,
-
1
},
/* (233) expritem ::= expr */
{
211
,
-
7
},
/* (234) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
{
280
,
0
},
/* (234) expritem ::= */
{
211
,
-
7
},
/* (235) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
{
212
,
-
3
},
/* (235) cmd ::= RESET QUERY CACHE */
{
211
,
-
7
},
/* (236) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
{
212
,
-
7
},
/* (236) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
{
211
,
-
7
},
/* (237) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
{
212
,
-
7
},
/* (237) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
{
211
,
-
8
},
/* (238) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
{
212
,
-
7
},
/* (238) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
{
211
,
-
9
},
/* (239) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
{
212
,
-
7
},
/* (239) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
{
211
,
-
7
},
/* (240) cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
{
212
,
-
8
},
/* (240) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
{
211
,
-
7
},
/* (241) cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
{
212
,
-
9
},
/* (241) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
{
211
,
-
7
},
/* (242) cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
{
212
,
-
7
},
/* (242) cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
{
211
,
-
7
},
/* (243) cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
{
212
,
-
7
},
/* (243) cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
{
211
,
-
8
},
/* (244) cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
{
212
,
-
7
},
/* (244) cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
{
211
,
-
3
},
/* (245) cmd ::= KILL CONNECTION INTEGER */
{
212
,
-
7
},
/* (245) cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
{
211
,
-
5
},
/* (246) cmd ::= KILL STREAM INTEGER COLON INTEGER */
{
212
,
-
8
},
/* (246) cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
{
211
,
-
5
},
/* (247) cmd ::= KILL QUERY INTEGER COLON INTEGER */
{
212
,
-
3
},
/* (247) cmd ::= KILL CONNECTION INTEGER */
{
212
,
-
5
},
/* (248) cmd ::= KILL STREAM INTEGER COLON INTEGER */
{
212
,
-
5
},
/* (249) cmd ::= KILL QUERY INTEGER COLON INTEGER */
};
};
static
void
yy_accept
(
yyParser
*
);
/* Forward Declaration */
static
void
yy_accept
(
yyParser
*
);
/* Forward Declaration */
...
@@ -2233,14 +2238,13 @@ static void yy_reduce(
...
@@ -2233,14 +2238,13 @@ static void yy_reduce(
{
setDCLSQLElems
(
pInfo
,
TSDB_SQL_CFG_LOCAL
,
2
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
);
}
{
setDCLSQLElems
(
pInfo
,
TSDB_SQL_CFG_LOCAL
,
2
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
);
}
break
;
break
;
case
41
:
/* cmd ::= ALTER DATABASE ids alter_db_optr */
case
41
:
/* cmd ::= ALTER DATABASE ids alter_db_optr */
{
SStrToken
t
=
{
0
};
{
SStrToken
t
=
{
0
};
setCreateDbInfo
(
pInfo
,
TSDB_SQL_ALTER_DB
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy262
,
&
t
);}
setCreateDbInfo
(
pInfo
,
TSDB_SQL_ALTER_DB
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy256
,
&
t
);}
break
;
break
;
case
42
:
/* cmd ::= ALTER ACCOUNT ids acct_optr */
case
42
:
/* cmd ::= ALTER ACCOUNT ids acct_optr */
{
setCreateAcctSql
(
pInfo
,
TSDB_SQL_ALTER_ACCT
,
&
yymsp
[
-
1
].
minor
.
yy0
,
NULL
,
&
yymsp
[
0
].
minor
.
yy
27
7
);}
{
setCreateAcctSql
(
pInfo
,
TSDB_SQL_ALTER_ACCT
,
&
yymsp
[
-
1
].
minor
.
yy0
,
NULL
,
&
yymsp
[
0
].
minor
.
yy
4
7
);}
break
;
break
;
case
43
:
/* cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */
case
43
:
/* cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */
{
setCreateAcctSql
(
pInfo
,
TSDB_SQL_ALTER_ACCT
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy
27
7
);}
{
setCreateAcctSql
(
pInfo
,
TSDB_SQL_ALTER_ACCT
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy
4
7
);}
break
;
break
;
case
44
:
/* ids ::= ID */
case
44
:
/* ids ::= ID */
case
45
:
/* ids ::= STRING */
yytestcase
(
yyruleno
==
45
);
case
45
:
/* ids ::= STRING */
yytestcase
(
yyruleno
==
45
);
...
@@ -2252,6 +2256,7 @@ static void yy_reduce(
...
@@ -2252,6 +2256,7 @@ static void yy_reduce(
break
;
break
;
case
47
:
/* ifexists ::= */
case
47
:
/* ifexists ::= */
case
49
:
/* ifnotexists ::= */
yytestcase
(
yyruleno
==
49
);
case
49
:
/* ifnotexists ::= */
yytestcase
(
yyruleno
==
49
);
case
159
:
/* distinct ::= */
yytestcase
(
yyruleno
==
159
);
{
yymsp
[
1
].
minor
.
yy0
.
n
=
0
;}
{
yymsp
[
1
].
minor
.
yy0
.
n
=
0
;}
break
;
break
;
case
48
:
/* ifnotexists ::= IF NOT EXISTS */
case
48
:
/* ifnotexists ::= IF NOT EXISTS */
...
@@ -2261,11 +2266,10 @@ static void yy_reduce(
...
@@ -2261,11 +2266,10 @@ static void yy_reduce(
{
setDCLSQLElems
(
pInfo
,
TSDB_SQL_CREATE_DNODE
,
1
,
&
yymsp
[
0
].
minor
.
yy0
);}
{
setDCLSQLElems
(
pInfo
,
TSDB_SQL_CREATE_DNODE
,
1
,
&
yymsp
[
0
].
minor
.
yy0
);}
break
;
break
;
case
51
:
/* cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */
case
51
:
/* 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
.
yy
27
7
);}
{
setCreateAcctSql
(
pInfo
,
TSDB_SQL_CREATE_ACCT
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy
4
7
);}
break
;
break
;
case
52
:
/* cmd ::= CREATE DATABASE ifnotexists ids db_optr */
case
52
:
/* cmd ::= CREATE DATABASE ifnotexists ids db_optr */
{
{
setCreateDbInfo
(
pInfo
,
TSDB_SQL_CREATE_DB
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy262
,
&
yymsp
[
-
2
].
minor
.
yy0
);}
setCreateDbInfo
(
pInfo
,
TSDB_SQL_CREATE_DB
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy256
,
&
yymsp
[
-
2
].
minor
.
yy0
);}
break
;
break
;
case
53
:
/* cmd ::= CREATE USER ids PASS ids */
case
53
:
/* cmd ::= CREATE USER ids PASS ids */
{
setCreateUserSql
(
pInfo
,
&
yymsp
[
-
2
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
);}
{
setCreateUserSql
(
pInfo
,
&
yymsp
[
-
2
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
);}
...
@@ -2294,20 +2298,20 @@ static void yy_reduce(
...
@@ -2294,20 +2298,20 @@ static void yy_reduce(
break
;
break
;
case
72
:
/* acct_optr ::= pps tseries storage streams qtime dbs users conns state */
case
72
:
/* acct_optr ::= pps tseries storage streams qtime dbs users conns state */
{
{
yylhsminor
.
yy
27
7
.
maxUsers
=
(
yymsp
[
-
2
].
minor
.
yy0
.
n
>
0
)
?
atoi
(
yymsp
[
-
2
].
minor
.
yy0
.
z
)
:-
1
;
yylhsminor
.
yy
4
7
.
maxUsers
=
(
yymsp
[
-
2
].
minor
.
yy0
.
n
>
0
)
?
atoi
(
yymsp
[
-
2
].
minor
.
yy0
.
z
)
:-
1
;
yylhsminor
.
yy
27
7
.
maxDbs
=
(
yymsp
[
-
3
].
minor
.
yy0
.
n
>
0
)
?
atoi
(
yymsp
[
-
3
].
minor
.
yy0
.
z
)
:-
1
;
yylhsminor
.
yy
4
7
.
maxDbs
=
(
yymsp
[
-
3
].
minor
.
yy0
.
n
>
0
)
?
atoi
(
yymsp
[
-
3
].
minor
.
yy0
.
z
)
:-
1
;
yylhsminor
.
yy
27
7
.
maxTimeSeries
=
(
yymsp
[
-
7
].
minor
.
yy0
.
n
>
0
)
?
atoi
(
yymsp
[
-
7
].
minor
.
yy0
.
z
)
:-
1
;
yylhsminor
.
yy
4
7
.
maxTimeSeries
=
(
yymsp
[
-
7
].
minor
.
yy0
.
n
>
0
)
?
atoi
(
yymsp
[
-
7
].
minor
.
yy0
.
z
)
:-
1
;
yylhsminor
.
yy
27
7
.
maxStreams
=
(
yymsp
[
-
5
].
minor
.
yy0
.
n
>
0
)
?
atoi
(
yymsp
[
-
5
].
minor
.
yy0
.
z
)
:-
1
;
yylhsminor
.
yy
4
7
.
maxStreams
=
(
yymsp
[
-
5
].
minor
.
yy0
.
n
>
0
)
?
atoi
(
yymsp
[
-
5
].
minor
.
yy0
.
z
)
:-
1
;
yylhsminor
.
yy
27
7
.
maxPointsPerSecond
=
(
yymsp
[
-
8
].
minor
.
yy0
.
n
>
0
)
?
atoi
(
yymsp
[
-
8
].
minor
.
yy0
.
z
)
:-
1
;
yylhsminor
.
yy
4
7
.
maxPointsPerSecond
=
(
yymsp
[
-
8
].
minor
.
yy0
.
n
>
0
)
?
atoi
(
yymsp
[
-
8
].
minor
.
yy0
.
z
)
:-
1
;
yylhsminor
.
yy
27
7
.
maxStorage
=
(
yymsp
[
-
6
].
minor
.
yy0
.
n
>
0
)
?
strtoll
(
yymsp
[
-
6
].
minor
.
yy0
.
z
,
NULL
,
10
)
:-
1
;
yylhsminor
.
yy
4
7
.
maxStorage
=
(
yymsp
[
-
6
].
minor
.
yy0
.
n
>
0
)
?
strtoll
(
yymsp
[
-
6
].
minor
.
yy0
.
z
,
NULL
,
10
)
:-
1
;
yylhsminor
.
yy
27
7
.
maxQueryTime
=
(
yymsp
[
-
4
].
minor
.
yy0
.
n
>
0
)
?
strtoll
(
yymsp
[
-
4
].
minor
.
yy0
.
z
,
NULL
,
10
)
:-
1
;
yylhsminor
.
yy
4
7
.
maxQueryTime
=
(
yymsp
[
-
4
].
minor
.
yy0
.
n
>
0
)
?
strtoll
(
yymsp
[
-
4
].
minor
.
yy0
.
z
,
NULL
,
10
)
:-
1
;
yylhsminor
.
yy
27
7
.
maxConnections
=
(
yymsp
[
-
1
].
minor
.
yy0
.
n
>
0
)
?
atoi
(
yymsp
[
-
1
].
minor
.
yy0
.
z
)
:-
1
;
yylhsminor
.
yy
4
7
.
maxConnections
=
(
yymsp
[
-
1
].
minor
.
yy0
.
n
>
0
)
?
atoi
(
yymsp
[
-
1
].
minor
.
yy0
.
z
)
:-
1
;
yylhsminor
.
yy
27
7
.
stat
=
yymsp
[
0
].
minor
.
yy0
;
yylhsminor
.
yy
4
7
.
stat
=
yymsp
[
0
].
minor
.
yy0
;
}
}
yymsp
[
-
8
].
minor
.
yy
277
=
yylhsminor
.
yy27
7
;
yymsp
[
-
8
].
minor
.
yy
47
=
yylhsminor
.
yy4
7
;
break
;
break
;
case
73
:
/* keep ::= KEEP tagitemlist */
case
73
:
/* keep ::= KEEP tagitemlist */
{
yymsp
[
-
1
].
minor
.
yy
135
=
yymsp
[
0
].
minor
.
yy135
;
}
{
yymsp
[
-
1
].
minor
.
yy
247
=
yymsp
[
0
].
minor
.
yy247
;
}
break
;
break
;
case
74
:
/* cache ::= CACHE INTEGER */
case
74
:
/* cache ::= CACHE INTEGER */
case
75
:
/* replica ::= REPLICA INTEGER */
yytestcase
(
yyruleno
==
75
);
case
75
:
/* replica ::= REPLICA INTEGER */
yytestcase
(
yyruleno
==
75
);
...
@@ -2326,208 +2330,208 @@ static void yy_reduce(
...
@@ -2326,208 +2330,208 @@ static void yy_reduce(
{
yymsp
[
-
1
].
minor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;
}
{
yymsp
[
-
1
].
minor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;
}
break
;
break
;
case
88
:
/* db_optr ::= */
case
88
:
/* db_optr ::= */
{
setDefaultCreateDbOption
(
&
yymsp
[
1
].
minor
.
yy2
56
);}
{
setDefaultCreateDbOption
(
&
yymsp
[
1
].
minor
.
yy2
62
);}
break
;
break
;
case
89
:
/* db_optr ::= db_optr cache */
case
89
:
/* db_optr ::= db_optr cache */
{
yylhsminor
.
yy2
56
=
yymsp
[
-
1
].
minor
.
yy256
;
yylhsminor
.
yy256
.
cacheBlockSize
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
{
yylhsminor
.
yy2
62
=
yymsp
[
-
1
].
minor
.
yy262
;
yylhsminor
.
yy262
.
cacheBlockSize
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
-
1
].
minor
.
yy2
56
=
yylhsminor
.
yy256
;
yymsp
[
-
1
].
minor
.
yy2
62
=
yylhsminor
.
yy262
;
break
;
break
;
case
90
:
/* db_optr ::= db_optr replica */
case
90
:
/* db_optr ::= db_optr replica */
case
105
:
/* alter_db_optr ::= alter_db_optr replica */
yytestcase
(
yyruleno
==
105
);
case
105
:
/* alter_db_optr ::= alter_db_optr replica */
yytestcase
(
yyruleno
==
105
);
{
yylhsminor
.
yy2
56
=
yymsp
[
-
1
].
minor
.
yy256
;
yylhsminor
.
yy256
.
replica
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
{
yylhsminor
.
yy2
62
=
yymsp
[
-
1
].
minor
.
yy262
;
yylhsminor
.
yy262
.
replica
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
-
1
].
minor
.
yy2
56
=
yylhsminor
.
yy256
;
yymsp
[
-
1
].
minor
.
yy2
62
=
yylhsminor
.
yy262
;
break
;
break
;
case
91
:
/* db_optr ::= db_optr quorum */
case
91
:
/* db_optr ::= db_optr quorum */
case
106
:
/* alter_db_optr ::= alter_db_optr quorum */
yytestcase
(
yyruleno
==
106
);
case
106
:
/* alter_db_optr ::= alter_db_optr quorum */
yytestcase
(
yyruleno
==
106
);
{
yylhsminor
.
yy2
56
=
yymsp
[
-
1
].
minor
.
yy256
;
yylhsminor
.
yy256
.
quorum
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
{
yylhsminor
.
yy2
62
=
yymsp
[
-
1
].
minor
.
yy262
;
yylhsminor
.
yy262
.
quorum
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
-
1
].
minor
.
yy2
56
=
yylhsminor
.
yy256
;
yymsp
[
-
1
].
minor
.
yy2
62
=
yylhsminor
.
yy262
;
break
;
break
;
case
92
:
/* db_optr ::= db_optr days */
case
92
:
/* db_optr ::= db_optr days */
{
yylhsminor
.
yy2
56
=
yymsp
[
-
1
].
minor
.
yy256
;
yylhsminor
.
yy256
.
daysPerFile
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
{
yylhsminor
.
yy2
62
=
yymsp
[
-
1
].
minor
.
yy262
;
yylhsminor
.
yy262
.
daysPerFile
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
-
1
].
minor
.
yy2
56
=
yylhsminor
.
yy256
;
yymsp
[
-
1
].
minor
.
yy2
62
=
yylhsminor
.
yy262
;
break
;
break
;
case
93
:
/* db_optr ::= db_optr minrows */
case
93
:
/* db_optr ::= db_optr minrows */
{
yylhsminor
.
yy2
56
=
yymsp
[
-
1
].
minor
.
yy256
;
yylhsminor
.
yy256
.
minRowsPerBlock
=
strtod
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
);
}
{
yylhsminor
.
yy2
62
=
yymsp
[
-
1
].
minor
.
yy262
;
yylhsminor
.
yy262
.
minRowsPerBlock
=
strtod
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
);
}
yymsp
[
-
1
].
minor
.
yy2
56
=
yylhsminor
.
yy256
;
yymsp
[
-
1
].
minor
.
yy2
62
=
yylhsminor
.
yy262
;
break
;
break
;
case
94
:
/* db_optr ::= db_optr maxrows */
case
94
:
/* db_optr ::= db_optr maxrows */
{
yylhsminor
.
yy2
56
=
yymsp
[
-
1
].
minor
.
yy256
;
yylhsminor
.
yy256
.
maxRowsPerBlock
=
strtod
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
);
}
{
yylhsminor
.
yy2
62
=
yymsp
[
-
1
].
minor
.
yy262
;
yylhsminor
.
yy262
.
maxRowsPerBlock
=
strtod
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
);
}
yymsp
[
-
1
].
minor
.
yy2
56
=
yylhsminor
.
yy256
;
yymsp
[
-
1
].
minor
.
yy2
62
=
yylhsminor
.
yy262
;
break
;
break
;
case
95
:
/* db_optr ::= db_optr blocks */
case
95
:
/* db_optr ::= db_optr blocks */
case
108
:
/* alter_db_optr ::= alter_db_optr blocks */
yytestcase
(
yyruleno
==
108
);
case
108
:
/* alter_db_optr ::= alter_db_optr blocks */
yytestcase
(
yyruleno
==
108
);
{
yylhsminor
.
yy2
56
=
yymsp
[
-
1
].
minor
.
yy256
;
yylhsminor
.
yy256
.
numOfBlocks
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
{
yylhsminor
.
yy2
62
=
yymsp
[
-
1
].
minor
.
yy262
;
yylhsminor
.
yy262
.
numOfBlocks
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
-
1
].
minor
.
yy2
56
=
yylhsminor
.
yy256
;
yymsp
[
-
1
].
minor
.
yy2
62
=
yylhsminor
.
yy262
;
break
;
break
;
case
96
:
/* db_optr ::= db_optr ctime */
case
96
:
/* db_optr ::= db_optr ctime */
{
yylhsminor
.
yy2
56
=
yymsp
[
-
1
].
minor
.
yy256
;
yylhsminor
.
yy256
.
commitTime
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
{
yylhsminor
.
yy2
62
=
yymsp
[
-
1
].
minor
.
yy262
;
yylhsminor
.
yy262
.
commitTime
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
-
1
].
minor
.
yy2
56
=
yylhsminor
.
yy256
;
yymsp
[
-
1
].
minor
.
yy2
62
=
yylhsminor
.
yy262
;
break
;
break
;
case
97
:
/* db_optr ::= db_optr wal */
case
97
:
/* db_optr ::= db_optr wal */
case
110
:
/* alter_db_optr ::= alter_db_optr wal */
yytestcase
(
yyruleno
==
110
);
case
110
:
/* alter_db_optr ::= alter_db_optr wal */
yytestcase
(
yyruleno
==
110
);
{
yylhsminor
.
yy2
56
=
yymsp
[
-
1
].
minor
.
yy256
;
yylhsminor
.
yy256
.
walLevel
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
{
yylhsminor
.
yy2
62
=
yymsp
[
-
1
].
minor
.
yy262
;
yylhsminor
.
yy262
.
walLevel
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
-
1
].
minor
.
yy2
56
=
yylhsminor
.
yy256
;
yymsp
[
-
1
].
minor
.
yy2
62
=
yylhsminor
.
yy262
;
break
;
break
;
case
98
:
/* db_optr ::= db_optr fsync */
case
98
:
/* db_optr ::= db_optr fsync */
case
111
:
/* alter_db_optr ::= alter_db_optr fsync */
yytestcase
(
yyruleno
==
111
);
case
111
:
/* alter_db_optr ::= alter_db_optr fsync */
yytestcase
(
yyruleno
==
111
);
{
yylhsminor
.
yy2
56
=
yymsp
[
-
1
].
minor
.
yy256
;
yylhsminor
.
yy256
.
fsyncPeriod
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
{
yylhsminor
.
yy2
62
=
yymsp
[
-
1
].
minor
.
yy262
;
yylhsminor
.
yy262
.
fsyncPeriod
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
-
1
].
minor
.
yy2
56
=
yylhsminor
.
yy256
;
yymsp
[
-
1
].
minor
.
yy2
62
=
yylhsminor
.
yy262
;
break
;
break
;
case
99
:
/* db_optr ::= db_optr comp */
case
99
:
/* db_optr ::= db_optr comp */
case
109
:
/* alter_db_optr ::= alter_db_optr comp */
yytestcase
(
yyruleno
==
109
);
case
109
:
/* alter_db_optr ::= alter_db_optr comp */
yytestcase
(
yyruleno
==
109
);
{
yylhsminor
.
yy2
56
=
yymsp
[
-
1
].
minor
.
yy256
;
yylhsminor
.
yy256
.
compressionLevel
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
{
yylhsminor
.
yy2
62
=
yymsp
[
-
1
].
minor
.
yy262
;
yylhsminor
.
yy262
.
compressionLevel
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
-
1
].
minor
.
yy2
56
=
yylhsminor
.
yy256
;
yymsp
[
-
1
].
minor
.
yy2
62
=
yylhsminor
.
yy262
;
break
;
break
;
case
100
:
/* db_optr ::= db_optr prec */
case
100
:
/* db_optr ::= db_optr prec */
{
yylhsminor
.
yy2
56
=
yymsp
[
-
1
].
minor
.
yy256
;
yylhsminor
.
yy256
.
precision
=
yymsp
[
0
].
minor
.
yy0
;
}
{
yylhsminor
.
yy2
62
=
yymsp
[
-
1
].
minor
.
yy262
;
yylhsminor
.
yy262
.
precision
=
yymsp
[
0
].
minor
.
yy0
;
}
yymsp
[
-
1
].
minor
.
yy2
56
=
yylhsminor
.
yy256
;
yymsp
[
-
1
].
minor
.
yy2
62
=
yylhsminor
.
yy262
;
break
;
break
;
case
101
:
/* db_optr ::= db_optr keep */
case
101
:
/* db_optr ::= db_optr keep */
case
107
:
/* alter_db_optr ::= alter_db_optr keep */
yytestcase
(
yyruleno
==
107
);
case
107
:
/* alter_db_optr ::= alter_db_optr keep */
yytestcase
(
yyruleno
==
107
);
{
yylhsminor
.
yy2
56
=
yymsp
[
-
1
].
minor
.
yy256
;
yylhsminor
.
yy256
.
keep
=
yymsp
[
0
].
minor
.
yy135
;
}
{
yylhsminor
.
yy2
62
=
yymsp
[
-
1
].
minor
.
yy262
;
yylhsminor
.
yy262
.
keep
=
yymsp
[
0
].
minor
.
yy247
;
}
yymsp
[
-
1
].
minor
.
yy2
56
=
yylhsminor
.
yy256
;
yymsp
[
-
1
].
minor
.
yy2
62
=
yylhsminor
.
yy262
;
break
;
break
;
case
102
:
/* db_optr ::= db_optr update */
case
102
:
/* db_optr ::= db_optr update */
case
112
:
/* alter_db_optr ::= alter_db_optr update */
yytestcase
(
yyruleno
==
112
);
case
112
:
/* alter_db_optr ::= alter_db_optr update */
yytestcase
(
yyruleno
==
112
);
{
yylhsminor
.
yy2
56
=
yymsp
[
-
1
].
minor
.
yy256
;
yylhsminor
.
yy256
.
update
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
{
yylhsminor
.
yy2
62
=
yymsp
[
-
1
].
minor
.
yy262
;
yylhsminor
.
yy262
.
update
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
-
1
].
minor
.
yy2
56
=
yylhsminor
.
yy256
;
yymsp
[
-
1
].
minor
.
yy2
62
=
yylhsminor
.
yy262
;
break
;
break
;
case
103
:
/* db_optr ::= db_optr cachelast */
case
103
:
/* db_optr ::= db_optr cachelast */
case
113
:
/* alter_db_optr ::= alter_db_optr cachelast */
yytestcase
(
yyruleno
==
113
);
case
113
:
/* alter_db_optr ::= alter_db_optr cachelast */
yytestcase
(
yyruleno
==
113
);
{
yylhsminor
.
yy2
56
=
yymsp
[
-
1
].
minor
.
yy256
;
yylhsminor
.
yy256
.
cachelast
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
{
yylhsminor
.
yy2
62
=
yymsp
[
-
1
].
minor
.
yy262
;
yylhsminor
.
yy262
.
cachelast
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
-
1
].
minor
.
yy2
56
=
yylhsminor
.
yy256
;
yymsp
[
-
1
].
minor
.
yy2
62
=
yylhsminor
.
yy262
;
break
;
break
;
case
104
:
/* alter_db_optr ::= */
case
104
:
/* alter_db_optr ::= */
{
setDefaultCreateDbOption
(
&
yymsp
[
1
].
minor
.
yy2
56
);}
{
setDefaultCreateDbOption
(
&
yymsp
[
1
].
minor
.
yy2
62
);}
break
;
break
;
case
114
:
/* typename ::= ids */
case
114
:
/* typename ::= ids */
{
{
yymsp
[
0
].
minor
.
yy0
.
type
=
0
;
yymsp
[
0
].
minor
.
yy0
.
type
=
0
;
tSqlSetColumnType
(
&
yylhsminor
.
yy1
81
,
&
yymsp
[
0
].
minor
.
yy0
);
tSqlSetColumnType
(
&
yylhsminor
.
yy1
79
,
&
yymsp
[
0
].
minor
.
yy0
);
}
}
yymsp
[
0
].
minor
.
yy1
81
=
yylhsminor
.
yy181
;
yymsp
[
0
].
minor
.
yy1
79
=
yylhsminor
.
yy179
;
break
;
break
;
case
115
:
/* typename ::= ids LP signed RP */
case
115
:
/* typename ::= ids LP signed RP */
{
{
if
(
yymsp
[
-
1
].
minor
.
yy
531
<=
0
)
{
if
(
yymsp
[
-
1
].
minor
.
yy
403
<=
0
)
{
yymsp
[
-
3
].
minor
.
yy0
.
type
=
0
;
yymsp
[
-
3
].
minor
.
yy0
.
type
=
0
;
tSqlSetColumnType
(
&
yylhsminor
.
yy1
81
,
&
yymsp
[
-
3
].
minor
.
yy0
);
tSqlSetColumnType
(
&
yylhsminor
.
yy1
79
,
&
yymsp
[
-
3
].
minor
.
yy0
);
}
else
{
}
else
{
yymsp
[
-
3
].
minor
.
yy0
.
type
=
-
yymsp
[
-
1
].
minor
.
yy
531
;
// negative value of name length
yymsp
[
-
3
].
minor
.
yy0
.
type
=
-
yymsp
[
-
1
].
minor
.
yy
403
;
// negative value of name length
tSqlSetColumnType
(
&
yylhsminor
.
yy1
81
,
&
yymsp
[
-
3
].
minor
.
yy0
);
tSqlSetColumnType
(
&
yylhsminor
.
yy1
79
,
&
yymsp
[
-
3
].
minor
.
yy0
);
}
}
}
}
yymsp
[
-
3
].
minor
.
yy1
81
=
yylhsminor
.
yy181
;
yymsp
[
-
3
].
minor
.
yy1
79
=
yylhsminor
.
yy179
;
break
;
break
;
case
116
:
/* typename ::= ids UNSIGNED */
case
116
:
/* typename ::= ids UNSIGNED */
{
{
yymsp
[
-
1
].
minor
.
yy0
.
type
=
0
;
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
);
yymsp
[
-
1
].
minor
.
yy0
.
n
=
((
yymsp
[
0
].
minor
.
yy0
.
z
+
yymsp
[
0
].
minor
.
yy0
.
n
)
-
yymsp
[
-
1
].
minor
.
yy0
.
z
);
tSqlSetColumnType
(
&
yylhsminor
.
yy1
81
,
&
yymsp
[
-
1
].
minor
.
yy0
);
tSqlSetColumnType
(
&
yylhsminor
.
yy1
79
,
&
yymsp
[
-
1
].
minor
.
yy0
);
}
}
yymsp
[
-
1
].
minor
.
yy1
81
=
yylhsminor
.
yy181
;
yymsp
[
-
1
].
minor
.
yy1
79
=
yylhsminor
.
yy179
;
break
;
break
;
case
117
:
/* signed ::= INTEGER */
case
117
:
/* signed ::= INTEGER */
{
yylhsminor
.
yy
531
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
{
yylhsminor
.
yy
403
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
yymsp
[
0
].
minor
.
yy
531
=
yylhsminor
.
yy531
;
yymsp
[
0
].
minor
.
yy
403
=
yylhsminor
.
yy403
;
break
;
break
;
case
118
:
/* signed ::= PLUS INTEGER */
case
118
:
/* signed ::= PLUS INTEGER */
{
yymsp
[
-
1
].
minor
.
yy
531
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
{
yymsp
[
-
1
].
minor
.
yy
403
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
break
;
break
;
case
119
:
/* signed ::= MINUS INTEGER */
case
119
:
/* signed ::= MINUS INTEGER */
{
yymsp
[
-
1
].
minor
.
yy
531
=
-
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);}
{
yymsp
[
-
1
].
minor
.
yy
403
=
-
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);}
break
;
break
;
case
123
:
/* cmd ::= CREATE TABLE create_table_list */
case
123
:
/* cmd ::= CREATE TABLE create_table_list */
{
pInfo
->
type
=
TSDB_SQL_CREATE_TABLE
;
pInfo
->
pCreateTableInfo
=
yymsp
[
0
].
minor
.
yy38
;}
{
pInfo
->
type
=
TSDB_SQL_CREATE_TABLE
;
pInfo
->
pCreateTableInfo
=
yymsp
[
0
].
minor
.
yy3
5
8
;}
break
;
break
;
case
124
:
/* create_table_list ::= create_from_stable */
case
124
:
/* create_table_list ::= create_from_stable */
{
{
SCreateTableSQL
*
pCreateTable
=
calloc
(
1
,
sizeof
(
SCreateTableSQL
));
SCreateTableSQL
*
pCreateTable
=
calloc
(
1
,
sizeof
(
SCreateTableSQL
));
pCreateTable
->
childTableInfo
=
taosArrayInit
(
4
,
sizeof
(
SCreatedTableInfo
));
pCreateTable
->
childTableInfo
=
taosArrayInit
(
4
,
sizeof
(
SCreatedTableInfo
));
taosArrayPush
(
pCreateTable
->
childTableInfo
,
&
yymsp
[
0
].
minor
.
yy
78
);
taosArrayPush
(
pCreateTable
->
childTableInfo
,
&
yymsp
[
0
].
minor
.
yy
42
);
pCreateTable
->
type
=
TSQL_CREATE_TABLE_FROM_STABLE
;
pCreateTable
->
type
=
TSQL_CREATE_TABLE_FROM_STABLE
;
yylhsminor
.
yy38
=
pCreateTable
;
yylhsminor
.
yy3
5
8
=
pCreateTable
;
}
}
yymsp
[
0
].
minor
.
yy3
8
=
yylhsminor
.
yy3
8
;
yymsp
[
0
].
minor
.
yy3
58
=
yylhsminor
.
yy35
8
;
break
;
break
;
case
125
:
/* create_table_list ::= create_table_list create_from_stable */
case
125
:
/* create_table_list ::= create_table_list create_from_stable */
{
{
taosArrayPush
(
yymsp
[
-
1
].
minor
.
yy3
8
->
childTableInfo
,
&
yymsp
[
0
].
minor
.
yy78
);
taosArrayPush
(
yymsp
[
-
1
].
minor
.
yy3
58
->
childTableInfo
,
&
yymsp
[
0
].
minor
.
yy42
);
yylhsminor
.
yy3
8
=
yymsp
[
-
1
].
minor
.
yy3
8
;
yylhsminor
.
yy3
58
=
yymsp
[
-
1
].
minor
.
yy35
8
;
}
}
yymsp
[
-
1
].
minor
.
yy3
8
=
yylhsminor
.
yy3
8
;
yymsp
[
-
1
].
minor
.
yy3
58
=
yylhsminor
.
yy35
8
;
break
;
break
;
case
126
:
/* create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
case
126
:
/* create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
{
{
yylhsminor
.
yy3
8
=
tSetCreateSqlElems
(
yymsp
[
-
1
].
minor
.
yy135
,
NULL
,
NULL
,
TSQL_CREATE_TABLE
);
yylhsminor
.
yy3
58
=
tSetCreateSqlElems
(
yymsp
[
-
1
].
minor
.
yy247
,
NULL
,
NULL
,
TSQL_CREATE_TABLE
);
setSqlInfo
(
pInfo
,
yylhsminor
.
yy38
,
NULL
,
TSDB_SQL_CREATE_TABLE
);
setSqlInfo
(
pInfo
,
yylhsminor
.
yy3
5
8
,
NULL
,
TSDB_SQL_CREATE_TABLE
);
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
setCreatedTableName
(
pInfo
,
&
yymsp
[
-
4
].
minor
.
yy0
,
&
yymsp
[
-
5
].
minor
.
yy0
);
setCreatedTableName
(
pInfo
,
&
yymsp
[
-
4
].
minor
.
yy0
,
&
yymsp
[
-
5
].
minor
.
yy0
);
}
}
yymsp
[
-
5
].
minor
.
yy3
8
=
yylhsminor
.
yy3
8
;
yymsp
[
-
5
].
minor
.
yy3
58
=
yylhsminor
.
yy35
8
;
break
;
break
;
case
127
:
/* create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
case
127
:
/* create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
{
{
yylhsminor
.
yy3
8
=
tSetCreateSqlElems
(
yymsp
[
-
5
].
minor
.
yy135
,
yymsp
[
-
1
].
minor
.
yy135
,
NULL
,
TSQL_CREATE_STABLE
);
yylhsminor
.
yy3
58
=
tSetCreateSqlElems
(
yymsp
[
-
5
].
minor
.
yy247
,
yymsp
[
-
1
].
minor
.
yy247
,
NULL
,
TSQL_CREATE_STABLE
);
setSqlInfo
(
pInfo
,
yylhsminor
.
yy38
,
NULL
,
TSDB_SQL_CREATE_TABLE
);
setSqlInfo
(
pInfo
,
yylhsminor
.
yy3
5
8
,
NULL
,
TSDB_SQL_CREATE_TABLE
);
yymsp
[
-
8
].
minor
.
yy0
.
n
+=
yymsp
[
-
7
].
minor
.
yy0
.
n
;
yymsp
[
-
8
].
minor
.
yy0
.
n
+=
yymsp
[
-
7
].
minor
.
yy0
.
n
;
setCreatedTableName
(
pInfo
,
&
yymsp
[
-
8
].
minor
.
yy0
,
&
yymsp
[
-
9
].
minor
.
yy0
);
setCreatedTableName
(
pInfo
,
&
yymsp
[
-
8
].
minor
.
yy0
,
&
yymsp
[
-
9
].
minor
.
yy0
);
}
}
yymsp
[
-
9
].
minor
.
yy3
8
=
yylhsminor
.
yy3
8
;
yymsp
[
-
9
].
minor
.
yy3
58
=
yylhsminor
.
yy35
8
;
break
;
break
;
case
128
:
/* create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */
case
128
:
/* create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */
{
{
yymsp
[
-
5
].
minor
.
yy0
.
n
+=
yymsp
[
-
4
].
minor
.
yy0
.
n
;
yymsp
[
-
5
].
minor
.
yy0
.
n
+=
yymsp
[
-
4
].
minor
.
yy0
.
n
;
yymsp
[
-
8
].
minor
.
yy0
.
n
+=
yymsp
[
-
7
].
minor
.
yy0
.
n
;
yymsp
[
-
8
].
minor
.
yy0
.
n
+=
yymsp
[
-
7
].
minor
.
yy0
.
n
;
yylhsminor
.
yy
78
=
createNewChildTableInfo
(
&
yymsp
[
-
5
].
minor
.
yy0
,
yymsp
[
-
1
].
minor
.
yy135
,
&
yymsp
[
-
8
].
minor
.
yy0
,
&
yymsp
[
-
9
].
minor
.
yy0
);
yylhsminor
.
yy
42
=
createNewChildTableInfo
(
&
yymsp
[
-
5
].
minor
.
yy0
,
yymsp
[
-
1
].
minor
.
yy247
,
&
yymsp
[
-
8
].
minor
.
yy0
,
&
yymsp
[
-
9
].
minor
.
yy0
);
}
}
yymsp
[
-
9
].
minor
.
yy
78
=
yylhsminor
.
yy78
;
yymsp
[
-
9
].
minor
.
yy
42
=
yylhsminor
.
yy42
;
break
;
break
;
case
129
:
/* create_table_args ::= ifnotexists ids cpxName AS select */
case
129
:
/* create_table_args ::= ifnotexists ids cpxName AS select */
{
{
yylhsminor
.
yy3
8
=
tSetCreateSqlElems
(
NULL
,
NULL
,
yymsp
[
0
].
minor
.
yy30
,
TSQL_CREATE_STREAM
);
yylhsminor
.
yy3
58
=
tSetCreateSqlElems
(
NULL
,
NULL
,
yymsp
[
0
].
minor
.
yy114
,
TSQL_CREATE_STREAM
);
setSqlInfo
(
pInfo
,
yylhsminor
.
yy38
,
NULL
,
TSDB_SQL_CREATE_TABLE
);
setSqlInfo
(
pInfo
,
yylhsminor
.
yy3
5
8
,
NULL
,
TSDB_SQL_CREATE_TABLE
);
yymsp
[
-
3
].
minor
.
yy0
.
n
+=
yymsp
[
-
2
].
minor
.
yy0
.
n
;
yymsp
[
-
3
].
minor
.
yy0
.
n
+=
yymsp
[
-
2
].
minor
.
yy0
.
n
;
setCreatedTableName
(
pInfo
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
-
4
].
minor
.
yy0
);
setCreatedTableName
(
pInfo
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
-
4
].
minor
.
yy0
);
}
}
yymsp
[
-
4
].
minor
.
yy3
8
=
yylhsminor
.
yy3
8
;
yymsp
[
-
4
].
minor
.
yy3
58
=
yylhsminor
.
yy35
8
;
break
;
break
;
case
130
:
/* columnlist ::= columnlist COMMA column */
case
130
:
/* columnlist ::= columnlist COMMA column */
{
taosArrayPush
(
yymsp
[
-
2
].
minor
.
yy
135
,
&
yymsp
[
0
].
minor
.
yy181
);
yylhsminor
.
yy135
=
yymsp
[
-
2
].
minor
.
yy135
;
}
{
taosArrayPush
(
yymsp
[
-
2
].
minor
.
yy
247
,
&
yymsp
[
0
].
minor
.
yy179
);
yylhsminor
.
yy247
=
yymsp
[
-
2
].
minor
.
yy247
;
}
yymsp
[
-
2
].
minor
.
yy
135
=
yylhsminor
.
yy135
;
yymsp
[
-
2
].
minor
.
yy
247
=
yylhsminor
.
yy247
;
break
;
break
;
case
131
:
/* columnlist ::= column */
case
131
:
/* columnlist ::= column */
{
yylhsminor
.
yy
135
=
taosArrayInit
(
4
,
sizeof
(
TAOS_FIELD
));
taosArrayPush
(
yylhsminor
.
yy135
,
&
yymsp
[
0
].
minor
.
yy181
);}
{
yylhsminor
.
yy
247
=
taosArrayInit
(
4
,
sizeof
(
TAOS_FIELD
));
taosArrayPush
(
yylhsminor
.
yy247
,
&
yymsp
[
0
].
minor
.
yy179
);}
yymsp
[
0
].
minor
.
yy
135
=
yylhsminor
.
yy135
;
yymsp
[
0
].
minor
.
yy
247
=
yylhsminor
.
yy247
;
break
;
break
;
case
132
:
/* column ::= ids typename */
case
132
:
/* column ::= ids typename */
{
{
tSqlSetColumnInfo
(
&
yylhsminor
.
yy1
81
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy181
);
tSqlSetColumnInfo
(
&
yylhsminor
.
yy1
79
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy179
);
}
}
yymsp
[
-
1
].
minor
.
yy1
81
=
yylhsminor
.
yy181
;
yymsp
[
-
1
].
minor
.
yy1
79
=
yylhsminor
.
yy179
;
break
;
break
;
case
133
:
/* tagitemlist ::= tagitemlist COMMA tagitem */
case
133
:
/* tagitemlist ::= tagitemlist COMMA tagitem */
{
yylhsminor
.
yy
135
=
tVariantListAppend
(
yymsp
[
-
2
].
minor
.
yy135
,
&
yymsp
[
0
].
minor
.
yy30
8
,
-
1
);
}
{
yylhsminor
.
yy
247
=
tVariantListAppend
(
yymsp
[
-
2
].
minor
.
yy247
,
&
yymsp
[
0
].
minor
.
yy37
8
,
-
1
);
}
yymsp
[
-
2
].
minor
.
yy
135
=
yylhsminor
.
yy135
;
yymsp
[
-
2
].
minor
.
yy
247
=
yylhsminor
.
yy247
;
break
;
break
;
case
134
:
/* tagitemlist ::= tagitem */
case
134
:
/* tagitemlist ::= tagitem */
{
yylhsminor
.
yy
135
=
tVariantListAppend
(
NULL
,
&
yymsp
[
0
].
minor
.
yy30
8
,
-
1
);
}
{
yylhsminor
.
yy
247
=
tVariantListAppend
(
NULL
,
&
yymsp
[
0
].
minor
.
yy37
8
,
-
1
);
}
yymsp
[
0
].
minor
.
yy
135
=
yylhsminor
.
yy135
;
yymsp
[
0
].
minor
.
yy
247
=
yylhsminor
.
yy247
;
break
;
break
;
case
135
:
/* tagitem ::= INTEGER */
case
135
:
/* tagitem ::= INTEGER */
case
136
:
/* tagitem ::= FLOAT */
yytestcase
(
yyruleno
==
136
);
case
136
:
/* tagitem ::= FLOAT */
yytestcase
(
yyruleno
==
136
);
case
137
:
/* tagitem ::= STRING */
yytestcase
(
yyruleno
==
137
);
case
137
:
/* tagitem ::= STRING */
yytestcase
(
yyruleno
==
137
);
case
138
:
/* tagitem ::= BOOL */
yytestcase
(
yyruleno
==
138
);
case
138
:
/* tagitem ::= BOOL */
yytestcase
(
yyruleno
==
138
);
{
toTSDBType
(
yymsp
[
0
].
minor
.
yy0
.
type
);
tVariantCreate
(
&
yylhsminor
.
yy3
0
8
,
&
yymsp
[
0
].
minor
.
yy0
);
}
{
toTSDBType
(
yymsp
[
0
].
minor
.
yy0
.
type
);
tVariantCreate
(
&
yylhsminor
.
yy3
7
8
,
&
yymsp
[
0
].
minor
.
yy0
);
}
yymsp
[
0
].
minor
.
yy3
08
=
yylhsminor
.
yy30
8
;
yymsp
[
0
].
minor
.
yy3
78
=
yylhsminor
.
yy37
8
;
break
;
break
;
case
139
:
/* tagitem ::= NULL */
case
139
:
/* tagitem ::= NULL */
{
yymsp
[
0
].
minor
.
yy0
.
type
=
0
;
tVariantCreate
(
&
yylhsminor
.
yy3
0
8
,
&
yymsp
[
0
].
minor
.
yy0
);
}
{
yymsp
[
0
].
minor
.
yy0
.
type
=
0
;
tVariantCreate
(
&
yylhsminor
.
yy3
7
8
,
&
yymsp
[
0
].
minor
.
yy0
);
}
yymsp
[
0
].
minor
.
yy3
08
=
yylhsminor
.
yy30
8
;
yymsp
[
0
].
minor
.
yy3
78
=
yylhsminor
.
yy37
8
;
break
;
break
;
case
140
:
/* tagitem ::= MINUS INTEGER */
case
140
:
/* tagitem ::= MINUS INTEGER */
case
141
:
/* tagitem ::= MINUS FLOAT */
yytestcase
(
yyruleno
==
141
);
case
141
:
/* tagitem ::= MINUS FLOAT */
yytestcase
(
yyruleno
==
141
);
...
@@ -2537,59 +2541,59 @@ static void yy_reduce(
...
@@ -2537,59 +2541,59 @@ static void yy_reduce(
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yymsp
[
-
1
].
minor
.
yy0
.
type
=
yymsp
[
0
].
minor
.
yy0
.
type
;
yymsp
[
-
1
].
minor
.
yy0
.
type
=
yymsp
[
0
].
minor
.
yy0
.
type
;
toTSDBType
(
yymsp
[
-
1
].
minor
.
yy0
.
type
);
toTSDBType
(
yymsp
[
-
1
].
minor
.
yy0
.
type
);
tVariantCreate
(
&
yylhsminor
.
yy3
0
8
,
&
yymsp
[
-
1
].
minor
.
yy0
);
tVariantCreate
(
&
yylhsminor
.
yy3
7
8
,
&
yymsp
[
-
1
].
minor
.
yy0
);
}
}
yymsp
[
-
1
].
minor
.
yy3
08
=
yylhsminor
.
yy30
8
;
yymsp
[
-
1
].
minor
.
yy3
78
=
yylhsminor
.
yy37
8
;
break
;
break
;
case
144
:
/* select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
case
144
:
/* select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
{
{
yylhsminor
.
yy
30
=
tSetQuerySqlElems
(
&
yymsp
[
-
11
].
minor
.
yy0
,
yymsp
[
-
10
].
minor
.
yy266
,
yymsp
[
-
9
].
minor
.
yy135
,
yymsp
[
-
8
].
minor
.
yy316
,
yymsp
[
-
4
].
minor
.
yy135
,
yymsp
[
-
3
].
minor
.
yy135
,
&
yymsp
[
-
7
].
minor
.
yy160
,
&
yymsp
[
-
5
].
minor
.
yy0
,
yymsp
[
-
6
].
minor
.
yy135
,
&
yymsp
[
0
].
minor
.
yy126
,
&
yymsp
[
-
1
].
minor
.
yy126
);
yylhsminor
.
yy
114
=
tSetQuerySqlElems
(
&
yymsp
[
-
11
].
minor
.
yy0
,
yymsp
[
-
10
].
minor
.
yy522
,
yymsp
[
-
9
].
minor
.
yy247
,
yymsp
[
-
8
].
minor
.
yy326
,
yymsp
[
-
4
].
minor
.
yy247
,
yymsp
[
-
3
].
minor
.
yy247
,
&
yymsp
[
-
7
].
minor
.
yy430
,
&
yymsp
[
-
5
].
minor
.
yy0
,
yymsp
[
-
6
].
minor
.
yy247
,
&
yymsp
[
0
].
minor
.
yy204
,
&
yymsp
[
-
1
].
minor
.
yy204
);
}
}
yymsp
[
-
11
].
minor
.
yy
30
=
yylhsminor
.
yy30
;
yymsp
[
-
11
].
minor
.
yy
114
=
yylhsminor
.
yy114
;
break
;
break
;
case
145
:
/* union ::= select */
case
145
:
/* union ::= select */
{
yylhsminor
.
yy
153
=
setSubclause
(
NULL
,
yymsp
[
0
].
minor
.
yy30
);
}
{
yylhsminor
.
yy
219
=
setSubclause
(
NULL
,
yymsp
[
0
].
minor
.
yy114
);
}
yymsp
[
0
].
minor
.
yy
153
=
yylhsminor
.
yy153
;
yymsp
[
0
].
minor
.
yy
219
=
yylhsminor
.
yy219
;
break
;
break
;
case
146
:
/* union ::= LP union RP */
case
146
:
/* union ::= LP union RP */
{
yymsp
[
-
2
].
minor
.
yy
153
=
yymsp
[
-
1
].
minor
.
yy153
;
}
{
yymsp
[
-
2
].
minor
.
yy
219
=
yymsp
[
-
1
].
minor
.
yy219
;
}
break
;
break
;
case
147
:
/* union ::= union UNION ALL select */
case
147
:
/* union ::= union UNION ALL select */
{
yylhsminor
.
yy
153
=
appendSelectClause
(
yymsp
[
-
3
].
minor
.
yy153
,
yymsp
[
0
].
minor
.
yy30
);
}
{
yylhsminor
.
yy
219
=
appendSelectClause
(
yymsp
[
-
3
].
minor
.
yy219
,
yymsp
[
0
].
minor
.
yy114
);
}
yymsp
[
-
3
].
minor
.
yy
153
=
yylhsminor
.
yy153
;
yymsp
[
-
3
].
minor
.
yy
219
=
yylhsminor
.
yy219
;
break
;
break
;
case
148
:
/* union ::= union UNION ALL LP select RP */
case
148
:
/* union ::= union UNION ALL LP select RP */
{
yylhsminor
.
yy
153
=
appendSelectClause
(
yymsp
[
-
5
].
minor
.
yy153
,
yymsp
[
-
1
].
minor
.
yy30
);
}
{
yylhsminor
.
yy
219
=
appendSelectClause
(
yymsp
[
-
5
].
minor
.
yy219
,
yymsp
[
-
1
].
minor
.
yy114
);
}
yymsp
[
-
5
].
minor
.
yy
153
=
yylhsminor
.
yy153
;
yymsp
[
-
5
].
minor
.
yy
219
=
yylhsminor
.
yy219
;
break
;
break
;
case
149
:
/* cmd ::= union */
case
149
:
/* cmd ::= union */
{
setSqlInfo
(
pInfo
,
yymsp
[
0
].
minor
.
yy
153
,
NULL
,
TSDB_SQL_SELECT
);
}
{
setSqlInfo
(
pInfo
,
yymsp
[
0
].
minor
.
yy
219
,
NULL
,
TSDB_SQL_SELECT
);
}
break
;
break
;
case
150
:
/* select ::= SELECT selcollist */
case
150
:
/* select ::= SELECT selcollist */
{
{
yylhsminor
.
yy
30
=
tSetQuerySqlElems
(
&
yymsp
[
-
1
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy266
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
);
yylhsminor
.
yy
114
=
tSetQuerySqlElems
(
&
yymsp
[
-
1
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy522
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
);
}
}
yymsp
[
-
1
].
minor
.
yy
30
=
yylhsminor
.
yy30
;
yymsp
[
-
1
].
minor
.
yy
114
=
yylhsminor
.
yy114
;
break
;
break
;
case
151
:
/* sclp ::= selcollist COMMA */
case
151
:
/* sclp ::= selcollist COMMA */
{
yylhsminor
.
yy
266
=
yymsp
[
-
1
].
minor
.
yy266
;}
{
yylhsminor
.
yy
522
=
yymsp
[
-
1
].
minor
.
yy522
;}
yymsp
[
-
1
].
minor
.
yy
266
=
yylhsminor
.
yy266
;
yymsp
[
-
1
].
minor
.
yy
522
=
yylhsminor
.
yy522
;
break
;
break
;
case
152
:
/* sclp ::= */
case
152
:
/* sclp ::= */
{
yymsp
[
1
].
minor
.
yy
266
=
0
;}
{
yymsp
[
1
].
minor
.
yy
522
=
0
;}
break
;
break
;
case
153
:
/* selcollist ::= sclp expr as */
case
153
:
/* selcollist ::= sclp
distinct
expr as */
{
{
yylhsminor
.
yy
266
=
tSqlExprListAppend
(
yymsp
[
-
2
].
minor
.
yy266
,
yymsp
[
-
1
].
minor
.
yy316
,
yymsp
[
0
].
minor
.
yy0
.
n
?&
yymsp
[
0
].
minor
.
yy0
:
0
);
yylhsminor
.
yy
522
=
tSqlExprListAppend
(
yymsp
[
-
3
].
minor
.
yy522
,
yymsp
[
-
1
].
minor
.
yy326
,
yymsp
[
-
2
].
minor
.
yy0
.
n
?
&
yymsp
[
-
2
].
minor
.
yy0
:
0
,
yymsp
[
0
].
minor
.
yy0
.
n
?&
yymsp
[
0
].
minor
.
yy0
:
0
);
}
}
yymsp
[
-
2
].
minor
.
yy266
=
yylhsminor
.
yy266
;
yymsp
[
-
3
].
minor
.
yy522
=
yylhsminor
.
yy522
;
break
;
break
;
case
154
:
/* selcollist ::= sclp STAR */
case
154
:
/* selcollist ::= sclp STAR */
{
{
tSQLExpr
*
pNode
=
tSqlExprIdValueCreate
(
NULL
,
TK_ALL
);
tSQLExpr
*
pNode
=
tSqlExprIdValueCreate
(
NULL
,
TK_ALL
);
yylhsminor
.
yy
266
=
tSqlExprListAppend
(
yymsp
[
-
1
].
minor
.
yy266
,
pNode
,
0
);
yylhsminor
.
yy
522
=
tSqlExprListAppend
(
yymsp
[
-
1
].
minor
.
yy522
,
pNode
,
0
,
0
);
}
}
yymsp
[
-
1
].
minor
.
yy
266
=
yylhsminor
.
yy266
;
yymsp
[
-
1
].
minor
.
yy
522
=
yylhsminor
.
yy522
;
break
;
break
;
case
155
:
/* as ::= AS ids */
case
155
:
/* as ::= AS ids */
{
yymsp
[
-
1
].
minor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;
}
{
yymsp
[
-
1
].
minor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;
}
...
@@ -2601,317 +2605,321 @@ static void yy_reduce(
...
@@ -2601,317 +2605,321 @@ static void yy_reduce(
case
157
:
/* as ::= */
case
157
:
/* as ::= */
{
yymsp
[
1
].
minor
.
yy0
.
n
=
0
;
}
{
yymsp
[
1
].
minor
.
yy0
.
n
=
0
;
}
break
;
break
;
case
158
:
/* from ::= FROM tablelist */
case
158
:
/* distinct ::= DISTINCT */
{
yymsp
[
-
1
].
minor
.
yy135
=
yymsp
[
0
].
minor
.
yy135
;}
{
yylhsminor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;
}
yymsp
[
0
].
minor
.
yy0
=
yylhsminor
.
yy0
;
break
;
case
160
:
/* from ::= FROM tablelist */
{
yymsp
[
-
1
].
minor
.
yy247
=
yymsp
[
0
].
minor
.
yy247
;}
break
;
break
;
case
1
59
:
/* tablelist ::= ids cpxName */
case
1
61
:
/* tablelist ::= ids cpxName */
{
{
toTSDBType
(
yymsp
[
-
1
].
minor
.
yy0
.
type
);
toTSDBType
(
yymsp
[
-
1
].
minor
.
yy0
.
type
);
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yylhsminor
.
yy
135
=
tVariantListAppendToken
(
NULL
,
&
yymsp
[
-
1
].
minor
.
yy0
,
-
1
);
yylhsminor
.
yy
247
=
tVariantListAppendToken
(
NULL
,
&
yymsp
[
-
1
].
minor
.
yy0
,
-
1
);
yylhsminor
.
yy
135
=
tVariantListAppendToken
(
yylhsminor
.
yy135
,
&
yymsp
[
-
1
].
minor
.
yy0
,
-
1
);
// table alias name
yylhsminor
.
yy
247
=
tVariantListAppendToken
(
yylhsminor
.
yy247
,
&
yymsp
[
-
1
].
minor
.
yy0
,
-
1
);
// table alias name
}
}
yymsp
[
-
1
].
minor
.
yy
135
=
yylhsminor
.
yy135
;
yymsp
[
-
1
].
minor
.
yy
247
=
yylhsminor
.
yy247
;
break
;
break
;
case
16
0
:
/* tablelist ::= ids cpxName ids */
case
16
2
:
/* tablelist ::= ids cpxName ids */
{
{
toTSDBType
(
yymsp
[
-
2
].
minor
.
yy0
.
type
);
toTSDBType
(
yymsp
[
-
2
].
minor
.
yy0
.
type
);
toTSDBType
(
yymsp
[
0
].
minor
.
yy0
.
type
);
toTSDBType
(
yymsp
[
0
].
minor
.
yy0
.
type
);
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
yymsp
[
-
1
].
minor
.
yy0
.
n
;
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
yymsp
[
-
1
].
minor
.
yy0
.
n
;
yylhsminor
.
yy
135
=
tVariantListAppendToken
(
NULL
,
&
yymsp
[
-
2
].
minor
.
yy0
,
-
1
);
yylhsminor
.
yy
247
=
tVariantListAppendToken
(
NULL
,
&
yymsp
[
-
2
].
minor
.
yy0
,
-
1
);
yylhsminor
.
yy
135
=
tVariantListAppendToken
(
yylhsminor
.
yy135
,
&
yymsp
[
0
].
minor
.
yy0
,
-
1
);
yylhsminor
.
yy
247
=
tVariantListAppendToken
(
yylhsminor
.
yy247
,
&
yymsp
[
0
].
minor
.
yy0
,
-
1
);
}
}
yymsp
[
-
2
].
minor
.
yy
135
=
yylhsminor
.
yy135
;
yymsp
[
-
2
].
minor
.
yy
247
=
yylhsminor
.
yy247
;
break
;
break
;
case
16
1
:
/* tablelist ::= tablelist COMMA ids cpxName */
case
16
3
:
/* tablelist ::= tablelist COMMA ids cpxName */
{
{
toTSDBType
(
yymsp
[
-
1
].
minor
.
yy0
.
type
);
toTSDBType
(
yymsp
[
-
1
].
minor
.
yy0
.
type
);
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yylhsminor
.
yy
135
=
tVariantListAppendToken
(
yymsp
[
-
3
].
minor
.
yy135
,
&
yymsp
[
-
1
].
minor
.
yy0
,
-
1
);
yylhsminor
.
yy
247
=
tVariantListAppendToken
(
yymsp
[
-
3
].
minor
.
yy247
,
&
yymsp
[
-
1
].
minor
.
yy0
,
-
1
);
yylhsminor
.
yy
135
=
tVariantListAppendToken
(
yylhsminor
.
yy135
,
&
yymsp
[
-
1
].
minor
.
yy0
,
-
1
);
yylhsminor
.
yy
247
=
tVariantListAppendToken
(
yylhsminor
.
yy247
,
&
yymsp
[
-
1
].
minor
.
yy0
,
-
1
);
}
}
yymsp
[
-
3
].
minor
.
yy
135
=
yylhsminor
.
yy135
;
yymsp
[
-
3
].
minor
.
yy
247
=
yylhsminor
.
yy247
;
break
;
break
;
case
16
2
:
/* tablelist ::= tablelist COMMA ids cpxName ids */
case
16
4
:
/* tablelist ::= tablelist COMMA ids cpxName ids */
{
{
toTSDBType
(
yymsp
[
-
2
].
minor
.
yy0
.
type
);
toTSDBType
(
yymsp
[
-
2
].
minor
.
yy0
.
type
);
toTSDBType
(
yymsp
[
0
].
minor
.
yy0
.
type
);
toTSDBType
(
yymsp
[
0
].
minor
.
yy0
.
type
);
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
yymsp
[
-
1
].
minor
.
yy0
.
n
;
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
yymsp
[
-
1
].
minor
.
yy0
.
n
;
yylhsminor
.
yy
135
=
tVariantListAppendToken
(
yymsp
[
-
4
].
minor
.
yy135
,
&
yymsp
[
-
2
].
minor
.
yy0
,
-
1
);
yylhsminor
.
yy
247
=
tVariantListAppendToken
(
yymsp
[
-
4
].
minor
.
yy247
,
&
yymsp
[
-
2
].
minor
.
yy0
,
-
1
);
yylhsminor
.
yy
135
=
tVariantListAppendToken
(
yylhsminor
.
yy135
,
&
yymsp
[
0
].
minor
.
yy0
,
-
1
);
yylhsminor
.
yy
247
=
tVariantListAppendToken
(
yylhsminor
.
yy247
,
&
yymsp
[
0
].
minor
.
yy0
,
-
1
);
}
}
yymsp
[
-
4
].
minor
.
yy
135
=
yylhsminor
.
yy135
;
yymsp
[
-
4
].
minor
.
yy
247
=
yylhsminor
.
yy247
;
break
;
break
;
case
16
3
:
/* tmvar ::= VARIABLE */
case
16
5
:
/* tmvar ::= VARIABLE */
{
yylhsminor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;}
{
yylhsminor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;}
yymsp
[
0
].
minor
.
yy0
=
yylhsminor
.
yy0
;
yymsp
[
0
].
minor
.
yy0
=
yylhsminor
.
yy0
;
break
;
break
;
case
16
4
:
/* interval_opt ::= INTERVAL LP tmvar RP */
case
16
6
:
/* interval_opt ::= INTERVAL LP tmvar RP */
{
yymsp
[
-
3
].
minor
.
yy
160
.
interval
=
yymsp
[
-
1
].
minor
.
yy0
;
yymsp
[
-
3
].
minor
.
yy160
.
offset
.
n
=
0
;
yymsp
[
-
3
].
minor
.
yy160
.
offset
.
z
=
NULL
;
yymsp
[
-
3
].
minor
.
yy16
0
.
offset
.
type
=
0
;}
{
yymsp
[
-
3
].
minor
.
yy
430
.
interval
=
yymsp
[
-
1
].
minor
.
yy0
;
yymsp
[
-
3
].
minor
.
yy430
.
offset
.
n
=
0
;
yymsp
[
-
3
].
minor
.
yy430
.
offset
.
z
=
NULL
;
yymsp
[
-
3
].
minor
.
yy43
0
.
offset
.
type
=
0
;}
break
;
break
;
case
16
5
:
/* interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */
case
16
7
:
/* interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */
{
yymsp
[
-
5
].
minor
.
yy
160
.
interval
=
yymsp
[
-
3
].
minor
.
yy0
;
yymsp
[
-
5
].
minor
.
yy16
0
.
offset
=
yymsp
[
-
1
].
minor
.
yy0
;}
{
yymsp
[
-
5
].
minor
.
yy
430
.
interval
=
yymsp
[
-
3
].
minor
.
yy0
;
yymsp
[
-
5
].
minor
.
yy43
0
.
offset
=
yymsp
[
-
1
].
minor
.
yy0
;}
break
;
break
;
case
16
6
:
/* interval_opt ::= */
case
16
8
:
/* interval_opt ::= */
{
memset
(
&
yymsp
[
1
].
minor
.
yy
160
,
0
,
sizeof
(
yymsp
[
1
].
minor
.
yy16
0
));}
{
memset
(
&
yymsp
[
1
].
minor
.
yy
430
,
0
,
sizeof
(
yymsp
[
1
].
minor
.
yy43
0
));}
break
;
break
;
case
16
7
:
/* fill_opt ::= */
case
16
9
:
/* fill_opt ::= */
{
yymsp
[
1
].
minor
.
yy
135
=
0
;
}
{
yymsp
[
1
].
minor
.
yy
247
=
0
;
}
break
;
break
;
case
1
68
:
/* fill_opt ::= FILL LP ID COMMA tagitemlist RP */
case
1
70
:
/* fill_opt ::= FILL LP ID COMMA tagitemlist RP */
{
{
tVariant
A
=
{
0
};
tVariant
A
=
{
0
};
toTSDBType
(
yymsp
[
-
3
].
minor
.
yy0
.
type
);
toTSDBType
(
yymsp
[
-
3
].
minor
.
yy0
.
type
);
tVariantCreate
(
&
A
,
&
yymsp
[
-
3
].
minor
.
yy0
);
tVariantCreate
(
&
A
,
&
yymsp
[
-
3
].
minor
.
yy0
);
tVariantListInsert
(
yymsp
[
-
1
].
minor
.
yy
135
,
&
A
,
-
1
,
0
);
tVariantListInsert
(
yymsp
[
-
1
].
minor
.
yy
247
,
&
A
,
-
1
,
0
);
yymsp
[
-
5
].
minor
.
yy
135
=
yymsp
[
-
1
].
minor
.
yy135
;
yymsp
[
-
5
].
minor
.
yy
247
=
yymsp
[
-
1
].
minor
.
yy247
;
}
}
break
;
break
;
case
1
69
:
/* fill_opt ::= FILL LP ID RP */
case
1
71
:
/* fill_opt ::= FILL LP ID RP */
{
{
toTSDBType
(
yymsp
[
-
1
].
minor
.
yy0
.
type
);
toTSDBType
(
yymsp
[
-
1
].
minor
.
yy0
.
type
);
yymsp
[
-
3
].
minor
.
yy
135
=
tVariantListAppendToken
(
NULL
,
&
yymsp
[
-
1
].
minor
.
yy0
,
-
1
);
yymsp
[
-
3
].
minor
.
yy
247
=
tVariantListAppendToken
(
NULL
,
&
yymsp
[
-
1
].
minor
.
yy0
,
-
1
);
}
}
break
;
break
;
case
17
0
:
/* sliding_opt ::= SLIDING LP tmvar RP */
case
17
2
:
/* sliding_opt ::= SLIDING LP tmvar RP */
{
yymsp
[
-
3
].
minor
.
yy0
=
yymsp
[
-
1
].
minor
.
yy0
;
}
{
yymsp
[
-
3
].
minor
.
yy0
=
yymsp
[
-
1
].
minor
.
yy0
;
}
break
;
break
;
case
17
1
:
/* sliding_opt ::= */
case
17
3
:
/* sliding_opt ::= */
{
yymsp
[
1
].
minor
.
yy0
.
n
=
0
;
yymsp
[
1
].
minor
.
yy0
.
z
=
NULL
;
yymsp
[
1
].
minor
.
yy0
.
type
=
0
;
}
{
yymsp
[
1
].
minor
.
yy0
.
n
=
0
;
yymsp
[
1
].
minor
.
yy0
.
z
=
NULL
;
yymsp
[
1
].
minor
.
yy0
.
type
=
0
;
}
break
;
break
;
case
17
2
:
/* orderby_opt ::= */
case
17
4
:
/* orderby_opt ::= */
{
yymsp
[
1
].
minor
.
yy
135
=
0
;}
{
yymsp
[
1
].
minor
.
yy
247
=
0
;}
break
;
break
;
case
17
3
:
/* orderby_opt ::= ORDER BY sortlist */
case
17
5
:
/* orderby_opt ::= ORDER BY sortlist */
{
yymsp
[
-
2
].
minor
.
yy
135
=
yymsp
[
0
].
minor
.
yy135
;}
{
yymsp
[
-
2
].
minor
.
yy
247
=
yymsp
[
0
].
minor
.
yy247
;}
break
;
break
;
case
17
4
:
/* sortlist ::= sortlist COMMA item sortorder */
case
17
6
:
/* sortlist ::= sortlist COMMA item sortorder */
{
{
yylhsminor
.
yy
135
=
tVariantListAppend
(
yymsp
[
-
3
].
minor
.
yy135
,
&
yymsp
[
-
1
].
minor
.
yy308
,
yymsp
[
0
].
minor
.
yy130
);
yylhsminor
.
yy
247
=
tVariantListAppend
(
yymsp
[
-
3
].
minor
.
yy247
,
&
yymsp
[
-
1
].
minor
.
yy378
,
yymsp
[
0
].
minor
.
yy222
);
}
}
yymsp
[
-
3
].
minor
.
yy
135
=
yylhsminor
.
yy135
;
yymsp
[
-
3
].
minor
.
yy
247
=
yylhsminor
.
yy247
;
break
;
break
;
case
17
5
:
/* sortlist ::= item sortorder */
case
17
7
:
/* sortlist ::= item sortorder */
{
{
yylhsminor
.
yy
135
=
tVariantListAppend
(
NULL
,
&
yymsp
[
-
1
].
minor
.
yy308
,
yymsp
[
0
].
minor
.
yy130
);
yylhsminor
.
yy
247
=
tVariantListAppend
(
NULL
,
&
yymsp
[
-
1
].
minor
.
yy378
,
yymsp
[
0
].
minor
.
yy222
);
}
}
yymsp
[
-
1
].
minor
.
yy
135
=
yylhsminor
.
yy135
;
yymsp
[
-
1
].
minor
.
yy
247
=
yylhsminor
.
yy247
;
break
;
break
;
case
17
6
:
/* item ::= ids cpxName */
case
17
8
:
/* item ::= ids cpxName */
{
{
toTSDBType
(
yymsp
[
-
1
].
minor
.
yy0
.
type
);
toTSDBType
(
yymsp
[
-
1
].
minor
.
yy0
.
type
);
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
tVariantCreate
(
&
yylhsminor
.
yy3
0
8
,
&
yymsp
[
-
1
].
minor
.
yy0
);
tVariantCreate
(
&
yylhsminor
.
yy3
7
8
,
&
yymsp
[
-
1
].
minor
.
yy0
);
}
}
yymsp
[
-
1
].
minor
.
yy3
08
=
yylhsminor
.
yy30
8
;
yymsp
[
-
1
].
minor
.
yy3
78
=
yylhsminor
.
yy37
8
;
break
;
break
;
case
17
7
:
/* sortorder ::= ASC */
case
17
9
:
/* sortorder ::= ASC */
{
yymsp
[
0
].
minor
.
yy
130
=
TSDB_ORDER_ASC
;
}
{
yymsp
[
0
].
minor
.
yy
222
=
TSDB_ORDER_ASC
;
}
break
;
break
;
case
1
78
:
/* sortorder ::= DESC */
case
1
80
:
/* sortorder ::= DESC */
{
yymsp
[
0
].
minor
.
yy
130
=
TSDB_ORDER_DESC
;}
{
yymsp
[
0
].
minor
.
yy
222
=
TSDB_ORDER_DESC
;}
break
;
break
;
case
1
79
:
/* sortorder ::= */
case
1
81
:
/* sortorder ::= */
{
yymsp
[
1
].
minor
.
yy
130
=
TSDB_ORDER_ASC
;
}
{
yymsp
[
1
].
minor
.
yy
222
=
TSDB_ORDER_ASC
;
}
break
;
break
;
case
18
0
:
/* groupby_opt ::= */
case
18
2
:
/* groupby_opt ::= */
{
yymsp
[
1
].
minor
.
yy
135
=
0
;}
{
yymsp
[
1
].
minor
.
yy
247
=
0
;}
break
;
break
;
case
18
1
:
/* groupby_opt ::= GROUP BY grouplist */
case
18
3
:
/* groupby_opt ::= GROUP BY grouplist */
{
yymsp
[
-
2
].
minor
.
yy
135
=
yymsp
[
0
].
minor
.
yy135
;}
{
yymsp
[
-
2
].
minor
.
yy
247
=
yymsp
[
0
].
minor
.
yy247
;}
break
;
break
;
case
18
2
:
/* grouplist ::= grouplist COMMA item */
case
18
4
:
/* grouplist ::= grouplist COMMA item */
{
{
yylhsminor
.
yy
135
=
tVariantListAppend
(
yymsp
[
-
2
].
minor
.
yy135
,
&
yymsp
[
0
].
minor
.
yy30
8
,
-
1
);
yylhsminor
.
yy
247
=
tVariantListAppend
(
yymsp
[
-
2
].
minor
.
yy247
,
&
yymsp
[
0
].
minor
.
yy37
8
,
-
1
);
}
}
yymsp
[
-
2
].
minor
.
yy
135
=
yylhsminor
.
yy135
;
yymsp
[
-
2
].
minor
.
yy
247
=
yylhsminor
.
yy247
;
break
;
break
;
case
18
3
:
/* grouplist ::= item */
case
18
5
:
/* grouplist ::= item */
{
{
yylhsminor
.
yy
135
=
tVariantListAppend
(
NULL
,
&
yymsp
[
0
].
minor
.
yy30
8
,
-
1
);
yylhsminor
.
yy
247
=
tVariantListAppend
(
NULL
,
&
yymsp
[
0
].
minor
.
yy37
8
,
-
1
);
}
}
yymsp
[
0
].
minor
.
yy
135
=
yylhsminor
.
yy135
;
yymsp
[
0
].
minor
.
yy
247
=
yylhsminor
.
yy247
;
break
;
break
;
case
18
4
:
/* having_opt ::= */
case
18
6
:
/* having_opt ::= */
case
19
4
:
/* where_opt ::= */
yytestcase
(
yyruleno
==
194
);
case
19
6
:
/* where_opt ::= */
yytestcase
(
yyruleno
==
196
);
case
23
2
:
/* expritem ::= */
yytestcase
(
yyruleno
==
232
);
case
23
4
:
/* expritem ::= */
yytestcase
(
yyruleno
==
234
);
{
yymsp
[
1
].
minor
.
yy3
1
6
=
0
;}
{
yymsp
[
1
].
minor
.
yy3
2
6
=
0
;}
break
;
break
;
case
18
5
:
/* having_opt ::= HAVING expr */
case
18
7
:
/* having_opt ::= HAVING expr */
case
19
5
:
/* where_opt ::= WHERE expr */
yytestcase
(
yyruleno
==
195
);
case
19
7
:
/* where_opt ::= WHERE expr */
yytestcase
(
yyruleno
==
197
);
{
yymsp
[
-
1
].
minor
.
yy3
16
=
yymsp
[
0
].
minor
.
yy31
6
;}
{
yymsp
[
-
1
].
minor
.
yy3
26
=
yymsp
[
0
].
minor
.
yy32
6
;}
break
;
break
;
case
18
6
:
/* limit_opt ::= */
case
18
8
:
/* limit_opt ::= */
case
19
0
:
/* slimit_opt ::= */
yytestcase
(
yyruleno
==
190
);
case
19
2
:
/* slimit_opt ::= */
yytestcase
(
yyruleno
==
192
);
{
yymsp
[
1
].
minor
.
yy
126
.
limit
=
-
1
;
yymsp
[
1
].
minor
.
yy126
.
offset
=
0
;}
{
yymsp
[
1
].
minor
.
yy
204
.
limit
=
-
1
;
yymsp
[
1
].
minor
.
yy204
.
offset
=
0
;}
break
;
break
;
case
18
7
:
/* limit_opt ::= LIMIT signed */
case
18
9
:
/* limit_opt ::= LIMIT signed */
case
19
1
:
/* slimit_opt ::= SLIMIT signed */
yytestcase
(
yyruleno
==
191
);
case
19
3
:
/* slimit_opt ::= SLIMIT signed */
yytestcase
(
yyruleno
==
193
);
{
yymsp
[
-
1
].
minor
.
yy
126
.
limit
=
yymsp
[
0
].
minor
.
yy531
;
yymsp
[
-
1
].
minor
.
yy126
.
offset
=
0
;}
{
yymsp
[
-
1
].
minor
.
yy
204
.
limit
=
yymsp
[
0
].
minor
.
yy403
;
yymsp
[
-
1
].
minor
.
yy204
.
offset
=
0
;}
break
;
break
;
case
1
88
:
/* limit_opt ::= LIMIT signed OFFSET signed */
case
1
90
:
/* limit_opt ::= LIMIT signed OFFSET signed */
{
yymsp
[
-
3
].
minor
.
yy
126
.
limit
=
yymsp
[
-
2
].
minor
.
yy531
;
yymsp
[
-
3
].
minor
.
yy126
.
offset
=
yymsp
[
0
].
minor
.
yy531
;}
{
yymsp
[
-
3
].
minor
.
yy
204
.
limit
=
yymsp
[
-
2
].
minor
.
yy403
;
yymsp
[
-
3
].
minor
.
yy204
.
offset
=
yymsp
[
0
].
minor
.
yy403
;}
break
;
break
;
case
1
89
:
/* limit_opt ::= LIMIT signed COMMA signed */
case
1
91
:
/* limit_opt ::= LIMIT signed COMMA signed */
{
yymsp
[
-
3
].
minor
.
yy
126
.
limit
=
yymsp
[
0
].
minor
.
yy531
;
yymsp
[
-
3
].
minor
.
yy126
.
offset
=
yymsp
[
-
2
].
minor
.
yy531
;}
{
yymsp
[
-
3
].
minor
.
yy
204
.
limit
=
yymsp
[
0
].
minor
.
yy403
;
yymsp
[
-
3
].
minor
.
yy204
.
offset
=
yymsp
[
-
2
].
minor
.
yy403
;}
break
;
break
;
case
19
2
:
/* slimit_opt ::= SLIMIT signed SOFFSET signed */
case
19
4
:
/* slimit_opt ::= SLIMIT signed SOFFSET signed */
{
yymsp
[
-
3
].
minor
.
yy
126
.
limit
=
yymsp
[
-
2
].
minor
.
yy531
;
yymsp
[
-
3
].
minor
.
yy126
.
offset
=
yymsp
[
0
].
minor
.
yy531
;}
{
yymsp
[
-
3
].
minor
.
yy
204
.
limit
=
yymsp
[
-
2
].
minor
.
yy403
;
yymsp
[
-
3
].
minor
.
yy204
.
offset
=
yymsp
[
0
].
minor
.
yy403
;}
break
;
break
;
case
19
3
:
/* slimit_opt ::= SLIMIT signed COMMA signed */
case
19
5
:
/* slimit_opt ::= SLIMIT signed COMMA signed */
{
yymsp
[
-
3
].
minor
.
yy
126
.
limit
=
yymsp
[
0
].
minor
.
yy531
;
yymsp
[
-
3
].
minor
.
yy126
.
offset
=
yymsp
[
-
2
].
minor
.
yy531
;}
{
yymsp
[
-
3
].
minor
.
yy
204
.
limit
=
yymsp
[
0
].
minor
.
yy403
;
yymsp
[
-
3
].
minor
.
yy204
.
offset
=
yymsp
[
-
2
].
minor
.
yy403
;}
break
;
break
;
case
19
6
:
/* expr ::= LP expr RP */
case
19
8
:
/* expr ::= LP expr RP */
{
yylhsminor
.
yy3
16
=
yymsp
[
-
1
].
minor
.
yy316
;
yylhsminor
.
yy316
->
token
.
z
=
yymsp
[
-
2
].
minor
.
yy0
.
z
;
yylhsminor
.
yy31
6
->
token
.
n
=
(
yymsp
[
0
].
minor
.
yy0
.
z
-
yymsp
[
-
2
].
minor
.
yy0
.
z
+
1
);}
{
yylhsminor
.
yy3
26
=
yymsp
[
-
1
].
minor
.
yy326
;
yylhsminor
.
yy326
->
token
.
z
=
yymsp
[
-
2
].
minor
.
yy0
.
z
;
yylhsminor
.
yy32
6
->
token
.
n
=
(
yymsp
[
0
].
minor
.
yy0
.
z
-
yymsp
[
-
2
].
minor
.
yy0
.
z
+
1
);}
yymsp
[
-
2
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
2
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
19
7
:
/* expr ::= ID */
case
19
9
:
/* expr ::= ID */
{
yylhsminor
.
yy3
1
6
=
tSqlExprIdValueCreate
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_ID
);}
{
yylhsminor
.
yy3
2
6
=
tSqlExprIdValueCreate
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_ID
);}
yymsp
[
0
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
0
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
198
:
/* expr ::= ID DOT ID */
case
200
:
/* expr ::= ID DOT ID */
{
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
(
1
+
yymsp
[
0
].
minor
.
yy0
.
n
);
yylhsminor
.
yy3
1
6
=
tSqlExprIdValueCreate
(
&
yymsp
[
-
2
].
minor
.
yy0
,
TK_ID
);}
{
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
(
1
+
yymsp
[
0
].
minor
.
yy0
.
n
);
yylhsminor
.
yy3
2
6
=
tSqlExprIdValueCreate
(
&
yymsp
[
-
2
].
minor
.
yy0
,
TK_ID
);}
yymsp
[
-
2
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
2
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
199
:
/* expr ::= ID DOT STAR */
case
201
:
/* expr ::= ID DOT STAR */
{
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
(
1
+
yymsp
[
0
].
minor
.
yy0
.
n
);
yylhsminor
.
yy3
1
6
=
tSqlExprIdValueCreate
(
&
yymsp
[
-
2
].
minor
.
yy0
,
TK_ALL
);}
{
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
(
1
+
yymsp
[
0
].
minor
.
yy0
.
n
);
yylhsminor
.
yy3
2
6
=
tSqlExprIdValueCreate
(
&
yymsp
[
-
2
].
minor
.
yy0
,
TK_ALL
);}
yymsp
[
-
2
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
2
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
20
0
:
/* expr ::= INTEGER */
case
20
2
:
/* expr ::= INTEGER */
{
yylhsminor
.
yy3
1
6
=
tSqlExprIdValueCreate
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_INTEGER
);}
{
yylhsminor
.
yy3
2
6
=
tSqlExprIdValueCreate
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_INTEGER
);}
yymsp
[
0
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
0
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
20
1
:
/* expr ::= MINUS INTEGER */
case
20
3
:
/* expr ::= MINUS INTEGER */
case
20
2
:
/* expr ::= PLUS INTEGER */
yytestcase
(
yyruleno
==
202
);
case
20
4
:
/* expr ::= PLUS INTEGER */
yytestcase
(
yyruleno
==
204
);
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yymsp
[
-
1
].
minor
.
yy0
.
type
=
TK_INTEGER
;
yylhsminor
.
yy3
1
6
=
tSqlExprIdValueCreate
(
&
yymsp
[
-
1
].
minor
.
yy0
,
TK_INTEGER
);}
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yymsp
[
-
1
].
minor
.
yy0
.
type
=
TK_INTEGER
;
yylhsminor
.
yy3
2
6
=
tSqlExprIdValueCreate
(
&
yymsp
[
-
1
].
minor
.
yy0
,
TK_INTEGER
);}
yymsp
[
-
1
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
1
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
20
3
:
/* expr ::= FLOAT */
case
20
5
:
/* expr ::= FLOAT */
{
yylhsminor
.
yy3
1
6
=
tSqlExprIdValueCreate
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_FLOAT
);}
{
yylhsminor
.
yy3
2
6
=
tSqlExprIdValueCreate
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_FLOAT
);}
yymsp
[
0
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
0
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
20
4
:
/* expr ::= MINUS FLOAT */
case
20
6
:
/* expr ::= MINUS FLOAT */
case
20
5
:
/* expr ::= PLUS FLOAT */
yytestcase
(
yyruleno
==
205
);
case
20
7
:
/* expr ::= PLUS FLOAT */
yytestcase
(
yyruleno
==
207
);
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yymsp
[
-
1
].
minor
.
yy0
.
type
=
TK_FLOAT
;
yylhsminor
.
yy3
1
6
=
tSqlExprIdValueCreate
(
&
yymsp
[
-
1
].
minor
.
yy0
,
TK_FLOAT
);}
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yymsp
[
-
1
].
minor
.
yy0
.
type
=
TK_FLOAT
;
yylhsminor
.
yy3
2
6
=
tSqlExprIdValueCreate
(
&
yymsp
[
-
1
].
minor
.
yy0
,
TK_FLOAT
);}
yymsp
[
-
1
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
1
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
20
6
:
/* expr ::= STRING */
case
20
8
:
/* expr ::= STRING */
{
yylhsminor
.
yy3
1
6
=
tSqlExprIdValueCreate
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_STRING
);}
{
yylhsminor
.
yy3
2
6
=
tSqlExprIdValueCreate
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_STRING
);}
yymsp
[
0
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
0
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
20
7
:
/* expr ::= NOW */
case
20
9
:
/* expr ::= NOW */
{
yylhsminor
.
yy3
1
6
=
tSqlExprIdValueCreate
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_NOW
);
}
{
yylhsminor
.
yy3
2
6
=
tSqlExprIdValueCreate
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_NOW
);
}
yymsp
[
0
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
0
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
2
08
:
/* expr ::= VARIABLE */
case
2
10
:
/* expr ::= VARIABLE */
{
yylhsminor
.
yy3
1
6
=
tSqlExprIdValueCreate
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_VARIABLE
);}
{
yylhsminor
.
yy3
2
6
=
tSqlExprIdValueCreate
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_VARIABLE
);}
yymsp
[
0
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
0
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
2
09
:
/* expr ::= BOOL */
case
2
11
:
/* expr ::= BOOL */
{
yylhsminor
.
yy3
1
6
=
tSqlExprIdValueCreate
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_BOOL
);}
{
yylhsminor
.
yy3
2
6
=
tSqlExprIdValueCreate
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_BOOL
);}
yymsp
[
0
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
0
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
21
0
:
/* expr ::= ID LP exprlist RP */
case
21
2
:
/* expr ::= ID LP exprlist RP */
{
yylhsminor
.
yy3
16
=
tSqlExprCreateFunction
(
yymsp
[
-
1
].
minor
.
yy266
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
,
yymsp
[
-
3
].
minor
.
yy0
.
type
);
}
{
yylhsminor
.
yy3
26
=
tSqlExprCreateFunction
(
yymsp
[
-
1
].
minor
.
yy522
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
,
yymsp
[
-
3
].
minor
.
yy0
.
type
);
}
yymsp
[
-
3
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
3
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
21
1
:
/* expr ::= ID LP STAR RP */
case
21
3
:
/* expr ::= ID LP STAR RP */
{
yylhsminor
.
yy3
1
6
=
tSqlExprCreateFunction
(
NULL
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
,
yymsp
[
-
3
].
minor
.
yy0
.
type
);
}
{
yylhsminor
.
yy3
2
6
=
tSqlExprCreateFunction
(
NULL
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
,
yymsp
[
-
3
].
minor
.
yy0
.
type
);
}
yymsp
[
-
3
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
3
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
21
2
:
/* expr ::= expr IS NULL */
case
21
4
:
/* expr ::= expr IS NULL */
{
yylhsminor
.
yy3
16
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy31
6
,
NULL
,
TK_ISNULL
);}
{
yylhsminor
.
yy3
26
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy32
6
,
NULL
,
TK_ISNULL
);}
yymsp
[
-
2
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
2
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
21
3
:
/* expr ::= expr IS NOT NULL */
case
21
5
:
/* expr ::= expr IS NOT NULL */
{
yylhsminor
.
yy3
16
=
tSqlExprCreate
(
yymsp
[
-
3
].
minor
.
yy31
6
,
NULL
,
TK_NOTNULL
);}
{
yylhsminor
.
yy3
26
=
tSqlExprCreate
(
yymsp
[
-
3
].
minor
.
yy32
6
,
NULL
,
TK_NOTNULL
);}
yymsp
[
-
3
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
3
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
21
4
:
/* expr ::= expr LT expr */
case
21
6
:
/* expr ::= expr LT expr */
{
yylhsminor
.
yy3
16
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy316
,
yymsp
[
0
].
minor
.
yy31
6
,
TK_LT
);}
{
yylhsminor
.
yy3
26
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy32
6
,
TK_LT
);}
yymsp
[
-
2
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
2
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
21
5
:
/* expr ::= expr GT expr */
case
21
7
:
/* expr ::= expr GT expr */
{
yylhsminor
.
yy3
16
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy316
,
yymsp
[
0
].
minor
.
yy31
6
,
TK_GT
);}
{
yylhsminor
.
yy3
26
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy32
6
,
TK_GT
);}
yymsp
[
-
2
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
2
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
21
6
:
/* expr ::= expr LE expr */
case
21
8
:
/* expr ::= expr LE expr */
{
yylhsminor
.
yy3
16
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy316
,
yymsp
[
0
].
minor
.
yy31
6
,
TK_LE
);}
{
yylhsminor
.
yy3
26
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy32
6
,
TK_LE
);}
yymsp
[
-
2
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
2
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
21
7
:
/* expr ::= expr GE expr */
case
21
9
:
/* expr ::= expr GE expr */
{
yylhsminor
.
yy3
16
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy316
,
yymsp
[
0
].
minor
.
yy31
6
,
TK_GE
);}
{
yylhsminor
.
yy3
26
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy32
6
,
TK_GE
);}
yymsp
[
-
2
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
2
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
2
18
:
/* expr ::= expr NE expr */
case
2
20
:
/* expr ::= expr NE expr */
{
yylhsminor
.
yy3
16
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy316
,
yymsp
[
0
].
minor
.
yy31
6
,
TK_NE
);}
{
yylhsminor
.
yy3
26
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy32
6
,
TK_NE
);}
yymsp
[
-
2
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
2
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
2
19
:
/* expr ::= expr EQ expr */
case
2
21
:
/* expr ::= expr EQ expr */
{
yylhsminor
.
yy3
16
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy316
,
yymsp
[
0
].
minor
.
yy31
6
,
TK_EQ
);}
{
yylhsminor
.
yy3
26
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy32
6
,
TK_EQ
);}
yymsp
[
-
2
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
2
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
22
0
:
/* expr ::= expr AND expr */
case
22
2
:
/* expr ::= expr AND expr */
{
yylhsminor
.
yy3
16
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy316
,
yymsp
[
0
].
minor
.
yy31
6
,
TK_AND
);}
{
yylhsminor
.
yy3
26
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy32
6
,
TK_AND
);}
yymsp
[
-
2
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
2
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
22
1
:
/* expr ::= expr OR expr */
case
22
3
:
/* expr ::= expr OR expr */
{
yylhsminor
.
yy3
16
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy316
,
yymsp
[
0
].
minor
.
yy31
6
,
TK_OR
);
}
{
yylhsminor
.
yy3
26
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy32
6
,
TK_OR
);
}
yymsp
[
-
2
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
2
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
22
2
:
/* expr ::= expr PLUS expr */
case
22
4
:
/* expr ::= expr PLUS expr */
{
yylhsminor
.
yy3
16
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy316
,
yymsp
[
0
].
minor
.
yy31
6
,
TK_PLUS
);
}
{
yylhsminor
.
yy3
26
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy32
6
,
TK_PLUS
);
}
yymsp
[
-
2
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
2
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
22
3
:
/* expr ::= expr MINUS expr */
case
22
5
:
/* expr ::= expr MINUS expr */
{
yylhsminor
.
yy3
16
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy316
,
yymsp
[
0
].
minor
.
yy31
6
,
TK_MINUS
);
}
{
yylhsminor
.
yy3
26
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy32
6
,
TK_MINUS
);
}
yymsp
[
-
2
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
2
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
22
4
:
/* expr ::= expr STAR expr */
case
22
6
:
/* expr ::= expr STAR expr */
{
yylhsminor
.
yy3
16
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy316
,
yymsp
[
0
].
minor
.
yy31
6
,
TK_STAR
);
}
{
yylhsminor
.
yy3
26
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy32
6
,
TK_STAR
);
}
yymsp
[
-
2
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
2
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
22
5
:
/* expr ::= expr SLASH expr */
case
22
7
:
/* expr ::= expr SLASH expr */
{
yylhsminor
.
yy3
16
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy316
,
yymsp
[
0
].
minor
.
yy31
6
,
TK_DIVIDE
);}
{
yylhsminor
.
yy3
26
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy32
6
,
TK_DIVIDE
);}
yymsp
[
-
2
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
2
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
22
6
:
/* expr ::= expr REM expr */
case
22
8
:
/* expr ::= expr REM expr */
{
yylhsminor
.
yy3
16
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy316
,
yymsp
[
0
].
minor
.
yy31
6
,
TK_REM
);
}
{
yylhsminor
.
yy3
26
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy32
6
,
TK_REM
);
}
yymsp
[
-
2
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
2
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
22
7
:
/* expr ::= expr LIKE expr */
case
22
9
:
/* expr ::= expr LIKE expr */
{
yylhsminor
.
yy3
16
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy316
,
yymsp
[
0
].
minor
.
yy31
6
,
TK_LIKE
);
}
{
yylhsminor
.
yy3
26
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy32
6
,
TK_LIKE
);
}
yymsp
[
-
2
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
2
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
2
28
:
/* expr ::= expr IN LP exprlist RP */
case
2
30
:
/* expr ::= expr IN LP exprlist RP */
{
yylhsminor
.
yy3
16
=
tSqlExprCreate
(
yymsp
[
-
4
].
minor
.
yy316
,
(
tSQLExpr
*
)
yymsp
[
-
1
].
minor
.
yy266
,
TK_IN
);
}
{
yylhsminor
.
yy3
26
=
tSqlExprCreate
(
yymsp
[
-
4
].
minor
.
yy326
,
(
tSQLExpr
*
)
yymsp
[
-
1
].
minor
.
yy522
,
TK_IN
);
}
yymsp
[
-
4
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
-
4
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
2
29
:
/* exprlist ::= exprlist COMMA expritem */
case
2
31
:
/* exprlist ::= exprlist COMMA expritem */
{
yylhsminor
.
yy
266
=
tSqlExprListAppend
(
yymsp
[
-
2
].
minor
.
yy266
,
yymsp
[
0
].
minor
.
yy316
,
0
);}
{
yylhsminor
.
yy
522
=
tSqlExprListAppend
(
yymsp
[
-
2
].
minor
.
yy522
,
yymsp
[
0
].
minor
.
yy326
,
0
,
0
);}
yymsp
[
-
2
].
minor
.
yy
266
=
yylhsminor
.
yy266
;
yymsp
[
-
2
].
minor
.
yy
522
=
yylhsminor
.
yy522
;
break
;
break
;
case
23
0
:
/* exprlist ::= expritem */
case
23
2
:
/* exprlist ::= expritem */
{
yylhsminor
.
yy
266
=
tSqlExprListAppend
(
0
,
yymsp
[
0
].
minor
.
yy316
,
0
);}
{
yylhsminor
.
yy
522
=
tSqlExprListAppend
(
0
,
yymsp
[
0
].
minor
.
yy326
,
0
,
0
);}
yymsp
[
0
].
minor
.
yy
266
=
yylhsminor
.
yy266
;
yymsp
[
0
].
minor
.
yy
522
=
yylhsminor
.
yy522
;
break
;
break
;
case
23
1
:
/* expritem ::= expr */
case
23
3
:
/* expritem ::= expr */
{
yylhsminor
.
yy3
16
=
yymsp
[
0
].
minor
.
yy31
6
;}
{
yylhsminor
.
yy3
26
=
yymsp
[
0
].
minor
.
yy32
6
;}
yymsp
[
0
].
minor
.
yy3
16
=
yylhsminor
.
yy31
6
;
yymsp
[
0
].
minor
.
yy3
26
=
yylhsminor
.
yy32
6
;
break
;
break
;
case
23
3
:
/* cmd ::= RESET QUERY CACHE */
case
23
5
:
/* cmd ::= RESET QUERY CACHE */
{
setDCLSQLElems
(
pInfo
,
TSDB_SQL_RESET_CACHE
,
0
);}
{
setDCLSQLElems
(
pInfo
,
TSDB_SQL_RESET_CACHE
,
0
);}
break
;
break
;
case
23
4
:
/* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
case
23
6
:
/* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
{
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tAlterTableSqlElems
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy
135
,
NULL
,
TSDB_ALTER_TABLE_ADD_COLUMN
,
-
1
);
SAlterTableInfo
*
pAlterTable
=
tAlterTableSqlElems
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy
247
,
NULL
,
TSDB_ALTER_TABLE_ADD_COLUMN
,
-
1
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
}
break
;
break
;
case
23
5
:
/* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
case
23
7
:
/* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
{
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
...
@@ -2922,14 +2930,14 @@ static void yy_reduce(
...
@@ -2922,14 +2930,14 @@ static void yy_reduce(
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
}
break
;
break
;
case
23
6
:
/* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
case
23
8
:
/* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
{
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tAlterTableSqlElems
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy
135
,
NULL
,
TSDB_ALTER_TABLE_ADD_TAG_COLUMN
,
-
1
);
SAlterTableInfo
*
pAlterTable
=
tAlterTableSqlElems
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy
247
,
NULL
,
TSDB_ALTER_TABLE_ADD_TAG_COLUMN
,
-
1
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
}
break
;
break
;
case
23
7
:
/* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
case
23
9
:
/* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
{
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
...
@@ -2940,7 +2948,7 @@ static void yy_reduce(
...
@@ -2940,7 +2948,7 @@ static void yy_reduce(
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
}
break
;
break
;
case
2
38
:
/* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
case
2
40
:
/* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
{
{
yymsp
[
-
5
].
minor
.
yy0
.
n
+=
yymsp
[
-
4
].
minor
.
yy0
.
n
;
yymsp
[
-
5
].
minor
.
yy0
.
n
+=
yymsp
[
-
4
].
minor
.
yy0
.
n
;
...
@@ -2954,26 +2962,26 @@ static void yy_reduce(
...
@@ -2954,26 +2962,26 @@ static void yy_reduce(
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
}
break
;
break
;
case
2
39
:
/* cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
case
2
41
:
/* cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
{
{
yymsp
[
-
6
].
minor
.
yy0
.
n
+=
yymsp
[
-
5
].
minor
.
yy0
.
n
;
yymsp
[
-
6
].
minor
.
yy0
.
n
+=
yymsp
[
-
5
].
minor
.
yy0
.
n
;
toTSDBType
(
yymsp
[
-
2
].
minor
.
yy0
.
type
);
toTSDBType
(
yymsp
[
-
2
].
minor
.
yy0
.
type
);
SArray
*
A
=
tVariantListAppendToken
(
NULL
,
&
yymsp
[
-
2
].
minor
.
yy0
,
-
1
);
SArray
*
A
=
tVariantListAppendToken
(
NULL
,
&
yymsp
[
-
2
].
minor
.
yy0
,
-
1
);
A
=
tVariantListAppend
(
A
,
&
yymsp
[
0
].
minor
.
yy3
0
8
,
-
1
);
A
=
tVariantListAppend
(
A
,
&
yymsp
[
0
].
minor
.
yy3
7
8
,
-
1
);
SAlterTableInfo
*
pAlterTable
=
tAlterTableSqlElems
(
&
yymsp
[
-
6
].
minor
.
yy0
,
NULL
,
A
,
TSDB_ALTER_TABLE_UPDATE_TAG_VAL
,
-
1
);
SAlterTableInfo
*
pAlterTable
=
tAlterTableSqlElems
(
&
yymsp
[
-
6
].
minor
.
yy0
,
NULL
,
A
,
TSDB_ALTER_TABLE_UPDATE_TAG_VAL
,
-
1
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
}
break
;
break
;
case
24
0
:
/* cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
case
24
2
:
/* cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
{
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tAlterTableSqlElems
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy
135
,
NULL
,
TSDB_ALTER_TABLE_ADD_COLUMN
,
TSDB_SUPER_TABLE
);
SAlterTableInfo
*
pAlterTable
=
tAlterTableSqlElems
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy
247
,
NULL
,
TSDB_ALTER_TABLE_ADD_COLUMN
,
TSDB_SUPER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
}
break
;
break
;
case
24
1
:
/* cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
case
24
3
:
/* cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
{
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
...
@@ -2984,14 +2992,14 @@ static void yy_reduce(
...
@@ -2984,14 +2992,14 @@ static void yy_reduce(
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
}
break
;
break
;
case
24
2
:
/* cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
case
24
4
:
/* cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
{
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tAlterTableSqlElems
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy
135
,
NULL
,
TSDB_ALTER_TABLE_ADD_TAG_COLUMN
,
TSDB_SUPER_TABLE
);
SAlterTableInfo
*
pAlterTable
=
tAlterTableSqlElems
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy
247
,
NULL
,
TSDB_ALTER_TABLE_ADD_TAG_COLUMN
,
TSDB_SUPER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
}
break
;
break
;
case
24
3
:
/* cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
case
24
5
:
/* cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
{
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
...
@@ -3002,7 +3010,7 @@ static void yy_reduce(
...
@@ -3002,7 +3010,7 @@ static void yy_reduce(
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
}
break
;
break
;
case
24
4
:
/* cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
case
24
6
:
/* cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
{
{
yymsp
[
-
5
].
minor
.
yy0
.
n
+=
yymsp
[
-
4
].
minor
.
yy0
.
n
;
yymsp
[
-
5
].
minor
.
yy0
.
n
+=
yymsp
[
-
4
].
minor
.
yy0
.
n
;
...
@@ -3016,13 +3024,13 @@ static void yy_reduce(
...
@@ -3016,13 +3024,13 @@ static void yy_reduce(
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
}
break
;
break
;
case
24
5
:
/* cmd ::= KILL CONNECTION INTEGER */
case
24
7
:
/* cmd ::= KILL CONNECTION INTEGER */
{
setKillSql
(
pInfo
,
TSDB_SQL_KILL_CONNECTION
,
&
yymsp
[
0
].
minor
.
yy0
);}
{
setKillSql
(
pInfo
,
TSDB_SQL_KILL_CONNECTION
,
&
yymsp
[
0
].
minor
.
yy0
);}
break
;
break
;
case
24
6
:
/* cmd ::= KILL STREAM INTEGER COLON INTEGER */
case
24
8
:
/* 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
);}
{
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
;
break
;
case
24
7
:
/* cmd ::= KILL QUERY INTEGER COLON INTEGER */
case
24
9
:
/* 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
);}
{
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
;
break
;
default:
default:
...
...
src/query/tests/astTest.cpp
浏览文件 @
e7614def
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
#include <cassert>
#include <cassert>
#include <iostream>
#include <iostream>
#include "
qAst
.h"
#include "
texpr
.h"
#include "taosmsg.h"
#include "taosmsg.h"
#include "tsdb.h"
#include "tsdb.h"
#include "tskiplist.h"
#include "tskiplist.h"
...
...
src/query/tests/patternMatchTest.cpp
浏览文件 @
e7614def
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
#include <cassert>
#include <cassert>
#include <iostream>
#include <iostream>
#include "
tsqlfunctio
n.h"
#include "
qAggMai
n.h"
#include "tcompare.h"
#include "tcompare.h"
TEST
(
testCase
,
patternMatchTest
)
{
TEST
(
testCase
,
patternMatchTest
)
{
...
...
src/tsdb/src/tsdbRead.c
浏览文件 @
e7614def
...
@@ -19,10 +19,10 @@
...
@@ -19,10 +19,10 @@
#include "tcompare.h"
#include "tcompare.h"
#include "exception.h"
#include "exception.h"
#include "../../query/inc/qAst.h" // todo move to common module
#include "tlosertree.h"
#include "tlosertree.h"
#include "tsdb.h"
#include "tsdb.h"
#include "tsdbMain.h"
#include "tsdbMain.h"
#include "texpr.h"
#define EXTRA_BYTES 2
#define EXTRA_BYTES 2
#define ASCENDING_TRAVERSE(o) (o == TSDB_ORDER_ASC)
#define ASCENDING_TRAVERSE(o) (o == TSDB_ORDER_ASC)
...
@@ -111,6 +111,7 @@ typedef struct STsdbQueryHandle {
...
@@ -111,6 +111,7 @@ typedef struct STsdbQueryHandle {
int32_t
activeIndex
;
int32_t
activeIndex
;
bool
checkFiles
;
// check file stage
bool
checkFiles
;
// check file stage
bool
cachelastrow
;
// check if last row cached
bool
cachelastrow
;
// check if last row cached
bool
loadExternalRow
;
// load time window external data rows
void
*
qinfo
;
// query info handle, for debug purpose
void
*
qinfo
;
// query info handle, for debug purpose
int32_t
type
;
// query type: retrieve all data blocks, 2. retrieve only last row, 3. retrieve direct prev|next rows
int32_t
type
;
// query type: retrieve all data blocks, 2. retrieve only last row, 3. retrieve direct prev|next rows
SFileGroup
*
pFileGroup
;
SFileGroup
*
pFileGroup
;
...
@@ -125,6 +126,8 @@ typedef struct STsdbQueryHandle {
...
@@ -125,6 +126,8 @@ typedef struct STsdbQueryHandle {
SDataBlockLoadInfo
dataBlockLoadInfo
;
/* record current block load information */
SDataBlockLoadInfo
dataBlockLoadInfo
;
/* record current block load information */
SLoadCompBlockInfo
compBlockLoadInfo
;
/* record current compblock information in SQuery */
SLoadCompBlockInfo
compBlockLoadInfo
;
/* record current compblock information in SQuery */
SArray
*
prev
;
// previous row which is before than time window
SArray
*
next
;
// next row which is after the query time window
SIOCostSummary
cost
;
SIOCostSummary
cost
;
}
STsdbQueryHandle
;
}
STsdbQueryHandle
;
...
@@ -141,10 +144,10 @@ static int32_t tsdbGetCachedLastRow(STable* pTable, SDataRow* pRes, TSKEY* lastK
...
@@ -141,10 +144,10 @@ static int32_t tsdbGetCachedLastRow(STable* pTable, SDataRow* pRes, TSKEY* lastK
static
void
changeQueryHandleForInterpQuery
(
TsdbQueryHandleT
pHandle
);
static
void
changeQueryHandleForInterpQuery
(
TsdbQueryHandleT
pHandle
);
static
void
doMergeTwoLevelData
(
STsdbQueryHandle
*
pQueryHandle
,
STableCheckInfo
*
pCheckInfo
,
SCompBlock
*
pBlock
);
static
void
doMergeTwoLevelData
(
STsdbQueryHandle
*
pQueryHandle
,
STableCheckInfo
*
pCheckInfo
,
SCompBlock
*
pBlock
);
static
int32_t
binarySearchForKey
(
char
*
pValue
,
int
num
,
TSKEY
key
,
int
order
);
static
int32_t
binarySearchForKey
(
char
*
pValue
,
int
num
,
TSKEY
key
,
int
order
);
static
int
tsdbReadRowsFromCache
(
STableCheckInfo
*
pCheckInfo
,
TSKEY
maxKey
,
int
maxRowsToRead
,
STimeWindow
*
win
,
static
int
32_t
tsdbReadRowsFromCache
(
STableCheckInfo
*
pCheckInfo
,
TSKEY
maxKey
,
int
maxRowsToRead
,
STimeWindow
*
win
,
STsdbQueryHandle
*
pQueryHandle
);
STsdbQueryHandle
*
pQueryHandle
);
static
int32_t
tsdbCheckInfoCompar
(
const
void
*
key1
,
const
void
*
key2
);
static
int
tsdbCheckInfoCompar
(
const
void
*
key1
,
const
void
*
key2
);
static
int
32_t
doGetExternalRow
(
STsdbQueryHandle
*
pQueryHandle
,
int16_t
type
,
SMemRef
*
pMemRef
);
static
void
*
doFreeColumnInfoData
(
SArray
*
pColumnInfoData
);
static
void
tsdbInitDataBlockLoadInfo
(
SDataBlockLoadInfo
*
pBlockLoadInfo
)
{
static
void
tsdbInitDataBlockLoadInfo
(
SDataBlockLoadInfo
*
pBlockLoadInfo
)
{
pBlockLoadInfo
->
slot
=
-
1
;
pBlockLoadInfo
->
slot
=
-
1
;
...
@@ -210,6 +213,36 @@ static void tsdbMayUnTakeMemSnapshot(STsdbQueryHandle* pQueryHandle) {
...
@@ -210,6 +213,36 @@ static void tsdbMayUnTakeMemSnapshot(STsdbQueryHandle* pQueryHandle) {
pQueryHandle
->
pMemRef
=
NULL
;
pQueryHandle
->
pMemRef
=
NULL
;
}
}
int64_t
tsdbGetNumOfRowsInMemTable
(
TsdbQueryHandleT
*
pHandle
)
{
STsdbQueryHandle
*
pQueryHandle
=
(
STsdbQueryHandle
*
)
pHandle
;
size_t
size
=
taosArrayGetSize
(
pQueryHandle
->
pTableCheckInfo
);
assert
(
pQueryHandle
->
activeIndex
<
size
&&
pQueryHandle
->
activeIndex
>=
0
&&
size
>=
1
);
STableCheckInfo
*
pCheckInfo
=
taosArrayGet
(
pQueryHandle
->
pTableCheckInfo
,
pQueryHandle
->
activeIndex
);
int64_t
rows
=
0
;
SMemRef
*
pMemRef
=
pQueryHandle
->
pMemRef
;
if
(
pMemRef
==
NULL
)
{
return
rows
;
}
STableData
*
pMem
=
NULL
;
STableData
*
pIMem
=
NULL
;
SMemTable
*
pMemT
=
(
SMemTable
*
)(
pMemRef
->
mem
);
SMemTable
*
pIMemT
=
(
SMemTable
*
)(
pMemRef
->
imem
);
if
(
pMemT
&&
pCheckInfo
->
tableId
.
tid
<
pMemT
->
maxTables
)
{
pMem
=
pMemT
->
tData
[
pCheckInfo
->
tableId
.
tid
];
rows
+=
(
pMem
&&
pMem
->
uid
==
pCheckInfo
->
tableId
.
uid
)
?
pMem
->
numOfRows
:
0
;
}
if
(
pIMemT
&&
pCheckInfo
->
tableId
.
tid
<
pIMemT
->
maxTables
)
{
pIMem
=
pIMemT
->
tData
[
pCheckInfo
->
tableId
.
tid
];
rows
+=
(
pIMem
&&
pIMem
->
uid
==
pCheckInfo
->
tableId
.
uid
)
?
pIMem
->
numOfRows
:
0
;
}
return
rows
;
}
static
SArray
*
createCheckInfoFromTableGroup
(
STsdbQueryHandle
*
pQueryHandle
,
STableGroupInfo
*
pGroupList
,
STsdbMeta
*
pMeta
)
{
static
SArray
*
createCheckInfoFromTableGroup
(
STsdbQueryHandle
*
pQueryHandle
,
STableGroupInfo
*
pGroupList
,
STsdbMeta
*
pMeta
)
{
size_t
sizeOfGroup
=
taosArrayGetSize
(
pGroupList
->
pGroupList
);
size_t
sizeOfGroup
=
taosArrayGetSize
(
pGroupList
->
pGroupList
);
assert
(
sizeOfGroup
>=
1
&&
pMeta
!=
NULL
);
assert
(
sizeOfGroup
>=
1
&&
pMeta
!=
NULL
);
...
@@ -294,6 +327,7 @@ static STsdbQueryHandle* tsdbQueryTablesImpl(TSDB_REPO_T* tsdb, STsdbQueryCond*
...
@@ -294,6 +327,7 @@ static STsdbQueryHandle* tsdbQueryTablesImpl(TSDB_REPO_T* tsdb, STsdbQueryCond*
pQueryHandle
->
allocSize
=
0
;
pQueryHandle
->
allocSize
=
0
;
pQueryHandle
->
locateStart
=
false
;
pQueryHandle
->
locateStart
=
false
;
pQueryHandle
->
pMemRef
=
pMemRef
;
pQueryHandle
->
pMemRef
=
pMemRef
;
pQueryHandle
->
loadExternalRow
=
pCond
->
loadExternalRows
;
if
(
tsdbInitReadHelper
(
&
pQueryHandle
->
rhelper
,
(
STsdbRepo
*
)
tsdb
)
!=
0
)
{
if
(
tsdbInitReadHelper
(
&
pQueryHandle
->
rhelper
,
(
STsdbRepo
*
)
tsdb
)
!=
0
)
{
goto
out_of_memory
;
goto
out_of_memory
;
...
@@ -410,10 +444,11 @@ SArray* tsdbGetQueriedTableList(TsdbQueryHandleT *pHandle) {
...
@@ -410,10 +444,11 @@ SArray* tsdbGetQueriedTableList(TsdbQueryHandleT *pHandle) {
TsdbQueryHandleT
tsdbQueryRowsInExternalWindow
(
TSDB_REPO_T
*
tsdb
,
STsdbQueryCond
*
pCond
,
STableGroupInfo
*
groupList
,
void
*
qinfo
,
SMemRef
*
pRef
)
{
TsdbQueryHandleT
tsdbQueryRowsInExternalWindow
(
TSDB_REPO_T
*
tsdb
,
STsdbQueryCond
*
pCond
,
STableGroupInfo
*
groupList
,
void
*
qinfo
,
SMemRef
*
pRef
)
{
STsdbQueryHandle
*
pQueryHandle
=
(
STsdbQueryHandle
*
)
tsdbQueryTables
(
tsdb
,
pCond
,
groupList
,
qinfo
,
pRef
);
STsdbQueryHandle
*
pQueryHandle
=
(
STsdbQueryHandle
*
)
tsdbQueryTables
(
tsdb
,
pCond
,
groupList
,
qinfo
,
pRef
);
pQueryHandle
->
loadExternalRow
=
true
;
if
(
pQueryHandle
!=
NULL
)
{
if
(
pQueryHandle
!=
NULL
)
{
pQueryHandle
->
type
=
TSDB_QUERY_TYPE_EXTERNAL
;
changeQueryHandleForInterpQuery
(
pQueryHandle
);
changeQueryHandleForInterpQuery
(
pQueryHandle
);
}
}
return
pQueryHandle
;
return
pQueryHandle
;
}
}
...
@@ -1900,17 +1935,21 @@ static bool doHasDataInBuffer(STsdbQueryHandle* pQueryHandle) {
...
@@ -1900,17 +1935,21 @@ static bool doHasDataInBuffer(STsdbQueryHandle* pQueryHandle) {
pQueryHandle
->
activeIndex
+=
1
;
pQueryHandle
->
activeIndex
+=
1
;
}
}
if
(
pQueryHandle
->
loadExternalRow
&&
pQueryHandle
->
window
.
skey
==
pQueryHandle
->
window
.
ekey
)
{
SMemRef
*
pMemRef
=
pQueryHandle
->
pMemRef
;
doGetExternalRow
(
pQueryHandle
,
TSDB_PREV_ROW
,
pMemRef
);
doGetExternalRow
(
pQueryHandle
,
TSDB_NEXT_ROW
,
pMemRef
);
}
// no data in memtable or imemtable, decrease the memory reference.
// no data in memtable or imemtable, decrease the memory reference.
tsdbMayUnTakeMemSnapshot
(
pQueryHandle
);
tsdbMayUnTakeMemSnapshot
(
pQueryHandle
);
return
false
;
return
false
;
}
}
//todo not unref yet, since it is not support multi-group interpolation query
static
void
changeQueryHandleForInterpQuery
(
TsdbQueryHandleT
pHandle
)
{
static
void
changeQueryHandleForInterpQuery
(
TsdbQueryHandleT
pHandle
)
{
// filter the queried time stamp in the first place
// filter the queried time stamp in the first place
STsdbQueryHandle
*
pQueryHandle
=
(
STsdbQueryHandle
*
)
pHandle
;
STsdbQueryHandle
*
pQueryHandle
=
(
STsdbQueryHandle
*
)
pHandle
;
pQueryHandle
->
order
=
TSDB_ORDER_DESC
;
assert
(
pQueryHandle
->
window
.
skey
==
pQueryHandle
->
window
.
ekey
);
// starts from the buffer in case of descending timestamp order check data blocks
// starts from the buffer in case of descending timestamp order check data blocks
size_t
numOfTables
=
taosArrayGetSize
(
pQueryHandle
->
pTableCheckInfo
);
size_t
numOfTables
=
taosArrayGetSize
(
pQueryHandle
->
pTableCheckInfo
);
...
@@ -1920,8 +1959,8 @@ static void changeQueryHandleForInterpQuery(TsdbQueryHandleT pHandle) {
...
@@ -1920,8 +1959,8 @@ static void changeQueryHandleForInterpQuery(TsdbQueryHandleT pHandle) {
STableCheckInfo
*
pCheckInfo
=
taosArrayGet
(
pQueryHandle
->
pTableCheckInfo
,
i
);
STableCheckInfo
*
pCheckInfo
=
taosArrayGet
(
pQueryHandle
->
pTableCheckInfo
,
i
);
// the first qualified table for interpolation query
// the first qualified table for interpolation query
if
(
pQueryHandle
->
window
.
skey
<=
pCheckInfo
->
pTableObj
->
lastKey
&&
if
(
(
pQueryHandle
->
window
.
skey
<=
pCheckInfo
->
pTableObj
->
lastKey
)
&&
pCheckInfo
->
pTableObj
->
lastKey
!=
TSKEY_INITIAL_VAL
)
{
(
pCheckInfo
->
pTableObj
->
lastKey
!=
TSKEY_INITIAL_VAL
)
)
{
break
;
break
;
}
}
...
@@ -1938,9 +1977,6 @@ static void changeQueryHandleForInterpQuery(TsdbQueryHandleT pHandle) {
...
@@ -1938,9 +1977,6 @@ static void changeQueryHandleForInterpQuery(TsdbQueryHandleT pHandle) {
info
.
lastKey
=
pQueryHandle
->
window
.
skey
;
info
.
lastKey
=
pQueryHandle
->
window
.
skey
;
taosArrayPush
(
pQueryHandle
->
pTableCheckInfo
,
&
info
);
taosArrayPush
(
pQueryHandle
->
pTableCheckInfo
,
&
info
);
// update the query time window according to the chosen last timestamp
pQueryHandle
->
window
=
(
STimeWindow
)
{
info
.
lastKey
,
TSKEY_INITIAL_VAL
};
}
}
static
int
tsdbReadRowsFromCache
(
STableCheckInfo
*
pCheckInfo
,
TSKEY
maxKey
,
int
maxRowsToRead
,
STimeWindow
*
win
,
static
int
tsdbReadRowsFromCache
(
STableCheckInfo
*
pCheckInfo
,
TSKEY
maxKey
,
int
maxRowsToRead
,
STimeWindow
*
win
,
...
@@ -2020,7 +2056,6 @@ static void destroyHelper(void* param) {
...
@@ -2020,7 +2056,6 @@ static void destroyHelper(void* param) {
return
;
return
;
}
}
tQueryInfo
*
pInfo
=
(
tQueryInfo
*
)
param
;
tQueryInfo
*
pInfo
=
(
tQueryInfo
*
)
param
;
if
(
pInfo
->
optr
!=
TSDB_RELATION_IN
)
{
if
(
pInfo
->
optr
!=
TSDB_RELATION_IN
)
{
tfree
(
pInfo
->
q
);
tfree
(
pInfo
->
q
);
...
@@ -2029,113 +2064,82 @@ static void destroyHelper(void* param) {
...
@@ -2029,113 +2064,82 @@ static void destroyHelper(void* param) {
free
(
param
);
free
(
param
);
}
}
static
bool
getNeighborRows
(
STsdbQueryHandle
*
pQueryHandle
)
{
// handle data in cache situation
assert
(
pQueryHandle
->
type
==
TSDB_QUERY_TYPE_EXTERNAL
);
bool
tsdbNextDataBlock
(
TsdbQueryHandleT
*
pHandle
)
{
STsdbQueryHandle
*
pQueryHandle
=
(
STsdbQueryHandle
*
)
pHandle
;
SDataBlockInfo
blockInfo
=
{{
0
},
0
};
pQueryHandle
->
type
=
TSDB_QUERY_TYPE_ALL
;
pQueryHandle
->
order
=
TSDB_ORDER_DESC
;
if
(
!
tsdbNextDataBlock
((
void
*
)
pQueryHandle
))
{
int64_t
stime
=
taosGetTimestampUs
();
return
false
;
int64_t
elapsedTime
=
stime
;
}
tsdbRetrieveDataBlockInfo
((
void
*
)
pQueryHandle
,
&
blockInfo
);
size_t
numOfTables
=
taosArrayGetSize
(
pQueryHandle
->
pTableCheckInfo
);
/*SArray *pDataBlock = */
tsdbRetrieveDataBlock
((
void
*
)
pQueryHandle
,
pQueryHandle
->
defaultLoadColumn
);
assert
(
numOfTables
>
0
);
if
(
terrno
!=
TSDB_CODE_SUCCESS
)
{
return
false
;
}
if
(
pQueryHandle
->
cur
.
win
.
ekey
==
pQueryHandle
->
window
.
skey
)
{
if
(
pQueryHandle
->
type
==
TSDB_QUERY_TYPE_LAST
&&
pQueryHandle
->
cachelastrow
)
{
// data already retrieve, discard other data rows and return
// the last row is cached in buffer, return it directly.
int32_t
numOfCols
=
(
int32_t
)(
QH_GET_NUM_OF_COLS
(
pQueryHandle
));
// here note that the pQueryHandle->window must be the TS_INITIALIZER
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
int32_t
numOfCols
=
(
int32_t
)(
QH_GET_NUM_OF_COLS
(
pQueryHandle
));
SColumnInfoData
*
pCol
=
taosArrayGet
(
pQueryHandle
->
pColumns
,
i
);
SQueryFilePos
*
cur
=
&
pQueryHandle
->
cur
;
memcpy
((
char
*
)
pCol
->
pData
,
(
char
*
)
pCol
->
pData
+
pCol
->
info
.
bytes
*
(
pQueryHandle
->
cur
.
rows
-
1
),
pCol
->
info
.
bytes
);
}
pQueryHandle
->
cur
.
win
=
(
STimeWindow
){
pQueryHandle
->
window
.
skey
,
pQueryHandle
->
window
.
skey
};
SDataRow
pRow
=
NULL
;
pQueryHandle
->
window
=
pQueryHandle
->
cur
.
win
;
TSKEY
key
=
TSKEY_INITIAL_VAL
;
pQueryHandle
->
cur
.
rows
=
1
;
int32_t
step
=
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
)
?
1
:-
1
;
pQueryHandle
->
type
=
TSDB_QUERY_TYPE_ALL
;
return
true
;
}
else
{
STimeWindow
win
=
(
STimeWindow
)
{
pQueryHandle
->
window
.
skey
,
INT64_MAX
};
STsdbQueryCond
cond
=
{
.
order
=
TSDB_ORDER_ASC
,
.
numOfCols
=
(
int32_t
)(
QH_GET_NUM_OF_COLS
(
pQueryHandle
))
};
cond
.
twindow
=
win
;
cond
.
colList
=
calloc
(
cond
.
numOfCols
,
sizeof
(
SColumnInfo
));
if
(
cond
.
colList
==
NULL
)
{
terrno
=
TSDB_CODE_QRY_OUT_OF_MEMORY
;
return
false
;
}
for
(
int32_t
i
=
0
;
i
<
cond
.
numOfCols
;
++
i
)
{
if
(
++
pQueryHandle
->
activeIndex
<
numOfTables
)
{
SColumnInfoData
*
pColInfoData
=
taosArrayGet
(
pQueryHandle
->
pColumns
,
i
);
STableCheckInfo
*
pCheckInfo
=
taosArrayGet
(
pQueryHandle
->
pTableCheckInfo
,
pQueryHandle
->
activeIndex
);
memcpy
(
&
cond
.
colList
[
i
],
&
pColInfoData
->
info
,
sizeof
(
SColumnInfo
));
int32_t
ret
=
tsdbGetCachedLastRow
(
pCheckInfo
->
pTableObj
,
&
pRow
,
&
key
);
}
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
return
false
;
}
STsdbQueryHandle
*
pSecQueryHandle
=
tsdbQueryTablesImpl
(
pQueryHandle
->
pTsdb
,
&
cond
,
pQueryHandle
->
qinfo
,
pQueryHandle
->
pMemRef
);
copyOneRowFromMem
(
pQueryHandle
,
pQueryHandle
->
outputCapacity
,
0
,
pRow
,
numOfCols
,
pCheckInfo
->
pTableObj
);
tfree
(
pRow
);
tfree
(
cond
.
colList
);
// update the last key value
pCheckInfo
->
lastKey
=
key
+
step
;
pSecQueryHandle
->
pTableCheckInfo
=
createCheckInfoFromCheckInfo
(
pQueryHandle
->
pTableCheckInfo
,
pSecQueryHandle
->
window
.
skey
);
cur
->
rows
=
1
;
// only one row
if
(
pSecQueryHandle
->
pTableCheckInfo
==
NULL
)
{
cur
->
lastKey
=
key
+
step
;
tsdbCleanupQueryHandle
(
pSecQueryHandle
)
;
cur
->
mixBlock
=
true
;
return
false
;
cur
->
win
.
skey
=
key
;
}
cur
->
win
.
ekey
=
key
;
if
(
!
tsdbNextDataBlock
((
void
*
)
pSecQueryHandle
))
{
return
true
;
tsdbCleanupQueryHandle
(
pSecQueryHandle
);
return
false
;
}
}
tsdbRetrieveDataBlockInfo
((
void
*
)
pSecQueryHandle
,
&
blockInfo
);
return
false
;
tsdbRetrieveDataBlock
((
void
*
)
pSecQueryHandle
,
pSecQueryHandle
->
defaultLoadColumn
);
}
int32_t
numOfCols
=
(
int32_t
)(
QH_GET_NUM_OF_COLS
(
pSecQueryHandle
));
size_t
si
=
taosArrayGetSize
(
pSecQueryHandle
->
pTableCheckInfo
);
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
if
(
pQueryHandle
->
checkFiles
)
{
SColumnInfoData
*
pCol
=
taosArrayGet
(
pQueryHandle
->
pColumns
,
i
);
// check if the query range overlaps with the file data block
memcpy
((
char
*
)
pCol
->
pData
,
(
char
*
)
pCol
->
pData
+
pCol
->
info
.
bytes
*
(
pQueryHandle
->
cur
.
rows
-
1
),
pCol
->
info
.
bytes
)
;
bool
exists
=
true
;
SColumnInfoData
*
pCol1
=
taosArrayGet
(
pSecQueryHandle
->
pColumns
,
i
);
int32_t
code
=
getDataBlocksInFiles
(
pQueryHandle
,
&
exists
);
assert
(
pCol
->
info
.
colId
==
pCol1
->
info
.
colId
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
pQueryHandle
->
activeIndex
=
0
;
pQueryHandle
->
checkFiles
=
false
;
memcpy
((
char
*
)
pCol
->
pData
+
pCol
->
info
.
bytes
,
pCol1
->
pData
,
pCol1
->
info
.
bytes
)
;
return
false
;
}
}
SColumnInfoData
*
pTSCol
=
taosArrayGet
(
pQueryHandle
->
pColumns
,
0
);
if
(
exists
)
{
pQueryHandle
->
cost
.
checkForNextTime
+=
(
taosGetTimestampUs
()
-
stime
);
// it is ascending order
return
exists
;
pQueryHandle
->
order
=
TSDB_ORDER_DESC
;
pQueryHandle
->
window
=
pQueryHandle
->
cur
.
win
;
pQueryHandle
->
cur
.
win
=
(
STimeWindow
){((
TSKEY
*
)
pTSCol
->
pData
)[
0
],
((
TSKEY
*
)
pTSCol
->
pData
)[
1
]};
pQueryHandle
->
cur
.
rows
=
2
;
pQueryHandle
->
cur
.
mixBlock
=
true
;
int32_t
step
=
-
1
;
// one step for ascending order traverse
for
(
int32_t
j
=
0
;
j
<
si
;
++
j
)
{
STableCheckInfo
*
pCheckInfo
=
(
STableCheckInfo
*
)
taosArrayGet
(
pQueryHandle
->
pTableCheckInfo
,
j
);
pCheckInfo
->
lastKey
=
pQueryHandle
->
cur
.
win
.
ekey
+
step
;
}
}
tsdbCleanupQueryHandle
(
pSecQueryHandle
);
pQueryHandle
->
activeIndex
=
0
;
pQueryHandle
->
checkFiles
=
false
;
}
}
//disable it after retrieve data
// TODO: opt by consider the scan order
pQueryHandle
->
type
=
TSDB_QUERY_TYPE_EXTERNAL
;
bool
ret
=
doHasDataInBuffer
(
pQueryHandle
);
pQueryHandle
->
checkFiles
=
false
;
terrno
=
TSDB_CODE_SUCCESS
;
return
true
;
elapsedTime
=
taosGetTimestampUs
()
-
stime
;
pQueryHandle
->
cost
.
checkForNextTime
+=
elapsedTime
;
return
ret
;
}
}
// handle data in cache situation
bool
tsdbNextDataBlockWithoutMerge
(
TsdbQueryHandleT
*
pHandle
)
{
bool
tsdbNextDataBlock
(
TsdbQueryHandleT
*
pHandle
)
{
STsdbQueryHandle
*
pQueryHandle
=
(
STsdbQueryHandle
*
)
pHandle
;
STsdbQueryHandle
*
pQueryHandle
=
(
STsdbQueryHandle
*
)
pHandle
;
int64_t
stime
=
taosGetTimestampUs
();
int64_t
stime
=
taosGetTimestampUs
();
...
@@ -2209,13 +2213,118 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) {
...
@@ -2209,13 +2213,118 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) {
pQueryHandle
->
checkFiles
=
false
;
pQueryHandle
->
checkFiles
=
false
;
}
}
// TODO: opt by consider the scan order
bool
ret
=
doHasDataInBuffer
(
pQueryHandle
);
terrno
=
TSDB_CODE_SUCCESS
;
elapsedTime
=
taosGetTimestampUs
()
-
stime
;
elapsedTime
=
taosGetTimestampUs
()
-
stime
;
pQueryHandle
->
cost
.
checkForNextTime
+=
elapsedTime
;
pQueryHandle
->
cost
.
checkForNextTime
+=
elapsedTime
;
return
ret
;
return
false
;
}
static
int32_t
doGetExternalRow
(
STsdbQueryHandle
*
pQueryHandle
,
int16_t
type
,
SMemRef
*
pMemRef
)
{
STsdbQueryHandle
*
pSecQueryHandle
=
NULL
;
if
(
type
==
TSDB_PREV_ROW
&&
pQueryHandle
->
prev
)
{
return
TSDB_CODE_SUCCESS
;
}
if
(
type
==
TSDB_NEXT_ROW
&&
pQueryHandle
->
next
)
{
return
TSDB_CODE_SUCCESS
;
}
// prepare the structure
int32_t
numOfCols
=
(
int32_t
)
QH_GET_NUM_OF_COLS
(
pQueryHandle
);
if
(
type
==
TSDB_PREV_ROW
)
{
pQueryHandle
->
prev
=
taosArrayInit
(
numOfCols
,
sizeof
(
SColumnInfoData
));
if
(
pQueryHandle
->
prev
==
NULL
)
{
terrno
=
TSDB_CODE_QRY_OUT_OF_MEMORY
;
goto
out_of_memory
;
}
}
else
{
pQueryHandle
->
next
=
taosArrayInit
(
numOfCols
,
sizeof
(
SColumnInfoData
));
if
(
pQueryHandle
->
next
==
NULL
)
{
terrno
=
TSDB_CODE_QRY_OUT_OF_MEMORY
;
goto
out_of_memory
;
}
}
SArray
*
row
=
(
type
==
TSDB_PREV_ROW
)
?
pQueryHandle
->
prev
:
pQueryHandle
->
next
;
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
SColumnInfoData
*
pCol
=
taosArrayGet
(
pQueryHandle
->
pColumns
,
i
);
SColumnInfoData
colInfo
=
{{
0
},
0
};
colInfo
.
info
=
pCol
->
info
;
colInfo
.
pData
=
calloc
(
1
,
pCol
->
info
.
bytes
);
if
(
colInfo
.
pData
==
NULL
)
{
terrno
=
TSDB_CODE_QRY_OUT_OF_MEMORY
;
goto
out_of_memory
;
}
taosArrayPush
(
row
,
&
colInfo
);
}
// load the previous row
STsdbQueryCond
cond
=
{.
numOfCols
=
numOfCols
,
.
loadExternalRows
=
false
,};
if
(
type
==
TSDB_PREV_ROW
)
{
cond
.
order
=
TSDB_ORDER_DESC
;
cond
.
twindow
=
(
STimeWindow
){
pQueryHandle
->
window
.
skey
,
INT64_MIN
};
}
else
{
cond
.
order
=
TSDB_ORDER_ASC
;
cond
.
twindow
=
(
STimeWindow
){
pQueryHandle
->
window
.
skey
,
INT64_MAX
};
}
cond
.
colList
=
calloc
(
cond
.
numOfCols
,
sizeof
(
SColumnInfo
));
if
(
cond
.
colList
==
NULL
)
{
terrno
=
TSDB_CODE_QRY_OUT_OF_MEMORY
;
goto
out_of_memory
;
}
for
(
int32_t
i
=
0
;
i
<
cond
.
numOfCols
;
++
i
)
{
SColumnInfoData
*
pColInfoData
=
taosArrayGet
(
pQueryHandle
->
pColumns
,
i
);
memcpy
(
&
cond
.
colList
[
i
],
&
pColInfoData
->
info
,
sizeof
(
SColumnInfo
));
}
pSecQueryHandle
=
tsdbQueryTablesImpl
(
pQueryHandle
->
pTsdb
,
&
cond
,
pQueryHandle
->
qinfo
,
pMemRef
);
tfree
(
cond
.
colList
);
pSecQueryHandle
->
pTableCheckInfo
=
createCheckInfoFromCheckInfo
(
pQueryHandle
->
pTableCheckInfo
,
pSecQueryHandle
->
window
.
skey
);
if
(
pSecQueryHandle
->
pTableCheckInfo
==
NULL
)
{
terrno
=
TSDB_CODE_QRY_OUT_OF_MEMORY
;
goto
out_of_memory
;
}
if
(
!
tsdbNextDataBlock
((
void
*
)
pSecQueryHandle
))
{
// no result in current query, free the corresponding result rows structure
if
(
type
==
TSDB_PREV_ROW
)
{
pQueryHandle
->
prev
=
doFreeColumnInfoData
(
pQueryHandle
->
prev
);
}
else
{
pQueryHandle
->
next
=
doFreeColumnInfoData
(
pQueryHandle
->
next
);
}
goto
out_of_memory
;
}
SDataBlockInfo
blockInfo
=
{{
0
},
0
};
tsdbRetrieveDataBlockInfo
((
void
*
)
pSecQueryHandle
,
&
blockInfo
);
tsdbRetrieveDataBlock
((
void
*
)
pSecQueryHandle
,
pSecQueryHandle
->
defaultLoadColumn
);
row
=
(
type
==
TSDB_PREV_ROW
)
?
pQueryHandle
->
prev
:
pQueryHandle
->
next
;
int32_t
pos
=
(
type
==
TSDB_PREV_ROW
)
?
pSecQueryHandle
->
cur
.
rows
-
1
:
0
;
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
SColumnInfoData
*
pCol
=
taosArrayGet
(
row
,
i
);
SColumnInfoData
*
s
=
taosArrayGet
(
pSecQueryHandle
->
pColumns
,
i
);
memcpy
((
char
*
)
pCol
->
pData
,
(
char
*
)
s
->
pData
+
s
->
info
.
bytes
*
pos
,
pCol
->
info
.
bytes
);
}
out_of_memory:
tsdbCleanupQueryHandle
(
pSecQueryHandle
);
return
terrno
;
}
SArray
*
tsdbGetExternalRow
(
TsdbQueryHandleT
*
pHandle
,
SMemRef
*
pMemRef
,
int16_t
type
)
{
STsdbQueryHandle
*
pQueryHandle
=
(
STsdbQueryHandle
*
)
pHandle
;
assert
(
type
==
TSDB_PREV_ROW
||
type
==
TSDB_NEXT_ROW
);
return
(
type
==
TSDB_PREV_ROW
)
?
pQueryHandle
->
prev
:
pQueryHandle
->
next
;
}
}
/*
/*
...
@@ -2716,7 +2825,7 @@ static int32_t doQueryTableList(STable* pSTable, SArray* pRes, tExprNode* pExpr)
...
@@ -2716,7 +2825,7 @@ static int32_t doQueryTableList(STable* pSTable, SArray* pRes, tExprNode* pExpr)
};
};
getTableListfromSkipList
(
pExpr
,
pSTable
->
pIndex
,
pRes
,
&
supp
);
getTableListfromSkipList
(
pExpr
,
pSTable
->
pIndex
,
pRes
,
&
supp
);
tExprTreeDestroy
(
&
pExpr
,
destroyHelper
);
tExprTreeDestroy
(
pExpr
,
destroyHelper
);
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
@@ -2773,10 +2882,10 @@ int32_t tsdbQuerySTableByTagCond(TSDB_REPO_T* tsdb, uint64_t uid, TSKEY skey, co
...
@@ -2773,10 +2882,10 @@ int32_t tsdbQuerySTableByTagCond(TSDB_REPO_T* tsdb, uint64_t uid, TSKEY skey, co
if
(
expr
==
NULL
)
{
if
(
expr
==
NULL
)
{
expr
=
exprTreeFromBinary
(
pTagCond
,
len
);
expr
=
exprTreeFromBinary
(
pTagCond
,
len
);
}
else
{
}
else
{
CLEANUP_PUSH_VOID_PTR_PTR
(
true
,
tExpr
Nod
eDestroy
,
expr
,
NULL
);
CLEANUP_PUSH_VOID_PTR_PTR
(
true
,
tExpr
Tre
eDestroy
,
expr
,
NULL
);
tExprNode
*
tagExpr
=
exprTreeFromBinary
(
pTagCond
,
len
);
tExprNode
*
tagExpr
=
exprTreeFromBinary
(
pTagCond
,
len
);
if
(
tagExpr
!=
NULL
)
{
if
(
tagExpr
!=
NULL
)
{
CLEANUP_PUSH_VOID_PTR_PTR
(
true
,
tExpr
Nod
eDestroy
,
tagExpr
,
NULL
);
CLEANUP_PUSH_VOID_PTR_PTR
(
true
,
tExpr
Tre
eDestroy
,
tagExpr
,
NULL
);
tExprNode
*
tbnameExpr
=
expr
;
tExprNode
*
tbnameExpr
=
expr
;
expr
=
calloc
(
1
,
sizeof
(
tExprNode
));
expr
=
calloc
(
1
,
sizeof
(
tExprNode
));
if
(
expr
==
NULL
)
{
if
(
expr
==
NULL
)
{
...
@@ -2890,6 +2999,21 @@ int32_t tsdbGetTableGroupFromIdList(TSDB_REPO_T* tsdb, SArray* pTableIdList, STa
...
@@ -2890,6 +2999,21 @@ int32_t tsdbGetTableGroupFromIdList(TSDB_REPO_T* tsdb, SArray* pTableIdList, STa
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
void
*
doFreeColumnInfoData
(
SArray
*
pColumnInfoData
)
{
if
(
pColumnInfoData
==
NULL
)
{
return
NULL
;
}
size_t
cols
=
taosArrayGetSize
(
pColumnInfoData
);
for
(
int32_t
i
=
0
;
i
<
cols
;
++
i
)
{
SColumnInfoData
*
pColInfo
=
taosArrayGet
(
pColumnInfoData
,
i
);
tfree
(
pColInfo
->
pData
);
}
taosArrayDestroy
(
pColumnInfoData
);
return
NULL
;
}
void
tsdbCleanupQueryHandle
(
TsdbQueryHandleT
queryHandle
)
{
void
tsdbCleanupQueryHandle
(
TsdbQueryHandleT
queryHandle
)
{
STsdbQueryHandle
*
pQueryHandle
=
(
STsdbQueryHandle
*
)
queryHandle
;
STsdbQueryHandle
*
pQueryHandle
=
(
STsdbQueryHandle
*
)
queryHandle
;
if
(
pQueryHandle
==
NULL
)
{
if
(
pQueryHandle
==
NULL
)
{
...
@@ -2907,14 +3031,7 @@ void tsdbCleanupQueryHandle(TsdbQueryHandleT queryHandle) {
...
@@ -2907,14 +3031,7 @@ void tsdbCleanupQueryHandle(TsdbQueryHandleT queryHandle) {
taosArrayDestroy
(
pQueryHandle
->
pTableCheckInfo
);
taosArrayDestroy
(
pQueryHandle
->
pTableCheckInfo
);
}
}
if
(
pQueryHandle
->
pColumns
!=
NULL
)
{
pQueryHandle
->
pColumns
=
doFreeColumnInfoData
(
pQueryHandle
->
pColumns
);
size_t
cols
=
taosArrayGetSize
(
pQueryHandle
->
pColumns
);
for
(
int32_t
i
=
0
;
i
<
cols
;
++
i
)
{
SColumnInfoData
*
pColInfo
=
taosArrayGet
(
pQueryHandle
->
pColumns
,
i
);
tfree
(
pColInfo
->
pData
);
}
taosArrayDestroy
(
pQueryHandle
->
pColumns
);
}
taosArrayDestroy
(
pQueryHandle
->
defaultLoadColumn
);
taosArrayDestroy
(
pQueryHandle
->
defaultLoadColumn
);
tfree
(
pQueryHandle
->
pDataBlockInfo
);
tfree
(
pQueryHandle
->
pDataBlockInfo
);
...
@@ -2928,6 +3045,9 @@ void tsdbCleanupQueryHandle(TsdbQueryHandleT queryHandle) {
...
@@ -2928,6 +3045,9 @@ void tsdbCleanupQueryHandle(TsdbQueryHandleT queryHandle) {
tdFreeDataCols
(
pQueryHandle
->
pDataCols
);
tdFreeDataCols
(
pQueryHandle
->
pDataCols
);
pQueryHandle
->
pDataCols
=
NULL
;
pQueryHandle
->
pDataCols
=
NULL
;
pQueryHandle
->
prev
=
doFreeColumnInfoData
(
pQueryHandle
->
prev
);
pQueryHandle
->
next
=
doFreeColumnInfoData
(
pQueryHandle
->
next
);
SIOCostSummary
*
pCost
=
&
pQueryHandle
->
cost
;
SIOCostSummary
*
pCost
=
&
pQueryHandle
->
cost
;
tsdbDebug
(
"%p :io-cost summary: statis-info:%"
PRId64
" us, datablock:%"
PRId64
" us, check data:%"
PRId64
" us, %p"
,
tsdbDebug
(
"%p :io-cost summary: statis-info:%"
PRId64
" us, datablock:%"
PRId64
" us, check data:%"
PRId64
" us, %p"
,
pQueryHandle
,
pCost
->
statisInfoLoadTime
,
pCost
->
blockLoadTime
,
pCost
->
checkForNextTime
,
pQueryHandle
->
qinfo
);
pQueryHandle
,
pCost
->
statisInfoLoadTime
,
pCost
->
blockLoadTime
,
pCost
->
checkForNextTime
,
pQueryHandle
->
qinfo
);
...
...
src/util/inc/tstoken.h
浏览文件 @
e7614def
...
@@ -27,6 +27,9 @@ extern "C" {
...
@@ -27,6 +27,9 @@ extern "C" {
#define TSQL_TBNAME "TBNAME"
#define TSQL_TBNAME "TBNAME"
#define TSQL_TBNAME_L "tbname"
#define TSQL_TBNAME_L "tbname"
#define TSQL_BLOCK_DIST "_BLOCK_DIST"
#define TSQL_BLOCK_DIST_L "_block_dist"
// used to denote the minimum unite in sql parsing
// used to denote the minimum unite in sql parsing
typedef
struct
SStrToken
{
typedef
struct
SStrToken
{
uint32_t
n
;
uint32_t
n
;
...
...
src/util/src/tref.c
浏览文件 @
e7614def
...
@@ -274,7 +274,7 @@ void *taosIterateRef(int rsetId, int64_t rid) {
...
@@ -274,7 +274,7 @@ void *taosIterateRef(int rsetId, int64_t rid) {
return
NULL
;
return
NULL
;
}
}
if
(
rid
<
=
0
)
{
if
(
rid
<
0
)
{
uTrace
(
"rsetId:%d rid:%"
PRId64
" failed to iterate, rid not valid"
,
rsetId
,
rid
);
uTrace
(
"rsetId:%d rid:%"
PRId64
" failed to iterate, rid not valid"
,
rsetId
,
rid
);
terrno
=
TSDB_CODE_REF_NOT_EXIST
;
terrno
=
TSDB_CODE_REF_NOT_EXIST
;
return
NULL
;
return
NULL
;
...
...
tests/script/general/parser/interp_test.sim
浏览文件 @
e7614def
...
@@ -638,209 +638,293 @@ if $data24 != NULL then
...
@@ -638,209 +638,293 @@ if $data24 != NULL then
return -1
return -1
endi
endi
## interp(*) from stb + group by + fill(prev)
## interp(*) from stb + group by + fill(prev)
$t = $ts0 + 1000
$t = $ts0 + 1000
sql select interp(*) from $stb where ts = $t fill(prev) group by tbname
sql select interp(*) from $stb where ts = $t fill(prev) group by tbname
print ====== 0:$data00, 1:$data01, 2:$data02, 3:$data03, 4:$data04, 5:$data05, 6:$data06, 7:$data07, 8:$data08, 9:$data09
print ====== 0:$data00, 1:$data01, 2:$data02, 3:$data03, 4:$data04, 5:$data05, 6:$data06, 7:$data07, 8:$data08, 9:$data09
print ====== 0:$data20, 1:$data21, 2:$data22, 3:$data23, 4:$data24, 5:$data25, 6:$data26, 7:$data27, 8:$data28, 9:$data29
print ====== 0:$data20, 1:$data21, 2:$data22, 3:$data23, 4:$data24, 5:$data25, 6:$data26, 7:$data27, 8:$data28, 9:$data29
if $rows != $tbNum then
if $rows != $tbNum then
return -1
return -1
endi
endi
if $data00 != @18-09-17 09:00:01.000@ then
if $data00 != @18-09-17 09:00:01.000@ then
return -1
return -1
endi
endi
if $data01 != 0 then
if $data01 != 0 then
return -1
return -1
endi
endi
if $data02 != 0 then
if $data02 != 0 then
return -1
return -1
endi
endi
if $data03 != 0.00000 then
if $data03 != 0.00000 then
return -1
return -1
endi
endi
if $data04 != 0.000000000 then
if $data04 != 0.000000000 then
return -1
return -1
endi
endi
if $data05 != 0 then
if $data05 != 0 then
return -1
return -1
endi
endi
if $data06 != 0 then
if $data06 != 0 then
return -1
return -1
endi
endi
if $data07 != 1 then
if $data07 != 1 then
return -1
return -1
endi
endi
if $data08 != binary0 then
if $data08 != binary0 then
return -1
return -1
endi
endi
if $data09 != nchar0 then
if $data09 != nchar0 then
return -1
return -1
endi
endi
if $data20 != @18-09-17 09:00:01.000@ then
if $data20 != @18-09-17 09:00:01.000@ then
return -1
return -1
endi
endi
if $data21 != 0 then
if $data21 != 0 then
return -1
return -1
endi
endi
if $data22 != NULL then
if $data22 != NULL then
return -1
return -1
endi
endi
if $data23 != 0.00000 then
if $data23 != 0.00000 then
return -1
return -1
endi
endi
if $data24 != NULL then
if $data24 != NULL then
return -1
return -1
endi
endi
if $data25 != 0 then
if $data25 != 0 then
return -1
return -1
endi
endi
if $data26 != 0 then
if $data26 != 0 then
return -1
return -1
endi
endi
if $data27 != 1 then
if $data27 != 1 then
return -1
return -1
endi
endi
if $data28 != binary0 then
if $data28 != binary0 then
return -1
return -1
endi
endi
if $data29 != nchar0 then
if $data29 != nchar0 then
return -1
return -1
endi
endi
## interp(*) from stb + group by + fill(linear)
## interp(*) from stb + group by + fill(linear)
$t = $ts0 + 1000
$t = $ts0 + 1000
sql select interp(*) from $stb where ts = $t fill(linear) group by tbname
sql select interp(*) from $stb where ts = $t fill(linear) group by tbname
print ====== 0:$data00, 1:$data01, 2:$data02, 3:$data03, 4:$data04, 5:$data05, 6:$data06, 7:$data07, 8:$data08, 9:$data09
print ====== 0:$data00, 1:$data01, 2:$data02, 3:$data03, 4:$data04, 5:$data05, 6:$data06, 7:$data07, 8:$data08, 9:$data09
print ====== 0:$data20, 1:$data21, 2:$data22, 3:$data23, 4:$data24, 5:$data25, 6:$data26, 7:$data27, 8:$data28, 9:$data29
print ====== 0:$data20, 1:$data21, 2:$data22, 3:$data23, 4:$data24, 5:$data25, 6:$data26, 7:$data27, 8:$data28, 9:$data29
if $rows != $tbNum then
if $rows != $tbNum then
return -1
return -1
endi
endi
if $data00 != @18-09-17 09:00:01.000@ then
if $data00 != @18-09-17 09:00:01.000@ then
return -1
return -1
endi
endi
if $data01 != 0 then
if $data01 != 0 then
return -1
return -1
endi
endi
if $data02 != 0 then
if $data02 != 0 then
return -1
return -1
endi
endi
if $data03 != 0.00167 then
if $data03 != 0.00167 then
return -1
return -1
endi
endi
if $data04 != 0.001666667 then
if $data04 != 0.001666667 then
return -1
return -1
endi
endi
if $data05 != 0 then
if $data05 != 0 then
return -1
return -1
endi
endi
if $data06 != 0 then
if $data06 != 0 then
return -1
return -1
endi
endi
if $data07 != NULL then
if $data07 != NULL then
return -1
return -1
endi
endi
if $data08 != NULL then
if $data08 != NULL then
return -1
return -1
endi
endi
if $data09 != NULL then
if $data09 != NULL then
return -1
return -1
endi
endi
if $data20 != @18-09-17 09:00:01.000@ then
if $data20 != @18-09-17 09:00:01.000@ then
return -1
return -1
endi
endi
if $data21 != 0 then
if $data21 != 0 then
return -1
return -1
endi
endi
if $data22 != NULL then
if $data22 != NULL then
return -1
return -1
endi
endi
if $data23 != 0.00167 then
if $data23 != 0.00167 then
return -1
return -1
endi
endi
if $data24 != NULL then
if $data24 != NULL then
return -1
return -1
endi
endi
if $data25 != 0 then
if $data25 != 0 then
return -1
return -1
endi
endi
if $data26 != 0 then
if $data26 != 0 then
return -1
return -1
endi
endi
if $data27 != NULL then
if $data27 != NULL then
return -1
return -1
endi
endi
if $data28 != NULL then
if $data28 != NULL then
return -1
return -1
endi
endi
if $data29 != NULL then
if $data29 != NULL then
return -1
return -1
endi
endi
## interp(*) from stb + group by + fill(value)
## interp(*) from stb + group by + fill(value)
$t = $ts0 + 1000
$t = $ts0 + 1000
sql select interp(*) from $stb where ts = $t fill(value, -1, -2) group by tbname
sql select interp(*) from $stb where ts = $t fill(value, -1, -2) group by tbname
print ====== 0:$data00, 1:$data01, 2:$data02, 3:$data03, 4:$data04, 5:$data05, 6:$data06, 7:$data07, 8:$data08, 9:$data09
print ====== 0:$data00, 1:$data01, 2:$data02, 3:$data03, 4:$data04, 5:$data05, 6:$data06, 7:$data07, 8:$data08, 9:$data09
print ====== 0:$data20, 1:$data21, 2:$data22, 3:$data23, 4:$data24, 5:$data25, 6:$data26, 7:$data27, 8:$data28, 9:$data29
print ====== 0:$data20, 1:$data21, 2:$data22, 3:$data23, 4:$data24, 5:$data25, 6:$data26, 7:$data27, 8:$data28, 9:$data29
if $rows != $tbNum then
if $rows != $tbNum then
return -1
return -1
endi
endi
if $data00 != @18-09-17 09:00:01.000@ then
if $data00 != @18-09-17 09:00:01.000@ then
return -1
return -1
endi
endi
if $data01 != -2 then
if $data01 != -2 then
return -1
return -1
endi
endi
if $data02 != -2 then
if $data02 != -2 then
return -1
return -1
endi
endi
if $data03 != -2.00000 then
if $data03 != -2.00000 then
return -1
return -1
endi
endi
if $data04 != -2.000000000 then
if $data04 != -2.000000000 then
return -1
return -1
endi
endi
if $data05 != -2 then
if $data05 != -2 then
return -1
return -1
endi
endi
if $data06 != -2 then
if $data06 != -2 then
return -1
return -1
endi
endi
if $data07 != 1 then
if $data07 != 1 then
return -1
return -1
endi
endi
if $data08 != NULL then
if $data08 != NULL then
return -1
return -1
endi
endi
if $data09 != NULL then
if $data09 != NULL then
return -1
return -1
endi
endi
if $data20 != @18-09-17 09:00:01.000@ then
if $data20 != @18-09-17 09:00:01.000@ then
return -1
return -1
endi
endi
if $data21 != -2 then
if $data21 != -2 then
return -1
return -1
endi
endi
if $data22 != -2 then
if $data22 != -2 then
return -1
return -1
endi
endi
if $data23 != -2.00000 then
if $data23 != -2.00000 then
return -1
return -1
endi
endi
if $data24 != -2.000000000 then
if $data24 != -2.000000000 then
return -1
return -1
endi
endi
if $data25 != -2 then
if $data25 != -2 then
return -1
return -1
endi
endi
if $data26 != -2 then
if $data26 != -2 then
return -1
return -1
endi
endi
if $data27 != 1 then
if $data27 != 1 then
return -1
return -1
endi
endi
if $data28 != NULL then
if $data28 != NULL then
return -1
return -1
endi
endi
if $data29 != NULL then
if $data29 != NULL then
return -1
return -1
endi
endi
sql_error select interp(ts,c1) from intp_tb0 where ts>'2018-11-25 19:19:00' and ts<'2018-11-25 19:19:12';
sql select interp(ts,c1) from intp_tb0 where ts>'2018-11-25 19:19:00' and ts<'2018-11-25 19:19:12' interval(1s) fill(linear);
if $rows != 0 then
return -1
endi
sql select interp(c1) from intp_tb0 where ts>'2018-11-25 18:09:00' and ts<'2018-11-25 19:20:12' interval(18m);
if $rows != 1 then
return -1
endi
if $data00 != @18-11-25 18:30:00.000@ then
return -1
endi
if $data01 != 3 then
return -1
endi
sql select interp(c1,c3,c4,ts) from intp_tb0 where ts>'2018-11-25 18:09:00' and ts<'2018-11-25 19:20:12' interval(18m) fill(linear)
if $rows != 5 then
return -1
endi
if $data00 != @18-11-25 17:54:00.000@ then
return -1
endi
if $data01 != 0 then
return -1
endi
if $data02 != 0.00000 then
return -1
endi
if $data03 != 0.000000000 then
return -1
endi
if $data04 != @18-11-25 17:54:00.000@ then
return -1
endi
if $data10 != @18-11-25 18:12:00.000@ then
return -1
endi
if $data11 != 1 then
return -1
endi
if $data12 != 1.20000 then
return -1
endi
if $data13 != 1.200000000 then
return -1
endi
if $data14 != @18-11-25 18:12:00.000@ then
return -1
endi
if $data40 != @18-11-25 19:06:00.000@ then
return -1
endi
if $data41 != 6 then
return -1
endi
if $data42 != 6.60000 then
return -1
endi
if $data43 != 6.600000000 then
return -1
endi
if $data44 != @18-11-25 19:06:00.000@ then
return -1
endi
\ No newline at end of file
tests/script/general/parser/select_distinct_tag.sim
0 → 100644
浏览文件 @
e7614def
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c walLevel -v 0
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 5
system sh/exec.sh -n dnode1 -s start
sleep 100
sql connect
$dbPrefix = sav_db
$tbPrefix = sav_tb
$stbPrefix = sav_stb
$tbNum = 20
$rowNum = 10
$totalNum = $tbNum * $rowNum
$ts0 = 1537146000000
$delta = 600000
print ========== alter.sim
$i = 0
$db = $dbPrefix
$stb = $stbPrefix
sql drop database if exists $db
sql create database $db
sql use $db
print ====== create tables
sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int, t2 int)
$i = 0
$ts = $ts0
while $i < $tbNum
$tb = $tbPrefix . $i
sql create table $tb using $stb tags( $i , 0 )
$i = $i + 1
endw
print ====== table created
#### select distinct tag
sql select distinct t1 from $stb
if $rows != $tbNum then
return -1
endi
#### select distinct tag
sql select distinct t2 from $stb
if $rows != 1 then
print $rows
return -1
endi
#### unsupport sql
sql_error select distinct t1, t2 from &stb
sql drop database $db
sql show databases
if $rows != 0 then
return -1
endi
system sh/exec.sh -n dnode1 -s stop -x SIGINT
tests/script/general/parser/testSuite.sim
浏览文件 @
e7614def
...
@@ -105,3 +105,5 @@ sleep 100
...
@@ -105,3 +105,5 @@ sleep 100
run general/parser/sliding.sim
run general/parser/sliding.sim
sleep 100
sleep 100
run general/parser/function.sim
run general/parser/function.sim
sleep 100
run general/parse/stableOp.sim
tests/script/jenkins/basic.txt
浏览文件 @
e7614def
...
@@ -159,6 +159,7 @@ cd ../../../debug; make
...
@@ -159,6 +159,7 @@ cd ../../../debug; make
./test.sh -f general/parser/union.sim
./test.sh -f general/parser/union.sim
./test.sh -f general/parser/topbot.sim
./test.sh -f general/parser/topbot.sim
./test.sh -f general/parser/function.sim
./test.sh -f general/parser/function.sim
./test.sh -f general/parser/select_distinct_tag.sim
./test.sh -f general/stable/disk.sim
./test.sh -f general/stable/disk.sim
./test.sh -f general/stable/dnode3.sim
./test.sh -f general/stable/dnode3.sim
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录