Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
e67b532d
T
TDengine
项目概览
taosdata
/
TDengine
接近 2 年 前同步成功
通知
1191
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
e67b532d
编写于
5月 23, 2023
作者:
H
Haojun Liao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor: refactor the module dependency.
上级
f520de0d
变更
44
展开全部
隐藏空白更改
内联
并排
Showing
44 changed file
with
1480 addition
and
870 deletion
+1480
-870
include/common/tcommon.h
include/common/tcommon.h
+7
-0
include/libs/executor/executor.h
include/libs/executor/executor.h
+4
-3
include/libs/executor/storageapi.h
include/libs/executor/storageapi.h
+576
-0
include/libs/index/index.h
include/libs/index/index.h
+31
-0
include/libs/stream/streamState.h
include/libs/stream/streamState.h
+37
-47
include/libs/stream/tstreamFileState.h
include/libs/stream/tstreamFileState.h
+1
-8
include/libs/stream/tstreamUpdate.h
include/libs/stream/tstreamUpdate.h
+13
-13
source/dnode/qnode/CMakeLists.txt
source/dnode/qnode/CMakeLists.txt
+2
-0
source/dnode/qnode/src/qnode.c
source/dnode/qnode/src/qnode.c
+0
-1
source/dnode/snode/CMakeLists.txt
source/dnode/snode/CMakeLists.txt
+1
-0
source/dnode/vnode/inc/vnode.h
source/dnode/vnode/inc/vnode.h
+93
-97
source/dnode/vnode/src/inc/tsdb.h
source/dnode/vnode/src/inc/tsdb.h
+0
-3
source/dnode/vnode/src/meta/metaQuery.c
source/dnode/vnode/src/meta/metaQuery.c
+6
-6
source/dnode/vnode/src/meta/metaSnapshot.c
source/dnode/vnode/src/meta/metaSnapshot.c
+15
-15
source/dnode/vnode/src/tq/tqRead.c
source/dnode/vnode/src/tq/tqRead.c
+20
-5
source/libs/executor/CMakeLists.txt
source/libs/executor/CMakeLists.txt
+1
-1
source/libs/executor/inc/dataSinkInt.h
source/libs/executor/inc/dataSinkInt.h
+3
-1
source/libs/executor/inc/executil.h
source/libs/executor/inc/executil.h
+6
-6
source/libs/executor/inc/executorInt.h
source/libs/executor/inc/executorInt.h
+29
-22
source/libs/executor/inc/operator.h
source/libs/executor/inc/operator.h
+1
-1
source/libs/executor/inc/querytask.h
source/libs/executor/inc/querytask.h
+14
-14
source/libs/executor/src/aggregateoperator.c
source/libs/executor/src/aggregateoperator.c
+2
-1
source/libs/executor/src/cachescanoperator.c
source/libs/executor/src/cachescanoperator.c
+12
-10
source/libs/executor/src/dataInserter.c
source/libs/executor/src/dataInserter.c
+2
-2
source/libs/executor/src/executil.c
source/libs/executor/src/executil.c
+64
-60
source/libs/executor/src/executor.c
source/libs/executor/src/executor.c
+37
-30
source/libs/executor/src/executorInt.c
source/libs/executor/src/executorInt.c
+22
-119
source/libs/executor/src/filloperator.c
source/libs/executor/src/filloperator.c
+49
-36
source/libs/executor/src/groupoperator.c
source/libs/executor/src/groupoperator.c
+17
-10
source/libs/executor/src/operator.c
source/libs/executor/src/operator.c
+8
-6
source/libs/executor/src/projectoperator.c
source/libs/executor/src/projectoperator.c
+1
-0
source/libs/executor/src/querytask.c
source/libs/executor/src/querytask.c
+10
-8
source/libs/executor/src/scanoperator.c
source/libs/executor/src/scanoperator.c
+180
-174
source/libs/executor/src/sysscanoperator.c
source/libs/executor/src/sysscanoperator.c
+104
-87
source/libs/executor/src/timesliceoperator.c
source/libs/executor/src/timesliceoperator.c
+1
-0
source/libs/executor/src/timewindowoperator.c
source/libs/executor/src/timewindowoperator.c
+90
-64
source/libs/function/CMakeLists.txt
source/libs/function/CMakeLists.txt
+0
-1
source/libs/function/src/builtinsimpl.c
source/libs/function/src/builtinsimpl.c
+6
-6
source/libs/index/CMakeLists.txt
source/libs/index/CMakeLists.txt
+1
-1
source/libs/index/src/indexFilter.c
source/libs/index/src/indexFilter.c
+3
-2
source/libs/scalar/CMakeLists.txt
source/libs/scalar/CMakeLists.txt
+1
-0
source/libs/stream/inc/streamBackendRocksdb.h
source/libs/stream/inc/streamBackendRocksdb.h
+0
-1
source/libs/stream/src/streamBackendRocksdb.c
source/libs/stream/src/streamBackendRocksdb.c
+9
-9
source/libs/stream/src/tstreamFileState.c
source/libs/stream/src/tstreamFileState.c
+1
-0
未找到文件。
include/common/tcommon.h
浏览文件 @
e67b532d
...
...
@@ -37,6 +37,13 @@ extern "C" {
)
// clang-format on
typedef
bool
(
*
state_key_cmpr_fn
)(
void
*
pKey1
,
void
*
pKey2
);
typedef
struct
STableKeyInfo
{
uint64_t
uid
;
uint64_t
groupId
;
}
STableKeyInfo
;
typedef
struct
SWinKey
{
uint64_t
groupId
;
TSKEY
ts
;
...
...
include/libs/executor/executor.h
浏览文件 @
e67b532d
...
...
@@ -23,6 +23,7 @@ extern "C" {
#include "query.h"
#include "tcommon.h"
#include "tmsgcb.h"
#include "storageapi.h"
typedef
void
*
qTaskInfo_t
;
typedef
void
*
DataSinkHandle
;
...
...
@@ -51,10 +52,10 @@ typedef struct {
bool
initTableReader
;
bool
initTqReader
;
int32_t
numOfVgroups
;
void
*
sContext
;
// SSnapContext*
void
*
sContext
;
// SSnapContext*
void
*
pStateBackend
;
void
*
pStateBackend
;
struct
SStorageAPI
api
;
}
SReadHandle
;
// in queue mode, data streams are seperated by msg
...
...
include/libs/executor/storageapi.h
0 → 100644
浏览文件 @
e67b532d
此差异已折叠。
点击以展开。
include/libs/index/index.h
浏览文件 @
e67b532d
...
...
@@ -21,6 +21,7 @@
#include "taoserror.h"
#include "tarray.h"
#include "tglobal.h"
#include "tsdstorage.h"
#ifdef __cplusplus
extern
"C"
{
...
...
@@ -231,6 +232,36 @@ void indexInit(int32_t threads);
*/
void
indexCleanup
();
/**
* the underlying storage module must implement this API to employ the index functions.
* @param pMeta
* @param param
* @param results
* @return
*/
typedef
struct
SMetaFltParam
{
uint64_t
suid
;
int16_t
cid
;
int16_t
type
;
void
*
val
;
bool
reverse
;
bool
equal
;
int
(
*
filterFunc
)(
void
*
a
,
void
*
b
,
int16_t
type
);
}
SMetaFltParam
;
typedef
struct
SStoreAPI
{
int32_t
(
*
metaFilterTableIds
)();
int32_t
(
*
metaFilterCreateTime
)();
int32_t
(
*
metaFilterTableName
)();
int32_t
(
*
metaFilterTtl
)();
}
SStoreAPI
;
//int32_t metaFilterTableIds(void *pMeta, SMetaFltParam *param, SArray *results);
//int32_t metaFilterCreateTime(void *pMeta, SMetaFltParam *parm, SArray *pUids);
//int32_t metaFilterTableName(void *pMeta, SMetaFltParam *param, SArray *pUids);
//int32_t metaFilterTtl(void *pMeta, SMetaFltParam *param, SArray *pUids);
#ifdef __cplusplus
}
#endif
...
...
include/libs/stream/streamState.h
浏览文件 @
e67b532d
...
...
@@ -27,47 +27,37 @@
extern
"C"
{
#endif
#include "storageapi.h"
// void* streamBackendInit(const char* path);
// void streamBackendCleanup(void* arg);
// SListNode* streamBackendAddCompare(void* backend, void* arg);
// void streamBackendDelCompare(void* backend, void* arg);
typedef
bool
(
*
state_key_cmpr_fn
)(
void
*
pKey1
,
void
*
pKey2
);
typedef
struct
STdbState
{
rocksdb_t
*
rocksdb
;
rocksdb_column_family_handle_t
**
pHandle
;
rocksdb_writeoptions_t
*
writeOpts
;
rocksdb_readoptions_t
*
readOpts
;
rocksdb_options_t
**
cfOpts
;
rocksdb_options_t
*
dbOpt
;
struct
SStreamTask
*
pOwner
;
void
*
param
;
void
*
env
;
SListNode
*
pComparNode
;
void
*
pBackendHandle
;
char
idstr
[
64
];
void
*
compactFactory
;
TDB
*
db
;
TTB
*
pStateDb
;
TTB
*
pFuncStateDb
;
TTB
*
pFillStateDb
;
// todo refactor
TTB
*
pSessionStateDb
;
TTB
*
pParNameDb
;
TTB
*
pParTagDb
;
TXN
*
txn
;
}
STdbState
;
// incremental state storage
typedef
struct
{
STdbState
*
pTdbState
;
SStreamFileState
*
pFileState
;
int32_t
number
;
SSHashObj
*
parNameMap
;
int64_t
checkPointId
;
int32_t
taskId
;
int64_t
streamId
;
}
SStreamState
;
//typedef struct STdbState {
// rocksdb_t* rocksdb;
// rocksdb_column_family_handle_t** pHandle;
// rocksdb_writeoptions_t* writeOpts;
// rocksdb_readoptions_t* readOpts;
// rocksdb_options_t** cfOpts;
// rocksdb_options_t* dbOpt;
// struct SStreamTask* pOwner;
// void* param;
// void* env;
// SListNode* pComparNode;
// void* pBackendHandle;
// char idstr[64];
// void* compactFactory;
//
// TDB* db;
// TTB* pStateDb;
// TTB* pFuncStateDb;
// TTB* pFillStateDb; // todo refactor
// TTB* pSessionStateDb;
// TTB* pParNameDb;
// TTB* pParTagDb;
// TXN* txn;
//} STdbState;
SStreamState
*
streamStateOpen
(
char
*
path
,
struct
SStreamTask
*
pTask
,
bool
specPath
,
int32_t
szPage
,
int32_t
pages
);
void
streamStateClose
(
SStreamState
*
pState
,
bool
remove
);
...
...
@@ -76,15 +66,15 @@ int32_t streamStateCommit(SStreamState* pState);
void
streamStateDestroy
(
SStreamState
*
pState
,
bool
remove
);
int32_t
streamStateDeleteCheckPoint
(
SStreamState
*
pState
,
TSKEY
mark
);
typedef
struct
{
rocksdb_iterator_t
*
iter
;
rocksdb_snapshot_t
*
snapshot
;
rocksdb_readoptions_t
*
readOpt
;
rocksdb_t
*
db
;
TBC
*
pCur
;
int64_t
number
;
}
SStreamStateCur
;
//
typedef struct {
//
rocksdb_iterator_t* iter;
//
rocksdb_snapshot_t* snapshot;
//
rocksdb_readoptions_t* readOpt;
//
rocksdb_t* db;
//
//
TBC* pCur;
//
int64_t number;
//
} SStreamStateCur;
int32_t
streamStateFuncPut
(
SStreamState
*
pState
,
const
SWinKey
*
key
,
const
void
*
value
,
int32_t
vLen
);
int32_t
streamStateFuncGet
(
SStreamState
*
pState
,
const
SWinKey
*
key
,
void
**
ppVal
,
int32_t
*
pVLen
);
...
...
@@ -119,7 +109,7 @@ int32_t streamStateFillDel(SStreamState* pState, const SWinKey* key);
int32_t
streamStateAddIfNotExist
(
SStreamState
*
pState
,
const
SWinKey
*
key
,
void
**
pVal
,
int32_t
*
pVLen
);
int32_t
streamStateReleaseBuf
(
SStreamState
*
pState
,
const
SWinKey
*
key
,
void
*
pVal
);
void
streamFreeVal
(
void
*
val
);
void
stream
State
FreeVal
(
void
*
val
);
SStreamStateCur
*
streamStateGetAndCheckCur
(
SStreamState
*
pState
,
SWinKey
*
key
);
SStreamStateCur
*
streamStateSeekKeyNext
(
SStreamState
*
pState
,
const
SWinKey
*
key
);
...
...
include/libs/stream/tstreamFileState.h
浏览文件 @
e67b532d
...
...
@@ -21,23 +21,16 @@
#include "tarray.h"
#include "tdef.h"
#include "tlist.h"
#include "storageapi.h"
#ifdef __cplusplus
extern
"C"
{
#endif
typedef
struct
SStreamFileState
SStreamFileState
;
typedef
struct
SRowBuffPos
{
void
*
pRowBuff
;
void
*
pKey
;
bool
beFlushed
;
bool
beUsed
;
}
SRowBuffPos
;
typedef
SList
SStreamSnapshot
;
typedef
TSKEY
(
*
GetTsFun
)(
void
*
);
SStreamFileState
*
streamFileStateInit
(
int64_t
memSize
,
uint32_t
keySize
,
uint32_t
rowSize
,
uint32_t
selectRowSize
,
GetTsFun
fp
,
void
*
pFile
,
TSKEY
delMark
);
void
streamFileStateDestroy
(
SStreamFileState
*
pFileState
);
...
...
include/libs/stream/tstreamUpdate.h
浏览文件 @
e67b532d
...
...
@@ -19,7 +19,7 @@
#include "tarray.h"
#include "tcommon.h"
#include "tmsg.h"
#include "
tscalablebf
.h"
#include "
storageapi
.h"
#ifdef __cplusplus
extern
"C"
{
...
...
@@ -30,18 +30,18 @@ typedef struct SUpdateKey {
TSKEY
ts
;
}
SUpdateKey
;
typedef
struct
SUpdateInfo
{
SArray
*
pTsBuckets
;
uint64_t
numBuckets
;
SArray
*
pTsSBFs
;
uint64_t
numSBFs
;
int64_t
interval
;
int64_t
watermark
;
TSKEY
minTS
;
SScalableBf
*
pCloseWinSBF
;
SHashObj
*
pMap
;
uint64_t
maxDataVersion
;
}
SUpdateInfo
;
//
typedef struct SUpdateInfo {
//
SArray *pTsBuckets;
//
uint64_t numBuckets;
//
SArray *pTsSBFs;
//
uint64_t numSBFs;
//
int64_t interval;
//
int64_t watermark;
//
TSKEY minTS;
//
SScalableBf *pCloseWinSBF;
//
SHashObj *pMap;
//
uint64_t maxDataVersion;
//
} SUpdateInfo;
SUpdateInfo
*
updateInfoInitP
(
SInterval
*
pInterval
,
int64_t
watermark
);
SUpdateInfo
*
updateInfoInit
(
int64_t
interval
,
int32_t
precision
,
int64_t
watermark
);
...
...
source/dnode/qnode/CMakeLists.txt
浏览文件 @
e67b532d
...
...
@@ -14,4 +14,6 @@ target_link_libraries(
PRIVATE qworker
PRIVATE qcom
PRIVATE executor
PRIVATE tdb
PRIVATE wal
)
\ No newline at end of file
source/dnode/qnode/src/qnode.c
浏览文件 @
e67b532d
...
...
@@ -14,7 +14,6 @@
*/
#include "executor.h"
#include "libs/function/function.h"
#include "qndInt.h"
#include "query.h"
#include "qworker.h"
...
...
source/dnode/snode/CMakeLists.txt
浏览文件 @
e67b532d
...
...
@@ -14,4 +14,5 @@ target_link_libraries(
PRIVATE util
PRIVATE qcom
PRIVATE stream
PRIVATE wal
)
source/dnode/vnode/inc/vnode.h
浏览文件 @
e67b532d
...
...
@@ -33,6 +33,7 @@
#include "trow.h"
#include "tdb.h"
#include "storageapi.h"
#ifdef __cplusplus
extern
"C"
{
...
...
@@ -132,28 +133,28 @@ int32_t metaPutTbGroupToCache(SMeta* pMeta, uint64_t suid, const void* pKey, in
int64_t
metaGetTbNum
(
SMeta
*
pMeta
);
int64_t
metaGetNtbNum
(
SMeta
*
pMeta
);
typedef
struct
{
int64_t
uid
;
int64_t
ctbNum
;
}
SMetaStbStats
;
//
typedef struct {
//
int64_t uid;
//
int64_t ctbNum;
//
} SMetaStbStats;
int32_t
metaGetStbStats
(
SMeta
*
pMeta
,
int64_t
uid
,
SMetaStbStats
*
pInfo
);
typedef
struct
SMetaFltParam
{
tb_uid_t
suid
;
int16_t
cid
;
int16_t
type
;
void
*
val
;
bool
reverse
;
bool
equal
;
int
(
*
filterFunc
)(
void
*
a
,
void
*
b
,
int16_t
type
);
}
SMetaFltParam
;
//
typedef struct SMetaFltParam {
//
tb_uid_t suid;
//
int16_t cid;
//
int16_t type;
//
void *val;
//
bool reverse;
//
bool equal;
//
int (*filterFunc)(void *a, void *b, int16_t type);
//
//
} SMetaFltParam;
// TODO, refactor later
int32_t
metaFilterTableIds
(
SMeta
*
pMeta
,
SMetaFltParam
*
param
,
SArray
*
results
);
int32_t
metaFilterCreateTime
(
SMeta
*
pMeta
,
SMetaFltParam
*
parm
,
SArray
*
pUids
);
int32_t
metaFilterTableName
(
SMeta
*
pMeta
,
SMetaFltParam
*
param
,
SArray
*
pUids
);
int32_t
metaFilterTtl
(
SMeta
*
pMeta
,
SMetaFltParam
*
param
,
SArray
*
pUids
);
//
int32_t metaFilterTableIds(SMeta *pMeta, SMetaFltParam *param, SArray *results);
//
int32_t metaFilterCreateTime(SMeta *pMeta, SMetaFltParam *parm, SArray *pUids);
//
int32_t metaFilterTableName(SMeta *pMeta, SMetaFltParam *param, SArray *pUids);
//
int32_t metaFilterTtl(SMeta *pMeta, SMetaFltParam *param, SArray *pUids);
#if 1 // refact APIs below (TODO)
typedef
SVCreateTbReq
STbCfg
;
...
...
@@ -213,32 +214,32 @@ size_t tsdbCacheGetCapacity(SVnode *pVnode);
size_t
tsdbCacheGetUsage
(
SVnode
*
pVnode
);
int32_t
tsdbCacheGetElems
(
SVnode
*
pVnode
);
// tq
typedef
struct
SMetaTableInfo
{
int64_t
suid
;
int64_t
uid
;
SSchemaWrapper
*
schema
;
char
tbName
[
TSDB_TABLE_NAME_LEN
];
}
SMetaTableInfo
;
//
//
tq
//
typedef struct SMetaTableInfo {
//
int64_t suid;
//
int64_t uid;
//
SSchemaWrapper *schema;
//
char tbName[TSDB_TABLE_NAME_LEN];
//
} SMetaTableInfo;
typedef
struct
SIdInfo
{
int64_t
version
;
int32_t
index
;
}
SIdInfo
;
typedef
struct
SSnapContext
{
SMeta
*
pMeta
;
int64_t
snapVersion
;
TBC
*
pCur
;
int64_t
suid
;
int8_t
subType
;
SHashObj
*
idVersion
;
SHashObj
*
suidInfo
;
SArray
*
idList
;
int32_t
index
;
bool
withMeta
;
bool
queryMeta
;
// true-get meta, false-get data
}
SSnapContext
;
//
typedef struct SSnapContext {
//
SMeta *pMeta;
//
int64_t snapVersion;
//
TBC *pCur;
//
int64_t suid;
//
int8_t subType;
//
SHashObj *idVersion;
//
SHashObj *suidInfo;
//
SArray *idList;
//
int32_t index;
//
bool withMeta;
//
bool queryMeta; // true-get meta, false-get data
//
} SSnapContext;
typedef
struct
STqReader
{
SPackedData
msg
;
...
...
@@ -271,7 +272,7 @@ bool tqNextBlockImpl(STqReader *pReader, const char* idstr);
int32_t
extractMsgFromWal
(
SWalReader
*
pReader
,
void
**
pItem
,
const
char
*
id
);
int32_t
tqReaderSetSubmitMsg
(
STqReader
*
pReader
,
void
*
msgStr
,
int32_t
msgLen
,
int64_t
ver
);
bool
tqNextDataBlockFilterOut
(
STqReader
*
pReader
,
SHashObj
*
filterOutUids
);
int32_t
tqRetrieveDataBlock
(
STqReader
*
pReader
,
const
char
*
idstr
);
int32_t
tqRetrieveDataBlock
(
STqReader
*
pReader
,
SSDataBlock
**
pRes
,
const
char
*
idstr
);
int32_t
tqRetrieveTaosxBlock
(
STqReader
*
pReader
,
SArray
*
blocks
,
SArray
*
schemas
,
SSubmitTbData
**
pSubmitTbDataRet
);
int32_t
vnodeEnqueueStreamMsg
(
SVnode
*
pVnode
,
SRpcMsg
*
pMsg
);
...
...
@@ -350,67 +351,62 @@ struct SVnodeCfg {
int32_t
tsdbPageSize
;
};
typedef
struct
{
uint64_t
uid
;
uint64_t
groupId
;
}
STableKeyInfo
;
#define TABLE_ROLLUP_ON ((int8_t)0x1)
#define TABLE_IS_ROLLUP(FLG) (((FLG) & (TABLE_ROLLUP_ON)) != 0)
#define TABLE_SET_ROLLUP(FLG) ((FLG) |= TABLE_ROLLUP_ON)
struct
SMetaEntry
{
int64_t
version
;
int8_t
type
;
int8_t
flags
;
// TODO: need refactor?
tb_uid_t
uid
;
char
*
name
;
union
{
struct
{
SSchemaWrapper
schemaRow
;
SSchemaWrapper
schemaTag
;
SRSmaParam
rsmaParam
;
}
stbEntry
;
struct
{
int64_t
ctime
;
int32_t
ttlDays
;
int32_t
commentLen
;
char
*
comment
;
tb_uid_t
suid
;
uint8_t
*
pTags
;
}
ctbEntry
;
struct
{
int64_t
ctime
;
int32_t
ttlDays
;
int32_t
commentLen
;
char
*
comment
;
int32_t
ncid
;
// next column id
SSchemaWrapper
schemaRow
;
}
ntbEntry
;
struct
{
STSma
*
tsma
;
}
smaEntry
;
};
uint8_t
*
pBuf
;
};
struct
SMetaReader
{
int32_t
flags
;
SMeta
*
pMeta
;
SDecoder
coder
;
SMetaEntry
me
;
void
*
pBuf
;
int32_t
szBuf
;
};
struct
SMTbCursor
{
TBC
*
pDbc
;
void
*
pKey
;
void
*
pVal
;
int32_t
kLen
;
int32_t
vLen
;
SMetaReader
mr
;
};
//
struct SMetaEntry {
//
int64_t version;
//
int8_t type;
//
int8_t flags; // TODO: need refactor?
//
tb_uid_t uid;
//
char *name;
//
union {
//
struct {
//
SSchemaWrapper schemaRow;
//
SSchemaWrapper schemaTag;
//
SRSmaParam rsmaParam;
//
} stbEntry;
//
struct {
//
int64_t ctime;
//
int32_t ttlDays;
//
int32_t commentLen;
//
char *comment;
//
tb_uid_t suid;
//
uint8_t *pTags;
//
} ctbEntry;
//
struct {
//
int64_t ctime;
//
int32_t ttlDays;
//
int32_t commentLen;
//
char *comment;
//
int32_t ncid; // next column id
//
SSchemaWrapper schemaRow;
//
} ntbEntry;
//
struct {
//
STSma *tsma;
//
} smaEntry;
//
};
//
//
uint8_t *pBuf;
//
};
//
struct SMetaReader {
//
int32_t flags;
//
SMeta *pMeta;
//
SDecoder coder;
//
SMetaEntry me;
//
void *pBuf;
//
int32_t szBuf;
//
};
//
struct SMTbCursor {
//
TBC *pDbc;
//
void *pKey;
//
void *pVal;
//
int32_t kLen;
//
int32_t vLen;
//
SMetaReader mr;
//
};
#ifdef __cplusplus
}
...
...
source/dnode/vnode/src/inc/tsdb.h
浏览文件 @
e67b532d
...
...
@@ -844,9 +844,6 @@ int32_t tsdbCacheDeleteLastrow(SLRUCache *pCache, tb_uid_t uid, TSKEY eKey);
int32_t
tsdbCacheDeleteLast
(
SLRUCache
*
pCache
,
tb_uid_t
uid
,
TSKEY
eKey
);
int32_t
tsdbCacheDelete
(
SLRUCache
*
pCache
,
tb_uid_t
uid
,
TSKEY
eKey
);
void
tsdbCacheSetCapacity
(
SVnode
*
pVnode
,
size_t
capacity
);
size_t
tsdbCacheGetCapacity
(
SVnode
*
pVnode
);
// int32_t tsdbCacheLastArray2Row(SArray *pLastArray, STSRow **ppRow, STSchema *pSchema);
// ========== inline functions ==========
...
...
source/dnode/vnode/src/meta/metaQuery.c
浏览文件 @
e67b532d
...
...
@@ -249,7 +249,7 @@ int metaGetTableUidByName(void *meta, char *tbName, uint64_t *uid) {
SMetaReader
*
pReader
=
&
mr
;
// query name.idx
if
(
tdbTbGet
(
pReader
->
pMeta
->
pNameIdx
,
tbName
,
strlen
(
tbName
)
+
1
,
&
pReader
->
pBuf
,
&
pReader
->
szBuf
)
<
0
)
{
if
(
tdbTbGet
(
((
SMeta
*
)
pReader
->
pMeta
)
->
pNameIdx
,
tbName
,
strlen
(
tbName
)
+
1
,
&
pReader
->
pBuf
,
&
pReader
->
szBuf
)
<
0
)
{
terrno
=
TSDB_CODE_PAR_TABLE_NOT_EXIST
;
metaReaderClear
(
&
mr
);
return
-
1
;
...
...
@@ -293,9 +293,9 @@ SMTbCursor *metaOpenTbCursor(SMeta *pMeta) {
metaReaderInit
(
&
pTbCur
->
mr
,
pMeta
,
0
);
tdbTbcOpen
(
pMeta
->
pUidIdx
,
&
pTbCur
->
pDbc
,
NULL
);
tdbTbcOpen
(
pMeta
->
pUidIdx
,
(
TBC
**
)
&
pTbCur
->
pDbc
,
NULL
);
tdbTbcMoveToFirst
(
pTbCur
->
pDbc
);
tdbTbcMoveToFirst
(
(
TBC
*
)
pTbCur
->
pDbc
);
return
pTbCur
;
}
...
...
@@ -306,7 +306,7 @@ void metaCloseTbCursor(SMTbCursor *pTbCur) {
tdbFree
(
pTbCur
->
pVal
);
metaReaderClear
(
&
pTbCur
->
mr
);
if
(
pTbCur
->
pDbc
)
{
tdbTbcClose
(
pTbCur
->
pDbc
);
tdbTbcClose
(
(
TBC
*
)
pTbCur
->
pDbc
);
}
taosMemoryFree
(
pTbCur
);
}
...
...
@@ -318,7 +318,7 @@ int32_t metaTbCursorNext(SMTbCursor *pTbCur, ETableType jumpTableType) {
STbCfg
tbCfg
;
for
(;;)
{
ret
=
tdbTbcNext
(
pTbCur
->
pDbc
,
&
pTbCur
->
pKey
,
&
pTbCur
->
kLen
,
&
pTbCur
->
pVal
,
&
pTbCur
->
vLen
);
ret
=
tdbTbcNext
(
(
TBC
*
)
pTbCur
->
pDbc
,
&
pTbCur
->
pKey
,
&
pTbCur
->
kLen
,
&
pTbCur
->
pVal
,
&
pTbCur
->
vLen
);
if
(
ret
<
0
)
{
return
-
1
;
}
...
...
@@ -342,7 +342,7 @@ int32_t metaTbCursorPrev(SMTbCursor *pTbCur, ETableType jumpTableType) {
STbCfg
tbCfg
;
for
(;;)
{
ret
=
tdbTbcPrev
(
pTbCur
->
pDbc
,
&
pTbCur
->
pKey
,
&
pTbCur
->
kLen
,
&
pTbCur
->
pVal
,
&
pTbCur
->
vLen
);
ret
=
tdbTbcPrev
(
(
TBC
*
)
pTbCur
->
pDbc
,
&
pTbCur
->
pKey
,
&
pTbCur
->
kLen
,
&
pTbCur
->
pVal
,
&
pTbCur
->
vLen
);
if
(
ret
<
0
)
{
return
-
1
;
}
...
...
source/dnode/vnode/src/meta/metaSnapshot.c
浏览文件 @
e67b532d
...
...
@@ -222,29 +222,29 @@ static void destroySTableInfoForChildTable(void* data) {
}
static
void
MoveToSnapShotVersion
(
SSnapContext
*
ctx
)
{
tdbTbcClose
(
ctx
->
pCur
);
tdbTbcOpen
(
ctx
->
pMeta
->
pTbDb
,
&
ctx
->
pCur
,
NULL
);
tdbTbcClose
(
(
TBC
*
)
ctx
->
pCur
);
tdbTbcOpen
(
ctx
->
pMeta
->
pTbDb
,
(
TBC
**
)
&
ctx
->
pCur
,
NULL
);
STbDbKey
key
=
{.
version
=
ctx
->
snapVersion
,
.
uid
=
INT64_MAX
};
int
c
=
0
;
tdbTbcMoveTo
(
ctx
->
pCur
,
&
key
,
sizeof
(
key
),
&
c
);
tdbTbcMoveTo
(
(
TBC
*
)
ctx
->
pCur
,
&
key
,
sizeof
(
key
),
&
c
);
if
(
c
<
0
)
{
tdbTbcMoveToPrev
(
ctx
->
pCur
);
tdbTbcMoveToPrev
(
(
TBC
*
)
ctx
->
pCur
);
}
}
static
int32_t
MoveToPosition
(
SSnapContext
*
ctx
,
int64_t
ver
,
int64_t
uid
)
{
tdbTbcClose
(
ctx
->
pCur
);
tdbTbcOpen
(
ctx
->
pMeta
->
pTbDb
,
&
ctx
->
pCur
,
NULL
);
tdbTbcClose
(
(
TBC
*
)
ctx
->
pCur
);
tdbTbcOpen
(
ctx
->
pMeta
->
pTbDb
,
(
TBC
**
)
&
ctx
->
pCur
,
NULL
);
STbDbKey
key
=
{.
version
=
ver
,
.
uid
=
uid
};
int
c
=
0
;
tdbTbcMoveTo
(
ctx
->
pCur
,
&
key
,
sizeof
(
key
),
&
c
);
tdbTbcMoveTo
(
(
TBC
*
)
ctx
->
pCur
,
&
key
,
sizeof
(
key
),
&
c
);
return
c
;
}
static
void
MoveToFirst
(
SSnapContext
*
ctx
)
{
tdbTbcClose
(
ctx
->
pCur
);
tdbTbcOpen
(
ctx
->
pMeta
->
pTbDb
,
&
ctx
->
pCur
,
NULL
);
tdbTbcMoveToFirst
(
ctx
->
pCur
);
tdbTbcClose
(
(
TBC
*
)
ctx
->
pCur
);
tdbTbcOpen
(
ctx
->
pMeta
->
pTbDb
,
(
TBC
**
)
&
ctx
->
pCur
,
NULL
);
tdbTbcMoveToFirst
(
(
TBC
*
)
ctx
->
pCur
);
}
static
void
saveSuperTableInfoForChildTable
(
SMetaEntry
*
me
,
SHashObj
*
suidInfo
)
{
...
...
@@ -291,7 +291,7 @@ int32_t buildSnapContext(SMeta* pMeta, int64_t snapVersion, int64_t suid, int8_t
metaDebug
(
"tmqsnap init snapVersion:%"
PRIi64
,
ctx
->
snapVersion
);
MoveToFirst
(
ctx
);
while
(
1
)
{
int32_t
ret
=
tdbTbcNext
(
ctx
->
pCur
,
&
pKey
,
&
kLen
,
&
pVal
,
&
vLen
);
int32_t
ret
=
tdbTbcNext
(
(
TBC
*
)
ctx
->
pCur
,
&
pKey
,
&
kLen
,
&
pVal
,
&
vLen
);
if
(
ret
<
0
)
break
;
STbDbKey
*
tmp
=
(
STbDbKey
*
)
pKey
;
if
(
tmp
->
version
>
ctx
->
snapVersion
)
break
;
...
...
@@ -329,7 +329,7 @@ int32_t buildSnapContext(SMeta* pMeta, int64_t snapVersion, int64_t suid, int8_t
MoveToSnapShotVersion
(
ctx
);
while
(
1
)
{
int32_t
ret
=
tdbTbcPrev
(
ctx
->
pCur
,
&
pKey
,
&
kLen
,
&
pVal
,
&
vLen
);
int32_t
ret
=
tdbTbcPrev
(
(
TBC
*
)
ctx
->
pCur
,
&
pKey
,
&
kLen
,
&
pVal
,
&
vLen
);
if
(
ret
<
0
)
break
;
STbDbKey
*
tmp
=
(
STbDbKey
*
)
pKey
;
...
...
@@ -378,7 +378,7 @@ int32_t buildSnapContext(SMeta* pMeta, int64_t snapVersion, int64_t suid, int8_t
}
int32_t
destroySnapContext
(
SSnapContext
*
ctx
)
{
tdbTbcClose
(
ctx
->
pCur
);
tdbTbcClose
(
(
TBC
*
)
ctx
->
pCur
);
taosArrayDestroy
(
ctx
->
idList
);
taosHashCleanup
(
ctx
->
idVersion
);
taosHashCleanup
(
ctx
->
suidInfo
);
...
...
@@ -496,7 +496,7 @@ int32_t getMetafromSnapShot(SSnapContext* ctx, void** pBuf, int32_t* contLen, in
metaDebug
(
"tmqsnap get meta not exist uid:%"
PRIi64
" version:%"
PRIi64
,
*
uid
,
idInfo
->
version
);
}
tdbTbcGet
(
ctx
->
pCur
,
(
const
void
**
)
&
pKey
,
&
kLen
,
(
const
void
**
)
&
pVal
,
&
vLen
);
tdbTbcGet
(
(
TBC
*
)
ctx
->
pCur
,
(
const
void
**
)
&
pKey
,
&
kLen
,
(
const
void
**
)
&
pVal
,
&
vLen
);
SDecoder
dc
=
{
0
};
SMetaEntry
me
=
{
0
};
tDecoderInit
(
&
dc
,
pVal
,
vLen
);
...
...
@@ -622,7 +622,7 @@ SMetaTableInfo getUidfromSnapShot(SSnapContext* ctx) {
metaDebug
(
"tmqsnap getUidfromSnapShot not exist uid:%"
PRIi64
" version:%"
PRIi64
,
*
uidTmp
,
idInfo
->
version
);
continue
;
}
tdbTbcGet
(
ctx
->
pCur
,
(
const
void
**
)
&
pKey
,
&
kLen
,
(
const
void
**
)
&
pVal
,
&
vLen
);
tdbTbcGet
(
(
TBC
*
)
ctx
->
pCur
,
(
const
void
**
)
&
pKey
,
&
kLen
,
(
const
void
**
)
&
pVal
,
&
vLen
);
SDecoder
dc
=
{
0
};
SMetaEntry
me
=
{
0
};
tDecoderInit
(
&
dc
,
pVal
,
vLen
);
...
...
source/dnode/vnode/src/tq/tqRead.c
浏览文件 @
e67b532d
...
...
@@ -394,8 +394,9 @@ bool tqNextBlockInWal(STqReader* pReader, const char* id) {
SSubmitTbData
*
pSubmitTbData
=
taosArrayGet
(
pReader
->
submit
.
aSubmitTbData
,
pReader
->
nextBlk
);
if
(
pReader
->
tbIdHash
==
NULL
)
{
int32_t
code
=
tqRetrieveDataBlock
(
pReader
,
NULL
);
if
(
code
==
TSDB_CODE_SUCCESS
&&
pReader
->
pResBlock
->
info
.
rows
>
0
)
{
SSDataBlock
*
pRes
=
NULL
;
int32_t
code
=
tqRetrieveDataBlock
(
pReader
,
&
pRes
,
NULL
);
if
(
code
==
TSDB_CODE_SUCCESS
&&
pRes
->
info
.
rows
>
0
)
{
return
true
;
}
}
...
...
@@ -404,8 +405,9 @@ bool tqNextBlockInWal(STqReader* pReader, const char* id) {
if
(
ret
!=
NULL
)
{
tqDebug
(
"tq reader return submit block, uid:%"
PRId64
", ver:%"
PRId64
,
pSubmitTbData
->
uid
,
pReader
->
msg
.
ver
);
int32_t
code
=
tqRetrieveDataBlock
(
pReader
,
NULL
);
if
(
code
==
TSDB_CODE_SUCCESS
&&
pReader
->
pResBlock
->
info
.
rows
>
0
)
{
SSDataBlock
*
pRes
=
NULL
;
int32_t
code
=
tqRetrieveDataBlock
(
pReader
,
&
pRes
,
NULL
);
if
(
code
==
TSDB_CODE_SUCCESS
&&
pRes
->
info
.
rows
>
0
)
{
return
true
;
}
}
else
{
...
...
@@ -440,6 +442,11 @@ int32_t tqReaderSetSubmitMsg(STqReader* pReader, void* msgStr, int32_t msgLen, i
return
0
;
}
SWalReader
*
tqGetWalReader
(
STqReader
*
pReader
)
{
return
pReader
->
pWalReader
;
}
bool
tqNextBlockImpl
(
STqReader
*
pReader
,
const
char
*
idstr
)
{
if
(
pReader
->
msg
.
msgStr
==
NULL
)
{
return
false
;
...
...
@@ -592,7 +599,7 @@ static int32_t doSetVal(SColumnInfoData* pColumnInfoData, int32_t rowIndex, SCol
return
code
;
}
int32_t
tqRetrieveDataBlock
(
STqReader
*
pReader
,
const
char
*
id
)
{
int32_t
tqRetrieveDataBlock
(
STqReader
*
pReader
,
SSDataBlock
**
pRes
,
const
char
*
id
)
{
tqDebug
(
"tq reader retrieve data block %p, index:%d"
,
pReader
->
msg
.
msgStr
,
pReader
->
nextBlk
);
SSubmitTbData
*
pSubmitTbData
=
taosArrayGet
(
pReader
->
submit
.
aSubmitTbData
,
pReader
->
nextBlk
++
);
...
...
@@ -1024,6 +1031,14 @@ int tqReaderAddTbUidList(STqReader* pReader, const SArray* pTableUidList) {
return
0
;
}
bool
tqReaderIsQueriedTable
(
STqReader
*
pReader
,
uint64_t
uid
)
{
return
taosHashGet
(
pReader
->
tbIdHash
,
&
uid
,
sizeof
(
uint64_t
));
}
bool
tqCurrentBlockConsumed
(
const
STqReader
*
pReader
)
{
return
pReader
->
msg
.
msgStr
==
NULL
;
}
int
tqReaderRemoveTbUidList
(
STqReader
*
pReader
,
const
SArray
*
tbUidList
)
{
for
(
int32_t
i
=
0
;
i
<
taosArrayGetSize
(
tbUidList
);
i
++
)
{
int64_t
*
pKey
=
(
int64_t
*
)
taosArrayGet
(
tbUidList
,
i
);
...
...
source/libs/executor/CMakeLists.txt
浏览文件 @
e67b532d
...
...
@@ -3,7 +3,7 @@ aux_source_directory(src EXECUTOR_SRC)
add_library
(
executor STATIC
${
EXECUTOR_SRC
}
)
target_link_libraries
(
executor
PRIVATE os util common function parser planner qcom
vnode scalar nodes index
PRIVATE os util common function parser planner qcom
scalar nodes index wal tdb
)
target_include_directories
(
...
...
source/libs/executor/inc/dataSinkInt.h
浏览文件 @
e67b532d
...
...
@@ -22,13 +22,15 @@ extern "C" {
#include "dataSinkMgt.h"
#include "plannodes.h"
#include "storageapi.h"
#include "tcommon.h"
struct
SDataSink
;
struct
SDataSinkHandle
;
typedef
struct
SDataSinkManager
{
SDataSinkMgtCfg
cfg
;
SDataSinkMgtCfg
cfg
;
SStorageAPI
storeFn
;
}
SDataSinkManager
;
typedef
int32_t
(
*
FPutDataBlock
)(
struct
SDataSinkHandle
*
pHandle
,
const
SInputData
*
pInput
,
bool
*
pContinue
);
...
...
source/libs/executor/inc/executil.h
浏览文件 @
e67b532d
...
...
@@ -12,17 +12,17 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef TDENGINE_
QUERY
UTIL_H
#define TDENGINE_
QUERY
UTIL_H
#ifndef TDENGINE_
EXEC
UTIL_H
#define TDENGINE_
EXEC
UTIL_H
#include "executor.h"
#include "function.h"
#include "nodes.h"
#include "plannodes.h"
#include "storageapi.h"
#include "tcommon.h"
#include "tpagedbuf.h"
#include "tsimplehash.h"
#include "vnode.h"
#define T_LONG_JMP(_obj, _c) \
do { \
...
...
@@ -154,7 +154,7 @@ int32_t getNumOfTotalRes(SGroupResInfo* pGroupResInfo);
SSDataBlock
*
createDataBlockFromDescNode
(
SDataBlockDescNode
*
pNode
);
EDealRes
doTranslateTagExpr
(
SNode
**
pNode
,
void
*
pContext
);
int32_t
getGroupIdFromTagsVal
(
void
*
p
Meta
,
uint64_t
uid
,
SNodeList
*
pGroupNode
,
char
*
keyBuf
,
uint64_t
*
pGroupId
);
int32_t
getGroupIdFromTagsVal
(
void
*
p
Vnode
,
uint64_t
uid
,
SNodeList
*
pGroupNode
,
char
*
keyBuf
,
uint64_t
*
pGroupId
,
SStorageAPI
*
pAPI
);
size_t
getTableTagsBufLen
(
const
SNodeList
*
pGroups
);
SArray
*
createSortInfo
(
SNodeList
*
pNodeList
);
...
...
@@ -178,8 +178,8 @@ void cleanupQueryTableDataCond(SQueryTableDataCond* pCond);
int32_t
convertFillType
(
int32_t
mode
);
int32_t
resultrowComparAsc
(
const
void
*
p1
,
const
void
*
p2
);
int32_t
isQualifiedTable
(
STableKeyInfo
*
info
,
SNode
*
pTagCond
,
void
*
metaHandle
,
bool
*
pQualified
);
int32_t
isQualifiedTable
(
STableKeyInfo
*
info
,
SNode
*
pTagCond
,
void
*
metaHandle
,
bool
*
pQualified
,
SStorageAPI
*
pAPI
);
void
printDataBlock
(
SSDataBlock
*
pBlock
,
const
char
*
flag
);
#endif // TDENGINE_
QUERY
UTIL_H
#endif // TDENGINE_
EXEC
UTIL_H
source/libs/executor/inc/executorInt.h
浏览文件 @
e67b532d
...
...
@@ -38,13 +38,15 @@ extern "C" {
#include "tlockfree.h"
#include "tmsg.h"
#include "tpagedbuf.h"
#include "tstream.h"
#include "tstreamUpdate.h"
#include "vnode.h"
//#include "tstream.h"
//#include "tstreamUpdate.h"
#include "tlrucache.h"
typedef
int32_t
(
*
__block_search_fn_t
)(
char
*
data
,
int32_t
num
,
int64_t
key
,
int32_t
order
);
typedef
struct
STsdbReader
STsdbReader
;
typedef
struct
STqReader
STqReader
;
#define IS_VALID_SESSION_WIN(winInfo) ((winInfo).sessionWin.win.skey > 0)
#define SET_SESSION_WIN_INVALID(winInfo) ((winInfo).sessionWin.win.skey = INT64_MIN)
#define IS_INVALID_SESSION_WIN_KEY(winKey) ((winKey).win.skey <= 0)
...
...
@@ -206,6 +208,7 @@ typedef struct STableScanBase {
SLimitInfo
limitInfo
;
// there are more than one table list exists in one task, if only one vnode exists.
STableListInfo
*
pTableListInfo
;
SStoreDataReaderFn
readerAPI
;
}
STableScanBase
;
typedef
struct
STableScanInfo
{
...
...
@@ -221,6 +224,7 @@ typedef struct STableScanInfo {
int8_t
assignBlockUid
;
bool
hasGroupByTag
;
bool
countOnly
;
SStoreDataReaderFn
readerAPI
;
}
STableScanInfo
;
typedef
struct
STableMergeScanInfo
{
...
...
@@ -280,6 +284,7 @@ typedef struct SStreamAggSupporter {
int32_t
stateKeySize
;
int16_t
stateKeyType
;
SDiskbasedBuf
*
pResultBuf
;
SStateStore
stateStore
;
}
SStreamAggSupporter
;
typedef
struct
SWindowSupporter
{
...
...
@@ -335,7 +340,7 @@ typedef struct SStreamScanInfo {
STqReader
*
tqReader
;
uint64_t
groupId
;
SUpdateInfo
*
pUpdateInfo
;
struct
SUpdateInfo
*
pUpdateInfo
;
EStreamScanMode
scanMode
;
struct
SOperatorInfo
*
pStreamScanOp
;
...
...
@@ -366,15 +371,18 @@ typedef struct SStreamScanInfo {
SSDataBlock
*
pCreateTbRes
;
int8_t
igCheckUpdate
;
int8_t
igExpired
;
SStreamState
*
pState
;
void
*
pState
;
//void
SStoreTqReaderFn
readerFn
;
SStateStore
stateStore
;
}
SStreamScanInfo
;
typedef
struct
{
SVnode
*
vnode
;
SSDataBlock
pRes
;
// result SSDataBlock
STsdbReader
*
dataReader
;
SSnapContext
*
sContext
;
STableListInfo
*
pTableListInfo
;
struct
SVnode
*
vnode
;
// todo remove this
SSDataBlock
pRes
;
// result SSDataBlock
STsdbReader
*
dataReader
;
struct
SSnapContext
*
sContext
;
SStorageAPI
*
pAPI
;
STableListInfo
*
pTableListInfo
;
}
SStreamRawScanInfo
;
typedef
struct
STableCountScanSupp
{
...
...
@@ -441,12 +449,13 @@ typedef struct SStreamIntervalOperatorInfo {
bool
isFinal
;
SArray
*
pChildren
;
int32_t
numOfChild
;
SStreamState
*
pState
;
SStreamState
*
pState
;
// void
SWinKey
delKey
;
uint64_t
numOfDatapack
;
SArray
*
pUpdated
;
SSHashObj
*
pUpdatedMap
;
int64_t
dataVersion
;
SStateStore
statestore
;
}
SStreamIntervalOperatorInfo
;
typedef
struct
SDataGroupInfo
{
...
...
@@ -543,6 +552,7 @@ typedef struct SStreamFillSupporter {
int32_t
rowSize
;
SSHashObj
*
pResMap
;
bool
hasDelete
;
SStorageAPI
*
pAPI
;
}
SStreamFillSupporter
;
typedef
struct
SStreamFillOperatorInfo
{
...
...
@@ -636,7 +646,7 @@ bool isInTimeWindow(STimeWindow* pWin, TSKEY ts, int64_t gap);
bool
functionNeedToExecute
(
SqlFunctionCtx
*
pCtx
);
bool
isOverdue
(
TSKEY
ts
,
STimeWindowAggSupp
*
pSup
);
bool
isCloseWindow
(
STimeWindow
*
pWin
,
STimeWindowAggSupp
*
pSup
);
bool
isDeletedStreamWindow
(
STimeWindow
*
pWin
,
uint64_t
groupId
,
SStreamState
*
pState
,
STimeWindowAggSupp
*
pTwSup
);
bool
isDeletedStreamWindow
(
STimeWindow
*
pWin
,
uint64_t
groupId
,
void
*
pState
,
STimeWindowAggSupp
*
pTwSup
,
SStateStore
*
pStore
);
void
appendOneRowToStreamSpecialBlock
(
SSDataBlock
*
pBlock
,
TSKEY
*
pStartTs
,
TSKEY
*
pEndTs
,
uint64_t
*
pUid
,
uint64_t
*
pGp
,
void
*
pTbName
);
uint64_t
calGroupIdByData
(
SPartitionBySupporter
*
pParSup
,
SExprSupp
*
pExprSup
,
SSDataBlock
*
pBlock
,
int32_t
rowId
);
...
...
@@ -645,20 +655,17 @@ int32_t finalizeResultRows(SDiskbasedBuf* pBuf, SResultRowPosition* resultRowPos
SSDataBlock
*
pBlock
,
SExecTaskInfo
*
pTaskInfo
);
bool
groupbyTbname
(
SNodeList
*
pGroupList
);
int32_t
buildDataBlockFromGroupRes
(
struct
SOperatorInfo
*
pOperator
,
SStreamState
*
pState
,
SSDataBlock
*
pBlock
,
SExprSupp
*
pSup
,
int32_t
buildDataBlockFromGroupRes
(
struct
SOperatorInfo
*
pOperator
,
void
*
pState
,
SSDataBlock
*
pBlock
,
SExprSupp
*
pSup
,
SGroupResInfo
*
pGroupResInfo
);
int32_t
saveSessionDiscBuf
(
SStreamState
*
pState
,
SSessionKey
*
key
,
void
*
buf
,
int32_t
size
);
int32_t
buildSessionResultDataBlock
(
struct
SOperatorInfo
*
pOperator
,
SStreamState
*
pState
,
SSDataBlock
*
pBlock
,
int32_t
saveSessionDiscBuf
(
void
*
pState
,
SSessionKey
*
key
,
void
*
buf
,
int32_t
size
,
SStateStore
*
pAPI
);
int32_t
buildSessionResultDataBlock
(
struct
SOperatorInfo
*
pOperator
,
void
*
pState
,
SSDataBlock
*
pBlock
,
SExprSupp
*
pSup
,
SGroupResInfo
*
pGroupResInfo
);
int32_t
setOutputBuf
(
SStreamState
*
pState
,
STimeWindow
*
win
,
SResultRow
**
pResult
,
int64_t
tableGroupId
,
SqlFunctionCtx
*
pCtx
,
int32_t
numOfOutput
,
int32_t
*
rowEntryInfoOffset
,
SAggSupporter
*
pAggSup
);
int32_t
releaseOutputBuf
(
SStreamState
*
pState
,
SWinKey
*
pKey
,
SResultRow
*
pResult
);
int32_t
saveOutputBuf
(
SStreamState
*
pState
,
SWinKey
*
pKey
,
SResultRow
*
pResult
,
int32_t
resSize
);
int32_t
releaseOutputBuf
(
void
*
pState
,
SWinKey
*
pKey
,
SResultRow
*
pResult
,
SStateStore
*
pAPI
);
void
getNextIntervalWindow
(
SInterval
*
pInterval
,
STimeWindow
*
tw
,
int32_t
order
);
int32_t
getForwardStepsInBlock
(
int32_t
numOfRows
,
__block_search_fn_t
searchFn
,
TSKEY
ekey
,
int32_t
pos
,
int32_t
order
,
int64_t
*
pData
);
void
appendCreateTableRow
(
SStreamState
*
pState
,
SExprSupp
*
pTableSup
,
SExprSupp
*
pTagSup
,
uint64_t
groupId
,
SSDataBlock
*
pSrcBlock
,
int32_t
rowId
,
SSDataBlock
*
pDestBlock
);
void
appendCreateTableRow
(
void
*
pState
,
SExprSupp
*
pTableSup
,
SExprSupp
*
pTagSup
,
uint64_t
groupId
,
SSDataBlock
*
pSrcBlock
,
int32_t
rowId
,
SSDataBlock
*
pDestBlock
,
SStateStore
*
pAPI
);
SSDataBlock
*
buildCreateTableBlock
(
SExprSupp
*
tbName
,
SExprSupp
*
tag
);
SExprInfo
*
createExpr
(
SNodeList
*
pNodeList
,
int32_t
*
numOfExprs
);
...
...
source/libs/executor/inc/operator.h
浏览文件 @
e67b532d
...
...
@@ -156,7 +156,7 @@ void destroyOperator(SOperatorInfo* pOperator);
SOperatorInfo
*
extractOperatorInTree
(
SOperatorInfo
*
pOperator
,
int32_t
type
,
const
char
*
id
);
int32_t
getTableScanInfo
(
SOperatorInfo
*
pOperator
,
int32_t
*
order
,
int32_t
*
scanFlag
,
bool
inheritUsOrder
);
int32_t
stopTableScanOperator
(
SOperatorInfo
*
pOperator
,
const
char
*
pIdStr
);
int32_t
stopTableScanOperator
(
SOperatorInfo
*
pOperator
,
const
char
*
pIdStr
,
SStorageAPI
*
pAPI
);
int32_t
getOperatorExplainExecInfo
(
struct
SOperatorInfo
*
operatorInfo
,
SArray
*
pExecInfoList
);
#ifdef __cplusplus
...
...
source/libs/executor/inc/querytask.h
浏览文件 @
e67b532d
...
...
@@ -56,20 +56,19 @@ typedef struct STaskStopInfo {
}
STaskStopInfo
;
typedef
struct
{
STqOffsetVal
currentOffset
;
// for tmq
SMqMetaRsp
metaRsp
;
// for tmq fetching meta
int64_t
snapshotVer
;
// SPackedData submit; // todo remove it
SSchemaWrapper
*
schema
;
char
tbName
[
TSDB_TABLE_NAME_LEN
];
// this is the current scan table: todo refactor
int8_t
recoverStep
;
int8_t
recoverScanFinished
;
SQueryTableDataCond
tableCond
;
int64_t
fillHistoryVer1
;
int64_t
fillHistoryVer2
;
SStreamState
*
pState
;
int64_t
dataVersion
;
int64_t
checkPointId
;
STqOffsetVal
currentOffset
;
// for tmq
SMqMetaRsp
metaRsp
;
// for tmq fetching meta
int64_t
snapshotVer
;
SSchemaWrapper
*
schema
;
char
tbName
[
TSDB_TABLE_NAME_LEN
];
// this is the current scan table: todo refactor
int8_t
recoverStep
;
int8_t
recoverScanFinished
;
SQueryTableDataCond
tableCond
;
int64_t
fillHistoryVer1
;
int64_t
fillHistoryVer2
;
SStreamState
*
pState
;
int64_t
dataVersion
;
int64_t
checkPointId
;
}
SStreamTaskInfo
;
struct
SExecTaskInfo
{
...
...
@@ -92,6 +91,7 @@ struct SExecTaskInfo {
SArray
*
pResultBlockList
;
// result block list
STaskStopInfo
stopInfo
;
SRWLatch
lock
;
// secure the access of STableListInfo
SStorageAPI
storageAPI
;
};
void
buildTaskId
(
uint64_t
taskId
,
uint64_t
queryId
,
char
*
dst
);
...
...
source/libs/executor/src/aggregateoperator.c
浏览文件 @
e67b532d
...
...
@@ -21,7 +21,7 @@
#include "tname.h"
#include "executorInt.h"
#include "
index
.h"
#include "
tsdstorage
.h"
#include "operator.h"
#include "query.h"
#include "querytask.h"
...
...
@@ -30,6 +30,7 @@
#include "tglobal.h"
#include "thash.h"
#include "ttypes.h"
#include "index.h"
typedef
struct
{
bool
hasAgg
;
...
...
source/libs/executor/src/cachescanoperator.c
浏览文件 @
e67b532d
...
...
@@ -13,8 +13,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "function.h"
#include "os.h"
#include "function.h"
#include "tname.h"
#include "tdatablock.h"
...
...
@@ -27,6 +27,8 @@
#include "thash.h"
#include "ttypes.h"
#include "storageapi.h"
typedef
struct
SCacheRowsScanInfo
{
SSDataBlock
*
pRes
;
SReadHandle
readHandle
;
...
...
@@ -102,9 +104,9 @@ SOperatorInfo* createCacherowsScanOperator(SLastRowScanPhysiNode* pScanNode, SRe
STableKeyInfo
*
pList
=
tableListGetInfo
(
pTableListInfo
,
0
);
uint64_t
suid
=
tableListGetSuid
(
pTableListInfo
);
code
=
tsdbCacherowsReaderOpen
(
pInfo
->
readHandle
.
vnode
,
pInfo
->
retrieveType
,
pList
,
totalTables
,
taosArrayGetSize
(
pInfo
->
matchInfo
.
pList
),
pCidList
,
pInfo
->
pSlotIds
,
suid
,
&
pInfo
->
pLastrowReader
,
pTaskInfo
->
id
.
str
);
code
=
pInfo
->
readHandle
.
api
.
cacheFn
.
openReader
(
pInfo
->
readHandle
.
vnode
,
pInfo
->
retrieveType
,
pList
,
totalTables
,
taosArrayGetSize
(
pInfo
->
matchInfo
.
pList
),
pCidList
,
pInfo
->
pSlotIds
,
suid
,
&
pInfo
->
pLastrowReader
,
pTaskInfo
->
id
.
str
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_error
;
}
...
...
@@ -172,7 +174,7 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) {
blockDataCleanup
(
pInfo
->
pBufferredRes
);
taosArrayClear
(
pInfo
->
pUidList
);
int32_t
code
=
tsdbRetrieveCach
eRows
(
pInfo
->
pLastrowReader
,
pInfo
->
pBufferredRes
,
pInfo
->
pSlotIds
,
int32_t
code
=
pInfo
->
readHandle
.
api
.
cacheFn
.
retriev
eRows
(
pInfo
->
pLastrowReader
,
pInfo
->
pBufferredRes
,
pInfo
->
pSlotIds
,
pInfo
->
pDstSlotIds
,
pInfo
->
pUidList
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
T_LONG_JMP
(
pTaskInfo
->
env
,
code
);
...
...
@@ -239,7 +241,7 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) {
}
if
(
NULL
==
pInfo
->
pLastrowReader
)
{
code
=
tsdbCacherowsReaderOpen
(
pInfo
->
readHandle
.
vnode
,
pInfo
->
retrieveType
,
pList
,
num
,
code
=
pInfo
->
readHandle
.
api
.
cacheFn
.
openReader
(
pInfo
->
readHandle
.
vnode
,
pInfo
->
retrieveType
,
pList
,
num
,
taosArrayGetSize
(
pInfo
->
matchInfo
.
pList
),
pInfo
->
pCidList
,
pInfo
->
pSlotIds
,
suid
,
&
pInfo
->
pLastrowReader
,
pTaskInfo
->
id
.
str
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
...
...
@@ -248,12 +250,12 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) {
continue
;
}
}
else
{
tsdbReuseCacherows
Reader
(
pInfo
->
pLastrowReader
,
pList
,
num
);
pInfo
->
readHandle
.
api
.
cacheFn
.
reuse
Reader
(
pInfo
->
pLastrowReader
,
pList
,
num
);
}
taosArrayClear
(
pInfo
->
pUidList
);
code
=
tsdbRetrieveCach
eRows
(
pInfo
->
pLastrowReader
,
pInfo
->
pRes
,
pInfo
->
pSlotIds
,
pInfo
->
pDstSlotIds
,
code
=
pInfo
->
readHandle
.
api
.
cacheFn
.
retriev
eRows
(
pInfo
->
pLastrowReader
,
pInfo
->
pRes
,
pInfo
->
pSlotIds
,
pInfo
->
pDstSlotIds
,
pInfo
->
pUidList
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
T_LONG_JMP
(
pTaskInfo
->
env
,
code
);
...
...
@@ -287,7 +289,7 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) {
}
}
pInfo
->
pLastrowReader
=
tsdbCacherowsReaderClose
(
pInfo
->
pLastrowReader
);
pInfo
->
pLastrowReader
=
pInfo
->
readHandle
.
api
.
cacheFn
.
closeReader
(
pInfo
->
pLastrowReader
);
setOperatorCompleted
(
pOperator
);
return
NULL
;
}
...
...
@@ -305,7 +307,7 @@ void destroyCacheScanOperator(void* param) {
tableListDestroy
(
pInfo
->
pTableList
);
if
(
pInfo
->
pLastrowReader
!=
NULL
)
{
pInfo
->
pLastrowReader
=
tsdbCacherowsReaderClose
(
pInfo
->
pLastrowReader
);
pInfo
->
pLastrowReader
=
pInfo
->
readHandle
.
api
.
cacheFn
.
closeReader
(
pInfo
->
pLastrowReader
);
}
cleanupExprSupp
(
&
pInfo
->
pseudoExprSup
);
...
...
source/libs/executor/src/dataInserter.c
浏览文件 @
e67b532d
...
...
@@ -17,6 +17,7 @@
#include "dataSinkMgt.h"
#include "executorInt.h"
#include "planner.h"
#include "storageapi.h"
#include "tcompression.h"
#include "tdatablock.h"
#include "tglobal.h"
...
...
@@ -428,8 +429,7 @@ int32_t createDataInserter(SDataSinkManager* pManager, const SDataSinkNode* pDat
inserter
->
explain
=
pInserterNode
->
explain
;
int64_t
suid
=
0
;
int32_t
code
=
tsdbGetTableSchema
(
inserter
->
pParam
->
readHandle
->
vnode
,
pInserterNode
->
tableId
,
&
inserter
->
pSchema
,
&
suid
);
int32_t
code
=
pManager
->
storeFn
.
metaFn
.
getTableSchema
(
inserter
->
pParam
->
readHandle
->
vnode
,
pInserterNode
->
tableId
,
&
inserter
->
pSchema
,
&
suid
);
if
(
code
)
{
destroyDataSinker
((
SDataSinkHandle
*
)
inserter
);
taosMemoryFree
(
inserter
);
...
...
source/libs/executor/src/executil.c
浏览文件 @
e67b532d
...
...
@@ -27,6 +27,7 @@
#include "executorInt.h"
#include "querytask.h"
#include "tcompression.h"
#include "storageapi.h"
typedef
struct
tagFilterAssist
{
SHashObj
*
colHash
;
...
...
@@ -41,13 +42,13 @@ typedef enum {
}
FilterCondType
;
static
FilterCondType
checkTagCond
(
SNode
*
cond
);
static
int32_t
optimizeTbnameInCond
(
void
*
metaHandle
,
int64_t
suid
,
SArray
*
list
,
SNode
*
pTagCond
);
static
int32_t
optimizeTbnameInCondImpl
(
void
*
metaHandle
,
SArray
*
list
,
SNode
*
pTagCond
);
static
int32_t
optimizeTbnameInCond
(
void
*
metaHandle
,
int64_t
suid
,
SArray
*
list
,
SNode
*
pTagCond
,
SStorageAPI
*
pAPI
);
static
int32_t
optimizeTbnameInCondImpl
(
void
*
metaHandle
,
SArray
*
list
,
SNode
*
pTagCond
,
SStorageAPI
*
pStoreAPI
);
static
int32_t
getTableList
(
void
*
metaHandle
,
void
*
pVnode
,
SScanPhysiNode
*
pScanNode
,
SNode
*
pTagCond
,
SNode
*
pTagIndexCond
,
STableListInfo
*
pListInfo
,
uint8_t
*
digest
,
const
char
*
idstr
);
static
int32_t
getTableList
(
void
*
pVnode
,
SScanPhysiNode
*
pScanNode
,
SNode
*
pTagCond
,
SNode
*
pTagIndexCond
,
STableListInfo
*
pListInfo
,
uint8_t
*
digest
,
const
char
*
idstr
,
SStorageAPI
*
pStorageAPI
);
static
SSDataBlock
*
createTagValBlockForFilter
(
SArray
*
pColList
,
int32_t
numOfTables
,
SArray
*
pUidTagList
,
void
*
metaHandle
);
void
*
pVnode
,
SStorageAPI
*
pStorageAPI
);
static
int64_t
getLimit
(
const
SNode
*
pLimit
)
{
return
NULL
==
pLimit
?
-
1
:
((
SLimitNode
*
)
pLimit
)
->
limit
;
}
static
int64_t
getOffset
(
const
SNode
*
pLimit
)
{
return
NULL
==
pLimit
?
-
1
:
((
SLimitNode
*
)
pLimit
)
->
offset
;
}
...
...
@@ -262,7 +263,7 @@ EDealRes doTranslateTagExpr(SNode** pNode, void* pContext) {
STagVal
tagVal
=
{
0
};
tagVal
.
cid
=
pSColumnNode
->
colId
;
const
char
*
p
=
m
etaGetTable
TagVal
(
mr
->
me
.
ctbEntry
.
pTags
,
pSColumnNode
->
node
.
resType
.
type
,
&
tagVal
);
const
char
*
p
=
m
r
->
storageAPI
->
metaFn
.
extract
TagVal
(
mr
->
me
.
ctbEntry
.
pTags
,
pSColumnNode
->
node
.
resType
.
type
,
&
tagVal
);
if
(
p
==
NULL
)
{
res
->
node
.
resType
.
type
=
TSDB_DATA_TYPE_NULL
;
}
else
if
(
pSColumnNode
->
node
.
resType
.
type
==
TSDB_DATA_TYPE_JSON
)
{
...
...
@@ -301,14 +302,14 @@ EDealRes doTranslateTagExpr(SNode** pNode, void* pContext) {
return
DEAL_RES_CONTINUE
;
}
int32_t
isQualifiedTable
(
STableKeyInfo
*
info
,
SNode
*
pTagCond
,
void
*
metaHandle
,
bool
*
pQualified
)
{
int32_t
isQualifiedTable
(
STableKeyInfo
*
info
,
SNode
*
pTagCond
,
void
*
metaHandle
,
bool
*
pQualified
,
SStorageAPI
*
pAPI
)
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
SMetaReader
mr
=
{
0
};
metaReaderInit
(
&
mr
,
metaHandle
,
0
);
code
=
metaGetTableEntryBy
UidCache
(
&
mr
,
info
->
uid
);
pAPI
->
metaReaderFn
.
initReader
(
&
mr
,
metaHandle
,
0
);
code
=
pAPI
->
metaReaderFn
.
readerGetEntryGet
UidCache
(
&
mr
,
info
->
uid
);
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
metaReaderClea
r
(
&
mr
);
pAPI
->
metaReaderFn
.
clearReade
r
(
&
mr
);
*
pQualified
=
false
;
return
TSDB_CODE_SUCCESS
;
...
...
@@ -317,7 +318,7 @@ int32_t isQualifiedTable(STableKeyInfo* info, SNode* pTagCond, void* metaHandle,
SNode
*
pTagCondTmp
=
nodesCloneNode
(
pTagCond
);
nodesRewriteExprPostOrder
(
&
pTagCondTmp
,
doTranslateTagExpr
,
&
mr
);
metaReaderClea
r
(
&
mr
);
pAPI
->
metaReaderFn
.
clearReade
r
(
&
mr
);
SNode
*
pNew
=
NULL
;
code
=
scalarCalculateConstants
(
pTagCondTmp
,
&
pNew
);
...
...
@@ -453,8 +454,8 @@ static void genTbGroupDigest(const SNode* pGroup, uint8_t* filterDigest, T_MD5_C
taosMemoryFree
(
payload
);
}
int32_t
getColInfoResultForGroupby
(
void
*
metaHandle
,
SNodeList
*
group
,
STableListInfo
*
pTableListInfo
,
uint8_t
*
digest
)
{
int32_t
getColInfoResultForGroupby
(
void
*
pVnode
,
SNodeList
*
group
,
STableListInfo
*
pTableListInfo
,
uint8_t
*
digest
,
SStorageAPI
*
pAPI
)
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
SArray
*
pBlockList
=
NULL
;
SSDataBlock
*
pResBlock
=
NULL
;
...
...
@@ -465,7 +466,7 @@ int32_t getColInfoResultForGroupby(void* metaHandle, SNodeList* group, STableLis
int32_t
rows
=
taosArrayGetSize
(
pTableListInfo
->
pTableList
);
if
(
rows
==
0
)
{
return
TDB_CODE_SUCCESS
;
return
T
S
DB_CODE_SUCCESS
;
}
tagFilterAssist
ctx
=
{
0
};
...
...
@@ -494,8 +495,8 @@ int32_t getColInfoResultForGroupby(void* metaHandle, SNodeList* group, STableLis
listNode
->
pNodeList
=
group
;
genTbGroupDigest
((
SNode
*
)
listNode
,
digest
,
&
context
);
nodesFree
(
listNode
);
metaGetCachedTbGroup
(
metaHandl
e
,
pTableListInfo
->
idInfo
.
suid
,
context
.
digest
,
tListLen
(
context
.
digest
),
&
tableList
);
pAPI
->
metaFn
.
getCachedTableList
(
pVnod
e
,
pTableListInfo
->
idInfo
.
suid
,
context
.
digest
,
tListLen
(
context
.
digest
),
&
tableList
);
if
(
tableList
)
{
taosArrayDestroy
(
pTableListInfo
->
pTableList
);
pTableListInfo
->
pTableList
=
tableList
;
...
...
@@ -511,14 +512,13 @@ int32_t getColInfoResultForGroupby(void* metaHandle, SNodeList* group, STableLis
taosArrayPush
(
pUidTagList
,
&
info
);
}
// int64_t stt = taosGetTimestampUs();
code
=
metaGetTableTags
(
metaHandle
,
pTableListInfo
->
idInfo
.
suid
,
pUidTagList
);
code
=
pAPI
->
metaFn
.
getTableTags
(
pVnode
,
pTableListInfo
->
idInfo
.
suid
,
pUidTagList
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
end
;
}
int32_t
numOfTables
=
taosArrayGetSize
(
pUidTagList
);
pResBlock
=
createTagValBlockForFilter
(
ctx
.
cInfoList
,
numOfTables
,
pUidTagList
,
metaHandle
);
pResBlock
=
createTagValBlockForFilter
(
ctx
.
cInfoList
,
numOfTables
,
pUidTagList
,
pVnode
,
pAPI
);
if
(
pResBlock
==
NULL
)
{
code
=
terrno
;
goto
end
;
...
...
@@ -632,7 +632,7 @@ int32_t getColInfoResultForGroupby(void* metaHandle, SNodeList* group, STableLis
if
(
tsTagFilterCache
)
{
tableList
=
taosArrayDup
(
pTableListInfo
->
pTableList
,
NULL
);
metaPutTbGroupToCache
(
metaHandl
e
,
pTableListInfo
->
idInfo
.
suid
,
context
.
digest
,
tListLen
(
context
.
digest
),
tableList
,
taosArrayGetSize
(
tableList
)
*
sizeof
(
STableKeyInfo
));
pAPI
->
metaFn
.
putTableListIntoCache
(
pVnod
e
,
pTableListInfo
->
idInfo
.
suid
,
context
.
digest
,
tListLen
(
context
.
digest
),
tableList
,
taosArrayGetSize
(
tableList
)
*
sizeof
(
STableKeyInfo
));
}
// int64_t st2 = taosGetTimestampUs();
...
...
@@ -734,12 +734,12 @@ static FilterCondType checkTagCond(SNode* cond) {
return
FILTER_OTHER
;
}
static
int32_t
optimizeTbnameInCond
(
void
*
metaHandle
,
int64_t
suid
,
SArray
*
list
,
SNode
*
cond
)
{
static
int32_t
optimizeTbnameInCond
(
void
*
pVnode
,
int64_t
suid
,
SArray
*
list
,
SNode
*
cond
,
SStorageAPI
*
pAPI
)
{
int32_t
ret
=
-
1
;
int32_t
ntype
=
nodeType
(
cond
);
if
(
ntype
==
QUERY_NODE_OPERATOR
)
{
ret
=
optimizeTbnameInCondImpl
(
metaHandle
,
list
,
cond
);
ret
=
optimizeTbnameInCondImpl
(
pVnode
,
list
,
cond
,
pAPI
);
}
if
(
ntype
!=
QUERY_NODE_LOGIC_CONDITION
||
((
SLogicConditionNode
*
)
cond
)
->
condType
!=
LOGIC_COND_TYPE_AND
)
{
...
...
@@ -758,7 +758,7 @@ static int32_t optimizeTbnameInCond(void* metaHandle, int64_t suid, SArray* list
SListCell
*
cell
=
pList
->
pHead
;
for
(
int
i
=
0
;
i
<
len
;
i
++
)
{
if
(
cell
==
NULL
)
break
;
if
(
optimizeTbnameInCondImpl
(
metaHandle
,
list
,
cell
->
pNode
)
==
0
)
{
if
(
optimizeTbnameInCondImpl
(
pVnode
,
list
,
cell
->
pNode
,
pAPI
)
==
0
)
{
hasTbnameCond
=
true
;
break
;
}
...
...
@@ -769,14 +769,14 @@ static int32_t optimizeTbnameInCond(void* metaHandle, int64_t suid, SArray* list
taosArrayRemoveDuplicate
(
list
,
filterTableInfoCompare
,
NULL
);
if
(
hasTbnameCond
)
{
ret
=
metaGetTableTagsByUids
(
metaHandl
e
,
suid
,
list
);
ret
=
pAPI
->
metaFn
.
getTableTagsByUid
(
pVnod
e
,
suid
,
list
);
}
return
ret
;
}
// only return uid that does not contained in pExistedUidList
static
int32_t
optimizeTbnameInCondImpl
(
void
*
metaHandle
,
SArray
*
pExistedUidList
,
SNode
*
pTagCond
)
{
static
int32_t
optimizeTbnameInCondImpl
(
void
*
pVnode
,
SArray
*
pExistedUidList
,
SNode
*
pTagCond
,
SStorageAPI
*
pStoreAPI
)
{
if
(
nodeType
(
pTagCond
)
!=
QUERY_NODE_OPERATOR
)
{
return
-
1
;
}
...
...
@@ -813,9 +813,9 @@ static int32_t optimizeTbnameInCondImpl(void* metaHandle, SArray* pExistedUidLis
char
*
name
=
taosArrayGetP
(
pTbList
,
i
);
uint64_t
uid
=
0
;
if
(
metaGetTableUidByName
(
metaHandl
e
,
name
,
&
uid
)
==
0
)
{
if
(
pStoreAPI
->
metaFn
.
getTableUidByName
(
pVnod
e
,
name
,
&
uid
)
==
0
)
{
ETableType
tbType
=
TSDB_TABLE_MAX
;
if
(
metaGetTableTypeByName
(
metaHandl
e
,
name
,
&
tbType
)
==
0
&&
tbType
==
TSDB_CHILD_TABLE
)
{
if
(
pStoreAPI
->
metaFn
.
getTableTypeByName
(
pVnod
e
,
name
,
&
tbType
)
==
0
&&
tbType
==
TSDB_CHILD_TABLE
)
{
if
(
NULL
==
uHash
||
taosHashGet
(
uHash
,
&
uid
,
sizeof
(
uid
))
==
NULL
)
{
STUidTagInfo
s
=
{.
uid
=
uid
,
.
name
=
name
,
.
pTagVal
=
NULL
};
taosArrayPush
(
pExistedUidList
,
&
s
);
...
...
@@ -841,7 +841,7 @@ static int32_t optimizeTbnameInCondImpl(void* metaHandle, SArray* pExistedUidLis
static
SSDataBlock
*
createTagValBlockForFilter
(
SArray
*
pColList
,
int32_t
numOfTables
,
SArray
*
pUidTagList
,
void
*
metaHandle
)
{
void
*
pVnode
,
SStorageAPI
*
pStorageAPI
)
{
SSDataBlock
*
pResBlock
=
createDataBlock
();
if
(
pResBlock
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
...
...
@@ -876,7 +876,7 @@ static SSDataBlock* createTagValBlockForFilter(SArray* pColList, int32_t numOfTa
if
(
p1
->
name
!=
NULL
)
{
STR_TO_VARSTR
(
str
,
p1
->
name
);
}
else
{
// name is not retrieved during filter
metaGetTableNameByUid
(
metaHandl
e
,
p1
->
uid
,
str
);
pStorageAPI
->
metaFn
.
getTableNameByUid
(
pVnod
e
,
p1
->
uid
,
str
);
}
colDataSetVal
(
pColInfo
,
i
,
str
,
false
);
...
...
@@ -889,7 +889,7 @@ static SSDataBlock* createTagValBlockForFilter(SArray* pColList, int32_t numOfTa
if
(
p1
->
pTagVal
==
NULL
)
{
colDataSetNULL
(
pColInfo
,
i
);
}
else
{
const
char
*
p
=
metaGetTable
TagVal
(
p1
->
pTagVal
,
pColInfo
->
info
.
type
,
&
tagVal
);
const
char
*
p
=
pStorageAPI
->
metaFn
.
extract
TagVal
(
p1
->
pTagVal
,
pColInfo
->
info
.
type
,
&
tagVal
);
if
(
p
==
NULL
||
(
pColInfo
->
info
.
type
==
TSDB_DATA_TYPE_JSON
&&
((
STag
*
)
p
)
->
nTag
==
0
))
{
colDataSetNULL
(
pColInfo
,
i
);
...
...
@@ -949,13 +949,13 @@ static void copyExistedUids(SArray* pUidTagList, const SArray* pUidList) {
}
}
static
int32_t
doFilterByTagCond
(
STableListInfo
*
pListInfo
,
SArray
*
pUidList
,
SNode
*
pTagCond
,
void
*
metaHandl
e
,
SIdxFltStatus
status
)
{
static
int32_t
doFilterByTagCond
(
STableListInfo
*
pListInfo
,
SArray
*
pUidList
,
SNode
*
pTagCond
,
void
*
pVnod
e
,
SIdxFltStatus
status
,
SStorageAPI
*
pAPI
)
{
if
(
pTagCond
==
NULL
)
{
return
TSDB_CODE_SUCCESS
;
}
terrno
=
TDB_CODE_SUCCESS
;
terrno
=
T
S
DB_CODE_SUCCESS
;
int32_t
code
=
TSDB_CODE_SUCCESS
;
SArray
*
pBlockList
=
NULL
;
...
...
@@ -985,7 +985,7 @@ static int32_t doFilterByTagCond(STableListInfo* pListInfo, SArray* pUidList, SN
FilterCondType
condType
=
checkTagCond
(
pTagCond
);
int32_t
filter
=
optimizeTbnameInCond
(
metaHandle
,
pListInfo
->
idInfo
.
suid
,
pUidTagList
,
pTagCond
);
int32_t
filter
=
optimizeTbnameInCond
(
pVnode
,
pListInfo
->
idInfo
.
suid
,
pUidTagList
,
pTagCond
,
pAPI
);
if
(
filter
==
0
)
{
// tbname in filter is activated, do nothing and return
taosArrayClear
(
pUidList
);
...
...
@@ -998,9 +998,9 @@ static int32_t doFilterByTagCond(STableListInfo* pListInfo, SArray* pUidList, SN
terrno
=
0
;
}
else
{
if
((
condType
==
FILTER_NO_LOGIC
||
condType
==
FILTER_AND
)
&&
status
!=
SFLT_NOT_INDEX
)
{
code
=
metaGetTableTagsByUids
(
metaHandl
e
,
pListInfo
->
idInfo
.
suid
,
pUidTagList
);
code
=
pAPI
->
metaFn
.
getTableTagsByUid
(
pVnod
e
,
pListInfo
->
idInfo
.
suid
,
pUidTagList
);
}
else
{
code
=
metaGetTableTags
(
metaHandl
e
,
pListInfo
->
idInfo
.
suid
,
pUidTagList
);
code
=
pAPI
->
metaFn
.
getTableTags
(
pVnod
e
,
pListInfo
->
idInfo
.
suid
,
pUidTagList
);
}
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
qError
(
"failed to get table tags from meta, reason:%s, suid:%"
PRIu64
,
tstrerror
(
code
),
pListInfo
->
idInfo
.
suid
);
...
...
@@ -1014,7 +1014,7 @@ static int32_t doFilterByTagCond(STableListInfo* pListInfo, SArray* pUidList, SN
goto
end
;
}
pResBlock
=
createTagValBlockForFilter
(
ctx
.
cInfoList
,
numOfTables
,
pUidTagList
,
metaHandle
);
pResBlock
=
createTagValBlockForFilter
(
ctx
.
cInfoList
,
numOfTables
,
pUidTagList
,
pVnode
,
pAPI
);
if
(
pResBlock
==
NULL
)
{
code
=
terrno
;
goto
end
;
...
...
@@ -1052,8 +1052,8 @@ end:
return
code
;
}
int32_t
getTableList
(
void
*
metaHandle
,
void
*
pVnode
,
SScanPhysiNode
*
pScanNode
,
SNode
*
pTagCond
,
SNode
*
pTagIndexCond
,
STableListInfo
*
pListInfo
,
uint8_t
*
digest
,
const
char
*
idstr
)
{
int32_t
getTableList
(
void
*
pVnode
,
SScanPhysiNode
*
pScanNode
,
SNode
*
pTagCond
,
SNode
*
pTagIndexCond
,
STableListInfo
*
pListInfo
,
uint8_t
*
digest
,
const
char
*
idstr
,
SStorageAPI
*
pStorageAPI
)
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
size_t
numOfTables
=
0
;
...
...
@@ -1065,10 +1065,10 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode,
SIdxFltStatus
status
=
SFLT_NOT_INDEX
;
if
(
pScanNode
->
tableType
!=
TSDB_SUPER_TABLE
)
{
pListInfo
->
idInfo
.
uid
=
pScanNode
->
uid
;
if
(
metaIsTableExist
(
metaHandl
e
,
pScanNode
->
uid
))
{
if
(
pStorageAPI
->
metaFn
.
isTableExisted
(
pVnod
e
,
pScanNode
->
uid
))
{
taosArrayPush
(
pUidList
,
&
pScanNode
->
uid
);
}
code
=
doFilterByTagCond
(
pListInfo
,
pUidList
,
pTagCond
,
metaHandle
,
status
);
code
=
doFilterByTagCond
(
pListInfo
,
pUidList
,
pTagCond
,
pVnode
,
status
,
pStorageAPI
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_end
;
}
...
...
@@ -1080,7 +1080,7 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode,
genTagFilterDigest
(
pTagCond
,
&
context
);
bool
acquired
=
false
;
metaGetCachedTableUidList
(
metaHandl
e
,
pScanNode
->
suid
,
context
.
digest
,
tListLen
(
context
.
digest
),
pUidList
,
pStorageAPI
->
metaFn
.
getCachedTableList
(
pVnod
e
,
pScanNode
->
suid
,
context
.
digest
,
tListLen
(
context
.
digest
),
pUidList
,
&
acquired
);
if
(
acquired
)
{
digest
[
0
]
=
1
;
...
...
@@ -1091,26 +1091,28 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode,
}
if
(
!
pTagCond
)
{
// no tag filter condition exists, let's fetch all tables of this super table
vnodeGetCtbIdList
(
pVnode
,
pScanNode
->
suid
,
pUidList
);
// vnodeGetCtbIdList();
pStorageAPI
->
metaFn
.
storeGetChildTableList
(
pVnode
,
pScanNode
->
suid
,
pUidList
);
}
else
{
// failed to find the result in the cache, let try to calculate the results
if
(
pTagIndexCond
)
{
void
*
pIndex
=
tsdbGetIvtIdx
(
metaHandle
);
void
*
pIndex
=
pStorageAPI
->
metaFn
.
storeGetInvertIndex
(
pVnode
);
SIndexMetaArg
metaArg
=
{
.
metaEx
=
metaHandle
,
.
idx
=
tsdbGetIdx
(
metaHandl
e
),
.
ivtIdx
=
pIndex
,
.
suid
=
pScanNode
->
uid
};
.
metaEx
=
pVnode
,
.
idx
=
pStorageAPI
->
metaFn
.
storeGetIndexInfo
(
pVnod
e
),
.
ivtIdx
=
pIndex
,
.
suid
=
pScanNode
->
uid
};
status
=
SFLT_NOT_INDEX
;
code
=
doFilterTag
(
pTagIndexCond
,
&
metaArg
,
pUidList
,
&
status
);
if
(
code
!=
0
||
status
==
SFLT_NOT_INDEX
)
{
// temporarily disable it for performance sake
qWarn
(
"failed to get tableIds from index, suid:%"
PRIu64
,
pScanNode
->
uid
);
code
=
TDB_CODE_SUCCESS
;
code
=
T
S
DB_CODE_SUCCESS
;
}
else
{
qInfo
(
"succ to get filter result, table num: %d"
,
(
int
)
taosArrayGetSize
(
pUidList
));
}
}
}
code
=
doFilterByTagCond
(
pListInfo
,
pUidList
,
pTagCond
,
metaHandle
,
status
);
code
=
doFilterByTagCond
(
pListInfo
,
pUidList
,
pTagCond
,
pVnode
,
status
,
pStorageAPI
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_end
;
}
...
...
@@ -1127,7 +1129,7 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode,
memcpy
(
pPayload
+
sizeof
(
int32_t
),
taosArrayGet
(
pUidList
,
0
),
numOfTables
*
sizeof
(
uint64_t
));
}
metaUidFilterCachePut
(
metaHandle
,
pScanNode
->
suid
,
context
.
digest
,
tListLen
(
context
.
digest
),
pPayload
,
size
,
1
);
//
metaUidFilterCachePut(metaHandle, pScanNode->suid, context.digest, tListLen(context.digest), pPayload, size, 1);
digest
[
0
]
=
1
;
memcpy
(
digest
+
1
,
context
.
digest
,
tListLen
(
context
.
digest
));
}
...
...
@@ -1164,11 +1166,13 @@ size_t getTableTagsBufLen(const SNodeList* pGroups) {
return
keyLen
;
}
int32_t
getGroupIdFromTagsVal
(
void
*
pMeta
,
uint64_t
uid
,
SNodeList
*
pGroupNode
,
char
*
keyBuf
,
uint64_t
*
pGroupId
)
{
int32_t
getGroupIdFromTagsVal
(
void
*
pVnode
,
uint64_t
uid
,
SNodeList
*
pGroupNode
,
char
*
keyBuf
,
uint64_t
*
pGroupId
,
SStorageAPI
*
pAPI
)
{
SMetaReader
mr
=
{
0
};
metaReaderInit
(
&
mr
,
pMeta
,
0
);
if
(
metaGetTableEntryByUidCache
(
&
mr
,
uid
)
!=
0
)
{
// table not exist
metaReaderClear
(
&
mr
);
pAPI
->
metaReaderFn
.
initReader
(
&
mr
,
pVnode
,
0
);
if
(
pAPI
->
metaReaderFn
.
readerGetEntryGetUidCache
(
&
mr
,
uid
)
!=
0
)
{
// table not exist
pAPI
->
metaReaderFn
.
clearReader
(
&
mr
);
return
TSDB_CODE_PAR_TABLE_NOT_EXIST
;
}
...
...
@@ -1187,7 +1191,7 @@ int32_t getGroupIdFromTagsVal(void* pMeta, uint64_t uid, SNodeList* pGroupNode,
REPLACE_NODE
(
pNew
);
}
else
{
nodesDestroyList
(
groupNew
);
metaReaderClea
r
(
&
mr
);
pAPI
->
metaReaderFn
.
clearReade
r
(
&
mr
);
return
code
;
}
...
...
@@ -1204,7 +1208,7 @@ int32_t getGroupIdFromTagsVal(void* pMeta, uint64_t uid, SNodeList* pGroupNode,
if
(
tTagIsJson
(
data
))
{
terrno
=
TSDB_CODE_QRY_JSON_IN_GROUP_ERROR
;
nodesDestroyList
(
groupNew
);
metaReaderClea
r
(
&
mr
);
pAPI
->
metaReaderFn
.
clearReade
r
(
&
mr
);
return
terrno
;
}
int32_t
len
=
getJsonValueLen
(
data
);
...
...
@@ -1224,7 +1228,7 @@ int32_t getGroupIdFromTagsVal(void* pMeta, uint64_t uid, SNodeList* pGroupNode,
*
pGroupId
=
calcGroupId
(
keyBuf
,
len
);
nodesDestroyList
(
groupNew
);
metaReaderClea
r
(
&
mr
);
pAPI
->
metaReaderFn
.
clearReade
r
(
&
mr
);
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -2030,11 +2034,11 @@ static int32_t sortTableGroup(STableListInfo* pTableListInfo) {
memcpy
(
pTableListInfo
->
groupOffset
,
taosArrayGet
(
pList
,
0
),
sizeof
(
int32_t
)
*
pTableListInfo
->
numOfOuputGroups
);
taosArrayDestroy
(
pList
);
return
TDB_CODE_SUCCESS
;
return
T
S
DB_CODE_SUCCESS
;
}
int32_t
buildGroupIdMapForAllTables
(
STableListInfo
*
pTableListInfo
,
SReadHandle
*
pHandle
,
SScanPhysiNode
*
pScanNode
,
SNodeList
*
group
,
bool
groupSort
,
uint8_t
*
digest
)
{
bool
groupSort
,
uint8_t
*
digest
,
SStorageAPI
*
pAPI
)
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
bool
groupByTbname
=
groupbyTbname
(
group
);
...
...
@@ -2054,7 +2058,7 @@ int32_t buildGroupIdMapForAllTables(STableListInfo* pTableListInfo, SReadHandle*
pTableListInfo
->
numOfOuputGroups
=
1
;
}
}
else
{
code
=
getColInfoResultForGroupby
(
pHandle
->
meta
,
group
,
pTableListInfo
,
digest
);
code
=
getColInfoResultForGroupby
(
pHandle
->
meta
,
group
,
pTableListInfo
,
digest
,
pAPI
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
return
code
;
}
...
...
@@ -2086,7 +2090,7 @@ int32_t createScanTableListInfo(SScanPhysiNode* pScanNode, SNodeList* pGroupTags
}
uint8_t
digest
[
17
]
=
{
0
};
int32_t
code
=
getTableList
(
pHandle
->
meta
,
pHandle
->
vnode
,
pScanNode
,
pTagCond
,
pTagIndexCond
,
pTableListInfo
,
digest
,
idStr
);
int32_t
code
=
getTableList
(
pHandle
->
vnode
,
pScanNode
,
pTagCond
,
pTagIndexCond
,
pTableListInfo
,
digest
,
idStr
,
&
pTaskInfo
->
storageAPI
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
qError
(
"failed to getTableList, code: %s"
,
tstrerror
(
code
));
return
code
;
...
...
@@ -2104,7 +2108,7 @@ int32_t createScanTableListInfo(SScanPhysiNode* pScanNode, SNodeList* pGroupTags
return
TSDB_CODE_SUCCESS
;
}
code
=
buildGroupIdMapForAllTables
(
pTableListInfo
,
pHandle
,
pScanNode
,
pGroupTags
,
groupSort
,
digest
);
code
=
buildGroupIdMapForAllTables
(
pTableListInfo
,
pHandle
,
pScanNode
,
pGroupTags
,
groupSort
,
digest
,
&
pTaskInfo
->
storageAPI
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
return
code
;
}
...
...
source/libs/executor/src/executor.c
浏览文件 @
e67b532d
...
...
@@ -14,6 +14,8 @@
*/
#include "executor.h"
#include <libs/transport/trpc.h>
#include <libs/wal/wal.h>
#include "executorInt.h"
#include "operator.h"
#include "planner.h"
...
...
@@ -21,7 +23,8 @@
#include "tdatablock.h"
#include "tref.h"
#include "tudf.h"
#include "vnode.h"
#include "storageapi.h"
static
TdThreadOnce
initPoolOnce
=
PTHREAD_ONCE_INIT
;
int32_t
exchangeObjRefPool
=
-
1
;
...
...
@@ -156,18 +159,18 @@ static int32_t doSetStreamBlock(SOperatorInfo* pOperator, void* input, size_t nu
}
}
void
doSetTaskId
(
SOperatorInfo
*
pOperator
)
{
void
doSetTaskId
(
SOperatorInfo
*
pOperator
,
SStorageAPI
*
pAPI
)
{
SExecTaskInfo
*
pTaskInfo
=
pOperator
->
pTaskInfo
;
if
(
pOperator
->
operatorType
==
QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN
)
{
SStreamScanInfo
*
pStreamScanInfo
=
pOperator
->
info
;
if
(
pStreamScanInfo
->
pTableScanOp
!=
NULL
)
{
STableScanInfo
*
pScanInfo
=
pStreamScanInfo
->
pTableScanOp
->
info
;
if
(
pScanInfo
->
base
.
dataReader
!=
NULL
)
{
tsdbReaderSet
Id
(
pScanInfo
->
base
.
dataReader
,
pTaskInfo
->
id
.
str
);
pAPI
->
storeReader
.
setReader
Id
(
pScanInfo
->
base
.
dataReader
,
pTaskInfo
->
id
.
str
);
}
}
}
else
{
doSetTaskId
(
pOperator
->
pDownstream
[
0
]);
doSetTaskId
(
pOperator
->
pDownstream
[
0
]
,
pAPI
);
}
}
...
...
@@ -177,7 +180,7 @@ void qSetTaskId(qTaskInfo_t tinfo, uint64_t taskId, uint64_t queryId) {
buildTaskId
(
taskId
,
queryId
,
pTaskInfo
->
id
.
str
);
// set the idstr for tsdbReader
doSetTaskId
(
pTaskInfo
->
pRoot
);
doSetTaskId
(
pTaskInfo
->
pRoot
,
&
pTaskInfo
->
storageAPI
);
}
int32_t
qSetStreamOpOpen
(
qTaskInfo_t
tinfo
)
{
...
...
@@ -320,7 +323,8 @@ qTaskInfo_t qCreateStreamExecTaskInfo(void* msg, SReadHandle* readers, int32_t v
return
pTaskInfo
;
}
static
SArray
*
filterUnqualifiedTables
(
const
SStreamScanInfo
*
pScanInfo
,
const
SArray
*
tableIdList
,
const
char
*
idstr
)
{
static
SArray
*
filterUnqualifiedTables
(
const
SStreamScanInfo
*
pScanInfo
,
const
SArray
*
tableIdList
,
const
char
*
idstr
,
SStorageAPI
*
pAPI
)
{
SArray
*
qa
=
taosArrayInit
(
4
,
sizeof
(
tb_uid_t
));
int32_t
numOfUids
=
taosArrayGetSize
(
tableIdList
);
if
(
numOfUids
==
0
)
{
...
...
@@ -336,11 +340,11 @@ static SArray* filterUnqualifiedTables(const SStreamScanInfo* pScanInfo, const S
// let's discard the tables those are not created according to the queried super table.
SMetaReader
mr
=
{
0
};
metaReaderInit
(
&
mr
,
pScanInfo
->
readHandle
.
meta
,
0
);
pAPI
->
metaReaderFn
.
initReader
(
&
mr
,
pScanInfo
->
readHandle
.
meta
,
0
);
for
(
int32_t
i
=
0
;
i
<
numOfUids
;
++
i
)
{
uint64_t
*
id
=
(
uint64_t
*
)
taosArrayGet
(
tableIdList
,
i
);
int32_t
code
=
metaG
etTableEntryByUid
(
&
mr
,
*
id
);
int32_t
code
=
pAPI
->
metaReaderFn
.
g
etTableEntryByUid
(
&
mr
,
*
id
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
qError
(
"failed to get table meta, uid:%"
PRIu64
" code:%s, %s"
,
*
id
,
tstrerror
(
terrno
),
idstr
);
continue
;
...
...
@@ -368,7 +372,7 @@ static SArray* filterUnqualifiedTables(const SStreamScanInfo* pScanInfo, const S
if
(
pScanInfo
->
pTagCond
!=
NULL
)
{
bool
qualified
=
false
;
STableKeyInfo
info
=
{.
groupId
=
0
,
.
uid
=
mr
.
me
.
uid
};
code
=
isQualifiedTable
(
&
info
,
pScanInfo
->
pTagCond
,
pScanInfo
->
readHandle
.
meta
,
&
qualified
);
code
=
isQualifiedTable
(
&
info
,
pScanInfo
->
pTagCond
,
pScanInfo
->
readHandle
.
meta
,
&
qualified
,
pAPI
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
qError
(
"failed to filter new table, uid:0x%"
PRIx64
", %s"
,
info
.
uid
,
idstr
);
continue
;
...
...
@@ -383,7 +387,7 @@ static SArray* filterUnqualifiedTables(const SStreamScanInfo* pScanInfo, const S
taosArrayPush
(
qa
,
id
);
}
metaReaderClea
r
(
&
mr
);
pAPI
->
metaReaderFn
.
clearReade
r
(
&
mr
);
return
qa
;
}
...
...
@@ -401,10 +405,10 @@ int32_t qUpdateTableListForStreamScanner(qTaskInfo_t tinfo, const SArray* tableI
SStreamScanInfo
*
pScanInfo
=
pInfo
->
info
;
if
(
isAdd
)
{
// add new table id
SArray
*
qa
=
filterUnqualifiedTables
(
pScanInfo
,
tableIdList
,
id
);
SArray
*
qa
=
filterUnqualifiedTables
(
pScanInfo
,
tableIdList
,
id
,
&
pTaskInfo
->
storageAPI
);
int32_t
numOfQualifiedTables
=
taosArrayGetSize
(
qa
);
qDebug
(
"%d qualified child tables added into stream scanner, %s"
,
numOfQualifiedTables
,
id
);
code
=
tqReaderAddTbUidList
(
pScanInfo
->
tqReader
,
qa
);
code
=
pTaskInfo
->
storageAPI
.
tqReaderFn
.
tqReaderAddTables
(
pScanInfo
->
tqReader
,
qa
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
taosArrayDestroy
(
qa
);
return
code
;
...
...
@@ -434,7 +438,7 @@ int32_t qUpdateTableListForStreamScanner(qTaskInfo_t tinfo, const SArray* tableI
keyInfo
.
groupId
=
keyInfo
.
uid
;
}
else
{
code
=
getGroupIdFromTagsVal
(
pScanInfo
->
readHandle
.
meta
,
keyInfo
.
uid
,
pScanInfo
->
pGroupTags
,
keyBuf
,
&
keyInfo
.
groupId
);
&
keyInfo
.
groupId
,
&
pTaskInfo
->
storageAPI
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
taosMemoryFree
(
keyBuf
);
taosArrayDestroy
(
qa
);
...
...
@@ -456,7 +460,7 @@ int32_t qUpdateTableListForStreamScanner(qTaskInfo_t tinfo, const SArray* tableI
}
else
{
// remove the table id in current list
qDebug
(
"%d remove child tables from the stream scanner, %s"
,
(
int32_t
)
taosArrayGetSize
(
tableIdList
),
id
);
taosWLockLatch
(
&
pTaskInfo
->
lock
);
code
=
tqReaderRemoveTbUidList
(
pScanInfo
->
tqReader
,
tableIdList
);
code
=
pTaskInfo
->
storageAPI
.
tqReaderFn
.
tqReaderRemoveTables
(
pScanInfo
->
tqReader
,
tableIdList
);
taosWUnLockLatch
(
&
pTaskInfo
->
lock
);
}
...
...
@@ -1060,6 +1064,8 @@ void qStreamSetOpen(qTaskInfo_t tinfo) {
int32_t
qStreamPrepareScan
(
qTaskInfo_t
tinfo
,
STqOffsetVal
*
pOffset
,
int8_t
subType
)
{
SExecTaskInfo
*
pTaskInfo
=
(
SExecTaskInfo
*
)
tinfo
;
SStorageAPI
*
pAPI
=
&
pTaskInfo
->
storageAPI
;
SOperatorInfo
*
pOperator
=
pTaskInfo
->
pRoot
;
const
char
*
id
=
GET_TASKID
(
pTaskInfo
);
...
...
@@ -1081,14 +1087,15 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT
if
(
pOffset
->
type
==
TMQ_OFFSET__LOG
)
{
// todo refactor: move away
tsdb
ReaderClose
(
pScanBaseInfo
->
dataReader
);
pTaskInfo
->
storageAPI
.
storeReader
.
store
ReaderClose
(
pScanBaseInfo
->
dataReader
);
pScanBaseInfo
->
dataReader
=
NULL
;
walReaderVerifyOffset
(
pInfo
->
tqReader
->
pWalReader
,
pOffset
);
if
(
tqSeekVer
(
pInfo
->
tqReader
,
pOffset
->
version
+
1
,
id
)
<
0
)
{
qError
(
"tqSeekVer failed ver:%"
PRId64
", %s"
,
pOffset
->
version
+
1
,
id
);
return
-
1
;
}
ASSERT
(
0
);
// walReaderVerifyOffset(pInfo->tqReader->pWalReader, pOffset);
// if (tqSeekVer(pInfo->tqReader, pOffset->version + 1, id) < 0) {
// qError("tqSeekVer failed ver:%" PRId64 ", %s", pOffset->version + 1, id);
// return -1;
// }
}
else
if
(
pOffset
->
type
==
TMQ_OFFSET__SNAPSHOT_DATA
)
{
// iterate all tables from tableInfoList, and retrieve rows from each table one-by-one
// those data are from the snapshot in tsdb, besides the data in the wal file.
...
...
@@ -1141,8 +1148,8 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT
pScanInfo
->
scanTimes
=
0
;
if
(
pScanBaseInfo
->
dataReader
==
NULL
)
{
int32_t
code
=
tsdb
ReaderOpen
(
pScanBaseInfo
->
readHandle
.
vnode
,
&
pScanBaseInfo
->
cond
,
&
keyInfo
,
1
,
pScanInfo
->
pResBlock
,
&
pScanBaseInfo
->
dataReader
,
id
,
false
,
NULL
);
int32_t
code
=
pTaskInfo
->
storageAPI
.
storeReader
.
store
ReaderOpen
(
pScanBaseInfo
->
readHandle
.
vnode
,
&
pScanBaseInfo
->
cond
,
&
keyInfo
,
1
,
pScanInfo
->
pResBlock
,
(
void
**
)
&
pScanBaseInfo
->
dataReader
,
id
,
false
,
NULL
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
qError
(
"prepare read tsdb snapshot failed, uid:%"
PRId64
", code:%s %s"
,
pOffset
->
uid
,
tstrerror
(
code
),
id
);
terrno
=
code
;
...
...
@@ -1152,8 +1159,8 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT
qDebug
(
"tsdb reader created with offset(snapshot) uid:%"
PRId64
" ts:%"
PRId64
" table index:%d, total:%d, %s"
,
uid
,
pScanBaseInfo
->
cond
.
twindows
.
skey
,
pScanInfo
->
currentTable
,
numOfTables
,
id
);
}
else
{
tsdb
SetTableList
(
pScanBaseInfo
->
dataReader
,
&
keyInfo
,
1
);
tsdbReaderReset
(
pScanBaseInfo
->
dataReader
,
&
pScanBaseInfo
->
cond
);
pTaskInfo
->
storageAPI
.
storeReader
.
storeReader
SetTableList
(
pScanBaseInfo
->
dataReader
,
&
keyInfo
,
1
);
pTaskInfo
->
storageAPI
.
storeReader
.
storeReaderResetStatus
(
pScanBaseInfo
->
dataReader
,
&
pScanBaseInfo
->
cond
);
qDebug
(
"tsdb reader offset seek snapshot to uid:%"
PRId64
" ts %"
PRId64
" table index:%d numOfTable:%d, %s"
,
uid
,
pScanBaseInfo
->
cond
.
twindows
.
skey
,
pScanInfo
->
currentTable
,
numOfTables
,
id
);
}
...
...
@@ -1175,14 +1182,14 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT
SOperatorInfo
*
p
=
extractOperatorInTree
(
pOperator
,
QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN
,
id
);
STableListInfo
*
pTableListInfo
=
((
SStreamRawScanInfo
*
)(
p
->
info
))
->
pTableListInfo
;
if
(
setForSnapS
hot
(
sContext
,
pOffset
->
uid
)
!=
0
)
{
if
(
pAPI
->
snapshotFn
.
storeCreateSnaps
hot
(
sContext
,
pOffset
->
uid
)
!=
0
)
{
qError
(
"setDataForSnapShot error. uid:%"
PRId64
" , %s"
,
pOffset
->
uid
,
id
);
terrno
=
TSDB_CODE_PAR_INTERNAL_ERROR
;
return
-
1
;
}
SMetaTableInfo
mtInfo
=
getUidfromSnapShot
(
sContext
);
tsdb
ReaderClose
(
pInfo
->
dataReader
);
SMetaTableInfo
mtInfo
=
pTaskInfo
->
storageAPI
.
snapshotFn
.
storeSSGetTableInfo
(
sContext
);
pTaskInfo
->
storageAPI
.
storeReader
.
store
ReaderClose
(
pInfo
->
dataReader
);
pInfo
->
dataReader
=
NULL
;
cleanupQueryTableDataCond
(
&
pTaskInfo
->
streamInfo
.
tableCond
);
...
...
@@ -1200,7 +1207,7 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT
STableKeyInfo
*
pList
=
tableListGetInfo
(
pTableListInfo
,
0
);
int32_t
size
=
tableListGetSize
(
pTableListInfo
);
tsdbReaderOpen
(
pInfo
->
vnode
,
&
pTaskInfo
->
streamInfo
.
tableCond
,
pList
,
size
,
NULL
,
&
pInfo
->
dataReader
,
NULL
,
pTaskInfo
->
storageAPI
.
storeReader
.
storeReaderOpen
(
pInfo
->
vnode
,
&
pTaskInfo
->
streamInfo
.
tableCond
,
pList
,
size
,
NULL
,
(
void
**
)
&
pInfo
->
dataReader
,
NULL
,
false
,
NULL
);
cleanupQueryTableDataCond
(
&
pTaskInfo
->
streamInfo
.
tableCond
);
...
...
@@ -1212,7 +1219,7 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT
}
else
if
(
pOffset
->
type
==
TMQ_OFFSET__SNAPSHOT_META
)
{
SStreamRawScanInfo
*
pInfo
=
pOperator
->
info
;
SSnapContext
*
sContext
=
pInfo
->
sContext
;
if
(
setForSnapS
hot
(
sContext
,
pOffset
->
uid
)
!=
0
)
{
if
(
pTaskInfo
->
storageAPI
.
snapshotFn
.
storeCreateSnaps
hot
(
sContext
,
pOffset
->
uid
)
!=
0
)
{
qError
(
"setForSnapShot error. uid:%"
PRIu64
" ,version:%"
PRId64
,
pOffset
->
uid
,
pOffset
->
version
);
terrno
=
TSDB_CODE_PAR_INTERNAL_ERROR
;
return
-
1
;
...
...
@@ -1221,7 +1228,7 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT
id
);
}
else
if
(
pOffset
->
type
==
TMQ_OFFSET__LOG
)
{
SStreamRawScanInfo
*
pInfo
=
pOperator
->
info
;
tsdb
ReaderClose
(
pInfo
->
dataReader
);
pTaskInfo
->
storageAPI
.
storeReader
.
store
ReaderClose
(
pInfo
->
dataReader
);
pInfo
->
dataReader
=
NULL
;
qDebug
(
"tmqsnap qStreamPrepareScan snapshot log, %s"
,
id
);
}
...
...
source/libs/executor/src/executorInt.c
浏览文件 @
e67b532d
...
...
@@ -33,7 +33,7 @@
#include "tcompare.h"
#include "thash.h"
#include "ttypes.h"
#include "
vnode
.h"
#include "
storageapi
.h"
#define SET_REVERSE_SCAN_FLAG(runtime) ((runtime)->scanFlag = REVERSE_SCAN)
#define GET_FORWARD_DIRECTION_FACTOR(ord) (((ord) == TSDB_ORDER_ASC) ? QUERY_ASC_FORWARD_STEP : QUERY_DESC_FORWARD_STEP)
...
...
@@ -844,6 +844,8 @@ int32_t doCopyToSDataBlock(SExecTaskInfo* pTaskInfo, SSDataBlock* pBlock, SExprS
void
doBuildStreamResBlock
(
SOperatorInfo
*
pOperator
,
SOptrBasicInfo
*
pbInfo
,
SGroupResInfo
*
pGroupResInfo
,
SDiskbasedBuf
*
pBuf
)
{
SExecTaskInfo
*
pTaskInfo
=
pOperator
->
pTaskInfo
;
SStorageAPI
*
pAPI
=
&
pTaskInfo
->
storageAPI
;
SSDataBlock
*
pBlock
=
pbInfo
->
pRes
;
// set output datablock version
...
...
@@ -860,12 +862,13 @@ void doBuildStreamResBlock(SOperatorInfo* pOperator, SOptrBasicInfo* pbInfo, SGr
doCopyToSDataBlock
(
pTaskInfo
,
pBlock
,
&
pOperator
->
exprSupp
,
pBuf
,
pGroupResInfo
,
pOperator
->
resultInfo
.
threshold
,
false
);
void
*
tbname
=
NULL
;
if
(
streamStateGetParName
(
pTaskInfo
->
streamInfo
.
pState
,
pBlock
->
info
.
id
.
groupId
,
&
tbname
)
<
0
)
{
if
(
pAPI
->
stateStore
.
streamStateGetParName
((
void
*
)
pTaskInfo
->
streamInfo
.
pState
,
pBlock
->
info
.
id
.
groupId
,
&
tbname
)
<
0
)
{
pBlock
->
info
.
parTbName
[
0
]
=
0
;
}
else
{
memcpy
(
pBlock
->
info
.
parTbName
,
tbname
,
TSDB_TABLE_NAME_LEN
);
}
streamFreeVal
(
tbname
);
pAPI
->
stateStore
.
streamStateFreeVal
(
tbname
);
}
void
doBuildResultDatablock
(
SOperatorInfo
*
pOperator
,
SOptrBasicInfo
*
pbInfo
,
SGroupResInfo
*
pGroupResInfo
,
...
...
@@ -1066,122 +1069,22 @@ int32_t createDataSinkParam(SDataSinkNode* pNode, void** pParam, SExecTaskInfo*
return
TSDB_CODE_SUCCESS
;
}
int32_t
resultRowEncode
(
void
*
k
,
int32_t
*
size
,
char
*
buf
)
{
// SResultRow* key = k;
// int len = 0;
// int struLen = *size;
// len += taosEncodeFixedI32((void**)&buf, key->pageId);
// uint32_t offset = key->offset;
// len += taosEncodeFixedU32((void**)&buf, offset);
// len += taosEncodeFixedI8((void**)&buf, key->startInterp);
// len += taosEncodeFixedI8((void**)&buf, key->endInterp);
// len += taosEncodeFixedI8((void**)&buf, key->closed);
// len += taosEncodeFixedU32((void**)&buf, key->numOfRows);
// len += taosEncodeFixedI64((void**)&buf, key->win.skey);
// len += taosEncodeFixedI64((void**)&buf, key->win.ekey);
// int32_t numOfEntryInfo = (struLen - sizeof(SResultRow)) / sizeof(struct SResultRowEntryInfo);
// len += taosEncodeFixedI32((void**)&buf, numOfEntryInfo);
// for (int i = 0; i < numOfEntryInfo; i++) {
// SResultRowEntryInfo* p = &key->pEntryInfo[i];
// uint8_t value = p->initialized ? 1 : 0;
// len += taosEncodeFixedU8((void**)&buf, value);
// value = p->complete ? 1 : 0;
// len += taosEncodeFixedU8((void**)&buf, value);
// value = p->isNullRes;
// len += taosEncodeFixedU8((void**)&buf, value);
// len += taosEncodeFixedU16((void**)&buf, p->numOfRes);
// }
// {
// char* strBuf = taosMemoryCalloc(1, *size * 100);
// resultRowToString(key, *size, strBuf);
// qWarn("encode result row:%s", strBuf);
// }
// return len;
return
0
;
}
int32_t
resultRowDecode
(
void
**
k
,
size_t
size
,
char
*
buf
)
{
// char* p1 = buf;
// int32_t numOfEntryInfo = 0;
// uint32_t entryOffset = sizeof(int32_t) + sizeof(uint32_t) + sizeof(int8_t) + sizeof(int8_t) + sizeof(int8_t) +
// sizeof(uint32_t) + sizeof(int64_t) + sizeof(int64_t);
// taosDecodeFixedI32(p1 + entryOffset, &numOfEntryInfo);
// char* p = buf;
// size = sizeof(SResultRow) + numOfEntryInfo * sizeof(SResultRowEntryInfo);
// SResultRow* key = taosMemoryCalloc(1, size);
// p = taosDecodeFixedI32(p, (int32_t*)&key->pageId);
// uint32_t offset = 0;
// p = taosDecodeFixedU32(p, &offset);
// key->offset = offset;
// p = taosDecodeFixedI8(p, (int8_t*)(&key->startInterp));
// p = taosDecodeFixedI8(p, (int8_t*)(&key->endInterp));
// p = taosDecodeFixedI8(p, (int8_t*)&key->closed);
// p = taosDecodeFixedU32(p, &key->numOfRows);
// p = taosDecodeFixedI64(p, &key->win.skey);
// p = taosDecodeFixedI64(p, &key->win.ekey);
// p = taosDecodeFixedI32(p, &numOfEntryInfo);
// for (int i = 0; i < numOfEntryInfo; i++) {
// SResultRowEntryInfo* pInfo = &key->pEntryInfo[i];
// uint8_t value = 0;
// p = taosDecodeFixedU8(p, &value);
// pInfo->initialized = (value == 1) ? true : false;
// p = taosDecodeFixedU8(p, &value);
// pInfo->complete = (value == 1) ? true : false;
// p = taosDecodeFixedU8(p, &value);
// pInfo->isNullRes = value;
// p = taosDecodeFixedU16(p, &pInfo->numOfRes);
// }
// *k = key;
// {
// char* strBuf = taosMemoryCalloc(1, size * 100);
// resultRowToString(key, size, strBuf);
// qWarn("decode result row:%s", strBuf);
// }
// return size;
return
0
;
}
int32_t
saveOutputBuf
(
SStreamState
*
pState
,
SWinKey
*
pKey
,
SResultRow
*
pResult
,
int32_t
resSize
)
{
// char* buf = taosMemoryCalloc(1, resSize * 10);
// int len = resultRowEncode((void*)pResult, &resSize, buf);
// char* buf = taosMemoryCalloc(1, resSize);
// memcpy(buf, pResult, resSize);
streamStatePut
(
pState
,
pKey
,
(
char
*
)
pResult
,
resSize
);
// taosMemoryFree(buf);
int32_t
releaseOutputBuf
(
void
*
pState
,
SWinKey
*
pKey
,
SResultRow
*
pResult
,
SStateStore
*
pAPI
)
{
pAPI
->
streamStateReleaseBuf
(
pState
,
pKey
,
pResult
);
return
TSDB_CODE_SUCCESS
;
}
int32_t
releaseOutputBuf
(
SStreamState
*
pState
,
SWinKey
*
pKey
,
SResultRow
*
pResult
)
{
streamStateReleaseBuf
(
pState
,
pKey
,
pResult
);
int32_t
saveSessionDiscBuf
(
void
*
pState
,
SSessionKey
*
key
,
void
*
buf
,
int32_t
size
,
SStateStore
*
pAPI
)
{
pAPI
->
streamStateSessionPut
(
pState
,
key
,
(
const
void
*
)
buf
,
size
);
releaseOutputBuf
(
pState
,
NULL
,
(
SResultRow
*
)
buf
,
pAPI
);
return
TSDB_CODE_SUCCESS
;
}
int32_t
saveSessionDiscBuf
(
SStreamState
*
pState
,
SSessionKey
*
key
,
void
*
buf
,
int32_t
size
)
{
streamStateSessionPut
(
pState
,
key
,
(
const
void
*
)
buf
,
size
);
releaseOutputBuf
(
pState
,
NULL
,
(
SResultRow
*
)
buf
);
return
TSDB_CODE_SUCCESS
;
}
int32_t
buildSessionResultDataBlock
(
SOperatorInfo
*
pOperator
,
SStreamState
*
pState
,
SSDataBlock
*
pBlock
,
int32_t
buildSessionResultDataBlock
(
SOperatorInfo
*
pOperator
,
void
*
pState
,
SSDataBlock
*
pBlock
,
SExprSupp
*
pSup
,
SGroupResInfo
*
pGroupResInfo
)
{
SExecTaskInfo
*
pTaskInfo
=
pOperator
->
pTaskInfo
;
SStorageAPI
*
pAPI
=
&
pTaskInfo
->
storageAPI
;
SExprInfo
*
pExprInfo
=
pSup
->
pExprInfo
;
int32_t
numOfExprs
=
pSup
->
numOfExprs
;
int32_t
*
rowEntryOffset
=
pSup
->
rowEntryInfoOffset
;
...
...
@@ -1193,7 +1096,7 @@ int32_t buildSessionResultDataBlock(SOperatorInfo* pOperator, SStreamState* pSta
SSessionKey
*
pKey
=
taosArrayGet
(
pGroupResInfo
->
pRows
,
i
);
int32_t
size
=
0
;
void
*
pVal
=
NULL
;
int32_t
code
=
streamStateSessionGet
(
pState
,
pKey
,
&
pVal
,
&
size
);
int32_t
code
=
pAPI
->
stateStore
.
streamStateSessionGet
(
pState
,
pKey
,
&
pVal
,
&
size
);
ASSERT
(
code
==
0
);
if
(
code
==
-
1
)
{
// coverity scan
...
...
@@ -1205,7 +1108,7 @@ int32_t buildSessionResultDataBlock(SOperatorInfo* pOperator, SStreamState* pSta
// no results, continue to check the next one
if
(
pRow
->
numOfRows
==
0
)
{
pGroupResInfo
->
index
+=
1
;
releaseOutputBuf
(
pState
,
NULL
,
pRow
);
releaseOutputBuf
(
pState
,
NULL
,
pRow
,
&
pAPI
->
stateStore
);
continue
;
}
...
...
@@ -1213,23 +1116,23 @@ int32_t buildSessionResultDataBlock(SOperatorInfo* pOperator, SStreamState* pSta
pBlock
->
info
.
id
.
groupId
=
pKey
->
groupId
;
void
*
tbname
=
NULL
;
if
(
streamStateGetParName
(
pTaskInfo
->
streamInfo
.
pState
,
pBlock
->
info
.
id
.
groupId
,
&
tbname
)
<
0
)
{
if
(
pAPI
->
stateStore
.
streamStateGetParName
((
void
*
)
pTaskInfo
->
streamInfo
.
pState
,
pBlock
->
info
.
id
.
groupId
,
&
tbname
)
<
0
)
{
pBlock
->
info
.
parTbName
[
0
]
=
0
;
}
else
{
memcpy
(
pBlock
->
info
.
parTbName
,
tbname
,
TSDB_TABLE_NAME_LEN
);
}
stream
FreeVal
(
tbname
);
pAPI
->
stateStore
.
streamState
FreeVal
(
tbname
);
}
else
{
// current value belongs to different group, it can't be packed into one datablock
if
(
pBlock
->
info
.
id
.
groupId
!=
pKey
->
groupId
)
{
releaseOutputBuf
(
pState
,
NULL
,
pRow
);
releaseOutputBuf
(
pState
,
NULL
,
pRow
,
&
pAPI
->
stateStore
);
break
;
}
}
if
(
pBlock
->
info
.
rows
+
pRow
->
numOfRows
>
pBlock
->
info
.
capacity
)
{
ASSERT
(
pBlock
->
info
.
rows
>
0
);
releaseOutputBuf
(
pState
,
NULL
,
pRow
);
releaseOutputBuf
(
pState
,
NULL
,
pRow
,
&
pAPI
->
stateStore
);
break
;
}
...
...
@@ -1260,7 +1163,7 @@ int32_t buildSessionResultDataBlock(SOperatorInfo* pOperator, SStreamState* pSta
pBlock
->
info
.
dataLoad
=
1
;
pBlock
->
info
.
rows
+=
pRow
->
numOfRows
;
releaseOutputBuf
(
pState
,
NULL
,
pRow
);
releaseOutputBuf
(
pState
,
NULL
,
pRow
,
&
pAPI
->
stateStore
);
}
blockDataUpdateTsWindow
(
pBlock
,
0
);
return
TSDB_CODE_SUCCESS
;
...
...
@@ -1292,7 +1195,7 @@ void qStreamCloseTsdbReader(void* task) {
qDebug
(
"wait for the reader stopping"
);
}
tsdb
ReaderClose
(
pTSInfo
->
base
.
dataReader
);
pTaskInfo
->
storageAPI
.
storeReader
.
store
ReaderClose
(
pTSInfo
->
base
.
dataReader
);
pTSInfo
->
base
.
dataReader
=
NULL
;
// restore the status, todo refactor.
...
...
source/libs/executor/src/filloperator.c
浏览文件 @
e67b532d
...
...
@@ -443,7 +443,8 @@ void* destroyStreamFillSupporter(SStreamFillSupporter* pFillSup) {
pFillSup
->
pAllColInfo
=
destroyFillColumnInfo
(
pFillSup
->
pAllColInfo
,
pFillSup
->
numOfFillCols
,
pFillSup
->
numOfAllCols
);
tSimpleHashCleanup
(
pFillSup
->
pResMap
);
pFillSup
->
pResMap
=
NULL
;
releaseOutputBuf
(
NULL
,
NULL
,
(
SResultRow
*
)
pFillSup
->
cur
.
pRowVal
);
ASSERT
(
0
);
releaseOutputBuf
(
NULL
,
NULL
,
(
SResultRow
*
)
pFillSup
->
cur
.
pRowVal
,
&
pFillSup
->
pAPI
->
stateStore
);
//?????
pFillSup
->
cur
.
pRowVal
=
NULL
;
cleanupExprSupp
(
&
pFillSup
->
notFillExprSup
);
...
...
@@ -490,74 +491,79 @@ static void resetFillWindow(SResultRowData* pRowData) {
pRowData
->
pRowVal
=
NULL
;
}
void
resetPrevAndNextWindow
(
SStreamFillSupporter
*
pFillSup
,
SStreamState
*
pState
)
{
void
resetPrevAndNextWindow
(
SStreamFillSupporter
*
pFillSup
,
void
*
pState
,
SStorageAPI
*
pAPI
)
{
resetFillWindow
(
&
pFillSup
->
prev
);
releaseOutputBuf
(
NULL
,
NULL
,
(
SResultRow
*
)
pFillSup
->
cur
.
pRowVal
);
ASSERT
(
0
);
releaseOutputBuf
(
NULL
,
NULL
,
(
SResultRow
*
)
pFillSup
->
cur
.
pRowVal
,
&
pAPI
->
stateStore
);
//???
resetFillWindow
(
&
pFillSup
->
cur
);
resetFillWindow
(
&
pFillSup
->
next
);
resetFillWindow
(
&
pFillSup
->
nextNext
);
}
void
getCurWindowFromDiscBuf
(
SOperatorInfo
*
pOperator
,
TSKEY
ts
,
uint64_t
groupId
,
SStreamFillSupporter
*
pFillSup
)
{
SStreamState
*
pState
=
pOperator
->
pTaskInfo
->
streamInfo
.
pState
;
resetPrevAndNextWindow
(
pFillSup
,
pState
);
SStorageAPI
*
pAPI
=
&
pOperator
->
pTaskInfo
->
storageAPI
;
void
*
pState
=
pOperator
->
pTaskInfo
->
streamInfo
.
pState
;
resetPrevAndNextWindow
(
pFillSup
,
pState
,
pAPI
);
SWinKey
key
=
{.
ts
=
ts
,
.
groupId
=
groupId
};
int32_t
curVLen
=
0
;
int32_t
code
=
streamStateFillGet
(
pState
,
&
key
,
(
void
**
)
&
pFillSup
->
cur
.
pRowVal
,
&
curVLen
);
int32_t
code
=
pAPI
->
stateStore
.
streamStateFillGet
(
pState
,
&
key
,
(
void
**
)
&
pFillSup
->
cur
.
pRowVal
,
&
curVLen
);
ASSERT
(
code
==
TSDB_CODE_SUCCESS
);
pFillSup
->
cur
.
key
=
key
.
ts
;
}
void
getWindowFromDiscBuf
(
SOperatorInfo
*
pOperator
,
TSKEY
ts
,
uint64_t
groupId
,
SStreamFillSupporter
*
pFillSup
)
{
SStreamState
*
pState
=
pOperator
->
pTaskInfo
->
streamInfo
.
pState
;
resetPrevAndNextWindow
(
pFillSup
,
pState
);
SStorageAPI
*
pAPI
=
&
pOperator
->
pTaskInfo
->
storageAPI
;
void
*
pState
=
pOperator
->
pTaskInfo
->
streamInfo
.
pState
;
resetPrevAndNextWindow
(
pFillSup
,
pState
,
pAPI
);
SWinKey
key
=
{.
ts
=
ts
,
.
groupId
=
groupId
};
void
*
curVal
=
NULL
;
int32_t
curVLen
=
0
;
int32_t
code
=
streamStateFillGet
(
pState
,
&
key
,
(
void
**
)
&
curVal
,
&
curVLen
);
int32_t
code
=
pAPI
->
stateStore
.
streamStateFillGet
(
pState
,
&
key
,
(
void
**
)
&
curVal
,
&
curVLen
);
ASSERT
(
code
==
TSDB_CODE_SUCCESS
);
pFillSup
->
cur
.
key
=
key
.
ts
;
pFillSup
->
cur
.
pRowVal
=
curVal
;
SStreamStateCur
*
pCur
=
streamStateFillSeekKeyPrev
(
pState
,
&
key
);
void
*
pCur
=
pAPI
->
stateStore
.
streamStateFillSeekKeyPrev
(
pState
,
&
key
);
SWinKey
preKey
=
{.
ts
=
INT64_MIN
,
.
groupId
=
groupId
};
void
*
preVal
=
NULL
;
int32_t
preVLen
=
0
;
code
=
streamStateGetGroupKVByCur
(
pCur
,
&
preKey
,
(
const
void
**
)
&
preVal
,
&
preVLen
);
code
=
pAPI
->
stateStore
.
streamStateGetGroupKVByCur
(
pCur
,
&
preKey
,
(
const
void
**
)
&
preVal
,
&
preVLen
);
if
(
code
==
TSDB_CODE_SUCCESS
)
{
pFillSup
->
prev
.
key
=
preKey
.
ts
;
pFillSup
->
prev
.
pRowVal
=
preVal
;
code
=
streamStateCurNext
(
pState
,
pCur
);
code
=
pAPI
->
stateStore
.
streamStateCurNext
(
pState
,
pCur
);
ASSERT
(
code
==
TSDB_CODE_SUCCESS
);
code
=
streamStateCurNext
(
pState
,
pCur
);
code
=
pAPI
->
stateStore
.
streamStateCurNext
(
pState
,
pCur
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
streamStateFreeCur
(
pCur
);
pAPI
->
stateStore
.
streamStateFreeCur
(
pCur
);
pCur
=
NULL
;
}
}
else
{
streamStateFreeCur
(
pCur
);
pCur
=
streamStateFillSeekKeyNext
(
pState
,
&
key
);
pAPI
->
stateStore
.
streamStateFreeCur
(
pCur
);
pCur
=
pAPI
->
stateStore
.
streamStateFillSeekKeyNext
(
pState
,
&
key
);
}
SWinKey
nextKey
=
{.
ts
=
INT64_MIN
,
.
groupId
=
groupId
};
void
*
nextVal
=
NULL
;
int32_t
nextVLen
=
0
;
code
=
streamStateGetGroupKVByCur
(
pCur
,
&
nextKey
,
(
const
void
**
)
&
nextVal
,
&
nextVLen
);
code
=
pAPI
->
stateStore
.
streamStateGetGroupKVByCur
(
pCur
,
&
nextKey
,
(
const
void
**
)
&
nextVal
,
&
nextVLen
);
if
(
code
==
TSDB_CODE_SUCCESS
)
{
pFillSup
->
next
.
key
=
nextKey
.
ts
;
pFillSup
->
next
.
pRowVal
=
nextVal
;
if
(
pFillSup
->
type
==
TSDB_FILL_PREV
||
pFillSup
->
type
==
TSDB_FILL_NEXT
)
{
code
=
streamStateCurNext
(
pState
,
pCur
);
code
=
pAPI
->
stateStore
.
streamStateCurNext
(
pState
,
pCur
);
if
(
code
==
TSDB_CODE_SUCCESS
)
{
SWinKey
nextNextKey
=
{.
groupId
=
groupId
};
void
*
nextNextVal
=
NULL
;
int32_t
nextNextVLen
=
0
;
code
=
streamStateGetGroupKVByCur
(
pCur
,
&
nextNextKey
,
(
const
void
**
)
&
nextNextVal
,
&
nextNextVLen
);
code
=
pAPI
->
stateStore
.
streamStateGetGroupKVByCur
(
pCur
,
&
nextNextKey
,
(
const
void
**
)
&
nextNextVal
,
&
nextNextVLen
);
if
(
code
==
TSDB_CODE_SUCCESS
)
{
pFillSup
->
nextNext
.
key
=
nextNextKey
.
ts
;
pFillSup
->
nextNext
.
pRowVal
=
nextNextVal
;
...
...
@@ -565,7 +571,7 @@ void getWindowFromDiscBuf(SOperatorInfo* pOperator, TSKEY ts, uint64_t groupId,
}
}
}
streamStateFreeCur
(
pCur
);
pAPI
->
stateStore
.
streamStateFreeCur
(
pCur
);
}
static
bool
hasPrevWindow
(
SStreamFillSupporter
*
pFillSup
)
{
return
pFillSup
->
prev
.
key
!=
INT64_MIN
;
}
...
...
@@ -922,8 +928,10 @@ static void doStreamFillLinear(SStreamFillSupporter* pFillSup, SStreamFillInfo*
}
static
void
keepResultInDiscBuf
(
SOperatorInfo
*
pOperator
,
uint64_t
groupId
,
SResultRowData
*
pRow
,
int32_t
len
)
{
SStorageAPI
*
pAPI
=
&
pOperator
->
pTaskInfo
->
storageAPI
;
SWinKey
key
=
{.
groupId
=
groupId
,
.
ts
=
pRow
->
key
};
int32_t
code
=
streamStateFillPut
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
key
,
pRow
->
pRowVal
,
len
);
int32_t
code
=
pAPI
->
stateStore
.
streamStateFillPut
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
key
,
pRow
->
pRowVal
,
len
);
qDebug
(
"===stream===fill operator save key ts:%"
PRId64
" group id:%"
PRIu64
" code:%d"
,
key
.
ts
,
key
.
groupId
,
code
);
ASSERT
(
code
==
TSDB_CODE_SUCCESS
);
}
...
...
@@ -1021,7 +1029,8 @@ static void doStreamFillImpl(SOperatorInfo* pOperator) {
}
static
void
buildDeleteRange
(
SOperatorInfo
*
pOp
,
TSKEY
start
,
TSKEY
end
,
uint64_t
groupId
,
SSDataBlock
*
delRes
)
{
SStreamState
*
pState
=
pOp
->
pTaskInfo
->
streamInfo
.
pState
;
SStorageAPI
*
pAPI
=
&
pOp
->
pTaskInfo
->
storageAPI
;
void
*
pState
=
pOp
->
pTaskInfo
->
streamInfo
.
pState
;
SSDataBlock
*
pBlock
=
delRes
;
SColumnInfoData
*
pStartCol
=
taosArrayGet
(
pBlock
->
pDataBlock
,
START_TS_COLUMN_INDEX
);
...
...
@@ -1041,14 +1050,14 @@ static void buildDeleteRange(SOperatorInfo* pOp, TSKEY start, TSKEY end, uint64_
SColumnInfoData
*
pTableCol
=
taosArrayGet
(
pBlock
->
pDataBlock
,
TABLE_NAME_COLUMN_INDEX
);
void
*
tbname
=
NULL
;
streamStateGetParName
(
pOp
->
pTaskInfo
->
streamInfo
.
pState
,
groupId
,
&
tbname
);
pAPI
->
stateStore
.
streamStateGetParName
(
pOp
->
pTaskInfo
->
streamInfo
.
pState
,
groupId
,
&
tbname
);
if
(
tbname
==
NULL
)
{
colDataSetNULL
(
pTableCol
,
pBlock
->
info
.
rows
);
}
else
{
char
parTbName
[
VARSTR_HEADER_SIZE
+
TSDB_TABLE_NAME_LEN
];
STR_WITH_MAXSIZE_TO_VARSTR
(
parTbName
,
tbname
,
sizeof
(
parTbName
));
colDataSetVal
(
pTableCol
,
pBlock
->
info
.
rows
,
(
const
char
*
)
parTbName
,
false
);
stream
FreeVal
(
tbname
);
pAPI
->
stateStore
.
streamState
FreeVal
(
tbname
);
}
pBlock
->
info
.
rows
++
;
...
...
@@ -1070,12 +1079,13 @@ static void buildDeleteResult(SOperatorInfo* pOperator, TSKEY startTs, TSKEY end
}
static
void
doDeleteFillResultImpl
(
SOperatorInfo
*
pOperator
,
TSKEY
startTs
,
TSKEY
endTs
,
uint64_t
groupId
)
{
SStorageAPI
*
pAPI
=
&
pOperator
->
pTaskInfo
->
storageAPI
;
SStreamFillOperatorInfo
*
pInfo
=
pOperator
->
info
;
getWindowFromDiscBuf
(
pOperator
,
startTs
,
groupId
,
pInfo
->
pFillSup
);
setDeleteFillValueInfo
(
startTs
,
endTs
,
pInfo
->
pFillSup
,
pInfo
->
pFillInfo
);
SWinKey
key
=
{.
ts
=
startTs
,
.
groupId
=
groupId
};
if
(
!
pInfo
->
pFillInfo
->
needFill
)
{
streamStateFillDel
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
key
);
pAPI
->
stateStore
.
streamStateFillDel
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
key
);
buildDeleteResult
(
pOperator
,
startTs
,
endTs
,
groupId
,
pInfo
->
pDelRes
);
}
else
{
STimeRange
tw
=
{
...
...
@@ -1093,6 +1103,8 @@ static void doDeleteFillResultImpl(SOperatorInfo* pOperator, TSKEY startTs, TSKE
}
static
void
doDeleteFillFinalize
(
SOperatorInfo
*
pOperator
)
{
SStorageAPI
*
pAPI
=
&
pOperator
->
pTaskInfo
->
storageAPI
;
SStreamFillOperatorInfo
*
pInfo
=
pOperator
->
info
;
SStreamFillInfo
*
pFillInfo
=
pInfo
->
pFillInfo
;
int32_t
size
=
taosArrayGetSize
(
pFillInfo
->
delRanges
);
...
...
@@ -1109,17 +1121,16 @@ static void doDeleteFillFinalize(SOperatorInfo* pOperator) {
pInfo
->
pRes
->
info
.
id
.
groupId
=
range
->
groupId
;
}
SWinKey
key
=
{.
ts
=
range
->
skey
,
.
groupId
=
range
->
groupId
};
streamStateFillDel
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
key
);
pAPI
->
stateStore
.
streamStateFillDel
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
key
);
}
}
static
void
doDeleteFillResult
(
SOperatorInfo
*
pOperator
)
{
SStorageAPI
*
pAPI
=
&
pOperator
->
pTaskInfo
->
storageAPI
;
SStreamFillOperatorInfo
*
pInfo
=
pOperator
->
info
;
SStreamFillSupporter
*
pFillSup
=
pInfo
->
pFillSup
;
SStreamFillInfo
*
pFillInfo
=
pInfo
->
pFillInfo
;
SSDataBlock
*
pBlock
=
pInfo
->
pSrcDelBlock
;
SSDataBlock
*
pRes
=
pInfo
->
pRes
;
SSDataBlock
*
pDelRes
=
pInfo
->
pDelRes
;
SColumnInfoData
*
pStartCol
=
taosArrayGet
(
pBlock
->
pDataBlock
,
START_TS_COLUMN_INDEX
);
TSKEY
*
tsStarts
=
(
TSKEY
*
)
pStartCol
->
pData
;
...
...
@@ -1130,7 +1141,7 @@ static void doDeleteFillResult(SOperatorInfo* pOperator) {
TSKEY
endTs
=
ts
;
uint64_t
groupId
=
groupIds
[
pInfo
->
srcDelRowIndex
];
SWinKey
key
=
{.
ts
=
ts
,
.
groupId
=
groupId
};
SStreamStateCur
*
pCur
=
streamStateGetAndCheckCur
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
key
);
void
*
pCur
=
pAPI
->
stateStore
.
streamStateGetAndCheckCur
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
key
);
if
(
!
pCur
)
{
pInfo
->
srcDelRowIndex
++
;
continue
;
...
...
@@ -1152,15 +1163,15 @@ static void doDeleteFillResult(SOperatorInfo* pOperator) {
SWinKey
delKey
=
{.
groupId
=
delGroupId
,
.
ts
=
delTs
};
if
(
delTs
==
nextKey
.
ts
)
{
code
=
streamStateCurNext
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
pCur
);
code
=
pAPI
->
stateStore
.
streamStateCurNext
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
pCur
);
if
(
code
==
TSDB_CODE_SUCCESS
)
{
code
=
streamStateGetGroupKVByCur
(
pCur
,
&
nextKey
,
(
const
void
**
)
&
nextVal
,
&
nextLen
);
code
=
pAPI
->
stateStore
.
streamStateGetGroupKVByCur
(
pCur
,
&
nextKey
,
(
const
void
**
)
&
nextVal
,
&
nextLen
);
}
// ts will be deleted later
if
(
delTs
!=
ts
)
{
streamStateFillDel
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
delKey
);
streamStateFreeCur
(
pCur
);
pCur
=
streamStateGetAndCheckCur
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
nextKey
);
pAPI
->
stateStore
.
streamStateFillDel
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
delKey
);
pAPI
->
stateStore
.
streamStateFreeCur
(
pCur
);
pCur
=
pAPI
->
stateStore
.
streamStateGetAndCheckCur
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
nextKey
);
}
endTs
=
TMAX
(
delTs
,
nextKey
.
ts
-
1
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
...
...
@@ -1169,9 +1180,11 @@ static void doDeleteFillResult(SOperatorInfo* pOperator) {
}
pInfo
->
srcDelRowIndex
++
;
}
streamStateFreeCur
(
pCur
);
pAPI
->
stateStore
.
streamStateFreeCur
(
pCur
);
doDeleteFillResultImpl
(
pOperator
,
ts
,
endTs
,
groupId
);
}
pFillInfo
->
current
=
pFillInfo
->
end
+
1
;
}
...
...
source/libs/executor/src/groupoperator.c
浏览文件 @
e67b532d
...
...
@@ -950,6 +950,8 @@ static bool hasRemainPartion(SStreamPartitionOperatorInfo* pInfo) { return pInfo
static
bool
hasRemainTbName
(
SStreamPartitionOperatorInfo
*
pInfo
)
{
return
pInfo
->
pTbNameIte
!=
NULL
;
}
static
SSDataBlock
*
buildStreamPartitionResult
(
SOperatorInfo
*
pOperator
)
{
SStorageAPI
*
pAPI
=
&
pOperator
->
pTaskInfo
->
storageAPI
;
SStreamPartitionOperatorInfo
*
pInfo
=
pOperator
->
info
;
SSDataBlock
*
pDest
=
pInfo
->
binfo
.
pRes
;
ASSERT
(
hasRemainPartion
(
pInfo
));
...
...
@@ -972,9 +974,9 @@ static SSDataBlock* buildStreamPartitionResult(SOperatorInfo* pOperator) {
pDest
->
info
.
parTbName
[
0
]
=
0
;
if
(
pInfo
->
tbnameCalSup
.
numOfExprs
>
0
)
{
void
*
tbname
=
NULL
;
if
(
streamStateGetParName
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
pParInfo
->
groupId
,
&
tbname
)
==
0
)
{
if
(
pAPI
->
stateStore
.
streamStateGetParName
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
pParInfo
->
groupId
,
&
tbname
)
==
0
)
{
memcpy
(
pDest
->
info
.
parTbName
,
tbname
,
TSDB_TABLE_NAME_LEN
);
stream
FreeVal
(
tbname
);
pAPI
->
stateStore
.
streamState
FreeVal
(
tbname
);
}
}
taosArrayDestroy
(
pParInfo
->
rowIds
);
...
...
@@ -990,10 +992,10 @@ static SSDataBlock* buildStreamPartitionResult(SOperatorInfo* pOperator) {
return
pDest
;
}
void
appendCreateTableRow
(
SStreamState
*
pState
,
SExprSupp
*
pTableSup
,
SExprSupp
*
pTagSup
,
uint64_t
groupId
,
SSDataBlock
*
pSrcBlock
,
int32_t
rowId
,
SSDataBlock
*
pDestBlock
)
{
void
appendCreateTableRow
(
void
*
pState
,
SExprSupp
*
pTableSup
,
SExprSupp
*
pTagSup
,
uint64_t
groupId
,
SSDataBlock
*
pSrcBlock
,
int32_t
rowId
,
SSDataBlock
*
pDestBlock
,
SStateStore
*
pAPI
)
{
void
*
pValue
=
NULL
;
if
(
streamStateGetParName
(
pState
,
groupId
,
&
pValue
)
!=
0
)
{
if
(
pAPI
->
streamStateGetParName
(
pState
,
groupId
,
&
pValue
)
!=
0
)
{
SSDataBlock
*
pTmpBlock
=
blockCopyOneRow
(
pSrcBlock
,
rowId
);
memset
(
pTmpBlock
->
info
.
parTbName
,
0
,
TSDB_TABLE_NAME_LEN
);
pTmpBlock
->
info
.
id
.
groupId
=
groupId
;
...
...
@@ -1010,7 +1012,7 @@ void appendCreateTableRow(SStreamState* pState, SExprSupp* pTableSup, SExprSupp*
void
*
pData
=
colDataGetData
(
pTbCol
,
pDestBlock
->
info
.
rows
-
1
);
len
=
TMIN
(
varDataLen
(
pData
),
TSDB_TABLE_NAME_LEN
-
1
);
memcpy
(
tbName
,
varDataVal
(
pData
),
len
);
streamStatePutParName
(
pState
,
groupId
,
tbName
);
pAPI
->
streamStatePutParName
(
pState
,
groupId
,
tbName
);
}
memcpy
(
pTmpBlock
->
info
.
parTbName
,
tbName
,
len
);
pDestBlock
->
info
.
rows
--
;
...
...
@@ -1034,10 +1036,12 @@ void appendCreateTableRow(SStreamState* pState, SExprSupp* pTableSup, SExprSupp*
}
else
{
memcpy
(
pSrcBlock
->
info
.
parTbName
,
pValue
,
TSDB_TABLE_NAME_LEN
);
}
streamStateReleaseBuf
(
pState
,
NULL
,
pValue
);
pAPI
->
streamStateReleaseBuf
(
pState
,
NULL
,
pValue
);
}
static
SSDataBlock
*
buildStreamCreateTableResult
(
SOperatorInfo
*
pOperator
)
{
SExecTaskInfo
*
pTask
=
pOperator
->
pTaskInfo
;
SStreamPartitionOperatorInfo
*
pInfo
=
pOperator
->
info
;
if
((
pInfo
->
tbnameCalSup
.
numOfExprs
==
0
&&
pInfo
->
tagCalSup
.
numOfExprs
==
0
)
||
taosHashGetSize
(
pInfo
->
pPartitions
)
==
0
)
{
...
...
@@ -1050,8 +1054,8 @@ static SSDataBlock* buildStreamCreateTableResult(SOperatorInfo* pOperator) {
if
(
pInfo
->
pTbNameIte
!=
NULL
)
{
SPartitionDataInfo
*
pParInfo
=
(
SPartitionDataInfo
*
)
pInfo
->
pTbNameIte
;
int32_t
rowId
=
*
(
int32_t
*
)
taosArrayGet
(
pParInfo
->
rowIds
,
0
);
appendCreateTableRow
(
p
Operator
->
pTaskInfo
->
streamInfo
.
pState
,
&
pInfo
->
tbnameCalSup
,
&
pInfo
->
tagCalSup
,
pParInfo
->
groupId
,
pSrc
,
rowId
,
pInfo
->
pCreateTbRes
);
appendCreateTableRow
(
p
Task
->
streamInfo
.
pState
,
&
pInfo
->
tbnameCalSup
,
&
pInfo
->
tagCalSup
,
pParInfo
->
groupId
,
pSrc
,
rowId
,
pInfo
->
pCreateTbRes
,
&
pTask
->
storageAPI
.
stateStore
);
pInfo
->
pTbNameIte
=
taosHashIterate
(
pInfo
->
pPartitions
,
pInfo
->
pTbNameIte
);
}
return
pInfo
->
pCreateTbRes
->
info
.
rows
>
0
?
pInfo
->
pCreateTbRes
:
NULL
;
...
...
@@ -1164,14 +1168,17 @@ static void destroyStreamPartitionOperatorInfo(void* param) {
}
void
initParDownStream
(
SOperatorInfo
*
downstream
,
SPartitionBySupporter
*
pParSup
,
SExprSupp
*
pExpr
)
{
SStorageAPI
*
pAPI
=
&
downstream
->
pTaskInfo
->
storageAPI
;
if
(
downstream
->
operatorType
!=
QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN
)
{
return
;
}
SStreamScanInfo
*
pScanInfo
=
downstream
->
info
;
pScanInfo
->
partitionSup
=
*
pParSup
;
pScanInfo
->
pPartScalarSup
=
pExpr
;
if
(
!
pScanInfo
->
igCheckUpdate
&&
!
pScanInfo
->
pUpdateInfo
)
{
pScanInfo
->
pUpdateInfo
=
updateInfoInit
(
60000
,
TSDB_TIME_PRECISION_MILLI
,
0
);
pScanInfo
->
pUpdateInfo
=
pAPI
->
stateStore
.
updateInfoInit
(
60000
,
TSDB_TIME_PRECISION_MILLI
,
0
);
}
}
...
...
source/libs/executor/src/operator.c
浏览文件 @
e67b532d
...
...
@@ -25,7 +25,8 @@
#include "operator.h"
#include "query.h"
#include "querytask.h"
#include "vnode.h"
#include "storageapi.h"
SOperatorFpSet
createOperatorFpSet
(
__optr_open_fn_t
openFn
,
__optr_fn_t
nextFn
,
__optr_fn_t
cleanup
,
__optr_close_fn_t
closeFn
,
__optr_reqBuf_fn_t
reqBufFn
,
...
...
@@ -233,11 +234,12 @@ int32_t getTableScanInfo(SOperatorInfo* pOperator, int32_t* order, int32_t* scan
}
static
ERetType
doStopDataReader
(
SOperatorInfo
*
pOperator
,
STraverParam
*
pParam
,
const
char
*
pIdStr
)
{
SStorageAPI
*
pAPI
=
pParam
->
pParam
;
if
(
pOperator
->
operatorType
==
QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN
)
{
STableScanInfo
*
pInfo
=
pOperator
->
info
;
if
(
pInfo
->
base
.
dataReader
!=
NULL
)
{
tsdbReaderSetCloseFla
g
(
pInfo
->
base
.
dataReader
);
pAPI
->
storeReader
.
storeReaderNotifyClosin
g
(
pInfo
->
base
.
dataReader
);
}
return
OPTR_FN_RET_ABORT
;
}
else
if
(
pOperator
->
operatorType
==
QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN
)
{
...
...
@@ -246,7 +248,7 @@ static ERetType doStopDataReader(SOperatorInfo* pOperator, STraverParam* pParam,
if
(
pInfo
->
pTableScanOp
!=
NULL
)
{
STableScanInfo
*
pTableScanInfo
=
pInfo
->
pTableScanOp
->
info
;
if
(
pTableScanInfo
!=
NULL
&&
pTableScanInfo
->
base
.
dataReader
!=
NULL
)
{
tsdbReaderSetCloseFla
g
(
pTableScanInfo
->
base
.
dataReader
);
pAPI
->
storeReader
.
storeReaderNotifyClosin
g
(
pTableScanInfo
->
base
.
dataReader
);
}
}
...
...
@@ -256,8 +258,8 @@ static ERetType doStopDataReader(SOperatorInfo* pOperator, STraverParam* pParam,
return
OPTR_FN_RET_CONTINUE
;
}
int32_t
stopTableScanOperator
(
SOperatorInfo
*
pOperator
,
const
char
*
pIdStr
)
{
STraverParam
p
=
{
0
};
int32_t
stopTableScanOperator
(
SOperatorInfo
*
pOperator
,
const
char
*
pIdStr
,
SStorageAPI
*
pAPI
)
{
STraverParam
p
=
{
.
pParam
=
pAPI
};
traverseOperatorTree
(
pOperator
,
doStopDataReader
,
&
p
,
pIdStr
);
return
p
.
code
;
}
...
...
@@ -379,7 +381,7 @@ SOperatorInfo* createOperator(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SR
if
(
pBlockNode
->
tableType
==
TSDB_SUPER_TABLE
)
{
SArray
*
pList
=
taosArrayInit
(
4
,
sizeof
(
STableKeyInfo
));
int32_t
code
=
vnodeGetAll
TableList
(
pHandle
->
vnode
,
pBlockNode
->
uid
,
pList
);
int32_t
code
=
pTaskInfo
->
storageAPI
.
metaFn
.
storeGet
TableList
(
pHandle
->
vnode
,
pBlockNode
->
uid
,
pList
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
pTaskInfo
->
code
=
terrno
;
return
NULL
;
...
...
source/libs/executor/src/projectoperator.c
浏览文件 @
e67b532d
...
...
@@ -18,6 +18,7 @@
#include "functionMgt.h"
#include "operator.h"
#include "querytask.h"
#include "tdatablock.h"
typedef
struct
SProjectOperatorInfo
{
SOptrBasicInfo
binfo
;
...
...
source/libs/executor/src/querytask.c
浏览文件 @
e67b532d
...
...
@@ -29,9 +29,9 @@
#include "operator.h"
#include "query.h"
#include "querytask.h"
#include "storageapi.h"
#include "thash.h"
#include "ttypes.h"
#include "vnode.h"
#define CLEAR_QUERY_STATUS(q, st) ((q)->status &= (~(st)))
...
...
@@ -63,7 +63,7 @@ bool isTaskKilled(SExecTaskInfo* pTaskInfo) { return (0 != pTaskInfo->code); }
void
setTaskKilled
(
SExecTaskInfo
*
pTaskInfo
,
int32_t
rspCode
)
{
pTaskInfo
->
code
=
rspCode
;
stopTableScanOperator
(
pTaskInfo
->
pRoot
,
pTaskInfo
->
id
.
str
);
stopTableScanOperator
(
pTaskInfo
->
pRoot
,
pTaskInfo
->
id
.
str
,
&
pTaskInfo
->
storageAPI
);
}
void
setTaskStatus
(
SExecTaskInfo
*
pTaskInfo
,
int8_t
status
)
{
...
...
@@ -120,13 +120,15 @@ int32_t initQueriedTableSchemaInfo(SReadHandle* pHandle, SScanPhysiNode* pScanNo
return
terrno
;
}
metaReaderInit
(
&
mr
,
pHandle
->
meta
,
0
);
int32_t
code
=
metaGetTableEntryByUidCache
(
&
mr
,
pScanNode
->
uid
);
SStorageAPI
*
pAPI
=
&
pTaskInfo
->
storageAPI
;
pAPI
->
metaReaderFn
.
initReader
(
&
mr
,
pHandle
->
meta
,
0
);
int32_t
code
=
pAPI
->
metaReaderFn
.
readerGetEntryGetUidCache
(
&
mr
,
pScanNode
->
uid
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
qError
(
"failed to get the table meta, uid:0x%"
PRIx64
", suid:0x%"
PRIx64
", %s"
,
pScanNode
->
uid
,
pScanNode
->
suid
,
GET_TASKID
(
pTaskInfo
));
metaReaderClea
r
(
&
mr
);
pAPI
->
metaReaderFn
.
clearReade
r
(
&
mr
);
return
terrno
;
}
...
...
@@ -142,9 +144,9 @@ int32_t initQueriedTableSchemaInfo(SReadHandle* pHandle, SScanPhysiNode* pScanNo
tDecoderClear
(
&
mr
.
coder
);
tb_uid_t
suid
=
mr
.
me
.
ctbEntry
.
suid
;
code
=
metaGetTableEntryBy
UidCache
(
&
mr
,
suid
);
code
=
pAPI
->
metaReaderFn
.
readerGetEntryGet
UidCache
(
&
mr
,
suid
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
metaReaderClea
r
(
&
mr
);
pAPI
->
metaReaderFn
.
clearReade
r
(
&
mr
);
return
terrno
;
}
...
...
@@ -154,7 +156,7 @@ int32_t initQueriedTableSchemaInfo(SReadHandle* pHandle, SScanPhysiNode* pScanNo
pSchemaInfo
->
sw
=
tCloneSSchemaWrapper
(
&
mr
.
me
.
ntbEntry
.
schemaRow
);
}
metaReaderClea
r
(
&
mr
);
pAPI
->
metaReaderFn
.
clearReade
r
(
&
mr
);
pSchemaInfo
->
qsw
=
extractQueriedColumnSchema
(
pScanNode
);
return
TSDB_CODE_SUCCESS
;
...
...
source/libs/executor/src/scanoperator.c
浏览文件 @
e67b532d
此差异已折叠。
点击以展开。
source/libs/executor/src/sysscanoperator.c
浏览文件 @
e67b532d
此差异已折叠。
点击以展开。
source/libs/executor/src/timesliceoperator.c
浏览文件 @
e67b532d
...
...
@@ -18,6 +18,7 @@
#include "functionMgt.h"
#include "operator.h"
#include "querytask.h"
#include "storageapi.h"
#include "tcommon.h"
#include "tcompare.h"
#include "tdatablock.h"
...
...
source/libs/executor/src/timewindowoperator.c
浏览文件 @
e67b532d
此差异已折叠。
点击以展开。
source/libs/function/CMakeLists.txt
浏览文件 @
e67b532d
...
...
@@ -33,7 +33,6 @@ target_link_libraries(
PRIVATE qcom
PRIVATE scalar
PRIVATE transport
PRIVATE stream
${
LINK_JEMALLOC
}
PUBLIC uv_a
)
...
...
source/libs/function/src/builtinsimpl.c
浏览文件 @
e67b532d
...
...
@@ -18,7 +18,7 @@
#include "function.h"
#include "query.h"
#include "querynodes.h"
#include "streamState.h"
//
#include "streamState.h"
#include "tcompare.h"
#include "tdatablock.h"
#include "tdigest.h"
...
...
@@ -3155,9 +3155,9 @@ static int32_t doSaveTupleData(SSerializeDataHandle* pHandle, const void* pBuf,
releaseBufPage
(
pHandle
->
pBuf
,
pPage
);
}
else
{
// other tuple save policy
if
(
streamStateFuncPut
(
pHandle
->
pState
,
key
,
pBuf
,
length
)
>=
0
)
{
p
.
streamTupleKey
=
*
key
;
}
//
if (streamStateFuncPut(pHandle->pState, key, pBuf, length) >= 0) {
//
p.streamTupleKey = *key;
//
}
}
*
pPos
=
p
;
...
...
@@ -3192,7 +3192,7 @@ static int32_t doUpdateTupleData(SSerializeDataHandle* pHandle, const void* pBuf
setBufPageDirty
(
pPage
,
true
);
releaseBufPage
(
pHandle
->
pBuf
,
pPage
);
}
else
{
streamStateFuncPut
(
pHandle
->
pState
,
&
pPos
->
streamTupleKey
,
pBuf
,
length
);
//
streamStateFuncPut(pHandle->pState, &pPos->streamTupleKey, pBuf, length);
}
return
TSDB_CODE_SUCCESS
;
...
...
@@ -3217,7 +3217,7 @@ static char* doLoadTupleData(SSerializeDataHandle* pHandle, const STuplePos* pPo
}
else
{
void
*
value
=
NULL
;
int32_t
vLen
;
streamStateFuncGet
(
pHandle
->
pState
,
&
pPos
->
streamTupleKey
,
&
value
,
&
vLen
);
//
streamStateFuncGet(pHandle->pState, &pPos->streamTupleKey, &value, &vLen);
return
(
char
*
)
value
;
}
}
...
...
source/libs/index/CMakeLists.txt
浏览文件 @
e67b532d
...
...
@@ -12,7 +12,7 @@ target_link_libraries(
PUBLIC os
PUBLIC util
PUBLIC common
PUBLIC vnode
#
PUBLIC vnode
PUBLIC nodes
PUBLIC scalar
PUBLIC function
...
...
source/libs/index/src/indexFilter.c
浏览文件 @
e67b532d
...
...
@@ -20,7 +20,7 @@
#include "querynodes.h"
#include "scalar.h"
#include "tdatablock.h"
#include "
vnod
e.h"
#include "
tsdstorag
e.h"
// clang-format off
#define SIF_ERR_RET(c) do { int32_t _code = c; if (_code != TSDB_CODE_SUCCESS) { terrno = _code; return _code; } } while (0)
...
...
@@ -79,6 +79,7 @@ typedef struct SIFParam {
char
colName
[
TSDB_COL_NAME_LEN
*
2
+
4
];
SIndexMetaArg
arg
;
SStoreAPI
api
;
}
SIFParam
;
typedef
struct
SIFCtx
{
...
...
@@ -659,7 +660,7 @@ static int32_t sifDoIndex(SIFParam *left, SIFParam *right, int8_t operType, SIFP
}
else
{
if
(
sifSetFltParam
(
left
,
right
,
&
typedata
,
&
param
)
!=
0
)
return
-
1
;
}
ret
=
metaFilterTableIds
(
arg
->
metaEx
,
&
param
,
output
->
result
);
ret
=
left
->
api
.
metaFilterTableIds
(
arg
->
metaEx
,
&
param
,
output
->
result
);
}
return
ret
;
}
...
...
source/libs/scalar/CMakeLists.txt
浏览文件 @
e67b532d
...
...
@@ -14,6 +14,7 @@ target_link_libraries(scalar
PRIVATE nodes
PRIVATE function
PRIVATE qcom
PRIVATE parser
)
if
(
${
BUILD_TEST
}
)
...
...
source/libs/stream/inc/streamBackendRocksdb.h
浏览文件 @
e67b532d
...
...
@@ -17,7 +17,6 @@
#define _STREAM_BACKEDN_ROCKSDB_H_
#include "rocksdb/c.h"
// #include "streamInc.h"
#include "streamState.h"
#include "tcoding.h"
#include "tcommon.h"
...
...
source/libs/stream/src/streamBackendRocksdb.c
浏览文件 @
e67b532d
此差异已折叠。
点击以展开。
source/libs/stream/src/tstreamFileState.c
浏览文件 @
e67b532d
...
...
@@ -21,6 +21,7 @@
#include "tcommon.h"
#include "thash.h"
#include "tsimplehash.h"
#include "storageapi.h"
#define FLUSH_RATIO 0.5
#define FLUSH_NUM 4
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录