Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
慢慢CG
TDengine
提交
0e0e6d5a
T
TDengine
项目概览
慢慢CG
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
0e0e6d5a
编写于
3月 29, 2021
作者:
H
Haojun Liao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[td-2819]
上级
8d399443
变更
17
隐藏空白更改
内联
并排
Showing
17 changed file
with
674 addition
and
565 deletion
+674
-565
src/client/inc/tscUtil.h
src/client/inc/tscUtil.h
+50
-49
src/client/inc/tsclient.h
src/client/inc/tsclient.h
+17
-17
src/client/src/tscAsync.c
src/client/src/tscAsync.c
+4
-4
src/client/src/tscLocal.c
src/client/src/tscLocal.c
+17
-17
src/client/src/tscLocalMerge.c
src/client/src/tscLocalMerge.c
+27
-27
src/client/src/tscParseInsert.c
src/client/src/tscParseInsert.c
+3
-3
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+119
-119
src/client/src/tscServer.c
src/client/src/tscServer.c
+46
-52
src/client/src/tscSql.c
src/client/src/tscSql.c
+7
-7
src/client/src/tscStream.c
src/client/src/tscStream.c
+7
-7
src/client/src/tscSub.c
src/client/src/tscSub.c
+2
-2
src/client/src/tscSubquery.c
src/client/src/tscSubquery.c
+52
-55
src/client/src/tscUtil.c
src/client/src/tscUtil.c
+167
-104
src/inc/taosmsg.h
src/inc/taosmsg.h
+12
-0
src/query/inc/qExecutor.h
src/query/inc/qExecutor.h
+1
-1
src/query/src/qExecutor.c
src/query/src/qExecutor.c
+110
-101
src/query/src/qPlan.c
src/query/src/qPlan.c
+33
-0
未找到文件。
src/client/inc/tscUtil.h
浏览文件 @
0e0e6d5a
...
@@ -88,7 +88,7 @@ typedef struct SVgroupTableInfo {
...
@@ -88,7 +88,7 @@ typedef struct SVgroupTableInfo {
SArray
*
itemList
;
//SArray<STableIdInfo>
SArray
*
itemList
;
//SArray<STableIdInfo>
}
SVgroupTableInfo
;
}
SVgroupTableInfo
;
static
FORCE_INLINE
SQuery
Node
Info
*
tscGetQueryInfo
(
SSqlCmd
*
pCmd
,
int32_t
subClauseIndex
)
{
static
FORCE_INLINE
SQueryInfo
*
tscGetQueryInfo
(
SSqlCmd
*
pCmd
,
int32_t
subClauseIndex
)
{
assert
(
pCmd
!=
NULL
&&
subClauseIndex
>=
0
);
assert
(
pCmd
!=
NULL
&&
subClauseIndex
>=
0
);
if
(
pCmd
->
pQueryInfo
==
NULL
||
subClauseIndex
>=
pCmd
->
numOfClause
)
{
if
(
pCmd
->
pQueryInfo
==
NULL
||
subClauseIndex
>=
pCmd
->
numOfClause
)
{
return
NULL
;
return
NULL
;
...
@@ -97,7 +97,7 @@ static FORCE_INLINE SQueryNodeInfo* tscGetQueryInfo(SSqlCmd* pCmd, int32_t subCl
...
@@ -97,7 +97,7 @@ static FORCE_INLINE SQueryNodeInfo* tscGetQueryInfo(SSqlCmd* pCmd, int32_t subCl
return
pCmd
->
pQueryInfo
[
subClauseIndex
];
return
pCmd
->
pQueryInfo
[
subClauseIndex
];
}
}
SQuery
Node
Info
*
tscGetActiveQueryInfo
(
SSqlCmd
*
pCmd
);
SQueryInfo
*
tscGetActiveQueryInfo
(
SSqlCmd
*
pCmd
);
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
,
bool
removeMeta
);
void
tscDestroyDataBlock
(
STableDataBlocks
*
pDataBlock
,
bool
removeMeta
);
...
@@ -121,33 +121,34 @@ int32_t tscGetDataBlockFromList(SHashObj* pHashList, int64_t id, int32_t size, i
...
@@ -121,33 +121,34 @@ int32_t tscGetDataBlockFromList(SHashObj* pHashList, int64_t id, int32_t size, i
* @param pSql sql object
* @param pSql sql object
* @return
* @return
*/
*/
bool
tscIsPointInterpQuery
(
SQueryNodeInfo
*
pQueryInfo
);
bool
tscIsPointInterpQuery
(
SQueryInfo
*
pQueryInfo
);
bool
tscIsTWAQuery
(
SQueryNodeInfo
*
pQueryInfo
);
bool
tscIsTWAQuery
(
SQueryInfo
*
pQueryInfo
);
bool
tscIsSecondStageQuery
(
SQueryNodeInfo
*
pQueryInfo
);
bool
tscIsSecondStageQuery
(
SQueryInfo
*
pQueryInfo
);
bool
tscGroupbyColumn
(
SQueryNodeInfo
*
pQueryInfo
);
bool
tscGroupbyColumn
(
SQueryInfo
*
pQueryInfo
);
bool
tscIsTopBotQuery
(
SQueryNodeInfo
*
pQueryInfo
);
bool
tscIsTopBotQuery
(
SQueryInfo
*
pQueryInfo
);
bool
hasTagValOutput
(
SQueryNodeInfo
*
pQueryInfo
);
bool
hasTagValOutput
(
SQueryInfo
*
pQueryInfo
);
bool
timeWindowInterpoRequired
(
SQueryNodeInfo
*
pQueryNodeInfo
);
bool
timeWindowInterpoRequired
(
SQueryInfo
*
pQueryNodeInfo
);
bool
isStabledev
(
SQueryNodeInfo
*
pQueryInfo
);
bool
isStabledev
(
SQueryInfo
*
pQueryInfo
);
bool
isTsCompQuery
(
SQueryNodeInfo
*
pQueryNodeInfo
);
bool
isTsCompQuery
(
SQueryInfo
*
pQueryNodeInfo
);
bool
isSimpleAggregate
(
SQueryNodeInfo
*
pQueryNodeInfo
);
bool
isSimpleAggregate
(
SQueryInfo
*
pQueryNodeInfo
);
bool
isBlockDistQuery
(
SQueryInfo
*
pQueryInfo
);
bool
tscNonOrderedProjectionQueryOnSTable
(
SQueryNodeInfo
*
pQueryInfo
,
int32_t
tableIndex
);
bool
tscOrderedProjectionQueryOnSTable
(
SQueryNodeInfo
*
pQueryInfo
,
int32_t
tableIndex
);
bool
tscNonOrderedProjectionQueryOnSTable
(
SQueryInfo
*
pQueryInfo
,
int32_t
tableIndex
);
bool
tscIsProjectionQueryOnSTable
(
SQueryNodeInfo
*
pQueryInfo
,
int32_t
tableIndex
);
bool
tscOrderedProjectionQueryOnSTable
(
SQueryInfo
*
pQueryInfo
,
int32_t
tableIndex
);
bool
tscIsProjectionQueryOnSTable
(
SQueryInfo
*
pQueryInfo
,
int32_t
tableIndex
);
bool
tscIsProjectionQuery
(
SQueryNodeInfo
*
pQueryInfo
);
bool
tscIsProjectionQuery
(
SQueryInfo
*
pQueryInfo
);
bool
tscIsTwoStageSTableQuery
(
SQueryNodeInfo
*
pQueryInfo
,
int32_t
tableIndex
);
bool
tscQueryTags
(
SQueryNodeInfo
*
pQueryInfo
);
bool
tscIsTwoStageSTableQuery
(
SQueryInfo
*
pQueryInfo
,
int32_t
tableIndex
);
bool
tscMultiRoundQuery
(
SQueryNodeInfo
*
pQueryInfo
,
int32_t
tableIndex
);
bool
tscQueryTags
(
SQueryInfo
*
pQueryInfo
);
bool
tscQueryBlockInfo
(
SQueryNodeInfo
*
pQueryInfo
);
bool
tscMultiRoundQuery
(
SQueryInfo
*
pQueryInfo
,
int32_t
tableIndex
);
bool
tscQueryBlockInfo
(
SQueryInfo
*
pQueryInfo
);
SExprInfo
*
tscAddFuncInSelectClause
(
SQueryNodeInfo
*
pQueryInfo
,
int32_t
outputColIndex
,
int16_t
functionId
,
SExprInfo
*
tscAddFuncInSelectClause
(
SQueryInfo
*
pQueryInfo
,
int32_t
outputColIndex
,
int16_t
functionId
,
SColumnIndex
*
pIndex
,
SSchema
*
pColSchema
,
int16_t
colType
);
SColumnIndex
*
pIndex
,
SSchema
*
pColSchema
,
int16_t
colType
);
int32_t
tscSetTableFullName
(
STableMetaInfo
*
pTableMetaInfo
,
SStrToken
*
pzTableName
,
SSqlObj
*
pSql
);
int32_t
tscSetTableFullName
(
STableMetaInfo
*
pTableMetaInfo
,
SStrToken
*
pzTableName
,
SSqlObj
*
pSql
);
void
tscClearInterpInfo
(
SQuery
Node
Info
*
pQueryInfo
);
void
tscClearInterpInfo
(
SQueryInfo
*
pQueryInfo
);
bool
tscIsInsertData
(
char
*
sqlstr
);
bool
tscIsInsertData
(
char
*
sqlstr
);
...
@@ -161,12 +162,12 @@ SInternalField* tscFieldInfoInsert(SFieldInfo* pFieldInfo, int32_t index, TAOS_F
...
@@ -161,12 +162,12 @@ SInternalField* tscFieldInfoInsert(SFieldInfo* pFieldInfo, int32_t index, TAOS_F
SInternalField
*
tscFieldInfoGetInternalField
(
SFieldInfo
*
pFieldInfo
,
int32_t
index
);
SInternalField
*
tscFieldInfoGetInternalField
(
SFieldInfo
*
pFieldInfo
,
int32_t
index
);
TAOS_FIELD
*
tscFieldInfoGetField
(
SFieldInfo
*
pFieldInfo
,
int32_t
index
);
TAOS_FIELD
*
tscFieldInfoGetField
(
SFieldInfo
*
pFieldInfo
,
int32_t
index
);
void
tscFieldInfoUpdateOffset
(
SQuery
Node
Info
*
pQueryInfo
);
void
tscFieldInfoUpdateOffset
(
SQueryInfo
*
pQueryInfo
);
int16_t
tscFieldInfoGetOffset
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
index
);
int16_t
tscFieldInfoGetOffset
(
SQueryInfo
*
pQueryInfo
,
int32_t
index
);
void
tscFieldInfoClear
(
SFieldInfo
*
pFieldInfo
);
void
tscFieldInfoClear
(
SFieldInfo
*
pFieldInfo
);
static
FORCE_INLINE
int32_t
tscNumOfFields
(
SQuery
Node
Info
*
pQueryInfo
)
{
return
pQueryInfo
->
fieldsInfo
.
numOfOutput
;
}
static
FORCE_INLINE
int32_t
tscNumOfFields
(
SQueryInfo
*
pQueryInfo
)
{
return
pQueryInfo
->
fieldsInfo
.
numOfOutput
;
}
int32_t
tscFieldInfoCompare
(
const
SFieldInfo
*
pFieldInfo1
,
const
SFieldInfo
*
pFieldInfo2
);
int32_t
tscFieldInfoCompare
(
const
SFieldInfo
*
pFieldInfo1
,
const
SFieldInfo
*
pFieldInfo2
);
...
@@ -174,18 +175,18 @@ void addExprParams(SSqlExpr* pExpr, char* argument, int32_t type, int32_t bytes)
...
@@ -174,18 +175,18 @@ void addExprParams(SSqlExpr* pExpr, char* argument, int32_t type, int32_t bytes)
int32_t
tscGetResRowLength
(
SArray
*
pExprList
);
int32_t
tscGetResRowLength
(
SArray
*
pExprList
);
SExprInfo
*
tscSqlExprInsert
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
index
,
int16_t
functionId
,
SColumnIndex
*
pColIndex
,
int16_t
type
,
SExprInfo
*
tscSqlExprInsert
(
SQueryInfo
*
pQueryInfo
,
int32_t
index
,
int16_t
functionId
,
SColumnIndex
*
pColIndex
,
int16_t
type
,
int16_t
size
,
int16_t
resColId
,
int16_t
interSize
,
bool
isTagCol
);
int16_t
size
,
int16_t
resColId
,
int16_t
interSize
,
bool
isTagCol
);
SExprInfo
*
tscSqlExprAppend
(
SQuery
Node
Info
*
pQueryInfo
,
int16_t
functionId
,
SColumnIndex
*
pColIndex
,
int16_t
type
,
SExprInfo
*
tscSqlExprAppend
(
SQueryInfo
*
pQueryInfo
,
int16_t
functionId
,
SColumnIndex
*
pColIndex
,
int16_t
type
,
int16_t
size
,
int16_t
resColId
,
int16_t
interSize
,
bool
isTagCol
);
int16_t
size
,
int16_t
resColId
,
int16_t
interSize
,
bool
isTagCol
);
SExprInfo
*
tscSqlExprUpdate
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
index
,
int16_t
functionId
,
int16_t
srcColumnIndex
,
int16_t
type
,
SExprInfo
*
tscSqlExprUpdate
(
SQueryInfo
*
pQueryInfo
,
int32_t
index
,
int16_t
functionId
,
int16_t
srcColumnIndex
,
int16_t
type
,
int16_t
size
);
int16_t
size
);
size_t
tscSqlExprNumOfExprs
(
SQuery
Node
Info
*
pQueryInfo
);
size_t
tscSqlExprNumOfExprs
(
SQueryInfo
*
pQueryInfo
);
void
tscInsertPrimaryTsSourceColumn
(
SQuery
Node
Info
*
pQueryInfo
,
SColumnIndex
*
pIndex
);
void
tscInsertPrimaryTsSourceColumn
(
SQueryInfo
*
pQueryInfo
,
SColumnIndex
*
pIndex
);
SExprInfo
*
tscSqlExprGet
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
index
);
SExprInfo
*
tscSqlExprGet
(
SQueryInfo
*
pQueryInfo
,
int32_t
index
);
int32_t
tscSqlExprCopy
(
SArray
*
dst
,
const
SArray
*
src
,
uint64_t
uid
,
bool
deepcopy
);
int32_t
tscSqlExprCopy
(
SArray
*
dst
,
const
SArray
*
src
,
uint64_t
uid
,
bool
deepcopy
);
void
tscSqlExprAssign
(
SExprInfo
*
dst
,
const
SExprInfo
*
src
);
void
tscSqlExprAssign
(
SExprInfo
*
dst
,
const
SExprInfo
*
src
);
void
tscSqlExprInfoDestroy
(
SArray
*
pExprInfo
);
void
tscSqlExprInfoDestroy
(
SArray
*
pExprInfo
);
...
@@ -208,25 +209,25 @@ void tsSetSTableQueryCond(STagCond* pTagCond, uint64_t uid, SBufferWriter* bw)
...
@@ -208,25 +209,25 @@ void tsSetSTableQueryCond(STagCond* pTagCond, uint64_t uid, SBufferWriter* bw)
int32_t
tscTagCondCopy
(
STagCond
*
dest
,
const
STagCond
*
src
);
int32_t
tscTagCondCopy
(
STagCond
*
dest
,
const
STagCond
*
src
);
void
tscTagCondRelease
(
STagCond
*
pCond
);
void
tscTagCondRelease
(
STagCond
*
pCond
);
void
tscGetSrcColumnInfo
(
SSrcColumnInfo
*
pColInfo
,
SQuery
Node
Info
*
pQueryInfo
);
void
tscGetSrcColumnInfo
(
SSrcColumnInfo
*
pColInfo
,
SQueryInfo
*
pQueryInfo
);
bool
tscShouldBeFreed
(
SSqlObj
*
pSql
);
bool
tscShouldBeFreed
(
SSqlObj
*
pSql
);
STableMetaInfo
*
tscGetTableMetaInfoFromCmd
(
SSqlCmd
*
pCmd
,
int32_t
subClauseIndex
,
int32_t
tableIndex
);
STableMetaInfo
*
tscGetTableMetaInfoFromCmd
(
SSqlCmd
*
pCmd
,
int32_t
subClauseIndex
,
int32_t
tableIndex
);
STableMetaInfo
*
tscGetMetaInfo
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
tableIndex
);
STableMetaInfo
*
tscGetMetaInfo
(
SQueryInfo
*
pQueryInfo
,
int32_t
tableIndex
);
void
tscInitQueryInfo
(
SQuery
Node
Info
*
pQueryInfo
);
void
tscInitQueryInfo
(
SQueryInfo
*
pQueryInfo
);
void
tscClearSubqueryInfo
(
SSqlCmd
*
pCmd
);
void
tscClearSubqueryInfo
(
SSqlCmd
*
pCmd
);
int32_t
tscAddQueryInfo
(
SSqlCmd
*
pCmd
);
int32_t
tscAddQueryInfo
(
SSqlCmd
*
pCmd
);
SQuery
Node
Info
*
tscGetQueryInfo
(
SSqlCmd
*
pCmd
,
int32_t
subClauseIndex
);
SQueryInfo
*
tscGetQueryInfo
(
SSqlCmd
*
pCmd
,
int32_t
subClauseIndex
);
SQuery
Node
Info
*
tscGetQueryInfoS
(
SSqlCmd
*
pCmd
,
int32_t
subClauseIndex
);
SQueryInfo
*
tscGetQueryInfoS
(
SSqlCmd
*
pCmd
,
int32_t
subClauseIndex
);
void
tscClearTableMetaInfo
(
STableMetaInfo
*
pTableMetaInfo
);
void
tscClearTableMetaInfo
(
STableMetaInfo
*
pTableMetaInfo
);
STableMetaInfo
*
tscAddTableMetaInfo
(
SQuery
Node
Info
*
pQueryInfo
,
SName
*
name
,
STableMeta
*
pTableMeta
,
STableMetaInfo
*
tscAddTableMetaInfo
(
SQueryInfo
*
pQueryInfo
,
SName
*
name
,
STableMeta
*
pTableMeta
,
SVgroupsInfo
*
vgroupList
,
SArray
*
pTagCols
,
SArray
*
pVgroupTables
);
SVgroupsInfo
*
vgroupList
,
SArray
*
pTagCols
,
SArray
*
pVgroupTables
);
STableMetaInfo
*
tscAddEmptyMetaInfo
(
SQuery
Node
Info
*
pQueryInfo
);
STableMetaInfo
*
tscAddEmptyMetaInfo
(
SQueryInfo
*
pQueryInfo
);
void
tscFreeVgroupTableInfo
(
SArray
*
pVgroupTables
);
void
tscFreeVgroupTableInfo
(
SArray
*
pVgroupTables
);
SArray
*
tscVgroupTableInfoDup
(
SArray
*
pVgroupTables
);
SArray
*
tscVgroupTableInfoDup
(
SArray
*
pVgroupTables
);
...
@@ -239,8 +240,8 @@ int tscGetTableMetaEx(SSqlObj* pSql, STableMetaInfo* pTableMetaInfo, bool creat
...
@@ -239,8 +240,8 @@ int tscGetTableMetaEx(SSqlObj* pSql, STableMetaInfo* pTableMetaInfo, bool creat
void
tscResetForNextRetrieve
(
SSqlRes
*
pRes
);
void
tscResetForNextRetrieve
(
SSqlRes
*
pRes
);
void
tscDoQuery
(
SSqlObj
*
pSql
);
void
tscDoQuery
(
SSqlObj
*
pSql
);
void
executeQuery
(
SSqlObj
*
pSql
,
SQuery
Node
Info
*
pQueryInfo
);
void
executeQuery
(
SSqlObj
*
pSql
,
SQueryInfo
*
pQueryInfo
);
void
doExecuteQuery
(
SSqlObj
*
pSql
,
SQuery
Node
Info
*
pQueryInfo
);
void
doExecuteQuery
(
SSqlObj
*
pSql
,
SQueryInfo
*
pQueryInfo
);
SVgroupsInfo
*
tscVgroupInfoClone
(
SVgroupsInfo
*
pInfo
);
SVgroupsInfo
*
tscVgroupInfoClone
(
SVgroupsInfo
*
pInfo
);
void
*
tscVgroupInfoClear
(
SVgroupsInfo
*
pInfo
);
void
*
tscVgroupInfoClear
(
SVgroupsInfo
*
pInfo
);
...
@@ -269,7 +270,7 @@ void registerSqlObj(SSqlObj* pSql);
...
@@ -269,7 +270,7 @@ void registerSqlObj(SSqlObj* pSql);
SSqlObj
*
createSubqueryObj
(
SSqlObj
*
pSql
,
int16_t
tableIndex
,
__async_cb_func_t
fp
,
void
*
param
,
int32_t
cmd
,
SSqlObj
*
pPrevSql
);
SSqlObj
*
createSubqueryObj
(
SSqlObj
*
pSql
,
int16_t
tableIndex
,
__async_cb_func_t
fp
,
void
*
param
,
int32_t
cmd
,
SSqlObj
*
pPrevSql
);
void
addGroupInfoForSubquery
(
SSqlObj
*
pParentObj
,
SSqlObj
*
pSql
,
int32_t
subClauseIndex
,
int32_t
tableIndex
);
void
addGroupInfoForSubquery
(
SSqlObj
*
pParentObj
,
SSqlObj
*
pSql
,
int32_t
subClauseIndex
,
int32_t
tableIndex
);
void
doAddGroupColumnForSubquery
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
tagIndex
);
void
doAddGroupColumnForSubquery
(
SQueryInfo
*
pQueryInfo
,
int32_t
tagIndex
);
int16_t
tscGetJoinTagColIdByUid
(
STagCond
*
pTagCond
,
uint64_t
uid
);
int16_t
tscGetJoinTagColIdByUid
(
STagCond
*
pTagCond
,
uint64_t
uid
);
int16_t
tscGetTagColIndexById
(
STableMeta
*
pTableMeta
,
int16_t
colId
);
int16_t
tscGetTagColIndexById
(
STableMeta
*
pTableMeta
,
int16_t
colId
);
...
@@ -288,7 +289,7 @@ int tscSetMgmtEpSetFromCfg(const char *first, const char *second, SRpcCorEpSet
...
@@ -288,7 +289,7 @@ int tscSetMgmtEpSetFromCfg(const char *first, const char *second, SRpcCorEpSet
bool
tscSetSqlOwner
(
SSqlObj
*
pSql
);
bool
tscSetSqlOwner
(
SSqlObj
*
pSql
);
void
tscClearSqlOwner
(
SSqlObj
*
pSql
);
void
tscClearSqlOwner
(
SSqlObj
*
pSql
);
int32_t
doArithmeticCalculate
(
SQuery
Node
Info
*
pQueryInfo
,
tFilePage
*
pOutput
,
int32_t
rowSize
,
int32_t
finalRowSize
);
int32_t
doArithmeticCalculate
(
SQueryInfo
*
pQueryInfo
,
tFilePage
*
pOutput
,
int32_t
rowSize
,
int32_t
finalRowSize
);
char
*
serializeTagData
(
STagData
*
pTagData
,
char
*
pMsg
);
char
*
serializeTagData
(
STagData
*
pTagData
,
char
*
pMsg
);
int32_t
copyTagData
(
STagData
*
dst
,
const
STagData
*
src
);
int32_t
copyTagData
(
STagData
*
dst
,
const
STagData
*
src
);
...
@@ -299,10 +300,10 @@ CChildTableMeta* tscCreateChildMeta(STableMeta* pTableMeta);
...
@@ -299,10 +300,10 @@ CChildTableMeta* tscCreateChildMeta(STableMeta* pTableMeta);
uint32_t
tscGetTableMetaMaxSize
();
uint32_t
tscGetTableMetaMaxSize
();
int32_t
tscCreateTableMetaFromCChildMeta
(
STableMeta
*
pChild
,
const
char
*
name
);
int32_t
tscCreateTableMetaFromCChildMeta
(
STableMeta
*
pChild
,
const
char
*
name
);
STableMeta
*
tscTableMetaDup
(
STableMeta
*
pTableMeta
);
STableMeta
*
tscTableMetaDup
(
STableMeta
*
pTableMeta
);
SQuery
*
tscCreateQueryFromQueryNodeInfo
(
SQuery
Node
Info
*
pQueryNodeInfo
);
SQuery
*
tscCreateQueryFromQueryNodeInfo
(
SQueryInfo
*
pQueryNodeInfo
);
void
tsCreateSQLFunctionCtx
(
SQuery
Node
Info
*
pQueryInfo
,
SQLFunctionCtx
*
pCtx
);
void
tsCreateSQLFunctionCtx
(
SQueryInfo
*
pQueryInfo
,
SQLFunctionCtx
*
pCtx
);
void
*
createQueryInfoFromQueryNode
(
SQuery
Node
Info
*
pQueryNodeInfo
,
SExprInfo
*
pExprs
,
STableGroupInfo
*
pTableGroupInfo
,
void
*
createQueryInfoFromQueryNode
(
SQueryInfo
*
pQueryNodeInfo
,
SExprInfo
*
pExprs
,
STableGroupInfo
*
pTableGroupInfo
,
uint64_t
*
qId
,
char
*
sql
);
uint64_t
*
qId
,
char
*
sql
);
void
*
malloc_throw
(
size_t
size
);
void
*
malloc_throw
(
size_t
size
);
...
...
src/client/inc/tsclient.h
浏览文件 @
0e0e6d5a
...
@@ -179,7 +179,7 @@ typedef struct STableDataBlocks {
...
@@ -179,7 +179,7 @@ typedef struct STableDataBlocks {
SParamInfo
*
params
;
SParamInfo
*
params
;
}
STableDataBlocks
;
}
STableDataBlocks
;
typedef
struct
SQuery
Node
Info
{
typedef
struct
SQueryInfo
{
int16_t
command
;
// the command may be different for each subclause, so keep it seperately.
int16_t
command
;
// the command may be different for each subclause, so keep it seperately.
uint32_t
type
;
// query/insert type
uint32_t
type
;
// query/insert type
STimeWindow
window
;
// the whole query time window
STimeWindow
window
;
// the whole query time window
...
@@ -187,10 +187,10 @@ typedef struct SQueryNodeInfo {
...
@@ -187,10 +187,10 @@ typedef struct SQueryNodeInfo {
SInterval
interval
;
// tumble time window
SInterval
interval
;
// tumble time window
SSessionWindow
sessionWindow
;
// session time window
SSessionWindow
sessionWindow
;
// session time window
SSqlGroupbyExpr
groupbyExpr
;
// group
by tags info
SSqlGroupbyExpr
groupbyExpr
;
// groupby tags info
SArray
*
colList
;
// SArray<SColumn*>
SArray
*
colList
;
// SArray<SColumn*>
SFieldInfo
fieldsInfo
;
SFieldInfo
fieldsInfo
;
SArray
*
exprList
;
// SArray<S
SqlExpr
*>
SArray
*
exprList
;
// SArray<S
ExprInfo
*>
SLimitVal
limit
;
SLimitVal
limit
;
SLimitVal
slimit
;
SLimitVal
slimit
;
STagCond
tagCond
;
STagCond
tagCond
;
...
@@ -218,10 +218,10 @@ typedef struct SQueryNodeInfo {
...
@@ -218,10 +218,10 @@ typedef struct SQueryNodeInfo {
SArray
*
pPhyOperator
;
// physical query execution plan
SArray
*
pPhyOperator
;
// physical query execution plan
SQuery
*
pQuery
;
// query object
SQuery
*
pQuery
;
// query object
struct
SQuery
Node
Info
*
sibling
;
// sibling
struct
SQueryInfo
*
sibling
;
// sibling
SArray
*
pUpstream
;
// SArray<struct SQuery
Node
Info>
SArray
*
pUpstream
;
// SArray<struct SQueryInfo>
SArray
*
pDownstream
;
// SArray<struct SQuery
Node
Info>
SArray
*
pDownstream
;
// SArray<struct SQueryInfo>
}
SQuery
Node
Info
;
}
SQueryInfo
;
typedef
struct
{
typedef
struct
{
int
command
;
int
command
;
...
@@ -245,10 +245,10 @@ typedef struct {
...
@@ -245,10 +245,10 @@ typedef struct {
char
*
payload
;
char
*
payload
;
int32_t
payloadLen
;
int32_t
payloadLen
;
SQuery
Node
Info
**
pQueryInfo
;
SQueryInfo
**
pQueryInfo
;
int32_t
numOfClause
;
int32_t
numOfClause
;
int32_t
clauseIndex
;
// index of multiple subclause query
int32_t
clauseIndex
;
// index of multiple subclause query
SQuery
Node
Info
*
active
;
// current active query info
SQueryInfo
*
active
;
// current active query info
int32_t
batchSize
;
// for parameter ('?') binding and batch processing
int32_t
batchSize
;
// for parameter ('?') binding and batch processing
int32_t
numOfParams
;
int32_t
numOfParams
;
...
@@ -405,7 +405,7 @@ void tscInitMsgsFp();
...
@@ -405,7 +405,7 @@ void tscInitMsgsFp();
int
tsParseSql
(
SSqlObj
*
pSql
,
bool
initial
);
int
tsParseSql
(
SSqlObj
*
pSql
,
bool
initial
);
void
tscProcessMsgFromServer
(
SRpcMsg
*
rpcMsg
,
SRpcEpSet
*
pEpSet
);
void
tscProcessMsgFromServer
(
SRpcMsg
*
rpcMsg
,
SRpcEpSet
*
pEpSet
);
int
tscProcessSql
(
SSqlObj
*
pSql
,
SQuery
Node
Info
*
pQueryInfo
);
int
tscProcessSql
(
SSqlObj
*
pSql
,
SQueryInfo
*
pQueryInfo
);
int
tscRenewTableMeta
(
SSqlObj
*
pSql
,
int32_t
tableIndex
);
int
tscRenewTableMeta
(
SSqlObj
*
pSql
,
int32_t
tableIndex
);
void
tscAsyncResultOnError
(
SSqlObj
*
pSql
);
void
tscAsyncResultOnError
(
SSqlObj
*
pSql
);
...
@@ -415,12 +415,12 @@ void tscQueueAsyncError(void(*fp), void *param, int32_t code);
...
@@ -415,12 +415,12 @@ void tscQueueAsyncError(void(*fp), void *param, int32_t code);
int
tscProcessLocalCmd
(
SSqlObj
*
pSql
);
int
tscProcessLocalCmd
(
SSqlObj
*
pSql
);
int
tscCfgDynamicOptions
(
char
*
msg
);
int
tscCfgDynamicOptions
(
char
*
msg
);
int32_t
tscTansformFuncForSTableQuery
(
SQuery
Node
Info
*
pQueryInfo
);
int32_t
tscTansformFuncForSTableQuery
(
SQueryInfo
*
pQueryInfo
);
void
tscRestoreFuncForSTableQuery
(
SQuery
Node
Info
*
pQueryInfo
);
void
tscRestoreFuncForSTableQuery
(
SQueryInfo
*
pQueryInfo
);
int32_t
tscCreateResPointerInfo
(
SSqlRes
*
pRes
,
SQuery
Node
Info
*
pQueryInfo
);
int32_t
tscCreateResPointerInfo
(
SSqlRes
*
pRes
,
SQueryInfo
*
pQueryInfo
);
void
tscSetResRawPtr
(
SSqlRes
*
pRes
,
SQuery
Node
Info
*
pQueryInfo
);
void
tscSetResRawPtr
(
SSqlRes
*
pRes
,
SQueryInfo
*
pQueryInfo
);
void
prepareInputDataFromUpstream
(
SSqlRes
*
pRes
,
SQuery
Node
Info
*
pQueryInfo
);
void
prepareInputDataFromUpstream
(
SSqlRes
*
pRes
,
SQueryInfo
*
pQueryInfo
);
void
tscResetSqlCmd
(
SSqlCmd
*
pCmd
,
bool
removeMeta
);
void
tscResetSqlCmd
(
SSqlCmd
*
pCmd
,
bool
removeMeta
);
...
@@ -455,7 +455,7 @@ bool tscIsUpdateQuery(SSqlObj* pSql);
...
@@ -455,7 +455,7 @@ bool tscIsUpdateQuery(SSqlObj* pSql);
char
*
tscGetSqlStr
(
SSqlObj
*
pSql
);
char
*
tscGetSqlStr
(
SSqlObj
*
pSql
);
bool
tscIsQueryWithLimit
(
SSqlObj
*
pSql
);
bool
tscIsQueryWithLimit
(
SSqlObj
*
pSql
);
bool
tscHasReachLimitation
(
SQuery
Node
Info
*
pQueryInfo
,
SSqlRes
*
pRes
);
bool
tscHasReachLimitation
(
SQueryInfo
*
pQueryInfo
,
SSqlRes
*
pRes
);
char
*
tscGetErrorMsgPayload
(
SSqlCmd
*
pCmd
);
char
*
tscGetErrorMsgPayload
(
SSqlCmd
*
pCmd
);
...
@@ -519,7 +519,7 @@ extern int tscNumOfObj; // number of existed sqlObj in current process.
...
@@ -519,7 +519,7 @@ extern int tscNumOfObj; // number of existed sqlObj in current process.
extern
int
(
*
tscBuildMsg
[
TSDB_SQL_MAX
])(
SSqlObj
*
pSql
,
SSqlInfo
*
pInfo
);
extern
int
(
*
tscBuildMsg
[
TSDB_SQL_MAX
])(
SSqlObj
*
pSql
,
SSqlInfo
*
pInfo
);
void
tscBuildVgroupTableInfo
(
SSqlObj
*
pSql
,
STableMetaInfo
*
pTableMetaInfo
,
SArray
*
tables
);
void
tscBuildVgroupTableInfo
(
SSqlObj
*
pSql
,
STableMetaInfo
*
pTableMetaInfo
,
SArray
*
tables
);
int16_t
getNewResColId
(
SQuery
Node
Info
*
pQueryInfo
);
int16_t
getNewResColId
(
SQueryInfo
*
pQueryInfo
);
#ifdef __cplusplus
#ifdef __cplusplus
}
}
...
...
src/client/src/tscAsync.c
浏览文件 @
0e0e6d5a
...
@@ -69,7 +69,7 @@ void doAsyncQuery(STscObj* pObj, SSqlObj* pSql, __async_cb_func_t fp, void* para
...
@@ -69,7 +69,7 @@ void doAsyncQuery(STscObj* pObj, SSqlObj* pSql, __async_cb_func_t fp, void* para
return
;
return
;
}
}
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
executeQuery
(
pSql
,
pQueryInfo
);
executeQuery
(
pSql
,
pQueryInfo
);
}
}
...
@@ -255,7 +255,7 @@ void taos_fetch_rows_a(TAOS_RES *tres, __async_cb_func_t fp, void *param) {
...
@@ -255,7 +255,7 @@ void taos_fetch_rows_a(TAOS_RES *tres, __async_cb_func_t fp, void *param) {
pCmd
->
command
=
(
pCmd
->
command
>
TSDB_SQL_MGMT
)
?
TSDB_SQL_RETRIEVE
:
TSDB_SQL_FETCH
;
pCmd
->
command
=
(
pCmd
->
command
>
TSDB_SQL_MGMT
)
?
TSDB_SQL_RETRIEVE
:
TSDB_SQL_FETCH
;
}
}
SQuery
Node
Info
*
pQueryInfo1
=
tscGetActiveQueryInfo
(
&
pSql
->
cmd
);
SQueryInfo
*
pQueryInfo1
=
tscGetActiveQueryInfo
(
&
pSql
->
cmd
);
tscProcessSql
(
pSql
,
pQueryInfo1
);
tscProcessSql
(
pSql
,
pQueryInfo1
);
}
}
}
}
...
@@ -333,7 +333,7 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
...
@@ -333,7 +333,7 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
tscDebug
(
"%p get %s successfully"
,
pSql
,
msg
);
tscDebug
(
"%p get %s successfully"
,
pSql
,
msg
);
if
(
pSql
->
pStream
==
NULL
)
{
if
(
pSql
->
pStream
==
NULL
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
// check if it is a sub-query of super table query first, if true, enter another routine
// check if it is a sub-query of super table query first, if true, enter another routine
if
(
TSDB_QUERY_HAS_TYPE
(
pQueryInfo
->
type
,
(
TSDB_QUERY_TYPE_STABLE_SUBQUERY
|
TSDB_QUERY_TYPE_SUBQUERY
|
TSDB_QUERY_TYPE_TAG_FILTER_QUERY
)))
{
if
(
TSDB_QUERY_HAS_TYPE
(
pQueryInfo
->
type
,
(
TSDB_QUERY_TYPE_STABLE_SUBQUERY
|
TSDB_QUERY_TYPE_SUBQUERY
|
TSDB_QUERY_TYPE_TAG_FILTER_QUERY
)))
{
...
@@ -414,7 +414,7 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
...
@@ -414,7 +414,7 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
}
else
if
(
TSDB_QUERY_HAS_TYPE
(
pQueryInfo
->
type
,
TSDB_QUERY_TYPE_INSERT
))
{
}
else
if
(
TSDB_QUERY_HAS_TYPE
(
pQueryInfo
->
type
,
TSDB_QUERY_TYPE_INSERT
))
{
tscHandleMultivnodeInsert
(
pSql
);
tscHandleMultivnodeInsert
(
pSql
);
}
else
{
}
else
{
SQuery
Node
Info
*
pQueryInfo1
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo1
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
executeQuery
(
pSql
,
pQueryInfo1
);
executeQuery
(
pSql
,
pQueryInfo1
);
}
}
...
...
src/client/src/tscLocal.c
浏览文件 @
0e0e6d5a
...
@@ -53,7 +53,7 @@ static int32_t tscSetValueToResObj(SSqlObj *pSql, int32_t rowLen) {
...
@@ -53,7 +53,7 @@ static int32_t tscSetValueToResObj(SSqlObj *pSql, int32_t rowLen) {
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
// one column for each row
// one column for each row
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMeta
*
pMeta
=
pTableMetaInfo
->
pTableMeta
;
STableMeta
*
pMeta
=
pTableMetaInfo
->
pTableMeta
;
...
@@ -154,7 +154,7 @@ static int32_t tscBuildTableSchemaResultFields(SSqlObj *pSql, int32_t numOfCols,
...
@@ -154,7 +154,7 @@ static int32_t tscBuildTableSchemaResultFields(SSqlObj *pSql, int32_t numOfCols,
pSql
->
cmd
.
numOfCols
=
numOfCols
;
pSql
->
cmd
.
numOfCols
=
numOfCols
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
pQueryInfo
->
order
.
order
=
TSDB_ORDER_ASC
;
pQueryInfo
->
order
.
order
=
TSDB_ORDER_ASC
;
TAOS_FIELD
f
=
{.
type
=
TSDB_DATA_TYPE_BINARY
,
.
bytes
=
(
TSDB_COL_NAME_LEN
-
1
)
+
VARSTR_HEADER_SIZE
};
TAOS_FIELD
f
=
{.
type
=
TSDB_DATA_TYPE_BINARY
,
.
bytes
=
(
TSDB_COL_NAME_LEN
-
1
)
+
VARSTR_HEADER_SIZE
};
...
@@ -199,7 +199,7 @@ static int32_t tscBuildTableSchemaResultFields(SSqlObj *pSql, int32_t numOfCols,
...
@@ -199,7 +199,7 @@ static int32_t tscBuildTableSchemaResultFields(SSqlObj *pSql, int32_t numOfCols,
}
}
static
int32_t
tscProcessDescribeTable
(
SSqlObj
*
pSql
)
{
static
int32_t
tscProcessDescribeTable
(
SSqlObj
*
pSql
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
assert
(
tscGetMetaInfo
(
pQueryInfo
,
0
)
->
pTableMeta
!=
NULL
);
assert
(
tscGetMetaInfo
(
pQueryInfo
,
0
)
->
pTableMeta
!=
NULL
);
...
@@ -389,7 +389,7 @@ static int32_t tscSCreateBuildResultFields(SSqlObj *pSql, BuildType type, const
...
@@ -389,7 +389,7 @@ static int32_t tscSCreateBuildResultFields(SSqlObj *pSql, BuildType type, const
SColumnIndex
index
=
{
0
};
SColumnIndex
index
=
{
0
};
pSql
->
cmd
.
numOfCols
=
2
;
pSql
->
cmd
.
numOfCols
=
2
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
pQueryInfo
->
order
.
order
=
TSDB_ORDER_ASC
;
pQueryInfo
->
order
.
order
=
TSDB_ORDER_ASC
;
TAOS_FIELD
f
;
TAOS_FIELD
f
;
...
@@ -427,7 +427,7 @@ static int32_t tscSCreateBuildResultFields(SSqlObj *pSql, BuildType type, const
...
@@ -427,7 +427,7 @@ static int32_t tscSCreateBuildResultFields(SSqlObj *pSql, BuildType type, const
static
int32_t
tscSCreateSetValueToResObj
(
SSqlObj
*
pSql
,
int32_t
rowLen
,
const
char
*
tableName
,
const
char
*
ddl
)
{
static
int32_t
tscSCreateSetValueToResObj
(
SSqlObj
*
pSql
,
int32_t
rowLen
,
const
char
*
tableName
,
const
char
*
ddl
)
{
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
int32_t
numOfRows
=
1
;
int32_t
numOfRows
=
1
;
if
(
strlen
(
ddl
)
==
0
)
{
if
(
strlen
(
ddl
)
==
0
)
{
...
@@ -444,7 +444,7 @@ static int32_t tscSCreateSetValueToResObj(SSqlObj *pSql, int32_t rowLen, const c
...
@@ -444,7 +444,7 @@ static int32_t tscSCreateSetValueToResObj(SSqlObj *pSql, int32_t rowLen, const c
return
0
;
return
0
;
}
}
static
int32_t
tscSCreateBuildResult
(
SSqlObj
*
pSql
,
BuildType
type
,
const
char
*
str
,
const
char
*
result
)
{
static
int32_t
tscSCreateBuildResult
(
SSqlObj
*
pSql
,
BuildType
type
,
const
char
*
str
,
const
char
*
result
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
int32_t
rowLen
=
tscSCreateBuildResultFields
(
pSql
,
type
,
result
);
int32_t
rowLen
=
tscSCreateBuildResultFields
(
pSql
,
type
,
result
);
tscFieldInfoUpdateOffset
(
pQueryInfo
);
tscFieldInfoUpdateOffset
(
pQueryInfo
);
...
@@ -552,7 +552,7 @@ static int32_t tscGetTableTagColumnName(SSqlObj *pSql, char **result) {
...
@@ -552,7 +552,7 @@ static int32_t tscGetTableTagColumnName(SSqlObj *pSql, char **result) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
int32_t
tscRebuildDDLForSubTable
(
SSqlObj
*
pSql
,
const
char
*
tableName
,
char
*
ddl
)
{
static
int32_t
tscRebuildDDLForSubTable
(
SSqlObj
*
pSql
,
const
char
*
tableName
,
char
*
ddl
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMeta
*
pMeta
=
pTableMetaInfo
->
pTableMeta
;
STableMeta
*
pMeta
=
pTableMetaInfo
->
pTableMeta
;
...
@@ -606,7 +606,7 @@ static int32_t tscRebuildDDLForSubTable(SSqlObj *pSql, const char *tableName, ch
...
@@ -606,7 +606,7 @@ static int32_t tscRebuildDDLForSubTable(SSqlObj *pSql, const char *tableName, ch
}
}
static
int32_t
tscRebuildDDLForNormalTable
(
SSqlObj
*
pSql
,
const
char
*
tableName
,
char
*
ddl
)
{
static
int32_t
tscRebuildDDLForNormalTable
(
SSqlObj
*
pSql
,
const
char
*
tableName
,
char
*
ddl
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMeta
*
pMeta
=
pTableMetaInfo
->
pTableMeta
;
STableMeta
*
pMeta
=
pTableMetaInfo
->
pTableMeta
;
...
@@ -633,7 +633,7 @@ static int32_t tscRebuildDDLForNormalTable(SSqlObj *pSql, const char *tableName,
...
@@ -633,7 +633,7 @@ static int32_t tscRebuildDDLForNormalTable(SSqlObj *pSql, const char *tableName,
}
}
static
int32_t
tscRebuildDDLForSuperTable
(
SSqlObj
*
pSql
,
const
char
*
tableName
,
char
*
ddl
)
{
static
int32_t
tscRebuildDDLForSuperTable
(
SSqlObj
*
pSql
,
const
char
*
tableName
,
char
*
ddl
)
{
char
*
result
=
ddl
;
char
*
result
=
ddl
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMeta
*
pMeta
=
pTableMetaInfo
->
pTableMeta
;
STableMeta
*
pMeta
=
pTableMetaInfo
->
pTableMeta
;
...
@@ -674,7 +674,7 @@ static int32_t tscRebuildDDLForSuperTable(SSqlObj *pSql, const char *tableName,
...
@@ -674,7 +674,7 @@ static int32_t tscRebuildDDLForSuperTable(SSqlObj *pSql, const char *tableName,
}
}
static
int32_t
tscProcessShowCreateTable
(
SSqlObj
*
pSql
)
{
static
int32_t
tscProcessShowCreateTable
(
SSqlObj
*
pSql
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
assert
(
pTableMetaInfo
->
pTableMeta
!=
NULL
);
assert
(
pTableMetaInfo
->
pTableMeta
!=
NULL
);
...
@@ -700,7 +700,7 @@ static int32_t tscProcessShowCreateTable(SSqlObj *pSql) {
...
@@ -700,7 +700,7 @@ static int32_t tscProcessShowCreateTable(SSqlObj *pSql) {
}
}
static
int32_t
tscProcessShowCreateDatabase
(
SSqlObj
*
pSql
)
{
static
int32_t
tscProcessShowCreateDatabase
(
SSqlObj
*
pSql
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
...
@@ -727,7 +727,7 @@ static int32_t tscProcessShowCreateDatabase(SSqlObj *pSql) {
...
@@ -727,7 +727,7 @@ static int32_t tscProcessShowCreateDatabase(SSqlObj *pSql) {
return
TSDB_CODE_TSC_ACTION_IN_PROGRESS
;
return
TSDB_CODE_TSC_ACTION_IN_PROGRESS
;
}
}
static
int32_t
tscProcessCurrentUser
(
SSqlObj
*
pSql
)
{
static
int32_t
tscProcessCurrentUser
(
SSqlObj
*
pSql
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SSqlExpr
*
pExpr
=
taosArrayGetP
(
pQueryInfo
->
exprList
,
0
);
SSqlExpr
*
pExpr
=
taosArrayGetP
(
pQueryInfo
->
exprList
,
0
);
pExpr
->
resBytes
=
TSDB_USER_LEN
+
TSDB_DATA_TYPE_BINARY
;
pExpr
->
resBytes
=
TSDB_USER_LEN
+
TSDB_DATA_TYPE_BINARY
;
...
@@ -754,7 +754,7 @@ static int32_t tscProcessCurrentDB(SSqlObj *pSql) {
...
@@ -754,7 +754,7 @@ static int32_t tscProcessCurrentDB(SSqlObj *pSql) {
extractDBName
(
pSql
->
pTscObj
->
db
,
db
);
extractDBName
(
pSql
->
pTscObj
->
db
,
db
);
pthread_mutex_unlock
(
&
pSql
->
pTscObj
->
mutex
);
pthread_mutex_unlock
(
&
pSql
->
pTscObj
->
mutex
);
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
pSql
->
cmd
.
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
pSql
->
cmd
.
clauseIndex
);
SSqlExpr
*
pExpr
=
taosArrayGetP
(
pQueryInfo
->
exprList
,
0
);
SSqlExpr
*
pExpr
=
taosArrayGetP
(
pQueryInfo
->
exprList
,
0
);
pExpr
->
resType
=
TSDB_DATA_TYPE_BINARY
;
pExpr
->
resType
=
TSDB_DATA_TYPE_BINARY
;
...
@@ -781,7 +781,7 @@ static int32_t tscProcessCurrentDB(SSqlObj *pSql) {
...
@@ -781,7 +781,7 @@ static int32_t tscProcessCurrentDB(SSqlObj *pSql) {
static
int32_t
tscProcessServerVer
(
SSqlObj
*
pSql
)
{
static
int32_t
tscProcessServerVer
(
SSqlObj
*
pSql
)
{
const
char
*
v
=
pSql
->
pTscObj
->
sversion
;
const
char
*
v
=
pSql
->
pTscObj
->
sversion
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
pSql
->
cmd
.
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
pSql
->
cmd
.
clauseIndex
);
SSqlExpr
*
pExpr
=
taosArrayGetP
(
pQueryInfo
->
exprList
,
0
);
SSqlExpr
*
pExpr
=
taosArrayGetP
(
pQueryInfo
->
exprList
,
0
);
pExpr
->
resType
=
TSDB_DATA_TYPE_BINARY
;
pExpr
->
resType
=
TSDB_DATA_TYPE_BINARY
;
...
@@ -804,7 +804,7 @@ static int32_t tscProcessServerVer(SSqlObj *pSql) {
...
@@ -804,7 +804,7 @@ static int32_t tscProcessServerVer(SSqlObj *pSql) {
}
}
static
int32_t
tscProcessClientVer
(
SSqlObj
*
pSql
)
{
static
int32_t
tscProcessClientVer
(
SSqlObj
*
pSql
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SSqlExpr
*
pExpr
=
taosArrayGetP
(
pQueryInfo
->
exprList
,
0
);
SSqlExpr
*
pExpr
=
taosArrayGetP
(
pQueryInfo
->
exprList
,
0
);
pExpr
->
resType
=
TSDB_DATA_TYPE_BINARY
;
pExpr
->
resType
=
TSDB_DATA_TYPE_BINARY
;
...
@@ -856,7 +856,7 @@ static int32_t tscProcessServStatus(SSqlObj *pSql) {
...
@@ -856,7 +856,7 @@ static int32_t tscProcessServStatus(SSqlObj *pSql) {
return
pSql
->
res
.
code
;
return
pSql
->
res
.
code
;
}
}
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SSqlExpr
*
pExpr
=
taosArrayGetP
(
pQueryInfo
->
exprList
,
0
);
SSqlExpr
*
pExpr
=
taosArrayGetP
(
pQueryInfo
->
exprList
,
0
);
int32_t
val
=
1
;
int32_t
val
=
1
;
...
@@ -870,7 +870,7 @@ void tscSetLocalQueryResult(SSqlObj *pSql, const char *val, const char *columnNa
...
@@ -870,7 +870,7 @@ void tscSetLocalQueryResult(SSqlObj *pSql, const char *val, const char *columnNa
pCmd
->
numOfCols
=
1
;
pCmd
->
numOfCols
=
1
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
pQueryInfo
->
order
.
order
=
TSDB_ORDER_ASC
;
pQueryInfo
->
order
.
order
=
TSDB_ORDER_ASC
;
tscFieldInfoClear
(
&
pQueryInfo
->
fieldsInfo
);
tscFieldInfoClear
(
&
pQueryInfo
->
fieldsInfo
);
...
...
src/client/src/tscLocalMerge.c
浏览文件 @
0e0e6d5a
...
@@ -57,7 +57,7 @@ int32_t treeComparator(const void *pLeft, const void *pRight, void *param) {
...
@@ -57,7 +57,7 @@ int32_t treeComparator(const void *pLeft, const void *pRight, void *param) {
}
}
// todo merge with vnode side function
// todo merge with vnode side function
void
tsCreateSQLFunctionCtx
(
SQuery
Node
Info
*
pQueryInfo
,
SQLFunctionCtx
*
pCtx
)
{
void
tsCreateSQLFunctionCtx
(
SQueryInfo
*
pQueryInfo
,
SQLFunctionCtx
*
pCtx
)
{
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
...
@@ -122,7 +122,7 @@ void tsCreateSQLFunctionCtx(SQueryNodeInfo* pQueryInfo, SQLFunctionCtx* pCtx) {
...
@@ -122,7 +122,7 @@ void tsCreateSQLFunctionCtx(SQueryNodeInfo* pQueryInfo, SQLFunctionCtx* pCtx) {
}
}
}
}
static
void
setCtxInputOutputBuffer
(
SQuery
Node
Info
*
pQueryInfo
,
SQLFunctionCtx
*
pCtx
,
SLocalMerger
*
pReducer
,
static
void
setCtxInputOutputBuffer
(
SQueryInfo
*
pQueryInfo
,
SQLFunctionCtx
*
pCtx
,
SLocalMerger
*
pReducer
,
tOrderDescriptor
*
pDesc
)
{
tOrderDescriptor
*
pDesc
)
{
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
...
@@ -136,7 +136,7 @@ static void setCtxInputOutputBuffer(SQueryNodeInfo* pQueryInfo, SQLFunctionCtx *
...
@@ -136,7 +136,7 @@ static void setCtxInputOutputBuffer(SQueryNodeInfo* pQueryInfo, SQLFunctionCtx *
}
}
}
}
static
SFillColInfo
*
createFillColInfo
(
SQuery
Node
Info
*
pQueryInfo
)
{
static
SFillColInfo
*
createFillColInfo
(
SQueryInfo
*
pQueryInfo
)
{
int32_t
numOfCols
=
(
int32_t
)
tscNumOfFields
(
pQueryInfo
);
int32_t
numOfCols
=
(
int32_t
)
tscNumOfFields
(
pQueryInfo
);
int32_t
offset
=
0
;
int32_t
offset
=
0
;
...
@@ -263,7 +263,7 @@ void tscCreateLocalMerger(tExtMemBuffer **pMemBuffer, int32_t numOfBuffer, tOrde
...
@@ -263,7 +263,7 @@ void tscCreateLocalMerger(tExtMemBuffer **pMemBuffer, int32_t numOfBuffer, tOrde
#ifdef _DEBUG_VIEW
#ifdef _DEBUG_VIEW
printf
(
"load data page into mem for build loser tree: %"
PRIu64
" rows
\n
"
,
ds
->
filePage
.
num
);
printf
(
"load data page into mem for build loser tree: %"
PRIu64
" rows
\n
"
,
ds
->
filePage
.
num
);
SSrcColumnInfo
colInfo
[
256
]
=
{
0
};
SSrcColumnInfo
colInfo
[
256
]
=
{
0
};
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
tscGetSrcColumnInfo
(
colInfo
,
pQueryInfo
);
tscGetSrcColumnInfo
(
colInfo
,
pQueryInfo
);
...
@@ -298,7 +298,7 @@ void tscCreateLocalMerger(tExtMemBuffer **pMemBuffer, int32_t numOfBuffer, tOrde
...
@@ -298,7 +298,7 @@ void tscCreateLocalMerger(tExtMemBuffer **pMemBuffer, int32_t numOfBuffer, tOrde
param
->
pLocalData
=
pReducer
->
pLocalDataSrc
;
param
->
pLocalData
=
pReducer
->
pLocalDataSrc
;
param
->
pDesc
=
pReducer
->
pDesc
;
param
->
pDesc
=
pReducer
->
pDesc
;
param
->
num
=
pReducer
->
pLocalDataSrc
[
0
]
->
pMemBuffer
->
numOfElemsPerPage
;
param
->
num
=
pReducer
->
pLocalDataSrc
[
0
]
->
pMemBuffer
->
numOfElemsPerPage
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
param
->
groupOrderType
=
pQueryInfo
->
groupbyExpr
.
orderType
;
param
->
groupOrderType
=
pQueryInfo
->
groupbyExpr
.
orderType
;
pReducer
->
orderPrjOnSTable
=
tscOrderedProjectionQueryOnSTable
(
pQueryInfo
,
0
);
pReducer
->
orderPrjOnSTable
=
tscOrderedProjectionQueryOnSTable
(
pQueryInfo
,
0
);
...
@@ -492,7 +492,7 @@ void tscDestroyLocalMerger(SSqlObj *pSql) {
...
@@ -492,7 +492,7 @@ void tscDestroyLocalMerger(SSqlObj *pSql) {
}
}
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
// there is no more result, so we release all allocated resource
// there is no more result, so we release all allocated resource
SLocalMerger
*
pLocalMerge
=
(
SLocalMerger
*
)
atomic_exchange_ptr
(
&
pRes
->
pLocalMerger
,
NULL
);
SLocalMerger
*
pLocalMerge
=
(
SLocalMerger
*
)
atomic_exchange_ptr
(
&
pRes
->
pLocalMerger
,
NULL
);
...
@@ -546,7 +546,7 @@ void tscDestroyLocalMerger(SSqlObj *pSql) {
...
@@ -546,7 +546,7 @@ void tscDestroyLocalMerger(SSqlObj *pSql) {
static
int32_t
createOrderDescriptor
(
tOrderDescriptor
**
pOrderDesc
,
SSqlCmd
*
pCmd
,
SColumnModel
*
pModel
)
{
static
int32_t
createOrderDescriptor
(
tOrderDescriptor
**
pOrderDesc
,
SSqlCmd
*
pCmd
,
SColumnModel
*
pModel
)
{
int32_t
numOfGroupByCols
=
0
;
int32_t
numOfGroupByCols
=
0
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
if
(
pQueryInfo
->
groupbyExpr
.
numOfGroupCols
>
0
)
{
if
(
pQueryInfo
->
groupbyExpr
.
numOfGroupCols
>
0
)
{
numOfGroupByCols
=
pQueryInfo
->
groupbyExpr
.
numOfGroupCols
;
numOfGroupByCols
=
pQueryInfo
->
groupbyExpr
.
numOfGroupCols
;
...
@@ -609,7 +609,7 @@ static int32_t createOrderDescriptor(tOrderDescriptor **pOrderDesc, SSqlCmd *pCm
...
@@ -609,7 +609,7 @@ static int32_t createOrderDescriptor(tOrderDescriptor **pOrderDesc, SSqlCmd *pCm
}
}
bool
isSameGroup
(
SSqlCmd
*
pCmd
,
SLocalMerger
*
pReducer
,
char
*
pPrev
,
tFilePage
*
tmpBuffer
)
{
bool
isSameGroup
(
SSqlCmd
*
pCmd
,
SLocalMerger
*
pReducer
,
char
*
pPrev
,
tFilePage
*
tmpBuffer
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
// disable merge procedure for column projection query
// disable merge procedure for column projection query
int16_t
functionId
=
pReducer
->
pCtx
[
0
].
functionId
;
int16_t
functionId
=
pReducer
->
pCtx
[
0
].
functionId
;
...
@@ -660,7 +660,7 @@ int32_t tscLocalReducerEnvCreate(SSqlObj *pSql, tExtMemBuffer ***pMemBuffer, tOr
...
@@ -660,7 +660,7 @@ int32_t tscLocalReducerEnvCreate(SSqlObj *pSql, tExtMemBuffer ***pMemBuffer, tOr
SColumnModel
*
pModel
=
NULL
;
SColumnModel
*
pModel
=
NULL
;
*
pFinalModel
=
NULL
;
*
pFinalModel
=
NULL
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
(
*
pMemBuffer
)
=
(
tExtMemBuffer
**
)
malloc
(
POINTER_BYTES
*
pSql
->
subState
.
numOfSub
);
(
*
pMemBuffer
)
=
(
tExtMemBuffer
**
)
malloc
(
POINTER_BYTES
*
pSql
->
subState
.
numOfSub
);
...
@@ -866,7 +866,7 @@ void adjustLoserTreeFromNewData(SLocalMerger *pLocalMerge, SLocalDataSource *pOn
...
@@ -866,7 +866,7 @@ void adjustLoserTreeFromNewData(SLocalMerger *pLocalMerge, SLocalDataSource *pOn
}
}
}
}
void
savePrevRecordAndSetupFillInfo
(
SLocalMerger
*
pLocalMerge
,
SQuery
Node
Info
*
pQueryInfo
,
SFillInfo
*
pFillInfo
)
{
void
savePrevRecordAndSetupFillInfo
(
SLocalMerger
*
pLocalMerge
,
SQueryInfo
*
pQueryInfo
,
SFillInfo
*
pFillInfo
)
{
// discard following dataset in the same group and reset the interpolation information
// discard following dataset in the same group and reset the interpolation information
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
...
@@ -886,7 +886,7 @@ void savePrevRecordAndSetupFillInfo(SLocalMerger *pLocalMerge, SQueryNodeInfo *p
...
@@ -886,7 +886,7 @@ void savePrevRecordAndSetupFillInfo(SLocalMerger *pLocalMerge, SQueryNodeInfo *p
tColModelAppend
(
pModel
,
pLocalMerge
->
discardData
,
pLocalMerge
->
prevRowOfInput
,
0
,
1
,
1
);
tColModelAppend
(
pModel
,
pLocalMerge
->
discardData
,
pLocalMerge
->
prevRowOfInput
,
0
,
1
,
1
);
}
}
static
void
genFinalResWithoutFill
(
SSqlRes
*
pRes
,
SLocalMerger
*
pLocalMerge
,
SQuery
Node
Info
*
pQueryInfo
)
{
static
void
genFinalResWithoutFill
(
SSqlRes
*
pRes
,
SLocalMerger
*
pLocalMerge
,
SQueryInfo
*
pQueryInfo
)
{
assert
(
pQueryInfo
->
interval
.
interval
==
0
||
pQueryInfo
->
fillType
==
TSDB_FILL_NONE
);
assert
(
pQueryInfo
->
interval
.
interval
==
0
||
pQueryInfo
->
fillType
==
TSDB_FILL_NONE
);
tFilePage
*
pBeforeFillData
=
pLocalMerge
->
pResultBuf
;
tFilePage
*
pBeforeFillData
=
pLocalMerge
->
pResultBuf
;
...
@@ -950,7 +950,7 @@ static void doFillResult(SSqlObj *pSql, SLocalMerger *pLocalMerge, bool doneOutp
...
@@ -950,7 +950,7 @@ static void doFillResult(SSqlObj *pSql, SLocalMerger *pLocalMerge, bool doneOutp
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
tFilePage
*
pBeforeFillData
=
pLocalMerge
->
pResultBuf
;
tFilePage
*
pBeforeFillData
=
pLocalMerge
->
pResultBuf
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SFillInfo
*
pFillInfo
=
pLocalMerge
->
pFillInfo
;
SFillInfo
*
pFillInfo
=
pLocalMerge
->
pFillInfo
;
// todo extract function
// todo extract function
...
@@ -1049,7 +1049,7 @@ static void savePreviousRow(SLocalMerger *pLocalMerge, tFilePage *tmpBuffer) {
...
@@ -1049,7 +1049,7 @@ static void savePreviousRow(SLocalMerger *pLocalMerge, tFilePage *tmpBuffer) {
static
void
doExecuteFinalMerge
(
SSqlCmd
*
pCmd
,
SLocalMerger
*
pLocalMerge
,
bool
needInit
)
{
static
void
doExecuteFinalMerge
(
SSqlCmd
*
pCmd
,
SLocalMerger
*
pLocalMerge
,
bool
needInit
)
{
// the tag columns need to be set before all functions execution
// the tag columns need to be set before all functions execution
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
for
(
int32_t
j
=
0
;
j
<
size
;
++
j
)
{
for
(
int32_t
j
=
0
;
j
<
size
;
++
j
)
{
...
@@ -1098,7 +1098,7 @@ static void handleUnprocessedRow(SSqlCmd *pCmd, SLocalMerger *pLocalMerge, tFile
...
@@ -1098,7 +1098,7 @@ static void handleUnprocessedRow(SSqlCmd *pCmd, SLocalMerger *pLocalMerge, tFile
}
}
}
}
static
int64_t
getNumOfResultLocal
(
SQuery
Node
Info
*
pQueryInfo
,
SQLFunctionCtx
*
pCtx
)
{
static
int64_t
getNumOfResultLocal
(
SQueryInfo
*
pQueryInfo
,
SQLFunctionCtx
*
pCtx
)
{
int64_t
maxOutput
=
0
;
int64_t
maxOutput
=
0
;
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
...
@@ -1127,7 +1127,7 @@ static int64_t getNumOfResultLocal(SQueryNodeInfo *pQueryInfo, SQLFunctionCtx *p
...
@@ -1127,7 +1127,7 @@ static int64_t getNumOfResultLocal(SQueryNodeInfo *pQueryInfo, SQLFunctionCtx *p
* filled with the same result, which is the tags, specified in group by clause
* filled with the same result, which is the tags, specified in group by clause
*
*
*/
*/
static
void
fillMultiRowsOfTagsVal
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
numOfRes
,
SLocalMerger
*
pLocalMerge
)
{
static
void
fillMultiRowsOfTagsVal
(
SQueryInfo
*
pQueryInfo
,
int32_t
numOfRes
,
SLocalMerger
*
pLocalMerge
)
{
int32_t
maxBufSize
=
0
;
// find the max tags column length to prepare the buffer
int32_t
maxBufSize
=
0
;
// find the max tags column length to prepare the buffer
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
...
@@ -1160,7 +1160,7 @@ static void fillMultiRowsOfTagsVal(SQueryNodeInfo *pQueryInfo, int32_t numOfRes,
...
@@ -1160,7 +1160,7 @@ static void fillMultiRowsOfTagsVal(SQueryNodeInfo *pQueryInfo, int32_t numOfRes,
free
(
buf
);
free
(
buf
);
}
}
int32_t
finalizeRes
(
SQuery
Node
Info
*
pQueryInfo
,
SLocalMerger
*
pLocalMerge
)
{
int32_t
finalizeRes
(
SQueryInfo
*
pQueryInfo
,
SLocalMerger
*
pLocalMerge
)
{
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
for
(
int32_t
k
=
0
;
k
<
size
;
++
k
)
{
for
(
int32_t
k
=
0
;
k
<
size
;
++
k
)
{
...
@@ -1184,7 +1184,7 @@ int32_t finalizeRes(SQueryNodeInfo *pQueryInfo, SLocalMerger *pLocalMerge) {
...
@@ -1184,7 +1184,7 @@ int32_t finalizeRes(SQueryNodeInfo *pQueryInfo, SLocalMerger *pLocalMerge) {
* results generated by simple aggregation function, we merge them all into one points
* results generated by simple aggregation function, we merge them all into one points
* *Exception*: column projection query, required no merge procedure
* *Exception*: column projection query, required no merge procedure
*/
*/
bool
needToMerge
(
SQuery
Node
Info
*
pQueryInfo
,
SLocalMerger
*
pLocalMerge
,
tFilePage
*
tmpBuffer
)
{
bool
needToMerge
(
SQueryInfo
*
pQueryInfo
,
SLocalMerger
*
pLocalMerge
,
tFilePage
*
tmpBuffer
)
{
int32_t
ret
=
0
;
// merge all result by default
int32_t
ret
=
0
;
// merge all result by default
int16_t
functionId
=
pLocalMerge
->
pCtx
[
0
].
functionId
;
int16_t
functionId
=
pLocalMerge
->
pCtx
[
0
].
functionId
;
...
@@ -1208,7 +1208,7 @@ bool needToMerge(SQueryNodeInfo *pQueryInfo, SLocalMerger *pLocalMerge, tFilePag
...
@@ -1208,7 +1208,7 @@ bool needToMerge(SQueryNodeInfo *pQueryInfo, SLocalMerger *pLocalMerge, tFilePag
return
(
ret
==
0
);
return
(
ret
==
0
);
}
}
static
bool
reachGroupResultLimit
(
SQuery
Node
Info
*
pQueryInfo
,
SSqlRes
*
pRes
)
{
static
bool
reachGroupResultLimit
(
SQueryInfo
*
pQueryInfo
,
SSqlRes
*
pRes
)
{
return
(
pRes
->
numOfGroups
>=
pQueryInfo
->
slimit
.
limit
&&
pQueryInfo
->
slimit
.
limit
>=
0
);
return
(
pRes
->
numOfGroups
>=
pQueryInfo
->
slimit
.
limit
&&
pQueryInfo
->
slimit
.
limit
>=
0
);
}
}
...
@@ -1216,7 +1216,7 @@ static bool saveGroupResultInfo(SSqlObj *pSql) {
...
@@ -1216,7 +1216,7 @@ static bool saveGroupResultInfo(SSqlObj *pSql) {
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
if
(
pRes
->
numOfRowsGroup
>
0
)
{
if
(
pRes
->
numOfRowsGroup
>
0
)
{
pRes
->
numOfGroups
+=
1
;
pRes
->
numOfGroups
+=
1
;
...
@@ -1245,7 +1245,7 @@ bool genFinalResults(SSqlObj *pSql, SLocalMerger *pLocalMerge, bool noMoreCurren
...
@@ -1245,7 +1245,7 @@ bool genFinalResults(SSqlObj *pSql, SLocalMerger *pLocalMerge, bool noMoreCurren
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
tFilePage
*
pResBuf
=
pLocalMerge
->
pResultBuf
;
tFilePage
*
pResBuf
=
pLocalMerge
->
pResultBuf
;
SColumnModel
*
pModel
=
pLocalMerge
->
resColModel
;
SColumnModel
*
pModel
=
pLocalMerge
->
resColModel
;
...
@@ -1292,7 +1292,7 @@ bool genFinalResults(SSqlObj *pSql, SLocalMerger *pLocalMerge, bool noMoreCurren
...
@@ -1292,7 +1292,7 @@ bool genFinalResults(SSqlObj *pSql, SLocalMerger *pLocalMerge, bool noMoreCurren
return
true
;
return
true
;
}
}
void
resetOutputBuf
(
SQuery
Node
Info
*
pQueryInfo
,
SLocalMerger
*
pLocalMerge
)
{
// reset output buffer to the beginning
void
resetOutputBuf
(
SQueryInfo
*
pQueryInfo
,
SLocalMerger
*
pLocalMerge
)
{
// reset output buffer to the beginning
size_t
t
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
size_t
t
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
for
(
int32_t
i
=
0
;
i
<
t
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
t
;
++
i
)
{
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
i
);
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
i
);
...
@@ -1311,7 +1311,7 @@ static void resetEnvForNewResultset(SSqlRes *pRes, SSqlCmd *pCmd, SLocalMerger *
...
@@ -1311,7 +1311,7 @@ static void resetEnvForNewResultset(SSqlRes *pRes, SSqlCmd *pCmd, SLocalMerger *
pRes
->
numOfRows
=
0
;
pRes
->
numOfRows
=
0
;
pRes
->
numOfRowsGroup
=
0
;
pRes
->
numOfRowsGroup
=
0
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
pQueryInfo
->
limit
.
offset
=
pLocalMerge
->
offset
;
pQueryInfo
->
limit
.
offset
=
pLocalMerge
->
offset
;
...
@@ -1334,7 +1334,7 @@ static bool doBuildFilledResultForGroup(SSqlObj *pSql) {
...
@@ -1334,7 +1334,7 @@ static bool doBuildFilledResultForGroup(SSqlObj *pSql) {
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SLocalMerger
*
pLocalMerge
=
pRes
->
pLocalMerger
;
SLocalMerger
*
pLocalMerge
=
pRes
->
pLocalMerger
;
SFillInfo
*
pFillInfo
=
pLocalMerge
->
pFillInfo
;
SFillInfo
*
pFillInfo
=
pLocalMerge
->
pFillInfo
;
...
@@ -1365,7 +1365,7 @@ static bool doHandleLastRemainData(SSqlObj *pSql) {
...
@@ -1365,7 +1365,7 @@ static bool doHandleLastRemainData(SSqlObj *pSql) {
bool
prevGroupCompleted
=
(
!
pLocalMerge
->
discard
)
&&
pLocalMerge
->
hasUnprocessedRow
;
bool
prevGroupCompleted
=
(
!
pLocalMerge
->
discard
)
&&
pLocalMerge
->
hasUnprocessedRow
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
if
((
isAllSourcesCompleted
(
pLocalMerge
)
&&
!
pLocalMerge
->
hasPrevRow
)
||
pLocalMerge
->
pLocalDataSrc
[
0
]
==
NULL
||
if
((
isAllSourcesCompleted
(
pLocalMerge
)
&&
!
pLocalMerge
->
hasPrevRow
)
||
pLocalMerge
->
pLocalDataSrc
[
0
]
==
NULL
||
prevGroupCompleted
)
{
prevGroupCompleted
)
{
...
@@ -1406,7 +1406,7 @@ static void doProcessResultInNextWindow(SSqlObj *pSql, int32_t numOfRes) {
...
@@ -1406,7 +1406,7 @@ static void doProcessResultInNextWindow(SSqlObj *pSql, int32_t numOfRes) {
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SLocalMerger
*
pLocalMerge
=
pRes
->
pLocalMerger
;
SLocalMerger
*
pLocalMerge
=
pRes
->
pLocalMerger
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
for
(
int32_t
k
=
0
;
k
<
size
;
++
k
)
{
for
(
int32_t
k
=
0
;
k
<
size
;
++
k
)
{
...
@@ -1438,7 +1438,7 @@ int32_t tscDoLocalMerge(SSqlObj *pSql) {
...
@@ -1438,7 +1438,7 @@ int32_t tscDoLocalMerge(SSqlObj *pSql) {
}
}
SLocalMerger
*
pLocalMerge
=
pRes
->
pLocalMerger
;
SLocalMerger
*
pLocalMerge
=
pRes
->
pLocalMerger
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
tFilePage
*
tmpBuffer
=
pLocalMerge
->
pTempBuffer
;
tFilePage
*
tmpBuffer
=
pLocalMerge
->
pTempBuffer
;
if
(
doHandleLastRemainData
(
pSql
))
{
if
(
doHandleLastRemainData
(
pSql
))
{
...
@@ -1626,7 +1626,7 @@ void tscInitResObjForLocalQuery(SSqlObj *pObj, int32_t numOfRes, int32_t rowLen)
...
@@ -1626,7 +1626,7 @@ void tscInitResObjForLocalQuery(SSqlObj *pObj, int32_t numOfRes, int32_t rowLen)
pRes
->
data
=
pRes
->
pLocalMerger
->
pResultBuf
->
data
;
pRes
->
data
=
pRes
->
pLocalMerger
->
pResultBuf
->
data
;
}
}
int32_t
doArithmeticCalculate
(
SQuery
Node
Info
*
pQueryInfo
,
tFilePage
*
pOutput
,
int32_t
rowSize
,
int32_t
finalRowSize
)
{
int32_t
doArithmeticCalculate
(
SQueryInfo
*
pQueryInfo
,
tFilePage
*
pOutput
,
int32_t
rowSize
,
int32_t
finalRowSize
)
{
int32_t
maxRowSize
=
MAX
(
rowSize
,
finalRowSize
);
int32_t
maxRowSize
=
MAX
(
rowSize
,
finalRowSize
);
char
*
pbuf
=
calloc
(
1
,
(
size_t
)(
pOutput
->
num
*
maxRowSize
));
char
*
pbuf
=
calloc
(
1
,
(
size_t
)(
pOutput
->
num
*
maxRowSize
));
...
...
src/client/src/tscParseInsert.c
浏览文件 @
0e0e6d5a
...
@@ -759,7 +759,7 @@ static int32_t tscCheckIfCreateTable(char **sqlstr, SSqlObj *pSql) {
...
@@ -759,7 +759,7 @@ static int32_t tscCheckIfCreateTable(char **sqlstr, SSqlObj *pSql) {
const
int32_t
STABLE_INDEX
=
1
;
const
int32_t
STABLE_INDEX
=
1
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
char
*
sql
=
*
sqlstr
;
char
*
sql
=
*
sqlstr
;
...
@@ -1055,7 +1055,7 @@ int tsParseInsertSql(SSqlObj *pSql) {
...
@@ -1055,7 +1055,7 @@ int tsParseInsertSql(SSqlObj *pSql) {
int32_t
totalNum
=
0
;
int32_t
totalNum
=
0
;
int32_t
code
=
TSDB_CODE_SUCCESS
;
int32_t
code
=
TSDB_CODE_SUCCESS
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
assert
(
pQueryInfo
!=
NULL
);
assert
(
pQueryInfo
!=
NULL
);
STableMetaInfo
*
pTableMetaInfo
=
(
pQueryInfo
->
numOfTables
==
0
)
?
tscAddEmptyMetaInfo
(
pQueryInfo
)
:
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
(
pQueryInfo
->
numOfTables
==
0
)
?
tscAddEmptyMetaInfo
(
pQueryInfo
)
:
tscGetMetaInfo
(
pQueryInfo
,
0
);
...
@@ -1313,7 +1313,7 @@ int tsInsertInitialCheck(SSqlObj *pSql) {
...
@@ -1313,7 +1313,7 @@ int tsInsertInitialCheck(SSqlObj *pSql) {
pCmd
->
count
=
0
;
pCmd
->
count
=
0
;
pCmd
->
command
=
TSDB_SQL_INSERT
;
pCmd
->
command
=
TSDB_SQL_INSERT
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfoS
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoS
(
pCmd
,
pCmd
->
clauseIndex
);
TSDB_QUERY_SET_TYPE
(
pQueryInfo
->
type
,
TSDB_QUERY_TYPE_INSERT
|
pCmd
->
insertType
);
TSDB_QUERY_SET_TYPE
(
pQueryInfo
->
type
,
TSDB_QUERY_TYPE_INSERT
|
pCmd
->
insertType
);
...
...
src/client/src/tscSQLParser.c
浏览文件 @
0e0e6d5a
...
@@ -56,7 +56,7 @@ typedef struct SConvertFunc {
...
@@ -56,7 +56,7 @@ typedef struct SConvertFunc {
int32_t
execFuncId
;
int32_t
execFuncId
;
}
SConvertFunc
;
}
SConvertFunc
;
static
SExprInfo
*
doAddProjectCol
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
colIndex
,
int32_t
tableIndex
);
static
SExprInfo
*
doAddProjectCol
(
SQueryInfo
*
pQueryInfo
,
int32_t
colIndex
,
int32_t
tableIndex
);
static
int32_t
setShowInfo
(
SSqlObj
*
pSql
,
SSqlInfo
*
pInfo
);
static
int32_t
setShowInfo
(
SSqlObj
*
pSql
,
SSqlInfo
*
pInfo
);
static
char
*
getAccountId
(
SSqlObj
*
pSql
);
static
char
*
getAccountId
(
SSqlObj
*
pSql
);
...
@@ -71,8 +71,8 @@ static int32_t setObjFullName(char* fullName, const char* account, SStrToken* pD
...
@@ -71,8 +71,8 @@ static int32_t setObjFullName(char* fullName, const char* account, SStrToken* pD
static
void
getColumnName
(
tSqlExprItem
*
pItem
,
char
*
resultFieldName
,
int32_t
nameLength
);
static
void
getColumnName
(
tSqlExprItem
*
pItem
,
char
*
resultFieldName
,
int32_t
nameLength
);
static
int32_t
addExprAndResultField
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
int32_t
colIndex
,
tSqlExprItem
*
pItem
,
bool
finalResult
);
static
int32_t
addExprAndResultField
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
int32_t
colIndex
,
tSqlExprItem
*
pItem
,
bool
finalResult
);
static
int32_t
insertResultField
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
outputIndex
,
SColumnList
*
pIdList
,
int16_t
bytes
,
static
int32_t
insertResultField
(
SQueryInfo
*
pQueryInfo
,
int32_t
outputIndex
,
SColumnList
*
pIdList
,
int16_t
bytes
,
int8_t
type
,
char
*
fieldName
,
SExprInfo
*
pSqlExpr
);
int8_t
type
,
char
*
fieldName
,
SExprInfo
*
pSqlExpr
);
static
uint8_t
convertOptr
(
SStrToken
*
pToken
);
static
uint8_t
convertOptr
(
SStrToken
*
pToken
);
...
@@ -80,26 +80,26 @@ static uint8_t convertOptr(SStrToken *pToken);
...
@@ -80,26 +80,26 @@ static uint8_t convertOptr(SStrToken *pToken);
static
int32_t
validateSelectNodeList
(
SSqlCmd
*
pCmd
,
int32_t
clauseIndex
,
SArray
*
pSelNodeList
,
bool
isSTable
,
bool
joinQuery
,
bool
timeWindowQuery
);
static
int32_t
validateSelectNodeList
(
SSqlCmd
*
pCmd
,
int32_t
clauseIndex
,
SArray
*
pSelNodeList
,
bool
isSTable
,
bool
joinQuery
,
bool
timeWindowQuery
);
static
bool
validateIpAddress
(
const
char
*
ip
,
size_t
size
);
static
bool
validateIpAddress
(
const
char
*
ip
,
size_t
size
);
static
bool
hasUnsupportFunctionsForSTableQuery
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
);
static
bool
hasUnsupportFunctionsForSTableQuery
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
);
static
bool
functionCompatibleCheck
(
SQuery
Node
Info
*
pQueryInfo
,
bool
joinQuery
,
bool
twQuery
);
static
bool
functionCompatibleCheck
(
SQueryInfo
*
pQueryInfo
,
bool
joinQuery
,
bool
twQuery
);
static
int32_t
validateGroupbyNode
(
SQuery
Node
Info
*
pQueryInfo
,
SArray
*
pList
,
SSqlCmd
*
pCmd
);
static
int32_t
validateGroupbyNode
(
SQueryInfo
*
pQueryInfo
,
SArray
*
pList
,
SSqlCmd
*
pCmd
);
static
int32_t
validateIntervalNode
(
SSqlObj
*
pSql
,
SQuery
Node
Info
*
pQueryInfo
,
SQuerySqlNode
*
pQuerySqlNode
);
static
int32_t
validateIntervalNode
(
SSqlObj
*
pSql
,
SQueryInfo
*
pQueryInfo
,
SQuerySqlNode
*
pQuerySqlNode
);
static
int32_t
parseIntervalOffset
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
SStrToken
*
offsetToken
);
static
int32_t
parseIntervalOffset
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
SStrToken
*
offsetToken
);
static
int32_t
parseSlidingClause
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
SStrToken
*
pSliding
);
static
int32_t
parseSlidingClause
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
SStrToken
*
pSliding
);
static
int32_t
addProjectionExprAndResultField
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
tSqlExprItem
*
pItem
);
static
int32_t
addProjectionExprAndResultField
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
tSqlExprItem
*
pItem
);
static
int32_t
validateWhereNode
(
SQuery
Node
Info
*
pQueryInfo
,
tSqlExpr
**
pExpr
,
SSqlObj
*
pSql
);
static
int32_t
validateWhereNode
(
SQueryInfo
*
pQueryInfo
,
tSqlExpr
**
pExpr
,
SSqlObj
*
pSql
);
static
int32_t
validateFillNode
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
SQuerySqlNode
*
pQuerySqlNode
);
static
int32_t
validateFillNode
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
SQuerySqlNode
*
pQuerySqlNode
);
static
int32_t
validateOrderbyNode
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
SQuerySqlNode
*
pQuerySqlNode
,
SSchema
*
pSchema
);
static
int32_t
validateOrderbyNode
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
SQuerySqlNode
*
pQuerySqlNode
,
SSchema
*
pSchema
);
static
int32_t
tsRewriteFieldNameIfNecessary
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
);
static
int32_t
tsRewriteFieldNameIfNecessary
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
);
static
int32_t
setAlterTableInfo
(
SSqlObj
*
pSql
,
struct
SSqlInfo
*
pInfo
);
static
int32_t
setAlterTableInfo
(
SSqlObj
*
pSql
,
struct
SSqlInfo
*
pInfo
);
static
int32_t
validateSqlFunctionInStreamSql
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
);
static
int32_t
validateSqlFunctionInStreamSql
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
);
static
int32_t
validateFunctionsInIntervalOrGroupbyQuery
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
);
static
int32_t
validateFunctionsInIntervalOrGroupbyQuery
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
);
static
int32_t
validateArithmeticSQLExpr
(
SSqlCmd
*
pCmd
,
tSqlExpr
*
pExpr
,
SQuery
Node
Info
*
pQueryInfo
,
SColumnList
*
pList
,
int32_t
*
type
);
static
int32_t
validateArithmeticSQLExpr
(
SSqlCmd
*
pCmd
,
tSqlExpr
*
pExpr
,
SQueryInfo
*
pQueryInfo
,
SColumnList
*
pList
,
int32_t
*
type
);
static
int32_t
validateEp
(
char
*
ep
);
static
int32_t
validateEp
(
char
*
ep
);
static
int32_t
validateDNodeConfig
(
SMiscInfo
*
pOptions
);
static
int32_t
validateDNodeConfig
(
SMiscInfo
*
pOptions
);
static
int32_t
validateLocalConfig
(
SMiscInfo
*
pOptions
);
static
int32_t
validateLocalConfig
(
SMiscInfo
*
pOptions
);
...
@@ -107,17 +107,17 @@ static int32_t validateColumnName(char* name);
...
@@ -107,17 +107,17 @@ static int32_t validateColumnName(char* name);
static
int32_t
setKillInfo
(
SSqlObj
*
pSql
,
struct
SSqlInfo
*
pInfo
,
int32_t
killType
);
static
int32_t
setKillInfo
(
SSqlObj
*
pSql
,
struct
SSqlInfo
*
pInfo
,
int32_t
killType
);
static
bool
validateOneTags
(
SSqlCmd
*
pCmd
,
TAOS_FIELD
*
pTagField
);
static
bool
validateOneTags
(
SSqlCmd
*
pCmd
,
TAOS_FIELD
*
pTagField
);
static
bool
hasTimestampForPointInterpQuery
(
SQuery
Node
Info
*
pQueryInfo
);
static
bool
hasTimestampForPointInterpQuery
(
SQueryInfo
*
pQueryInfo
);
static
bool
hasNormalColumnFilter
(
SQuery
Node
Info
*
pQueryInfo
);
static
bool
hasNormalColumnFilter
(
SQueryInfo
*
pQueryInfo
);
static
int32_t
validateLimitNode
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
int32_t
index
,
SQuerySqlNode
*
pQuerySqlNode
,
SSqlObj
*
pSql
);
static
int32_t
validateLimitNode
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
int32_t
index
,
SQuerySqlNode
*
pQuerySqlNode
,
SSqlObj
*
pSql
);
static
int32_t
parseCreateDBOptions
(
SSqlCmd
*
pCmd
,
SCreateDbInfo
*
pCreateDbSql
);
static
int32_t
parseCreateDBOptions
(
SSqlCmd
*
pCmd
,
SCreateDbInfo
*
pCreateDbSql
);
static
int32_t
getColumnIndexByName
(
SSqlCmd
*
pCmd
,
const
SStrToken
*
pToken
,
SQuery
Node
Info
*
pQueryInfo
,
SColumnIndex
*
pIndex
);
static
int32_t
getColumnIndexByName
(
SSqlCmd
*
pCmd
,
const
SStrToken
*
pToken
,
SQueryInfo
*
pQueryInfo
,
SColumnIndex
*
pIndex
);
static
int32_t
getTableIndexByName
(
SStrToken
*
pToken
,
SQuery
Node
Info
*
pQueryInfo
,
SColumnIndex
*
pIndex
);
static
int32_t
getTableIndexByName
(
SStrToken
*
pToken
,
SQueryInfo
*
pQueryInfo
,
SColumnIndex
*
pIndex
);
static
int32_t
getTableIndexImpl
(
SStrToken
*
pTableToken
,
SQuery
Node
Info
*
pQueryInfo
,
SColumnIndex
*
pIndex
);
static
int32_t
getTableIndexImpl
(
SStrToken
*
pTableToken
,
SQueryInfo
*
pQueryInfo
,
SColumnIndex
*
pIndex
);
static
int32_t
doFunctionsCompatibleCheck
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
);
static
int32_t
doFunctionsCompatibleCheck
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
);
static
int32_t
doLocalQueryProcess
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
SQuerySqlNode
*
pQuerySqlNode
);
static
int32_t
doLocalQueryProcess
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
SQuerySqlNode
*
pQuerySqlNode
);
static
int32_t
tscCheckCreateDbParams
(
SSqlCmd
*
pCmd
,
SCreateDbMsg
*
pCreate
);
static
int32_t
tscCheckCreateDbParams
(
SSqlCmd
*
pCmd
,
SCreateDbMsg
*
pCreate
);
static
SColumnList
createColumnList
(
int32_t
num
,
int16_t
tableIndex
,
int32_t
columnIndex
);
static
SColumnList
createColumnList
(
int32_t
num
,
int16_t
tableIndex
,
int32_t
columnIndex
);
...
@@ -126,15 +126,15 @@ static int32_t doCheckForCreateTable(SSqlObj* pSql, int32_t subClauseIndex, SSql
...
@@ -126,15 +126,15 @@ static int32_t doCheckForCreateTable(SSqlObj* pSql, int32_t subClauseIndex, SSql
static
int32_t
doCheckForCreateFromStable
(
SSqlObj
*
pSql
,
SSqlInfo
*
pInfo
);
static
int32_t
doCheckForCreateFromStable
(
SSqlObj
*
pSql
,
SSqlInfo
*
pInfo
);
static
int32_t
doCheckForStream
(
SSqlObj
*
pSql
,
SSqlInfo
*
pInfo
);
static
int32_t
doCheckForStream
(
SSqlObj
*
pSql
,
SSqlInfo
*
pInfo
);
static
int32_t
validateSqlNode
(
SSqlObj
*
pSql
,
SQuerySqlNode
*
pQuerySqlNode
,
int32_t
index
);
static
int32_t
validateSqlNode
(
SSqlObj
*
pSql
,
SQuerySqlNode
*
pQuerySqlNode
,
int32_t
index
);
static
int32_t
exprTreeFromSqlExpr
(
SSqlCmd
*
pCmd
,
tExprNode
**
pExpr
,
const
tSqlExpr
*
pSqlExpr
,
SQuery
Node
Info
*
pQueryInfo
,
SArray
*
pCols
,
uint64_t
*
uid
);
static
int32_t
exprTreeFromSqlExpr
(
SSqlCmd
*
pCmd
,
tExprNode
**
pExpr
,
const
tSqlExpr
*
pSqlExpr
,
SQueryInfo
*
pQueryInfo
,
SArray
*
pCols
,
uint64_t
*
uid
);
static
bool
validateDebugFlag
(
int32_t
v
);
static
bool
validateDebugFlag
(
int32_t
v
);
static
int32_t
checkQueryRangeForFill
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
);
static
int32_t
checkQueryRangeForFill
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
);
static
bool
isTimeWindowQuery
(
SQuery
Node
Info
*
pQueryInfo
)
{
static
bool
isTimeWindowQuery
(
SQueryInfo
*
pQueryInfo
)
{
return
pQueryInfo
->
interval
.
interval
>
0
||
pQueryInfo
->
sessionWindow
.
gap
>
0
;
return
pQueryInfo
->
interval
.
interval
>
0
||
pQueryInfo
->
sessionWindow
.
gap
>
0
;
}
}
int16_t
getNewResColId
(
SQuery
Node
Info
*
pQueryInfo
)
{
int16_t
getNewResColId
(
SQueryInfo
*
pQueryInfo
)
{
return
pQueryInfo
->
resColumnId
--
;
return
pQueryInfo
->
resColumnId
--
;
}
}
...
@@ -195,7 +195,7 @@ static int32_t invalidSqlErrMsg(char* dstBuffer, const char* errMsg) {
...
@@ -195,7 +195,7 @@ static int32_t invalidSqlErrMsg(char* dstBuffer, const char* errMsg) {
return
tscInvalidSQLErrMsg
(
dstBuffer
,
errMsg
,
NULL
);
return
tscInvalidSQLErrMsg
(
dstBuffer
,
errMsg
,
NULL
);
}
}
static
int
setColumnFilterInfoForTimestamp
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
tVariant
*
pVar
)
{
static
int
setColumnFilterInfoForTimestamp
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
tVariant
*
pVar
)
{
int64_t
time
=
0
;
int64_t
time
=
0
;
const
char
*
msg
=
"invalid timestamp"
;
const
char
*
msg
=
"invalid timestamp"
;
...
@@ -258,7 +258,7 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
...
@@ -258,7 +258,7 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
return
tscSQLSyntaxErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
NULL
,
pInfo
->
msg
);
return
tscSQLSyntaxErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
NULL
,
pInfo
->
msg
);
}
}
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfoS
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoS
(
pCmd
,
pCmd
->
clauseIndex
);
if
(
pQueryInfo
==
NULL
)
{
if
(
pQueryInfo
==
NULL
)
{
pRes
->
code
=
terrno
;
pRes
->
code
=
terrno
;
return
pRes
->
code
;
return
pRes
->
code
;
...
@@ -618,7 +618,7 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
...
@@ -618,7 +618,7 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
const
char
*
msg1
=
"columns in select clause not identical"
;
const
char
*
msg1
=
"columns in select clause not identical"
;
for
(
int32_t
i
=
pCmd
->
numOfClause
;
i
<
pInfo
->
subclauseInfo
.
numOfClause
;
++
i
)
{
for
(
int32_t
i
=
pCmd
->
numOfClause
;
i
<
pInfo
->
subclauseInfo
.
numOfClause
;
++
i
)
{
SQuery
Node
Info
*
p
=
tscGetQueryInfoS
(
pCmd
,
i
);
SQueryInfo
*
p
=
tscGetQueryInfoS
(
pCmd
,
i
);
if
(
p
==
NULL
)
{
if
(
p
==
NULL
)
{
pRes
->
code
=
terrno
;
pRes
->
code
=
terrno
;
return
pRes
->
code
;
return
pRes
->
code
;
...
@@ -641,13 +641,13 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
...
@@ -641,13 +641,13 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
pCmd
->
clauseIndex
=
0
;
pCmd
->
clauseIndex
=
0
;
// set the command/global limit parameters from the first subclause to the sqlcmd object
// set the command/global limit parameters from the first subclause to the sqlcmd object
SQuery
Node
Info
*
pQueryInfo1
=
tscGetQueryInfo
(
pCmd
,
0
);
SQueryInfo
*
pQueryInfo1
=
tscGetQueryInfo
(
pCmd
,
0
);
pCmd
->
command
=
pQueryInfo1
->
command
;
pCmd
->
command
=
pQueryInfo1
->
command
;
// if there is only one element, the limit of clause is the limit of global result.
// if there is only one element, the limit of clause is the limit of global result.
// validate the select node for "UNION ALL" subclause
// validate the select node for "UNION ALL" subclause
for
(
int32_t
i
=
1
;
i
<
pCmd
->
numOfClause
;
++
i
)
{
for
(
int32_t
i
=
1
;
i
<
pCmd
->
numOfClause
;
++
i
)
{
SQuery
Node
Info
*
pQueryInfo2
=
tscGetQueryInfo
(
pCmd
,
i
);
SQueryInfo
*
pQueryInfo2
=
tscGetQueryInfo
(
pCmd
,
i
);
int32_t
ret
=
tscFieldInfoCompare
(
&
pQueryInfo1
->
fieldsInfo
,
&
pQueryInfo2
->
fieldsInfo
);
int32_t
ret
=
tscFieldInfoCompare
(
&
pQueryInfo1
->
fieldsInfo
,
&
pQueryInfo2
->
fieldsInfo
);
if
(
ret
!=
0
)
{
if
(
ret
!=
0
)
{
...
@@ -693,7 +693,7 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
...
@@ -693,7 +693,7 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
* if the top/bottom exists, only tags columns, tbname column, and primary timestamp column
* if the top/bottom exists, only tags columns, tbname column, and primary timestamp column
* are available.
* are available.
*/
*/
static
bool
isTopBottomQuery
(
SQuery
Node
Info
*
pQueryInfo
)
{
static
bool
isTopBottomQuery
(
SQueryInfo
*
pQueryInfo
)
{
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
...
@@ -708,7 +708,7 @@ static bool isTopBottomQuery(SQueryNodeInfo* pQueryInfo) {
...
@@ -708,7 +708,7 @@ static bool isTopBottomQuery(SQueryNodeInfo* pQueryInfo) {
}
}
// need to add timestamp column in result set, if it is a time window query
// need to add timestamp column in result set, if it is a time window query
static
int32_t
addPrimaryTsColumnForTimeWindowQuery
(
SQuery
Node
Info
*
pQueryInfo
)
{
static
int32_t
addPrimaryTsColumnForTimeWindowQuery
(
SQueryInfo
*
pQueryInfo
)
{
uint64_t
uid
=
tscSqlExprGet
(
pQueryInfo
,
0
)
->
base
.
uid
;
uint64_t
uid
=
tscSqlExprGet
(
pQueryInfo
,
0
)
->
base
.
uid
;
int32_t
tableIndex
=
COLUMN_INDEX_INITIAL_VAL
;
int32_t
tableIndex
=
COLUMN_INDEX_INITIAL_VAL
;
...
@@ -732,7 +732,7 @@ static int32_t addPrimaryTsColumnForTimeWindowQuery(SQueryNodeInfo* pQueryInfo)
...
@@ -732,7 +732,7 @@ static int32_t addPrimaryTsColumnForTimeWindowQuery(SQueryNodeInfo* pQueryInfo)
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
int32_t
checkInvalidExprForTimeWindow
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
)
{
static
int32_t
checkInvalidExprForTimeWindow
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
)
{
const
char
*
msg1
=
"invalid query expression"
;
const
char
*
msg1
=
"invalid query expression"
;
const
char
*
msg2
=
"top/bottom query does not support order by value in time window query"
;
const
char
*
msg2
=
"top/bottom query does not support order by value in time window query"
;
...
@@ -773,7 +773,7 @@ static int32_t checkInvalidExprForTimeWindow(SSqlCmd* pCmd, SQueryNodeInfo* pQue
...
@@ -773,7 +773,7 @@ static int32_t checkInvalidExprForTimeWindow(SSqlCmd* pCmd, SQueryNodeInfo* pQue
return
addPrimaryTsColumnForTimeWindowQuery
(
pQueryInfo
);
return
addPrimaryTsColumnForTimeWindowQuery
(
pQueryInfo
);
}
}
int32_t
validateIntervalNode
(
SSqlObj
*
pSql
,
SQuery
Node
Info
*
pQueryInfo
,
SQuerySqlNode
*
pQuerySqlNode
)
{
int32_t
validateIntervalNode
(
SSqlObj
*
pSql
,
SQueryInfo
*
pQueryInfo
,
SQuerySqlNode
*
pQuerySqlNode
)
{
const
char
*
msg2
=
"interval cannot be less than 10 ms"
;
const
char
*
msg2
=
"interval cannot be less than 10 ms"
;
const
char
*
msg3
=
"sliding cannot be used without interval"
;
const
char
*
msg3
=
"sliding cannot be used without interval"
;
...
@@ -825,7 +825,7 @@ int32_t validateIntervalNode(SSqlObj* pSql, SQueryNodeInfo* pQueryInfo, SQuerySq
...
@@ -825,7 +825,7 @@ int32_t validateIntervalNode(SSqlObj* pSql, SQueryNodeInfo* pQueryInfo, SQuerySq
return
checkInvalidExprForTimeWindow
(
pCmd
,
pQueryInfo
);
return
checkInvalidExprForTimeWindow
(
pCmd
,
pQueryInfo
);
}
}
int32_t
validateSessionNode
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
SQuerySqlNode
*
pQuerySqlNode
)
{
int32_t
validateSessionNode
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
SQuerySqlNode
*
pQuerySqlNode
)
{
const
char
*
msg1
=
"gap should be fixed time window"
;
const
char
*
msg1
=
"gap should be fixed time window"
;
const
char
*
msg2
=
"only one type time window allowed"
;
const
char
*
msg2
=
"only one type time window allowed"
;
const
char
*
msg3
=
"invalid column name"
;
const
char
*
msg3
=
"invalid column name"
;
...
@@ -870,7 +870,7 @@ int32_t validateSessionNode(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo, SQuerySql
...
@@ -870,7 +870,7 @@ int32_t validateSessionNode(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo, SQuerySql
return
checkInvalidExprForTimeWindow
(
pCmd
,
pQueryInfo
);
return
checkInvalidExprForTimeWindow
(
pCmd
,
pQueryInfo
);
}
}
int32_t
parseIntervalOffset
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
SStrToken
*
offsetToken
)
{
int32_t
parseIntervalOffset
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
SStrToken
*
offsetToken
)
{
const
char
*
msg1
=
"interval offset cannot be negative"
;
const
char
*
msg1
=
"interval offset cannot be negative"
;
const
char
*
msg2
=
"interval offset should be shorter than interval"
;
const
char
*
msg2
=
"interval offset should be shorter than interval"
;
const
char
*
msg3
=
"cannot use 'year' as offset when interval is 'month'"
;
const
char
*
msg3
=
"cannot use 'year' as offset when interval is 'month'"
;
...
@@ -921,7 +921,7 @@ int32_t parseIntervalOffset(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo, SStrToken
...
@@ -921,7 +921,7 @@ int32_t parseIntervalOffset(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo, SStrToken
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int32_t
parseSlidingClause
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
SStrToken
*
pSliding
)
{
int32_t
parseSlidingClause
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
SStrToken
*
pSliding
)
{
const
char
*
msg0
=
"sliding value too small"
;
const
char
*
msg0
=
"sliding value too small"
;
const
char
*
msg1
=
"sliding value no larger than the interval value"
;
const
char
*
msg1
=
"sliding value no larger than the interval value"
;
const
char
*
msg2
=
"sliding value can not less than 1% of interval value"
;
const
char
*
msg2
=
"sliding value can not less than 1% of interval value"
;
...
@@ -1382,7 +1382,7 @@ int32_t setObjFullName(char* fullName, const char* account, SStrToken* pDB, SStr
...
@@ -1382,7 +1382,7 @@ int32_t setObjFullName(char* fullName, const char* account, SStrToken* pDB, SStr
return
(
totalLen
<
TSDB_TABLE_FNAME_LEN
)
?
TSDB_CODE_SUCCESS
:
TSDB_CODE_TSC_INVALID_SQL
;
return
(
totalLen
<
TSDB_TABLE_FNAME_LEN
)
?
TSDB_CODE_SUCCESS
:
TSDB_CODE_TSC_INVALID_SQL
;
}
}
void
tscInsertPrimaryTsSourceColumn
(
SQuery
Node
Info
*
pQueryInfo
,
SColumnIndex
*
pIndex
)
{
void
tscInsertPrimaryTsSourceColumn
(
SQueryInfo
*
pQueryInfo
,
SColumnIndex
*
pIndex
)
{
SColumnIndex
tsCol
=
{.
tableIndex
=
pIndex
->
tableIndex
,
.
columnIndex
=
PRIMARYKEY_TIMESTAMP_COL_INDEX
};
SColumnIndex
tsCol
=
{.
tableIndex
=
pIndex
->
tableIndex
,
.
columnIndex
=
PRIMARYKEY_TIMESTAMP_COL_INDEX
};
SSchema
s
=
{.
type
=
TSDB_DATA_TYPE_TIMESTAMP
,
.
bytes
=
TSDB_KEYSIZE
,
.
colId
=
PRIMARYKEY_TIMESTAMP_COL_INDEX
};
SSchema
s
=
{.
type
=
TSDB_DATA_TYPE_TIMESTAMP
,
.
bytes
=
TSDB_KEYSIZE
,
.
colId
=
PRIMARYKEY_TIMESTAMP_COL_INDEX
};
tscColumnListInsert
(
pQueryInfo
->
colList
,
&
tsCol
,
&
s
);
tscColumnListInsert
(
pQueryInfo
->
colList
,
&
tsCol
,
&
s
);
...
@@ -1395,7 +1395,7 @@ static int32_t handleArithmeticExpr(SSqlCmd* pCmd, int32_t clauseIndex, int32_t
...
@@ -1395,7 +1395,7 @@ static int32_t handleArithmeticExpr(SSqlCmd* pCmd, int32_t clauseIndex, int32_t
const
char
*
msg4
=
"columns from different table mixed up in arithmetic expression"
;
const
char
*
msg4
=
"columns from different table mixed up in arithmetic expression"
;
// arithmetic function in select clause
// arithmetic function in select clause
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
clauseIndex
);
SColumnList
columnList
=
{
0
};
SColumnList
columnList
=
{
0
};
int32_t
arithmeticType
=
NON_ARITHMEIC_EXPR
;
int32_t
arithmeticType
=
NON_ARITHMEIC_EXPR
;
...
@@ -1529,7 +1529,7 @@ static int32_t handleArithmeticExpr(SSqlCmd* pCmd, int32_t clauseIndex, int32_t
...
@@ -1529,7 +1529,7 @@ static int32_t handleArithmeticExpr(SSqlCmd* pCmd, int32_t clauseIndex, int32_t
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
void
addProjectQueryCol
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
startPos
,
SColumnIndex
*
pIndex
,
tSqlExprItem
*
pItem
)
{
static
void
addProjectQueryCol
(
SQueryInfo
*
pQueryInfo
,
int32_t
startPos
,
SColumnIndex
*
pIndex
,
tSqlExprItem
*
pItem
)
{
SExprInfo
*
pExpr
=
doAddProjectCol
(
pQueryInfo
,
pIndex
->
columnIndex
,
pIndex
->
tableIndex
);
SExprInfo
*
pExpr
=
doAddProjectCol
(
pQueryInfo
,
pIndex
->
columnIndex
,
pIndex
->
tableIndex
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
pIndex
->
tableIndex
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
pIndex
->
tableIndex
);
...
@@ -1552,7 +1552,7 @@ static void addProjectQueryCol(SQueryNodeInfo* pQueryInfo, int32_t startPos, SCo
...
@@ -1552,7 +1552,7 @@ static void addProjectQueryCol(SQueryNodeInfo* pQueryInfo, int32_t startPos, SCo
insertResultField
(
pQueryInfo
,
startPos
,
&
ids
,
pExpr
->
base
.
resBytes
,
(
int8_t
)
pExpr
->
base
.
resType
,
pExpr
->
base
.
aliasName
,
pExpr
);
insertResultField
(
pQueryInfo
,
startPos
,
&
ids
,
pExpr
->
base
.
resBytes
,
(
int8_t
)
pExpr
->
base
.
resType
,
pExpr
->
base
.
aliasName
,
pExpr
);
}
}
static
void
addPrimaryTsColIntoResult
(
SQuery
Node
Info
*
pQueryInfo
)
{
static
void
addPrimaryTsColIntoResult
(
SQueryInfo
*
pQueryInfo
)
{
// primary timestamp column has been added already
// primary timestamp column has been added already
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
...
@@ -1578,7 +1578,7 @@ static void addPrimaryTsColIntoResult(SQueryNodeInfo* pQueryInfo) {
...
@@ -1578,7 +1578,7 @@ static void addPrimaryTsColIntoResult(SQueryNodeInfo* pQueryInfo) {
pQueryInfo
->
type
|=
TSDB_QUERY_TYPE_PROJECTION_QUERY
;
pQueryInfo
->
type
|=
TSDB_QUERY_TYPE_PROJECTION_QUERY
;
}
}
bool
isValidDistinctSql
(
SQuery
Node
Info
*
pQueryInfo
)
{
bool
isValidDistinctSql
(
SQueryInfo
*
pQueryInfo
)
{
if
(
pQueryInfo
==
NULL
)
{
if
(
pQueryInfo
==
NULL
)
{
return
false
;
return
false
;
}
}
...
@@ -1601,7 +1601,7 @@ int32_t validateSelectNodeList(SSqlCmd* pCmd, int32_t clauseIndex, SArray* pSelN
...
@@ -1601,7 +1601,7 @@ int32_t validateSelectNodeList(SSqlCmd* pCmd, int32_t clauseIndex, SArray* pSelN
const
char
*
msg4
=
"only support distinct one tag"
;
const
char
*
msg4
=
"only support distinct one tag"
;
const
char
*
msg5
=
"invalid function name"
;
const
char
*
msg5
=
"invalid function name"
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
clauseIndex
);
// too many result columns not support order by in query
// too many result columns not support order by in query
if
(
taosArrayGetSize
(
pSelNodeList
)
>
TSDB_MAX_COLUMNS
)
{
if
(
taosArrayGetSize
(
pSelNodeList
)
>
TSDB_MAX_COLUMNS
)
{
...
@@ -1685,7 +1685,7 @@ int32_t validateSelectNodeList(SSqlCmd* pCmd, int32_t clauseIndex, SArray* pSelN
...
@@ -1685,7 +1685,7 @@ int32_t validateSelectNodeList(SSqlCmd* pCmd, int32_t clauseIndex, SArray* pSelN
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int32_t
insertResultField
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
outputIndex
,
SColumnList
*
pColList
,
int16_t
bytes
,
int32_t
insertResultField
(
SQueryInfo
*
pQueryInfo
,
int32_t
outputIndex
,
SColumnList
*
pColList
,
int16_t
bytes
,
int8_t
type
,
char
*
fieldName
,
SExprInfo
*
pSqlExpr
)
{
int8_t
type
,
char
*
fieldName
,
SExprInfo
*
pSqlExpr
)
{
for
(
int32_t
i
=
0
;
i
<
pColList
->
num
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pColList
->
num
;
++
i
)
{
int32_t
tableIndex
=
pColList
->
ids
[
i
].
tableIndex
;
int32_t
tableIndex
=
pColList
->
ids
[
i
].
tableIndex
;
...
@@ -1707,7 +1707,7 @@ int32_t insertResultField(SQueryNodeInfo* pQueryInfo, int32_t outputIndex, SColu
...
@@ -1707,7 +1707,7 @@ int32_t insertResultField(SQueryNodeInfo* pQueryInfo, int32_t outputIndex, SColu
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
SExprInfo
*
doAddProjectCol
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
colIndex
,
int32_t
tableIndex
)
{
SExprInfo
*
doAddProjectCol
(
SQueryInfo
*
pQueryInfo
,
int32_t
colIndex
,
int32_t
tableIndex
)
{
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
tableIndex
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
tableIndex
);
STableMeta
*
pTableMeta
=
pTableMetaInfo
->
pTableMeta
;
STableMeta
*
pTableMeta
=
pTableMetaInfo
->
pTableMeta
;
int32_t
numOfCols
=
tscGetNumOfColumns
(
pTableMeta
);
int32_t
numOfCols
=
tscGetNumOfColumns
(
pTableMeta
);
...
@@ -1729,7 +1729,7 @@ SExprInfo* doAddProjectCol(SQueryNodeInfo* pQueryInfo, int32_t colIndex, int32_t
...
@@ -1729,7 +1729,7 @@ SExprInfo* doAddProjectCol(SQueryNodeInfo* pQueryInfo, int32_t colIndex, int32_t
(
functionId
==
TSDB_FUNC_TAGPRJ
));
(
functionId
==
TSDB_FUNC_TAGPRJ
));
}
}
SExprInfo
*
tscAddFuncInSelectClause
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
outputColIndex
,
int16_t
functionId
,
SExprInfo
*
tscAddFuncInSelectClause
(
SQueryInfo
*
pQueryInfo
,
int32_t
outputColIndex
,
int16_t
functionId
,
SColumnIndex
*
pIndex
,
SSchema
*
pColSchema
,
int16_t
flag
)
{
SColumnIndex
*
pIndex
,
SSchema
*
pColSchema
,
int16_t
flag
)
{
int16_t
colId
=
getNewResColId
(
pQueryInfo
);
int16_t
colId
=
getNewResColId
(
pQueryInfo
);
...
@@ -1754,7 +1754,7 @@ SExprInfo* tscAddFuncInSelectClause(SQueryNodeInfo* pQueryInfo, int32_t outputCo
...
@@ -1754,7 +1754,7 @@ SExprInfo* tscAddFuncInSelectClause(SQueryNodeInfo* pQueryInfo, int32_t outputCo
return
pExpr
;
return
pExpr
;
}
}
static
int32_t
doAddProjectionExprAndResultFields
(
SQuery
Node
Info
*
pQueryInfo
,
SColumnIndex
*
pIndex
,
int32_t
startPos
)
{
static
int32_t
doAddProjectionExprAndResultFields
(
SQueryInfo
*
pQueryInfo
,
SColumnIndex
*
pIndex
,
int32_t
startPos
)
{
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
pIndex
->
tableIndex
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
pIndex
->
tableIndex
);
int32_t
numOfTotalColumns
=
0
;
int32_t
numOfTotalColumns
=
0
;
...
@@ -1784,7 +1784,7 @@ static int32_t doAddProjectionExprAndResultFields(SQueryNodeInfo* pQueryInfo, SC
...
@@ -1784,7 +1784,7 @@ static int32_t doAddProjectionExprAndResultFields(SQueryNodeInfo* pQueryInfo, SC
return
numOfTotalColumns
;
return
numOfTotalColumns
;
}
}
int32_t
addProjectionExprAndResultField
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
tSqlExprItem
*
pItem
)
{
int32_t
addProjectionExprAndResultField
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
tSqlExprItem
*
pItem
)
{
const
char
*
msg0
=
"invalid column name"
;
const
char
*
msg0
=
"invalid column name"
;
const
char
*
msg1
=
"tag for normal table query is not allowed"
;
const
char
*
msg1
=
"tag for normal table query is not allowed"
;
...
@@ -1862,7 +1862,7 @@ int32_t addProjectionExprAndResultField(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInf
...
@@ -1862,7 +1862,7 @@ int32_t addProjectionExprAndResultField(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInf
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
int32_t
setExprInfoForFunctions
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
SSchema
*
pSchema
,
SConvertFunc
cvtFunc
,
static
int32_t
setExprInfoForFunctions
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
SSchema
*
pSchema
,
SConvertFunc
cvtFunc
,
const
char
*
name
,
int32_t
resColIdx
,
SColumnIndex
*
pColIndex
,
bool
finalResult
)
{
const
char
*
name
,
int32_t
resColIdx
,
SColumnIndex
*
pColIndex
,
bool
finalResult
)
{
const
char
*
msg1
=
"not support column types"
;
const
char
*
msg1
=
"not support column types"
;
...
@@ -1937,7 +1937,7 @@ void setResultColName(char* name, tSqlExprItem* pItem, int32_t functionId, SStrT
...
@@ -1937,7 +1937,7 @@ void setResultColName(char* name, tSqlExprItem* pItem, int32_t functionId, SStrT
}
}
}
}
static
void
updateLastScanOrderIfNeeded
(
SQuery
Node
Info
*
pQueryInfo
)
{
static
void
updateLastScanOrderIfNeeded
(
SQueryInfo
*
pQueryInfo
)
{
if
(
pQueryInfo
->
sessionWindow
.
gap
>
0
||
tscGroupbyColumn
(
pQueryInfo
))
{
if
(
pQueryInfo
->
sessionWindow
.
gap
>
0
||
tscGroupbyColumn
(
pQueryInfo
))
{
size_t
numOfExpr
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
size_t
numOfExpr
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
for
(
int32_t
i
=
0
;
i
<
numOfExpr
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfExpr
;
++
i
)
{
...
@@ -1953,7 +1953,7 @@ static void updateLastScanOrderIfNeeded(SQueryNodeInfo* pQueryInfo) {
...
@@ -1953,7 +1953,7 @@ static void updateLastScanOrderIfNeeded(SQueryNodeInfo* pQueryInfo) {
}
}
}
}
int32_t
addExprAndResultField
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
int32_t
colIndex
,
tSqlExprItem
*
pItem
,
bool
finalResult
)
{
int32_t
addExprAndResultField
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
int32_t
colIndex
,
tSqlExprItem
*
pItem
,
bool
finalResult
)
{
STableMetaInfo
*
pTableMetaInfo
=
NULL
;
STableMetaInfo
*
pTableMetaInfo
=
NULL
;
int32_t
functionId
=
pItem
->
pNode
->
functionId
;
int32_t
functionId
=
pItem
->
pNode
->
functionId
;
...
@@ -2527,7 +2527,7 @@ static bool isTableBlockDistToken(SStrToken* token) {
...
@@ -2527,7 +2527,7 @@ static bool isTableBlockDistToken(SStrToken* token) {
return
(
strncasecmp
(
TSQL_BLOCK_DIST
,
tmpToken
.
z
,
tmpToken
.
n
)
==
0
&&
tmpToken
.
n
==
strlen
(
TSQL_BLOCK_DIST_L
));
return
(
strncasecmp
(
TSQL_BLOCK_DIST
,
tmpToken
.
z
,
tmpToken
.
n
)
==
0
&&
tmpToken
.
n
==
strlen
(
TSQL_BLOCK_DIST_L
));
}
}
static
int16_t
doGetColumnIndex
(
SQuery
Node
Info
*
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
;
int32_t
numOfCols
=
tscGetNumOfColumns
(
pTableMeta
)
+
tscGetNumOfTags
(
pTableMeta
);
int32_t
numOfCols
=
tscGetNumOfColumns
(
pTableMeta
)
+
tscGetNumOfTags
(
pTableMeta
);
...
@@ -2549,7 +2549,7 @@ static int16_t doGetColumnIndex(SQueryNodeInfo* pQueryInfo, int32_t index, SStrT
...
@@ -2549,7 +2549,7 @@ static int16_t doGetColumnIndex(SQueryNodeInfo* pQueryInfo, int32_t index, SStrT
return
columnIndex
;
return
columnIndex
;
}
}
int32_t
doGetColumnIndexByName
(
SSqlCmd
*
pCmd
,
SStrToken
*
pToken
,
SQuery
Node
Info
*
pQueryInfo
,
SColumnIndex
*
pIndex
)
{
int32_t
doGetColumnIndexByName
(
SSqlCmd
*
pCmd
,
SStrToken
*
pToken
,
SQueryInfo
*
pQueryInfo
,
SColumnIndex
*
pIndex
)
{
const
char
*
msg0
=
"ambiguous column name"
;
const
char
*
msg0
=
"ambiguous column name"
;
const
char
*
msg1
=
"invalid column name"
;
const
char
*
msg1
=
"invalid column name"
;
...
@@ -2593,7 +2593,7 @@ int32_t doGetColumnIndexByName(SSqlCmd* pCmd, SStrToken* pToken, SQueryNodeInfo*
...
@@ -2593,7 +2593,7 @@ int32_t doGetColumnIndexByName(SSqlCmd* pCmd, SStrToken* pToken, SQueryNodeInfo*
}
}
}
}
int32_t
getTableIndexImpl
(
SStrToken
*
pTableToken
,
SQuery
Node
Info
*
pQueryInfo
,
SColumnIndex
*
pIndex
)
{
int32_t
getTableIndexImpl
(
SStrToken
*
pTableToken
,
SQueryInfo
*
pQueryInfo
,
SColumnIndex
*
pIndex
)
{
if
(
pTableToken
->
n
==
0
)
{
// only one table and no table name prefix in column name
if
(
pTableToken
->
n
==
0
)
{
// only one table and no table name prefix in column name
if
(
pQueryInfo
->
numOfTables
==
1
)
{
if
(
pQueryInfo
->
numOfTables
==
1
)
{
pIndex
->
tableIndex
=
0
;
pIndex
->
tableIndex
=
0
;
...
@@ -2621,7 +2621,7 @@ int32_t getTableIndexImpl(SStrToken* pTableToken, SQueryNodeInfo* pQueryInfo, SC
...
@@ -2621,7 +2621,7 @@ int32_t getTableIndexImpl(SStrToken* pTableToken, SQueryNodeInfo* pQueryInfo, SC
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int32_t
getTableIndexByName
(
SStrToken
*
pToken
,
SQuery
Node
Info
*
pQueryInfo
,
SColumnIndex
*
pIndex
)
{
int32_t
getTableIndexByName
(
SStrToken
*
pToken
,
SQueryInfo
*
pQueryInfo
,
SColumnIndex
*
pIndex
)
{
SStrToken
tableToken
=
{
0
};
SStrToken
tableToken
=
{
0
};
extractTableNameFromToken
(
pToken
,
&
tableToken
);
extractTableNameFromToken
(
pToken
,
&
tableToken
);
...
@@ -2632,7 +2632,7 @@ int32_t getTableIndexByName(SStrToken* pToken, SQueryNodeInfo* pQueryInfo, SColu
...
@@ -2632,7 +2632,7 @@ int32_t getTableIndexByName(SStrToken* pToken, SQueryNodeInfo* pQueryInfo, SColu
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int32_t
getColumnIndexByName
(
SSqlCmd
*
pCmd
,
const
SStrToken
*
pToken
,
SQuery
Node
Info
*
pQueryInfo
,
SColumnIndex
*
pIndex
)
{
int32_t
getColumnIndexByName
(
SSqlCmd
*
pCmd
,
const
SStrToken
*
pToken
,
SQueryInfo
*
pQueryInfo
,
SColumnIndex
*
pIndex
)
{
if
(
pQueryInfo
->
pTableMetaInfo
==
NULL
||
pQueryInfo
->
numOfTables
==
0
)
{
if
(
pQueryInfo
->
pTableMetaInfo
==
NULL
||
pQueryInfo
->
numOfTables
==
0
)
{
return
TSDB_CODE_TSC_INVALID_SQL
;
return
TSDB_CODE_TSC_INVALID_SQL
;
}
}
...
@@ -2773,7 +2773,7 @@ bool validateIpAddress(const char* ip, size_t size) {
...
@@ -2773,7 +2773,7 @@ bool validateIpAddress(const char* ip, size_t size) {
return
epAddr
!=
INADDR_NONE
;
return
epAddr
!=
INADDR_NONE
;
}
}
int32_t
tscTansformFuncForSTableQuery
(
SQuery
Node
Info
*
pQueryInfo
)
{
int32_t
tscTansformFuncForSTableQuery
(
SQueryInfo
*
pQueryInfo
)
{
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
if
(
pTableMetaInfo
->
pTableMeta
==
NULL
||
!
UTIL_TABLE_IS_SUPER_TABLE
(
pTableMetaInfo
))
{
if
(
pTableMetaInfo
->
pTableMeta
==
NULL
||
!
UTIL_TABLE_IS_SUPER_TABLE
(
pTableMetaInfo
))
{
...
@@ -2813,7 +2813,7 @@ int32_t tscTansformFuncForSTableQuery(SQueryNodeInfo* pQueryInfo) {
...
@@ -2813,7 +2813,7 @@ int32_t tscTansformFuncForSTableQuery(SQueryNodeInfo* pQueryInfo) {
}
}
/* transfer the field-info back to original input format */
/* transfer the field-info back to original input format */
void
tscRestoreFuncForSTableQuery
(
SQuery
Node
Info
*
pQueryInfo
)
{
void
tscRestoreFuncForSTableQuery
(
SQueryInfo
*
pQueryInfo
)
{
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
if
(
!
UTIL_TABLE_IS_SUPER_TABLE
(
pTableMetaInfo
))
{
if
(
!
UTIL_TABLE_IS_SUPER_TABLE
(
pTableMetaInfo
))
{
return
;
return
;
...
@@ -2846,7 +2846,7 @@ void tscRestoreFuncForSTableQuery(SQueryNodeInfo* pQueryInfo) {
...
@@ -2846,7 +2846,7 @@ void tscRestoreFuncForSTableQuery(SQueryNodeInfo* pQueryInfo) {
}
}
}
}
bool
hasUnsupportFunctionsForSTableQuery
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
)
{
bool
hasUnsupportFunctionsForSTableQuery
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
)
{
const
char
*
msg1
=
"TWA not allowed to apply to super table directly"
;
const
char
*
msg1
=
"TWA not allowed to apply to super table directly"
;
const
char
*
msg2
=
"TWA only support group by tbname for super table query"
;
const
char
*
msg2
=
"TWA only support group by tbname for super table query"
;
const
char
*
msg3
=
"function not support for super table query"
;
const
char
*
msg3
=
"function not support for super table query"
;
...
@@ -2882,7 +2882,7 @@ bool hasUnsupportFunctionsForSTableQuery(SSqlCmd* pCmd, SQueryNodeInfo* pQueryIn
...
@@ -2882,7 +2882,7 @@ bool hasUnsupportFunctionsForSTableQuery(SSqlCmd* pCmd, SQueryNodeInfo* pQueryIn
return
false
;
return
false
;
}
}
static
bool
groupbyTagsOrNull
(
SQuery
Node
Info
*
pQueryInfo
)
{
static
bool
groupbyTagsOrNull
(
SQueryInfo
*
pQueryInfo
)
{
if
(
pQueryInfo
->
groupbyExpr
.
columnInfo
==
NULL
||
if
(
pQueryInfo
->
groupbyExpr
.
columnInfo
==
NULL
||
taosArrayGetSize
(
pQueryInfo
->
groupbyExpr
.
columnInfo
)
==
0
)
{
taosArrayGetSize
(
pQueryInfo
->
groupbyExpr
.
columnInfo
)
==
0
)
{
return
true
;
return
true
;
...
@@ -2899,7 +2899,7 @@ static bool groupbyTagsOrNull(SQueryNodeInfo* pQueryInfo) {
...
@@ -2899,7 +2899,7 @@ static bool groupbyTagsOrNull(SQueryNodeInfo* pQueryInfo) {
return
true
;
return
true
;
}
}
static
bool
functionCompatibleCheck
(
SQuery
Node
Info
*
pQueryInfo
,
bool
joinQuery
,
bool
twQuery
)
{
static
bool
functionCompatibleCheck
(
SQueryInfo
*
pQueryInfo
,
bool
joinQuery
,
bool
twQuery
)
{
int32_t
startIdx
=
0
;
int32_t
startIdx
=
0
;
size_t
numOfExpr
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
size_t
numOfExpr
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
...
@@ -2951,7 +2951,7 @@ static bool functionCompatibleCheck(SQueryNodeInfo* pQueryInfo, bool joinQuery,
...
@@ -2951,7 +2951,7 @@ static bool functionCompatibleCheck(SQueryNodeInfo* pQueryInfo, bool joinQuery,
return
true
;
return
true
;
}
}
int32_t
validateGroupbyNode
(
SQuery
Node
Info
*
pQueryInfo
,
SArray
*
pList
,
SSqlCmd
*
pCmd
)
{
int32_t
validateGroupbyNode
(
SQueryInfo
*
pQueryInfo
,
SArray
*
pList
,
SSqlCmd
*
pCmd
)
{
const
char
*
msg1
=
"too many columns in group by clause"
;
const
char
*
msg1
=
"too many columns in group by clause"
;
const
char
*
msg2
=
"invalid column name in group by clause"
;
const
char
*
msg2
=
"invalid column name in group by clause"
;
const
char
*
msg3
=
"columns from one table allowed as group by columns"
;
const
char
*
msg3
=
"columns from one table allowed as group by columns"
;
...
@@ -3082,7 +3082,7 @@ static SColumnFilterInfo* addColumnFilterInfo(SColumn* pColumn) {
...
@@ -3082,7 +3082,7 @@ static SColumnFilterInfo* addColumnFilterInfo(SColumn* pColumn) {
return
pColFilterInfo
;
return
pColFilterInfo
;
}
}
static
int32_t
doExtractColumnFilterInfo
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
SColumnFilterInfo
*
pColumnFilter
,
static
int32_t
doExtractColumnFilterInfo
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
SColumnFilterInfo
*
pColumnFilter
,
SColumnIndex
*
columnIndex
,
tSqlExpr
*
pExpr
)
{
SColumnIndex
*
columnIndex
,
tSqlExpr
*
pExpr
)
{
const
char
*
msg
=
"not supported filter condition"
;
const
char
*
msg
=
"not supported filter condition"
;
...
@@ -3232,7 +3232,7 @@ enum {
...
@@ -3232,7 +3232,7 @@ enum {
TSQL_EXPR_TBNAME
=
3
,
TSQL_EXPR_TBNAME
=
3
,
};
};
static
int32_t
extractColumnFilterInfo
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
SColumnIndex
*
pIndex
,
tSqlExpr
*
pExpr
,
int32_t
sqlOptr
)
{
static
int32_t
extractColumnFilterInfo
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
SColumnIndex
*
pIndex
,
tSqlExpr
*
pExpr
,
int32_t
sqlOptr
)
{
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
pIndex
->
tableIndex
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
pIndex
->
tableIndex
);
STableMeta
*
pTableMeta
=
pTableMetaInfo
->
pTableMeta
;
STableMeta
*
pTableMeta
=
pTableMetaInfo
->
pTableMeta
;
...
@@ -3298,7 +3298,7 @@ static int32_t extractColumnFilterInfo(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo
...
@@ -3298,7 +3298,7 @@ static int32_t extractColumnFilterInfo(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo
return
doExtractColumnFilterInfo
(
pCmd
,
pQueryInfo
,
pColFilter
,
pIndex
,
pExpr
);
return
doExtractColumnFilterInfo
(
pCmd
,
pQueryInfo
,
pColFilter
,
pIndex
,
pExpr
);
}
}
static
int32_t
getTablenameCond
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
tSqlExpr
*
pTableCond
,
SStringBuilder
*
sb
)
{
static
int32_t
getTablenameCond
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
tSqlExpr
*
pTableCond
,
SStringBuilder
*
sb
)
{
const
char
*
msg0
=
"invalid table name list"
;
const
char
*
msg0
=
"invalid table name list"
;
const
char
*
msg1
=
"not string following like"
;
const
char
*
msg1
=
"not string following like"
;
...
@@ -3332,7 +3332,7 @@ static int32_t getTablenameCond(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo, tSqlE
...
@@ -3332,7 +3332,7 @@ static int32_t getTablenameCond(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo, tSqlE
return
ret
;
return
ret
;
}
}
static
int32_t
getColumnQueryCondInfo
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
tSqlExpr
*
pExpr
,
int32_t
relOptr
)
{
static
int32_t
getColumnQueryCondInfo
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
tSqlExpr
*
pExpr
,
int32_t
relOptr
)
{
if
(
pExpr
==
NULL
)
{
if
(
pExpr
==
NULL
)
{
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
@@ -3354,7 +3354,7 @@ static int32_t getColumnQueryCondInfo(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo,
...
@@ -3354,7 +3354,7 @@ static int32_t getColumnQueryCondInfo(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo,
}
}
}
}
static
int32_t
getJoinCondInfo
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
tSqlExpr
*
pExpr
)
{
static
int32_t
getJoinCondInfo
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
tSqlExpr
*
pExpr
)
{
const
char
*
msg1
=
"invalid join query condition"
;
const
char
*
msg1
=
"invalid join query condition"
;
const
char
*
msg2
=
"invalid table name in join query"
;
const
char
*
msg2
=
"invalid table name in join query"
;
const
char
*
msg3
=
"type of join columns must be identical"
;
const
char
*
msg3
=
"type of join columns must be identical"
;
...
@@ -3412,7 +3412,7 @@ static int32_t getJoinCondInfo(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo, tSqlEx
...
@@ -3412,7 +3412,7 @@ static int32_t getJoinCondInfo(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo, tSqlEx
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
int32_t
validateSQLExpr
(
SSqlCmd
*
pCmd
,
tSqlExpr
*
pExpr
,
SQuery
Node
Info
*
pQueryInfo
,
SColumnList
*
pList
,
static
int32_t
validateSQLExpr
(
SSqlCmd
*
pCmd
,
tSqlExpr
*
pExpr
,
SQueryInfo
*
pQueryInfo
,
SColumnList
*
pList
,
int32_t
*
type
,
uint64_t
*
uid
)
{
int32_t
*
type
,
uint64_t
*
uid
)
{
if
(
pExpr
->
type
==
SQL_NODE_TABLE_COLUMN
)
{
if
(
pExpr
->
type
==
SQL_NODE_TABLE_COLUMN
)
{
if
(
*
type
==
NON_ARITHMEIC_EXPR
)
{
if
(
*
type
==
NON_ARITHMEIC_EXPR
)
{
...
@@ -3488,7 +3488,7 @@ static int32_t validateSQLExpr(SSqlCmd* pCmd, tSqlExpr* pExpr, SQueryNodeInfo* p
...
@@ -3488,7 +3488,7 @@ static int32_t validateSQLExpr(SSqlCmd* pCmd, tSqlExpr* pExpr, SQueryNodeInfo* p
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
int32_t
validateArithmeticSQLExpr
(
SSqlCmd
*
pCmd
,
tSqlExpr
*
pExpr
,
SQuery
Node
Info
*
pQueryInfo
,
SColumnList
*
pList
,
int32_t
*
type
)
{
static
int32_t
validateArithmeticSQLExpr
(
SSqlCmd
*
pCmd
,
tSqlExpr
*
pExpr
,
SQueryInfo
*
pQueryInfo
,
SColumnList
*
pList
,
int32_t
*
type
)
{
if
(
pExpr
==
NULL
)
{
if
(
pExpr
==
NULL
)
{
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
@@ -3593,7 +3593,7 @@ static void exchangeExpr(tSqlExpr* pExpr) {
...
@@ -3593,7 +3593,7 @@ static void exchangeExpr(tSqlExpr* pExpr) {
}
}
}
}
static
bool
validateJoinExprNode
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
tSqlExpr
*
pExpr
,
SColumnIndex
*
pLeftIndex
)
{
static
bool
validateJoinExprNode
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
tSqlExpr
*
pExpr
,
SColumnIndex
*
pLeftIndex
)
{
const
char
*
msg1
=
"illegal column name"
;
const
char
*
msg1
=
"illegal column name"
;
const
char
*
msg2
=
"= is expected in join expression"
;
const
char
*
msg2
=
"= is expected in join expression"
;
const
char
*
msg3
=
"join column must have same type"
;
const
char
*
msg3
=
"join column must have same type"
;
...
@@ -3670,7 +3670,7 @@ static int32_t setExprToCond(tSqlExpr** parent, tSqlExpr* pExpr, const char* msg
...
@@ -3670,7 +3670,7 @@ static int32_t setExprToCond(tSqlExpr** parent, tSqlExpr* pExpr, const char* msg
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
int32_t
handleExprInQueryCond
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
tSqlExpr
**
pExpr
,
SCondExpr
*
pCondExpr
,
static
int32_t
handleExprInQueryCond
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
tSqlExpr
**
pExpr
,
SCondExpr
*
pCondExpr
,
int32_t
*
type
,
int32_t
parentOptr
)
{
int32_t
*
type
,
int32_t
parentOptr
)
{
const
char
*
msg1
=
"table query cannot use tags filter"
;
const
char
*
msg1
=
"table query cannot use tags filter"
;
const
char
*
msg2
=
"illegal column name"
;
const
char
*
msg2
=
"illegal column name"
;
...
@@ -3793,7 +3793,7 @@ static int32_t handleExprInQueryCond(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo,
...
@@ -3793,7 +3793,7 @@ static int32_t handleExprInQueryCond(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo,
return
ret
;
return
ret
;
}
}
int32_t
getQueryCondExpr
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
tSqlExpr
**
pExpr
,
SCondExpr
*
pCondExpr
,
int32_t
getQueryCondExpr
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
tSqlExpr
**
pExpr
,
SCondExpr
*
pCondExpr
,
int32_t
*
type
,
int32_t
parentOptr
)
{
int32_t
*
type
,
int32_t
parentOptr
)
{
if
(
pExpr
==
NULL
)
{
if
(
pExpr
==
NULL
)
{
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
...
@@ -3841,7 +3841,7 @@ int32_t getQueryCondExpr(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo, tSqlExpr** p
...
@@ -3841,7 +3841,7 @@ int32_t getQueryCondExpr(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo, tSqlExpr** p
return
handleExprInQueryCond
(
pCmd
,
pQueryInfo
,
pExpr
,
pCondExpr
,
type
,
parentOptr
);
return
handleExprInQueryCond
(
pCmd
,
pQueryInfo
,
pExpr
,
pCondExpr
,
type
,
parentOptr
);
}
}
static
void
doExtractExprForSTable
(
SSqlCmd
*
pCmd
,
tSqlExpr
**
pExpr
,
SQuery
Node
Info
*
pQueryInfo
,
tSqlExpr
**
pOut
,
int32_t
tableIndex
)
{
static
void
doExtractExprForSTable
(
SSqlCmd
*
pCmd
,
tSqlExpr
**
pExpr
,
SQueryInfo
*
pQueryInfo
,
tSqlExpr
**
pOut
,
int32_t
tableIndex
)
{
if
(
tSqlExprIsParentOfLeaf
(
*
pExpr
))
{
if
(
tSqlExprIsParentOfLeaf
(
*
pExpr
))
{
tSqlExpr
*
pLeft
=
(
*
pExpr
)
->
pLeft
;
tSqlExpr
*
pLeft
=
(
*
pExpr
)
->
pLeft
;
...
@@ -3865,7 +3865,7 @@ static void doExtractExprForSTable(SSqlCmd* pCmd, tSqlExpr** pExpr, SQueryNodeIn
...
@@ -3865,7 +3865,7 @@ static void doExtractExprForSTable(SSqlCmd* pCmd, tSqlExpr** pExpr, SQueryNodeIn
}
}
}
}
static
tSqlExpr
*
extractExprForSTable
(
SSqlCmd
*
pCmd
,
tSqlExpr
**
pExpr
,
SQuery
Node
Info
*
pQueryInfo
,
int32_t
tableIndex
)
{
static
tSqlExpr
*
extractExprForSTable
(
SSqlCmd
*
pCmd
,
tSqlExpr
**
pExpr
,
SQueryInfo
*
pQueryInfo
,
int32_t
tableIndex
)
{
tSqlExpr
*
pResExpr
=
NULL
;
tSqlExpr
*
pResExpr
=
NULL
;
if
(
*
pExpr
!=
NULL
)
{
if
(
*
pExpr
!=
NULL
)
{
...
@@ -3889,7 +3889,7 @@ int tableNameCompar(const void* lhs, const void* rhs) {
...
@@ -3889,7 +3889,7 @@ int tableNameCompar(const void* lhs, const void* rhs) {
return
ret
>
0
?
1
:
-
1
;
return
ret
>
0
?
1
:
-
1
;
}
}
static
int32_t
setTableCondForSTableQuery
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
const
char
*
account
,
static
int32_t
setTableCondForSTableQuery
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
const
char
*
account
,
tSqlExpr
*
pExpr
,
int16_t
tableCondIndex
,
SStringBuilder
*
sb
)
{
tSqlExpr
*
pExpr
,
int16_t
tableCondIndex
,
SStringBuilder
*
sb
)
{
const
char
*
msg
=
"table name too long"
;
const
char
*
msg
=
"table name too long"
;
...
@@ -3963,7 +3963,7 @@ static int32_t setTableCondForSTableQuery(SSqlCmd* pCmd, SQueryNodeInfo* pQueryI
...
@@ -3963,7 +3963,7 @@ static int32_t setTableCondForSTableQuery(SSqlCmd* pCmd, SQueryNodeInfo* pQueryI
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
bool
validateFilterExpr
(
SQuery
Node
Info
*
pQueryInfo
)
{
static
bool
validateFilterExpr
(
SQueryInfo
*
pQueryInfo
)
{
SArray
*
pColList
=
pQueryInfo
->
colList
;
SArray
*
pColList
=
pQueryInfo
->
colList
;
size_t
num
=
taosArrayGetSize
(
pColList
);
size_t
num
=
taosArrayGetSize
(
pColList
);
...
@@ -3991,7 +3991,7 @@ static bool validateFilterExpr(SQueryNodeInfo* pQueryInfo) {
...
@@ -3991,7 +3991,7 @@ static bool validateFilterExpr(SQueryNodeInfo* pQueryInfo) {
return
true
;
return
true
;
}
}
static
int32_t
getTimeRangeFromExpr
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
tSqlExpr
*
pExpr
)
{
static
int32_t
getTimeRangeFromExpr
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
tSqlExpr
*
pExpr
)
{
const
char
*
msg0
=
"invalid timestamp"
;
const
char
*
msg0
=
"invalid timestamp"
;
const
char
*
msg1
=
"only one time stamp window allowed"
;
const
char
*
msg1
=
"only one time stamp window allowed"
;
...
@@ -4036,7 +4036,7 @@ static int32_t getTimeRangeFromExpr(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo, t
...
@@ -4036,7 +4036,7 @@ static int32_t getTimeRangeFromExpr(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo, t
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
int32_t
validateJoinExpr
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
SCondExpr
*
pCondExpr
)
{
static
int32_t
validateJoinExpr
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
SCondExpr
*
pCondExpr
)
{
const
char
*
msg1
=
"super table join requires tags column"
;
const
char
*
msg1
=
"super table join requires tags column"
;
const
char
*
msg2
=
"timestamp join condition missing"
;
const
char
*
msg2
=
"timestamp join condition missing"
;
const
char
*
msg3
=
"condition missing for join query"
;
const
char
*
msg3
=
"condition missing for join query"
;
...
@@ -4086,7 +4086,7 @@ static void cleanQueryExpr(SCondExpr* pCondExpr) {
...
@@ -4086,7 +4086,7 @@ static void cleanQueryExpr(SCondExpr* pCondExpr) {
}
}
}
}
static
void
doAddJoinTagsColumnsIntoTagList
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
SCondExpr
*
pCondExpr
)
{
static
void
doAddJoinTagsColumnsIntoTagList
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
SCondExpr
*
pCondExpr
)
{
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
if
(
QUERY_IS_JOIN_QUERY
(
pQueryInfo
->
type
)
&&
UTIL_TABLE_IS_SUPER_TABLE
(
pTableMetaInfo
))
{
if
(
QUERY_IS_JOIN_QUERY
(
pQueryInfo
->
type
)
&&
UTIL_TABLE_IS_SUPER_TABLE
(
pTableMetaInfo
))
{
SColumnIndex
index
=
COLUMN_INDEX_INITIALIZER
;
SColumnIndex
index
=
COLUMN_INDEX_INITIALIZER
;
...
@@ -4192,7 +4192,7 @@ static int32_t validateTagCondExpr(SSqlCmd* pCmd, tExprNode *p) {
...
@@ -4192,7 +4192,7 @@ static int32_t validateTagCondExpr(SSqlCmd* pCmd, tExprNode *p) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
int32_t
getTagQueryCondExpr
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
SCondExpr
*
pCondExpr
,
tSqlExpr
**
pExpr
)
{
static
int32_t
getTagQueryCondExpr
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
SCondExpr
*
pCondExpr
,
tSqlExpr
**
pExpr
)
{
int32_t
ret
=
TSDB_CODE_SUCCESS
;
int32_t
ret
=
TSDB_CODE_SUCCESS
;
if
(
pCondExpr
->
pTagCond
==
NULL
)
{
if
(
pCondExpr
->
pTagCond
==
NULL
)
{
...
@@ -4257,7 +4257,7 @@ static int32_t getTagQueryCondExpr(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo, SC
...
@@ -4257,7 +4257,7 @@ static int32_t getTagQueryCondExpr(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo, SC
return
ret
;
return
ret
;
}
}
int32_t
validateWhereNode
(
SQuery
Node
Info
*
pQueryInfo
,
tSqlExpr
**
pExpr
,
SSqlObj
*
pSql
)
{
int32_t
validateWhereNode
(
SQueryInfo
*
pQueryInfo
,
tSqlExpr
**
pExpr
,
SSqlObj
*
pSql
)
{
if
(
pExpr
==
NULL
)
{
if
(
pExpr
==
NULL
)
{
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
@@ -4420,7 +4420,7 @@ int32_t getTimeRange(STimeWindow* win, tSqlExpr* pRight, int32_t optr, int16_t t
...
@@ -4420,7 +4420,7 @@ int32_t getTimeRange(STimeWindow* win, tSqlExpr* pRight, int32_t optr, int16_t t
}
}
// todo error !!!!
// todo error !!!!
int32_t
tsRewriteFieldNameIfNecessary
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
)
{
int32_t
tsRewriteFieldNameIfNecessary
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
)
{
const
char
rep
[]
=
{
'('
,
')'
,
'*'
,
','
,
'.'
,
'/'
,
'\\'
,
'+'
,
'-'
,
'%'
,
' '
};
const
char
rep
[]
=
{
'('
,
')'
,
'*'
,
','
,
'.'
,
'/'
,
'\\'
,
'+'
,
'-'
,
'%'
,
' '
};
for
(
int32_t
i
=
0
;
i
<
pQueryInfo
->
fieldsInfo
.
numOfOutput
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pQueryInfo
->
fieldsInfo
.
numOfOutput
;
++
i
)
{
...
@@ -4451,7 +4451,7 @@ int32_t tsRewriteFieldNameIfNecessary(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo)
...
@@ -4451,7 +4451,7 @@ int32_t tsRewriteFieldNameIfNecessary(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo)
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int32_t
validateFillNode
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
SQuerySqlNode
*
pQuerySqlNode
)
{
int32_t
validateFillNode
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
SQuerySqlNode
*
pQuerySqlNode
)
{
SArray
*
pFillToken
=
pQuerySqlNode
->
fillType
;
SArray
*
pFillToken
=
pQuerySqlNode
->
fillType
;
if
(
pQuerySqlNode
->
fillType
==
NULL
)
{
if
(
pQuerySqlNode
->
fillType
==
NULL
)
{
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
...
@@ -4574,7 +4574,7 @@ int32_t validateFillNode(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo, SQuerySqlNod
...
@@ -4574,7 +4574,7 @@ int32_t validateFillNode(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo, SQuerySqlNod
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
void
setDefaultOrderInfo
(
SQuery
Node
Info
*
pQueryInfo
)
{
static
void
setDefaultOrderInfo
(
SQueryInfo
*
pQueryInfo
)
{
/* set default timestamp order information for all queries */
/* set default timestamp order information for all queries */
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
...
@@ -4591,7 +4591,7 @@ static void setDefaultOrderInfo(SQueryNodeInfo* pQueryInfo) {
...
@@ -4591,7 +4591,7 @@ static void setDefaultOrderInfo(SQueryNodeInfo* pQueryInfo) {
}
}
}
}
int32_t
validateOrderbyNode
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
SQuerySqlNode
*
pQuerySqlNode
,
SSchema
*
pSchema
)
{
int32_t
validateOrderbyNode
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
SQuerySqlNode
*
pQuerySqlNode
,
SSchema
*
pSchema
)
{
const
char
*
msg0
=
"only support order by primary timestamp"
;
const
char
*
msg0
=
"only support order by primary timestamp"
;
const
char
*
msg1
=
"invalid column name"
;
const
char
*
msg1
=
"invalid column name"
;
const
char
*
msg2
=
"order by primary timestamp or first tag in groupby clause allowed"
;
const
char
*
msg2
=
"order by primary timestamp or first tag in groupby clause allowed"
;
...
@@ -4795,7 +4795,7 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
...
@@ -4795,7 +4795,7 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SAlterTableInfo
*
pAlterSQL
=
pInfo
->
pAlterInfo
;
SAlterTableInfo
*
pAlterSQL
=
pInfo
->
pAlterInfo
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
DEFAULT_TABLE_INDEX
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
DEFAULT_TABLE_INDEX
);
...
@@ -5047,7 +5047,7 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
...
@@ -5047,7 +5047,7 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int32_t
validateSqlFunctionInStreamSql
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
)
{
int32_t
validateSqlFunctionInStreamSql
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
)
{
const
char
*
msg0
=
"sample interval can not be less than 10ms."
;
const
char
*
msg0
=
"sample interval can not be less than 10ms."
;
const
char
*
msg1
=
"functions not allowed in select clause"
;
const
char
*
msg1
=
"functions not allowed in select clause"
;
...
@@ -5068,7 +5068,7 @@ int32_t validateSqlFunctionInStreamSql(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo
...
@@ -5068,7 +5068,7 @@ int32_t validateSqlFunctionInStreamSql(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int32_t
validateFunctionsInIntervalOrGroupbyQuery
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
)
{
int32_t
validateFunctionsInIntervalOrGroupbyQuery
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
)
{
bool
isProjectionFunction
=
false
;
bool
isProjectionFunction
=
false
;
const
char
*
msg1
=
"column projection is not compatible with interval"
;
const
char
*
msg1
=
"column projection is not compatible with interval"
;
...
@@ -5278,7 +5278,7 @@ int32_t validateColumnName(char* name) {
...
@@ -5278,7 +5278,7 @@ int32_t validateColumnName(char* name) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
bool
hasTimestampForPointInterpQuery
(
SQuery
Node
Info
*
pQueryInfo
)
{
bool
hasTimestampForPointInterpQuery
(
SQueryInfo
*
pQueryInfo
)
{
if
(
!
tscIsPointInterpQuery
(
pQueryInfo
))
{
if
(
!
tscIsPointInterpQuery
(
pQueryInfo
))
{
return
true
;
return
true
;
}
}
...
@@ -5286,7 +5286,7 @@ bool hasTimestampForPointInterpQuery(SQueryNodeInfo* pQueryInfo) {
...
@@ -5286,7 +5286,7 @@ bool hasTimestampForPointInterpQuery(SQueryNodeInfo* pQueryInfo) {
return
(
pQueryInfo
->
window
.
skey
==
pQueryInfo
->
window
.
ekey
)
&&
(
pQueryInfo
->
window
.
skey
!=
0
);
return
(
pQueryInfo
->
window
.
skey
==
pQueryInfo
->
window
.
ekey
)
&&
(
pQueryInfo
->
window
.
skey
!=
0
);
}
}
int32_t
validateLimitNode
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
int32_t
clauseIndex
,
SQuerySqlNode
*
pQuerySqlNode
,
SSqlObj
*
pSql
)
{
int32_t
validateLimitNode
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
int32_t
clauseIndex
,
SQuerySqlNode
*
pQuerySqlNode
,
SSqlObj
*
pSql
)
{
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
const
char
*
msg0
=
"soffset/offset can not be less than 0"
;
const
char
*
msg0
=
"soffset/offset can not be less than 0"
;
...
@@ -5481,10 +5481,10 @@ int32_t parseCreateDBOptions(SSqlCmd* pCmd, SCreateDbInfo* pCreateDbSql) {
...
@@ -5481,10 +5481,10 @@ int32_t parseCreateDBOptions(SSqlCmd* pCmd, SCreateDbInfo* pCreateDbSql) {
}
}
void
addGroupInfoForSubquery
(
SSqlObj
*
pParentObj
,
SSqlObj
*
pSql
,
int32_t
subClauseIndex
,
int32_t
tableIndex
)
{
void
addGroupInfoForSubquery
(
SSqlObj
*
pParentObj
,
SSqlObj
*
pSql
,
int32_t
subClauseIndex
,
int32_t
tableIndex
)
{
SQuery
Node
Info
*
pParentQueryInfo
=
tscGetQueryInfo
(
&
pParentObj
->
cmd
,
subClauseIndex
);
SQueryInfo
*
pParentQueryInfo
=
tscGetQueryInfo
(
&
pParentObj
->
cmd
,
subClauseIndex
);
if
(
pParentQueryInfo
->
groupbyExpr
.
numOfGroupCols
>
0
)
{
if
(
pParentQueryInfo
->
groupbyExpr
.
numOfGroupCols
>
0
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
subClauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
subClauseIndex
);
SExprInfo
*
pExpr
=
NULL
;
SExprInfo
*
pExpr
=
NULL
;
size_t
size
=
taosArrayGetSize
(
pQueryInfo
->
exprList
);
size_t
size
=
taosArrayGetSize
(
pQueryInfo
->
exprList
);
...
@@ -5531,7 +5531,7 @@ static void doLimitOutputNormalColOfGroupby(SExprInfo* pExpr) {
...
@@ -5531,7 +5531,7 @@ static void doLimitOutputNormalColOfGroupby(SExprInfo* pExpr) {
pExpr
->
base
.
numOfParams
=
1
;
pExpr
->
base
.
numOfParams
=
1
;
}
}
void
doAddGroupColumnForSubquery
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
tagIndex
)
{
void
doAddGroupColumnForSubquery
(
SQueryInfo
*
pQueryInfo
,
int32_t
tagIndex
)
{
SColIndex
*
pColIndex
=
taosArrayGet
(
pQueryInfo
->
groupbyExpr
.
columnInfo
,
tagIndex
);
SColIndex
*
pColIndex
=
taosArrayGet
(
pQueryInfo
->
groupbyExpr
.
columnInfo
,
tagIndex
);
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
...
@@ -5549,7 +5549,7 @@ void doAddGroupColumnForSubquery(SQueryNodeInfo* pQueryInfo, int32_t tagIndex) {
...
@@ -5549,7 +5549,7 @@ void doAddGroupColumnForSubquery(SQueryNodeInfo* pQueryInfo, int32_t tagIndex) {
pInfo
->
visible
=
false
;
pInfo
->
visible
=
false
;
}
}
static
void
doUpdateSqlFunctionForTagPrj
(
SQuery
Node
Info
*
pQueryInfo
)
{
static
void
doUpdateSqlFunctionForTagPrj
(
SQueryInfo
*
pQueryInfo
)
{
int32_t
tagLength
=
0
;
int32_t
tagLength
=
0
;
size_t
size
=
taosArrayGetSize
(
pQueryInfo
->
exprList
);
size_t
size
=
taosArrayGetSize
(
pQueryInfo
->
exprList
);
...
@@ -5581,7 +5581,7 @@ static void doUpdateSqlFunctionForTagPrj(SQueryNodeInfo* pQueryInfo) {
...
@@ -5581,7 +5581,7 @@ static void doUpdateSqlFunctionForTagPrj(SQueryNodeInfo* pQueryInfo) {
}
}
}
}
static
int32_t
doUpdateSqlFunctionForColPrj
(
SQuery
Node
Info
*
pQueryInfo
)
{
static
int32_t
doUpdateSqlFunctionForColPrj
(
SQueryInfo
*
pQueryInfo
)
{
size_t
size
=
taosArrayGetSize
(
pQueryInfo
->
exprList
);
size_t
size
=
taosArrayGetSize
(
pQueryInfo
->
exprList
);
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
...
@@ -5622,7 +5622,7 @@ static bool tagColumnInGroupby(SSqlGroupbyExpr* pGroupbyExpr, int16_t columnId)
...
@@ -5622,7 +5622,7 @@ static bool tagColumnInGroupby(SSqlGroupbyExpr* pGroupbyExpr, int16_t columnId)
return
false
;
return
false
;
}
}
static
bool
onlyTagPrjFunction
(
SQuery
Node
Info
*
pQueryInfo
)
{
static
bool
onlyTagPrjFunction
(
SQueryInfo
*
pQueryInfo
)
{
bool
hasTagPrj
=
false
;
bool
hasTagPrj
=
false
;
bool
hasColumnPrj
=
false
;
bool
hasColumnPrj
=
false
;
...
@@ -5640,7 +5640,7 @@ static bool onlyTagPrjFunction(SQueryNodeInfo* pQueryInfo) {
...
@@ -5640,7 +5640,7 @@ static bool onlyTagPrjFunction(SQueryNodeInfo* pQueryInfo) {
}
}
// check if all the tags prj columns belongs to the group by columns
// check if all the tags prj columns belongs to the group by columns
static
bool
allTagPrjInGroupby
(
SQuery
Node
Info
*
pQueryInfo
)
{
static
bool
allTagPrjInGroupby
(
SQueryInfo
*
pQueryInfo
)
{
bool
allInGroupby
=
true
;
bool
allInGroupby
=
true
;
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
...
@@ -5660,7 +5660,7 @@ static bool allTagPrjInGroupby(SQueryNodeInfo* pQueryInfo) {
...
@@ -5660,7 +5660,7 @@ static bool allTagPrjInGroupby(SQueryNodeInfo* pQueryInfo) {
return
allInGroupby
;
return
allInGroupby
;
}
}
static
void
updateTagPrjFunction
(
SQuery
Node
Info
*
pQueryInfo
)
{
static
void
updateTagPrjFunction
(
SQueryInfo
*
pQueryInfo
)
{
size_t
size
=
taosArrayGetSize
(
pQueryInfo
->
exprList
);
size_t
size
=
taosArrayGetSize
(
pQueryInfo
->
exprList
);
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
...
@@ -5677,7 +5677,7 @@ static void updateTagPrjFunction(SQueryNodeInfo* pQueryInfo) {
...
@@ -5677,7 +5677,7 @@ static void updateTagPrjFunction(SQueryNodeInfo* pQueryInfo) {
* 2. if selectivity function and tagprj function both exist, there should be only
* 2. if selectivity function and tagprj function both exist, there should be only
* one selectivity function exists.
* one selectivity function exists.
*/
*/
static
int32_t
checkUpdateTagPrjFunctions
(
SQuery
Node
Info
*
pQueryInfo
,
SSqlCmd
*
pCmd
)
{
static
int32_t
checkUpdateTagPrjFunctions
(
SQueryInfo
*
pQueryInfo
,
SSqlCmd
*
pCmd
)
{
const
char
*
msg1
=
"only one selectivity function allowed in presence of tags function"
;
const
char
*
msg1
=
"only one selectivity function allowed in presence of tags function"
;
const
char
*
msg3
=
"aggregation function should not be mixed up with projection"
;
const
char
*
msg3
=
"aggregation function should not be mixed up with projection"
;
...
@@ -5774,7 +5774,7 @@ static int32_t checkUpdateTagPrjFunctions(SQueryNodeInfo* pQueryInfo, SSqlCmd* p
...
@@ -5774,7 +5774,7 @@ static int32_t checkUpdateTagPrjFunctions(SQueryNodeInfo* pQueryInfo, SSqlCmd* p
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
int32_t
doAddGroupbyColumnsOnDemand
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
)
{
static
int32_t
doAddGroupbyColumnsOnDemand
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
)
{
const
char
*
msg2
=
"interval not allowed in group by normal column"
;
const
char
*
msg2
=
"interval not allowed in group by normal column"
;
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
...
@@ -5847,7 +5847,7 @@ static int32_t doAddGroupbyColumnsOnDemand(SSqlCmd* pCmd, SQueryNodeInfo* pQuery
...
@@ -5847,7 +5847,7 @@ static int32_t doAddGroupbyColumnsOnDemand(SSqlCmd* pCmd, SQueryNodeInfo* pQuery
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
int32_t
doTagFunctionCheck
(
SQuery
Node
Info
*
pQueryInfo
)
{
static
int32_t
doTagFunctionCheck
(
SQueryInfo
*
pQueryInfo
)
{
bool
tagProjection
=
false
;
bool
tagProjection
=
false
;
bool
tableCounting
=
false
;
bool
tableCounting
=
false
;
...
@@ -5871,7 +5871,7 @@ static int32_t doTagFunctionCheck(SQueryNodeInfo* pQueryInfo) {
...
@@ -5871,7 +5871,7 @@ static int32_t doTagFunctionCheck(SQueryNodeInfo* pQueryInfo) {
return
(
tableCounting
&&
tagProjection
)
?
-
1
:
0
;
return
(
tableCounting
&&
tagProjection
)
?
-
1
:
0
;
}
}
int32_t
doFunctionsCompatibleCheck
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
)
{
int32_t
doFunctionsCompatibleCheck
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
)
{
const
char
*
msg1
=
"functions/columns not allowed in group by query"
;
const
char
*
msg1
=
"functions/columns not allowed in group by query"
;
const
char
*
msg2
=
"projection query on columns not allowed"
;
const
char
*
msg2
=
"projection query on columns not allowed"
;
const
char
*
msg3
=
"group by not allowed on projection query"
;
const
char
*
msg3
=
"group by not allowed on projection query"
;
...
@@ -5955,7 +5955,7 @@ int32_t doFunctionsCompatibleCheck(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo) {
...
@@ -5955,7 +5955,7 @@ int32_t doFunctionsCompatibleCheck(SSqlCmd* pCmd, SQueryNodeInfo* pQueryInfo) {
return
checkUpdateTagPrjFunctions
(
pQueryInfo
,
pCmd
);
return
checkUpdateTagPrjFunctions
(
pQueryInfo
,
pCmd
);
}
}
}
}
int32_t
doLocalQueryProcess
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
,
SQuerySqlNode
*
pQuerySqlNode
)
{
int32_t
doLocalQueryProcess
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
SQuerySqlNode
*
pQuerySqlNode
)
{
const
char
*
msg1
=
"only one expression allowed"
;
const
char
*
msg1
=
"only one expression allowed"
;
const
char
*
msg2
=
"invalid expression in select clause"
;
const
char
*
msg2
=
"invalid expression in select clause"
;
const
char
*
msg3
=
"invalid function"
;
const
char
*
msg3
=
"invalid function"
;
...
@@ -6107,7 +6107,7 @@ int32_t tscCheckCreateDbParams(SSqlCmd* pCmd, SCreateDbMsg* pCreate) {
...
@@ -6107,7 +6107,7 @@ int32_t tscCheckCreateDbParams(SSqlCmd* pCmd, SCreateDbMsg* pCreate) {
// for debug purpose
// for debug purpose
void
tscPrintSelNodeList
(
SSqlObj
*
pSql
,
int32_t
subClauseIndex
)
{
void
tscPrintSelNodeList
(
SSqlObj
*
pSql
,
int32_t
subClauseIndex
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
subClauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
subClauseIndex
);
int32_t
size
=
(
int32_t
)
tscSqlExprNumOfExprs
(
pQueryInfo
);
int32_t
size
=
(
int32_t
)
tscSqlExprNumOfExprs
(
pQueryInfo
);
if
(
size
==
0
)
{
if
(
size
==
0
)
{
...
@@ -6149,7 +6149,7 @@ int32_t doCheckForCreateTable(SSqlObj* pSql, int32_t subClauseIndex, SSqlInfo* p
...
@@ -6149,7 +6149,7 @@ int32_t doCheckForCreateTable(SSqlObj* pSql, int32_t subClauseIndex, SSqlInfo* p
const
char
*
msg1
=
"invalid table name"
;
const
char
*
msg1
=
"invalid table name"
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
subClauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
subClauseIndex
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
SCreateTableSql
*
pCreateTable
=
pInfo
->
pCreateTableInfo
;
SCreateTableSql
*
pCreateTable
=
pInfo
->
pCreateTableInfo
;
...
@@ -6208,7 +6208,7 @@ int32_t doCheckForCreateFromStable(SSqlObj* pSql, SSqlInfo* pInfo) {
...
@@ -6208,7 +6208,7 @@ int32_t doCheckForCreateFromStable(SSqlObj* pSql, SSqlInfo* pInfo) {
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SCreateTableSql
*
pCreateTable
=
pInfo
->
pCreateTableInfo
;
SCreateTableSql
*
pCreateTable
=
pInfo
->
pCreateTableInfo
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
// two table: the first one is for current table, and the secondary is for the super table.
// two table: the first one is for current table, and the secondary is for the super table.
if
(
pQueryInfo
->
numOfTables
<
2
)
{
if
(
pQueryInfo
->
numOfTables
<
2
)
{
...
@@ -6413,7 +6413,7 @@ int32_t doCheckForStream(SSqlObj* pSql, SSqlInfo* pInfo) {
...
@@ -6413,7 +6413,7 @@ int32_t doCheckForStream(SSqlObj* pSql, SSqlInfo* pInfo) {
const
char
*
msg7
=
"time interval is required"
;
const
char
*
msg7
=
"time interval is required"
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
assert
(
pQueryInfo
->
numOfTables
==
1
);
assert
(
pQueryInfo
->
numOfTables
==
1
);
SCreateTableSql
*
pCreateTable
=
pInfo
->
pCreateTableInfo
;
SCreateTableSql
*
pCreateTable
=
pInfo
->
pCreateTableInfo
;
...
@@ -6515,7 +6515,7 @@ int32_t doCheckForStream(SSqlObj* pSql, SSqlInfo* pInfo) {
...
@@ -6515,7 +6515,7 @@ int32_t doCheckForStream(SSqlObj* pSql, SSqlInfo* pInfo) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int32_t
checkQueryRangeForFill
(
SSqlCmd
*
pCmd
,
SQuery
Node
Info
*
pQueryInfo
)
{
int32_t
checkQueryRangeForFill
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
)
{
const
char
*
msg3
=
"start(end) time of query range required or time range too large"
;
const
char
*
msg3
=
"start(end) time of query range required or time range too large"
;
if
(
pQueryInfo
->
interval
.
interval
==
0
)
{
if
(
pQueryInfo
->
interval
.
interval
==
0
)
{
...
@@ -6558,7 +6558,7 @@ static int32_t doLoadAllTableMeta(SSqlObj* pSql, int32_t index, SQuerySqlNode* p
...
@@ -6558,7 +6558,7 @@ static int32_t doLoadAllTableMeta(SSqlObj* pSql, int32_t index, SQuerySqlNode* p
int32_t
code
=
TSDB_CODE_SUCCESS
;
int32_t
code
=
TSDB_CODE_SUCCESS
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
index
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
index
);
for
(
int32_t
i
=
0
;
i
<
numOfTables
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfTables
;
++
i
)
{
if
(
pQueryInfo
->
numOfTables
<=
i
)
{
// more than one table
if
(
pQueryInfo
->
numOfTables
<=
i
)
{
// more than one table
...
@@ -6613,7 +6613,7 @@ static int32_t doLoadAllTableMeta(SSqlObj* pSql, int32_t index, SQuerySqlNode* p
...
@@ -6613,7 +6613,7 @@ static int32_t doLoadAllTableMeta(SSqlObj* pSql, int32_t index, SQuerySqlNode* p
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
STableMeta
*
extractTempTableMetaFromNestQuery
(
SQuery
Node
Info
*
pUpstream
)
{
static
STableMeta
*
extractTempTableMetaFromNestQuery
(
SQueryInfo
*
pUpstream
)
{
int32_t
numOfColumns
=
pUpstream
->
fieldsInfo
.
numOfOutput
;
int32_t
numOfColumns
=
pUpstream
->
fieldsInfo
.
numOfOutput
;
STableMeta
*
meta
=
calloc
(
1
,
sizeof
(
STableMeta
)
+
sizeof
(
SSchema
)
*
numOfColumns
);
STableMeta
*
meta
=
calloc
(
1
,
sizeof
(
STableMeta
)
+
sizeof
(
SSchema
)
*
numOfColumns
);
...
@@ -6638,7 +6638,7 @@ static STableMeta* extractTempTableMetaFromNestQuery(SQueryNodeInfo* pUpstream)
...
@@ -6638,7 +6638,7 @@ static STableMeta* extractTempTableMetaFromNestQuery(SQueryNodeInfo* pUpstream)
return
meta
;
return
meta
;
}
}
//static SColumnInfo* getColumnInfoFromSchema(SQuery
Node
Info* pUpstream) {
//static SColumnInfo* getColumnInfoFromSchema(SQueryInfo* pUpstream) {
//
//
//}
//}
...
@@ -6654,7 +6654,7 @@ int32_t validateSqlNode(SSqlObj* pSql, SQuerySqlNode* pQuerySqlNode, int32_t ind
...
@@ -6654,7 +6654,7 @@ int32_t validateSqlNode(SSqlObj* pSql, SQuerySqlNode* pQuerySqlNode, int32_t ind
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
index
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
index
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
if
(
pTableMetaInfo
==
NULL
)
{
if
(
pTableMetaInfo
==
NULL
)
{
pTableMetaInfo
=
tscAddEmptyMetaInfo
(
pQueryInfo
);
pTableMetaInfo
=
tscAddEmptyMetaInfo
(
pQueryInfo
);
...
@@ -6684,7 +6684,7 @@ int32_t validateSqlNode(SSqlObj* pSql, SQuerySqlNode* pQuerySqlNode, int32_t ind
...
@@ -6684,7 +6684,7 @@ int32_t validateSqlNode(SSqlObj* pSql, SQuerySqlNode* pQuerySqlNode, int32_t ind
}
}
}
}
SQuery
NodeInfo
*
pQueryInfo1
=
calloc
(
1
,
sizeof
(
SQueryNode
Info
));
SQuery
Info
*
pQueryInfo1
=
calloc
(
1
,
sizeof
(
SQuery
Info
));
tscInitQueryInfo
(
pQueryInfo1
);
tscInitQueryInfo
(
pQueryInfo1
);
pQueryInfo1
->
pUpstream
=
taosArrayInit
(
4
,
POINTER_BYTES
);
pQueryInfo1
->
pUpstream
=
taosArrayInit
(
4
,
POINTER_BYTES
);
...
@@ -6843,7 +6843,7 @@ int32_t validateSqlNode(SSqlObj* pSql, SQuerySqlNode* pQuerySqlNode, int32_t ind
...
@@ -6843,7 +6843,7 @@ int32_t validateSqlNode(SSqlObj* pSql, SQuerySqlNode* pQuerySqlNode, int32_t ind
return
TSDB_CODE_SUCCESS
;
// Does not build query message here
return
TSDB_CODE_SUCCESS
;
// Does not build query message here
}
}
int32_t
exprTreeFromSqlExpr
(
SSqlCmd
*
pCmd
,
tExprNode
**
pExpr
,
const
tSqlExpr
*
pSqlExpr
,
SQuery
Node
Info
*
pQueryInfo
,
SArray
*
pCols
,
uint64_t
*
uid
)
{
int32_t
exprTreeFromSqlExpr
(
SSqlCmd
*
pCmd
,
tExprNode
**
pExpr
,
const
tSqlExpr
*
pSqlExpr
,
SQueryInfo
*
pQueryInfo
,
SArray
*
pCols
,
uint64_t
*
uid
)
{
tExprNode
*
pLeft
=
NULL
;
tExprNode
*
pLeft
=
NULL
;
tExprNode
*
pRight
=
NULL
;
tExprNode
*
pRight
=
NULL
;
...
@@ -6968,7 +6968,7 @@ int32_t exprTreeFromSqlExpr(SSqlCmd* pCmd, tExprNode **pExpr, const tSqlExpr* pS
...
@@ -6968,7 +6968,7 @@ int32_t exprTreeFromSqlExpr(SSqlCmd* pCmd, tExprNode **pExpr, const tSqlExpr* pS
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
bool
hasNormalColumnFilter
(
SQuery
Node
Info
*
pQueryInfo
)
{
bool
hasNormalColumnFilter
(
SQueryInfo
*
pQueryInfo
)
{
size_t
numOfCols
=
taosArrayGetSize
(
pQueryInfo
->
colList
);
size_t
numOfCols
=
taosArrayGetSize
(
pQueryInfo
->
colList
);
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
SColumn
*
pCol
=
taosArrayGetP
(
pQueryInfo
->
colList
,
i
);
SColumn
*
pCol
=
taosArrayGetP
(
pQueryInfo
->
colList
,
i
);
...
...
src/client/src/tscServer.c
浏览文件 @
0e0e6d5a
...
@@ -302,7 +302,7 @@ void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcEpSet *pEpSet) {
...
@@ -302,7 +302,7 @@ void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcEpSet *pEpSet) {
return
;
return
;
}
}
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
if
(
pQueryInfo
!=
NULL
&&
pQueryInfo
->
type
==
TSDB_QUERY_TYPE_FREE_RESOURCE
)
{
if
(
pQueryInfo
!=
NULL
&&
pQueryInfo
->
type
==
TSDB_QUERY_TYPE_FREE_RESOURCE
)
{
tscDebug
(
"%p sqlObj needs to be released or DB connection is closed, cmd:%d type:%d, pObj:%p signature:%p"
,
tscDebug
(
"%p sqlObj needs to be released or DB connection is closed, cmd:%d type:%d, pObj:%p signature:%p"
,
pSql
,
pCmd
->
command
,
pQueryInfo
->
type
,
pObj
,
pObj
->
signature
);
pSql
,
pCmd
->
command
,
pQueryInfo
->
type
,
pObj
,
pObj
->
signature
);
...
@@ -469,7 +469,7 @@ int doProcessSql(SSqlObj *pSql) {
...
@@ -469,7 +469,7 @@ int doProcessSql(SSqlObj *pSql) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int
tscProcessSql
(
SSqlObj
*
pSql
,
SQuery
Node
Info
*
pQueryInfo
)
{
int
tscProcessSql
(
SSqlObj
*
pSql
,
SQueryInfo
*
pQueryInfo
)
{
char
name
[
TSDB_TABLE_FNAME_LEN
]
=
{
0
};
char
name
[
TSDB_TABLE_FNAME_LEN
]
=
{
0
};
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
...
@@ -509,7 +509,7 @@ int tscProcessSql(SSqlObj *pSql, SQueryNodeInfo* pQueryInfo) {
...
@@ -509,7 +509,7 @@ int tscProcessSql(SSqlObj *pSql, SQueryNodeInfo* pQueryInfo) {
int
tscBuildFetchMsg
(
SSqlObj
*
pSql
,
SSqlInfo
*
pInfo
)
{
int
tscBuildFetchMsg
(
SSqlObj
*
pSql
,
SSqlInfo
*
pInfo
)
{
SRetrieveTableMsg
*
pRetrieveMsg
=
(
SRetrieveTableMsg
*
)
pSql
->
cmd
.
payload
;
SRetrieveTableMsg
*
pRetrieveMsg
=
(
SRetrieveTableMsg
*
)
pSql
->
cmd
.
payload
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetActiveQueryInfo
(
&
pSql
->
cmd
);
SQueryInfo
*
pQueryInfo
=
tscGetActiveQueryInfo
(
&
pSql
->
cmd
);
pRetrieveMsg
->
free
=
htons
(
pQueryInfo
->
type
);
pRetrieveMsg
->
free
=
htons
(
pQueryInfo
->
type
);
pRetrieveMsg
->
qid
=
htobe64
(
pSql
->
res
.
qid
);
pRetrieveMsg
->
qid
=
htobe64
(
pSql
->
res
.
qid
);
...
@@ -549,7 +549,7 @@ int tscBuildFetchMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
...
@@ -549,7 +549,7 @@ int tscBuildFetchMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
}
}
int
tscBuildSubmitMsg
(
SSqlObj
*
pSql
,
SSqlInfo
*
pInfo
)
{
int
tscBuildSubmitMsg
(
SSqlObj
*
pSql
,
SSqlInfo
*
pInfo
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
STableMeta
*
pTableMeta
=
tscGetMetaInfo
(
pQueryInfo
,
0
)
->
pTableMeta
;
STableMeta
*
pTableMeta
=
tscGetMetaInfo
(
pQueryInfo
,
0
)
->
pTableMeta
;
char
*
pMsg
=
pSql
->
cmd
.
payload
;
char
*
pMsg
=
pSql
->
cmd
.
payload
;
...
@@ -588,7 +588,7 @@ static int32_t tscEstimateQueryMsgSize(SSqlObj *pSql, int32_t clauseIndex) {
...
@@ -588,7 +588,7 @@ static int32_t tscEstimateQueryMsgSize(SSqlObj *pSql, int32_t clauseIndex) {
const
static
int32_t
MIN_QUERY_MSG_PKT_SIZE
=
TSDB_MAX_BYTES_PER_ROW
*
5
;
const
static
int32_t
MIN_QUERY_MSG_PKT_SIZE
=
TSDB_MAX_BYTES_PER_ROW
*
5
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
clauseIndex
);
int32_t
srcColListSize
=
(
int32_t
)(
taosArrayGetSize
(
pQueryInfo
->
colList
)
*
sizeof
(
SColumnInfo
));
int32_t
srcColListSize
=
(
int32_t
)(
taosArrayGetSize
(
pQueryInfo
->
colList
)
*
sizeof
(
SColumnInfo
));
...
@@ -618,7 +618,7 @@ static int32_t tscEstimateQueryMsgSize(SSqlObj *pSql, int32_t clauseIndex) {
...
@@ -618,7 +618,7 @@ static int32_t tscEstimateQueryMsgSize(SSqlObj *pSql, int32_t clauseIndex) {
}
}
static
char
*
doSerializeTableInfo
(
SQueryTableMsg
*
pQueryMsg
,
SSqlObj
*
pSql
,
char
*
pMsg
)
{
static
char
*
doSerializeTableInfo
(
SQueryTableMsg
*
pQueryMsg
,
SSqlObj
*
pSql
,
char
*
pMsg
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetActiveQueryInfo
(
&
pSql
->
cmd
);
SQueryInfo
*
pQueryInfo
=
tscGetActiveQueryInfo
(
&
pSql
->
cmd
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
TSKEY
dfltKey
=
htobe64
(
pQueryMsg
->
window
.
skey
);
TSKEY
dfltKey
=
htobe64
(
pQueryMsg
->
window
.
skey
);
...
@@ -704,7 +704,7 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
...
@@ -704,7 +704,7 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
return
TSDB_CODE_TSC_INVALID_SQL
;
// todo add test for this
return
TSDB_CODE_TSC_INVALID_SQL
;
// todo add test for this
}
}
SQuery
Node
Info
*
pQueryInfo
=
tscGetActiveQueryInfo
(
pCmd
);
SQueryInfo
*
pQueryInfo
=
tscGetActiveQueryInfo
(
pCmd
);
SQuery
*
pQuery
=
tscCreateQueryFromQueryNodeInfo
(
pQueryInfo
);
SQuery
*
pQuery
=
tscCreateQueryFromQueryNodeInfo
(
pQueryInfo
);
UNUSED
(
pQuery
);
UNUSED
(
pQuery
);
...
@@ -776,7 +776,6 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
...
@@ -776,7 +776,6 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
// set column list ids
// set column list ids
size_t
numOfCols
=
taosArrayGetSize
(
pQueryInfo
->
colList
);
size_t
numOfCols
=
taosArrayGetSize
(
pQueryInfo
->
colList
);
char
*
pMsg
=
(
char
*
)(
pQueryMsg
->
colList
)
+
numOfCols
*
sizeof
(
SColumnInfo
);
char
*
pMsg
=
(
char
*
)(
pQueryMsg
->
colList
)
+
numOfCols
*
sizeof
(
SColumnInfo
);
SSchema
*
pSchema
=
tscGetTableSchema
(
pTableMeta
);
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
SColumnInfo
*
pCol
=
&
pQuery
->
colList
[
i
];
SColumnInfo
*
pCol
=
&
pQuery
->
colList
[
i
];
...
@@ -814,6 +813,20 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
...
@@ -814,6 +813,20 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
}
}
}
}
{
pQueryMsg
->
stableQuery
=
pQuery
->
stableQuery
;
pQueryMsg
->
topBotQuery
=
pQuery
->
topBotQuery
;
pQueryMsg
->
groupbyColumn
=
pQuery
->
groupbyColumn
;
pQueryMsg
->
hasTagResults
=
pQuery
->
hasTagResults
;
pQueryMsg
->
timeWindowInterpo
=
pQuery
->
timeWindowInterpo
;
pQueryMsg
->
queryBlockDist
=
pQuery
->
queryBlockDist
;
pQueryMsg
->
stabledev
=
pQuery
->
stabledev
;
pQueryMsg
->
tsCompQuery
=
pQuery
->
tsCompQuery
;
pQueryMsg
->
simpleAgg
=
pQuery
->
simpleAgg
;
pQueryMsg
->
pointInterpQuery
=
pQuery
->
pointInterpQuery
;
pQueryMsg
->
needReverseScan
=
pQuery
->
needReverseScan
;
}
SSqlExpr
*
pSqlExpr
=
(
SSqlExpr
*
)
pMsg
;
SSqlExpr
*
pSqlExpr
=
(
SSqlExpr
*
)
pMsg
;
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfOutput
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfOutput
;
++
i
)
{
...
@@ -944,33 +957,14 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
...
@@ -944,33 +957,14 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
}
}
}
}
if
(
numOfTags
!=
0
)
{
if
(
pQuery
->
numOfTags
>
0
)
{
int32_t
numOfColumns
=
tscGetNumOfColumns
(
pTableMeta
);
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfTags
;
++
i
)
{
int32_t
numOfTagColumns
=
tscGetNumOfTags
(
pTableMeta
);
SColumnInfo
*
pTag
=
&
pQuery
->
tagColList
[
i
];
int32_t
total
=
numOfTagColumns
+
numOfColumns
;
pSchema
=
tscGetTableTagSchema
(
pTableMeta
);
for
(
int32_t
i
=
0
;
i
<
numOfTags
;
++
i
)
{
SColumn
*
pCol
=
taosArrayGetP
(
pTableMetaInfo
->
tagColList
,
i
);
SSchema
*
pColSchema
=
&
pSchema
[
pCol
->
colIndex
.
columnIndex
];
if
((
pCol
->
colIndex
.
columnIndex
>=
numOfTagColumns
||
pCol
->
colIndex
.
columnIndex
<
-
1
)
||
(
!
isValidDataType
(
pColSchema
->
type
)))
{
char
n
[
TSDB_TABLE_FNAME_LEN
]
=
{
0
};
tNameExtractFullName
(
&
pTableMetaInfo
->
name
,
n
);
tscError
(
"%p tid:%d uid:%"
PRIu64
" id:%s, tag index out of range, totalCols:%d, numOfTags:%d, index:%d, column name:%s"
,
pSql
,
pTableMeta
->
id
.
tid
,
pTableMeta
->
id
.
uid
,
n
,
total
,
numOfTagColumns
,
pCol
->
colIndex
.
columnIndex
,
pColSchema
->
name
);
return
TSDB_CODE_TSC_INVALID_SQL
;
}
SColumnInfo
*
pTagCol
=
(
SColumnInfo
*
)
pMsg
;
SColumnInfo
*
pTagCol
=
(
SColumnInfo
*
)
pMsg
;
pTagCol
->
colId
=
htons
(
pTag
->
colId
);
pTagCol
->
colId
=
htons
(
pColSchema
->
colId
);
pTagCol
->
bytes
=
htons
(
pTag
->
bytes
);
pTagCol
->
bytes
=
htons
(
pColSchema
->
bytes
);
pTagCol
->
type
=
htons
(
pTag
->
type
);
pTagCol
->
type
=
htons
(
pColSchema
->
type
);
pTagCol
->
numOfFilters
=
0
;
pTagCol
->
numOfFilters
=
0
;
pMsg
+=
sizeof
(
SColumnInfo
);
pMsg
+=
sizeof
(
SColumnInfo
);
...
@@ -1033,7 +1027,7 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
...
@@ -1033,7 +1027,7 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
/*
SQueryTableMsg *pQueryMsg = (SQueryTableMsg *)pCmd->payload;
SQueryTableMsg *pQueryMsg = (SQueryTableMsg *)pCmd->payload;
tstrncpy(pQueryMsg->version, version, tListLen(pQueryMsg->version));
tstrncpy(pQueryMsg->version, version, tListLen(pQueryMsg->version));
...
@@ -1386,7 +1380,7 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
...
@@ -1386,7 +1380,7 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
pQueryMsg->head.contLen = htonl(msgLen);
pQueryMsg->head.contLen = htonl(msgLen);
assert(msgLen + minMsgSize() <= (int32_t)pCmd->allocSize);
assert(msgLen + minMsgSize() <= (int32_t)pCmd->allocSize);
return
TSDB_CODE_SUCCESS
;
return TSDB_CODE_SUCCESS;
*/
}
}
int32_t
tscBuildCreateDbMsg
(
SSqlObj
*
pSql
,
SSqlInfo
*
pInfo
)
{
int32_t
tscBuildCreateDbMsg
(
SSqlObj
*
pSql
,
SSqlInfo
*
pInfo
)
{
...
@@ -1690,7 +1684,7 @@ int tscBuildCreateTableMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
...
@@ -1690,7 +1684,7 @@ int tscBuildCreateTableMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
SSchema
*
pSchema
;
SSchema
*
pSchema
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
// Reallocate the payload size
// Reallocate the payload size
...
@@ -1779,7 +1773,7 @@ int tscBuildCreateTableMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
...
@@ -1779,7 +1773,7 @@ int tscBuildCreateTableMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
}
}
int
tscEstimateAlterTableMsgLength
(
SSqlCmd
*
pCmd
)
{
int
tscEstimateAlterTableMsgLength
(
SSqlCmd
*
pCmd
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
return
minMsgSize
()
+
sizeof
(
SAlterTableMsg
)
+
sizeof
(
SSchema
)
*
tscNumOfFields
(
pQueryInfo
)
+
TSDB_EXTRA_PAYLOAD_SIZE
;
return
minMsgSize
()
+
sizeof
(
SAlterTableMsg
)
+
sizeof
(
SSchema
)
*
tscNumOfFields
(
pQueryInfo
)
+
TSDB_EXTRA_PAYLOAD_SIZE
;
}
}
...
@@ -1788,7 +1782,7 @@ int tscBuildAlterTableMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
...
@@ -1788,7 +1782,7 @@ int tscBuildAlterTableMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
int
msgLen
=
0
;
int
msgLen
=
0
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
...
@@ -1837,7 +1831,7 @@ int tscBuildUpdateTagMsg(SSqlObj* pSql, SSqlInfo *pInfo) {
...
@@ -1837,7 +1831,7 @@ int tscBuildUpdateTagMsg(SSqlObj* pSql, SSqlInfo *pInfo) {
SUpdateTableTagValMsg
*
pUpdateMsg
=
(
SUpdateTableTagValMsg
*
)
pCmd
->
payload
;
SUpdateTableTagValMsg
*
pUpdateMsg
=
(
SUpdateTableTagValMsg
*
)
pCmd
->
payload
;
pCmd
->
payloadLen
=
htonl
(
pUpdateMsg
->
head
.
contLen
);
pCmd
->
payloadLen
=
htonl
(
pUpdateMsg
->
head
.
contLen
);
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
STableMeta
*
pTableMeta
=
tscGetMetaInfo
(
pQueryInfo
,
0
)
->
pTableMeta
;
STableMeta
*
pTableMeta
=
tscGetMetaInfo
(
pQueryInfo
,
0
)
->
pTableMeta
;
SNewVgroupInfo
vgroupInfo
=
{.
vgId
=
-
1
};
SNewVgroupInfo
vgroupInfo
=
{.
vgId
=
-
1
};
...
@@ -1873,7 +1867,7 @@ int tscBuildRetrieveFromMgmtMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
...
@@ -1873,7 +1867,7 @@ int tscBuildRetrieveFromMgmtMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
}
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
SRetrieveTableMsg
*
pRetrieveMsg
=
(
SRetrieveTableMsg
*
)
pCmd
->
payload
;
SRetrieveTableMsg
*
pRetrieveMsg
=
(
SRetrieveTableMsg
*
)
pCmd
->
payload
;
pRetrieveMsg
->
qid
=
htobe64
(
pSql
->
res
.
qid
);
pRetrieveMsg
->
qid
=
htobe64
(
pSql
->
res
.
qid
);
pRetrieveMsg
->
free
=
htons
(
pQueryInfo
->
type
);
pRetrieveMsg
->
free
=
htons
(
pQueryInfo
->
type
);
...
@@ -1897,7 +1891,7 @@ static int tscLocalResultCommonBuilder(SSqlObj *pSql, int32_t numOfRes) {
...
@@ -1897,7 +1891,7 @@ static int tscLocalResultCommonBuilder(SSqlObj *pSql, int32_t numOfRes) {
pRes
->
row
=
0
;
pRes
->
row
=
0
;
pRes
->
rspType
=
1
;
pRes
->
rspType
=
1
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
if
(
tscCreateResPointerInfo
(
pRes
,
pQueryInfo
)
!=
TSDB_CODE_SUCCESS
)
{
if
(
tscCreateResPointerInfo
(
pRes
,
pQueryInfo
)
!=
TSDB_CODE_SUCCESS
)
{
return
pRes
->
code
;
return
pRes
->
code
;
}
}
...
@@ -1948,7 +1942,7 @@ int tscProcessRetrieveLocalMergeRsp(SSqlObj *pSql) {
...
@@ -1948,7 +1942,7 @@ int tscProcessRetrieveLocalMergeRsp(SSqlObj *pSql) {
pRes
->
code
=
tscDoLocalMerge
(
pSql
);
pRes
->
code
=
tscDoLocalMerge
(
pSql
);
if
(
pRes
->
code
==
TSDB_CODE_SUCCESS
&&
pRes
->
numOfRows
>
0
)
{
if
(
pRes
->
code
==
TSDB_CODE_SUCCESS
&&
pRes
->
numOfRows
>
0
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetActiveQueryInfo
(
pCmd
);
SQueryInfo
*
pQueryInfo
=
tscGetActiveQueryInfo
(
pCmd
);
tscCreateResPointerInfo
(
pRes
,
pQueryInfo
);
tscCreateResPointerInfo
(
pRes
,
pQueryInfo
);
tscSetResRawPtr
(
pRes
,
pQueryInfo
);
tscSetResRawPtr
(
pRes
,
pQueryInfo
);
}
}
...
@@ -2002,7 +1996,7 @@ int tscBuildConnectMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
...
@@ -2002,7 +1996,7 @@ int tscBuildConnectMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
int
tscBuildTableMetaMsg
(
SSqlObj
*
pSql
,
SSqlInfo
*
pInfo
)
{
int
tscBuildTableMetaMsg
(
SSqlObj
*
pSql
,
SSqlInfo
*
pInfo
)
{
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableInfoMsg
*
pInfoMsg
=
(
STableInfoMsg
*
)
pCmd
->
payload
;
STableInfoMsg
*
pInfoMsg
=
(
STableInfoMsg
*
)
pCmd
->
payload
;
...
@@ -2072,7 +2066,7 @@ int tscBuildSTableVgroupMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
...
@@ -2072,7 +2066,7 @@ int tscBuildSTableVgroupMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
char
*
pMsg
=
pCmd
->
payload
;
char
*
pMsg
=
pCmd
->
payload
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
SSTableVgroupMsg
*
pStableVgroupMsg
=
(
SSTableVgroupMsg
*
)
pMsg
;
SSTableVgroupMsg
*
pStableVgroupMsg
=
(
SSTableVgroupMsg
*
)
pMsg
;
pStableVgroupMsg
->
numOfTables
=
htonl
(
pQueryInfo
->
numOfTables
);
pStableVgroupMsg
->
numOfTables
=
htonl
(
pQueryInfo
->
numOfTables
);
...
@@ -2415,7 +2409,7 @@ int tscProcessShowRsp(SSqlObj *pSql) {
...
@@ -2415,7 +2409,7 @@ int tscProcessShowRsp(SSqlObj *pSql) {
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
...
@@ -2474,7 +2468,7 @@ static void createHbObj(STscObj* pObj) {
...
@@ -2474,7 +2468,7 @@ static void createHbObj(STscObj* pObj) {
pSql
->
fp
=
tscProcessHeartBeatRsp
;
pSql
->
fp
=
tscProcessHeartBeatRsp
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfoS
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoS
(
&
pSql
->
cmd
,
0
);
if
(
pQueryInfo
==
NULL
)
{
if
(
pQueryInfo
==
NULL
)
{
terrno
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
terrno
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
tfree
(
pSql
);
tfree
(
pSql
);
...
@@ -2631,7 +2625,7 @@ int tscProcessRetrieveRspFromNode(SSqlObj *pSql) {
...
@@ -2631,7 +2625,7 @@ int tscProcessRetrieveRspFromNode(SSqlObj *pSql) {
pRes
->
completed
=
(
pRetrieve
->
completed
==
1
);
pRes
->
completed
=
(
pRetrieve
->
completed
==
1
);
pRes
->
data
=
pRetrieve
->
data
;
pRes
->
data
=
pRetrieve
->
data
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetActiveQueryInfo
(
pCmd
);
SQueryInfo
*
pQueryInfo
=
tscGetActiveQueryInfo
(
pCmd
);
if
(
tscCreateResPointerInfo
(
pRes
,
pQueryInfo
)
!=
TSDB_CODE_SUCCESS
)
{
if
(
tscCreateResPointerInfo
(
pRes
,
pQueryInfo
)
!=
TSDB_CODE_SUCCESS
)
{
return
pRes
->
code
;
return
pRes
->
code
;
}
}
...
@@ -2688,7 +2682,7 @@ static int32_t getTableMetaFromMnode(SSqlObj *pSql, STableMetaInfo *pTableMetaIn
...
@@ -2688,7 +2682,7 @@ static int32_t getTableMetaFromMnode(SSqlObj *pSql, STableMetaInfo *pTableMetaIn
tscAddQueryInfo
(
&
pNew
->
cmd
);
tscAddQueryInfo
(
&
pNew
->
cmd
);
SQuery
Node
Info
*
pNewQueryInfo
=
tscGetQueryInfoS
(
&
pNew
->
cmd
,
0
);
SQueryInfo
*
pNewQueryInfo
=
tscGetQueryInfoS
(
&
pNew
->
cmd
,
0
);
pNew
->
cmd
.
autoCreated
=
pSql
->
cmd
.
autoCreated
;
// create table if not exists
pNew
->
cmd
.
autoCreated
=
pSql
->
cmd
.
autoCreated
;
// create table if not exists
if
(
TSDB_CODE_SUCCESS
!=
tscAllocPayload
(
&
pNew
->
cmd
,
TSDB_DEFAULT_PAYLOAD_SIZE
+
pSql
->
cmd
.
payloadLen
))
{
if
(
TSDB_CODE_SUCCESS
!=
tscAllocPayload
(
&
pNew
->
cmd
,
TSDB_DEFAULT_PAYLOAD_SIZE
+
pSql
->
cmd
.
payloadLen
))
{
...
@@ -2777,7 +2771,7 @@ int tscGetTableMetaEx(SSqlObj *pSql, STableMetaInfo *pTableMetaInfo, bool create
...
@@ -2777,7 +2771,7 @@ int tscGetTableMetaEx(SSqlObj *pSql, STableMetaInfo *pTableMetaInfo, bool create
int
tscRenewTableMeta
(
SSqlObj
*
pSql
,
int32_t
tableIndex
)
{
int
tscRenewTableMeta
(
SSqlObj
*
pSql
,
int32_t
tableIndex
)
{
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
tableIndex
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
tableIndex
);
char
name
[
TSDB_TABLE_FNAME_LEN
]
=
{
0
};
char
name
[
TSDB_TABLE_FNAME_LEN
]
=
{
0
};
...
@@ -2801,7 +2795,7 @@ int tscRenewTableMeta(SSqlObj *pSql, int32_t tableIndex) {
...
@@ -2801,7 +2795,7 @@ int tscRenewTableMeta(SSqlObj *pSql, int32_t tableIndex) {
}
}
static
bool
allVgroupInfoRetrieved
(
SSqlCmd
*
pCmd
,
int32_t
clauseIndex
)
{
static
bool
allVgroupInfoRetrieved
(
SSqlCmd
*
pCmd
,
int32_t
clauseIndex
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
clauseIndex
);
for
(
int32_t
i
=
0
;
i
<
pQueryInfo
->
numOfTables
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pQueryInfo
->
numOfTables
;
++
i
)
{
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
i
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
i
);
if
(
pTableMetaInfo
->
vgroupList
==
NULL
)
{
if
(
pTableMetaInfo
->
vgroupList
==
NULL
)
{
...
@@ -2828,13 +2822,13 @@ int tscGetSTableVgroupInfo(SSqlObj *pSql, int32_t clauseIndex) {
...
@@ -2828,13 +2822,13 @@ int tscGetSTableVgroupInfo(SSqlObj *pSql, int32_t clauseIndex) {
pNew
->
cmd
.
command
=
TSDB_SQL_STABLEVGROUP
;
pNew
->
cmd
.
command
=
TSDB_SQL_STABLEVGROUP
;
// TODO TEST IT
// TODO TEST IT
SQuery
Node
Info
*
pNewQueryInfo
=
tscGetQueryInfoS
(
&
pNew
->
cmd
,
0
);
SQueryInfo
*
pNewQueryInfo
=
tscGetQueryInfoS
(
&
pNew
->
cmd
,
0
);
if
(
pNewQueryInfo
==
NULL
)
{
if
(
pNewQueryInfo
==
NULL
)
{
tscFreeSqlObj
(
pNew
);
tscFreeSqlObj
(
pNew
);
return
code
;
return
code
;
}
}
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
clauseIndex
);
for
(
int32_t
i
=
0
;
i
<
pQueryInfo
->
numOfTables
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pQueryInfo
->
numOfTables
;
++
i
)
{
STableMetaInfo
*
pMInfo
=
tscGetMetaInfo
(
pQueryInfo
,
i
);
STableMetaInfo
*
pMInfo
=
tscGetMetaInfo
(
pQueryInfo
,
i
);
STableMeta
*
pTableMeta
=
tscTableMetaDup
(
pMInfo
->
pTableMeta
);
STableMeta
*
pTableMeta
=
tscTableMetaDup
(
pMInfo
->
pTableMeta
);
...
...
src/client/src/tscSql.c
浏览文件 @
0e0e6d5a
...
@@ -373,7 +373,7 @@ int taos_num_fields(TAOS_RES *res) {
...
@@ -373,7 +373,7 @@ int taos_num_fields(TAOS_RES *res) {
if
(
pSql
==
NULL
||
pSql
->
signature
!=
pSql
)
return
0
;
if
(
pSql
==
NULL
||
pSql
->
signature
!=
pSql
)
return
0
;
int32_t
num
=
0
;
int32_t
num
=
0
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
if
(
pQueryInfo
==
NULL
)
{
if
(
pQueryInfo
==
NULL
)
{
return
num
;
return
num
;
}
}
...
@@ -407,7 +407,7 @@ TAOS_FIELD *taos_fetch_fields(TAOS_RES *res) {
...
@@ -407,7 +407,7 @@ TAOS_FIELD *taos_fetch_fields(TAOS_RES *res) {
SSqlObj
*
pSql
=
(
SSqlObj
*
)
res
;
SSqlObj
*
pSql
=
(
SSqlObj
*
)
res
;
if
(
pSql
==
NULL
||
pSql
->
signature
!=
pSql
)
return
0
;
if
(
pSql
==
NULL
||
pSql
->
signature
!=
pSql
)
return
0
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
if
(
pQueryInfo
==
NULL
)
{
if
(
pQueryInfo
==
NULL
)
{
return
NULL
;
return
NULL
;
}
}
...
@@ -558,7 +558,7 @@ static bool tscKillQueryInDnode(SSqlObj* pSql) {
...
@@ -558,7 +558,7 @@ static bool tscKillQueryInDnode(SSqlObj* pSql) {
return
true
;
return
true
;
}
}
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
if
((
pQueryInfo
==
NULL
)
||
tscIsTwoStageSTableQuery
(
pQueryInfo
,
0
))
{
if
((
pQueryInfo
==
NULL
)
||
tscIsTwoStageSTableQuery
(
pQueryInfo
,
0
))
{
return
true
;
return
true
;
...
@@ -671,7 +671,7 @@ char *taos_get_client_info() { return version; }
...
@@ -671,7 +671,7 @@ char *taos_get_client_info() { return version; }
static
void
tscKillSTableQuery
(
SSqlObj
*
pSql
)
{
static
void
tscKillSTableQuery
(
SSqlObj
*
pSql
)
{
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
if
(
!
tscIsTwoStageSTableQuery
(
pQueryInfo
,
0
))
{
if
(
!
tscIsTwoStageSTableQuery
(
pQueryInfo
,
0
))
{
return
;
return
;
...
@@ -722,7 +722,7 @@ void taos_stop_query(TAOS_RES *res) {
...
@@ -722,7 +722,7 @@ void taos_stop_query(TAOS_RES *res) {
// set the error code for master pSqlObj firstly
// set the error code for master pSqlObj firstly
pSql
->
res
.
code
=
TSDB_CODE_TSC_QUERY_CANCELLED
;
pSql
->
res
.
code
=
TSDB_CODE_TSC_QUERY_CANCELLED
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
if
(
tscIsTwoStageSTableQuery
(
pQueryInfo
,
0
))
{
if
(
tscIsTwoStageSTableQuery
(
pQueryInfo
,
0
))
{
assert
(
pSql
->
rpcRid
<=
0
);
assert
(
pSql
->
rpcRid
<=
0
);
...
@@ -752,7 +752,7 @@ bool taos_is_null(TAOS_RES *res, int32_t row, int32_t col) {
...
@@ -752,7 +752,7 @@ bool taos_is_null(TAOS_RES *res, int32_t row, int32_t col) {
return
true
;
return
true
;
}
}
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
if
(
pQueryInfo
==
NULL
)
{
if
(
pQueryInfo
==
NULL
)
{
return
true
;
return
true
;
}
}
...
@@ -932,7 +932,7 @@ static int tscParseTblNameList(SSqlObj *pSql, const char *tblNameList, int32_t t
...
@@ -932,7 +932,7 @@ static int tscParseTblNameList(SSqlObj *pSql, const char *tblNameList, int32_t t
int
code
=
TSDB_CODE_TSC_INVALID_TABLE_ID_LENGTH
;
int
code
=
TSDB_CODE_TSC_INVALID_TABLE_ID_LENGTH
;
char
*
str
=
(
char
*
)
tblNameList
;
char
*
str
=
(
char
*
)
tblNameList
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfoS
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoS
(
pCmd
,
pCmd
->
clauseIndex
);
if
(
pQueryInfo
==
NULL
)
{
if
(
pQueryInfo
==
NULL
)
{
pSql
->
res
.
code
=
terrno
;
pSql
->
res
.
code
=
terrno
;
return
terrno
;
return
terrno
;
...
...
src/client/src/tscStream.c
浏览文件 @
0e0e6d5a
...
@@ -35,7 +35,7 @@ static int64_t getDelayValueAfterTimewindowClosed(SSqlStream* pStream, int64_t l
...
@@ -35,7 +35,7 @@ static int64_t getDelayValueAfterTimewindowClosed(SSqlStream* pStream, int64_t l
return
taosGetTimestamp
(
pStream
->
precision
)
+
launchDelay
-
pStream
->
stime
-
1
;
return
taosGetTimestamp
(
pStream
->
precision
)
+
launchDelay
-
pStream
->
stime
-
1
;
}
}
static
bool
isProjectStream
(
SQuery
Node
Info
*
pQueryInfo
)
{
static
bool
isProjectStream
(
SQueryInfo
*
pQueryInfo
)
{
for
(
int32_t
i
=
0
;
i
<
pQueryInfo
->
fieldsInfo
.
numOfOutput
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pQueryInfo
->
fieldsInfo
.
numOfOutput
;
++
i
)
{
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
i
);
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
i
);
if
(
pExpr
->
base
.
functionId
!=
TSDB_FUNC_PRJ
)
{
if
(
pExpr
->
base
.
functionId
!=
TSDB_FUNC_PRJ
)
{
...
@@ -89,7 +89,7 @@ static void doLaunchQuery(void* param, TAOS_RES* tres, int32_t code) {
...
@@ -89,7 +89,7 @@ static void doLaunchQuery(void* param, TAOS_RES* tres, int32_t code) {
return
;
return
;
}
}
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
code
=
tscGetTableMeta
(
pSql
,
pTableMetaInfo
);
code
=
tscGetTableMeta
(
pSql
,
pTableMetaInfo
);
...
@@ -130,7 +130,7 @@ static void tscProcessStreamTimer(void *handle, void *tmrId) {
...
@@ -130,7 +130,7 @@ static void tscProcessStreamTimer(void *handle, void *tmrId) {
pStream
->
numOfRes
=
0
;
// reset the numOfRes.
pStream
->
numOfRes
=
0
;
// reset the numOfRes.
SSqlObj
*
pSql
=
pStream
->
pSql
;
SSqlObj
*
pSql
=
pStream
->
pSql
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
tscDebug
(
"%p add into timer"
,
pSql
);
tscDebug
(
"%p add into timer"
,
pSql
);
if
(
pStream
->
isProject
)
{
if
(
pStream
->
isProject
)
{
...
@@ -208,7 +208,7 @@ static void tscProcessStreamQueryCallback(void *param, TAOS_RES *tres, int numOf
...
@@ -208,7 +208,7 @@ static void tscProcessStreamQueryCallback(void *param, TAOS_RES *tres, int numOf
static
void
tscStreamFillTimeGap
(
SSqlStream
*
pStream
,
TSKEY
ts
)
{
static
void
tscStreamFillTimeGap
(
SSqlStream
*
pStream
,
TSKEY
ts
)
{
#if 0
#if 0
SSqlObj * pSql = pStream->pSql;
SSqlObj * pSql = pStream->pSql;
SQuery
Node
Info* pQueryInfo = tscGetQueryInfo(&pSql->cmd, 0);
SQueryInfo* pQueryInfo = tscGetQueryInfo(&pSql->cmd, 0);
if (pQueryInfo->fillType != TSDB_FILL_SET_VALUE && pQueryInfo->fillType != TSDB_FILL_NULL) {
if (pQueryInfo->fillType != TSDB_FILL_SET_VALUE && pQueryInfo->fillType != TSDB_FILL_NULL) {
return;
return;
...
@@ -421,7 +421,7 @@ static int32_t tscSetSlidingWindowInfo(SSqlObj *pSql, SSqlStream *pStream) {
...
@@ -421,7 +421,7 @@ static int32_t tscSetSlidingWindowInfo(SSqlObj *pSql, SSqlStream *pStream) {
int64_t
minIntervalTime
=
int64_t
minIntervalTime
=
(
pStream
->
precision
==
TSDB_TIME_PRECISION_MICRO
)
?
tsMinIntervalTime
*
1000L
:
tsMinIntervalTime
;
(
pStream
->
precision
==
TSDB_TIME_PRECISION_MICRO
)
?
tsMinIntervalTime
*
1000L
:
tsMinIntervalTime
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
if
(
!
pStream
->
isProject
&&
pQueryInfo
->
interval
.
interval
==
0
)
{
if
(
!
pStream
->
isProject
&&
pQueryInfo
->
interval
.
interval
==
0
)
{
sprintf
(
pSql
->
cmd
.
payload
,
"the interval value is 0"
);
sprintf
(
pSql
->
cmd
.
payload
,
"the interval value is 0"
);
...
@@ -471,7 +471,7 @@ static int32_t tscSetSlidingWindowInfo(SSqlObj *pSql, SSqlStream *pStream) {
...
@@ -471,7 +471,7 @@ static int32_t tscSetSlidingWindowInfo(SSqlObj *pSql, SSqlStream *pStream) {
}
}
static
int64_t
tscGetStreamStartTimestamp
(
SSqlObj
*
pSql
,
SSqlStream
*
pStream
,
int64_t
stime
)
{
static
int64_t
tscGetStreamStartTimestamp
(
SSqlObj
*
pSql
,
SSqlStream
*
pStream
,
int64_t
stime
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
if
(
pStream
->
isProject
)
{
if
(
pStream
->
isProject
)
{
// no data in table, flush all data till now to destination meter, 10sec delay
// no data in table, flush all data till now to destination meter, 10sec delay
...
@@ -530,7 +530,7 @@ static void tscCreateStream(void *param, TAOS_RES *res, int code) {
...
@@ -530,7 +530,7 @@ static void tscCreateStream(void *param, TAOS_RES *res, int code) {
return
;
return
;
}
}
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableComInfo
tinfo
=
tscGetTableInfo
(
pTableMetaInfo
->
pTableMeta
);
STableComInfo
tinfo
=
tscGetTableInfo
(
pTableMetaInfo
->
pTableMeta
);
...
...
src/client/src/tscSub.c
浏览文件 @
0e0e6d5a
...
@@ -284,7 +284,7 @@ static int tscUpdateSubscription(STscObj* pObj, SSub* pSub) {
...
@@ -284,7 +284,7 @@ static int tscUpdateSubscription(STscObj* pObj, SSub* pSub) {
}
}
size_t
numOfTables
=
taosArrayGetSize
(
tables
);
size_t
numOfTables
=
taosArrayGetSize
(
tables
);
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
SArray
*
progress
=
taosArrayInit
(
numOfTables
,
sizeof
(
SSubscriptionProgress
));
SArray
*
progress
=
taosArrayInit
(
numOfTables
,
sizeof
(
SSubscriptionProgress
));
for
(
size_t
i
=
0
;
i
<
numOfTables
;
i
++
)
{
for
(
size_t
i
=
0
;
i
<
numOfTables
;
i
++
)
{
STidTags
*
tt
=
taosArrayGet
(
tables
,
i
);
STidTags
*
tt
=
taosArrayGet
(
tables
,
i
);
...
@@ -502,7 +502,7 @@ TAOS_RES *taos_consume(TAOS_SUB *tsub) {
...
@@ -502,7 +502,7 @@ TAOS_RES *taos_consume(TAOS_SUB *tsub) {
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
STableMetaInfo
*
pTableMetaInfo
=
tscGetTableMetaInfoFromCmd
(
pCmd
,
pCmd
->
clauseIndex
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetTableMetaInfoFromCmd
(
pCmd
,
pCmd
->
clauseIndex
,
0
);
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
if
(
taosArrayGetSize
(
pSub
->
progress
)
>
0
)
{
// fix crash in single table subscription
if
(
taosArrayGetSize
(
pSub
->
progress
)
>
0
)
{
// fix crash in single table subscription
size_t
size
=
taosArrayGetSize
(
pSub
->
progress
);
size_t
size
=
taosArrayGetSize
(
pSub
->
progress
);
...
...
src/client/src/tscSubquery.c
浏览文件 @
0e0e6d5a
...
@@ -117,7 +117,7 @@ static bool subAndCheckDone(SSqlObj *pSql, SSqlObj *pParentSql, int idx) {
...
@@ -117,7 +117,7 @@ static bool subAndCheckDone(SSqlObj *pSql, SSqlObj *pParentSql, int idx) {
}
}
static
int64_t
doTSBlockIntersect
(
SSqlObj
*
pSql
,
SJoinSupporter
*
pSupporter1
,
SJoinSupporter
*
pSupporter2
,
STimeWindow
*
win
)
{
static
int64_t
doTSBlockIntersect
(
SSqlObj
*
pSql
,
SJoinSupporter
*
pSupporter1
,
SJoinSupporter
*
pSupporter2
,
STimeWindow
*
win
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
pSql
->
cmd
.
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
pSql
->
cmd
.
clauseIndex
);
STSBuf
*
output1
=
tsBufCreate
(
true
,
pQueryInfo
->
order
.
order
);
STSBuf
*
output1
=
tsBufCreate
(
true
,
pQueryInfo
->
order
.
order
);
STSBuf
*
output2
=
tsBufCreate
(
true
,
pQueryInfo
->
order
.
order
);
STSBuf
*
output2
=
tsBufCreate
(
true
,
pQueryInfo
->
order
.
order
);
...
@@ -128,8 +128,8 @@ static int64_t doTSBlockIntersect(SSqlObj* pSql, SJoinSupporter* pSupporter1, SJ
...
@@ -128,8 +128,8 @@ static int64_t doTSBlockIntersect(SSqlObj* pSql, SJoinSupporter* pSupporter1, SJ
SLimitVal
*
pLimit
=
&
pQueryInfo
->
limit
;
SLimitVal
*
pLimit
=
&
pQueryInfo
->
limit
;
int32_t
order
=
pQueryInfo
->
order
.
order
;
int32_t
order
=
pQueryInfo
->
order
.
order
;
SQuery
Node
Info
*
pSubQueryInfo1
=
tscGetQueryInfo
(
&
pSql
->
pSubs
[
0
]
->
cmd
,
0
);
SQueryInfo
*
pSubQueryInfo1
=
tscGetQueryInfo
(
&
pSql
->
pSubs
[
0
]
->
cmd
,
0
);
SQuery
Node
Info
*
pSubQueryInfo2
=
tscGetQueryInfo
(
&
pSql
->
pSubs
[
1
]
->
cmd
,
0
);
SQueryInfo
*
pSubQueryInfo2
=
tscGetQueryInfo
(
&
pSql
->
pSubs
[
1
]
->
cmd
,
0
);
pSubQueryInfo1
->
tsBuf
=
output1
;
pSubQueryInfo1
->
tsBuf
=
output1
;
pSubQueryInfo2
->
tsBuf
=
output2
;
pSubQueryInfo2
->
tsBuf
=
output2
;
...
@@ -272,7 +272,7 @@ SJoinSupporter* tscCreateJoinSupporter(SSqlObj* pSql, int32_t index) {
...
@@ -272,7 +272,7 @@ SJoinSupporter* tscCreateJoinSupporter(SSqlObj* pSql, int32_t index) {
pSupporter
->
pObj
=
pSql
;
pSupporter
->
pObj
=
pSql
;
pSupporter
->
subqueryIndex
=
index
;
pSupporter
->
subqueryIndex
=
index
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
pSql
->
cmd
.
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
pSql
->
cmd
.
clauseIndex
);
memcpy
(
&
pSupporter
->
interval
,
&
pQueryInfo
->
interval
,
sizeof
(
pSupporter
->
interval
));
memcpy
(
&
pSupporter
->
interval
,
&
pQueryInfo
->
interval
,
sizeof
(
pSupporter
->
interval
));
pSupporter
->
limit
=
pQueryInfo
->
limit
;
pSupporter
->
limit
=
pQueryInfo
->
limit
;
...
@@ -333,7 +333,7 @@ static void tscDestroyJoinSupporter(SJoinSupporter* pSupporter) {
...
@@ -333,7 +333,7 @@ static void tscDestroyJoinSupporter(SJoinSupporter* pSupporter) {
* primary timestamp column , the secondary query is not necessary
* primary timestamp column , the secondary query is not necessary
*
*
*/
*/
static
UNUSED_FUNC
bool
needSecondaryQuery
(
SQuery
Node
Info
*
pQueryInfo
)
{
static
UNUSED_FUNC
bool
needSecondaryQuery
(
SQueryInfo
*
pQueryInfo
)
{
size_t
numOfCols
=
taosArrayGetSize
(
pQueryInfo
->
colList
);
size_t
numOfCols
=
taosArrayGetSize
(
pQueryInfo
->
colList
);
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
...
@@ -346,7 +346,7 @@ static UNUSED_FUNC bool needSecondaryQuery(SQueryNodeInfo* pQueryInfo) {
...
@@ -346,7 +346,7 @@ static UNUSED_FUNC bool needSecondaryQuery(SQueryNodeInfo* pQueryInfo) {
return
false
;
return
false
;
}
}
static
void
filterVgroupTables
(
SQuery
Node
Info
*
pQueryInfo
,
SArray
*
pVgroupTables
)
{
static
void
filterVgroupTables
(
SQueryInfo
*
pQueryInfo
,
SArray
*
pVgroupTables
)
{
int32_t
num
=
0
;
int32_t
num
=
0
;
int32_t
*
list
=
NULL
;
int32_t
*
list
=
NULL
;
tsBufGetGroupIdList
(
pQueryInfo
->
tsBuf
,
&
num
,
&
list
);
tsBufGetGroupIdList
(
pQueryInfo
->
tsBuf
,
&
num
,
&
list
);
...
@@ -378,7 +378,7 @@ static void filterVgroupTables(SQueryNodeInfo* pQueryInfo, SArray* pVgroupTables
...
@@ -378,7 +378,7 @@ static void filterVgroupTables(SQueryNodeInfo* pQueryInfo, SArray* pVgroupTables
tfree
(
list
);
tfree
(
list
);
}
}
static
SArray
*
buildVgroupTableByResult
(
SQuery
Node
Info
*
pQueryInfo
,
SArray
*
pVgroupTables
)
{
static
SArray
*
buildVgroupTableByResult
(
SQueryInfo
*
pQueryInfo
,
SArray
*
pVgroupTables
)
{
int32_t
num
=
0
;
int32_t
num
=
0
;
int32_t
*
list
=
NULL
;
int32_t
*
list
=
NULL
;
tsBufGetGroupIdList
(
pQueryInfo
->
tsBuf
,
&
num
,
&
list
);
tsBufGetGroupIdList
(
pQueryInfo
->
tsBuf
,
&
num
,
&
list
);
...
@@ -446,7 +446,7 @@ static int32_t tscLaunchRealSubqueries(SSqlObj* pSql) {
...
@@ -446,7 +446,7 @@ static int32_t tscLaunchRealSubqueries(SSqlObj* pSql) {
continue
;
continue
;
}
}
SQuery
Node
Info
*
pSubQueryInfo
=
tscGetQueryInfo
(
&
pPrevSub
->
cmd
,
0
);
SQueryInfo
*
pSubQueryInfo
=
tscGetQueryInfo
(
&
pPrevSub
->
cmd
,
0
);
STSBuf
*
pTsBuf
=
pSubQueryInfo
->
tsBuf
;
STSBuf
*
pTsBuf
=
pSubQueryInfo
->
tsBuf
;
pSubQueryInfo
->
tsBuf
=
NULL
;
pSubQueryInfo
->
tsBuf
=
NULL
;
...
@@ -465,7 +465,7 @@ static int32_t tscLaunchRealSubqueries(SSqlObj* pSql) {
...
@@ -465,7 +465,7 @@ static int32_t tscLaunchRealSubqueries(SSqlObj* pSql) {
tscClearSubqueryInfo
(
&
pNew
->
cmd
);
tscClearSubqueryInfo
(
&
pNew
->
cmd
);
pSql
->
pSubs
[
i
]
=
pNew
;
pSql
->
pSubs
[
i
]
=
pNew
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pNew
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pNew
->
cmd
,
0
);
pQueryInfo
->
tsBuf
=
pTsBuf
;
// transfer the ownership of timestamp comp-z data to the new created object
pQueryInfo
->
tsBuf
=
pTsBuf
;
// transfer the ownership of timestamp comp-z data to the new created object
// set the second stage sub query for join process
// set the second stage sub query for join process
...
@@ -563,7 +563,7 @@ static int32_t tscLaunchRealSubqueries(SSqlObj* pSql) {
...
@@ -563,7 +563,7 @@ static int32_t tscLaunchRealSubqueries(SSqlObj* pSql) {
}
}
// tscDoQuery(pSql->pSubs[i]);
// tscDoQuery(pSql->pSubs[i]);
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
pSubs
[
i
]
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
pSubs
[
i
]
->
cmd
,
0
);
executeQuery
(
pSql
->
pSubs
[
i
],
pQueryInfo
);
executeQuery
(
pSql
->
pSubs
[
i
],
pQueryInfo
);
}
}
...
@@ -606,7 +606,7 @@ static int32_t quitAllSubquery(SSqlObj* pSqlSub, SSqlObj* pSqlObj, SJoinSupporte
...
@@ -606,7 +606,7 @@ static int32_t quitAllSubquery(SSqlObj* pSqlSub, SSqlObj* pSqlObj, SJoinSupporte
}
}
// update the query time range according to the join results on timestamp
// update the query time range according to the join results on timestamp
static
void
updateQueryTimeRange
(
SQuery
Node
Info
*
pQueryInfo
,
STimeWindow
*
win
)
{
static
void
updateQueryTimeRange
(
SQueryInfo
*
pQueryInfo
,
STimeWindow
*
win
)
{
assert
(
pQueryInfo
->
window
.
skey
<=
win
->
skey
&&
pQueryInfo
->
window
.
ekey
>=
win
->
ekey
);
assert
(
pQueryInfo
->
window
.
skey
<=
win
->
skey
&&
pQueryInfo
->
window
.
ekey
>=
win
->
ekey
);
pQueryInfo
->
window
=
*
win
;
pQueryInfo
->
window
=
*
win
;
...
@@ -702,7 +702,7 @@ static void issueTsCompQuery(SSqlObj* pSql, SJoinSupporter* pSupporter, SSqlObj*
...
@@ -702,7 +702,7 @@ static void issueTsCompQuery(SSqlObj* pSql, SJoinSupporter* pSupporter, SSqlObj*
tscClearSubqueryInfo
(
pCmd
);
tscClearSubqueryInfo
(
pCmd
);
tscFreeSqlResult
(
pSql
);
tscFreeSqlResult
(
pSql
);
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
assert
(
pQueryInfo
->
numOfTables
==
1
);
assert
(
pQueryInfo
->
numOfTables
==
1
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
...
@@ -768,7 +768,7 @@ static bool checkForDuplicateTagVal(SSchema* pColSchema, SJoinSupporter* p1, SSq
...
@@ -768,7 +768,7 @@ static bool checkForDuplicateTagVal(SSchema* pColSchema, SJoinSupporter* p1, SSq
return
true
;
return
true
;
}
}
static
int32_t
getIntersectionOfTableTuple
(
SQuery
Node
Info
*
pQueryInfo
,
SSqlObj
*
pParentSql
,
SArray
**
s1
,
SArray
**
s2
)
{
static
int32_t
getIntersectionOfTableTuple
(
SQueryInfo
*
pQueryInfo
,
SSqlObj
*
pParentSql
,
SArray
**
s1
,
SArray
**
s2
)
{
SJoinSupporter
*
p1
=
pParentSql
->
pSubs
[
0
]
->
param
;
SJoinSupporter
*
p1
=
pParentSql
->
pSubs
[
0
]
->
param
;
SJoinSupporter
*
p2
=
pParentSql
->
pSubs
[
1
]
->
param
;
SJoinSupporter
*
p2
=
pParentSql
->
pSubs
[
1
]
->
param
;
...
@@ -847,7 +847,7 @@ static void tidTagRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
...
@@ -847,7 +847,7 @@ static void tidTagRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
// todo, the type may not include TSDB_QUERY_TYPE_TAG_FILTER_QUERY
// todo, the type may not include TSDB_QUERY_TYPE_TAG_FILTER_QUERY
assert
(
TSDB_QUERY_HAS_TYPE
(
pQueryInfo
->
type
,
TSDB_QUERY_TYPE_TAG_FILTER_QUERY
));
assert
(
TSDB_QUERY_HAS_TYPE
(
pQueryInfo
->
type
,
TSDB_QUERY_TYPE_TAG_FILTER_QUERY
));
...
@@ -967,11 +967,11 @@ static void tidTagRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
...
@@ -967,11 +967,11 @@ static void tidTagRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
SSqlCmd
*
pSubCmd1
=
&
pParentSql
->
pSubs
[
0
]
->
cmd
;
SSqlCmd
*
pSubCmd1
=
&
pParentSql
->
pSubs
[
0
]
->
cmd
;
SSqlCmd
*
pSubCmd2
=
&
pParentSql
->
pSubs
[
1
]
->
cmd
;
SSqlCmd
*
pSubCmd2
=
&
pParentSql
->
pSubs
[
1
]
->
cmd
;
SQuery
Node
Info
*
pQueryInfo1
=
tscGetQueryInfo
(
pSubCmd1
,
0
);
SQueryInfo
*
pQueryInfo1
=
tscGetQueryInfo
(
pSubCmd1
,
0
);
STableMetaInfo
*
pTableMetaInfo1
=
tscGetMetaInfo
(
pQueryInfo1
,
0
);
STableMetaInfo
*
pTableMetaInfo1
=
tscGetMetaInfo
(
pQueryInfo1
,
0
);
tscBuildVgroupTableInfo
(
pParentSql
,
pTableMetaInfo1
,
s1
);
tscBuildVgroupTableInfo
(
pParentSql
,
pTableMetaInfo1
,
s1
);
SQuery
Node
Info
*
pQueryInfo2
=
tscGetQueryInfo
(
pSubCmd2
,
0
);
SQueryInfo
*
pQueryInfo2
=
tscGetQueryInfo
(
pSubCmd2
,
0
);
STableMetaInfo
*
pTableMetaInfo2
=
tscGetMetaInfo
(
pQueryInfo2
,
0
);
STableMetaInfo
*
pTableMetaInfo2
=
tscGetMetaInfo
(
pQueryInfo2
,
0
);
tscBuildVgroupTableInfo
(
pParentSql
,
pTableMetaInfo2
,
s2
);
tscBuildVgroupTableInfo
(
pParentSql
,
pTableMetaInfo2
,
s2
);
...
@@ -1005,7 +1005,7 @@ static void tsCompRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
...
@@ -1005,7 +1005,7 @@ static void tsCompRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
assert
(
!
TSDB_QUERY_HAS_TYPE
(
pQueryInfo
->
type
,
TSDB_QUERY_TYPE_JOIN_SEC_STAGE
));
assert
(
!
TSDB_QUERY_HAS_TYPE
(
pQueryInfo
->
type
,
TSDB_QUERY_TYPE_JOIN_SEC_STAGE
));
if
(
pParentSql
->
res
.
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
pParentSql
->
res
.
code
!=
TSDB_CODE_SUCCESS
)
{
...
@@ -1141,7 +1141,7 @@ static void tsCompRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
...
@@ -1141,7 +1141,7 @@ static void tsCompRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
}
}
// launch the query the retrieve actual results from vnode along with the filtered timestamp
// launch the query the retrieve actual results from vnode along with the filtered timestamp
SQuery
Node
Info
*
pPQueryInfo
=
tscGetQueryInfo
(
&
pParentSql
->
cmd
,
pParentSql
->
cmd
.
clauseIndex
);
SQueryInfo
*
pPQueryInfo
=
tscGetQueryInfo
(
&
pParentSql
->
cmd
,
pParentSql
->
cmd
.
clauseIndex
);
updateQueryTimeRange
(
pPQueryInfo
,
&
win
);
updateQueryTimeRange
(
pPQueryInfo
,
&
win
);
//update the vgroup that involved in real data query
//update the vgroup that involved in real data query
...
@@ -1157,7 +1157,7 @@ static void joinRetrieveFinalResCallback(void* param, TAOS_RES* tres, int numOfR
...
@@ -1157,7 +1157,7 @@ static void joinRetrieveFinalResCallback(void* param, TAOS_RES* tres, int numOfR
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
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
);
...
@@ -1266,7 +1266,7 @@ void tscFetchDatablockForSubquery(SSqlObj* pSql) {
...
@@ -1266,7 +1266,7 @@ void tscFetchDatablockForSubquery(SSqlObj* pSql) {
SSqlRes
*
pRes
=
&
pSub
->
res
;
SSqlRes
*
pRes
=
&
pSub
->
res
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSub
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSub
->
cmd
,
0
);
if
(
!
tscHasReachLimitation
(
pQueryInfo
,
pRes
))
{
if
(
!
tscHasReachLimitation
(
pQueryInfo
,
pRes
))
{
if
(
pRes
->
row
>=
pRes
->
numOfRows
)
{
if
(
pRes
->
row
>=
pRes
->
numOfRows
)
{
// no data left in current result buffer
// no data left in current result buffer
...
@@ -1318,7 +1318,7 @@ void tscFetchDatablockForSubquery(SSqlObj* pSql) {
...
@@ -1318,7 +1318,7 @@ void tscFetchDatablockForSubquery(SSqlObj* pSql) {
continue
;
continue
;
}
}
SQuery
Node
Info
*
p
=
tscGetQueryInfo
(
&
pSub
->
cmd
,
0
);
SQueryInfo
*
p
=
tscGetQueryInfo
(
&
pSub
->
cmd
,
0
);
orderedPrjQuery
=
tscNonOrderedProjectionQueryOnSTable
(
p
,
0
);
orderedPrjQuery
=
tscNonOrderedProjectionQueryOnSTable
(
p
,
0
);
if
(
orderedPrjQuery
)
{
if
(
orderedPrjQuery
)
{
break
;
break
;
...
@@ -1342,7 +1342,7 @@ void tscFetchDatablockForSubquery(SSqlObj* pSql) {
...
@@ -1342,7 +1342,7 @@ void tscFetchDatablockForSubquery(SSqlObj* pSql) {
continue
;
continue
;
}
}
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSub
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSub
->
cmd
,
0
);
if
(
tscNonOrderedProjectionQueryOnSTable
(
pQueryInfo
,
0
)
&&
pSub
->
res
.
row
>=
pSub
->
res
.
numOfRows
&&
if
(
tscNonOrderedProjectionQueryOnSTable
(
pQueryInfo
,
0
)
&&
pSub
->
res
.
row
>=
pSub
->
res
.
numOfRows
&&
pSub
->
res
.
completed
)
{
pSub
->
res
.
completed
)
{
...
@@ -1417,7 +1417,7 @@ void tscFetchDatablockForSubquery(SSqlObj* pSql) {
...
@@ -1417,7 +1417,7 @@ void tscFetchDatablockForSubquery(SSqlObj* pSql) {
pSupporter
=
(
SJoinSupporter
*
)
pSql1
->
param
;
pSupporter
=
(
SJoinSupporter
*
)
pSql1
->
param
;
// wait for all subqueries completed
// wait for all subqueries completed
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd1
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd1
,
0
);
assert
(
pRes1
->
numOfRows
>=
0
&&
pQueryInfo
->
numOfTables
==
1
);
assert
(
pRes1
->
numOfRows
>=
0
&&
pQueryInfo
->
numOfTables
==
1
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
...
@@ -1448,7 +1448,7 @@ void tscSetupOutputColumnIndex(SSqlObj* pSql) {
...
@@ -1448,7 +1448,7 @@ void tscSetupOutputColumnIndex(SSqlObj* pSql) {
return
;
return
;
}
}
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
int32_t
numOfExprs
=
(
int32_t
)
tscSqlExprNumOfExprs
(
pQueryInfo
);
int32_t
numOfExprs
=
(
int32_t
)
tscSqlExprNumOfExprs
(
pQueryInfo
);
pRes
->
pColumnIndex
=
calloc
(
1
,
sizeof
(
SColumnIndex
)
*
numOfExprs
);
pRes
->
pColumnIndex
=
calloc
(
1
,
sizeof
(
SColumnIndex
)
*
numOfExprs
);
...
@@ -1472,7 +1472,7 @@ void tscSetupOutputColumnIndex(SSqlObj* pSql) {
...
@@ -1472,7 +1472,7 @@ void tscSetupOutputColumnIndex(SSqlObj* pSql) {
assert
(
tableIndexOfSub
>=
0
&&
tableIndexOfSub
<
pQueryInfo
->
numOfTables
);
assert
(
tableIndexOfSub
>=
0
&&
tableIndexOfSub
<
pQueryInfo
->
numOfTables
);
SSqlCmd
*
pSubCmd
=
&
pSql
->
pSubs
[
tableIndexOfSub
]
->
cmd
;
SSqlCmd
*
pSubCmd
=
&
pSql
->
pSubs
[
tableIndexOfSub
]
->
cmd
;
SQuery
Node
Info
*
pSubQueryInfo
=
tscGetQueryInfo
(
pSubCmd
,
0
);
SQueryInfo
*
pSubQueryInfo
=
tscGetQueryInfo
(
pSubCmd
,
0
);
size_t
numOfSubExpr
=
taosArrayGetSize
(
pSubQueryInfo
->
exprList
);
size_t
numOfSubExpr
=
taosArrayGetSize
(
pSubQueryInfo
->
exprList
);
for
(
int32_t
k
=
0
;
k
<
numOfSubExpr
;
++
k
)
{
for
(
int32_t
k
=
0
;
k
<
numOfSubExpr
;
++
k
)
{
...
@@ -1496,7 +1496,7 @@ void tscJoinQueryCallback(void* param, TAOS_RES* tres, int code) {
...
@@ -1496,7 +1496,7 @@ void tscJoinQueryCallback(void* param, TAOS_RES* tres, int code) {
SSqlObj
*
pParentSql
=
pSupporter
->
pObj
;
SSqlObj
*
pParentSql
=
pSupporter
->
pObj
;
// There is only one subquery and table for each subquery.
// There is only one subquery and table for each subquery.
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
assert
(
pQueryInfo
->
numOfTables
==
1
&&
pSql
->
cmd
.
numOfClause
==
1
);
assert
(
pQueryInfo
->
numOfTables
==
1
&&
pSql
->
cmd
.
numOfClause
==
1
);
...
@@ -1580,7 +1580,7 @@ static SSqlObj *tscCreateSTableSubquery(SSqlObj *pSql, SRetrieveSupport *trsuppo
...
@@ -1580,7 +1580,7 @@ static SSqlObj *tscCreateSTableSubquery(SSqlObj *pSql, SRetrieveSupport *trsuppo
int32_t
tscCreateJoinSubquery
(
SSqlObj
*
pSql
,
int16_t
tableIndex
,
SJoinSupporter
*
pSupporter
)
{
int32_t
tscCreateJoinSubquery
(
SSqlObj
*
pSql
,
int16_t
tableIndex
,
SJoinSupporter
*
pSupporter
)
{
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
pSql
->
res
.
qid
=
0x1
;
pSql
->
res
.
qid
=
0x1
;
assert
(
pSql
->
res
.
numOfRows
==
0
);
assert
(
pSql
->
res
.
numOfRows
==
0
);
...
@@ -1603,7 +1603,7 @@ int32_t tscCreateJoinSubquery(SSqlObj *pSql, int16_t tableIndex, SJoinSupporter
...
@@ -1603,7 +1603,7 @@ int32_t tscCreateJoinSubquery(SSqlObj *pSql, int16_t tableIndex, SJoinSupporter
addGroupInfoForSubquery
(
pSql
,
pNew
,
0
,
tableIndex
);
addGroupInfoForSubquery
(
pSql
,
pNew
,
0
,
tableIndex
);
// refactor as one method
// refactor as one method
SQuery
Node
Info
*
pNewQueryInfo
=
tscGetQueryInfo
(
&
pNew
->
cmd
,
0
);
SQueryInfo
*
pNewQueryInfo
=
tscGetQueryInfo
(
&
pNew
->
cmd
,
0
);
assert
(
pNewQueryInfo
!=
NULL
);
assert
(
pNewQueryInfo
!=
NULL
);
// update the table index
// update the table index
...
@@ -1712,7 +1712,7 @@ int32_t tscCreateJoinSubquery(SSqlObj *pSql, int16_t tableIndex, SJoinSupporter
...
@@ -1712,7 +1712,7 @@ int32_t tscCreateJoinSubquery(SSqlObj *pSql, int16_t tableIndex, SJoinSupporter
}
}
}
else
{
}
else
{
assert
(
0
);
assert
(
0
);
SQuery
Node
Info
*
pNewQueryInfo
=
tscGetQueryInfo
(
&
pNew
->
cmd
,
0
);
SQueryInfo
*
pNewQueryInfo
=
tscGetQueryInfo
(
&
pNew
->
cmd
,
0
);
pNewQueryInfo
->
type
|=
TSDB_QUERY_TYPE_SUBQUERY
;
pNewQueryInfo
->
type
|=
TSDB_QUERY_TYPE_SUBQUERY
;
}
}
...
@@ -1723,7 +1723,7 @@ void tscHandleMasterJoinQuery(SSqlObj* pSql) {
...
@@ -1723,7 +1723,7 @@ void tscHandleMasterJoinQuery(SSqlObj* pSql) {
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
assert
((
pQueryInfo
->
type
&
TSDB_QUERY_TYPE_SUBQUERY
)
==
0
);
assert
((
pQueryInfo
->
type
&
TSDB_QUERY_TYPE_SUBQUERY
)
==
0
);
int32_t
code
=
TSDB_CODE_SUCCESS
;
int32_t
code
=
TSDB_CODE_SUCCESS
;
...
@@ -1844,7 +1844,7 @@ typedef struct SFirstRoundQuerySup {
...
@@ -1844,7 +1844,7 @@ typedef struct SFirstRoundQuerySup {
int32_t
bufLen
;
int32_t
bufLen
;
}
SFirstRoundQuerySup
;
}
SFirstRoundQuerySup
;
void
doAppendData
(
SInterResult
*
pInterResult
,
TAOS_ROW
row
,
int32_t
numOfCols
,
SQuery
Node
Info
*
pQueryInfo
)
{
void
doAppendData
(
SInterResult
*
pInterResult
,
TAOS_ROW
row
,
int32_t
numOfCols
,
SQueryInfo
*
pQueryInfo
)
{
TSKEY
key
=
INT64_MIN
;
TSKEY
key
=
INT64_MIN
;
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
i
);
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
i
);
...
@@ -1908,7 +1908,7 @@ void tscFirstRoundRetrieveCallback(void* param, TAOS_RES* tres, int numOfRows) {
...
@@ -1908,7 +1908,7 @@ void tscFirstRoundRetrieveCallback(void* param, TAOS_RES* tres, int numOfRows) {
SFirstRoundQuerySup
*
pSup
=
param
;
SFirstRoundQuerySup
*
pSup
=
param
;
SSqlObj
*
pParent
=
pSup
->
pParent
;
SSqlObj
*
pParent
=
pSup
->
pParent
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
int32_t
code
=
taos_errno
(
pSql
);
int32_t
code
=
taos_errno
(
pSql
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
...
@@ -1991,7 +1991,7 @@ void tscFirstRoundRetrieveCallback(void* param, TAOS_RES* tres, int numOfRows) {
...
@@ -1991,7 +1991,7 @@ void tscFirstRoundRetrieveCallback(void* param, TAOS_RES* tres, int numOfRows) {
// set the parameters for the second round query process
// set the parameters for the second round query process
SSqlCmd
*
pPCmd
=
&
pParent
->
cmd
;
SSqlCmd
*
pPCmd
=
&
pParent
->
cmd
;
SQuery
Node
Info
*
pQueryInfo1
=
tscGetQueryInfo
(
pPCmd
,
0
);
SQueryInfo
*
pQueryInfo1
=
tscGetQueryInfo
(
pPCmd
,
0
);
int32_t
resRows
=
pSup
->
numOfRows
;
int32_t
resRows
=
pSup
->
numOfRows
;
if
(
pSup
->
numOfRows
>
0
)
{
if
(
pSup
->
numOfRows
>
0
)
{
...
@@ -2042,7 +2042,7 @@ void tscFirstRoundCallback(void* param, TAOS_RES* tres, int code) {
...
@@ -2042,7 +2042,7 @@ void tscFirstRoundCallback(void* param, TAOS_RES* tres, int code) {
}
}
int32_t
tscHandleFirstRoundStableQuery
(
SSqlObj
*
pSql
)
{
int32_t
tscHandleFirstRoundStableQuery
(
SSqlObj
*
pSql
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
STableMetaInfo
*
pTableMetaInfo1
=
tscGetTableMetaInfoFromCmd
(
&
pSql
->
cmd
,
0
,
0
);
STableMetaInfo
*
pTableMetaInfo1
=
tscGetTableMetaInfoFromCmd
(
&
pSql
->
cmd
,
0
,
0
);
SFirstRoundQuerySup
*
pSup
=
calloc
(
1
,
sizeof
(
SFirstRoundQuerySup
));
SFirstRoundQuerySup
*
pSup
=
calloc
(
1
,
sizeof
(
SFirstRoundQuerySup
));
...
@@ -2058,7 +2058,7 @@ int32_t tscHandleFirstRoundStableQuery(SSqlObj *pSql) {
...
@@ -2058,7 +2058,7 @@ int32_t tscHandleFirstRoundStableQuery(SSqlObj *pSql) {
tscClearSubqueryInfo
(
pCmd
);
tscClearSubqueryInfo
(
pCmd
);
tscFreeSqlResult
(
pSql
);
tscFreeSqlResult
(
pSql
);
SQuery
Node
Info
*
pNewQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
SQueryInfo
*
pNewQueryInfo
=
tscGetQueryInfo
(
pCmd
,
0
);
assert
(
pQueryInfo
->
numOfTables
==
1
);
assert
(
pQueryInfo
->
numOfTables
==
1
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pNewQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pNewQueryInfo
,
0
);
...
@@ -2181,7 +2181,7 @@ int32_t tscHandleMasterSTableQuery(SSqlObj *pSql) {
...
@@ -2181,7 +2181,7 @@ int32_t tscHandleMasterSTableQuery(SSqlObj *pSql) {
const
uint32_t
nBufferSize
=
(
1u
<<
16u
);
// 64KB
const
uint32_t
nBufferSize
=
(
1u
<<
16u
);
// 64KB
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
SSubqueryState
*
pState
=
&
pSql
->
subState
;
SSubqueryState
*
pState
=
&
pSql
->
subState
;
...
@@ -2263,7 +2263,7 @@ int32_t tscHandleMasterSTableQuery(SSqlObj *pSql) {
...
@@ -2263,7 +2263,7 @@ int32_t tscHandleMasterSTableQuery(SSqlObj *pSql) {
// todo handle multi-vnode situation
// todo handle multi-vnode situation
if
(
pQueryInfo
->
tsBuf
)
{
if
(
pQueryInfo
->
tsBuf
)
{
SQuery
Node
Info
*
pNewQueryInfo
=
tscGetQueryInfo
(
&
pNew
->
cmd
,
0
);
SQueryInfo
*
pNewQueryInfo
=
tscGetQueryInfo
(
&
pNew
->
cmd
,
0
);
pNewQueryInfo
->
tsBuf
=
tsBufClone
(
pQueryInfo
->
tsBuf
);
pNewQueryInfo
->
tsBuf
=
tsBufClone
(
pQueryInfo
->
tsBuf
);
assert
(
pNewQueryInfo
->
tsBuf
!=
NULL
);
assert
(
pNewQueryInfo
->
tsBuf
!=
NULL
);
}
}
...
@@ -2451,7 +2451,7 @@ void tscHandleSubqueryError(SRetrieveSupport *trsupport, SSqlObj *pSql, int numO
...
@@ -2451,7 +2451,7 @@ void tscHandleSubqueryError(SRetrieveSupport *trsupport, SSqlObj *pSql, int numO
tscFreeRetrieveSup
(
pSql
);
tscFreeRetrieveSup
(
pSql
);
// in case of second stage join subquery, invoke its callback function instead of regular QueueAsyncRes
// in case of second stage join subquery, invoke its callback function instead of regular QueueAsyncRes
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pParentSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pParentSql
->
cmd
,
0
);
if
(
!
TSDB_QUERY_HAS_TYPE
(
pQueryInfo
->
type
,
TSDB_QUERY_TYPE_JOIN_SEC_STAGE
))
{
if
(
!
TSDB_QUERY_HAS_TYPE
(
pQueryInfo
->
type
,
TSDB_QUERY_TYPE_JOIN_SEC_STAGE
))
{
(
*
pParentSql
->
fp
)(
pParentSql
->
param
,
pParentSql
,
pParentSql
->
res
.
code
);
(
*
pParentSql
->
fp
)(
pParentSql
->
param
,
pParentSql
,
pParentSql
->
res
.
code
);
...
@@ -2468,7 +2468,7 @@ static void tscAllDataRetrievedFromDnode(SRetrieveSupport *trsupport, SSqlObj* p
...
@@ -2468,7 +2468,7 @@ static void tscAllDataRetrievedFromDnode(SRetrieveSupport *trsupport, SSqlObj* p
tOrderDescriptor
*
pDesc
=
trsupport
->
pOrderDescriptor
;
tOrderDescriptor
*
pDesc
=
trsupport
->
pOrderDescriptor
;
SSubqueryState
*
pState
=
&
pParentSql
->
subState
;
SSubqueryState
*
pState
=
&
pParentSql
->
subState
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
pQueryInfo
->
pTableMetaInfo
[
0
];
STableMetaInfo
*
pTableMetaInfo
=
pQueryInfo
->
pTableMetaInfo
[
0
];
...
@@ -2516,7 +2516,7 @@ static void tscAllDataRetrievedFromDnode(SRetrieveSupport *trsupport, SSqlObj* p
...
@@ -2516,7 +2516,7 @@ static void tscAllDataRetrievedFromDnode(SRetrieveSupport *trsupport, SSqlObj* p
tscDebug
(
"%p retrieve from %d vnodes completed.final NumOfRows:%"
PRId64
",start to build loser tree"
,
pParentSql
,
tscDebug
(
"%p retrieve from %d vnodes completed.final NumOfRows:%"
PRId64
",start to build loser tree"
,
pParentSql
,
pState
->
numOfSub
,
pState
->
numOfRetrievedRows
);
pState
->
numOfSub
,
pState
->
numOfRetrievedRows
);
SQuery
Node
Info
*
pPQueryInfo
=
tscGetQueryInfo
(
&
pParentSql
->
cmd
,
0
);
SQueryInfo
*
pPQueryInfo
=
tscGetQueryInfo
(
&
pParentSql
->
cmd
,
0
);
tscClearInterpInfo
(
pPQueryInfo
);
tscClearInterpInfo
(
pPQueryInfo
);
tscCreateLocalMerger
(
trsupport
->
pExtMemBuffer
,
pState
->
numOfSub
,
pDesc
,
trsupport
->
pFinalColModel
,
trsupport
->
pFFColModel
,
pParentSql
);
tscCreateLocalMerger
(
trsupport
->
pExtMemBuffer
,
pState
->
numOfSub
,
pDesc
,
trsupport
->
pFinalColModel
,
trsupport
->
pFFColModel
,
pParentSql
);
...
@@ -2592,7 +2592,7 @@ static void tscRetrieveFromDnodeCallBack(void *param, TAOS_RES *tres, int numOfR
...
@@ -2592,7 +2592,7 @@ static void tscRetrieveFromDnodeCallBack(void *param, TAOS_RES *tres, int numOfR
}
}
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
if
(
numOfRows
>
0
)
{
if
(
numOfRows
>
0
)
{
assert
(
pRes
->
numOfRows
==
numOfRows
);
assert
(
pRes
->
numOfRows
==
numOfRows
);
...
@@ -2644,7 +2644,7 @@ static SSqlObj *tscCreateSTableSubquery(SSqlObj *pSql, SRetrieveSupport *trsuppo
...
@@ -2644,7 +2644,7 @@ static SSqlObj *tscCreateSTableSubquery(SSqlObj *pSql, SRetrieveSupport *trsuppo
SSqlObj
*
pNew
=
createSubqueryObj
(
pSql
,
table_index
,
tscRetrieveDataRes
,
trsupport
,
TSDB_SQL_SELECT
,
prevSqlObj
);
SSqlObj
*
pNew
=
createSubqueryObj
(
pSql
,
table_index
,
tscRetrieveDataRes
,
trsupport
,
TSDB_SQL_SELECT
,
prevSqlObj
);
if
(
pNew
!=
NULL
)
{
// the sub query of two-stage super table query
if
(
pNew
!=
NULL
)
{
// the sub query of two-stage super table query
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pNew
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pNew
->
cmd
,
0
);
pQueryInfo
->
type
|=
TSDB_QUERY_TYPE_STABLE_SUBQUERY
;
pQueryInfo
->
type
|=
TSDB_QUERY_TYPE_STABLE_SUBQUERY
;
...
@@ -2678,7 +2678,7 @@ void tscRetrieveDataRes(void *param, TAOS_RES *tres, int code) {
...
@@ -2678,7 +2678,7 @@ void tscRetrieveDataRes(void *param, TAOS_RES *tres, int code) {
SSqlObj
*
pParentSql
=
trsupport
->
pParentSql
;
SSqlObj
*
pParentSql
=
trsupport
->
pParentSql
;
SSqlObj
*
pSql
=
(
SSqlObj
*
)
tres
;
SSqlObj
*
pSql
=
(
SSqlObj
*
)
tres
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
0
);
assert
(
pSql
->
cmd
.
numOfClause
==
1
&&
pQueryInfo
->
numOfTables
==
1
);
assert
(
pSql
->
cmd
.
numOfClause
==
1
&&
pQueryInfo
->
numOfTables
==
1
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetTableMetaInfoFromCmd
(
&
pSql
->
cmd
,
0
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetTableMetaInfoFromCmd
(
&
pSql
->
cmd
,
0
,
0
);
...
@@ -2816,7 +2816,7 @@ static void multiVnodeInsertFinalize(void* param, TAOS_RES* tres, int numOfRows)
...
@@ -2816,7 +2816,7 @@ static void multiVnodeInsertFinalize(void* param, TAOS_RES* tres, int numOfRows)
// clean up tableMeta in cache
// clean up tableMeta in cache
tscFreeQueryInfo
(
&
pSql
->
cmd
,
false
);
tscFreeQueryInfo
(
&
pSql
->
cmd
,
false
);
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfoS
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoS
(
&
pSql
->
cmd
,
0
);
STableMetaInfo
*
pMasterTableMetaInfo
=
tscGetTableMetaInfoFromCmd
(
&
pParentObj
->
cmd
,
pSql
->
cmd
.
clauseIndex
,
0
);
STableMetaInfo
*
pMasterTableMetaInfo
=
tscGetTableMetaInfoFromCmd
(
&
pParentObj
->
cmd
,
pSql
->
cmd
.
clauseIndex
,
0
);
tscAddTableMetaInfo
(
pQueryInfo
,
&
pMasterTableMetaInfo
->
name
,
NULL
,
NULL
,
NULL
,
NULL
);
tscAddTableMetaInfo
(
pQueryInfo
,
&
pMasterTableMetaInfo
->
name
,
NULL
,
NULL
,
NULL
,
NULL
);
...
@@ -2988,7 +2988,7 @@ int32_t tscHandleMultivnodeInsert(SSqlObj *pSql) {
...
@@ -2988,7 +2988,7 @@ int32_t tscHandleMultivnodeInsert(SSqlObj *pSql) {
}
}
static
char
*
getResultBlockPosition
(
SSqlCmd
*
pCmd
,
SSqlRes
*
pRes
,
int32_t
columnIndex
,
int16_t
*
bytes
)
{
static
char
*
getResultBlockPosition
(
SSqlCmd
*
pCmd
,
SSqlRes
*
pRes
,
int32_t
columnIndex
,
int16_t
*
bytes
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SInternalField
*
pInfo
=
(
SInternalField
*
)
TARRAY_GET_ELEM
(
pQueryInfo
->
fieldsInfo
.
internalField
,
columnIndex
);
SInternalField
*
pInfo
=
(
SInternalField
*
)
TARRAY_GET_ELEM
(
pQueryInfo
->
fieldsInfo
.
internalField
,
columnIndex
);
assert
(
pInfo
->
pExpr
->
pExpr
==
NULL
);
assert
(
pInfo
->
pExpr
->
pExpr
==
NULL
);
...
@@ -3002,7 +3002,7 @@ static char* getResultBlockPosition(SSqlCmd* pCmd, SSqlRes* pRes, int32_t column
...
@@ -3002,7 +3002,7 @@ static char* getResultBlockPosition(SSqlCmd* pCmd, SSqlRes* pRes, int32_t column
static
void
doBuildResFromSubqueries
(
SSqlObj
*
pSql
)
{
static
void
doBuildResFromSubqueries
(
SSqlObj
*
pSql
)
{
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
pSql
->
cmd
.
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
pSql
->
cmd
.
clauseIndex
);
int32_t
numOfRes
=
INT32_MAX
;
int32_t
numOfRes
=
INT32_MAX
;
for
(
int32_t
i
=
0
;
i
<
pSql
->
subState
.
numOfSub
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pSql
->
subState
.
numOfSub
;
++
i
)
{
...
@@ -3085,7 +3085,7 @@ void tscBuildResFromSubqueries(SSqlObj *pSql) {
...
@@ -3085,7 +3085,7 @@ void tscBuildResFromSubqueries(SSqlObj *pSql) {
}
}
if
(
pRes
->
tsrow
==
NULL
)
{
if
(
pRes
->
tsrow
==
NULL
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
pSql
->
cmd
.
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
&
pSql
->
cmd
,
pSql
->
cmd
.
clauseIndex
);
pRes
->
numOfCols
=
(
int16_t
)
tscSqlExprNumOfExprs
(
pQueryInfo
);
pRes
->
numOfCols
=
(
int16_t
)
tscSqlExprNumOfExprs
(
pQueryInfo
);
pRes
->
tsrow
=
calloc
(
pRes
->
numOfCols
,
POINTER_BYTES
);
pRes
->
tsrow
=
calloc
(
pRes
->
numOfCols
,
POINTER_BYTES
);
...
@@ -3139,7 +3139,7 @@ TAOS_ROW doSetResultRowData(SSqlObj *pSql) {
...
@@ -3139,7 +3139,7 @@ TAOS_ROW doSetResultRowData(SSqlObj *pSql) {
return
pRes
->
tsrow
;
return
pRes
->
tsrow
;
}
}
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
size_t
size
=
tscNumOfFields
(
pQueryInfo
);
size_t
size
=
tscNumOfFields
(
pQueryInfo
);
for
(
int
i
=
0
;
i
<
size
;
++
i
)
{
for
(
int
i
=
0
;
i
<
size
;
++
i
)
{
...
@@ -3166,7 +3166,7 @@ static UNUSED_FUNC bool tscHasRemainDataInSubqueryResultSet(SSqlObj *pSql) {
...
@@ -3166,7 +3166,7 @@ static UNUSED_FUNC bool tscHasRemainDataInSubqueryResultSet(SSqlObj *pSql) {
bool
hasData
=
true
;
bool
hasData
=
true
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
if
(
tscNonOrderedProjectionQueryOnSTable
(
pQueryInfo
,
0
))
{
if
(
tscNonOrderedProjectionQueryOnSTable
(
pQueryInfo
,
0
))
{
bool
allSubqueryExhausted
=
true
;
bool
allSubqueryExhausted
=
true
;
...
@@ -3178,7 +3178,7 @@ static UNUSED_FUNC bool tscHasRemainDataInSubqueryResultSet(SSqlObj *pSql) {
...
@@ -3178,7 +3178,7 @@ static UNUSED_FUNC bool tscHasRemainDataInSubqueryResultSet(SSqlObj *pSql) {
SSqlRes
*
pRes1
=
&
pSql
->
pSubs
[
i
]
->
res
;
SSqlRes
*
pRes1
=
&
pSql
->
pSubs
[
i
]
->
res
;
SSqlCmd
*
pCmd1
=
&
pSql
->
pSubs
[
i
]
->
cmd
;
SSqlCmd
*
pCmd1
=
&
pSql
->
pSubs
[
i
]
->
cmd
;
SQuery
Node
Info
*
pQueryInfo1
=
tscGetQueryInfo
(
pCmd1
,
pCmd1
->
clauseIndex
);
SQueryInfo
*
pQueryInfo1
=
tscGetQueryInfo
(
pCmd1
,
pCmd1
->
clauseIndex
);
assert
(
pQueryInfo1
->
numOfTables
==
1
);
assert
(
pQueryInfo1
->
numOfTables
==
1
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo1
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo1
,
0
);
...
@@ -3202,7 +3202,7 @@ static UNUSED_FUNC bool tscHasRemainDataInSubqueryResultSet(SSqlObj *pSql) {
...
@@ -3202,7 +3202,7 @@ static UNUSED_FUNC bool tscHasRemainDataInSubqueryResultSet(SSqlObj *pSql) {
}
}
SSqlRes
*
pRes1
=
&
pSql
->
pSubs
[
i
]
->
res
;
SSqlRes
*
pRes1
=
&
pSql
->
pSubs
[
i
]
->
res
;
SQuery
Node
Info
*
pQueryInfo1
=
tscGetQueryInfo
(
&
pSql
->
pSubs
[
i
]
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo1
=
tscGetQueryInfo
(
&
pSql
->
pSubs
[
i
]
->
cmd
,
0
);
if
((
pRes1
->
row
>=
pRes1
->
numOfRows
&&
tscHasReachLimitation
(
pQueryInfo1
,
pRes1
)
&&
if
((
pRes1
->
row
>=
pRes1
->
numOfRows
&&
tscHasReachLimitation
(
pQueryInfo1
,
pRes1
)
&&
tscIsProjectionQuery
(
pQueryInfo1
))
||
(
pRes1
->
numOfRows
==
0
))
{
tscIsProjectionQuery
(
pQueryInfo1
))
||
(
pRes1
->
numOfRows
==
0
))
{
...
@@ -3215,7 +3215,7 @@ static UNUSED_FUNC bool tscHasRemainDataInSubqueryResultSet(SSqlObj *pSql) {
...
@@ -3215,7 +3215,7 @@ static UNUSED_FUNC bool tscHasRemainDataInSubqueryResultSet(SSqlObj *pSql) {
return
hasData
;
return
hasData
;
}
}
void
*
createQueryInfoFromQueryNode
(
SQuery
Node
Info
*
pQueryNodeInfo
,
SExprInfo
*
pExprs
,
STableGroupInfo
*
pTableGroupInfo
,
void
*
createQueryInfoFromQueryNode
(
SQueryInfo
*
pQueryNodeInfo
,
SExprInfo
*
pExprs
,
STableGroupInfo
*
pTableGroupInfo
,
uint64_t
*
qId
,
char
*
sql
)
{
uint64_t
*
qId
,
char
*
sql
)
{
assert
(
pQueryNodeInfo
!=
NULL
);
assert
(
pQueryNodeInfo
!=
NULL
);
...
@@ -3366,9 +3366,6 @@ void* createQueryInfoFromQueryNode(SQueryNodeInfo* pQueryNodeInfo, SExprInfo* pE
...
@@ -3366,9 +3366,6 @@ void* createQueryInfoFromQueryNode(SQueryNodeInfo* pQueryNodeInfo, SExprInfo* pE
// qDebug("qmsg:%p QInfo:%" PRIu64 "-%p created", pQueryMsg, pQInfo->qId, pQInfo);
// qDebug("qmsg:%p QInfo:%" PRIu64 "-%p created", pQueryMsg, pQInfo->qId, pQInfo);
// return pQInfo;
// return pQInfo;
// if (pGroupbyExpr != NULL) {
// if (pGroupbyExpr != NULL) {
// taosArrayDestroy(pGroupbyExpr->columnInfo);
// taosArrayDestroy(pGroupbyExpr->columnInfo);
// free(pGroupbyExpr);
// free(pGroupbyExpr);
...
...
src/client/src/tscUtil.c
浏览文件 @
0e0e6d5a
...
@@ -29,8 +29,8 @@
...
@@ -29,8 +29,8 @@
#include "ttimer.h"
#include "ttimer.h"
#include "ttokendef.h"
#include "ttokendef.h"
static
void
freeQueryInfoImpl
(
SQuery
Node
Info
*
pQueryInfo
);
static
void
freeQueryInfoImpl
(
SQueryInfo
*
pQueryInfo
);
static
void
clearAllTableMetaInfo
(
SQuery
Node
Info
*
pQueryInfo
,
bool
removeMeta
);
static
void
clearAllTableMetaInfo
(
SQueryInfo
*
pQueryInfo
,
bool
removeMeta
);
static
void
tscStrToLower
(
char
*
str
,
int32_t
n
)
{
static
void
tscStrToLower
(
char
*
str
,
int32_t
n
)
{
if
(
str
==
NULL
||
n
<=
0
)
{
return
;}
if
(
str
==
NULL
||
n
<=
0
)
{
return
;}
...
@@ -77,7 +77,7 @@ void tsSetSTableQueryCond(STagCond* pTagCond, uint64_t uid, SBufferWriter* bw) {
...
@@ -77,7 +77,7 @@ void tsSetSTableQueryCond(STagCond* pTagCond, uint64_t uid, SBufferWriter* bw) {
taosArrayPush
(
pTagCond
->
pCond
,
&
cond
);
taosArrayPush
(
pTagCond
->
pCond
,
&
cond
);
}
}
bool
tscQueryTags
(
SQuery
Node
Info
*
pQueryInfo
)
{
bool
tscQueryTags
(
SQueryInfo
*
pQueryInfo
)
{
int32_t
numOfCols
=
(
int32_t
)
tscSqlExprNumOfExprs
(
pQueryInfo
);
int32_t
numOfCols
=
(
int32_t
)
tscSqlExprNumOfExprs
(
pQueryInfo
);
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
...
@@ -97,7 +97,7 @@ bool tscQueryTags(SQueryNodeInfo* pQueryInfo) {
...
@@ -97,7 +97,7 @@ bool tscQueryTags(SQueryNodeInfo* pQueryInfo) {
return
true
;
return
true
;
}
}
bool
tscQueryBlockInfo
(
SQuery
Node
Info
*
pQueryInfo
)
{
bool
tscQueryBlockInfo
(
SQueryInfo
*
pQueryInfo
)
{
int32_t
numOfCols
=
(
int32_t
)
tscSqlExprNumOfExprs
(
pQueryInfo
);
int32_t
numOfCols
=
(
int32_t
)
tscSqlExprNumOfExprs
(
pQueryInfo
);
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
...
@@ -113,7 +113,7 @@ bool tscQueryBlockInfo(SQueryNodeInfo* pQueryInfo) {
...
@@ -113,7 +113,7 @@ bool tscQueryBlockInfo(SQueryNodeInfo* pQueryInfo) {
return
false
;
return
false
;
}
}
bool
tscIsTwoStageSTableQuery
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
tableIndex
)
{
bool
tscIsTwoStageSTableQuery
(
SQueryInfo
*
pQueryInfo
,
int32_t
tableIndex
)
{
if
(
pQueryInfo
==
NULL
)
{
if
(
pQueryInfo
==
NULL
)
{
return
false
;
return
false
;
}
}
...
@@ -139,7 +139,7 @@ bool tscIsTwoStageSTableQuery(SQueryNodeInfo* pQueryInfo, int32_t tableIndex) {
...
@@ -139,7 +139,7 @@ bool tscIsTwoStageSTableQuery(SQueryNodeInfo* pQueryInfo, int32_t tableIndex) {
return
false
;
return
false
;
}
}
bool
tscIsProjectionQueryOnSTable
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
tableIndex
)
{
bool
tscIsProjectionQueryOnSTable
(
SQueryInfo
*
pQueryInfo
,
int32_t
tableIndex
)
{
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
tableIndex
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
tableIndex
);
/*
/*
...
@@ -171,7 +171,7 @@ bool tscIsProjectionQueryOnSTable(SQueryNodeInfo* pQueryInfo, int32_t tableIndex
...
@@ -171,7 +171,7 @@ bool tscIsProjectionQueryOnSTable(SQueryNodeInfo* pQueryInfo, int32_t tableIndex
}
}
// not order by timestamp projection query on super table
// not order by timestamp projection query on super table
bool
tscNonOrderedProjectionQueryOnSTable
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
tableIndex
)
{
bool
tscNonOrderedProjectionQueryOnSTable
(
SQueryInfo
*
pQueryInfo
,
int32_t
tableIndex
)
{
if
(
!
tscIsProjectionQueryOnSTable
(
pQueryInfo
,
tableIndex
))
{
if
(
!
tscIsProjectionQueryOnSTable
(
pQueryInfo
,
tableIndex
))
{
return
false
;
return
false
;
}
}
...
@@ -180,7 +180,7 @@ bool tscNonOrderedProjectionQueryOnSTable(SQueryNodeInfo* pQueryInfo, int32_t ta
...
@@ -180,7 +180,7 @@ bool tscNonOrderedProjectionQueryOnSTable(SQueryNodeInfo* pQueryInfo, int32_t ta
return
pQueryInfo
->
order
.
orderColId
<
0
;
return
pQueryInfo
->
order
.
orderColId
<
0
;
}
}
bool
tscOrderedProjectionQueryOnSTable
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
tableIndex
)
{
bool
tscOrderedProjectionQueryOnSTable
(
SQueryInfo
*
pQueryInfo
,
int32_t
tableIndex
)
{
if
(
!
tscIsProjectionQueryOnSTable
(
pQueryInfo
,
tableIndex
))
{
if
(
!
tscIsProjectionQueryOnSTable
(
pQueryInfo
,
tableIndex
))
{
return
false
;
return
false
;
}
}
...
@@ -189,7 +189,7 @@ bool tscOrderedProjectionQueryOnSTable(SQueryNodeInfo* pQueryInfo, int32_t table
...
@@ -189,7 +189,7 @@ bool tscOrderedProjectionQueryOnSTable(SQueryNodeInfo* pQueryInfo, int32_t table
return
pQueryInfo
->
order
.
orderColId
>=
0
;
return
pQueryInfo
->
order
.
orderColId
>=
0
;
}
}
bool
tscIsProjectionQuery
(
SQuery
Node
Info
*
pQueryInfo
)
{
bool
tscIsProjectionQuery
(
SQueryInfo
*
pQueryInfo
)
{
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
...
@@ -204,7 +204,7 @@ bool tscIsProjectionQuery(SQueryNodeInfo* pQueryInfo) {
...
@@ -204,7 +204,7 @@ bool tscIsProjectionQuery(SQueryNodeInfo* pQueryInfo) {
return
true
;
return
true
;
}
}
bool
tscIsPointInterpQuery
(
SQuery
Node
Info
*
pQueryInfo
)
{
bool
tscIsPointInterpQuery
(
SQueryInfo
*
pQueryInfo
)
{
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
size_t
size
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
i
);
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
i
);
...
@@ -223,7 +223,7 @@ bool tscIsPointInterpQuery(SQueryNodeInfo* pQueryInfo) {
...
@@ -223,7 +223,7 @@ bool tscIsPointInterpQuery(SQueryNodeInfo* pQueryInfo) {
return
true
;
return
true
;
}
}
bool
tscIsSecondStageQuery
(
SQuery
Node
Info
*
pQueryInfo
)
{
bool
tscIsSecondStageQuery
(
SQueryInfo
*
pQueryInfo
)
{
if
(
tscIsProjectionQuery
(
pQueryInfo
))
{
if
(
tscIsProjectionQuery
(
pQueryInfo
))
{
return
false
;
return
false
;
}
}
...
@@ -239,7 +239,7 @@ bool tscIsSecondStageQuery(SQueryNodeInfo* pQueryInfo) {
...
@@ -239,7 +239,7 @@ bool tscIsSecondStageQuery(SQueryNodeInfo* pQueryInfo) {
return
false
;
return
false
;
}
}
bool
tscGroupbyColumn
(
SQuery
Node
Info
*
pQueryInfo
)
{
bool
tscGroupbyColumn
(
SQueryInfo
*
pQueryInfo
)
{
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
int32_t
numOfCols
=
tscGetNumOfColumns
(
pTableMetaInfo
->
pTableMeta
);
int32_t
numOfCols
=
tscGetNumOfColumns
(
pTableMetaInfo
->
pTableMeta
);
...
@@ -254,7 +254,7 @@ bool tscGroupbyColumn(SQueryNodeInfo* pQueryInfo) {
...
@@ -254,7 +254,7 @@ bool tscGroupbyColumn(SQueryNodeInfo* pQueryInfo) {
return
false
;
return
false
;
}
}
bool
tscIsTopBotQuery
(
SQuery
Node
Info
*
pQueryInfo
)
{
bool
tscIsTopBotQuery
(
SQueryInfo
*
pQueryInfo
)
{
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
for
(
int32_t
i
=
0
;
i
<
numOfExprs
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfExprs
;
++
i
)
{
...
@@ -275,9 +275,9 @@ bool tscIsTopBotQuery(SQueryNodeInfo* pQueryInfo) {
...
@@ -275,9 +275,9 @@ bool tscIsTopBotQuery(SQueryNodeInfo* pQueryInfo) {
return
false
;
return
false
;
}
}
bool
isTsCompQuery
(
SQuery
NodeInfo
*
pQueryNode
Info
)
{
bool
isTsCompQuery
(
SQuery
Info
*
pQuery
Info
)
{
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQuery
Node
Info
);
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
SExprInfo
*
pExpr1
=
tscSqlExprGet
(
pQuery
Node
Info
,
0
);
SExprInfo
*
pExpr1
=
tscSqlExprGet
(
pQueryInfo
,
0
);
if
(
numOfExprs
!=
1
)
{
if
(
numOfExprs
!=
1
)
{
return
false
;
return
false
;
}
}
...
@@ -285,16 +285,16 @@ bool isTsCompQuery(SQueryNodeInfo* pQueryNodeInfo) {
...
@@ -285,16 +285,16 @@ bool isTsCompQuery(SQueryNodeInfo* pQueryNodeInfo) {
return
pExpr1
->
base
.
functionId
==
TSDB_FUNC_TS_COMP
;
return
pExpr1
->
base
.
functionId
==
TSDB_FUNC_TS_COMP
;
}
}
bool
hasTagValOutput
(
SQuery
NodeInfo
*
pQueryNode
Info
)
{
bool
hasTagValOutput
(
SQuery
Info
*
pQuery
Info
)
{
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQuery
Node
Info
);
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
SExprInfo
*
pExpr1
=
tscSqlExprGet
(
pQuery
Node
Info
,
0
);
SExprInfo
*
pExpr1
=
tscSqlExprGet
(
pQueryInfo
,
0
);
if
(
numOfExprs
==
1
&&
pExpr1
->
base
.
functionId
==
TSDB_FUNC_TS_COMP
)
{
if
(
numOfExprs
==
1
&&
pExpr1
->
base
.
functionId
==
TSDB_FUNC_TS_COMP
)
{
return
true
;
return
true
;
}
}
for
(
int32_t
i
=
0
;
i
<
numOfExprs
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfExprs
;
++
i
)
{
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQuery
Node
Info
,
i
);
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
i
);
if
(
pExpr
==
NULL
)
{
if
(
pExpr
==
NULL
)
{
continue
;
continue
;
}
}
...
@@ -308,10 +308,10 @@ bool hasTagValOutput(SQueryNodeInfo* pQueryNodeInfo) {
...
@@ -308,10 +308,10 @@ bool hasTagValOutput(SQueryNodeInfo* pQueryNodeInfo) {
return
false
;
return
false
;
}
}
bool
timeWindowInterpoRequired
(
SQuery
NodeInfo
*
pQueryNode
Info
)
{
bool
timeWindowInterpoRequired
(
SQuery
Info
*
pQuery
Info
)
{
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQuery
Node
Info
);
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
for
(
int32_t
i
=
0
;
i
<
numOfExprs
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfExprs
;
++
i
)
{
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQuery
Node
Info
,
i
);
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
i
);
if
(
pExpr
==
NULL
)
{
if
(
pExpr
==
NULL
)
{
continue
;
continue
;
}
}
...
@@ -325,10 +325,10 @@ bool timeWindowInterpoRequired(SQueryNodeInfo *pQueryNodeInfo) {
...
@@ -325,10 +325,10 @@ bool timeWindowInterpoRequired(SQueryNodeInfo *pQueryNodeInfo) {
return
false
;
return
false
;
}
}
bool
isStabledev
(
SQuery
NodeInfo
*
pQueryNode
Info
)
{
bool
isStabledev
(
SQuery
Info
*
pQuery
Info
)
{
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQuery
Node
Info
);
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
for
(
int32_t
i
=
0
;
i
<
numOfExprs
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfExprs
;
++
i
)
{
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQuery
Node
Info
,
i
);
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
i
);
if
(
pExpr
==
NULL
)
{
if
(
pExpr
==
NULL
)
{
continue
;
continue
;
}
}
...
@@ -342,7 +342,7 @@ bool isStabledev(SQueryNodeInfo* pQueryNodeInfo) {
...
@@ -342,7 +342,7 @@ bool isStabledev(SQueryNodeInfo* pQueryNodeInfo) {
return
false
;
return
false
;
}
}
bool
tscIsTWAQuery
(
SQuery
Node
Info
*
pQueryInfo
)
{
bool
tscIsTWAQuery
(
SQueryInfo
*
pQueryInfo
)
{
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
for
(
int32_t
i
=
0
;
i
<
numOfExprs
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfExprs
;
++
i
)
{
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
i
);
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
i
);
...
@@ -358,7 +358,7 @@ bool tscIsTWAQuery(SQueryNodeInfo* pQueryInfo) {
...
@@ -358,7 +358,7 @@ bool tscIsTWAQuery(SQueryNodeInfo* pQueryInfo) {
return
false
;
return
false
;
}
}
bool
tscNeedReverseScan
(
SQuery
Node
Info
*
pQueryInfo
)
{
bool
tscNeedReverseScan
(
SQueryInfo
*
pQueryInfo
)
{
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
for
(
int32_t
i
=
0
;
i
<
numOfExprs
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfExprs
;
++
i
)
{
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
i
);
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
i
);
...
@@ -387,19 +387,19 @@ bool tscNeedReverseScan(SQueryNodeInfo* pQueryInfo) {
...
@@ -387,19 +387,19 @@ bool tscNeedReverseScan(SQueryNodeInfo* pQueryInfo) {
return
false
;
return
false
;
}
}
bool
isSimpleAggregate
(
SQuery
NodeInfo
*
pQueryNode
Info
)
{
bool
isSimpleAggregate
(
SQuery
Info
*
pQuery
Info
)
{
if
(
pQuery
Node
Info
->
interval
.
interval
>
0
)
{
if
(
pQueryInfo
->
interval
.
interval
>
0
)
{
return
false
;
return
false
;
}
}
// Note:top/bottom query is fixed output query
// Note:top/bottom query is fixed output query
if
(
tscIsTopBotQuery
(
pQuery
NodeInfo
)
||
tscGroupbyColumn
(
pQueryNodeInfo
)
||
isTsCompQuery
(
pQueryNode
Info
))
{
if
(
tscIsTopBotQuery
(
pQuery
Info
)
||
tscGroupbyColumn
(
pQueryInfo
)
||
isTsCompQuery
(
pQuery
Info
))
{
return
true
;
return
true
;
}
}
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQuery
Node
Info
);
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
for
(
int32_t
i
=
0
;
i
<
numOfExprs
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfExprs
;
++
i
)
{
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQuery
Node
Info
,
i
);
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
i
);
if
(
pExpr
==
NULL
)
{
if
(
pExpr
==
NULL
)
{
continue
;
continue
;
}
}
...
@@ -417,7 +417,13 @@ bool isSimpleAggregate(SQueryNodeInfo* pQueryNodeInfo) {
...
@@ -417,7 +417,13 @@ bool isSimpleAggregate(SQueryNodeInfo* pQueryNodeInfo) {
return
false
;
return
false
;
}
}
void
tscClearInterpInfo
(
SQueryNodeInfo
*
pQueryInfo
)
{
bool
isBlockDistQuery
(
SQueryInfo
*
pQueryInfo
)
{
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
0
);
return
(
numOfExprs
==
1
&&
pExpr
->
base
.
colInfo
.
colId
==
TSDB_BLOCK_DIST_COLUMN_INDEX
);
}
void
tscClearInterpInfo
(
SQueryInfo
*
pQueryInfo
)
{
if
(
!
tscIsPointInterpQuery
(
pQueryInfo
))
{
if
(
!
tscIsPointInterpQuery
(
pQueryInfo
))
{
return
;
return
;
}
}
...
@@ -426,7 +432,7 @@ void tscClearInterpInfo(SQueryNodeInfo* pQueryInfo) {
...
@@ -426,7 +432,7 @@ void tscClearInterpInfo(SQueryNodeInfo* pQueryInfo) {
tfree
(
pQueryInfo
->
fillVal
);
tfree
(
pQueryInfo
->
fillVal
);
}
}
int32_t
tscCreateResPointerInfo
(
SSqlRes
*
pRes
,
SQuery
Node
Info
*
pQueryInfo
)
{
int32_t
tscCreateResPointerInfo
(
SSqlRes
*
pRes
,
SQueryInfo
*
pQueryInfo
)
{
if
(
pRes
->
tsrow
==
NULL
)
{
if
(
pRes
->
tsrow
==
NULL
)
{
pRes
->
numOfCols
=
pQueryInfo
->
fieldsInfo
.
numOfOutput
;
pRes
->
numOfCols
=
pQueryInfo
->
fieldsInfo
.
numOfOutput
;
...
@@ -450,7 +456,7 @@ int32_t tscCreateResPointerInfo(SSqlRes* pRes, SQueryNodeInfo* pQueryInfo) {
...
@@ -450,7 +456,7 @@ int32_t tscCreateResPointerInfo(SSqlRes* pRes, SQueryNodeInfo* pQueryInfo) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
void
tscSetResRawPtr
(
SSqlRes
*
pRes
,
SQuery
Node
Info
*
pQueryInfo
)
{
void
tscSetResRawPtr
(
SSqlRes
*
pRes
,
SQueryInfo
*
pQueryInfo
)
{
assert
(
pRes
->
numOfCols
>
0
);
assert
(
pRes
->
numOfCols
>
0
);
int32_t
offset
=
0
;
int32_t
offset
=
0
;
...
@@ -534,10 +540,10 @@ static SColumnInfo* extractColumnInfoFromResult(STableMeta* pTableMeta, SArray*
...
@@ -534,10 +540,10 @@ static SColumnInfo* extractColumnInfoFromResult(STableMeta* pTableMeta, SArray*
return
pColInfo
;
return
pColInfo
;
}
}
void
prepareInputDataFromUpstream
(
SSqlRes
*
pRes
,
SQuery
Node
Info
*
pQueryInfo
)
{
void
prepareInputDataFromUpstream
(
SSqlRes
*
pRes
,
SQueryInfo
*
pQueryInfo
)
{
if
(
pQueryInfo
->
pDownstream
!=
NULL
&&
taosArrayGetSize
(
pQueryInfo
->
pDownstream
)
>
0
)
{
if
(
pQueryInfo
->
pDownstream
!=
NULL
&&
taosArrayGetSize
(
pQueryInfo
->
pDownstream
)
>
0
)
{
// handle the following query process
// handle the following query process
SQuery
Node
Info
*
px
=
taosArrayGetP
(
pQueryInfo
->
pDownstream
,
0
);
SQueryInfo
*
px
=
taosArrayGetP
(
pQueryInfo
->
pDownstream
,
0
);
printf
(
"%d
\n
"
,
px
->
type
);
printf
(
"%d
\n
"
,
px
->
type
);
SColumnInfo
*
colInfo
=
extractColumnInfoFromResult
(
px
->
pTableMetaInfo
[
0
]
->
pTableMeta
,
px
->
colList
);
SColumnInfo
*
colInfo
=
extractColumnInfoFromResult
(
px
->
pTableMetaInfo
[
0
]
->
pTableMeta
,
px
->
colList
);
...
@@ -600,7 +606,7 @@ void tscFreeQueryInfo(SSqlCmd* pCmd, bool removeMeta) {
...
@@ -600,7 +606,7 @@ void tscFreeQueryInfo(SSqlCmd* pCmd, bool removeMeta) {
}
}
for
(
int32_t
i
=
0
;
i
<
pCmd
->
numOfClause
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pCmd
->
numOfClause
;
++
i
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
i
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
i
);
freeQueryInfoImpl
(
pQueryInfo
);
freeQueryInfoImpl
(
pQueryInfo
);
clearAllTableMetaInfo
(
pQueryInfo
,
removeMeta
);
clearAllTableMetaInfo
(
pQueryInfo
,
removeMeta
);
...
@@ -865,7 +871,7 @@ int32_t tscCopyDataBlockToPayload(SSqlObj* pSql, STableDataBlocks* pDataBlock) {
...
@@ -865,7 +871,7 @@ int32_t tscCopyDataBlockToPayload(SSqlObj* pSql, STableDataBlocks* pDataBlock) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
SQuery
Node
Info
*
tscGetActiveQueryInfo
(
SSqlCmd
*
pCmd
)
{
SQueryInfo
*
tscGetActiveQueryInfo
(
SSqlCmd
*
pCmd
)
{
return
pCmd
->
active
;
return
pCmd
->
active
;
}
}
...
@@ -1197,7 +1203,7 @@ SInternalField* tscFieldInfoInsert(SFieldInfo* pFieldInfo, int32_t index, TAOS_F
...
@@ -1197,7 +1203,7 @@ SInternalField* tscFieldInfoInsert(SFieldInfo* pFieldInfo, int32_t index, TAOS_F
return
taosArrayInsert
(
pFieldInfo
->
internalField
,
index
,
&
info
);
return
taosArrayInsert
(
pFieldInfo
->
internalField
,
index
,
&
info
);
}
}
void
tscFieldInfoUpdateOffset
(
SQuery
Node
Info
*
pQueryInfo
)
{
void
tscFieldInfoUpdateOffset
(
SQueryInfo
*
pQueryInfo
)
{
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
SExprInfo
*
pExpr
=
taosArrayGetP
(
pQueryInfo
->
exprList
,
0
);
SExprInfo
*
pExpr
=
taosArrayGetP
(
pQueryInfo
->
exprList
,
0
);
...
@@ -1221,7 +1227,7 @@ TAOS_FIELD* tscFieldInfoGetField(SFieldInfo* pFieldInfo, int32_t index) {
...
@@ -1221,7 +1227,7 @@ TAOS_FIELD* tscFieldInfoGetField(SFieldInfo* pFieldInfo, int32_t index) {
return
&
((
SInternalField
*
)
TARRAY_GET_ELEM
(
pFieldInfo
->
internalField
,
index
))
->
field
;
return
&
((
SInternalField
*
)
TARRAY_GET_ELEM
(
pFieldInfo
->
internalField
,
index
))
->
field
;
}
}
int16_t
tscFieldInfoGetOffset
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
index
)
{
int16_t
tscFieldInfoGetOffset
(
SQueryInfo
*
pQueryInfo
,
int32_t
index
)
{
SInternalField
*
pInfo
=
tscFieldInfoGetInternalField
(
&
pQueryInfo
->
fieldsInfo
,
index
);
SInternalField
*
pInfo
=
tscFieldInfoGetInternalField
(
&
pQueryInfo
->
fieldsInfo
,
index
);
assert
(
pInfo
!=
NULL
&&
pInfo
->
pExpr
->
pExpr
==
NULL
);
assert
(
pInfo
!=
NULL
&&
pInfo
->
pExpr
->
pExpr
==
NULL
);
...
@@ -1290,7 +1296,7 @@ void tscFieldInfoClear(SFieldInfo* pFieldInfo) {
...
@@ -1290,7 +1296,7 @@ void tscFieldInfoClear(SFieldInfo* pFieldInfo) {
memset
(
pFieldInfo
,
0
,
sizeof
(
SFieldInfo
));
memset
(
pFieldInfo
,
0
,
sizeof
(
SFieldInfo
));
}
}
static
SExprInfo
*
doCreateSqlExpr
(
SQuery
Node
Info
*
pQueryInfo
,
int16_t
functionId
,
SColumnIndex
*
pColIndex
,
int16_t
type
,
static
SExprInfo
*
doCreateSqlExpr
(
SQueryInfo
*
pQueryInfo
,
int16_t
functionId
,
SColumnIndex
*
pColIndex
,
int16_t
type
,
int16_t
size
,
int16_t
resColId
,
int16_t
interSize
,
int32_t
colType
)
{
int16_t
size
,
int16_t
resColId
,
int16_t
interSize
,
int32_t
colType
)
{
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
pColIndex
->
tableIndex
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
pColIndex
->
tableIndex
);
...
@@ -1350,7 +1356,7 @@ static SExprInfo* doCreateSqlExpr(SQueryNodeInfo* pQueryInfo, int16_t functionId
...
@@ -1350,7 +1356,7 @@ static SExprInfo* doCreateSqlExpr(SQueryNodeInfo* pQueryInfo, int16_t functionId
return
pExpr
;
return
pExpr
;
}
}
SExprInfo
*
tscSqlExprInsert
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
index
,
int16_t
functionId
,
SColumnIndex
*
pColIndex
,
int16_t
type
,
SExprInfo
*
tscSqlExprInsert
(
SQueryInfo
*
pQueryInfo
,
int32_t
index
,
int16_t
functionId
,
SColumnIndex
*
pColIndex
,
int16_t
type
,
int16_t
size
,
int16_t
resColId
,
int16_t
interSize
,
bool
isTagCol
)
{
int16_t
size
,
int16_t
resColId
,
int16_t
interSize
,
bool
isTagCol
)
{
int32_t
num
=
(
int32_t
)
taosArrayGetSize
(
pQueryInfo
->
exprList
);
int32_t
num
=
(
int32_t
)
taosArrayGetSize
(
pQueryInfo
->
exprList
);
if
(
index
==
num
)
{
if
(
index
==
num
)
{
...
@@ -1362,14 +1368,14 @@ SExprInfo* tscSqlExprInsert(SQueryNodeInfo* pQueryInfo, int32_t index, int16_t f
...
@@ -1362,14 +1368,14 @@ SExprInfo* tscSqlExprInsert(SQueryNodeInfo* pQueryInfo, int32_t index, int16_t f
return
pExpr
;
return
pExpr
;
}
}
SExprInfo
*
tscSqlExprAppend
(
SQuery
Node
Info
*
pQueryInfo
,
int16_t
functionId
,
SColumnIndex
*
pColIndex
,
int16_t
type
,
SExprInfo
*
tscSqlExprAppend
(
SQueryInfo
*
pQueryInfo
,
int16_t
functionId
,
SColumnIndex
*
pColIndex
,
int16_t
type
,
int16_t
size
,
int16_t
resColId
,
int16_t
interSize
,
bool
isTagCol
)
{
int16_t
size
,
int16_t
resColId
,
int16_t
interSize
,
bool
isTagCol
)
{
SExprInfo
*
pExpr
=
doCreateSqlExpr
(
pQueryInfo
,
functionId
,
pColIndex
,
type
,
size
,
resColId
,
interSize
,
isTagCol
);
SExprInfo
*
pExpr
=
doCreateSqlExpr
(
pQueryInfo
,
functionId
,
pColIndex
,
type
,
size
,
resColId
,
interSize
,
isTagCol
);
taosArrayPush
(
pQueryInfo
->
exprList
,
&
pExpr
);
taosArrayPush
(
pQueryInfo
->
exprList
,
&
pExpr
);
return
pExpr
;
return
pExpr
;
}
}
SExprInfo
*
tscSqlExprUpdate
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
index
,
int16_t
functionId
,
int16_t
srcColumnIndex
,
SExprInfo
*
tscSqlExprUpdate
(
SQueryInfo
*
pQueryInfo
,
int32_t
index
,
int16_t
functionId
,
int16_t
srcColumnIndex
,
int16_t
type
,
int16_t
size
)
{
int16_t
type
,
int16_t
size
)
{
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
index
);
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
index
);
...
@@ -1389,7 +1395,7 @@ SExprInfo* tscSqlExprUpdate(SQueryNodeInfo* pQueryInfo, int32_t index, int16_t f
...
@@ -1389,7 +1395,7 @@ SExprInfo* tscSqlExprUpdate(SQueryNodeInfo* pQueryInfo, int32_t index, int16_t f
return
pExpr
;
return
pExpr
;
}
}
bool
tscMultiRoundQuery
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
index
)
{
bool
tscMultiRoundQuery
(
SQueryInfo
*
pQueryInfo
,
int32_t
index
)
{
if
(
!
UTIL_TABLE_IS_SUPER_TABLE
(
pQueryInfo
->
pTableMetaInfo
[
index
]))
{
if
(
!
UTIL_TABLE_IS_SUPER_TABLE
(
pQueryInfo
->
pTableMetaInfo
[
index
]))
{
return
false
;
return
false
;
}
}
...
@@ -1405,7 +1411,7 @@ bool tscMultiRoundQuery(SQueryNodeInfo* pQueryInfo, int32_t index) {
...
@@ -1405,7 +1411,7 @@ bool tscMultiRoundQuery(SQueryNodeInfo* pQueryInfo, int32_t index) {
return
false
;
return
false
;
}
}
size_t
tscSqlExprNumOfExprs
(
SQuery
Node
Info
*
pQueryInfo
)
{
size_t
tscSqlExprNumOfExprs
(
SQueryInfo
*
pQueryInfo
)
{
return
taosArrayGetSize
(
pQueryInfo
->
exprList
);
return
taosArrayGetSize
(
pQueryInfo
->
exprList
);
}
}
...
@@ -1420,7 +1426,7 @@ void addExprParams(SSqlExpr* pExpr, char* argument, int32_t type, int32_t bytes)
...
@@ -1420,7 +1426,7 @@ void addExprParams(SSqlExpr* pExpr, char* argument, int32_t type, int32_t bytes)
assert
(
pExpr
->
numOfParams
<=
3
);
assert
(
pExpr
->
numOfParams
<=
3
);
}
}
SExprInfo
*
tscSqlExprGet
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
index
)
{
SExprInfo
*
tscSqlExprGet
(
SQueryInfo
*
pQueryInfo
,
int32_t
index
)
{
return
taosArrayGetP
(
pQueryInfo
->
exprList
,
index
);
return
taosArrayGetP
(
pQueryInfo
->
exprList
,
index
);
}
}
...
@@ -1563,7 +1569,9 @@ SColumn* tscColumnClone(const SColumn* src) {
...
@@ -1563,7 +1569,9 @@ SColumn* tscColumnClone(const SColumn* src) {
dst
->
colIndex
=
src
->
colIndex
;
dst
->
colIndex
=
src
->
colIndex
;
dst
->
info
.
numOfFilters
=
src
->
info
.
numOfFilters
;
dst
->
info
.
numOfFilters
=
src
->
info
.
numOfFilters
;
dst
->
info
.
filterInfo
=
tFilterInfoDup
(
src
->
info
.
filterInfo
,
src
->
info
.
numOfFilters
);
dst
->
info
.
filterInfo
=
tFilterInfoDup
(
src
->
info
.
filterInfo
,
src
->
info
.
numOfFilters
);
dst
->
info
.
type
=
src
->
info
.
type
;
dst
->
info
.
colId
=
src
->
info
.
colId
;
dst
->
info
.
bytes
=
src
->
info
.
bytes
;
return
dst
;
return
dst
;
}
}
...
@@ -1849,7 +1857,7 @@ void tscTagCondRelease(STagCond* pTagCond) {
...
@@ -1849,7 +1857,7 @@ void tscTagCondRelease(STagCond* pTagCond) {
memset
(
pTagCond
,
0
,
sizeof
(
STagCond
));
memset
(
pTagCond
,
0
,
sizeof
(
STagCond
));
}
}
void
tscGetSrcColumnInfo
(
SSrcColumnInfo
*
pColInfo
,
SQuery
Node
Info
*
pQueryInfo
)
{
void
tscGetSrcColumnInfo
(
SSrcColumnInfo
*
pColInfo
,
SQueryInfo
*
pQueryInfo
)
{
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
SSchema
*
pSchema
=
tscGetTableSchema
(
pTableMetaInfo
->
pTableMeta
);
SSchema
*
pSchema
=
tscGetTableSchema
(
pTableMetaInfo
->
pTableMeta
);
...
@@ -1914,11 +1922,11 @@ STableMetaInfo* tscGetTableMetaInfoFromCmd(SSqlCmd* pCmd, int32_t clauseIndex, i
...
@@ -1914,11 +1922,11 @@ STableMetaInfo* tscGetTableMetaInfoFromCmd(SSqlCmd* pCmd, int32_t clauseIndex, i
assert
(
clauseIndex
>=
0
&&
clauseIndex
<
pCmd
->
numOfClause
);
assert
(
clauseIndex
>=
0
&&
clauseIndex
<
pCmd
->
numOfClause
);
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
clauseIndex
);
return
tscGetMetaInfo
(
pQueryInfo
,
tableIndex
);
return
tscGetMetaInfo
(
pQueryInfo
,
tableIndex
);
}
}
STableMetaInfo
*
tscGetMetaInfo
(
SQuery
Node
Info
*
pQueryInfo
,
int32_t
tableIndex
)
{
STableMetaInfo
*
tscGetMetaInfo
(
SQueryInfo
*
pQueryInfo
,
int32_t
tableIndex
)
{
assert
(
pQueryInfo
!=
NULL
);
assert
(
pQueryInfo
!=
NULL
);
if
(
pQueryInfo
->
pTableMetaInfo
==
NULL
)
{
if
(
pQueryInfo
->
pTableMetaInfo
==
NULL
)
{
...
@@ -1931,8 +1939,8 @@ STableMetaInfo* tscGetMetaInfo(SQueryNodeInfo* pQueryInfo, int32_t tableIndex) {
...
@@ -1931,8 +1939,8 @@ STableMetaInfo* tscGetMetaInfo(SQueryNodeInfo* pQueryInfo, int32_t tableIndex) {
return
pQueryInfo
->
pTableMetaInfo
[
tableIndex
];
return
pQueryInfo
->
pTableMetaInfo
[
tableIndex
];
}
}
SQuery
Node
Info
*
tscGetQueryInfoS
(
SSqlCmd
*
pCmd
,
int32_t
subClauseIndex
)
{
SQueryInfo
*
tscGetQueryInfoS
(
SSqlCmd
*
pCmd
,
int32_t
subClauseIndex
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
subClauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
subClauseIndex
);
int32_t
ret
=
TSDB_CODE_SUCCESS
;
int32_t
ret
=
TSDB_CODE_SUCCESS
;
while
((
pQueryInfo
)
==
NULL
)
{
while
((
pQueryInfo
)
==
NULL
)
{
...
@@ -1947,7 +1955,7 @@ SQueryNodeInfo* tscGetQueryInfoS(SSqlCmd* pCmd, int32_t subClauseIndex) {
...
@@ -1947,7 +1955,7 @@ SQueryNodeInfo* tscGetQueryInfoS(SSqlCmd* pCmd, int32_t subClauseIndex) {
return
pQueryInfo
;
return
pQueryInfo
;
}
}
STableMetaInfo
*
tscGetTableMetaInfoByUid
(
SQuery
Node
Info
*
pQueryInfo
,
uint64_t
uid
,
int32_t
*
index
)
{
STableMetaInfo
*
tscGetTableMetaInfoByUid
(
SQueryInfo
*
pQueryInfo
,
uint64_t
uid
,
int32_t
*
index
)
{
int32_t
k
=
-
1
;
int32_t
k
=
-
1
;
for
(
int32_t
i
=
0
;
i
<
pQueryInfo
->
numOfTables
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pQueryInfo
->
numOfTables
;
++
i
)
{
...
@@ -1965,7 +1973,7 @@ STableMetaInfo* tscGetTableMetaInfoByUid(SQueryNodeInfo* pQueryInfo, uint64_t ui
...
@@ -1965,7 +1973,7 @@ STableMetaInfo* tscGetTableMetaInfoByUid(SQueryNodeInfo* pQueryInfo, uint64_t ui
return
tscGetMetaInfo
(
pQueryInfo
,
k
);
return
tscGetMetaInfo
(
pQueryInfo
,
k
);
}
}
void
tscInitQueryInfo
(
SQuery
Node
Info
*
pQueryInfo
)
{
void
tscInitQueryInfo
(
SQueryInfo
*
pQueryInfo
)
{
assert
(
pQueryInfo
->
fieldsInfo
.
internalField
==
NULL
);
assert
(
pQueryInfo
->
fieldsInfo
.
internalField
==
NULL
);
pQueryInfo
->
fieldsInfo
.
internalField
=
taosArrayInit
(
4
,
sizeof
(
SInternalField
));
pQueryInfo
->
fieldsInfo
.
internalField
=
taosArrayInit
(
4
,
sizeof
(
SInternalField
));
...
@@ -1994,9 +2002,9 @@ int32_t tscAddQueryInfo(SSqlCmd* pCmd) {
...
@@ -1994,9 +2002,9 @@ int32_t tscAddQueryInfo(SSqlCmd* pCmd) {
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
}
pCmd
->
pQueryInfo
=
(
SQuery
Node
Info
**
)
tmp
;
pCmd
->
pQueryInfo
=
(
SQueryInfo
**
)
tmp
;
SQuery
NodeInfo
*
pQueryInfo
=
calloc
(
1
,
sizeof
(
SQueryNode
Info
));
SQuery
Info
*
pQueryInfo
=
calloc
(
1
,
sizeof
(
SQuery
Info
));
if
(
pQueryInfo
==
NULL
)
{
if
(
pQueryInfo
==
NULL
)
{
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
}
...
@@ -2010,7 +2018,7 @@ int32_t tscAddQueryInfo(SSqlCmd* pCmd) {
...
@@ -2010,7 +2018,7 @@ int32_t tscAddQueryInfo(SSqlCmd* pCmd) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
void
freeQueryInfoImpl
(
SQuery
Node
Info
*
pQueryInfo
)
{
static
void
freeQueryInfoImpl
(
SQueryInfo
*
pQueryInfo
)
{
tscTagCondRelease
(
&
pQueryInfo
->
tagCond
);
tscTagCondRelease
(
&
pQueryInfo
->
tagCond
);
tscFieldInfoClear
(
&
pQueryInfo
->
fieldsInfo
);
tscFieldInfoClear
(
&
pQueryInfo
->
fieldsInfo
);
...
@@ -2034,7 +2042,7 @@ static void freeQueryInfoImpl(SQueryNodeInfo* pQueryInfo) {
...
@@ -2034,7 +2042,7 @@ static void freeQueryInfoImpl(SQueryNodeInfo* pQueryInfo) {
void
tscClearSubqueryInfo
(
SSqlCmd
*
pCmd
)
{
void
tscClearSubqueryInfo
(
SSqlCmd
*
pCmd
)
{
for
(
int32_t
i
=
0
;
i
<
pCmd
->
numOfClause
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pCmd
->
numOfClause
;
++
i
)
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
i
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
i
);
freeQueryInfoImpl
(
pQueryInfo
);
freeQueryInfoImpl
(
pQueryInfo
);
}
}
}
}
...
@@ -2103,7 +2111,7 @@ SArray* tscVgroupTableInfoDup(SArray* pVgroupTables) {
...
@@ -2103,7 +2111,7 @@ SArray* tscVgroupTableInfoDup(SArray* pVgroupTables) {
return
pa
;
return
pa
;
}
}
void
clearAllTableMetaInfo
(
SQuery
Node
Info
*
pQueryInfo
,
bool
removeMeta
)
{
void
clearAllTableMetaInfo
(
SQueryInfo
*
pQueryInfo
,
bool
removeMeta
)
{
for
(
int32_t
i
=
0
;
i
<
pQueryInfo
->
numOfTables
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pQueryInfo
->
numOfTables
;
++
i
)
{
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
i
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
i
);
...
@@ -2122,7 +2130,7 @@ void clearAllTableMetaInfo(SQueryNodeInfo* pQueryInfo, bool removeMeta) {
...
@@ -2122,7 +2130,7 @@ void clearAllTableMetaInfo(SQueryNodeInfo* pQueryInfo, bool removeMeta) {
tfree
(
pQueryInfo
->
pTableMetaInfo
);
tfree
(
pQueryInfo
->
pTableMetaInfo
);
}
}
STableMetaInfo
*
tscAddTableMetaInfo
(
SQuery
Node
Info
*
pQueryInfo
,
SName
*
name
,
STableMeta
*
pTableMeta
,
STableMetaInfo
*
tscAddTableMetaInfo
(
SQueryInfo
*
pQueryInfo
,
SName
*
name
,
STableMeta
*
pTableMeta
,
SVgroupsInfo
*
vgroupList
,
SArray
*
pTagCols
,
SArray
*
pVgroupTables
)
{
SVgroupsInfo
*
vgroupList
,
SArray
*
pTagCols
,
SArray
*
pVgroupTables
)
{
void
*
pAlloc
=
realloc
(
pQueryInfo
->
pTableMetaInfo
,
(
pQueryInfo
->
numOfTables
+
1
)
*
POINTER_BYTES
);
void
*
pAlloc
=
realloc
(
pQueryInfo
->
pTableMetaInfo
,
(
pQueryInfo
->
numOfTables
+
1
)
*
POINTER_BYTES
);
if
(
pAlloc
==
NULL
)
{
if
(
pAlloc
==
NULL
)
{
...
@@ -2165,7 +2173,7 @@ STableMetaInfo* tscAddTableMetaInfo(SQueryNodeInfo* pQueryInfo, SName* name, STa
...
@@ -2165,7 +2173,7 @@ STableMetaInfo* tscAddTableMetaInfo(SQueryNodeInfo* pQueryInfo, SName* name, STa
return
pTableMetaInfo
;
return
pTableMetaInfo
;
}
}
STableMetaInfo
*
tscAddEmptyMetaInfo
(
SQuery
Node
Info
*
pQueryInfo
)
{
STableMetaInfo
*
tscAddEmptyMetaInfo
(
SQueryInfo
*
pQueryInfo
)
{
return
tscAddTableMetaInfo
(
pQueryInfo
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
);
return
tscAddTableMetaInfo
(
pQueryInfo
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
);
}
}
...
@@ -2236,7 +2244,7 @@ SSqlObj* createSimpleSubObj(SSqlObj* pSql, __async_cb_func_t fp, void* param, in
...
@@ -2236,7 +2244,7 @@ SSqlObj* createSimpleSubObj(SSqlObj* pSql, __async_cb_func_t fp, void* param, in
pNew
->
sqlstr
=
NULL
;
pNew
->
sqlstr
=
NULL
;
pNew
->
maxRetry
=
TSDB_MAX_REPLICA
;
pNew
->
maxRetry
=
TSDB_MAX_REPLICA
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfoS
(
pCmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoS
(
pCmd
,
0
);
assert
(
pSql
->
cmd
.
clauseIndex
==
0
);
assert
(
pSql
->
cmd
.
clauseIndex
==
0
);
STableMetaInfo
*
pMasterTableMetaInfo
=
tscGetTableMetaInfoFromCmd
(
&
pSql
->
cmd
,
pSql
->
cmd
.
clauseIndex
,
0
);
STableMetaInfo
*
pMasterTableMetaInfo
=
tscGetTableMetaInfoFromCmd
(
&
pSql
->
cmd
,
pSql
->
cmd
.
clauseIndex
,
0
);
...
@@ -2247,15 +2255,14 @@ SSqlObj* createSimpleSubObj(SSqlObj* pSql, __async_cb_func_t fp, void* param, in
...
@@ -2247,15 +2255,14 @@ SSqlObj* createSimpleSubObj(SSqlObj* pSql, __async_cb_func_t fp, void* param, in
return
pNew
;
return
pNew
;
}
}
static
void
doSetSqlExprAndResultFieldInfo
(
SQuery
Node
Info
*
pNewQueryInfo
,
int64_t
uid
)
{
static
void
doSetSqlExprAndResultFieldInfo
(
SQueryInfo
*
pNewQueryInfo
,
int64_t
uid
)
{
int32_t
numOfOutput
=
(
int32_t
)
tscSqlExprNumOfExprs
(
pNewQueryInfo
);
int32_t
numOfOutput
=
(
int32_t
)
tscSqlExprNumOfExprs
(
pNewQueryInfo
);
if
(
numOfOutput
==
0
)
{
if
(
numOfOutput
==
0
)
{
return
;
return
;
}
}
// set the field info in pNewQueryInfo object according to sqlExpr information
// set the field info in pNewQueryInfo object according to sqlExpr information
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pNewQueryInfo
);
for
(
int32_t
i
=
0
;
i
<
numOfOutput
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfExprs
;
++
i
)
{
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pNewQueryInfo
,
i
);
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pNewQueryInfo
,
i
);
TAOS_FIELD
f
=
tscCreateField
((
int8_t
)
pExpr
->
base
.
resType
,
pExpr
->
base
.
aliasName
,
pExpr
->
base
.
resBytes
);
TAOS_FIELD
f
=
tscCreateField
((
int8_t
)
pExpr
->
base
.
resType
,
pExpr
->
base
.
aliasName
,
pExpr
->
base
.
resBytes
);
...
@@ -2269,7 +2276,7 @@ static void doSetSqlExprAndResultFieldInfo(SQueryNodeInfo* pNewQueryInfo, int64_
...
@@ -2269,7 +2276,7 @@ static void doSetSqlExprAndResultFieldInfo(SQueryNodeInfo* pNewQueryInfo, int64_
TAOS_FIELD
*
field
=
tscFieldInfoGetField
(
&
pNewQueryInfo
->
fieldsInfo
,
f
);
TAOS_FIELD
*
field
=
tscFieldInfoGetField
(
&
pNewQueryInfo
->
fieldsInfo
,
f
);
bool
matched
=
false
;
bool
matched
=
false
;
for
(
int32_t
k1
=
0
;
k1
<
numOf
Exprs
;
++
k1
)
{
for
(
int32_t
k1
=
0
;
k1
<
numOf
Output
;
++
k1
)
{
SExprInfo
*
pExpr1
=
tscSqlExprGet
(
pNewQueryInfo
,
k1
);
SExprInfo
*
pExpr1
=
tscSqlExprGet
(
pNewQueryInfo
,
k1
);
if
(
strcmp
(
field
->
name
,
pExpr1
->
base
.
aliasName
)
==
0
)
{
// establish link according to the result field name
if
(
strcmp
(
field
->
name
,
pExpr1
->
base
.
aliasName
)
==
0
)
{
// establish link according to the result field name
...
@@ -2328,8 +2335,8 @@ SSqlObj* createSubqueryObj(SSqlObj* pSql, int16_t tableIndex, __async_cb_func_t
...
@@ -2328,8 +2335,8 @@ SSqlObj* createSubqueryObj(SSqlObj* pSql, int16_t tableIndex, __async_cb_func_t
goto
_error
;
goto
_error
;
}
}
SQuery
Node
Info
*
pNewQueryInfo
=
tscGetQueryInfo
(
pnCmd
,
0
);
SQueryInfo
*
pNewQueryInfo
=
tscGetQueryInfo
(
pnCmd
,
0
);
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
pNewQueryInfo
->
command
=
pQueryInfo
->
command
;
pNewQueryInfo
->
command
=
pQueryInfo
->
command
;
pnCmd
->
active
=
pNewQueryInfo
;
pnCmd
->
active
=
pNewQueryInfo
;
...
@@ -2393,7 +2400,7 @@ SSqlObj* createSubqueryObj(SSqlObj* pSql, int16_t tableIndex, __async_cb_func_t
...
@@ -2393,7 +2400,7 @@ SSqlObj* createSubqueryObj(SSqlObj* pSql, int16_t tableIndex, __async_cb_func_t
// set the correct query type
// set the correct query type
if
(
pPrevSql
!=
NULL
)
{
if
(
pPrevSql
!=
NULL
)
{
SQuery
Node
Info
*
pPrevQueryInfo
=
tscGetQueryInfo
(
&
pPrevSql
->
cmd
,
pPrevSql
->
cmd
.
clauseIndex
);
SQueryInfo
*
pPrevQueryInfo
=
tscGetQueryInfo
(
&
pPrevSql
->
cmd
,
pPrevSql
->
cmd
.
clauseIndex
);
pNewQueryInfo
->
type
=
pPrevQueryInfo
->
type
;
pNewQueryInfo
->
type
=
pPrevQueryInfo
->
type
;
}
else
{
}
else
{
TSDB_QUERY_SET_TYPE
(
pNewQueryInfo
->
type
,
TSDB_QUERY_TYPE_SUBQUERY
);
// it must be the subquery
TSDB_QUERY_SET_TYPE
(
pNewQueryInfo
->
type
,
TSDB_QUERY_TYPE_SUBQUERY
);
// it must be the subquery
...
@@ -2476,7 +2483,7 @@ _error:
...
@@ -2476,7 +2483,7 @@ _error:
return
NULL
;
return
NULL
;
}
}
void
doExecuteQuery
(
SSqlObj
*
pSql
,
SQuery
Node
Info
*
pQueryInfo
)
{
void
doExecuteQuery
(
SSqlObj
*
pSql
,
SQueryInfo
*
pQueryInfo
)
{
uint16_t
type
=
pQueryInfo
->
type
;
uint16_t
type
=
pQueryInfo
->
type
;
if
(
QUERY_IS_JOIN_QUERY
(
type
)
&&
!
TSDB_QUERY_HAS_TYPE
(
type
,
TSDB_QUERY_TYPE_SUBQUERY
))
{
if
(
QUERY_IS_JOIN_QUERY
(
type
)
&&
!
TSDB_QUERY_HAS_TYPE
(
type
,
TSDB_QUERY_TYPE_SUBQUERY
))
{
tscHandleMasterJoinQuery
(
pSql
);
tscHandleMasterJoinQuery
(
pSql
);
...
@@ -2496,9 +2503,9 @@ void doExecuteQuery(SSqlObj* pSql, SQueryNodeInfo* pQueryInfo) {
...
@@ -2496,9 +2503,9 @@ void doExecuteQuery(SSqlObj* pSql, SQueryNodeInfo* pQueryInfo) {
}
}
// do execute the query according to the query execution plan
// do execute the query according to the query execution plan
void
executeQuery
(
SSqlObj
*
pSql
,
SQuery
Node
Info
*
pQueryInfo
)
{
void
executeQuery
(
SSqlObj
*
pSql
,
SQueryInfo
*
pQueryInfo
)
{
if
(
taosArrayGetSize
(
pQueryInfo
->
pUpstream
)
>
0
)
{
// nest query. do execute it firstly
if
(
taosArrayGetSize
(
pQueryInfo
->
pUpstream
)
>
0
)
{
// nest query. do execute it firstly
SQuery
Node
Info
*
pq
=
taosArrayGetP
(
pQueryInfo
->
pUpstream
,
0
);
SQueryInfo
*
pq
=
taosArrayGetP
(
pQueryInfo
->
pUpstream
,
0
);
pSql
->
cmd
.
active
=
pq
;
pSql
->
cmd
.
active
=
pq
;
executeQuery
(
pSql
,
pq
);
executeQuery
(
pSql
,
pq
);
...
@@ -2534,7 +2541,7 @@ void tscDoQuery(SSqlObj* pSql) {
...
@@ -2534,7 +2541,7 @@ void tscDoQuery(SSqlObj* pSql) {
if
(
pCmd
->
dataSourceType
==
DATA_FROM_DATA_FILE
)
{
if
(
pCmd
->
dataSourceType
==
DATA_FROM_DATA_FILE
)
{
tscImportDataFromFile
(
pSql
);
tscImportDataFromFile
(
pSql
);
}
else
{
}
else
{
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
uint16_t
type
=
pQueryInfo
->
type
;
uint16_t
type
=
pQueryInfo
->
type
;
if
(
QUERY_IS_JOIN_QUERY
(
type
))
{
if
(
QUERY_IS_JOIN_QUERY
(
type
))
{
...
@@ -2620,7 +2627,7 @@ bool tscIsQueryWithLimit(SSqlObj* pSql) {
...
@@ -2620,7 +2627,7 @@ bool tscIsQueryWithLimit(SSqlObj* pSql) {
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
for
(
int32_t
i
=
0
;
i
<
pCmd
->
numOfClause
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pCmd
->
numOfClause
;
++
i
)
{
SQuery
Node
Info
*
pqi
=
tscGetQueryInfoS
(
pCmd
,
i
);
SQueryInfo
*
pqi
=
tscGetQueryInfoS
(
pCmd
,
i
);
if
(
pqi
==
NULL
)
{
if
(
pqi
==
NULL
)
{
continue
;
continue
;
}
}
...
@@ -2686,7 +2693,7 @@ int32_t tscInvalidSQLErrMsg(char* msg, const char* additionalInfo, const char* s
...
@@ -2686,7 +2693,7 @@ int32_t tscInvalidSQLErrMsg(char* msg, const char* additionalInfo, const char* s
return
TSDB_CODE_TSC_INVALID_SQL
;
return
TSDB_CODE_TSC_INVALID_SQL
;
}
}
bool
tscHasReachLimitation
(
SQuery
Node
Info
*
pQueryInfo
,
SSqlRes
*
pRes
)
{
bool
tscHasReachLimitation
(
SQueryInfo
*
pQueryInfo
,
SSqlRes
*
pRes
)
{
assert
(
pQueryInfo
!=
NULL
&&
pQueryInfo
->
clauseLimit
!=
0
);
assert
(
pQueryInfo
!=
NULL
&&
pQueryInfo
->
clauseLimit
!=
0
);
return
(
pQueryInfo
->
clauseLimit
>
0
&&
pRes
->
numOfClauseTotal
>=
pQueryInfo
->
clauseLimit
);
return
(
pQueryInfo
->
clauseLimit
>
0
&&
pRes
->
numOfClauseTotal
>=
pQueryInfo
->
clauseLimit
);
}
}
...
@@ -2705,7 +2712,7 @@ bool hasMoreVnodesToTry(SSqlObj* pSql) {
...
@@ -2705,7 +2712,7 @@ bool hasMoreVnodesToTry(SSqlObj* pSql) {
}
}
assert
(
pRes
->
completed
);
assert
(
pRes
->
completed
);
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
// for normal table, no need to try any more if results are all retrieved from one vnode
// for normal table, no need to try any more if results are all retrieved from one vnode
...
@@ -2730,7 +2737,7 @@ void tscTryQueryNextVnode(SSqlObj* pSql, __async_cb_func_t fp) {
...
@@ -2730,7 +2737,7 @@ void tscTryQueryNextVnode(SSqlObj* pSql, __async_cb_func_t fp) {
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
/*
/*
* no result returned from the current virtual node anymore, try the next vnode if exists
* no result returned from the current virtual node anymore, try the next vnode if exists
...
@@ -2790,7 +2797,7 @@ void tscTryQueryNextClause(SSqlObj* pSql, __async_cb_func_t fp) {
...
@@ -2790,7 +2797,7 @@ void tscTryQueryNextClause(SSqlObj* pSql, __async_cb_func_t fp) {
assert
(
pCmd
->
clauseIndex
<
pCmd
->
numOfClause
-
1
);
assert
(
pCmd
->
clauseIndex
<
pCmd
->
numOfClause
-
1
);
pCmd
->
clauseIndex
++
;
pCmd
->
clauseIndex
++
;
SQuery
Node
Info
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
,
pCmd
->
clauseIndex
);
pSql
->
cmd
.
command
=
pQueryInfo
->
command
;
pSql
->
cmd
.
command
=
pQueryInfo
->
command
;
...
@@ -3067,65 +3074,71 @@ STableMeta* tscTableMetaDup(STableMeta* pTableMeta) {
...
@@ -3067,65 +3074,71 @@ STableMeta* tscTableMetaDup(STableMeta* pTableMeta) {
return
p
;
return
p
;
}
}
SQuery
*
tscCreateQueryFromQueryNodeInfo
(
SQuery
NodeInfo
*
pQueryNode
Info
)
{
SQuery
*
tscCreateQueryFromQueryNodeInfo
(
SQuery
Info
*
pQuery
Info
)
{
SQuery
*
pQuery
=
calloc
(
1
,
sizeof
(
SQuery
));
SQuery
*
pQuery
=
calloc
(
1
,
sizeof
(
SQuery
));
int16_t
numOfCols
=
taosArrayGetSize
(
pQuery
Node
Info
->
colList
);
int16_t
numOfCols
=
taosArrayGetSize
(
pQueryInfo
->
colList
);
int16_t
numOfOutput
=
pQuery
Node
Info
->
fieldsInfo
.
numOfOutput
;
int16_t
numOfOutput
=
pQueryInfo
->
fieldsInfo
.
numOfOutput
;
pQuery
->
tsdb
=
NULL
;
pQuery
->
tsdb
=
NULL
;
pQuery
->
topBotQuery
=
tscIsTopBotQuery
(
pQuery
Node
Info
);
pQuery
->
topBotQuery
=
tscIsTopBotQuery
(
pQueryInfo
);
pQuery
->
hasTagResults
=
hasTagValOutput
(
pQuery
Node
Info
);
pQuery
->
hasTagResults
=
hasTagValOutput
(
pQueryInfo
);
pQuery
->
timeWindowInterpo
=
timeWindowInterpoRequired
(
pQuery
Node
Info
);
pQuery
->
timeWindowInterpo
=
timeWindowInterpoRequired
(
pQueryInfo
);
pQuery
->
stabledev
=
isStabledev
(
pQuery
Node
Info
);
pQuery
->
stabledev
=
isStabledev
(
pQueryInfo
);
pQuery
->
tsCompQuery
=
isTsCompQuery
(
pQuery
Node
Info
);
pQuery
->
tsCompQuery
=
isTsCompQuery
(
pQueryInfo
);
pQuery
->
simpleAgg
=
isSimpleAggregate
(
pQuery
Node
Info
);
pQuery
->
simpleAgg
=
isSimpleAggregate
(
pQueryInfo
);
pQuery
->
needReverseScan
=
tscNeedReverseScan
(
pQuery
Node
Info
);
pQuery
->
needReverseScan
=
tscNeedReverseScan
(
pQueryInfo
);
pQuery
->
numOfCols
=
numOfCols
;
pQuery
->
numOfCols
=
numOfCols
;
pQuery
->
numOfOutput
=
numOfOutput
;
pQuery
->
numOfOutput
=
numOfOutput
;
pQuery
->
limit
=
pQuery
Node
Info
->
limit
;
pQuery
->
limit
=
pQueryInfo
->
limit
;
pQuery
->
order
=
pQuery
Node
Info
->
order
;
pQuery
->
order
=
pQueryInfo
->
order
;
pQuery
->
pExpr1
=
NULL
;
pQuery
->
pExpr1
=
NULL
;
pQuery
->
pExpr2
=
NULL
;
// not support yet.
pQuery
->
pExpr2
=
NULL
;
// not support yet.
pQuery
->
numOfExpr2
=
0
;
pQuery
->
numOfExpr2
=
0
;
pQuery
->
pGroupbyExpr
=
NULL
;
pQuery
->
pGroupbyExpr
=
NULL
;
memcpy
(
&
pQuery
->
interval
,
&
pQuery
Node
Info
->
interval
,
sizeof
(
pQuery
->
interval
));
memcpy
(
&
pQuery
->
interval
,
&
pQueryInfo
->
interval
,
sizeof
(
pQuery
->
interval
));
pQuery
->
fillType
=
pQuery
Node
Info
->
fillType
;
pQuery
->
fillType
=
pQueryInfo
->
fillType
;
pQuery
->
numOfTags
=
0
;
pQuery
->
numOfTags
=
0
;
pQuery
->
tagColList
=
NULL
;
pQuery
->
tagColList
=
NULL
;
STableMetaInfo
*
pTableMetaInfo
=
pQuery
Node
Info
->
pTableMetaInfo
[
0
];
STableMetaInfo
*
pTableMetaInfo
=
pQueryInfo
->
pTableMetaInfo
[
0
];
pQuery
->
vgId
=
0
;
pQuery
->
vgId
=
0
;
pQuery
->
stableQuery
=
UTIL_TABLE_IS_SUPER_TABLE
(
pTableMetaInfo
);
pQuery
->
stableQuery
=
UTIL_TABLE_IS_SUPER_TABLE
(
pTableMetaInfo
);
pQuery
->
groupbyColumn
=
tscGroupbyColumn
(
pQueryNodeInfo
);
pQuery
->
groupbyColumn
=
tscGroupbyColumn
(
pQueryInfo
);
pQuery
->
window
=
pQueryNodeInfo
->
window
;
pQuery
->
window
=
pQueryInfo
->
window
;
pQuery
->
pGroupbyExpr
=
calloc
(
1
,
sizeof
(
SSqlGroupbyExpr
));
*
pQuery
->
pGroupbyExpr
=
pQueryInfo
->
groupbyExpr
;
{
{
pQuery
->
numOfOutput
=
tscSqlExprNumOfExprs
(
pQuery
Node
Info
);
pQuery
->
numOfOutput
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
pQuery
->
pExpr1
=
calloc
(
pQuery
->
numOfOutput
,
sizeof
(
SExprInfo
));
pQuery
->
pExpr1
=
calloc
(
pQuery
->
numOfOutput
,
sizeof
(
SExprInfo
));
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfOutput
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfOutput
;
++
i
)
{
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQuery
Node
Info
,
i
);
SExprInfo
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
i
);
tscSqlExprAssign
(
&
pQuery
->
pExpr1
[
i
],
pExpr
);
tscSqlExprAssign
(
&
pQuery
->
pExpr1
[
i
],
pExpr
);
}
}
pQuery
->
colList
=
calloc
(
numOfCols
,
sizeof
(
SColumnInfo
));
pQuery
->
colList
=
calloc
(
numOfCols
,
sizeof
(
SColumnInfo
));
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
SColumn
*
pCol
=
taosArrayGetP
(
pQueryNodeInfo
->
colList
,
i
);
SColumn
*
pCol
=
taosArrayGetP
(
pQueryInfo
->
colList
,
i
);
if
(
!
isValidDataType
(
pCol
->
info
.
type
)
||
pCol
->
info
.
type
==
TSDB_DATA_TYPE_NULL
)
{
assert
(
0
);
}
pQuery
->
colList
[
i
]
=
pCol
->
info
;
pQuery
->
colList
[
i
]
=
pCol
->
info
;
}
}
}
}
{
// for simple table, not for super table
{
// for simple table, not for super table
if
(
tscIsSecondStageQuery
(
pQuery
Node
Info
))
{
if
(
tscIsSecondStageQuery
(
pQueryInfo
))
{
pQuery
->
numOfExpr2
=
tscNumOfFields
(
pQuery
Node
Info
);
pQuery
->
numOfExpr2
=
tscNumOfFields
(
pQueryInfo
);
pQuery
->
pExpr2
=
calloc
(
pQuery
->
numOfExpr2
,
sizeof
(
SExprInfo
));
pQuery
->
pExpr2
=
calloc
(
pQuery
->
numOfExpr2
,
sizeof
(
SExprInfo
));
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfExpr2
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfExpr2
;
++
i
)
{
SInternalField
*
pField
=
tscFieldInfoGetInternalField
(
&
pQuery
Node
Info
->
fieldsInfo
,
i
);
SInternalField
*
pField
=
tscFieldInfoGetInternalField
(
&
pQueryInfo
->
fieldsInfo
,
i
);
SExprInfo
*
pExpr
=
pField
->
pExpr
;
SExprInfo
*
pExpr
=
pField
->
pExpr
;
SSqlExpr
*
pse
=
&
pQuery
->
pExpr2
[
i
].
base
;
SSqlExpr
*
pse
=
&
pQuery
->
pExpr2
[
i
].
base
;
...
@@ -3158,6 +3171,56 @@ SQuery* tscCreateQueryFromQueryNodeInfo(SQueryNodeInfo* pQueryNodeInfo) {
...
@@ -3158,6 +3171,56 @@ SQuery* tscCreateQueryFromQueryNodeInfo(SQueryNodeInfo* pQueryNodeInfo) {
}
}
}
}
// tag column info
{
pQuery
->
numOfTags
=
(
int32_t
)
taosArrayGetSize
(
pTableMetaInfo
->
tagColList
);
if
(
pQuery
->
numOfTags
>
0
)
{
// todo index problem
STableMeta
*
pTableMeta
=
pQueryInfo
->
pTableMetaInfo
[
0
]
->
pTableMeta
;
// int32_t numOfColumns = tscGetNumOfColumns(pTableMeta);
int32_t
numOfTagColumns
=
tscGetNumOfTags
(
pTableMeta
);
// int32_t total = numOfTagColumns + numOfColumns;
SSchema
*
pSchema
=
tscGetTableTagSchema
(
pTableMeta
);
pQuery
->
tagColList
=
calloc
(
pQuery
->
numOfTags
,
sizeof
(
SColumnInfo
));
pQuery
->
numOfTags
=
pQuery
->
numOfTags
;
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfTags
;
++
i
)
{
SColumn
*
pCol
=
taosArrayGetP
(
pTableMetaInfo
->
tagColList
,
i
);
SSchema
*
pColSchema
=
&
pSchema
[
pCol
->
colIndex
.
columnIndex
];
if
((
pCol
->
colIndex
.
columnIndex
>=
numOfTagColumns
||
pCol
->
colIndex
.
columnIndex
<
-
1
)
||
(
!
isValidDataType
(
pColSchema
->
type
)))
{
char
n
[
TSDB_TABLE_FNAME_LEN
]
=
{
0
};
tNameExtractFullName
(
&
pTableMetaInfo
->
name
,
n
);
// tscError("%p tid:%d uid:%" PRIu64 " id:%s, tag index out of range, totalCols:%d, numOfTags:%d, index:%d, column name:%s",
// pSql, pTableMeta->id.tid, pTableMeta->id.uid, n, total, numOfTagColumns, pCol->colIndex.columnIndex, pColSchema->name);
return
NULL
;
}
SColumnInfo
*
pTagCol
=
&
pQuery
->
tagColList
[
i
];
pTagCol
->
colId
=
pColSchema
->
colId
;
pTagCol
->
bytes
=
pColSchema
->
bytes
;
pTagCol
->
type
=
pColSchema
->
type
;
pTagCol
->
numOfFilters
=
0
;
}
}
}
pQuery
->
stableQuery
=
QUERY_IS_STABLE_QUERY
(
pQueryInfo
->
type
);
pQuery
->
topBotQuery
=
tscIsTopBotQuery
(
pQueryInfo
);
pQuery
->
groupbyColumn
=
tscGroupbyColumn
(
pQueryInfo
);
pQuery
->
hasTagResults
=
hasTagValOutput
(
pQueryInfo
);
pQuery
->
timeWindowInterpo
=
timeWindowInterpoRequired
(
pQueryInfo
);
pQuery
->
queryBlockDist
=
isBlockDistQuery
(
pQueryInfo
);
pQuery
->
stabledev
=
isStabledev
(
pQueryInfo
);
pQuery
->
tsCompQuery
=
isTsCompQuery
(
pQueryInfo
);
pQuery
->
simpleAgg
=
isSimpleAggregate
(
pQueryInfo
);
pQuery
->
pointInterpQuery
=
tscIsPointInterpQuery
(
pQueryInfo
);
pQuery
->
needReverseScan
=
tscNeedReverseScan
(
pQueryInfo
);
pQuery
->
interBufSize
=
getOutputInterResultBufSize
(
pQuery
);
pQuery
->
interBufSize
=
getOutputInterResultBufSize
(
pQuery
);
return
pQuery
;
return
pQuery
;
}
}
...
...
src/inc/taosmsg.h
浏览文件 @
0e0e6d5a
...
@@ -455,6 +455,18 @@ typedef struct {
...
@@ -455,6 +455,18 @@ typedef struct {
SMsgHead
head
;
SMsgHead
head
;
char
version
[
TSDB_VERSION_LEN
];
char
version
[
TSDB_VERSION_LEN
];
bool
stableQuery
;
// super table query or not
bool
topBotQuery
;
// TODO used bitwise flag
bool
groupbyColumn
;
// denote if this is a groupby normal column query
bool
hasTagResults
;
// if there are tag values in final result or not
bool
timeWindowInterpo
;
// if the time window start/end required interpolation
bool
queryBlockDist
;
// if query data block distribution
bool
stabledev
;
// super table stddev query
bool
tsCompQuery
;
// is tscomp query
bool
simpleAgg
;
bool
pointInterpQuery
;
// point interpolation query
bool
needReverseScan
;
// need reverse scan
STimeWindow
window
;
STimeWindow
window
;
int32_t
numOfTables
;
int32_t
numOfTables
;
int16_t
order
;
int16_t
order
;
...
...
src/query/inc/qExecutor.h
浏览文件 @
0e0e6d5a
...
@@ -177,7 +177,7 @@ typedef struct SSDataBlock {
...
@@ -177,7 +177,7 @@ typedef struct SSDataBlock {
SDataBlockInfo
info
;
SDataBlockInfo
info
;
}
SSDataBlock
;
}
SSDataBlock
;
// The basic query information extracted from the SQuery
Node
Info tree to support the
// The basic query information extracted from the SQueryInfo tree to support the
// execution of query in a data node.
// execution of query in a data node.
typedef
struct
SQuery
{
typedef
struct
SQuery
{
SLimitVal
limit
;
SLimitVal
limit
;
...
...
src/query/src/qExecutor.c
浏览文件 @
0e0e6d5a
...
@@ -196,7 +196,7 @@ static int32_t setGroupResultOutputBuf(SQueryRuntimeEnv *pRuntimeEnv, SGroupbyOp
...
@@ -196,7 +196,7 @@ static int32_t setGroupResultOutputBuf(SQueryRuntimeEnv *pRuntimeEnv, SGroupbyOp
static
void
initCtxOutputBuffer
(
SQLFunctionCtx
*
pCtx
,
int32_t
size
);
static
void
initCtxOutputBuffer
(
SQLFunctionCtx
*
pCtx
,
int32_t
size
);
static
void
getAlignQueryTimeWindow
(
SQuery
*
pQuery
,
int64_t
key
,
int64_t
keyFirst
,
int64_t
keyLast
,
STimeWindow
*
win
);
static
void
getAlignQueryTimeWindow
(
SQuery
*
pQuery
,
int64_t
key
,
int64_t
keyFirst
,
int64_t
keyLast
,
STimeWindow
*
win
);
static
bool
isPointInterpoQuery
(
SQuery
*
pQuery
);
//
static bool isPointInterpoQuery(SQuery *pQuery);
static
void
setResultBufSize
(
SQuery
*
pQuery
,
SRspResultInfo
*
pResultInfo
);
static
void
setResultBufSize
(
SQuery
*
pQuery
,
SRspResultInfo
*
pResultInfo
);
static
void
setCtxTagForJoin
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
SQLFunctionCtx
*
pCtx
,
SExprInfo
*
pExprInfo
,
void
*
pTable
);
static
void
setCtxTagForJoin
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
SQLFunctionCtx
*
pCtx
,
SExprInfo
*
pExprInfo
,
void
*
pTable
);
static
void
setParamForStableStddev
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
SQLFunctionCtx
*
pCtx
,
int32_t
numOfOutput
,
SExprInfo
*
pExpr
);
static
void
setParamForStableStddev
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
SQLFunctionCtx
*
pCtx
,
int32_t
numOfOutput
,
SExprInfo
*
pExpr
);
...
@@ -275,36 +275,36 @@ static void clearNumOfRes(SQLFunctionCtx* pCtx, int32_t numOfOutput) {
...
@@ -275,36 +275,36 @@ static void clearNumOfRes(SQLFunctionCtx* pCtx, int32_t numOfOutput) {
}
}
}
}
static
bool
isGroupbyColumn
(
SSqlGroupbyExpr
*
pGroupbyExpr
)
{
//static bool isGroupbyColumn(SSqlGroupbyExpr *pGroupbyExpr) {
if
(
pGroupbyExpr
==
NULL
||
pGroupbyExpr
->
numOfGroupCols
==
0
)
{
// if (pGroupbyExpr == NULL || pGroupbyExpr->numOfGroupCols == 0) {
return
false
;
// return false;
}
// }
//
for
(
int32_t
i
=
0
;
i
<
pGroupbyExpr
->
numOfGroupCols
;
++
i
)
{
// for (int32_t i = 0; i < pGroupbyExpr->numOfGroupCols; ++i) {
SColIndex
*
pColIndex
=
taosArrayGet
(
pGroupbyExpr
->
columnInfo
,
i
);
// SColIndex *pColIndex = taosArrayGet(pGroupbyExpr->columnInfo, i);
if
(
TSDB_COL_IS_NORMAL_COL
(
pColIndex
->
flag
))
{
// if (TSDB_COL_IS_NORMAL_COL(pColIndex->flag)) {
//make sure the normal column locates at the second position if tbname exists in group by clause
// //make sure the normal column locates at the second position if tbname exists in group by clause
if
(
pGroupbyExpr
->
numOfGroupCols
>
1
)
{
// if (pGroupbyExpr->numOfGroupCols > 1) {
assert
(
pColIndex
->
colIndex
>
0
);
// assert(pColIndex->colIndex > 0);
}
// }
//
return
true
;
// return true;
}
// }
}
// }
//
return
false
;
// return false;
}
//}
static
bool
isStabledev
(
SQuery
*
pQuery
)
{
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfOutput
;
++
i
)
{
int32_t
functId
=
pQuery
->
pExpr1
[
i
].
base
.
functionId
;
if
(
functId
==
TSDB_FUNC_STDDEV_DST
)
{
return
true
;
}
}
return
false
;
//static UNUSED_FUNC bool isStabledev(SQuery* pQuery) {
}
// for (int32_t i = 0; i < pQuery->numOfOutput; ++i) {
// int32_t functId = pQuery->pExpr1[i].base.functionId;
// if (functId == TSDB_FUNC_STDDEV_DST) {
// return true;
// }
// }
//
// return false;
//}
static
bool
isSelectivityWithTagsQuery
(
SQLFunctionCtx
*
pCtx
,
int32_t
numOfOutput
)
{
static
bool
isSelectivityWithTagsQuery
(
SQLFunctionCtx
*
pCtx
,
int32_t
numOfOutput
)
{
bool
hasTags
=
false
;
bool
hasTags
=
false
;
...
@@ -336,51 +336,48 @@ static bool isProjQuery(SQuery *pQuery) {
...
@@ -336,51 +336,48 @@ static bool isProjQuery(SQuery *pQuery) {
return
true
;
return
true
;
}
}
static
bool
isTsCompQuery
(
SQuery
*
pQuery
)
{
return
pQuery
->
pExpr1
[
0
].
base
.
functionId
==
TSDB_FUNC_TS_COMP
;
}
//static bool isTsCompQuery(SQuery *pQuery) { return pQuery->pExpr1[0].base.functionId == TSDB_FUNC_TS_COMP; }
//static UNUSED_FUNC bool isTopBottomQuery(SQuery *pQuery) {
static
bool
isTopBottomQuery
(
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_TS) {
if
(
functionId
==
TSDB_FUNC_TS
)
{
// continue;
continue
;
// }
}
//
// if (functionId == TSDB_FUNC_TOP || functionId == TSDB_FUNC_BOTTOM) {
if
(
functionId
==
TSDB_FUNC_TOP
||
functionId
==
TSDB_FUNC_BOTTOM
)
{
// return true;
return
true
;
// }
}
// }
}
//
// return false;
return
false
;
//}
}
//static UNUSED_FUNC bool timeWindowInterpoRequired(SQuery *pQuery) {
// for(int32_t i = 0; i < pQuery->numOfOutput; ++i) {
static
bool
timeWindowInterpoRequired
(
SQuery
*
pQuery
)
{
// int32_t functionId = pQuery->pExpr1[i].base.functionId;
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfOutput
;
++
i
)
{
// if (functionId == TSDB_FUNC_TWA || functionId == TSDB_FUNC_INTERP) {
int32_t
functionId
=
pQuery
->
pExpr1
[
i
].
base
.
functionId
;
// return true;
if
(
functionId
==
TSDB_FUNC_TWA
||
functionId
==
TSDB_FUNC_INTERP
)
{
// }
return
true
;
// }
}
//
}
// return false;
//}
return
false
;
//static UNUSED_FUNC bool hasTagValOutput(SQuery* pQuery) {
}
// SExprInfo *pExprInfo = &pQuery->pExpr1[0];
// if (pQuery->numOfOutput == 1 && pExprInfo->base.functionId == TSDB_FUNC_TS_COMP) {
static
bool
hasTagValOutput
(
SQuery
*
pQuery
)
{
// return true;
SExprInfo
*
pExprInfo
=
&
pQuery
->
pExpr1
[
0
];
// } else { // set tag value, by which the results are aggregated.
if
(
pQuery
->
numOfOutput
==
1
&&
pExprInfo
->
base
.
functionId
==
TSDB_FUNC_TS_COMP
)
{
// for (int32_t idx = 0; idx < pQuery->numOfOutput; ++idx) {
return
true
;
// SExprInfo *pLocalExprInfo = &pQuery->pExpr1[idx];
}
else
{
// set tag value, by which the results are aggregated.
//
for
(
int32_t
idx
=
0
;
idx
<
pQuery
->
numOfOutput
;
++
idx
)
{
// // ts_comp column required the tag value for join filter
SExprInfo
*
pLocalExprInfo
=
&
pQuery
->
pExpr1
[
idx
];
// if (TSDB_COL_IS_TAG(pLocalExprInfo->base.colInfo.flag)) {
// return true;
// ts_comp column required the tag value for join filter
// }
if
(
TSDB_COL_IS_TAG
(
pLocalExprInfo
->
base
.
colInfo
.
flag
))
{
// }
return
true
;
// }
}
//
}
// return false;
}
//}
return
false
;
}
static
bool
hasNullRv
(
SColIndex
*
pColIndex
,
SDataStatis
*
pStatis
)
{
static
bool
hasNullRv
(
SColIndex
*
pColIndex
,
SDataStatis
*
pStatis
)
{
if
(
TSDB_COL_IS_TAG
(
pColIndex
->
flag
)
||
TSDB_COL_IS_UD_COL
(
pColIndex
->
flag
)
||
pColIndex
->
colId
==
PRIMARYKEY_TIMESTAMP_COL_INDEX
)
{
if
(
TSDB_COL_IS_TAG
(
pColIndex
->
flag
)
||
TSDB_COL_IS_UD_COL
(
pColIndex
->
flag
)
||
pColIndex
->
colId
==
PRIMARYKEY_TIMESTAMP_COL_INDEX
)
{
...
@@ -1194,7 +1191,7 @@ static void doWindowBorderInterpolation(SOperatorInfo* pOperatorInfo, SSDataBloc
...
@@ -1194,7 +1191,7 @@ static void doWindowBorderInterpolation(SOperatorInfo* pOperatorInfo, SSDataBloc
}
}
// point interpolation does not require the end key time window interpolation.
// point interpolation does not require the end key time window interpolation.
if
(
isPointInterpoQuery
(
pQuery
)
)
{
if
(
pQuery
->
pointInterpQuery
)
{
return
;
return
;
}
}
...
@@ -1769,7 +1766,7 @@ static int32_t setupQueryRuntimeEnv(SQueryRuntimeEnv *pRuntimeEnv, int32_t numOf
...
@@ -1769,7 +1766,7 @@ static int32_t setupQueryRuntimeEnv(SQueryRuntimeEnv *pRuntimeEnv, int32_t numOf
createArithOperatorInfo
(
pRuntimeEnv
,
pRuntimeEnv
->
proot
,
pQuery
->
pExpr2
,
pQuery
->
numOfExpr2
);
createArithOperatorInfo
(
pRuntimeEnv
,
pRuntimeEnv
->
proot
,
pQuery
->
pExpr2
,
pQuery
->
numOfExpr2
);
}
}
if
(
pQuery
->
fillType
!=
TSDB_FILL_NONE
&&
!
isPointInterpoQuery
(
pQuery
)
)
{
if
(
pQuery
->
fillType
!=
TSDB_FILL_NONE
&&
!
pQuery
->
pointInterpQuery
)
{
SOperatorInfo
*
pInfo
=
pRuntimeEnv
->
proot
;
SOperatorInfo
*
pInfo
=
pRuntimeEnv
->
proot
;
pRuntimeEnv
->
proot
=
createFillOperatorInfo
(
pRuntimeEnv
,
pInfo
,
pInfo
->
pExpr
,
pInfo
->
numOfOutput
);
pRuntimeEnv
->
proot
=
createFillOperatorInfo
(
pRuntimeEnv
,
pInfo
,
pInfo
->
pExpr
,
pInfo
->
numOfOutput
);
}
}
...
@@ -1930,16 +1927,16 @@ void setQueryKilled(SQInfo *pQInfo) { pQInfo->code = TSDB_CODE_TSC_QUERY_CANCELL
...
@@ -1930,16 +1927,16 @@ void setQueryKilled(SQInfo *pQInfo) { pQInfo->code = TSDB_CODE_TSC_QUERY_CANCELL
//}
//}
// todo refactor with isLastRowQuery
// todo refactor with isLastRowQuery
bool
isPointInterpoQuery
(
SQuery
*
pQuery
)
{
//
bool isPointInterpoQuery(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_INTERP
)
{
//
if (functionId == TSDB_FUNC_INTERP) {
return
true
;
//
return true;
}
//
}
}
//
}
//
return
false
;
//
return false;
}
//
}
// TODO REFACTOR:MERGE WITH CLIENT-SIDE FUNCTION
// TODO REFACTOR:MERGE WITH CLIENT-SIDE FUNCTION
static
UNUSED_FUNC
bool
isSumAvgRateQuery
(
SQuery
*
pQuery
)
{
static
UNUSED_FUNC
bool
isSumAvgRateQuery
(
SQuery
*
pQuery
)
{
...
@@ -2109,7 +2106,7 @@ static void changeExecuteScanOrder(SQInfo *pQInfo, SQueryTableMsg* pQueryMsg, bo
...
@@ -2109,7 +2106,7 @@ static void changeExecuteScanOrder(SQInfo *pQInfo, SQueryTableMsg* pQueryMsg, bo
return
;
return
;
}
}
if
(
isGroupbyColumn
(
pQuery
->
pGroupbyExpr
)
&&
pQuery
->
order
.
order
==
TSDB_ORDER_DESC
)
{
if
(
pQuery
->
groupbyColumn
&&
pQuery
->
order
.
order
==
TSDB_ORDER_DESC
)
{
pQuery
->
order
.
order
=
TSDB_ORDER_ASC
;
pQuery
->
order
.
order
=
TSDB_ORDER_ASC
;
if
(
pQuery
->
window
.
skey
>
pQuery
->
window
.
ekey
)
{
if
(
pQuery
->
window
.
skey
>
pQuery
->
window
.
ekey
)
{
SWAP
(
pQuery
->
window
.
skey
,
pQuery
->
window
.
ekey
,
TSKEY
);
SWAP
(
pQuery
->
window
.
skey
,
pQuery
->
window
.
ekey
,
TSKEY
);
...
@@ -2119,7 +2116,7 @@ static void changeExecuteScanOrder(SQInfo *pQInfo, SQueryTableMsg* pQueryMsg, bo
...
@@ -2119,7 +2116,7 @@ static void changeExecuteScanOrder(SQInfo *pQInfo, SQueryTableMsg* pQueryMsg, bo
return
;
return
;
}
}
if
(
isPointInterpoQuery
(
pQuery
)
&&
pQuery
->
interval
.
interval
==
0
)
{
if
(
pQuery
->
pointInterpQuery
&&
pQuery
->
interval
.
interval
==
0
)
{
if
(
!
QUERY_IS_ASC_QUERY
(
pQuery
))
{
if
(
!
QUERY_IS_ASC_QUERY
(
pQuery
))
{
qDebug
(
msg
,
pQInfo
,
"interp"
,
pQuery
->
order
.
order
,
TSDB_ORDER_ASC
,
pQuery
->
window
.
skey
,
pQuery
->
window
.
ekey
,
pQuery
->
window
.
ekey
,
pQuery
->
window
.
skey
);
qDebug
(
msg
,
pQInfo
,
"interp"
,
pQuery
->
order
.
order
,
TSDB_ORDER_ASC
,
pQuery
->
window
.
skey
,
pQuery
->
window
.
ekey
,
pQuery
->
window
.
ekey
,
pQuery
->
window
.
skey
);
SWAP
(
pQuery
->
window
.
skey
,
pQuery
->
window
.
ekey
,
TSKEY
);
SWAP
(
pQuery
->
window
.
skey
,
pQuery
->
window
.
ekey
,
TSKEY
);
...
@@ -2563,7 +2560,7 @@ int32_t loadDataBlockOnDemand(SQueryRuntimeEnv* pRuntimeEnv, STableScanInfo* pTa
...
@@ -2563,7 +2560,7 @@ int32_t loadDataBlockOnDemand(SQueryRuntimeEnv* pRuntimeEnv, STableScanInfo* pTa
pTableScanInfo
->
rowCellInfoOffset
)
!=
TSDB_CODE_SUCCESS
)
{
pTableScanInfo
->
rowCellInfoOffset
)
!=
TSDB_CODE_SUCCESS
)
{
longjmp
(
pRuntimeEnv
->
env
,
TSDB_CODE_QRY_OUT_OF_MEMORY
);
longjmp
(
pRuntimeEnv
->
env
,
TSDB_CODE_QRY_OUT_OF_MEMORY
);
}
}
}
else
if
(
pQuery
->
stableQuery
&&
(
!
isTsCompQuery
(
pQuery
)
))
{
// stable aggregate, not interval aggregate or normal column aggregate
}
else
if
(
pQuery
->
stableQuery
&&
(
!
pQuery
->
tsCompQuery
))
{
// stable aggregate, not interval aggregate or normal column aggregate
doSetTableGroupOutputBuf
(
pRuntimeEnv
,
pTableScanInfo
->
pResultRowInfo
,
pTableScanInfo
->
pCtx
,
doSetTableGroupOutputBuf
(
pRuntimeEnv
,
pTableScanInfo
->
pResultRowInfo
,
pTableScanInfo
->
pCtx
,
pTableScanInfo
->
rowCellInfoOffset
,
pTableScanInfo
->
numOfOutput
,
pTableScanInfo
->
rowCellInfoOffset
,
pTableScanInfo
->
numOfOutput
,
pQuery
->
current
->
groupIndex
);
pQuery
->
current
->
groupIndex
);
...
@@ -3855,7 +3852,7 @@ static int32_t setupQueryHandle(void* tsdb, SQInfo* pQInfo, bool isSTableQuery)
...
@@ -3855,7 +3852,7 @@ static int32_t setupQueryHandle(void* tsdb, SQInfo* pQInfo, bool isSTableQuery)
}
}
STsdbQueryCond
cond
=
createTsdbQueryCond
(
pQuery
,
&
pQuery
->
window
);
STsdbQueryCond
cond
=
createTsdbQueryCond
(
pQuery
,
&
pQuery
->
window
);
if
(
isTsCompQuery
(
pQuery
)
||
isPointInterpoQuery
(
pQuery
)
)
{
if
(
pQuery
->
tsCompQuery
||
pQuery
->
pointInterpQuery
)
{
cond
.
type
=
BLOCK_LOAD_TABLE_SEQ_ORDER
;
cond
.
type
=
BLOCK_LOAD_TABLE_SEQ_ORDER
;
}
}
...
@@ -3893,7 +3890,7 @@ static int32_t setupQueryHandle(void* tsdb, SQInfo* pQInfo, bool isSTableQuery)
...
@@ -3893,7 +3890,7 @@ static int32_t setupQueryHandle(void* tsdb, SQInfo* pQInfo, bool isSTableQuery)
}
}
}
}
}
}
}
else
if
(
isPointInterpoQuery
(
pQuery
)
)
{
}
else
if
(
pQuery
->
pointInterpQuery
)
{
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryRowsInExternalWindow
(
tsdb
,
&
cond
,
&
pQuery
->
tableGroupInfo
,
pQInfo
,
&
pQuery
->
memRef
);
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryRowsInExternalWindow
(
tsdb
,
&
cond
,
&
pQuery
->
tableGroupInfo
,
pQInfo
,
&
pQuery
->
memRef
);
}
else
{
}
else
{
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryTables
(
tsdb
,
&
cond
,
&
pQuery
->
tableGroupInfo
,
pQInfo
,
&
pQuery
->
memRef
);
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryTables
(
tsdb
,
&
cond
,
&
pQuery
->
tableGroupInfo
,
pQInfo
,
&
pQuery
->
memRef
);
...
@@ -3933,10 +3930,10 @@ int32_t doInitQInfo(SQInfo *pQInfo, STSBuf *pTsBuf, SArray* prevResult, void *ts
...
@@ -3933,10 +3930,10 @@ int32_t doInitQInfo(SQInfo *pQInfo, STSBuf *pTsBuf, SArray* prevResult, void *ts
SQuery
*
pQuery
=
pQInfo
->
runtimeEnv
.
pQuery
;
SQuery
*
pQuery
=
pQInfo
->
runtimeEnv
.
pQuery
;
pQuery
->
tsdb
=
tsdb
;
pQuery
->
tsdb
=
tsdb
;
pQuery
->
topBotQuery
=
isTopBottomQuery
(
pQuery
);
//
pQuery->topBotQuery = isTopBottomQuery(pQuery);
pQuery
->
hasTagResults
=
hasTagValOutput
(
pQuery
);
//
pQuery->hasTagResults = hasTagValOutput(pQuery);
pQuery
->
timeWindowInterpo
=
timeWindowInterpoRequired
(
pQuery
);
//
pQuery->timeWindowInterpo = timeWindowInterpoRequired(pQuery);
pQuery
->
stabledev
=
isStabledev
(
pQuery
);
//
pQuery->stabledev = isStabledev(pQuery);
pRuntimeEnv
->
prevResult
=
prevResult
;
pRuntimeEnv
->
prevResult
=
prevResult
;
pRuntimeEnv
->
qinfo
=
pQInfo
;
pRuntimeEnv
->
qinfo
=
pQInfo
;
...
@@ -3951,7 +3948,6 @@ int32_t doInitQInfo(SQInfo *pQInfo, STSBuf *pTsBuf, SArray* prevResult, void *ts
...
@@ -3951,7 +3948,6 @@ int32_t doInitQInfo(SQInfo *pQInfo, STSBuf *pTsBuf, SArray* prevResult, void *ts
pQuery
->
tsdb
=
tsdb
;
pQuery
->
tsdb
=
tsdb
;
pQuery
->
vgId
=
vgId
;
pQuery
->
vgId
=
vgId
;
pQuery
->
stableQuery
=
isSTableQuery
;
pQuery
->
stableQuery
=
isSTableQuery
;
pQuery
->
groupbyColumn
=
isGroupbyColumn
(
pQuery
->
pGroupbyExpr
);
pQuery
->
interBufSize
=
getOutputInterResultBufSize
(
pQuery
);
pQuery
->
interBufSize
=
getOutputInterResultBufSize
(
pQuery
);
pRuntimeEnv
->
groupResInfo
.
totalGroup
=
(
int32_t
)
(
isSTableQuery
?
GET_NUM_OF_TABLEGROUP
(
pRuntimeEnv
)
:
0
);
pRuntimeEnv
->
groupResInfo
.
totalGroup
=
(
int32_t
)
(
isSTableQuery
?
GET_NUM_OF_TABLEGROUP
(
pRuntimeEnv
)
:
0
);
...
@@ -3966,7 +3962,7 @@ int32_t doInitQInfo(SQInfo *pQInfo, STSBuf *pTsBuf, SArray* prevResult, void *ts
...
@@ -3966,7 +3962,7 @@ int32_t doInitQInfo(SQInfo *pQInfo, STSBuf *pTsBuf, SArray* prevResult, void *ts
pRuntimeEnv
->
proot
=
createTagScanOperatorInfo
(
pRuntimeEnv
,
pQuery
->
pExpr1
,
pQuery
->
numOfOutput
);
pRuntimeEnv
->
proot
=
createTagScanOperatorInfo
(
pRuntimeEnv
,
pQuery
->
pExpr1
,
pQuery
->
numOfOutput
);
}
else
if
(
pQuery
->
queryBlockDist
)
{
}
else
if
(
pQuery
->
queryBlockDist
)
{
pRuntimeEnv
->
pTableScanner
=
createTableBlockInfoScanOperator
(
pRuntimeEnv
->
pQueryHandle
,
pRuntimeEnv
);
pRuntimeEnv
->
pTableScanner
=
createTableBlockInfoScanOperator
(
pRuntimeEnv
->
pQueryHandle
,
pRuntimeEnv
);
}
else
if
(
isTsCompQuery
(
pQuery
)
||
isPointInterpoQuery
(
pQuery
)
)
{
}
else
if
(
pQuery
->
tsCompQuery
||
pQuery
->
pointInterpQuery
)
{
pRuntimeEnv
->
pTableScanner
=
createTableSeqScanOperator
(
pRuntimeEnv
->
pQueryHandle
,
pRuntimeEnv
);
pRuntimeEnv
->
pTableScanner
=
createTableSeqScanOperator
(
pRuntimeEnv
->
pQueryHandle
,
pRuntimeEnv
);
}
else
if
(
needReverseScan
(
pQuery
))
{
}
else
if
(
needReverseScan
(
pQuery
))
{
pRuntimeEnv
->
pTableScanner
=
createDataBlocksOptScanInfo
(
pRuntimeEnv
->
pQueryHandle
,
pRuntimeEnv
,
getNumOfScanTimes
(
pQuery
),
1
);
pRuntimeEnv
->
pTableScanner
=
createDataBlocksOptScanInfo
(
pRuntimeEnv
->
pQueryHandle
,
pRuntimeEnv
,
getNumOfScanTimes
(
pQuery
),
1
);
...
@@ -6128,6 +6124,19 @@ SQInfo* createQInfoImpl(SQueryTableMsg* pQueryMsg, SSqlGroupbyExpr* pGroupbyExpr
...
@@ -6128,6 +6124,19 @@ SQInfo* createQInfoImpl(SQueryTableMsg* pQueryMsg, SSqlGroupbyExpr* pGroupbyExpr
pQuery
->
prjInfo
.
vgroupLimit
=
pQueryMsg
->
vgroupLimit
;
pQuery
->
prjInfo
.
vgroupLimit
=
pQueryMsg
->
vgroupLimit
;
pQuery
->
prjInfo
.
ts
=
(
pQueryMsg
->
order
==
TSDB_ORDER_ASC
)
?
INT64_MIN
:
INT64_MAX
;
pQuery
->
prjInfo
.
ts
=
(
pQueryMsg
->
order
==
TSDB_ORDER_ASC
)
?
INT64_MIN
:
INT64_MAX
;
pQuery
->
sw
=
pQueryMsg
->
sw
;
pQuery
->
sw
=
pQueryMsg
->
sw
;
pQuery
->
stableQuery
=
pQueryMsg
->
stableQuery
;
pQuery
->
topBotQuery
=
pQueryMsg
->
topBotQuery
;
pQuery
->
groupbyColumn
=
pQueryMsg
->
groupbyColumn
;
pQuery
->
hasTagResults
=
pQueryMsg
->
hasTagResults
;
pQuery
->
timeWindowInterpo
=
pQueryMsg
->
timeWindowInterpo
;
pQuery
->
queryBlockDist
=
pQueryMsg
->
queryBlockDist
;
pQuery
->
stabledev
=
pQueryMsg
->
stabledev
;
pQuery
->
tsCompQuery
=
pQueryMsg
->
tsCompQuery
;
pQuery
->
simpleAgg
=
pQueryMsg
->
simpleAgg
;
pQuery
->
pointInterpQuery
=
pQueryMsg
->
pointInterpQuery
;
pQuery
->
needReverseScan
=
pQueryMsg
->
needReverseScan
;
pQuery
->
colList
=
calloc
(
numOfCols
,
sizeof
(
SSingleColumnFilterInfo
));
pQuery
->
colList
=
calloc
(
numOfCols
,
sizeof
(
SSingleColumnFilterInfo
));
if
(
pQuery
->
colList
==
NULL
)
{
if
(
pQuery
->
colList
==
NULL
)
{
goto
_cleanup
;
goto
_cleanup
;
...
@@ -6197,7 +6206,7 @@ SQInfo* createQInfoImpl(SQueryTableMsg* pQueryMsg, SSqlGroupbyExpr* pGroupbyExpr
...
@@ -6197,7 +6206,7 @@ SQInfo* createQInfoImpl(SQueryTableMsg* pQueryMsg, SSqlGroupbyExpr* pGroupbyExpr
changeExecuteScanOrder
(
pQInfo
,
pQueryMsg
,
stableQuery
);
changeExecuteScanOrder
(
pQInfo
,
pQueryMsg
,
stableQuery
);
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
bool
groupByCol
=
isGroupbyColumn
(
pQuery
->
pGroupbyExpr
);
//
bool groupByCol = isGroupbyColumn(pQuery->pGroupbyExpr);
STimeWindow
window
=
pQuery
->
window
;
STimeWindow
window
=
pQuery
->
window
;
...
@@ -6218,7 +6227,7 @@ SQInfo* createQInfoImpl(SQueryTableMsg* pQueryMsg, SSqlGroupbyExpr* pGroupbyExpr
...
@@ -6218,7 +6227,7 @@ SQInfo* createQInfoImpl(SQueryTableMsg* pQueryMsg, SSqlGroupbyExpr* pGroupbyExpr
window
.
skey
=
info
->
lastKey
;
window
.
skey
=
info
->
lastKey
;
void
*
buf
=
(
char
*
)
pQInfo
->
pBuf
+
index
*
sizeof
(
STableQueryInfo
);
void
*
buf
=
(
char
*
)
pQInfo
->
pBuf
+
index
*
sizeof
(
STableQueryInfo
);
STableQueryInfo
*
item
=
createTableQueryInfo
(
pQuery
,
info
->
pTable
,
groupByCol
,
window
,
buf
);
STableQueryInfo
*
item
=
createTableQueryInfo
(
pQuery
,
info
->
pTable
,
pQuery
->
groupbyColumn
,
window
,
buf
);
if
(
item
==
NULL
)
{
if
(
item
==
NULL
)
{
goto
_cleanup
;
goto
_cleanup
;
}
}
...
@@ -6454,7 +6463,7 @@ int32_t doDumpQueryResult(SQInfo *pQInfo, char *data) {
...
@@ -6454,7 +6463,7 @@ int32_t doDumpQueryResult(SQInfo *pQInfo, char *data) {
SQuery
*
pQuery
=
pQInfo
->
runtimeEnv
.
pQuery
;
SQuery
*
pQuery
=
pQInfo
->
runtimeEnv
.
pQuery
;
// load data from file to msg buffer
// load data from file to msg buffer
if
(
isTsCompQuery
(
pQuery
)
)
{
if
(
pQuery
->
tsCompQuery
)
{
SColumnInfoData
*
pColInfoData
=
taosArrayGet
(
pRuntimeEnv
->
outputBuf
->
pDataBlock
,
0
);
SColumnInfoData
*
pColInfoData
=
taosArrayGet
(
pRuntimeEnv
->
outputBuf
->
pDataBlock
,
0
);
FILE
*
f
=
*
(
FILE
**
)
pColInfoData
->
pData
;
// TODO refactor
FILE
*
f
=
*
(
FILE
**
)
pColInfoData
->
pData
;
// TODO refactor
...
...
src/query/src/qPlan.c
浏览文件 @
0e0e6d5a
...
@@ -3,6 +3,39 @@
...
@@ -3,6 +3,39 @@
#include "qUtil.h"
#include "qUtil.h"
#include "texpr.h"
#include "texpr.h"
#define QNODE_PROJECT 1
#define QNODE_FILTER 2
#define QNODE_RELATION 3
#define QNODE_AGGREGATE 4
#define QNODE_GROUPBY 5
#define QNODE_LIMIT 6
#define QNODE_JOIN 7
#define QNODE_DIST 8
#define QNODE_SORT 9
#define QNODE_UNIONALL 10
#define QNODE_TIMEWINDOW 11
typedef
struct
SQueryNode
{
int32_t
type
;
// previous operator to generated result for current node to process
// in case of join, multiple prev nodes exist.
struct
SQueryNode
*
prevNode
;
}
SQueryNode
;
// TODO create the query plan
SQueryNode
*
qCreateQueryPlan
(
SQueryInfo
*
pQueryInfo
)
{
return
NULL
;
}
char
*
queryPlanToString
()
{
return
NULL
;
}
SQueryNode
*
queryPlanFromString
()
{
return
NULL
;
}
UNUSED_FUNC
SArray
*
createTableScanPlan
(
SQuery
*
pQuery
)
{
UNUSED_FUNC
SArray
*
createTableScanPlan
(
SQuery
*
pQuery
)
{
SArray
*
plan
=
taosArrayInit
(
4
,
sizeof
(
int32_t
));
SArray
*
plan
=
taosArrayInit
(
4
,
sizeof
(
int32_t
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录