Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
ed1a71f1
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
ed1a71f1
编写于
5月 12, 2022
作者:
S
slzhou@taodata.com
浏览文件
操作
浏览文件
下载
差异文件
Merge branch '3.0' of github.com:taosdata/TDengine into feature/udf
上级
d37d4e5b
17fe1d44
变更
53
显示空白变更内容
内联
并排
Showing
53 changed file
with
1466 addition
and
1752 deletion
+1466
-1752
include/common/tmsg.h
include/common/tmsg.h
+21
-13
include/common/tvariant.h
include/common/tvariant.h
+4
-5
include/libs/parser/parser.h
include/libs/parser/parser.h
+3
-3
include/libs/planner/planner.h
include/libs/planner/planner.h
+2
-1
include/libs/scheduler/scheduler.h
include/libs/scheduler/scheduler.h
+2
-1
source/client/inc/clientInt.h
source/client/inc/clientInt.h
+2
-2
source/client/inc/clientStmt.h
source/client/inc/clientStmt.h
+6
-2
source/client/src/clientImpl.c
source/client/src/clientImpl.c
+9
-5
source/client/src/clientMsgHandler.c
source/client/src/clientMsgHandler.c
+1
-1
source/client/src/clientSml.c
source/client/src/clientSml.c
+4
-4
source/client/src/clientStmt.c
source/client/src/clientStmt.c
+254
-116
source/common/src/tmsg.c
source/common/src/tmsg.c
+83
-0
source/common/src/trow.c
source/common/src/trow.c
+2
-2
source/common/src/tvariant.c
source/common/src/tvariant.c
+22
-90
source/common/test/commonTests.cpp
source/common/test/commonTests.cpp
+40
-51
source/dnode/mnode/impl/src/mndProfile.c
source/dnode/mnode/impl/src/mndProfile.c
+2
-0
source/dnode/vnode/src/inc/meta.h
source/dnode/vnode/src/inc/meta.h
+5
-0
source/dnode/vnode/src/inc/vnodeInt.h
source/dnode/vnode/src/inc/vnodeInt.h
+1
-1
source/dnode/vnode/src/meta/metaOpen.c
source/dnode/vnode/src/meta/metaOpen.c
+12
-0
source/dnode/vnode/src/meta/metaQuery.c
source/dnode/vnode/src/meta/metaQuery.c
+6
-0
source/dnode/vnode/src/meta/metaTable.c
source/dnode/vnode/src/meta/metaTable.c
+14
-7
source/dnode/vnode/src/tsdb/tsdbCommit.c
source/dnode/vnode/src/tsdb/tsdbCommit.c
+15
-6
source/dnode/vnode/src/tsdb/tsdbMemTable.c
source/dnode/vnode/src/tsdb/tsdbMemTable.c
+3
-2
source/dnode/vnode/src/tsdb/tsdbMemTable2.c
source/dnode/vnode/src/tsdb/tsdbMemTable2.c
+2
-2
source/dnode/vnode/src/tsdb/tsdbRead.c
source/dnode/vnode/src/tsdb/tsdbRead.c
+2
-0
source/dnode/vnode/src/tsdb/tsdbWrite.c
source/dnode/vnode/src/tsdb/tsdbWrite.c
+4
-3
source/dnode/vnode/src/vnd/vnodeQuery.c
source/dnode/vnode/src/vnd/vnodeQuery.c
+1
-1
source/dnode/vnode/src/vnd/vnodeSvr.c
source/dnode/vnode/src/vnd/vnodeSvr.c
+64
-33
source/libs/executor/inc/indexoperator.h
source/libs/executor/inc/indexoperator.h
+14
-2
source/libs/executor/src/indexoperator.c
source/libs/executor/src/indexoperator.c
+3
-3
source/libs/executor/test/executorTests.cpp
source/libs/executor/test/executorTests.cpp
+0
-4
source/libs/executor/test/indexexcutorTests.cpp
source/libs/executor/test/indexexcutorTests.cpp
+253
-0
source/libs/function/src/builtins.c
source/libs/function/src/builtins.c
+1
-21
source/libs/parser/inc/parInsertData.h
source/libs/parser/inc/parInsertData.h
+1
-1
source/libs/parser/src/parAstCreater.c
source/libs/parser/src/parAstCreater.c
+14
-7
source/libs/parser/src/parInsert.c
source/libs/parser/src/parInsert.c
+107
-103
source/libs/parser/src/parInsertData.c
source/libs/parser/src/parInsertData.c
+17
-6
source/libs/parser/src/parTranslater.c
source/libs/parser/src/parTranslater.c
+3
-0
source/libs/parser/test/parInitialCTest.cpp
source/libs/parser/test/parInitialCTest.cpp
+217
-70
source/libs/planner/src/planner.c
source/libs/planner/src/planner.c
+132
-9
source/libs/scalar/src/filter.c
source/libs/scalar/src/filter.c
+3
-2
source/libs/scalar/src/scalar.c
source/libs/scalar/src/scalar.c
+4
-3
source/libs/scalar/src/sclvector.c
source/libs/scalar/src/sclvector.c
+6
-5
source/libs/scheduler/inc/schedulerInt.h
source/libs/scheduler/inc/schedulerInt.h
+2
-0
source/libs/scheduler/src/scheduler.c
source/libs/scheduler/src/scheduler.c
+42
-14
source/libs/scheduler/test/schedulerTests.cpp
source/libs/scheduler/test/schedulerTests.cpp
+1
-1
source/libs/sync/src/syncRaftLog.c
source/libs/sync/src/syncRaftLog.c
+4
-4
source/os/src/osMemory.c
source/os/src/osMemory.c
+2
-1
source/util/src/tcache.c
source/util/src/tcache.c
+2
-1
source/util/src/tuuid.c
source/util/src/tuuid.c
+12
-4
tests/script/api/batchprepare.c
tests/script/api/batchprepare.c
+35
-1134
tests/script/tsim/db/alter_option.sim
tests/script/tsim/db/alter_option.sim
+2
-2
tests/script/tsim/db/basic6.sim
tests/script/tsim/db/basic6.sim
+3
-4
未找到文件。
include/common/tmsg.h
浏览文件 @
ed1a71f1
...
@@ -252,24 +252,31 @@ STSRow* tGetSubmitBlkNext(SSubmitBlkIter* pIter);
...
@@ -252,24 +252,31 @@ STSRow* tGetSubmitBlkNext(SSubmitBlkIter* pIter);
int32_t
tPrintFixedSchemaSubmitReq
(
const
SSubmitReq
*
pReq
,
STSchema
*
pSchema
);
int32_t
tPrintFixedSchemaSubmitReq
(
const
SSubmitReq
*
pReq
,
STSchema
*
pSchema
);
typedef
struct
{
typedef
struct
{
int32_t
index
;
// index of failed block in submit blocks
int8_t
hashMeta
;
int32_t
vnode
;
// vnode index of failed block
int64_t
uid
;
int32_t
sid
;
// table index of failed block
char
*
tblFName
;
int32_t
code
;
// errorcode while write data to vnode, such as not created, dropped, no space, invalid table
int32_t
numOfRows
;
}
SSubmitRspBlock
;
int32_t
affectedRows
;
}
SSubmitBlkRsp
;
typedef
struct
{
int32_t
code
;
// 0-success, > 0 error code
typedef
struct
{
int32_t
numOfRows
;
// number of records the client is trying to write
int32_t
numOfRows
;
int32_t
affectedRows
;
// number of records actually written
int32_t
affectedRows
;
int32_t
failedRows
;
// number of failed records (exclude duplicate records)
int32_t
nBlocks
;
int32_t
numOfFailedBlocks
;
union
{
SSubmitRspBlock
failedBlocks
[];
SArray
*
pArray
;
SSubmitBlkRsp
*
pBlocks
;
};
}
SSubmitRsp
;
}
SSubmitRsp
;
int32_t
tEncodeSSubmitRsp
(
SEncoder
*
pEncoder
,
const
SSubmitRsp
*
pRsp
);
int32_t
tDecodeSSubmitRsp
(
SDecoder
*
pDecoder
,
SSubmitRsp
*
pRsp
);
void
tFreeSSubmitRsp
(
SSubmitRsp
*
pRsp
);
#define COL_SMA_ON ((int8_t)0x1)
#define COL_SMA_ON ((int8_t)0x1)
#define COL_IDX_ON ((int8_t)0x2)
#define COL_IDX_ON ((int8_t)0x2)
#define COL_VAL_SET ((int8_t)0x4)
#define COL_VAL_SET ((int8_t)0x4)
typedef
struct
SSchema
{
typedef
struct
SSchema
{
int8_t
type
;
int8_t
type
;
int8_t
flags
;
int8_t
flags
;
...
@@ -476,6 +483,7 @@ typedef struct {
...
@@ -476,6 +483,7 @@ typedef struct {
int32_t
acctId
;
int32_t
acctId
;
int64_t
clusterId
;
int64_t
clusterId
;
uint32_t
connId
;
uint32_t
connId
;
int32_t
dnodeNum
;
int8_t
superUser
;
int8_t
superUser
;
int8_t
connType
;
int8_t
connType
;
SEpSet
epSet
;
SEpSet
epSet
;
...
...
include/common/tvariant.h
浏览文件 @
ed1a71f1
...
@@ -36,12 +36,11 @@ typedef struct SVariant {
...
@@ -36,12 +36,11 @@ typedef struct SVariant {
};
};
}
SVariant
;
}
SVariant
;
int32_t
toInteger
(
const
char
*
z
,
int32_t
n
,
int32_t
base
,
int64_t
*
value
,
bool
*
issigned
);
int32_t
toInteger
(
const
char
*
z
,
int32_t
n
,
int32_t
base
,
int64_t
*
value
);
int32_t
toUInteger
(
const
char
*
z
,
int32_t
n
,
int32_t
base
,
uint64_t
*
value
);
bool
taosVariantIsValid
(
SVariant
*
pVar
);
bool
taosVariantIsValid
(
SVariant
*
pVar
);
void
taosVariantCreate
(
SVariant
*
pVar
,
const
char
*
z
,
int32_t
n
,
int32_t
type
);
void
taosVariantCreateFromBinary
(
SVariant
*
pVar
,
const
char
*
pz
,
size_t
len
,
uint32_t
type
);
void
taosVariantCreateFromBinary
(
SVariant
*
pVar
,
const
char
*
pz
,
size_t
len
,
uint32_t
type
);
void
taosVariantDestroy
(
SVariant
*
pV
);
void
taosVariantDestroy
(
SVariant
*
pV
);
...
@@ -59,7 +58,7 @@ int32_t taosVariantDumpEx(SVariant *pVariant, char *payload, int16_t type, bool
...
@@ -59,7 +58,7 @@ int32_t taosVariantDumpEx(SVariant *pVariant, char *payload, int16_t type, bool
#endif
#endif
int32_t
taosVariantTypeSetType
(
SVariant
*
pVariant
,
char
type
);
int32_t
taosVariantTypeSetType
(
SVariant
*
pVariant
,
char
type
);
char
*
taosVariantGet
(
SVariant
*
pVar
,
int32_t
type
);
char
*
taosVariantGet
(
SVariant
*
pVar
,
int32_t
type
);
#ifdef __cplusplus
#ifdef __cplusplus
}
}
...
...
include/libs/parser/parser.h
浏览文件 @
ed1a71f1
...
@@ -26,8 +26,7 @@ extern "C" {
...
@@ -26,8 +26,7 @@ extern "C" {
typedef
struct
SStmtCallback
{
typedef
struct
SStmtCallback
{
TAOS_STMT
*
pStmt
;
TAOS_STMT
*
pStmt
;
int32_t
(
*
getTbNameFn
)(
TAOS_STMT
*
,
char
**
);
int32_t
(
*
getTbNameFn
)(
TAOS_STMT
*
,
char
**
);
int32_t
(
*
setBindInfoFn
)(
TAOS_STMT
*
,
STableMeta
*
,
void
*
);
int32_t
(
*
setInfoFn
)(
TAOS_STMT
*
,
STableMeta
*
,
void
*
,
char
*
,
bool
,
SHashObj
*
,
SHashObj
*
);
int32_t
(
*
setExecInfoFn
)(
TAOS_STMT
*
,
SHashObj
*
,
SHashObj
*
);
int32_t
(
*
getExecInfoFn
)(
TAOS_STMT
*
,
SHashObj
**
,
SHashObj
**
);
int32_t
(
*
getExecInfoFn
)(
TAOS_STMT
*
,
SHashObj
**
,
SHashObj
**
);
}
SStmtCallback
;
}
SStmtCallback
;
...
@@ -59,8 +58,9 @@ int32_t qBuildStmtOutput(SQuery* pQuery, SHashObj* pVgHash, SHashObj* pBlockHash
...
@@ -59,8 +58,9 @@ int32_t qBuildStmtOutput(SQuery* pQuery, SHashObj* pVgHash, SHashObj* pBlockHash
int32_t
qResetStmtDataBlock
(
void
*
block
,
bool
keepBuf
);
int32_t
qResetStmtDataBlock
(
void
*
block
,
bool
keepBuf
);
int32_t
qCloneStmtDataBlock
(
void
**
pDst
,
void
*
pSrc
);
int32_t
qCloneStmtDataBlock
(
void
**
pDst
,
void
*
pSrc
);
void
qFreeStmtDataBlock
(
void
*
pDataBlock
);
void
qFreeStmtDataBlock
(
void
*
pDataBlock
);
int32_t
qRebuildStmtDataBlock
(
void
**
pDst
,
void
*
pSrc
);
int32_t
qRebuildStmtDataBlock
(
void
**
pDst
,
void
*
pSrc
,
uint64_t
uid
,
int32_t
vgId
);
void
qDestroyStmtDataBlock
(
void
*
pBlock
);
void
qDestroyStmtDataBlock
(
void
*
pBlock
);
STableMeta
*
qGetTableMetaInDataBlock
(
void
*
pDataBlock
);
int32_t
qBindStmtColsValue
(
void
*
pBlock
,
TAOS_MULTI_BIND
*
bind
,
char
*
msgBuf
,
int32_t
msgBufLen
);
int32_t
qBindStmtColsValue
(
void
*
pBlock
,
TAOS_MULTI_BIND
*
bind
,
char
*
msgBuf
,
int32_t
msgBufLen
);
int32_t
qBindStmtSingleColValue
(
void
*
pBlock
,
TAOS_MULTI_BIND
*
bind
,
char
*
msgBuf
,
int32_t
msgBufLen
,
int32_t
colIdx
,
int32_t
qBindStmtSingleColValue
(
void
*
pBlock
,
TAOS_MULTI_BIND
*
bind
,
char
*
msgBuf
,
int32_t
msgBufLen
,
int32_t
colIdx
,
...
...
include/libs/planner/planner.h
浏览文件 @
ed1a71f1
...
@@ -48,7 +48,8 @@ int32_t qCreateQueryPlan(SPlanContext* pCxt, SQueryPlan** pPlan, SArray* pExecNo
...
@@ -48,7 +48,8 @@ int32_t qCreateQueryPlan(SPlanContext* pCxt, SQueryPlan** pPlan, SArray* pExecNo
// @pSource one execution location of this group of datasource subplans
// @pSource one execution location of this group of datasource subplans
int32_t
qSetSubplanExecutionNode
(
SSubplan
*
pSubplan
,
int32_t
groupId
,
SDownstreamSourceNode
*
pSource
);
int32_t
qSetSubplanExecutionNode
(
SSubplan
*
pSubplan
,
int32_t
groupId
,
SDownstreamSourceNode
*
pSource
);
int32_t
qStmtBindParam
(
SQueryPlan
*
pPlan
,
TAOS_MULTI_BIND
*
pParams
,
int32_t
colIdx
,
uint64_t
queryId
);
int32_t
qStmtBindParam
(
SQueryPlan
*
pPlan
,
TAOS_MULTI_BIND
*
pParams
,
int32_t
colIdx
,
uint64_t
queryId
,
bool
*
pEmptyResult
);
// Convert to subplan to string for the scheduler to send to the executor
// Convert to subplan to string for the scheduler to send to the executor
int32_t
qSubPlanToString
(
const
SSubplan
*
pSubplan
,
char
**
pStr
,
int32_t
*
pLen
);
int32_t
qSubPlanToString
(
const
SSubplan
*
pSubplan
,
char
**
pStr
,
int32_t
*
pLen
);
...
...
include/libs/scheduler/scheduler.h
浏览文件 @
ed1a71f1
...
@@ -56,6 +56,7 @@ typedef struct SQueryResult {
...
@@ -56,6 +56,7 @@ typedef struct SQueryResult {
uint64_t
numOfRows
;
uint64_t
numOfRows
;
int32_t
msgSize
;
int32_t
msgSize
;
char
*
msg
;
char
*
msg
;
void
*
res
;
}
SQueryResult
;
}
SQueryResult
;
typedef
struct
STaskInfo
{
typedef
struct
STaskInfo
{
...
@@ -71,7 +72,7 @@ int32_t schedulerInit(SSchedulerCfg *cfg);
...
@@ -71,7 +72,7 @@ int32_t schedulerInit(SSchedulerCfg *cfg);
* @param nodeList Qnode/Vnode address list, element is SQueryNodeAddr
* @param nodeList Qnode/Vnode address list, element is SQueryNodeAddr
* @return
* @return
*/
*/
int32_t
schedulerExecJob
(
void
*
transport
,
SArray
*
nodeList
,
SQueryPlan
*
pDag
,
int64_t
*
pJob
,
const
char
*
sql
,
int64_t
startTs
,
SQueryResult
*
pRes
);
int32_t
schedulerExecJob
(
void
*
transport
,
SArray
*
nodeList
,
SQueryPlan
*
pDag
,
int64_t
*
pJob
,
const
char
*
sql
,
int64_t
startTs
,
bool
needRes
,
SQueryResult
*
pRes
);
/**
/**
* Process the query job, generated according to the query physical plan.
* Process the query job, generated according to the query physical plan.
...
...
source/client/inc/clientInt.h
浏览文件 @
ed1a71f1
...
@@ -307,9 +307,9 @@ int hbAddConnInfo(SAppHbMgr* pAppHbMgr, SClientHbKey connKey, void* key, void* v
...
@@ -307,9 +307,9 @@ int hbAddConnInfo(SAppHbMgr* pAppHbMgr, SClientHbKey connKey, void* key, void* v
// --- mq
// --- mq
void
hbMgrInitMqHbRspHandle
();
void
hbMgrInitMqHbRspHandle
();
SRequestObj
*
launchQueryImpl
(
SRequestObj
*
pRequest
,
SQuery
*
pQuery
,
int32_t
code
,
bool
keepQuery
);
SRequestObj
*
launchQueryImpl
(
SRequestObj
*
pRequest
,
SQuery
*
pQuery
,
int32_t
code
,
bool
keepQuery
,
void
**
res
);
int32_t
getQueryPlan
(
SRequestObj
*
pRequest
,
SQuery
*
pQuery
,
SArray
**
pNodeList
);
int32_t
getQueryPlan
(
SRequestObj
*
pRequest
,
SQuery
*
pQuery
,
SArray
**
pNodeList
);
int32_t
scheduleQuery
(
SRequestObj
*
pRequest
,
SQueryPlan
*
pDag
,
SArray
*
pNodeList
);
int32_t
scheduleQuery
(
SRequestObj
*
pRequest
,
SQueryPlan
*
pDag
,
SArray
*
pNodeList
,
void
**
res
);
int32_t
refreshMeta
(
STscObj
*
pTscObj
,
SRequestObj
*
pRequest
);
int32_t
refreshMeta
(
STscObj
*
pTscObj
,
SRequestObj
*
pRequest
);
#ifdef __cplusplus
#ifdef __cplusplus
...
...
source/client/inc/clientStmt.h
浏览文件 @
ed1a71f1
...
@@ -55,6 +55,7 @@ typedef struct SStmtQueryResInfo {
...
@@ -55,6 +55,7 @@ typedef struct SStmtQueryResInfo {
typedef
struct
SStmtBindInfo
{
typedef
struct
SStmtBindInfo
{
bool
needParse
;
bool
needParse
;
bool
inExecCache
;
uint64_t
tbUid
;
uint64_t
tbUid
;
uint64_t
tbSuid
;
uint64_t
tbSuid
;
int32_t
sBindRowNum
;
int32_t
sBindRowNum
;
...
@@ -62,7 +63,9 @@ typedef struct SStmtBindInfo {
...
@@ -62,7 +63,9 @@ typedef struct SStmtBindInfo {
int8_t
tbType
;
int8_t
tbType
;
bool
tagsCached
;
bool
tagsCached
;
void
*
boundTags
;
void
*
boundTags
;
char
*
tbName
;
char
tbName
[
TSDB_TABLE_FNAME_LEN
];;
char
tbFName
[
TSDB_TABLE_FNAME_LEN
];
char
stbFName
[
TSDB_TABLE_FNAME_LEN
];
SName
sname
;
SName
sname
;
}
SStmtBindInfo
;
}
SStmtBindInfo
;
...
@@ -71,12 +74,12 @@ typedef struct SStmtExecInfo {
...
@@ -71,12 +74,12 @@ typedef struct SStmtExecInfo {
SRequestObj
*
pRequest
;
SRequestObj
*
pRequest
;
SHashObj
*
pVgHash
;
SHashObj
*
pVgHash
;
SHashObj
*
pBlockHash
;
SHashObj
*
pBlockHash
;
bool
autoCreateTbl
;
}
SStmtExecInfo
;
}
SStmtExecInfo
;
typedef
struct
SStmtSQLInfo
{
typedef
struct
SStmtSQLInfo
{
STMT_TYPE
type
;
STMT_TYPE
type
;
STMT_STATUS
status
;
STMT_STATUS
status
;
bool
autoCreate
;
uint64_t
runTimes
;
uint64_t
runTimes
;
SHashObj
*
pTableCache
;
//SHash<SStmtTableCache>
SHashObj
*
pTableCache
;
//SHash<SStmtTableCache>
SQuery
*
pQuery
;
SQuery
*
pQuery
;
...
@@ -85,6 +88,7 @@ typedef struct SStmtSQLInfo {
...
@@ -85,6 +88,7 @@ typedef struct SStmtSQLInfo {
SArray
*
nodeList
;
SArray
*
nodeList
;
SQueryPlan
*
pQueryPlan
;
SQueryPlan
*
pQueryPlan
;
SStmtQueryResInfo
queryRes
;
SStmtQueryResInfo
queryRes
;
bool
autoCreateTbl
;
}
SStmtSQLInfo
;
}
SStmtSQLInfo
;
typedef
struct
STscStmt
{
typedef
struct
STscStmt
{
...
...
source/client/src/clientImpl.c
浏览文件 @
ed1a71f1
...
@@ -286,12 +286,12 @@ void setResPrecision(SReqResultInfo* pResInfo, int32_t precision) {
...
@@ -286,12 +286,12 @@ void setResPrecision(SReqResultInfo* pResInfo, int32_t precision) {
pResInfo
->
precision
=
precision
;
pResInfo
->
precision
=
precision
;
}
}
int32_t
scheduleQuery
(
SRequestObj
*
pRequest
,
SQueryPlan
*
pDag
,
SArray
*
pNodeList
)
{
int32_t
scheduleQuery
(
SRequestObj
*
pRequest
,
SQueryPlan
*
pDag
,
SArray
*
pNodeList
,
void
**
pRes
)
{
void
*
pTransporter
=
pRequest
->
pTscObj
->
pAppInfo
->
pTransporter
;
void
*
pTransporter
=
pRequest
->
pTscObj
->
pAppInfo
->
pTransporter
;
SQueryResult
res
=
{.
code
=
0
,
.
numOfRows
=
0
,
.
msgSize
=
ERROR_MSG_BUF_DEFAULT_SIZE
,
.
msg
=
pRequest
->
msgBuf
};
SQueryResult
res
=
{.
code
=
0
,
.
numOfRows
=
0
,
.
msgSize
=
ERROR_MSG_BUF_DEFAULT_SIZE
,
.
msg
=
pRequest
->
msgBuf
};
int32_t
code
=
schedulerExecJob
(
pTransporter
,
pNodeList
,
pDag
,
&
pRequest
->
body
.
queryJob
,
pRequest
->
sqlstr
,
int32_t
code
=
schedulerExecJob
(
pTransporter
,
pNodeList
,
pDag
,
&
pRequest
->
body
.
queryJob
,
pRequest
->
sqlstr
,
pRequest
->
metric
.
start
,
&
res
);
pRequest
->
metric
.
start
,
NULL
!=
pRes
,
&
res
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
pRequest
->
body
.
queryJob
!=
0
)
{
if
(
pRequest
->
body
.
queryJob
!=
0
)
{
schedulerFreeJob
(
pRequest
->
body
.
queryJob
);
schedulerFreeJob
(
pRequest
->
body
.
queryJob
);
...
@@ -310,6 +310,10 @@ int32_t scheduleQuery(SRequestObj* pRequest, SQueryPlan* pDag, SArray* pNodeList
...
@@ -310,6 +310,10 @@ int32_t scheduleQuery(SRequestObj* pRequest, SQueryPlan* pDag, SArray* pNodeList
}
}
}
}
if
(
pRes
)
{
*
pRes
=
res
.
res
;
}
pRequest
->
code
=
res
.
code
;
pRequest
->
code
=
res
.
code
;
terrno
=
res
.
code
;
terrno
=
res
.
code
;
return
pRequest
->
code
;
return
pRequest
->
code
;
...
@@ -320,7 +324,7 @@ int32_t getQueryPlan(SRequestObj* pRequest, SQuery* pQuery, SArray** pNodeList)
...
@@ -320,7 +324,7 @@ int32_t getQueryPlan(SRequestObj* pRequest, SQuery* pQuery, SArray** pNodeList)
return
getPlan
(
pRequest
,
pQuery
,
&
pRequest
->
body
.
pDag
,
*
pNodeList
);
return
getPlan
(
pRequest
,
pQuery
,
&
pRequest
->
body
.
pDag
,
*
pNodeList
);
}
}
SRequestObj
*
launchQueryImpl
(
SRequestObj
*
pRequest
,
SQuery
*
pQuery
,
int32_t
code
,
bool
keepQuery
)
{
SRequestObj
*
launchQueryImpl
(
SRequestObj
*
pRequest
,
SQuery
*
pQuery
,
int32_t
code
,
bool
keepQuery
,
void
**
res
)
{
if
(
TSDB_CODE_SUCCESS
==
code
)
{
if
(
TSDB_CODE_SUCCESS
==
code
)
{
switch
(
pQuery
->
execMode
)
{
switch
(
pQuery
->
execMode
)
{
case
QUERY_EXEC_MODE_LOCAL
:
case
QUERY_EXEC_MODE_LOCAL
:
...
@@ -333,7 +337,7 @@ SRequestObj* launchQueryImpl(SRequestObj* pRequest, SQuery* pQuery, int32_t code
...
@@ -333,7 +337,7 @@ SRequestObj* launchQueryImpl(SRequestObj* pRequest, SQuery* pQuery, int32_t code
SArray
*
pNodeList
=
taosArrayInit
(
4
,
sizeof
(
struct
SQueryNodeAddr
));
SArray
*
pNodeList
=
taosArrayInit
(
4
,
sizeof
(
struct
SQueryNodeAddr
));
code
=
getPlan
(
pRequest
,
pQuery
,
&
pRequest
->
body
.
pDag
,
pNodeList
);
code
=
getPlan
(
pRequest
,
pQuery
,
&
pRequest
->
body
.
pDag
,
pNodeList
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
scheduleQuery
(
pRequest
,
pRequest
->
body
.
pDag
,
pNodeList
);
code
=
scheduleQuery
(
pRequest
,
pRequest
->
body
.
pDag
,
pNodeList
,
res
);
}
}
taosArrayDestroy
(
pNodeList
);
taosArrayDestroy
(
pNodeList
);
break
;
break
;
...
@@ -373,7 +377,7 @@ SRequestObj* launchQuery(STscObj* pTscObj, const char* sql, int sqlLen) {
...
@@ -373,7 +377,7 @@ SRequestObj* launchQuery(STscObj* pTscObj, const char* sql, int sqlLen) {
return
pRequest
;
return
pRequest
;
}
}
return
launchQueryImpl
(
pRequest
,
pQuery
,
code
,
false
);
return
launchQueryImpl
(
pRequest
,
pQuery
,
code
,
false
,
NULL
);
}
}
int32_t
refreshMeta
(
STscObj
*
pTscObj
,
SRequestObj
*
pRequest
)
{
int32_t
refreshMeta
(
STscObj
*
pTscObj
,
SRequestObj
*
pRequest
)
{
...
...
source/client/src/clientMsgHandler.c
浏览文件 @
ed1a71f1
...
@@ -58,7 +58,7 @@ int32_t processConnectRsp(void* param, const SDataBuf* pMsg, int32_t code) {
...
@@ -58,7 +58,7 @@ int32_t processConnectRsp(void* param, const SDataBuf* pMsg, int32_t code) {
return
code
;
return
code
;
}
}
if
(
!
isEpsetEqual
(
&
pTscObj
->
pAppInfo
->
mgmtEp
.
epSet
,
&
connectRsp
.
epSet
))
{
if
(
connectRsp
.
dnodeNum
>
1
&&
!
isEpsetEqual
(
&
pTscObj
->
pAppInfo
->
mgmtEp
.
epSet
,
&
connectRsp
.
epSet
))
{
updateEpSet_s
(
&
pTscObj
->
pAppInfo
->
mgmtEp
,
&
connectRsp
.
epSet
);
updateEpSet_s
(
&
pTscObj
->
pAppInfo
->
mgmtEp
,
&
connectRsp
.
epSet
);
}
}
...
...
source/client/src/clientSml.c
浏览文件 @
ed1a71f1
...
@@ -402,7 +402,7 @@ static int32_t smlModifyDBSchemas(SSmlHandle* info) {
...
@@ -402,7 +402,7 @@ static int32_t smlModifyDBSchemas(SSmlHandle* info) {
code
=
catalogGetSTableMeta
(
info
->
pCatalog
,
info
->
taos
->
pAppInfo
->
pTransporter
,
&
ep
,
&
pName
,
&
pTableMeta
);
code
=
catalogGetSTableMeta
(
info
->
pCatalog
,
info
->
taos
->
pAppInfo
->
pTransporter
,
&
ep
,
&
pName
,
&
pTableMeta
);
if
(
code
==
TSDB_CODE_PAR_TABLE_NOT_EXIST
||
code
==
TSDB_CODE_MND_INVALID_STB
)
{
if
(
code
==
TSDB_CODE_PAR_TABLE_NOT_EXIST
||
code
==
TSDB_CODE_MND_INVALID_STB
)
{
SSchemaAction
schemaAction
=
{
.
action
=
SCHEMA_ACTION_CREATE_STABLE
};
SSchemaAction
schemaAction
=
{
SCHEMA_ACTION_CREATE_STABLE
,
0
};
memcpy
(
schemaAction
.
createSTable
.
sTableName
,
superTable
,
superTableLen
);
memcpy
(
schemaAction
.
createSTable
.
sTableName
,
superTable
,
superTableLen
);
schemaAction
.
createSTable
.
tags
=
sTableData
->
tags
;
schemaAction
.
createSTable
.
tags
=
sTableData
->
tags
;
schemaAction
.
createSTable
.
fields
=
sTableData
->
cols
;
schemaAction
.
createSTable
.
fields
=
sTableData
->
cols
;
...
@@ -1505,8 +1505,8 @@ static int32_t smlParseLine(SSmlHandle* info, const char* sql) {
...
@@ -1505,8 +1505,8 @@ static int32_t smlParseLine(SSmlHandle* info, const char* sql) {
tinfo
->
sTableName
=
elements
.
measure
;
tinfo
->
sTableName
=
elements
.
measure
;
tinfo
->
sTableNameLen
=
elements
.
measureLen
;
tinfo
->
sTableNameLen
=
elements
.
measureLen
;
RandTableName
rName
=
{
.
tags
=
tinfo
->
tags
,
.
sTableName
=
tinfo
->
sTableName
,
.
sTableNameLen
=
tinfo
->
sTableNameLen
,
RandTableName
rName
=
{
tinfo
->
tags
,
tinfo
->
sTableName
,
tinfo
->
sTableNameLen
,
.
childTableName
=
tinfo
->
childTableName
};
tinfo
->
childTableName
,
0
};
buildChildTableName
(
&
rName
);
buildChildTableName
(
&
rName
);
tinfo
->
uid
=
rName
.
uid
;
tinfo
->
uid
=
rName
.
uid
;
...
@@ -1660,7 +1660,7 @@ static int32_t smlInsertData(SSmlHandle* info) {
...
@@ -1660,7 +1660,7 @@ static int32_t smlInsertData(SSmlHandle* info) {
smlBuildOutput
(
info
->
exec
,
info
->
pVgHash
);
smlBuildOutput
(
info
->
exec
,
info
->
pVgHash
);
info
->
cost
.
insertRpcTime
=
taosGetTimestampUs
();
info
->
cost
.
insertRpcTime
=
taosGetTimestampUs
();
launchQueryImpl
(
info
->
pRequest
,
info
->
pQuery
,
TSDB_CODE_SUCCESS
,
true
);
launchQueryImpl
(
info
->
pRequest
,
info
->
pQuery
,
TSDB_CODE_SUCCESS
,
true
,
NULL
);
info
->
affectedRows
=
taos_affected_rows
(
info
->
pRequest
);
info
->
affectedRows
=
taos_affected_rows
(
info
->
pRequest
);
return
info
->
pRequest
->
code
;
return
info
->
pRequest
->
code
;
...
...
source/client/src/clientStmt.c
浏览文件 @
ed1a71f1
#include "clientInt.h"
#include "clientInt.h"
#include "clientLog.h"
#include "clientLog.h"
#include "clientStmt.h"
#include "tdef.h"
#include "tdef.h"
#include "clientStmt.h"
int32_t
stmtSwitchStatus
(
STscStmt
*
pStmt
,
STMT_STATUS
newStatus
)
{
int32_t
stmtSwitchStatus
(
STscStmt
*
pStmt
,
STMT_STATUS
newStatus
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
...
@@ -29,11 +30,11 @@ int32_t stmtSwitchStatus(STscStmt* pStmt, STMT_STATUS newStatus) {
...
@@ -29,11 +30,11 @@ int32_t stmtSwitchStatus(STscStmt* pStmt, STMT_STATUS newStatus) {
if
(
STMT_STATUS_EQ
(
INIT
)
||
STMT_STATUS_EQ
(
BIND_COL
))
{
if
(
STMT_STATUS_EQ
(
INIT
)
||
STMT_STATUS_EQ
(
BIND_COL
))
{
code
=
TSDB_CODE_TSC_STMT_API_ERROR
;
code
=
TSDB_CODE_TSC_STMT_API_ERROR
;
}
}
/*
/*
if ((pStmt->sql.type == STMT_TYPE_MULTI_INSERT) && ()) {
if ((pStmt->sql.type == STMT_TYPE_MULTI_INSERT) && ()) {
code = TSDB_CODE_TSC_STMT_API_ERROR;
code = TSDB_CODE_TSC_STMT_API_ERROR;
}
}
*/
*/
break
;
break
;
case
STMT_BIND_COL
:
case
STMT_BIND_COL
:
if
(
STMT_STATUS_EQ
(
INIT
)
||
STMT_STATUS_EQ
(
BIND
))
{
if
(
STMT_STATUS_EQ
(
INIT
)
||
STMT_STATUS_EQ
(
BIND
))
{
...
@@ -62,13 +63,12 @@ int32_t stmtSwitchStatus(STscStmt* pStmt, STMT_STATUS newStatus) {
...
@@ -62,13 +63,12 @@ int32_t stmtSwitchStatus(STscStmt* pStmt, STMT_STATUS newStatus) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int32_t
stmtGetTbName
(
TAOS_STMT
*
stmt
,
char
**
tbName
)
{
int32_t
stmtGetTbName
(
TAOS_STMT
*
stmt
,
char
**
tbName
)
{
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
pStmt
->
sql
.
type
=
STMT_TYPE_MULTI_INSERT
;
pStmt
->
sql
.
type
=
STMT_TYPE_MULTI_INSERT
;
if
(
NULL
==
pStmt
->
bInfo
.
tbName
)
{
if
(
'\0'
==
pStmt
->
bInfo
.
tbName
[
0
]
)
{
tscError
(
"no table name set"
);
tscError
(
"no table name set"
);
STMT_ERR_RET
(
TSDB_CODE_TSC_STMT_TBNAME_ERROR
);
STMT_ERR_RET
(
TSDB_CODE_TSC_STMT_TBNAME_ERROR
);
}
}
...
@@ -79,7 +79,7 @@ int32_t stmtGetTbName(TAOS_STMT *stmt, char **tbName) {
...
@@ -79,7 +79,7 @@ int32_t stmtGetTbName(TAOS_STMT *stmt, char **tbName) {
}
}
int32_t
stmtBackupQueryFields
(
STscStmt
*
pStmt
)
{
int32_t
stmtBackupQueryFields
(
STscStmt
*
pStmt
)
{
SStmtQueryResInfo
*
pRes
=
&
pStmt
->
sql
.
queryRes
;
SStmtQueryResInfo
*
pRes
=
&
pStmt
->
sql
.
queryRes
;
pRes
->
numOfCols
=
pStmt
->
exec
.
pRequest
->
body
.
resInfo
.
numOfCols
;
pRes
->
numOfCols
=
pStmt
->
exec
.
pRequest
->
body
.
resInfo
.
numOfCols
;
pRes
->
precision
=
pStmt
->
exec
.
pRequest
->
body
.
resInfo
.
precision
;
pRes
->
precision
=
pStmt
->
exec
.
pRequest
->
body
.
resInfo
.
precision
;
...
@@ -96,7 +96,7 @@ int32_t stmtBackupQueryFields(STscStmt* pStmt) {
...
@@ -96,7 +96,7 @@ int32_t stmtBackupQueryFields(STscStmt* pStmt) {
}
}
int32_t
stmtRestoreQueryFields
(
STscStmt
*
pStmt
)
{
int32_t
stmtRestoreQueryFields
(
STscStmt
*
pStmt
)
{
SStmtQueryResInfo
*
pRes
=
&
pStmt
->
sql
.
queryRes
;
SStmtQueryResInfo
*
pRes
=
&
pStmt
->
sql
.
queryRes
;
int32_t
size
=
pRes
->
numOfCols
*
sizeof
(
TAOS_FIELD
);
int32_t
size
=
pRes
->
numOfCols
*
sizeof
(
TAOS_FIELD
);
pStmt
->
exec
.
pRequest
->
body
.
resInfo
.
numOfCols
=
pRes
->
numOfCols
;
pStmt
->
exec
.
pRequest
->
body
.
resInfo
.
numOfCols
=
pRes
->
numOfCols
;
...
@@ -121,9 +121,12 @@ int32_t stmtRestoreQueryFields(STscStmt* pStmt) {
...
@@ -121,9 +121,12 @@ int32_t stmtRestoreQueryFields(STscStmt* pStmt) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int32_t
stmt
SetBindInfo
(
TAOS_STMT
*
stmt
,
STableMeta
*
pTableMeta
,
void
*
tags
)
{
int32_t
stmt
UpdateBindInfo
(
TAOS_STMT
*
stmt
,
STableMeta
*
pTableMeta
,
void
*
tags
,
char
*
tbFName
)
{
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
strncpy
(
pStmt
->
bInfo
.
tbFName
,
tbFName
,
sizeof
(
pStmt
->
bInfo
.
tbFName
)
-
1
);
pStmt
->
bInfo
.
tbFName
[
sizeof
(
pStmt
->
bInfo
.
tbFName
)
-
1
]
=
0
;
pStmt
->
bInfo
.
tbUid
=
pTableMeta
->
uid
;
pStmt
->
bInfo
.
tbUid
=
pTableMeta
->
uid
;
pStmt
->
bInfo
.
tbSuid
=
pTableMeta
->
suid
;
pStmt
->
bInfo
.
tbSuid
=
pTableMeta
->
suid
;
pStmt
->
bInfo
.
tbType
=
pTableMeta
->
tableType
;
pStmt
->
bInfo
.
tbType
=
pTableMeta
->
tableType
;
...
@@ -133,15 +136,28 @@ int32_t stmtSetBindInfo(TAOS_STMT* stmt, STableMeta* pTableMeta, void* tags) {
...
@@ -133,15 +136,28 @@ int32_t stmtSetBindInfo(TAOS_STMT* stmt, STableMeta* pTableMeta, void* tags) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int32_t
stmt
SetExecInfo
(
TAOS_STMT
*
stmt
,
SHashObj
*
pVgHash
,
SHashObj
*
pBlockHash
)
{
int32_t
stmt
UpdateExecInfo
(
TAOS_STMT
*
stmt
,
SHashObj
*
pVgHash
,
SHashObj
*
pBlockHash
,
bool
autoCreateTbl
)
{
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
pStmt
->
exec
.
pVgHash
=
pVgHash
;
pStmt
->
exec
.
pVgHash
=
pVgHash
;
pStmt
->
exec
.
pBlockHash
=
pBlockHash
;
pStmt
->
exec
.
pBlockHash
=
pBlockHash
;
pStmt
->
exec
.
autoCreateTbl
=
autoCreateTbl
;
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int32_t
stmtUpdateInfo
(
TAOS_STMT
*
stmt
,
STableMeta
*
pTableMeta
,
void
*
tags
,
char
*
tbFName
,
bool
autoCreateTbl
,
SHashObj
*
pVgHash
,
SHashObj
*
pBlockHash
)
{
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
STMT_ERR_RET
(
stmtUpdateBindInfo
(
stmt
,
pTableMeta
,
tags
,
tbFName
));
STMT_ERR_RET
(
stmtUpdateExecInfo
(
stmt
,
pVgHash
,
pBlockHash
,
autoCreateTbl
));
pStmt
->
sql
.
autoCreateTbl
=
autoCreateTbl
;
return
TSDB_CODE_SUCCESS
;
}
int32_t
stmtGetExecInfo
(
TAOS_STMT
*
stmt
,
SHashObj
**
pVgHash
,
SHashObj
**
pBlockHash
)
{
int32_t
stmtGetExecInfo
(
TAOS_STMT
*
stmt
,
SHashObj
**
pVgHash
,
SHashObj
**
pBlockHash
)
{
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
...
@@ -151,19 +167,19 @@ int32_t stmtGetExecInfo(TAOS_STMT* stmt, SHashObj** pVgHash, SHashObj** pBlockHa
...
@@ -151,19 +167,19 @@ int32_t stmtGetExecInfo(TAOS_STMT* stmt, SHashObj** pVgHash, SHashObj** pBlockHa
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int32_t
stmtCacheBlock
(
STscStmt
*
pStmt
)
{
int32_t
stmtCacheBlock
(
STscStmt
*
pStmt
)
{
if
(
pStmt
->
sql
.
type
!=
STMT_TYPE_MULTI_INSERT
)
{
if
(
pStmt
->
sql
.
type
!=
STMT_TYPE_MULTI_INSERT
)
{
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
uint64_t
uid
=
pStmt
->
bInfo
.
tbUid
;
uint64_t
uid
=
pStmt
->
bInfo
.
tbUid
;
uint64_t
tu
id
=
(
TSDB_CHILD_TABLE
==
pStmt
->
bInfo
.
tbType
)
?
pStmt
->
bInfo
.
tbSuid
:
uid
;
uint64_t
cacheU
id
=
(
TSDB_CHILD_TABLE
==
pStmt
->
bInfo
.
tbType
)
?
pStmt
->
bInfo
.
tbSuid
:
uid
;
if
(
taosHashGet
(
pStmt
->
sql
.
pTableCache
,
&
tuid
,
sizeof
(
tu
id
)))
{
if
(
taosHashGet
(
pStmt
->
sql
.
pTableCache
,
&
cacheUid
,
sizeof
(
cacheU
id
)))
{
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
STableDataBlocks
**
pSrc
=
taosHashGet
(
pStmt
->
exec
.
pBlockHash
,
&
uid
,
sizeof
(
uid
));
STableDataBlocks
**
pSrc
=
taosHashGet
(
pStmt
->
exec
.
pBlockHash
,
pStmt
->
bInfo
.
tbFName
,
strlen
(
pStmt
->
bInfo
.
tbFName
));
STableDataBlocks
*
pDst
=
NULL
;
STableDataBlocks
*
pDst
=
NULL
;
STMT_ERR_RET
(
qCloneStmtDataBlock
(
&
pDst
,
*
pSrc
));
STMT_ERR_RET
(
qCloneStmtDataBlock
(
&
pDst
,
*
pSrc
));
...
@@ -173,11 +189,15 @@ int32_t stmtCacheBlock(STscStmt *pStmt) {
...
@@ -173,11 +189,15 @@ int32_t stmtCacheBlock(STscStmt *pStmt) {
.
boundTags
=
pStmt
->
bInfo
.
boundTags
,
.
boundTags
=
pStmt
->
bInfo
.
boundTags
,
};
};
if
(
taosHashPut
(
pStmt
->
sql
.
pTableCache
,
&
tuid
,
sizeof
(
tu
id
),
&
cache
,
sizeof
(
cache
)))
{
if
(
taosHashPut
(
pStmt
->
sql
.
pTableCache
,
&
cacheUid
,
sizeof
(
cacheU
id
),
&
cache
,
sizeof
(
cache
)))
{
return
TSDB_CODE_OUT_OF_MEMORY
;
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
if
(
pStmt
->
sql
.
autoCreateTbl
)
{
pStmt
->
bInfo
.
tagsCached
=
true
;
}
else
{
pStmt
->
bInfo
.
boundTags
=
NULL
;
pStmt
->
bInfo
.
boundTags
=
NULL
;
}
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
@@ -186,8 +206,7 @@ int32_t stmtParseSql(STscStmt* pStmt) {
...
@@ -186,8 +206,7 @@ int32_t stmtParseSql(STscStmt* pStmt) {
SStmtCallback
stmtCb
=
{
SStmtCallback
stmtCb
=
{
.
pStmt
=
pStmt
,
.
pStmt
=
pStmt
,
.
getTbNameFn
=
stmtGetTbName
,
.
getTbNameFn
=
stmtGetTbName
,
.
setBindInfoFn
=
stmtSetBindInfo
,
.
setInfoFn
=
stmtUpdateInfo
,
.
setExecInfoFn
=
stmtSetExecInfo
,
.
getExecInfoFn
=
stmtGetExecInfo
,
.
getExecInfoFn
=
stmtGetExecInfo
,
};
};
...
@@ -221,8 +240,10 @@ int32_t stmtCleanBindInfo(STscStmt* pStmt) {
...
@@ -221,8 +240,10 @@ int32_t stmtCleanBindInfo(STscStmt* pStmt) {
pStmt
->
bInfo
.
tbSuid
=
0
;
pStmt
->
bInfo
.
tbSuid
=
0
;
pStmt
->
bInfo
.
tbType
=
0
;
pStmt
->
bInfo
.
tbType
=
0
;
pStmt
->
bInfo
.
needParse
=
true
;
pStmt
->
bInfo
.
needParse
=
true
;
pStmt
->
bInfo
.
inExecCache
=
false
;
taosMemoryFreeClear
(
pStmt
->
bInfo
.
tbName
);
pStmt
->
bInfo
.
tbName
[
0
]
=
0
;
pStmt
->
bInfo
.
tbFName
[
0
]
=
0
;
if
(
!
pStmt
->
bInfo
.
tagsCached
)
{
if
(
!
pStmt
->
bInfo
.
tagsCached
)
{
destroyBoundColumnInfo
(
pStmt
->
bInfo
.
boundTags
);
destroyBoundColumnInfo
(
pStmt
->
bInfo
.
boundTags
);
taosMemoryFreeClear
(
pStmt
->
bInfo
.
boundTags
);
taosMemoryFreeClear
(
pStmt
->
bInfo
.
boundTags
);
...
@@ -237,12 +258,14 @@ int32_t stmtCleanExecInfo(STscStmt* pStmt, bool keepTable, bool freeRequest) {
...
@@ -237,12 +258,14 @@ int32_t stmtCleanExecInfo(STscStmt* pStmt, bool keepTable, bool freeRequest) {
pStmt
->
exec
.
pRequest
=
NULL
;
pStmt
->
exec
.
pRequest
=
NULL
;
}
}
size_t
keyLen
=
0
;
void
*
pIter
=
taosHashIterate
(
pStmt
->
exec
.
pBlockHash
,
NULL
);
void
*
pIter
=
taosHashIterate
(
pStmt
->
exec
.
pBlockHash
,
NULL
);
while
(
pIter
)
{
while
(
pIter
)
{
STableDataBlocks
*
pBlocks
=
*
(
STableDataBlocks
**
)
pIter
;
STableDataBlocks
*
pBlocks
=
*
(
STableDataBlocks
**
)
pIter
;
uint64_t
*
key
=
taosHashGetKey
(
pIter
,
NULL
);
char
*
key
=
taosHashGetKey
(
pIter
,
&
keyLen
);
STableMeta
*
pMeta
=
qGetTableMetaInDataBlock
(
pBlocks
);
if
(
keepTable
&&
(
*
key
==
pStmt
->
bInfo
.
tbUid
)
)
{
if
(
keepTable
&&
(
strlen
(
pStmt
->
bInfo
.
tbFName
)
==
keyLen
)
&&
strncmp
(
pStmt
->
bInfo
.
tbFName
,
key
,
keyLen
)
==
0
)
{
STMT_ERR_RET
(
qResetStmtDataBlock
(
pBlocks
,
true
));
STMT_ERR_RET
(
qResetStmtDataBlock
(
pBlocks
,
true
));
pIter
=
taosHashIterate
(
pStmt
->
exec
.
pBlockHash
,
pIter
);
pIter
=
taosHashIterate
(
pStmt
->
exec
.
pBlockHash
,
pIter
);
...
@@ -250,11 +273,13 @@ int32_t stmtCleanExecInfo(STscStmt* pStmt, bool keepTable, bool freeRequest) {
...
@@ -250,11 +273,13 @@ int32_t stmtCleanExecInfo(STscStmt* pStmt, bool keepTable, bool freeRequest) {
}
}
qFreeStmtDataBlock
(
pBlocks
);
qFreeStmtDataBlock
(
pBlocks
);
taosHashRemove
(
pStmt
->
exec
.
pBlockHash
,
key
,
sizeof
(
*
key
)
);
taosHashRemove
(
pStmt
->
exec
.
pBlockHash
,
key
,
keyLen
);
pIter
=
taosHashIterate
(
pStmt
->
exec
.
pBlockHash
,
pIter
);
pIter
=
taosHashIterate
(
pStmt
->
exec
.
pBlockHash
,
pIter
);
}
}
pStmt
->
exec
.
autoCreateTbl
=
false
;
if
(
keepTable
)
{
if
(
keepTable
)
{
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
@@ -275,7 +300,7 @@ int32_t stmtCleanSQLInfo(STscStmt* pStmt) {
...
@@ -275,7 +300,7 @@ int32_t stmtCleanSQLInfo(STscStmt* pStmt) {
qDestroyQueryPlan
(
pStmt
->
sql
.
pQueryPlan
);
qDestroyQueryPlan
(
pStmt
->
sql
.
pQueryPlan
);
taosArrayDestroy
(
pStmt
->
sql
.
nodeList
);
taosArrayDestroy
(
pStmt
->
sql
.
nodeList
);
void
*
pIter
=
taosHashIterate
(
pStmt
->
sql
.
pTableCache
,
NULL
);
void
*
pIter
=
taosHashIterate
(
pStmt
->
sql
.
pTableCache
,
NULL
);
while
(
pIter
)
{
while
(
pIter
)
{
SStmtTableCache
*
pCache
=
(
SStmtTableCache
*
)
pIter
;
SStmtTableCache
*
pCache
=
(
SStmtTableCache
*
)
pIter
;
...
@@ -296,10 +321,39 @@ int32_t stmtCleanSQLInfo(STscStmt* pStmt) {
...
@@ -296,10 +321,39 @@ int32_t stmtCleanSQLInfo(STscStmt* pStmt) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int32_t
stmtRebuildDataBlock
(
STscStmt
*
pStmt
,
STableDataBlocks
*
pDataBlock
,
STableDataBlocks
**
newBlock
,
uint64_t
uid
)
{
SEpSet
ep
=
getEpSet_s
(
&
pStmt
->
taos
->
pAppInfo
->
mgmtEp
);
SVgroupInfo
vgInfo
=
{
0
};
STMT_ERR_RET
(
catalogGetTableHashVgroup
(
pStmt
->
pCatalog
,
pStmt
->
taos
->
pAppInfo
->
pTransporter
,
&
ep
,
&
pStmt
->
bInfo
.
sname
,
&
vgInfo
));
STMT_ERR_RET
(
taosHashPut
(
pStmt
->
exec
.
pVgHash
,
(
const
char
*
)
&
vgInfo
.
vgId
,
sizeof
(
vgInfo
.
vgId
),
(
char
*
)
&
vgInfo
,
sizeof
(
vgInfo
)));
STMT_ERR_RET
(
qRebuildStmtDataBlock
(
newBlock
,
pDataBlock
,
uid
,
vgInfo
.
vgId
));
return
TSDB_CODE_SUCCESS
;
}
int32_t
stmtGetFromCache
(
STscStmt
*
pStmt
)
{
int32_t
stmtGetFromCache
(
STscStmt
*
pStmt
)
{
pStmt
->
bInfo
.
needParse
=
true
;
pStmt
->
bInfo
.
needParse
=
true
;
pStmt
->
bInfo
.
inExecCache
=
false
;
STableDataBlocks
*
pBlockInExec
=
taosHashGet
(
pStmt
->
exec
.
pBlockHash
,
pStmt
->
bInfo
.
tbFName
,
strlen
(
pStmt
->
bInfo
.
tbFName
));
if
(
pBlockInExec
)
{
pStmt
->
bInfo
.
needParse
=
false
;
pStmt
->
bInfo
.
inExecCache
=
true
;
if
(
pStmt
->
sql
.
autoCreateTbl
)
{
return
TSDB_CODE_SUCCESS
;
}
}
if
(
NULL
==
pStmt
->
sql
.
pTableCache
||
taosHashGetSize
(
pStmt
->
sql
.
pTableCache
)
<=
0
)
{
if
(
NULL
==
pStmt
->
sql
.
pTableCache
||
taosHashGetSize
(
pStmt
->
sql
.
pTableCache
)
<=
0
)
{
if
(
pStmt
->
bInfo
.
inExecCache
)
{
ASSERT
(
taosHashGetSize
(
pStmt
->
exec
.
pBlockHash
)
==
1
);
pStmt
->
bInfo
.
needParse
=
false
;
return
TSDB_CODE_SUCCESS
;
}
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
@@ -307,6 +361,28 @@ int32_t stmtGetFromCache(STscStmt* pStmt) {
...
@@ -307,6 +361,28 @@ int32_t stmtGetFromCache(STscStmt* pStmt) {
STMT_ERR_RET
(
catalogGetHandle
(
pStmt
->
taos
->
pAppInfo
->
clusterId
,
&
pStmt
->
pCatalog
));
STMT_ERR_RET
(
catalogGetHandle
(
pStmt
->
taos
->
pAppInfo
->
clusterId
,
&
pStmt
->
pCatalog
));
}
}
if
(
pStmt
->
sql
.
autoCreateTbl
)
{
SStmtTableCache
*
pCache
=
taosHashGet
(
pStmt
->
sql
.
pTableCache
,
&
pStmt
->
bInfo
.
tbSuid
,
sizeof
(
pStmt
->
bInfo
.
tbSuid
));
if
(
pCache
)
{
pStmt
->
bInfo
.
needParse
=
false
;
pStmt
->
exec
.
autoCreateTbl
=
true
;
pStmt
->
bInfo
.
tbUid
=
0
;
STableDataBlocks
*
pNewBlock
=
NULL
;
STMT_ERR_RET
(
stmtRebuildDataBlock
(
pStmt
,
pCache
->
pDataBlock
,
&
pNewBlock
,
0
));
if
(
taosHashPut
(
pStmt
->
exec
.
pBlockHash
,
pStmt
->
bInfo
.
tbFName
,
strlen
(
pStmt
->
bInfo
.
tbFName
),
&
pNewBlock
,
POINTER_BYTES
))
{
STMT_ERR_RET
(
TSDB_CODE_OUT_OF_MEMORY
);
}
return
TSDB_CODE_SUCCESS
;
}
STMT_RET
(
stmtCleanBindInfo
(
pStmt
));
}
STableMeta
*
pTableMeta
=
NULL
;
STableMeta
*
pTableMeta
=
NULL
;
SEpSet
ep
=
getEpSet_s
(
&
pStmt
->
taos
->
pAppInfo
->
mgmtEp
);
SEpSet
ep
=
getEpSet_s
(
&
pStmt
->
taos
->
pAppInfo
->
mgmtEp
);
int32_t
code
=
catalogGetTableMeta
(
pStmt
->
pCatalog
,
pStmt
->
taos
->
pAppInfo
->
pTransporter
,
&
ep
,
&
pStmt
->
bInfo
.
sname
,
&
pTableMeta
);
int32_t
code
=
catalogGetTableMeta
(
pStmt
->
pCatalog
,
pStmt
->
taos
->
pAppInfo
->
pTransporter
,
&
ep
,
&
pStmt
->
bInfo
.
sname
,
&
pTableMeta
);
...
@@ -322,6 +398,7 @@ int32_t stmtGetFromCache(STscStmt* pStmt) {
...
@@ -322,6 +398,7 @@ int32_t stmtGetFromCache(STscStmt* pStmt) {
uint64_t
suid
=
pTableMeta
->
suid
;
uint64_t
suid
=
pTableMeta
->
suid
;
int8_t
tableType
=
pTableMeta
->
tableType
;
int8_t
tableType
=
pTableMeta
->
tableType
;
taosMemoryFree
(
pTableMeta
);
taosMemoryFree
(
pTableMeta
);
uint64_t
cacheUid
=
(
TSDB_CHILD_TABLE
==
tableType
)
?
suid
:
uid
;
if
(
uid
==
pStmt
->
bInfo
.
tbUid
)
{
if
(
uid
==
pStmt
->
bInfo
.
tbUid
)
{
pStmt
->
bInfo
.
needParse
=
false
;
pStmt
->
bInfo
.
needParse
=
false
;
...
@@ -329,10 +406,10 @@ int32_t stmtGetFromCache(STscStmt* pStmt) {
...
@@ -329,10 +406,10 @@ int32_t stmtGetFromCache(STscStmt* pStmt) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
if
(
taosHashGet
(
pStmt
->
exec
.
pBlockHash
,
&
uid
,
sizeof
(
uid
))
)
{
if
(
pStmt
->
bInfo
.
inExecCache
)
{
SStmtTableCache
*
pCache
=
taosHashGet
(
pStmt
->
sql
.
pTableCache
,
&
uid
,
sizeof
(
u
id
));
SStmtTableCache
*
pCache
=
taosHashGet
(
pStmt
->
sql
.
pTableCache
,
&
cacheUid
,
sizeof
(
cacheU
id
));
if
(
NULL
==
pCache
)
{
if
(
NULL
==
pCache
)
{
tscError
(
"table
uid %"
PRIx64
"found in exec blockHash, but not in sql blockHash"
,
u
id
);
tscError
(
"table
[%s, %"
PRIx64
", %"
PRIx64
"] found in exec blockHash, but not in sql blockHash"
,
pStmt
->
bInfo
.
tbFName
,
uid
,
cacheU
id
);
STMT_ERR_RET
(
TSDB_CODE_TSC_APP_ERROR
);
STMT_ERR_RET
(
TSDB_CODE_TSC_APP_ERROR
);
}
}
...
@@ -348,7 +425,7 @@ int32_t stmtGetFromCache(STscStmt* pStmt) {
...
@@ -348,7 +425,7 @@ int32_t stmtGetFromCache(STscStmt* pStmt) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
SStmtTableCache
*
pCache
=
taosHashGet
(
pStmt
->
sql
.
pTableCache
,
&
uid
,
sizeof
(
u
id
));
SStmtTableCache
*
pCache
=
taosHashGet
(
pStmt
->
sql
.
pTableCache
,
&
cacheUid
,
sizeof
(
cacheU
id
));
if
(
pCache
)
{
if
(
pCache
)
{
pStmt
->
bInfo
.
needParse
=
false
;
pStmt
->
bInfo
.
needParse
=
false
;
...
@@ -359,9 +436,9 @@ int32_t stmtGetFromCache(STscStmt* pStmt) {
...
@@ -359,9 +436,9 @@ int32_t stmtGetFromCache(STscStmt* pStmt) {
pStmt
->
bInfo
.
tagsCached
=
true
;
pStmt
->
bInfo
.
tagsCached
=
true
;
STableDataBlocks
*
pNewBlock
=
NULL
;
STableDataBlocks
*
pNewBlock
=
NULL
;
STMT_ERR_RET
(
qRebuildStmtDataBlock
(
&
pNewBlock
,
pCache
->
pDataBlock
));
STMT_ERR_RET
(
stmtRebuildDataBlock
(
pStmt
,
pCache
->
pDataBlock
,
&
pNewBlock
,
uid
));
if
(
taosHashPut
(
pStmt
->
exec
.
pBlockHash
,
&
pStmt
->
bInfo
.
tbUid
,
sizeof
(
pStmt
->
bInfo
.
tbUid
),
&
pNewBlock
,
POINTER_BYTES
))
{
if
(
taosHashPut
(
pStmt
->
exec
.
pBlockHash
,
pStmt
->
bInfo
.
tbFName
,
strlen
(
pStmt
->
bInfo
.
tbFName
),
&
pNewBlock
,
POINTER_BYTES
))
{
STMT_ERR_RET
(
TSDB_CODE_OUT_OF_MEMORY
);
STMT_ERR_RET
(
TSDB_CODE_OUT_OF_MEMORY
);
}
}
...
@@ -387,8 +464,7 @@ int32_t stmtResetStmt(STscStmt* pStmt) {
...
@@ -387,8 +464,7 @@ int32_t stmtResetStmt(STscStmt* pStmt) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
TAOS_STMT
*
stmtInit
(
TAOS
*
taos
)
{
TAOS_STMT
*
stmtInit
(
TAOS
*
taos
)
{
STscObj
*
pObj
=
(
STscObj
*
)
taos
;
STscObj
*
pObj
=
(
STscObj
*
)
taos
;
STscStmt
*
pStmt
=
NULL
;
STscStmt
*
pStmt
=
NULL
;
...
@@ -412,7 +488,7 @@ TAOS_STMT *stmtInit(TAOS *taos) {
...
@@ -412,7 +488,7 @@ TAOS_STMT *stmtInit(TAOS *taos) {
return
pStmt
;
return
pStmt
;
}
}
int
stmtPrepare
(
TAOS_STMT
*
stmt
,
const
char
*
sql
,
unsigned
long
length
)
{
int
stmtPrepare
(
TAOS_STMT
*
stmt
,
const
char
*
sql
,
unsigned
long
length
)
{
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
if
(
pStmt
->
sql
.
status
>=
STMT_PREPARE
)
{
if
(
pStmt
->
sql
.
status
>=
STMT_PREPARE
)
{
...
@@ -431,8 +507,7 @@ int stmtPrepare(TAOS_STMT *stmt, const char *sql, unsigned long length) {
...
@@ -431,8 +507,7 @@ int stmtPrepare(TAOS_STMT *stmt, const char *sql, unsigned long length) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int
stmtSetTbName
(
TAOS_STMT
*
stmt
,
const
char
*
tbName
)
{
int
stmtSetTbName
(
TAOS_STMT
*
stmt
,
const
char
*
tbName
)
{
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
STMT_ERR_RET
(
stmtSwitchStatus
(
pStmt
,
STMT_SETTBNAME
));
STMT_ERR_RET
(
stmtSwitchStatus
(
pStmt
,
STMT_SETTBNAME
));
...
@@ -449,49 +524,52 @@ int stmtSetTbName(TAOS_STMT *stmt, const char *tbName) {
...
@@ -449,49 +524,52 @@ int stmtSetTbName(TAOS_STMT *stmt, const char *tbName) {
}
}
STMT_ERR_RET
(
qCreateSName
(
&
pStmt
->
bInfo
.
sname
,
tbName
,
pStmt
->
taos
->
acctId
,
pStmt
->
exec
.
pRequest
->
pDb
,
pStmt
->
exec
.
pRequest
->
msgBuf
,
pStmt
->
exec
.
pRequest
->
msgBufLen
));
STMT_ERR_RET
(
qCreateSName
(
&
pStmt
->
bInfo
.
sname
,
tbName
,
pStmt
->
taos
->
acctId
,
pStmt
->
exec
.
pRequest
->
pDb
,
pStmt
->
exec
.
pRequest
->
msgBuf
,
pStmt
->
exec
.
pRequest
->
msgBufLen
));
tNameExtractFullName
(
&
pStmt
->
bInfo
.
sname
,
pStmt
->
bInfo
.
tbFName
);
STMT_ERR_RET
(
stmtGetFromCache
(
pStmt
));
STMT_ERR_RET
(
stmtGetFromCache
(
pStmt
));
if
(
pStmt
->
bInfo
.
needParse
)
{
if
(
pStmt
->
bInfo
.
needParse
)
{
taosMemoryFree
(
pStmt
->
bInfo
.
tbName
);
strncpy
(
pStmt
->
bInfo
.
tbName
,
tbName
,
sizeof
(
pStmt
->
bInfo
.
tbName
)
-
1
);
pStmt
->
bInfo
.
tbName
=
strdup
(
tbName
)
;
pStmt
->
bInfo
.
tbName
[
sizeof
(
pStmt
->
bInfo
.
tbName
)
-
1
]
=
0
;
}
}
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int
stmtSetTbTags
(
TAOS_STMT
*
stmt
,
TAOS_MULTI_BIND
*
tags
)
{
int
stmtSetTbTags
(
TAOS_STMT
*
stmt
,
TAOS_MULTI_BIND
*
tags
)
{
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
STMT_ERR_RET
(
stmtSwitchStatus
(
pStmt
,
STMT_SETTAGS
));
STMT_ERR_RET
(
stmtSwitchStatus
(
pStmt
,
STMT_SETTAGS
));
if
(
!
pStmt
->
bInfo
.
needParse
)
{
if
(
pStmt
->
bInfo
.
needParse
)
{
return
TSDB_CODE_SUCCESS
;
STMT_ERR_RET
(
stmtParseSql
(
pStmt
))
;
}
}
STMT_ERR_RET
(
stmtParseSql
(
pStmt
));
if
(
pStmt
->
bInfo
.
inExecCache
)
{
return
TSDB_CODE_SUCCESS
;
}
STableDataBlocks
**
pDataBlock
=
(
STableDataBlocks
**
)
taosHashGet
(
pStmt
->
exec
.
pBlockHash
,
(
const
char
*
)
&
pStmt
->
bInfo
.
tbUid
,
sizeof
(
pStmt
->
bInfo
.
tbUid
));
STableDataBlocks
**
pDataBlock
=
(
STableDataBlocks
**
)
taosHashGet
(
pStmt
->
exec
.
pBlockHash
,
pStmt
->
bInfo
.
tbFName
,
strlen
(
pStmt
->
bInfo
.
tbFName
));
if
(
NULL
==
pDataBlock
)
{
if
(
NULL
==
pDataBlock
)
{
tscError
(
"table
uid %"
PRIx64
"not found in exec blockHash"
,
pStmt
->
bInfo
.
tbUid
);
tscError
(
"table
%s not found in exec blockHash"
,
pStmt
->
bInfo
.
tbFName
);
STMT_ERR_RET
(
TSDB_CODE_QRY_APP_ERROR
);
STMT_ERR_RET
(
TSDB_CODE_QRY_APP_ERROR
);
}
}
STMT_ERR_RET
(
qBindStmtTagsValue
(
*
pDataBlock
,
pStmt
->
bInfo
.
boundTags
,
pStmt
->
bInfo
.
tbSuid
,
pStmt
->
bInfo
.
sname
.
tname
,
tags
,
pStmt
->
exec
.
pRequest
->
msgBuf
,
pStmt
->
exec
.
pRequest
->
msgBufLen
));
STMT_ERR_RET
(
qBindStmtTagsValue
(
*
pDataBlock
,
pStmt
->
bInfo
.
boundTags
,
pStmt
->
bInfo
.
tbSuid
,
pStmt
->
bInfo
.
sname
.
tname
,
tags
,
pStmt
->
exec
.
pRequest
->
msgBuf
,
pStmt
->
exec
.
pRequest
->
msgBufLen
));
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int32_t
stmtFetchTagFields
(
STscStmt
*
pStmt
,
int32_t
*
fieldNum
,
TAOS_FIELD
**
fields
)
{
int32_t
stmtFetchTagFields
(
STscStmt
*
pStmt
,
int32_t
*
fieldNum
,
TAOS_FIELD
**
fields
)
{
if
(
STMT_TYPE_QUERY
==
pStmt
->
sql
.
type
)
{
if
(
STMT_TYPE_QUERY
==
pStmt
->
sql
.
type
)
{
tscError
(
"invalid operation to get query tag fileds"
);
tscError
(
"invalid operation to get query tag fileds"
);
STMT_ERR_RET
(
TSDB_CODE_TSC_STMT_API_ERROR
);
STMT_ERR_RET
(
TSDB_CODE_TSC_STMT_API_ERROR
);
}
}
STableDataBlocks
**
pDataBlock
=
(
STableDataBlocks
**
)
taosHashGet
(
pStmt
->
exec
.
pBlockHash
,
(
const
char
*
)
&
pStmt
->
bInfo
.
tbUid
,
sizeof
(
pStmt
->
bInfo
.
tbUid
));
STableDataBlocks
**
pDataBlock
=
(
STableDataBlocks
**
)
taosHashGet
(
pStmt
->
exec
.
pBlockHash
,
pStmt
->
bInfo
.
tbFName
,
strlen
(
pStmt
->
bInfo
.
tbFName
));
if
(
NULL
==
pDataBlock
)
{
if
(
NULL
==
pDataBlock
)
{
tscError
(
"table
uid %"
PRIx64
"not found in exec blockHash"
,
pStmt
->
bInfo
.
tbUid
);
tscError
(
"table
%s not found in exec blockHash"
,
pStmt
->
bInfo
.
tbFName
);
STMT_ERR_RET
(
TSDB_CODE_QRY_APP_ERROR
);
STMT_ERR_RET
(
TSDB_CODE_QRY_APP_ERROR
);
}
}
...
@@ -500,15 +578,15 @@ int32_t stmtFetchTagFields(STscStmt* pStmt, int32_t *fieldNum, TAOS_FIELD** fiel
...
@@ -500,15 +578,15 @@ int32_t stmtFetchTagFields(STscStmt* pStmt, int32_t *fieldNum, TAOS_FIELD** fiel
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int32_t
stmtFetchColFields
(
STscStmt
*
pStmt
,
int32_t
*
fieldNum
,
TAOS_FIELD
**
fields
)
{
int32_t
stmtFetchColFields
(
STscStmt
*
pStmt
,
int32_t
*
fieldNum
,
TAOS_FIELD
**
fields
)
{
if
(
STMT_TYPE_QUERY
==
pStmt
->
sql
.
type
)
{
if
(
STMT_TYPE_QUERY
==
pStmt
->
sql
.
type
)
{
tscError
(
"invalid operation to get query column fileds"
);
tscError
(
"invalid operation to get query column fileds"
);
STMT_ERR_RET
(
TSDB_CODE_TSC_STMT_API_ERROR
);
STMT_ERR_RET
(
TSDB_CODE_TSC_STMT_API_ERROR
);
}
}
STableDataBlocks
**
pDataBlock
=
(
STableDataBlocks
**
)
taosHashGet
(
pStmt
->
exec
.
pBlockHash
,
(
const
char
*
)
&
pStmt
->
bInfo
.
tbUid
,
sizeof
(
pStmt
->
bInfo
.
tbUid
));
STableDataBlocks
**
pDataBlock
=
(
STableDataBlocks
**
)
taosHashGet
(
pStmt
->
exec
.
pBlockHash
,
pStmt
->
bInfo
.
tbFName
,
strlen
(
pStmt
->
bInfo
.
tbFName
));
if
(
NULL
==
pDataBlock
)
{
if
(
NULL
==
pDataBlock
)
{
tscError
(
"table
uid %"
PRIx64
"not found in exec blockHash"
,
pStmt
->
bInfo
.
tbUid
);
tscError
(
"table
%s not found in exec blockHash"
,
pStmt
->
bInfo
.
tbFName
);
STMT_ERR_RET
(
TSDB_CODE_QRY_APP_ERROR
);
STMT_ERR_RET
(
TSDB_CODE_QRY_APP_ERROR
);
}
}
...
@@ -517,10 +595,11 @@ int32_t stmtFetchColFields(STscStmt* pStmt, int32_t *fieldNum, TAOS_FIELD** fiel
...
@@ -517,10 +595,11 @@ int32_t stmtFetchColFields(STscStmt* pStmt, int32_t *fieldNum, TAOS_FIELD** fiel
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int
stmtBindBatch
(
TAOS_STMT
*
stmt
,
TAOS_MULTI_BIND
*
bind
,
int32_t
colIdx
)
{
int
stmtBindBatch
(
TAOS_STMT
*
stmt
,
TAOS_MULTI_BIND
*
bind
,
int32_t
colIdx
)
{
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
if
(
pStmt
->
bInfo
.
needParse
&&
pStmt
->
sql
.
runTimes
&&
pStmt
->
sql
.
type
>
0
&&
STMT_TYPE_MULTI_INSERT
!=
pStmt
->
sql
.
type
)
{
if
(
pStmt
->
bInfo
.
needParse
&&
pStmt
->
sql
.
runTimes
&&
pStmt
->
sql
.
type
>
0
&&
STMT_TYPE_MULTI_INSERT
!=
pStmt
->
sql
.
type
)
{
pStmt
->
bInfo
.
needParse
=
false
;
pStmt
->
bInfo
.
needParse
=
false
;
}
}
...
@@ -549,12 +628,13 @@ int stmtBindBatch(TAOS_STMT *stmt, TAOS_MULTI_BIND *bind, int32_t colIdx) {
...
@@ -549,12 +628,13 @@ int stmtBindBatch(TAOS_STMT *stmt, TAOS_MULTI_BIND *bind, int32_t colIdx) {
STMT_ERR_RET
(
stmtRestoreQueryFields
(
pStmt
));
STMT_ERR_RET
(
stmtRestoreQueryFields
(
pStmt
));
}
}
STMT_RET
(
qStmtBindParam
(
pStmt
->
sql
.
pQueryPlan
,
bind
,
colIdx
,
pStmt
->
exec
.
pRequest
->
requestId
));
bool
emptyResult
=
false
;
STMT_RET
(
qStmtBindParam
(
pStmt
->
sql
.
pQueryPlan
,
bind
,
colIdx
,
pStmt
->
exec
.
pRequest
->
requestId
,
&
emptyResult
));
}
}
STableDataBlocks
**
pDataBlock
=
(
STableDataBlocks
**
)
taosHashGet
(
pStmt
->
exec
.
pBlockHash
,
(
const
char
*
)
&
pStmt
->
bInfo
.
tbUid
,
sizeof
(
pStmt
->
bInfo
.
tbUid
));
STableDataBlocks
**
pDataBlock
=
(
STableDataBlocks
**
)
taosHashGet
(
pStmt
->
exec
.
pBlockHash
,
pStmt
->
bInfo
.
tbFName
,
strlen
(
pStmt
->
bInfo
.
tbFName
));
if
(
NULL
==
pDataBlock
)
{
if
(
NULL
==
pDataBlock
)
{
tscError
(
"table
uid %"
PRIx64
"not found in exec blockHash"
,
pStmt
->
bInfo
.
tbUid
);
tscError
(
"table
%s not found in exec blockHash"
,
pStmt
->
bInfo
.
tbFName
);
STMT_ERR_RET
(
TSDB_CODE_QRY_APP_ERROR
);
STMT_ERR_RET
(
TSDB_CODE_QRY_APP_ERROR
);
}
}
...
@@ -576,14 +656,14 @@ int stmtBindBatch(TAOS_STMT *stmt, TAOS_MULTI_BIND *bind, int32_t colIdx) {
...
@@ -576,14 +656,14 @@ int stmtBindBatch(TAOS_STMT *stmt, TAOS_MULTI_BIND *bind, int32_t colIdx) {
pStmt
->
bInfo
.
sBindRowNum
=
bind
->
num
;
pStmt
->
bInfo
.
sBindRowNum
=
bind
->
num
;
}
}
qBindStmtSingleColValue
(
*
pDataBlock
,
bind
,
pStmt
->
exec
.
pRequest
->
msgBuf
,
pStmt
->
exec
.
pRequest
->
msgBufLen
,
colIdx
,
pStmt
->
bInfo
.
sBindRowNum
);
qBindStmtSingleColValue
(
*
pDataBlock
,
bind
,
pStmt
->
exec
.
pRequest
->
msgBuf
,
pStmt
->
exec
.
pRequest
->
msgBufLen
,
colIdx
,
pStmt
->
bInfo
.
sBindRowNum
);
}
}
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int
stmtAddBatch
(
TAOS_STMT
*
stmt
)
{
int
stmtAddBatch
(
TAOS_STMT
*
stmt
)
{
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
STMT_ERR_RET
(
stmtSwitchStatus
(
pStmt
,
STMT_ADD_BATCH
));
STMT_ERR_RET
(
stmtSwitchStatus
(
pStmt
,
STMT_ADD_BATCH
));
...
@@ -593,17 +673,73 @@ int stmtAddBatch(TAOS_STMT *stmt) {
...
@@ -593,17 +673,73 @@ int stmtAddBatch(TAOS_STMT *stmt) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int
stmtUpdateTableUid
(
STscStmt
*
pStmt
,
SSubmitRsp
*
pRsp
)
{
if
(
pRsp
->
nBlocks
<=
0
)
{
tscError
(
"invalid submit resp block number %d"
,
pRsp
->
nBlocks
);
STMT_ERR_RET
(
TSDB_CODE_TSC_APP_ERROR
);
}
size_t
keyLen
=
0
;
STableDataBlocks
**
pIter
=
taosHashIterate
(
pStmt
->
exec
.
pBlockHash
,
NULL
);
while
(
pIter
)
{
STableDataBlocks
*
pBlock
=
*
pIter
;
char
*
key
=
taosHashGetKey
(
pIter
,
&
keyLen
);
STableMeta
*
pMeta
=
qGetTableMetaInDataBlock
(
pBlock
);
if
(
pMeta
->
uid
!=
pStmt
->
bInfo
.
tbUid
)
{
tscError
(
"table uid %"
PRIx64
" mis-match with current table uid %"
PRIx64
,
pMeta
->
uid
,
pStmt
->
bInfo
.
tbUid
);
STMT_ERR_RET
(
TSDB_CODE_TSC_APP_ERROR
);
}
if
(
pMeta
->
uid
)
{
pIter
=
taosHashIterate
(
pStmt
->
exec
.
pBlockHash
,
pIter
);
continue
;
}
SSubmitBlkRsp
*
blkRsp
=
NULL
;
int32_t
i
=
0
;
for
(;
i
<
pRsp
->
nBlocks
;
++
i
)
{
blkRsp
=
pRsp
->
pBlocks
+
i
;
if
(
strlen
(
blkRsp
->
tblFName
)
!=
keyLen
)
{
continue
;
}
if
(
strncmp
(
blkRsp
->
tblFName
,
key
,
keyLen
))
{
continue
;
}
break
;
}
if
(
i
<
pRsp
->
nBlocks
)
{
tscDebug
(
"auto created table %s uid updated from %"
PRIx64
" to %"
PRIx64
,
blkRsp
->
tblFName
,
pMeta
->
uid
,
blkRsp
->
uid
);
pMeta
->
uid
=
blkRsp
->
uid
;
pStmt
->
bInfo
.
tbUid
=
blkRsp
->
uid
;
}
else
{
tscError
(
"table %s not found in submit rsp"
,
pStmt
->
bInfo
.
tbFName
);
STMT_ERR_RET
(
TSDB_CODE_TSC_APP_ERROR
);
}
pIter
=
taosHashIterate
(
pStmt
->
exec
.
pBlockHash
,
pIter
);
}
return
TSDB_CODE_SUCCESS
;
}
int
stmtExec
(
TAOS_STMT
*
stmt
)
{
int
stmtExec
(
TAOS_STMT
*
stmt
)
{
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
int32_t
code
=
0
;
int32_t
code
=
0
;
SSubmitRsp
*
pRsp
=
NULL
;
bool
autoCreateTbl
=
pStmt
->
exec
.
autoCreateTbl
;
STMT_ERR_RET
(
stmtSwitchStatus
(
pStmt
,
STMT_EXECUTE
));
STMT_ERR_RET
(
stmtSwitchStatus
(
pStmt
,
STMT_EXECUTE
));
if
(
STMT_TYPE_QUERY
==
pStmt
->
sql
.
type
)
{
if
(
STMT_TYPE_QUERY
==
pStmt
->
sql
.
type
)
{
scheduleQuery
(
pStmt
->
exec
.
pRequest
,
pStmt
->
sql
.
pQueryPlan
,
pStmt
->
sql
.
nodeList
);
scheduleQuery
(
pStmt
->
exec
.
pRequest
,
pStmt
->
sql
.
pQueryPlan
,
pStmt
->
sql
.
nodeList
,
NULL
);
}
else
{
}
else
{
STMT_ERR_RET
(
qBuildStmtOutput
(
pStmt
->
sql
.
pQuery
,
pStmt
->
exec
.
pVgHash
,
pStmt
->
exec
.
pBlockHash
));
STMT_ERR_RET
(
qBuildStmtOutput
(
pStmt
->
sql
.
pQuery
,
pStmt
->
exec
.
pVgHash
,
pStmt
->
exec
.
pBlockHash
));
launchQueryImpl
(
pStmt
->
exec
.
pRequest
,
pStmt
->
sql
.
pQuery
,
TSDB_CODE_SUCCESS
,
true
);
launchQueryImpl
(
pStmt
->
exec
.
pRequest
,
pStmt
->
sql
.
pQuery
,
TSDB_CODE_SUCCESS
,
true
,
(
autoCreateTbl
?
(
void
**
)
&
pRsp
:
NULL
)
);
}
}
if
(
pStmt
->
exec
.
pRequest
->
code
&&
NEED_CLIENT_HANDLE_ERROR
(
pStmt
->
exec
.
pRequest
->
code
))
{
if
(
pStmt
->
exec
.
pRequest
->
code
&&
NEED_CLIENT_HANDLE_ERROR
(
pStmt
->
exec
.
pRequest
->
code
))
{
...
@@ -625,13 +761,21 @@ _return:
...
@@ -625,13 +761,21 @@ _return:
stmtCleanExecInfo
(
pStmt
,
(
code
?
false
:
true
),
false
);
stmtCleanExecInfo
(
pStmt
,
(
code
?
false
:
true
),
false
);
if
(
TSDB_CODE_SUCCESS
==
code
&&
autoCreateTbl
)
{
if
(
NULL
==
pRsp
)
{
tscError
(
"no submit resp got for auto create table"
);
STMT_ERR_RET
(
TSDB_CODE_TSC_APP_ERROR
);
}
STMT_ERR_RET
(
stmtUpdateTableUid
(
pStmt
,
pRsp
));
}
++
pStmt
->
sql
.
runTimes
;
++
pStmt
->
sql
.
runTimes
;
STMT_RET
(
code
);
STMT_RET
(
code
);
}
}
int
stmtClose
(
TAOS_STMT
*
stmt
)
{
int
stmtClose
(
TAOS_STMT
*
stmt
)
{
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
STMT_RET
(
stmtCleanSQLInfo
(
pStmt
));
STMT_RET
(
stmtCleanSQLInfo
(
pStmt
));
...
@@ -639,11 +783,11 @@ int stmtClose(TAOS_STMT *stmt) {
...
@@ -639,11 +783,11 @@ int stmtClose(TAOS_STMT *stmt) {
taosMemoryFree
(
stmt
);
taosMemoryFree
(
stmt
);
}
}
const
char
*
stmtErrstr
(
TAOS_STMT
*
stmt
)
{
const
char
*
stmtErrstr
(
TAOS_STMT
*
stmt
)
{
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
if
(
stmt
==
NULL
||
NULL
==
pStmt
->
exec
.
pRequest
)
{
if
(
stmt
==
NULL
||
NULL
==
pStmt
->
exec
.
pRequest
)
{
return
(
char
*
)
tstrerror
(
terrno
);
return
(
char
*
)
tstrerror
(
terrno
);
}
}
pStmt
->
exec
.
pRequest
->
code
=
terrno
;
pStmt
->
exec
.
pRequest
->
code
=
terrno
;
...
@@ -651,15 +795,11 @@ const char *stmtErrstr(TAOS_STMT *stmt) {
...
@@ -651,15 +795,11 @@ const char *stmtErrstr(TAOS_STMT *stmt) {
return
taos_errstr
(
pStmt
->
exec
.
pRequest
);
return
taos_errstr
(
pStmt
->
exec
.
pRequest
);
}
}
int
stmtAffectedRows
(
TAOS_STMT
*
stmt
)
{
int
stmtAffectedRows
(
TAOS_STMT
*
stmt
)
{
return
((
STscStmt
*
)
stmt
)
->
affectedRows
;
}
return
((
STscStmt
*
)
stmt
)
->
affectedRows
;
}
int
stmtAffectedRowsOnce
(
TAOS_STMT
*
stmt
)
{
int
stmtAffectedRowsOnce
(
TAOS_STMT
*
stmt
)
{
return
((
STscStmt
*
)
stmt
)
->
exec
.
affectedRows
;
}
return
((
STscStmt
*
)
stmt
)
->
exec
.
affectedRows
;
}
int
stmtIsInsert
(
TAOS_STMT
*
stmt
,
int
*
insert
)
{
int
stmtIsInsert
(
TAOS_STMT
*
stmt
,
int
*
insert
)
{
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
if
(
pStmt
->
sql
.
type
)
{
if
(
pStmt
->
sql
.
type
)
{
...
@@ -671,12 +811,13 @@ int stmtIsInsert(TAOS_STMT *stmt, int *insert) {
...
@@ -671,12 +811,13 @@ int stmtIsInsert(TAOS_STMT *stmt, int *insert) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int
stmtGetParamNum
(
TAOS_STMT
*
stmt
,
int
*
nums
)
{
int
stmtGetParamNum
(
TAOS_STMT
*
stmt
,
int
*
nums
)
{
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
STMT_ERR_RET
(
stmtSwitchStatus
(
pStmt
,
STMT_FETCH_FIELDS
));
STMT_ERR_RET
(
stmtSwitchStatus
(
pStmt
,
STMT_FETCH_FIELDS
));
if
(
pStmt
->
bInfo
.
needParse
&&
pStmt
->
sql
.
runTimes
&&
pStmt
->
sql
.
type
>
0
&&
STMT_TYPE_MULTI_INSERT
!=
pStmt
->
sql
.
type
)
{
if
(
pStmt
->
bInfo
.
needParse
&&
pStmt
->
sql
.
runTimes
&&
pStmt
->
sql
.
type
>
0
&&
STMT_TYPE_MULTI_INSERT
!=
pStmt
->
sql
.
type
)
{
pStmt
->
bInfo
.
needParse
=
false
;
pStmt
->
bInfo
.
needParse
=
false
;
}
}
...
@@ -711,7 +852,7 @@ int stmtGetParamNum(TAOS_STMT *stmt, int *nums) {
...
@@ -711,7 +852,7 @@ int stmtGetParamNum(TAOS_STMT *stmt, int *nums) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
TAOS_RES
*
stmtUseResult
(
TAOS_STMT
*
stmt
)
{
TAOS_RES
*
stmtUseResult
(
TAOS_STMT
*
stmt
)
{
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
STscStmt
*
pStmt
=
(
STscStmt
*
)
stmt
;
if
(
STMT_TYPE_QUERY
!=
pStmt
->
sql
.
type
)
{
if
(
STMT_TYPE_QUERY
!=
pStmt
->
sql
.
type
)
{
...
@@ -721,6 +862,3 @@ TAOS_RES *stmtUseResult(TAOS_STMT *stmt) {
...
@@ -721,6 +862,3 @@ TAOS_RES *stmtUseResult(TAOS_STMT *stmt) {
return
pStmt
->
exec
.
pRequest
;
return
pStmt
->
exec
.
pRequest
;
}
}
source/common/src/tmsg.c
浏览文件 @
ed1a71f1
...
@@ -2764,6 +2764,7 @@ int32_t tSerializeSConnectRsp(void *buf, int32_t bufLen, SConnectRsp *pRsp) {
...
@@ -2764,6 +2764,7 @@ int32_t tSerializeSConnectRsp(void *buf, int32_t bufLen, SConnectRsp *pRsp) {
if
(
tEncodeI32
(
&
encoder
,
pRsp
->
acctId
)
<
0
)
return
-
1
;
if
(
tEncodeI32
(
&
encoder
,
pRsp
->
acctId
)
<
0
)
return
-
1
;
if
(
tEncodeI64
(
&
encoder
,
pRsp
->
clusterId
)
<
0
)
return
-
1
;
if
(
tEncodeI64
(
&
encoder
,
pRsp
->
clusterId
)
<
0
)
return
-
1
;
if
(
tEncodeU32
(
&
encoder
,
pRsp
->
connId
)
<
0
)
return
-
1
;
if
(
tEncodeU32
(
&
encoder
,
pRsp
->
connId
)
<
0
)
return
-
1
;
if
(
tEncodeI32
(
&
encoder
,
pRsp
->
dnodeNum
)
<
0
)
return
-
1
;
if
(
tEncodeI8
(
&
encoder
,
pRsp
->
superUser
)
<
0
)
return
-
1
;
if
(
tEncodeI8
(
&
encoder
,
pRsp
->
superUser
)
<
0
)
return
-
1
;
if
(
tEncodeI8
(
&
encoder
,
pRsp
->
connType
)
<
0
)
return
-
1
;
if
(
tEncodeI8
(
&
encoder
,
pRsp
->
connType
)
<
0
)
return
-
1
;
if
(
tEncodeSEpSet
(
&
encoder
,
&
pRsp
->
epSet
)
<
0
)
return
-
1
;
if
(
tEncodeSEpSet
(
&
encoder
,
&
pRsp
->
epSet
)
<
0
)
return
-
1
;
...
@@ -2783,6 +2784,7 @@ int32_t tDeserializeSConnectRsp(void *buf, int32_t bufLen, SConnectRsp *pRsp) {
...
@@ -2783,6 +2784,7 @@ int32_t tDeserializeSConnectRsp(void *buf, int32_t bufLen, SConnectRsp *pRsp) {
if
(
tDecodeI32
(
&
decoder
,
&
pRsp
->
acctId
)
<
0
)
return
-
1
;
if
(
tDecodeI32
(
&
decoder
,
&
pRsp
->
acctId
)
<
0
)
return
-
1
;
if
(
tDecodeI64
(
&
decoder
,
&
pRsp
->
clusterId
)
<
0
)
return
-
1
;
if
(
tDecodeI64
(
&
decoder
,
&
pRsp
->
clusterId
)
<
0
)
return
-
1
;
if
(
tDecodeU32
(
&
decoder
,
&
pRsp
->
connId
)
<
0
)
return
-
1
;
if
(
tDecodeU32
(
&
decoder
,
&
pRsp
->
connId
)
<
0
)
return
-
1
;
if
(
tDecodeI32
(
&
decoder
,
&
pRsp
->
dnodeNum
)
<
0
)
return
-
1
;
if
(
tDecodeI8
(
&
decoder
,
&
pRsp
->
superUser
)
<
0
)
return
-
1
;
if
(
tDecodeI8
(
&
decoder
,
&
pRsp
->
superUser
)
<
0
)
return
-
1
;
if
(
tDecodeI8
(
&
decoder
,
&
pRsp
->
connType
)
<
0
)
return
-
1
;
if
(
tDecodeI8
(
&
decoder
,
&
pRsp
->
connType
)
<
0
)
return
-
1
;
if
(
tDecodeSEpSet
(
&
decoder
,
&
pRsp
->
epSet
)
<
0
)
return
-
1
;
if
(
tDecodeSEpSet
(
&
decoder
,
&
pRsp
->
epSet
)
<
0
)
return
-
1
;
...
@@ -4026,3 +4028,84 @@ int32_t tDecodeSVSubmitReq(SDecoder *pCoder, SVSubmitReq *pReq) {
...
@@ -4026,3 +4028,84 @@ int32_t tDecodeSVSubmitReq(SDecoder *pCoder, SVSubmitReq *pReq) {
tEndDecode
(
pCoder
);
tEndDecode
(
pCoder
);
return
0
;
return
0
;
}
}
static
int32_t
tEncodeSSubmitBlkRsp
(
SEncoder
*
pEncoder
,
const
SSubmitBlkRsp
*
pBlock
)
{
if
(
tStartEncode
(
pEncoder
)
<
0
)
return
-
1
;
if
(
tEncodeI8
(
pEncoder
,
pBlock
->
hashMeta
)
<
0
)
return
-
1
;
if
(
pBlock
->
hashMeta
)
{
if
(
tEncodeI64
(
pEncoder
,
pBlock
->
uid
)
<
0
)
return
-
1
;
if
(
tEncodeCStr
(
pEncoder
,
pBlock
->
tblFName
)
<
0
)
return
-
1
;
}
if
(
tEncodeI32v
(
pEncoder
,
pBlock
->
numOfRows
)
<
0
)
return
-
1
;
if
(
tEncodeI32v
(
pEncoder
,
pBlock
->
affectedRows
)
<
0
)
return
-
1
;
tEndEncode
(
pEncoder
);
return
0
;
}
static
int32_t
tDecodeSSubmitBlkRsp
(
SDecoder
*
pDecoder
,
SSubmitBlkRsp
*
pBlock
)
{
if
(
tStartDecode
(
pDecoder
)
<
0
)
return
-
1
;
if
(
tDecodeI8
(
pDecoder
,
&
pBlock
->
hashMeta
)
<
0
)
return
-
1
;
if
(
pBlock
->
hashMeta
)
{
if
(
tDecodeI64
(
pDecoder
,
&
pBlock
->
uid
)
<
0
)
return
-
1
;
pBlock
->
tblFName
=
taosMemoryCalloc
(
TSDB_TABLE_FNAME_LEN
,
1
);
if
(
NULL
==
pBlock
->
tblFName
)
return
-
1
;
if
(
tDecodeCStrTo
(
pDecoder
,
pBlock
->
tblFName
)
<
0
)
return
-
1
;
}
if
(
tDecodeI32v
(
pDecoder
,
&
pBlock
->
numOfRows
)
<
0
)
return
-
1
;
if
(
tDecodeI32v
(
pDecoder
,
&
pBlock
->
affectedRows
)
<
0
)
return
-
1
;
tEndDecode
(
pDecoder
);
return
0
;
}
int32_t
tEncodeSSubmitRsp
(
SEncoder
*
pEncoder
,
const
SSubmitRsp
*
pRsp
)
{
int32_t
nBlocks
=
taosArrayGetSize
(
pRsp
->
pArray
);
if
(
tStartEncode
(
pEncoder
)
<
0
)
return
-
1
;
if
(
tEncodeI32v
(
pEncoder
,
pRsp
->
numOfRows
)
<
0
)
return
-
1
;
if
(
tEncodeI32v
(
pEncoder
,
pRsp
->
affectedRows
)
<
0
)
return
-
1
;
if
(
tEncodeI32v
(
pEncoder
,
nBlocks
)
<
0
)
return
-
1
;
for
(
int32_t
iBlock
=
0
;
iBlock
<
nBlocks
;
iBlock
++
)
{
if
(
tEncodeSSubmitBlkRsp
(
pEncoder
,
(
SSubmitBlkRsp
*
)
taosArrayGet
(
pRsp
->
pArray
,
iBlock
))
<
0
)
return
-
1
;
}
tEndEncode
(
pEncoder
);
return
0
;
}
int32_t
tDecodeSSubmitRsp
(
SDecoder
*
pDecoder
,
SSubmitRsp
*
pRsp
)
{
if
(
tStartDecode
(
pDecoder
)
<
0
)
return
-
1
;
if
(
tDecodeI32v
(
pDecoder
,
&
pRsp
->
numOfRows
)
<
0
)
return
-
1
;
if
(
tDecodeI32v
(
pDecoder
,
&
pRsp
->
affectedRows
)
<
0
)
return
-
1
;
if
(
tDecodeI32v
(
pDecoder
,
&
pRsp
->
nBlocks
)
<
0
)
return
-
1
;
pRsp
->
pBlocks
=
taosMemoryCalloc
(
pRsp
->
nBlocks
,
sizeof
(
*
pRsp
->
pBlocks
));
if
(
pRsp
->
pBlocks
==
NULL
)
return
-
1
;
for
(
int32_t
iBlock
=
0
;
iBlock
<
pRsp
->
nBlocks
;
iBlock
++
)
{
if
(
tDecodeSSubmitBlkRsp
(
pDecoder
,
pRsp
->
pBlocks
+
iBlock
)
<
0
)
return
-
1
;
}
tEndDecode
(
pDecoder
);
tDecoderClear
(
pDecoder
);
return
0
;
}
void
tFreeSSubmitRsp
(
SSubmitRsp
*
pRsp
)
{
if
(
NULL
==
pRsp
)
return
;
if
(
pRsp
->
pBlocks
)
{
for
(
int32_t
i
=
0
;
i
<
pRsp
->
nBlocks
;
++
i
)
{
SSubmitBlkRsp
*
sRsp
=
pRsp
->
pBlocks
+
i
;
taosMemoryFree
(
sRsp
->
tblFName
);
}
taosMemoryFree
(
pRsp
->
pBlocks
);
}
taosMemoryFree
(
pRsp
);
}
source/common/src/trow.c
浏览文件 @
ed1a71f1
...
@@ -1159,7 +1159,7 @@ bool tdGetKvRowValOfColEx(STSRowIter *pIter, col_id_t colId, col_type_t colType,
...
@@ -1159,7 +1159,7 @@ bool tdGetKvRowValOfColEx(STSRowIter *pIter, col_id_t colId, col_type_t colType,
#ifdef TD_SUPPORT_BITMAP
#ifdef TD_SUPPORT_BITMAP
int16_t
colIdx
=
-
1
;
int16_t
colIdx
=
-
1
;
if
(
pKvIdx
)
colIdx
=
POINTER_DISTANCE
(
TD_ROW_COL_IDX
(
pRow
),
pKvIdx
)
/
sizeof
(
SKvRowIdx
);
if
(
pKvIdx
)
colIdx
=
POINTER_DISTANCE
(
pKvIdx
,
TD_ROW_COL_IDX
(
pRow
)
)
/
sizeof
(
SKvRowIdx
);
if
(
tdGetBitmapValType
(
pIter
->
pBitmap
,
colIdx
,
&
pVal
->
valType
,
0
)
!=
TSDB_CODE_SUCCESS
)
{
if
(
tdGetBitmapValType
(
pIter
->
pBitmap
,
colIdx
,
&
pVal
->
valType
,
0
)
!=
TSDB_CODE_SUCCESS
)
{
pVal
->
valType
=
TD_VTYPE_NONE
;
pVal
->
valType
=
TD_VTYPE_NONE
;
}
}
...
@@ -1226,7 +1226,7 @@ bool tdSTSRowGetVal(STSRowIter *pIter, col_id_t colId, col_type_t colType, SCell
...
@@ -1226,7 +1226,7 @@ bool tdSTSRowGetVal(STSRowIter *pIter, col_id_t colId, col_type_t colType, SCell
compareKvRowColId
,
TD_EQ
);
compareKvRowColId
,
TD_EQ
);
#ifdef TD_SUPPORT_BITMAP
#ifdef TD_SUPPORT_BITMAP
if
(
pIdx
)
{
if
(
pIdx
)
{
colIdx
=
POINTER_DISTANCE
(
TD_ROW_COL_IDX
(
pRow
),
pIdx
)
/
sizeof
(
SKvRowIdx
);
colIdx
=
POINTER_DISTANCE
(
pIdx
,
TD_ROW_COL_IDX
(
pRow
)
)
/
sizeof
(
SKvRowIdx
);
}
}
#endif
#endif
tdGetKvRowValOfCol
(
pVal
,
pRow
,
pIter
->
pBitmap
,
pIdx
?
pIdx
->
offset
:
-
1
,
colIdx
);
tdGetKvRowValOfCol
(
pVal
,
pRow
,
pIter
->
pBitmap
,
pIdx
?
pIdx
->
offset
:
-
1
,
colIdx
);
...
...
source/common/src/tvariant.c
浏览文件 @
ed1a71f1
...
@@ -35,104 +35,36 @@
...
@@ -35,104 +35,36 @@
assert(0); \
assert(0); \
} while (0)
} while (0)
int32_t
toInteger
(
const
char
*
z
,
int32_t
n
,
int32_t
base
,
int64_t
*
value
,
bool
*
isSigned
)
{
int32_t
toInteger
(
const
char
*
z
,
int32_t
n
,
int32_t
base
,
int64_t
*
value
)
{
errno
=
0
;
errno
=
0
;
char
*
endPtr
=
NULL
;
char
*
endPtr
=
NULL
;
int32_t
index
=
0
;
*
value
=
strtoll
(
z
,
&
endPtr
,
base
);
if
(
errno
==
ERANGE
||
errno
==
EINVAL
||
endPtr
-
z
!=
n
)
{
bool
specifiedSign
=
(
z
[
0
]
==
'+'
||
z
[
0
]
==
'-'
);
if
(
specifiedSign
)
{
*
isSigned
=
true
;
index
=
1
;
}
uint64_t
val
=
strtoull
(
&
z
[
index
],
&
endPtr
,
base
);
if
(
errno
==
ERANGE
||
errno
==
EINVAL
)
{
errno
=
0
;
errno
=
0
;
return
-
1
;
return
-
1
;
}
}
if
(
specifiedSign
&&
val
>
INT64_MAX
)
{
return
-
1
;
}
if
(
endPtr
-
&
z
[
index
]
!=
n
-
index
)
{
return
-
1
;
}
*
isSigned
=
specifiedSign
||
(
val
<=
INT64_MAX
);
if
(
*
isSigned
)
{
*
value
=
(
z
[
0
]
==
'-'
)
?
-
val
:
val
;
}
else
{
*
(
uint64_t
*
)
value
=
val
;
}
return
0
;
return
0
;
}
}
void
taosVariantCreate
(
SVariant
*
pVar
,
const
char
*
z
,
int32_t
n
,
int32_t
type
)
{
int32_t
toUInteger
(
const
char
*
z
,
int32_t
n
,
int32_t
base
,
uint64_t
*
value
)
{
int32_t
ret
=
0
;
errno
=
0
;
memset
(
pVar
,
0
,
sizeof
(
SVariant
));
char
*
endPtr
=
NULL
;
switch
(
type
)
{
case
TSDB_DATA_TYPE_BOOL
:
{
if
(
strncasecmp
(
z
,
"true"
,
4
)
==
0
)
{
pVar
->
i
=
TSDB_TRUE
;
}
else
if
(
strncasecmp
(
z
,
"false"
,
5
)
==
0
)
{
pVar
->
i
=
TSDB_FALSE
;
}
else
{
return
;
}
break
;
}
case
TSDB_DATA_TYPE_TINYINT
:
case
TSDB_DATA_TYPE_SMALLINT
:
case
TSDB_DATA_TYPE_BIGINT
:
case
TSDB_DATA_TYPE_INT
:
{
bool
sign
=
true
;
int32_t
base
=
10
;
if
(
type
==
TK_NK_HEX
)
{
base
=
16
;
}
else
if
(
type
==
TK_NK_OCT
)
{
base
=
8
;
}
else
if
(
type
==
TK_NK_BIN
)
{
base
=
2
;
}
ret
=
toInteger
(
z
,
n
,
base
,
&
pVar
->
i
,
&
sign
);
if
(
ret
!=
0
)
{
pVar
->
nType
=
-
1
;
// -1 means error type
return
;
}
pVar
->
nType
=
(
sign
)
?
TSDB_DATA_TYPE_BIGINT
:
TSDB_DATA_TYPE_UBIGINT
;
const
char
*
p
=
z
;
break
;
while
(
*
p
!=
0
&&
*
p
==
' '
)
p
++
;
}
if
(
*
p
!=
0
&&
*
p
==
'-'
)
{
case
TSDB_DATA_TYPE_DOUBLE
:
return
-
1
;
case
TSDB_DATA_TYPE_FLOAT
:
{
pVar
->
d
=
strtod
(
z
,
NULL
);
break
;
}
case
TSDB_DATA_TYPE_BINARY
:
{
pVar
->
pz
=
strndup
(
z
,
n
);
//pVar->nLen = strRmquote(pVar->pz, n);
break
;
}
case
TSDB_DATA_TYPE_TIMESTAMP
:
{
assert
(
0
);
pVar
->
i
=
taosGetTimestamp
(
TSDB_TIME_PRECISION_NANO
);
break
;
}
}
default:
{
// nType == 0 means the null value
*
value
=
strtoull
(
z
,
&
endPtr
,
base
);
type
=
TSDB_DATA_TYPE_NULL
;
if
(
errno
==
ERANGE
||
errno
==
EINVAL
||
endPtr
-
z
!=
n
)
{
}
errno
=
0
;
return
-
1
;
}
}
pVar
->
nType
=
type
;
return
0
;
}
}
/**
/**
...
@@ -483,7 +415,7 @@ static int32_t toNchar(SVariant *pVariant, char **pDest, int32_t *pDestSize) {
...
@@ -483,7 +415,7 @@ static int32_t toNchar(SVariant *pVariant, char **pDest, int32_t *pDestSize) {
}
else
{
}
else
{
int32_t
output
=
0
;
int32_t
output
=
0
;
bool
ret
=
taosMbsToUcs4
(
pDst
,
nLen
,
(
TdUcs4
*
)
*
pDest
,
(
nLen
+
1
)
*
TSDB_NCHAR_SIZE
,
&
output
);
bool
ret
=
taosMbsToUcs4
(
pDst
,
nLen
,
(
TdUcs4
*
)
*
pDest
,
(
nLen
+
1
)
*
TSDB_NCHAR_SIZE
,
&
output
);
if
(
!
ret
)
{
if
(
!
ret
)
{
return
-
1
;
return
-
1
;
}
}
...
@@ -518,9 +450,9 @@ static FORCE_INLINE int32_t convertToInteger(SVariant *pVariant, int64_t *result
...
@@ -518,9 +450,9 @@ static FORCE_INLINE int32_t convertToInteger(SVariant *pVariant, int64_t *result
}
else
if
(
IS_UNSIGNED_NUMERIC_TYPE
(
pVariant
->
nType
))
{
}
else
if
(
IS_UNSIGNED_NUMERIC_TYPE
(
pVariant
->
nType
))
{
*
result
=
pVariant
->
u
;
*
result
=
pVariant
->
u
;
}
else
if
(
IS_FLOAT_TYPE
(
pVariant
->
nType
))
{
}
else
if
(
IS_FLOAT_TYPE
(
pVariant
->
nType
))
{
*
result
=
(
int64_t
)
pVariant
->
d
;
*
result
=
(
int64_t
)
pVariant
->
d
;
}
else
{
}
else
{
//TODO: handling var types
//
TODO: handling var types
}
}
#if 0
#if 0
errno = 0;
errno = 0;
...
@@ -909,7 +841,7 @@ int32_t tVariantDumpEx(SVariant *pVariant, char *payload, int16_t type, bool inc
...
@@ -909,7 +841,7 @@ int32_t tVariantDumpEx(SVariant *pVariant, char *payload, int16_t type, bool inc
return
-
1
;
return
-
1
;
}
}
}
else
{
}
else
{
tasoUcs4Copy
((
TdUcs4
*
)
payload
,
pVariant
->
ucs4
,
pVariant
->
nLen
);
tasoUcs4Copy
((
TdUcs4
*
)
payload
,
pVariant
->
ucs4
,
pVariant
->
nLen
);
}
}
}
}
}
else
{
}
else
{
...
@@ -1026,7 +958,7 @@ int32_t taosVariantTypeSetType(SVariant *pVariant, char type) {
...
@@ -1026,7 +958,7 @@ int32_t taosVariantTypeSetType(SVariant *pVariant, char type) {
return
0
;
return
0
;
}
}
char
*
taosVariantGet
(
SVariant
*
pVar
,
int32_t
type
)
{
char
*
taosVariantGet
(
SVariant
*
pVar
,
int32_t
type
)
{
switch
(
type
)
{
switch
(
type
)
{
case
TSDB_DATA_TYPE_BOOL
:
case
TSDB_DATA_TYPE_BOOL
:
case
TSDB_DATA_TYPE_TINYINT
:
case
TSDB_DATA_TYPE_TINYINT
:
...
...
source/common/test/commonTests.cpp
浏览文件 @
ed1a71f1
...
@@ -8,12 +8,11 @@
...
@@ -8,12 +8,11 @@
#pragma GCC diagnostic ignored "-Wsign-compare"
#pragma GCC diagnostic ignored "-Wsign-compare"
#include "os.h"
#include "os.h"
#include "taos.h"
#include "tcommon.h"
#include "tcommon.h"
#include "tdatablock.h"
#include "tdatablock.h"
#include "tcommon.h"
#include "taos.h"
#include "tvariant.h"
#include "tdef.h"
#include "tdef.h"
#include "tvariant.h"
namespace
{
namespace
{
//
//
...
@@ -29,72 +28,62 @@ TEST(testCase, toInteger_test) {
...
@@ -29,72 +28,62 @@ TEST(testCase, toInteger_test) {
uint32_t
type
=
0
;
uint32_t
type
=
0
;
int64_t
val
=
0
;
int64_t
val
=
0
;
bool
sign
=
true
;
int32_t
ret
=
toInteger
(
s
,
strlen
(
s
),
10
,
&
val
,
&
sign
);
int32_t
ret
=
toInteger
(
s
,
strlen
(
s
),
10
,
&
val
);
ASSERT_EQ
(
ret
,
0
);
ASSERT_EQ
(
ret
,
0
);
ASSERT_EQ
(
val
,
123
);
ASSERT_EQ
(
val
,
123
);
ASSERT_EQ
(
sign
,
true
);
s
=
"9223372036854775807"
;
s
=
"9223372036854775807"
;
ret
=
toInteger
(
s
,
strlen
(
s
),
10
,
&
val
,
&
sign
);
ret
=
toInteger
(
s
,
strlen
(
s
),
10
,
&
val
);
ASSERT_EQ
(
ret
,
0
);
ASSERT_EQ
(
ret
,
0
);
ASSERT_EQ
(
val
,
9223372036854775807
);
ASSERT_EQ
(
val
,
9223372036854775807
);
ASSERT_EQ
(
sign
,
true
);
s
=
"9323372036854775807"
;
s
=
"9323372036854775807"
;
ret
=
toInteger
(
s
,
strlen
(
s
),
10
,
&
val
,
&
sign
);
ret
=
toInteger
(
s
,
strlen
(
s
),
10
,
&
val
);
ASSERT_EQ
(
ret
,
0
);
ASSERT_EQ
(
ret
,
0
);
ASSERT_EQ
(
val
,
9323372036854775807u
);
ASSERT_EQ
(
val
,
9323372036854775807u
);
ASSERT_EQ
(
sign
,
false
);
s
=
"-9323372036854775807"
;
s
=
"-9323372036854775807"
;
ret
=
toInteger
(
s
,
strlen
(
s
),
10
,
&
val
,
&
sign
);
ret
=
toInteger
(
s
,
strlen
(
s
),
10
,
&
val
);
ASSERT_EQ
(
ret
,
-
1
);
ASSERT_EQ
(
ret
,
-
1
);
s
=
"-1"
;
s
=
"-1"
;
ret
=
toInteger
(
s
,
strlen
(
s
),
10
,
&
val
,
&
sign
);
ret
=
toInteger
(
s
,
strlen
(
s
),
10
,
&
val
);
ASSERT_EQ
(
ret
,
0
);
ASSERT_EQ
(
ret
,
0
);
ASSERT_EQ
(
val
,
-
1
);
ASSERT_EQ
(
val
,
-
1
);
ASSERT_EQ
(
sign
,
true
);
s
=
"-9223372036854775807"
;
s
=
"-9223372036854775807"
;
ret
=
toInteger
(
s
,
strlen
(
s
),
10
,
&
val
,
&
sign
);
ret
=
toInteger
(
s
,
strlen
(
s
),
10
,
&
val
);
ASSERT_EQ
(
ret
,
0
);
ASSERT_EQ
(
ret
,
0
);
ASSERT_EQ
(
val
,
-
9223372036854775807
);
ASSERT_EQ
(
val
,
-
9223372036854775807
);
ASSERT_EQ
(
sign
,
true
);
s
=
"1000u"
;
s
=
"1000u"
;
ret
=
toInteger
(
s
,
strlen
(
s
),
10
,
&
val
,
&
sign
);
ret
=
toInteger
(
s
,
strlen
(
s
),
10
,
&
val
);
ASSERT_EQ
(
ret
,
-
1
);
ASSERT_EQ
(
ret
,
-
1
);
s
=
"0x10"
;
s
=
"0x10"
;
ret
=
toInteger
(
s
,
strlen
(
s
),
16
,
&
val
,
&
sign
);
ret
=
toInteger
(
s
,
strlen
(
s
),
16
,
&
val
);
ASSERT_EQ
(
ret
,
0
);
ASSERT_EQ
(
ret
,
0
);
ASSERT_EQ
(
val
,
16
);
ASSERT_EQ
(
val
,
16
);
ASSERT_EQ
(
sign
,
true
);
s
=
"110"
;
s
=
"110"
;
ret
=
toInteger
(
s
,
strlen
(
s
),
2
,
&
val
,
&
sign
);
ret
=
toInteger
(
s
,
strlen
(
s
),
2
,
&
val
);
ASSERT_EQ
(
ret
,
0
);
ASSERT_EQ
(
ret
,
0
);
ASSERT_EQ
(
val
,
6
);
ASSERT_EQ
(
val
,
6
);
ASSERT_EQ
(
sign
,
true
);
s
=
"110"
;
s
=
"110"
;
ret
=
toInteger
(
s
,
strlen
(
s
),
8
,
&
val
,
&
sign
);
ret
=
toInteger
(
s
,
strlen
(
s
),
8
,
&
val
);
ASSERT_EQ
(
ret
,
0
);
ASSERT_EQ
(
ret
,
0
);
ASSERT_EQ
(
val
,
72
);
ASSERT_EQ
(
val
,
72
);
ASSERT_EQ
(
sign
,
true
);
//18446744073709551615 UINT64_MAX
//
18446744073709551615 UINT64_MAX
s
=
"18446744073709551615"
;
s
=
"18446744073709551615"
;
ret
=
toInteger
(
s
,
strlen
(
s
),
10
,
&
val
,
&
sign
);
ret
=
toInteger
(
s
,
strlen
(
s
),
10
,
&
val
);
ASSERT_EQ
(
ret
,
0
);
ASSERT_EQ
(
ret
,
0
);
ASSERT_EQ
(
val
,
18446744073709551615u
);
ASSERT_EQ
(
val
,
18446744073709551615u
);
ASSERT_EQ
(
sign
,
false
);
s
=
"18446744073709551616"
;
s
=
"18446744073709551616"
;
ret
=
toInteger
(
s
,
strlen
(
s
),
10
,
&
val
,
&
sign
);
ret
=
toInteger
(
s
,
strlen
(
s
),
10
,
&
val
);
ASSERT_EQ
(
ret
,
-
1
);
ASSERT_EQ
(
ret
,
-
1
);
}
}
...
@@ -108,8 +97,8 @@ TEST(testCase, Datablock_test) {
...
@@ -108,8 +97,8 @@ TEST(testCase, Datablock_test) {
infoData
.
info
.
type
=
TSDB_DATA_TYPE_INT
;
infoData
.
info
.
type
=
TSDB_DATA_TYPE_INT
;
infoData
.
info
.
colId
=
1
;
infoData
.
info
.
colId
=
1
;
infoData
.
pData
=
(
char
*
)
taosMemoryCalloc
(
40
,
infoData
.
info
.
bytes
);
infoData
.
pData
=
(
char
*
)
taosMemoryCalloc
(
40
,
infoData
.
info
.
bytes
);
infoData
.
nullbitmap
=
(
char
*
)
taosMemoryCalloc
(
1
,
sizeof
(
char
)
*
(
40
/
8
));
infoData
.
nullbitmap
=
(
char
*
)
taosMemoryCalloc
(
1
,
sizeof
(
char
)
*
(
40
/
8
));
taosArrayPush
(
b
->
pDataBlock
,
&
infoData
);
taosArrayPush
(
b
->
pDataBlock
,
&
infoData
);
SColumnInfoData
infoData1
=
{
0
};
SColumnInfoData
infoData1
=
{
0
};
...
@@ -117,36 +106,36 @@ TEST(testCase, Datablock_test) {
...
@@ -117,36 +106,36 @@ TEST(testCase, Datablock_test) {
infoData1
.
info
.
type
=
TSDB_DATA_TYPE_BINARY
;
infoData1
.
info
.
type
=
TSDB_DATA_TYPE_BINARY
;
infoData1
.
info
.
colId
=
2
;
infoData1
.
info
.
colId
=
2
;
infoData1
.
varmeta
.
offset
=
(
int32_t
*
)
taosMemoryCalloc
(
40
,
sizeof
(
uint32_t
));
infoData1
.
varmeta
.
offset
=
(
int32_t
*
)
taosMemoryCalloc
(
40
,
sizeof
(
uint32_t
));
taosArrayPush
(
b
->
pDataBlock
,
&
infoData1
);
taosArrayPush
(
b
->
pDataBlock
,
&
infoData1
);
char
*
str
=
"the value of: %d"
;
char
*
str
=
"the value of: %d"
;
char
buf
[
128
]
=
{
0
};
char
buf
[
128
]
=
{
0
};
char
varbuf
[
128
]
=
{
0
};
char
varbuf
[
128
]
=
{
0
};
for
(
int32_t
i
=
0
;
i
<
40
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
40
;
++
i
)
{
SColumnInfoData
*
p0
=
(
SColumnInfoData
*
)
taosArrayGet
(
b
->
pDataBlock
,
0
);
SColumnInfoData
*
p0
=
(
SColumnInfoData
*
)
taosArrayGet
(
b
->
pDataBlock
,
0
);
SColumnInfoData
*
p1
=
(
SColumnInfoData
*
)
taosArrayGet
(
b
->
pDataBlock
,
1
);
SColumnInfoData
*
p1
=
(
SColumnInfoData
*
)
taosArrayGet
(
b
->
pDataBlock
,
1
);
if
(
i
&
0x01
)
{
if
(
i
&
0x01
)
{
int32_t
len
=
sprintf
(
buf
,
str
,
i
);
int32_t
len
=
sprintf
(
buf
,
str
,
i
);
STR_TO_VARSTR
(
varbuf
,
buf
)
STR_TO_VARSTR
(
varbuf
,
buf
)
colDataAppend
(
p0
,
i
,
(
const
char
*
)
&
i
,
false
);
colDataAppend
(
p0
,
i
,
(
const
char
*
)
&
i
,
false
);
colDataAppend
(
p1
,
i
,
(
const
char
*
)
varbuf
,
false
);
colDataAppend
(
p1
,
i
,
(
const
char
*
)
varbuf
,
false
);
memset
(
varbuf
,
0
,
sizeof
(
varbuf
));
memset
(
varbuf
,
0
,
sizeof
(
varbuf
));
memset
(
buf
,
0
,
sizeof
(
buf
));
memset
(
buf
,
0
,
sizeof
(
buf
));
}
else
{
}
else
{
colDataAppend
(
p0
,
i
,
(
const
char
*
)
&
i
,
true
);
colDataAppend
(
p0
,
i
,
(
const
char
*
)
&
i
,
true
);
colDataAppend
(
p1
,
i
,
(
const
char
*
)
varbuf
,
true
);
colDataAppend
(
p1
,
i
,
(
const
char
*
)
varbuf
,
true
);
}
}
b
->
info
.
rows
++
;
b
->
info
.
rows
++
;
}
}
SColumnInfoData
*
p0
=
(
SColumnInfoData
*
)
taosArrayGet
(
b
->
pDataBlock
,
0
);
SColumnInfoData
*
p0
=
(
SColumnInfoData
*
)
taosArrayGet
(
b
->
pDataBlock
,
0
);
SColumnInfoData
*
p1
=
(
SColumnInfoData
*
)
taosArrayGet
(
b
->
pDataBlock
,
1
);
SColumnInfoData
*
p1
=
(
SColumnInfoData
*
)
taosArrayGet
(
b
->
pDataBlock
,
1
);
for
(
int32_t
i
=
0
;
i
<
40
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
40
;
++
i
)
{
if
(
i
&
0x01
)
{
if
(
i
&
0x01
)
{
ASSERT_EQ
(
colDataIsNull_f
(
p0
->
nullbitmap
,
i
),
false
);
ASSERT_EQ
(
colDataIsNull_f
(
p0
->
nullbitmap
,
i
),
false
);
ASSERT_EQ
(
colDataIsNull
(
p1
,
b
->
info
.
rows
,
i
,
nullptr
),
false
);
ASSERT_EQ
(
colDataIsNull
(
p1
,
b
->
info
.
rows
,
i
,
nullptr
),
false
);
...
@@ -158,7 +147,7 @@ TEST(testCase, Datablock_test) {
...
@@ -158,7 +147,7 @@ TEST(testCase, Datablock_test) {
}
}
}
}
printf
(
"binary column length:%d
\n
"
,
*
(
int32_t
*
)
p1
->
pData
);
printf
(
"binary column length:%d
\n
"
,
*
(
int32_t
*
)
p1
->
pData
);
ASSERT_EQ
(
blockDataGetNumOfCols
(
b
),
2
);
ASSERT_EQ
(
blockDataGetNumOfCols
(
b
),
2
);
ASSERT_EQ
(
blockDataGetNumOfRows
(
b
),
40
);
ASSERT_EQ
(
blockDataGetNumOfRows
(
b
),
40
);
...
@@ -167,7 +156,7 @@ TEST(testCase, Datablock_test) {
...
@@ -167,7 +156,7 @@ TEST(testCase, Datablock_test) {
printf
(
"the second row of binary:%s, length:%d
\n
"
,
(
char
*
)
varDataVal
(
pData
),
varDataLen
(
pData
));
printf
(
"the second row of binary:%s, length:%d
\n
"
,
(
char
*
)
varDataVal
(
pData
),
varDataLen
(
pData
));
SArray
*
pOrderInfo
=
taosArrayInit
(
3
,
sizeof
(
SBlockOrderInfo
));
SArray
*
pOrderInfo
=
taosArrayInit
(
3
,
sizeof
(
SBlockOrderInfo
));
SBlockOrderInfo
order
=
{
true
,
TSDB_ORDER_ASC
,
0
,
NULL
};
SBlockOrderInfo
order
=
{
true
,
TSDB_ORDER_ASC
,
0
,
NULL
};
taosArrayPush
(
pOrderInfo
,
&
order
);
taosArrayPush
(
pOrderInfo
,
&
order
);
blockDataSort
(
b
,
pOrderInfo
);
blockDataSort
(
b
,
pOrderInfo
);
...
@@ -244,8 +233,8 @@ TEST(testCase, var_dataBlock_split_test) {
...
@@ -244,8 +233,8 @@ TEST(testCase, var_dataBlock_split_test) {
infoData
.
info
.
type
=
TSDB_DATA_TYPE_INT
;
infoData
.
info
.
type
=
TSDB_DATA_TYPE_INT
;
infoData
.
info
.
colId
=
1
;
infoData
.
info
.
colId
=
1
;
infoData
.
pData
=
(
char
*
)
taosMemoryCalloc
(
numOfRows
,
infoData
.
info
.
bytes
);
infoData
.
pData
=
(
char
*
)
taosMemoryCalloc
(
numOfRows
,
infoData
.
info
.
bytes
);
infoData
.
nullbitmap
=
(
char
*
)
taosMemoryCalloc
(
1
,
sizeof
(
char
)
*
(
numOfRows
/
8
));
infoData
.
nullbitmap
=
(
char
*
)
taosMemoryCalloc
(
1
,
sizeof
(
char
)
*
(
numOfRows
/
8
));
taosArrayPush
(
b
->
pDataBlock
,
&
infoData
);
taosArrayPush
(
b
->
pDataBlock
,
&
infoData
);
SColumnInfoData
infoData1
=
{
0
};
SColumnInfoData
infoData1
=
{
0
};
...
@@ -253,13 +242,13 @@ TEST(testCase, var_dataBlock_split_test) {
...
@@ -253,13 +242,13 @@ TEST(testCase, var_dataBlock_split_test) {
infoData1
.
info
.
type
=
TSDB_DATA_TYPE_BINARY
;
infoData1
.
info
.
type
=
TSDB_DATA_TYPE_BINARY
;
infoData1
.
info
.
colId
=
2
;
infoData1
.
info
.
colId
=
2
;
infoData1
.
varmeta
.
offset
=
(
int32_t
*
)
taosMemoryCalloc
(
numOfRows
,
sizeof
(
uint32_t
));
infoData1
.
varmeta
.
offset
=
(
int32_t
*
)
taosMemoryCalloc
(
numOfRows
,
sizeof
(
uint32_t
));
taosArrayPush
(
b
->
pDataBlock
,
&
infoData1
);
taosArrayPush
(
b
->
pDataBlock
,
&
infoData1
);
char
buf
[
41
]
=
{
0
};
char
buf
[
41
]
=
{
0
};
char
buf1
[
100
]
=
{
0
};
char
buf1
[
100
]
=
{
0
};
for
(
int32_t
i
=
0
;
i
<
numOfRows
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfRows
;
++
i
)
{
SColumnInfoData
*
p0
=
(
SColumnInfoData
*
)
taosArrayGet
(
b
->
pDataBlock
,
0
);
SColumnInfoData
*
p0
=
(
SColumnInfoData
*
)
taosArrayGet
(
b
->
pDataBlock
,
0
);
SColumnInfoData
*
p1
=
(
SColumnInfoData
*
)
taosArrayGet
(
b
->
pDataBlock
,
1
);
SColumnInfoData
*
p1
=
(
SColumnInfoData
*
)
taosArrayGet
(
b
->
pDataBlock
,
1
);
...
@@ -278,10 +267,10 @@ TEST(testCase, var_dataBlock_split_test) {
...
@@ -278,10 +267,10 @@ TEST(testCase, var_dataBlock_split_test) {
int32_t
pageSize
=
64
*
1024
;
int32_t
pageSize
=
64
*
1024
;
int32_t
startIndex
=
0
;
int32_t
startIndex
=
0
;
int32_t
stopIndex
=
0
;
int32_t
stopIndex
=
0
;
int32_t
count
=
1
;
int32_t
count
=
1
;
while
(
1
)
{
while
(
1
)
{
blockDataSplitRows
(
b
,
true
,
startIndex
,
&
stopIndex
,
pageSize
);
blockDataSplitRows
(
b
,
true
,
startIndex
,
&
stopIndex
,
pageSize
);
printf
(
"the %d split, from: %d to %d
\n
"
,
count
++
,
startIndex
,
stopIndex
);
printf
(
"the %d split, from: %d to %d
\n
"
,
count
++
,
startIndex
,
stopIndex
);
...
...
source/dnode/mnode/impl/src/mndProfile.c
浏览文件 @
ed1a71f1
...
@@ -20,6 +20,7 @@
...
@@ -20,6 +20,7 @@
#include "mndShow.h"
#include "mndShow.h"
#include "mndStb.h"
#include "mndStb.h"
#include "mndUser.h"
#include "mndUser.h"
#include "mndDnode.h"
#include "tglobal.h"
#include "tglobal.h"
#include "version.h"
#include "version.h"
...
@@ -227,6 +228,7 @@ static int32_t mndProcessConnectReq(SNodeMsg *pReq) {
...
@@ -227,6 +228,7 @@ static int32_t mndProcessConnectReq(SNodeMsg *pReq) {
connectRsp
.
clusterId
=
pMnode
->
clusterId
;
connectRsp
.
clusterId
=
pMnode
->
clusterId
;
connectRsp
.
connId
=
pConn
->
id
;
connectRsp
.
connId
=
pConn
->
id
;
connectRsp
.
connType
=
connReq
.
connType
;
connectRsp
.
connType
=
connReq
.
connType
;
connectRsp
.
dnodeNum
=
mndGetDnodeSize
(
pMnode
);
snprintf
(
connectRsp
.
sVersion
,
sizeof
(
connectRsp
.
sVersion
),
"ver:%s
\n
build:%s
\n
gitinfo:%s"
,
version
,
buildinfo
,
snprintf
(
connectRsp
.
sVersion
,
sizeof
(
connectRsp
.
sVersion
),
"ver:%s
\n
build:%s
\n
gitinfo:%s"
,
version
,
buildinfo
,
gitinfo
);
gitinfo
);
...
...
source/dnode/vnode/src/inc/meta.h
浏览文件 @
ed1a71f1
...
@@ -37,6 +37,9 @@ typedef struct SMSmaCursor SMSmaCursor;
...
@@ -37,6 +37,9 @@ typedef struct SMSmaCursor SMSmaCursor;
// clang-format on
// clang-format on
// metaOpen ==================
// metaOpen ==================
int32_t
metaRLock
(
SMeta
*
pMeta
);
int32_t
metaWLock
(
SMeta
*
pMeta
);
int32_t
metaULock
(
SMeta
*
pMeta
);
// metaEntry ==================
// metaEntry ==================
int
metaEncodeEntry
(
SEncoder
*
pCoder
,
const
SMetaEntry
*
pME
);
int
metaEncodeEntry
(
SEncoder
*
pCoder
,
const
SMetaEntry
*
pME
);
...
@@ -57,6 +60,8 @@ int metaRemoveTableFromIdx(SMeta* pMeta, tb_uid_t uid);
...
@@ -57,6 +60,8 @@ int metaRemoveTableFromIdx(SMeta* pMeta, tb_uid_t uid);
static
FORCE_INLINE
tb_uid_t
metaGenerateUid
(
SMeta
*
pMeta
)
{
return
tGenIdPI64
();
}
static
FORCE_INLINE
tb_uid_t
metaGenerateUid
(
SMeta
*
pMeta
)
{
return
tGenIdPI64
();
}
struct
SMeta
{
struct
SMeta
{
TdThreadRwlock
lock
;
char
*
path
;
char
*
path
;
SVnode
*
pVnode
;
SVnode
*
pVnode
;
TENV
*
pEnv
;
TENV
*
pEnv
;
...
...
source/dnode/vnode/src/inc/vnodeInt.h
浏览文件 @
ed1a71f1
...
@@ -102,7 +102,7 @@ int32_t tsdbUpdateSmaWindow(STsdb* pTsdb, SSubmitReq* pMsg, int64_t version
...
@@ -102,7 +102,7 @@ int32_t tsdbUpdateSmaWindow(STsdb* pTsdb, SSubmitReq* pMsg, int64_t version
int32_t
tsdbCreateTSma
(
STsdb
*
pTsdb
,
char
*
pMsg
);
int32_t
tsdbCreateTSma
(
STsdb
*
pTsdb
,
char
*
pMsg
);
int32_t
tsdbInsertTSmaData
(
STsdb
*
pTsdb
,
int64_t
indexUid
,
const
char
*
msg
);
int32_t
tsdbInsertTSmaData
(
STsdb
*
pTsdb
,
int64_t
indexUid
,
const
char
*
msg
);
int
tsdbInsertData
(
STsdb
*
pTsdb
,
int64_t
version
,
SSubmitReq
*
pMsg
,
SSubmitRsp
*
pRsp
);
int
tsdbInsertData
(
STsdb
*
pTsdb
,
int64_t
version
,
SSubmitReq
*
pMsg
,
SSubmitRsp
*
pRsp
);
int
tsdbInsertTableData
(
STsdb
*
pTsdb
,
SSubmitMsgIter
*
pMsgIter
,
SSubmitBlk
*
pBlock
,
int32_t
*
pAffectedRows
);
int
tsdbInsertTableData
(
STsdb
*
pTsdb
,
SSubmitMsgIter
*
pMsgIter
,
SSubmitBlk
*
pBlock
,
SSubmitBlkRsp
*
pRsp
);
tsdbReaderT
*
tsdbQueryTables
(
SVnode
*
pVnode
,
SQueryTableDataCond
*
pCond
,
STableGroupInfo
*
groupList
,
uint64_t
qId
,
tsdbReaderT
*
tsdbQueryTables
(
SVnode
*
pVnode
,
SQueryTableDataCond
*
pCond
,
STableGroupInfo
*
groupList
,
uint64_t
qId
,
uint64_t
taskId
);
uint64_t
taskId
);
tsdbReaderT
tsdbQueryCacheLastT
(
STsdb
*
tsdb
,
SQueryTableDataCond
*
pCond
,
STableGroupInfo
*
groupList
,
uint64_t
qId
,
tsdbReaderT
tsdbQueryCacheLastT
(
STsdb
*
tsdb
,
SQueryTableDataCond
*
pCond
,
STableGroupInfo
*
groupList
,
uint64_t
qId
,
...
...
source/dnode/vnode/src/meta/metaOpen.c
浏览文件 @
ed1a71f1
...
@@ -22,6 +22,9 @@ static int tagIdxKeyCmpr(const void *pKey1, int kLen1, const void *pKey2, int kL
...
@@ -22,6 +22,9 @@ static int tagIdxKeyCmpr(const void *pKey1, int kLen1, const void *pKey2, int kL
static
int
ttlIdxKeyCmpr
(
const
void
*
pKey1
,
int
kLen1
,
const
void
*
pKey2
,
int
kLen2
);
static
int
ttlIdxKeyCmpr
(
const
void
*
pKey1
,
int
kLen1
,
const
void
*
pKey2
,
int
kLen2
);
static
int
uidIdxKeyCmpr
(
const
void
*
pKey1
,
int
kLen1
,
const
void
*
pKey2
,
int
kLen2
);
static
int
uidIdxKeyCmpr
(
const
void
*
pKey1
,
int
kLen1
,
const
void
*
pKey2
,
int
kLen2
);
static
int32_t
metaInitLock
(
SMeta
*
pMeta
)
{
return
taosThreadRwlockInit
(
&
pMeta
->
lock
,
NULL
);
}
static
int32_t
metaDestroyLock
(
SMeta
*
pMeta
)
{
return
taosThreadRwlockDestroy
(
&
pMeta
->
lock
);
}
int
metaOpen
(
SVnode
*
pVnode
,
SMeta
**
ppMeta
)
{
int
metaOpen
(
SVnode
*
pVnode
,
SMeta
**
ppMeta
)
{
SMeta
*
pMeta
=
NULL
;
SMeta
*
pMeta
=
NULL
;
int
ret
;
int
ret
;
...
@@ -36,6 +39,7 @@ int metaOpen(SVnode *pVnode, SMeta **ppMeta) {
...
@@ -36,6 +39,7 @@ int metaOpen(SVnode *pVnode, SMeta **ppMeta) {
return
-
1
;
return
-
1
;
}
}
metaInitLock
(
pMeta
);
pMeta
->
path
=
(
char
*
)
&
pMeta
[
1
];
pMeta
->
path
=
(
char
*
)
&
pMeta
[
1
];
sprintf
(
pMeta
->
path
,
"%s%s%s%s%s"
,
tfsGetPrimaryPath
(
pVnode
->
pTfs
),
TD_DIRSEP
,
pVnode
->
path
,
TD_DIRSEP
,
sprintf
(
pMeta
->
path
,
"%s%s%s%s%s"
,
tfsGetPrimaryPath
(
pVnode
->
pTfs
),
TD_DIRSEP
,
pVnode
->
path
,
TD_DIRSEP
,
VNODE_META_DIR
);
VNODE_META_DIR
);
...
@@ -121,6 +125,7 @@ _err:
...
@@ -121,6 +125,7 @@ _err:
if
(
pMeta
->
pSkmDb
)
tdbDbClose
(
pMeta
->
pSkmDb
);
if
(
pMeta
->
pSkmDb
)
tdbDbClose
(
pMeta
->
pSkmDb
);
if
(
pMeta
->
pTbDb
)
tdbDbClose
(
pMeta
->
pTbDb
);
if
(
pMeta
->
pTbDb
)
tdbDbClose
(
pMeta
->
pTbDb
);
if
(
pMeta
->
pEnv
)
tdbEnvClose
(
pMeta
->
pEnv
);
if
(
pMeta
->
pEnv
)
tdbEnvClose
(
pMeta
->
pEnv
);
metaDestroyLock
(
pMeta
);
taosMemoryFree
(
pMeta
);
taosMemoryFree
(
pMeta
);
return
-
1
;
return
-
1
;
}
}
...
@@ -136,12 +141,19 @@ int metaClose(SMeta *pMeta) {
...
@@ -136,12 +141,19 @@ int metaClose(SMeta *pMeta) {
if
(
pMeta
->
pSkmDb
)
tdbDbClose
(
pMeta
->
pSkmDb
);
if
(
pMeta
->
pSkmDb
)
tdbDbClose
(
pMeta
->
pSkmDb
);
if
(
pMeta
->
pTbDb
)
tdbDbClose
(
pMeta
->
pTbDb
);
if
(
pMeta
->
pTbDb
)
tdbDbClose
(
pMeta
->
pTbDb
);
if
(
pMeta
->
pEnv
)
tdbEnvClose
(
pMeta
->
pEnv
);
if
(
pMeta
->
pEnv
)
tdbEnvClose
(
pMeta
->
pEnv
);
metaDestroyLock
(
pMeta
);
taosMemoryFree
(
pMeta
);
taosMemoryFree
(
pMeta
);
}
}
return
0
;
return
0
;
}
}
int32_t
metaRLock
(
SMeta
*
pMeta
)
{
return
taosThreadRwlockRdlock
(
&
pMeta
->
lock
);
}
int32_t
metaWLock
(
SMeta
*
pMeta
)
{
return
taosThreadRwlockWrlock
(
&
pMeta
->
lock
);
}
int32_t
metaULock
(
SMeta
*
pMeta
)
{
return
taosThreadRwlockUnlock
(
&
pMeta
->
lock
);
}
static
int
tbDbKeyCmpr
(
const
void
*
pKey1
,
int
kLen1
,
const
void
*
pKey2
,
int
kLen2
)
{
static
int
tbDbKeyCmpr
(
const
void
*
pKey1
,
int
kLen1
,
const
void
*
pKey2
,
int
kLen2
)
{
STbDbKey
*
pTbDbKey1
=
(
STbDbKey
*
)
pKey1
;
STbDbKey
*
pTbDbKey1
=
(
STbDbKey
*
)
pKey1
;
STbDbKey
*
pTbDbKey2
=
(
STbDbKey
*
)
pKey2
;
STbDbKey
*
pTbDbKey2
=
(
STbDbKey
*
)
pKey2
;
...
...
source/dnode/vnode/src/meta/metaQuery.c
浏览文件 @
ed1a71f1
...
@@ -19,9 +19,13 @@ void metaReaderInit(SMetaReader *pReader, SMeta *pMeta, int32_t flags) {
...
@@ -19,9 +19,13 @@ void metaReaderInit(SMetaReader *pReader, SMeta *pMeta, int32_t flags) {
memset
(
pReader
,
0
,
sizeof
(
*
pReader
));
memset
(
pReader
,
0
,
sizeof
(
*
pReader
));
pReader
->
flags
=
flags
;
pReader
->
flags
=
flags
;
pReader
->
pMeta
=
pMeta
;
pReader
->
pMeta
=
pMeta
;
metaRLock
(
pMeta
);
}
}
void
metaReaderClear
(
SMetaReader
*
pReader
)
{
void
metaReaderClear
(
SMetaReader
*
pReader
)
{
if
(
pReader
->
pMeta
)
{
metaULock
(
pReader
->
pMeta
);
}
tDecoderClear
(
&
pReader
->
coder
);
tDecoderClear
(
&
pReader
->
coder
);
tdbFree
(
pReader
->
pBuf
);
tdbFree
(
pReader
->
pBuf
);
}
}
...
@@ -264,6 +268,8 @@ STSchema *metaGetTbTSchema(SMeta *pMeta, tb_uid_t uid, int32_t sver) {
...
@@ -264,6 +268,8 @@ STSchema *metaGetTbTSchema(SMeta *pMeta, tb_uid_t uid, int32_t sver) {
metaReaderClear
(
&
mr
);
metaReaderClear
(
&
mr
);
pSW
=
metaGetTableSchema
(
pMeta
,
quid
,
sver
,
0
);
pSW
=
metaGetTableSchema
(
pMeta
,
quid
,
sver
,
0
);
if
(
!
pSW
)
return
NULL
;
tdInitTSchemaBuilder
(
&
sb
,
0
);
tdInitTSchemaBuilder
(
&
sb
,
0
);
for
(
int
i
=
0
;
i
<
pSW
->
nCols
;
i
++
)
{
for
(
int
i
=
0
;
i
<
pSW
->
nCols
;
i
++
)
{
pSchema
=
pSW
->
pSchema
+
i
;
pSchema
=
pSW
->
pSchema
+
i
;
...
...
source/dnode/vnode/src/meta/metaTable.c
浏览文件 @
ed1a71f1
...
@@ -439,29 +439,36 @@ _exit:
...
@@ -439,29 +439,36 @@ _exit:
}
}
static
int
metaHandleEntry
(
SMeta
*
pMeta
,
const
SMetaEntry
*
pME
)
{
static
int
metaHandleEntry
(
SMeta
*
pMeta
,
const
SMetaEntry
*
pME
)
{
metaWLock
(
pMeta
);
// save to table.db
// save to table.db
if
(
metaSaveToTbDb
(
pMeta
,
pME
)
<
0
)
return
-
1
;
if
(
metaSaveToTbDb
(
pMeta
,
pME
)
<
0
)
goto
_err
;
// update uid.idx
// update uid.idx
if
(
metaUpdateUidIdx
(
pMeta
,
pME
)
<
0
)
return
-
1
;
if
(
metaUpdateUidIdx
(
pMeta
,
pME
)
<
0
)
goto
_err
;
// update name.idx
// update name.idx
if
(
metaUpdateNameIdx
(
pMeta
,
pME
)
<
0
)
return
-
1
;
if
(
metaUpdateNameIdx
(
pMeta
,
pME
)
<
0
)
goto
_err
;
if
(
pME
->
type
==
TSDB_CHILD_TABLE
)
{
if
(
pME
->
type
==
TSDB_CHILD_TABLE
)
{
// update ctb.idx
// update ctb.idx
if
(
metaUpdateCtbIdx
(
pMeta
,
pME
)
<
0
)
return
-
1
;
if
(
metaUpdateCtbIdx
(
pMeta
,
pME
)
<
0
)
goto
_err
;
// update tag.idx
// update tag.idx
if
(
metaUpdateTagIdx
(
pMeta
,
pME
)
<
0
)
return
-
1
;
if
(
metaUpdateTagIdx
(
pMeta
,
pME
)
<
0
)
goto
_err
;
}
else
{
}
else
{
// update schema.db
// update schema.db
if
(
metaSaveToSkmDb
(
pMeta
,
pME
)
<
0
)
return
-
1
;
if
(
metaSaveToSkmDb
(
pMeta
,
pME
)
<
0
)
goto
_err
;
}
}
if
(
pME
->
type
!=
TSDB_SUPER_TABLE
)
{
if
(
pME
->
type
!=
TSDB_SUPER_TABLE
)
{
if
(
metaUpdateTtlIdx
(
pMeta
,
pME
)
<
0
)
return
-
1
;
if
(
metaUpdateTtlIdx
(
pMeta
,
pME
)
<
0
)
goto
_err
;
}
}
metaULock
(
pMeta
);
return
0
;
return
0
;
_err:
metaULock
(
pMeta
);
return
-
1
;
}
}
\ No newline at end of file
source/dnode/vnode/src/tsdb/tsdbCommit.c
浏览文件 @
ed1a71f1
...
@@ -382,6 +382,7 @@ static int tsdbCommitToFile(SCommitH *pCommith, SDFileSet *pSet, int fid) {
...
@@ -382,6 +382,7 @@ static int tsdbCommitToFile(SCommitH *pCommith, SDFileSet *pSet, int fid) {
}
else
{
}
else
{
break
;
break
;
}
}
if
(
pIter
&&
pIter
->
pTable
&&
(
!
pIdx
||
(
pIter
->
pTable
->
uid
<=
pIdx
->
uid
)))
{
if
(
pIter
&&
pIter
->
pTable
&&
(
!
pIdx
||
(
pIter
->
pTable
->
uid
<=
pIdx
->
uid
)))
{
if
(
tsdbCommitToTable
(
pCommith
,
mIter
)
<
0
)
{
if
(
tsdbCommitToTable
(
pCommith
,
mIter
)
<
0
)
{
tsdbCloseCommitFile
(
pCommith
,
true
);
tsdbCloseCommitFile
(
pCommith
,
true
);
...
@@ -394,6 +395,9 @@ static int tsdbCommitToFile(SCommitH *pCommith, SDFileSet *pSet, int fid) {
...
@@ -394,6 +395,9 @@ static int tsdbCommitToFile(SCommitH *pCommith, SDFileSet *pSet, int fid) {
++
fIter
;
++
fIter
;
}
}
++
mIter
;
++
mIter
;
}
else
if
(
pIter
&&
!
pIter
->
pTable
)
{
// When table already dropped during commit, pIter is not NULL but pIter->pTable is NULL.
++
mIter
;
// skip the table and do nothing
}
else
if
(
pIdx
)
{
}
else
if
(
pIdx
)
{
if
(
tsdbMoveBlkIdx
(
pCommith
,
pIdx
)
<
0
)
{
if
(
tsdbMoveBlkIdx
(
pCommith
,
pIdx
)
<
0
)
{
tsdbCloseCommitFile
(
pCommith
,
true
);
tsdbCloseCommitFile
(
pCommith
,
true
);
...
@@ -439,6 +443,7 @@ static int tsdbCreateCommitIters(SCommitH *pCommith) {
...
@@ -439,6 +443,7 @@ static int tsdbCreateCommitIters(SCommitH *pCommith) {
SCommitIter
*
pCommitIter
;
SCommitIter
*
pCommitIter
;
SSkipListNode
*
pNode
;
SSkipListNode
*
pNode
;
STbData
*
pTbData
;
STbData
*
pTbData
;
STSchema
*
pTSchema
=
NULL
;
pCommith
->
niters
=
SL_SIZE
(
pMem
->
pSlIdx
);
pCommith
->
niters
=
SL_SIZE
(
pMem
->
pSlIdx
);
pCommith
->
iters
=
(
SCommitIter
*
)
taosMemoryCalloc
(
pCommith
->
niters
,
sizeof
(
SCommitIter
));
pCommith
->
iters
=
(
SCommitIter
*
)
taosMemoryCalloc
(
pCommith
->
niters
,
sizeof
(
SCommitIter
));
...
@@ -459,13 +464,17 @@ static int tsdbCreateCommitIters(SCommitH *pCommith) {
...
@@ -459,13 +464,17 @@ static int tsdbCreateCommitIters(SCommitH *pCommith) {
pTbData
=
(
STbData
*
)
pNode
->
pData
;
pTbData
=
(
STbData
*
)
pNode
->
pData
;
pCommitIter
=
pCommith
->
iters
+
i
;
pCommitIter
=
pCommith
->
iters
+
i
;
pTSchema
=
metaGetTbTSchema
(
REPO_META
(
pRepo
),
pTbData
->
uid
,
0
);
// TODO: schema version
if
(
pTSchema
)
{
pCommitIter
->
pIter
=
tSkipListCreateIter
(
pTbData
->
pData
);
pCommitIter
->
pIter
=
tSkipListCreateIter
(
pTbData
->
pData
);
tSkipListIterNext
(
pCommitIter
->
pIter
);
tSkipListIterNext
(
pCommitIter
->
pIter
);
pCommitIter
->
pTable
=
(
STable
*
)
taosMemoryMalloc
(
sizeof
(
STable
));
pCommitIter
->
pTable
=
(
STable
*
)
taosMemoryMalloc
(
sizeof
(
STable
));
pCommitIter
->
pTable
->
uid
=
pTbData
->
uid
;
pCommitIter
->
pTable
->
uid
=
pTbData
->
uid
;
pCommitIter
->
pTable
->
tid
=
pTbData
->
uid
;
pCommitIter
->
pTable
->
tid
=
pTbData
->
uid
;
pCommitIter
->
pTable
->
pSchema
=
metaGetTbTSchema
(
REPO_META
(
pRepo
),
pTbData
->
uid
,
0
);
pCommitIter
->
pTable
->
pSchema
=
pTSchema
;
// metaGetTbTSchema(REPO_META(pRepo), pTbData->uid, 0);
}
}
}
return
0
;
return
0
;
...
...
source/dnode/vnode/src/tsdb/tsdbMemTable.c
浏览文件 @
ed1a71f1
...
@@ -290,7 +290,7 @@ int tsdbLoadDataFromCache(STable *pTable, SSkipListIterator *pIter, TSKEY maxKey
...
@@ -290,7 +290,7 @@ int tsdbLoadDataFromCache(STable *pTable, SSkipListIterator *pIter, TSKEY maxKey
return
0
;
return
0
;
}
}
int
tsdbInsertTableData
(
STsdb
*
pTsdb
,
SSubmitMsgIter
*
pMsgIter
,
SSubmitBlk
*
pBlock
,
int32_t
*
pAffectedRows
)
{
int
tsdbInsertTableData
(
STsdb
*
pTsdb
,
SSubmitMsgIter
*
pMsgIter
,
SSubmitBlk
*
pBlock
,
SSubmitBlkRsp
*
pRsp
)
{
SSubmitBlkIter
blkIter
=
{
0
};
SSubmitBlkIter
blkIter
=
{
0
};
STsdbMemTable
*
pMemTable
=
pTsdb
->
mem
;
STsdbMemTable
*
pMemTable
=
pTsdb
->
mem
;
void
*
tptr
;
void
*
tptr
;
...
@@ -344,7 +344,8 @@ int tsdbInsertTableData(STsdb *pTsdb, SSubmitMsgIter *pMsgIter, SSubmitBlk *pBlo
...
@@ -344,7 +344,8 @@ int tsdbInsertTableData(STsdb *pTsdb, SSubmitMsgIter *pMsgIter, SSubmitBlk *pBlo
if
(
pMemTable
->
keyMin
>
keyMin
)
pMemTable
->
keyMin
=
keyMin
;
if
(
pMemTable
->
keyMin
>
keyMin
)
pMemTable
->
keyMin
=
keyMin
;
if
(
pMemTable
->
keyMax
<
keyMax
)
pMemTable
->
keyMax
=
keyMax
;
if
(
pMemTable
->
keyMax
<
keyMax
)
pMemTable
->
keyMax
=
keyMax
;
(
*
pAffectedRows
)
=
pMsgIter
->
numOfRows
;
pRsp
->
numOfRows
=
pMsgIter
->
numOfRows
;
pRsp
->
affectedRows
=
pMsgIter
->
numOfRows
;
return
0
;
return
0
;
}
}
...
...
source/dnode/vnode/src/tsdb/tsdbMemTable2.c
浏览文件 @
ed1a71f1
...
@@ -38,7 +38,7 @@ struct SMemTable {
...
@@ -38,7 +38,7 @@ struct SMemTable {
struct
SMemSkipListNode
{
struct
SMemSkipListNode
{
int8_t
level
;
int8_t
level
;
SMemSkipListNode
*
forwards
[
];
SMemSkipListNode
*
forwards
[
1
];
// Windows does not allow 0
};
};
struct
SMemSkipList
{
struct
SMemSkipList
{
...
@@ -46,7 +46,7 @@ struct SMemSkipList {
...
@@ -46,7 +46,7 @@ struct SMemSkipList {
int8_t
maxLevel
;
int8_t
maxLevel
;
int8_t
level
;
int8_t
level
;
int32_t
size
;
int32_t
size
;
SMemSkipListNode
pHead
[
];
SMemSkipListNode
pHead
[
1
];
// Windows does not allow 0
};
};
struct
SMemData
{
struct
SMemData
{
...
...
source/dnode/vnode/src/tsdb/tsdbRead.c
浏览文件 @
ed1a71f1
...
@@ -3870,6 +3870,7 @@ int32_t tsdbQuerySTableByTagCond(void* pMeta, uint64_t uid, TSKEY skey, const ch
...
@@ -3870,6 +3870,7 @@ int32_t tsdbQuerySTableByTagCond(void* pMeta, uint64_t uid, TSKEY skey, const ch
if
(
metaGetTableEntryByUid
(
&
mr
,
uid
)
<
0
)
{
if
(
metaGetTableEntryByUid
(
&
mr
,
uid
)
<
0
)
{
tsdbError
(
"%p failed to get stable, uid:%"
PRIu64
", TID:0x%"
PRIx64
" QID:0x%"
PRIx64
,
pMeta
,
uid
,
taskId
,
reqId
);
tsdbError
(
"%p failed to get stable, uid:%"
PRIu64
", TID:0x%"
PRIx64
" QID:0x%"
PRIx64
,
pMeta
,
uid
,
taskId
,
reqId
);
metaReaderClear
(
&
mr
);
terrno
=
TSDB_CODE_PAR_TABLE_NOT_EXIST
;
terrno
=
TSDB_CODE_PAR_TABLE_NOT_EXIST
;
goto
_error
;
goto
_error
;
}
else
{
}
else
{
...
@@ -3880,6 +3881,7 @@ int32_t tsdbQuerySTableByTagCond(void* pMeta, uint64_t uid, TSKEY skey, const ch
...
@@ -3880,6 +3881,7 @@ int32_t tsdbQuerySTableByTagCond(void* pMeta, uint64_t uid, TSKEY skey, const ch
tsdbError
(
"%p query normal tag not allowed, uid:%"
PRIu64
", TID:0x%"
PRIx64
" QID:0x%"
PRIx64
,
pMeta
,
uid
,
taskId
,
tsdbError
(
"%p query normal tag not allowed, uid:%"
PRIu64
", TID:0x%"
PRIx64
" QID:0x%"
PRIx64
,
pMeta
,
uid
,
taskId
,
reqId
);
reqId
);
terrno
=
TSDB_CODE_OPS_NOT_SUPPORT
;
// basically, this error is caused by invalid sql issued by client
terrno
=
TSDB_CODE_OPS_NOT_SUPPORT
;
// basically, this error is caused by invalid sql issued by client
metaReaderClear
(
&
mr
);
goto
_error
;
goto
_error
;
}
}
...
...
source/dnode/vnode/src/tsdb/tsdbWrite.c
浏览文件 @
ed1a71f1
...
@@ -36,9 +36,10 @@ int tsdbInsertData(STsdb *pTsdb, int64_t version, SSubmitReq *pMsg, SSubmitRsp *
...
@@ -36,9 +36,10 @@ int tsdbInsertData(STsdb *pTsdb, int64_t version, SSubmitReq *pMsg, SSubmitRsp *
// loop to insert
// loop to insert
tInitSubmitMsgIter
(
pMsg
,
&
msgIter
);
tInitSubmitMsgIter
(
pMsg
,
&
msgIter
);
while
(
true
)
{
while
(
true
)
{
SSubmitBlkRsp
r
=
{
0
};
tGetSubmitMsgNext
(
&
msgIter
,
&
pBlock
);
tGetSubmitMsgNext
(
&
msgIter
,
&
pBlock
);
if
(
pBlock
==
NULL
)
break
;
if
(
pBlock
==
NULL
)
break
;
if
(
tsdbInsertTableData
(
pTsdb
,
&
msgIter
,
pBlock
,
&
affectedrows
)
<
0
)
{
if
(
tsdbInsertTableData
(
pTsdb
,
&
msgIter
,
pBlock
,
&
r
)
<
0
)
{
return
-
1
;
return
-
1
;
}
}
...
@@ -46,8 +47,8 @@ int tsdbInsertData(STsdb *pTsdb, int64_t version, SSubmitReq *pMsg, SSubmitRsp *
...
@@ -46,8 +47,8 @@ int tsdbInsertData(STsdb *pTsdb, int64_t version, SSubmitReq *pMsg, SSubmitRsp *
}
}
if
(
pRsp
!=
NULL
)
{
if
(
pRsp
!=
NULL
)
{
pRsp
->
affectedRows
=
affectedrows
;
//
pRsp->affectedRows = affectedrows;
pRsp
->
numOfRows
=
numOfRows
;
//
pRsp->numOfRows = numOfRows;
}
}
return
0
;
return
0
;
...
...
source/dnode/vnode/src/vnd/vnodeQuery.c
浏览文件 @
ed1a71f1
...
@@ -119,7 +119,7 @@ _exit:
...
@@ -119,7 +119,7 @@ _exit:
taosMemoryFree
(
metaRsp
.
pSchemas
);
taosMemoryFree
(
metaRsp
.
pSchemas
);
metaReaderClear
(
&
mer2
);
metaReaderClear
(
&
mer2
);
metaReaderClear
(
&
mer1
);
metaReaderClear
(
&
mer1
);
return
code
;
return
TSDB_CODE_SUCCESS
;
}
}
int32_t
vnodeGetLoad
(
SVnode
*
pVnode
,
SVnodeLoad
*
pLoad
)
{
int32_t
vnodeGetLoad
(
SVnode
*
pVnode
,
SVnodeLoad
*
pLoad
)
{
...
...
source/dnode/vnode/src/vnd/vnodeSvr.c
浏览文件 @
ed1a71f1
...
@@ -502,55 +502,66 @@ _exit:
...
@@ -502,55 +502,66 @@ _exit:
return
0
;
return
0
;
}
}
static
int
vnodeDebugPrintSubmitMsg
(
SVnode
*
pVnode
,
SSubmitReq
*
pMsg
,
const
char
*
tags
)
{
static
int
vnodeDebugPrintSingleSubmitMsg
(
SMeta
*
pMeta
,
SSubmitBlk
*
pBlock
,
SSubmitMsgIter
*
msgIter
,
const
char
*
tags
)
{
ASSERT
(
pMsg
!=
NULL
);
SSubmitMsgIter
msgIter
=
{
0
};
SMeta
*
pMeta
=
pVnode
->
pMeta
;
SSubmitBlk
*
pBlock
=
NULL
;
SSubmitBlkIter
blkIter
=
{
0
};
SSubmitBlkIter
blkIter
=
{
0
};
STSRow
*
row
=
NULL
;
STSchema
*
pSchema
=
NULL
;
STSchema
*
pSchema
=
NULL
;
tb_uid_t
suid
=
0
;
tb_uid_t
suid
=
0
;
STSRow
*
row
=
NULL
;
if
(
tInitSubmitMsgIter
(
pMsg
,
&
msgIter
)
<
0
)
return
-
1
;
tInitSubmitBlkIter
(
msgIter
,
pBlock
,
&
blkIter
);
while
(
true
)
{
if
(
blkIter
.
row
==
NULL
)
return
0
;
if
(
tGetSubmitMsgNext
(
&
msgIter
,
&
pBlock
)
<
0
)
return
-
1
;
if
(
!
pSchema
||
(
suid
!=
msgIter
->
suid
))
{
if
(
pBlock
==
NULL
)
break
;
tInitSubmitBlkIter
(
&
msgIter
,
pBlock
,
&
blkIter
);
if
(
blkIter
.
row
==
NULL
)
continue
;
if
(
!
pSchema
||
(
suid
!=
msgIter
.
suid
))
{
if
(
pSchema
)
{
if
(
pSchema
)
{
taosMemoryFreeClear
(
pSchema
);
taosMemoryFreeClear
(
pSchema
);
}
}
pSchema
=
metaGetTbTSchema
(
pMeta
,
msgIter
.
suid
,
0
);
// TODO: use the real schema
pSchema
=
metaGetTbTSchema
(
pMeta
,
msgIter
->
suid
,
0
);
// TODO: use the real schema
if
(
pSchema
)
{
if
(
pSchema
)
{
suid
=
msgIter
.
suid
;
suid
=
msgIter
->
suid
;
}
}
}
}
if
(
!
pSchema
)
{
if
(
!
pSchema
)
{
printf
(
"%s:%d no valid schema
\n
"
,
tags
,
__LINE__
);
printf
(
"%s:%d no valid schema
\n
"
,
tags
,
__LINE__
);
continue
;
return
-
1
;
}
}
char
__tags
[
128
]
=
{
0
};
char
__tags
[
128
]
=
{
0
};
snprintf
(
__tags
,
128
,
"%s: uid %"
PRIi64
" "
,
tags
,
msgIter
.
uid
);
snprintf
(
__tags
,
128
,
"%s: uid %"
PRIi64
" "
,
tags
,
msgIter
->
uid
);
while
((
row
=
tGetSubmitBlkNext
(
&
blkIter
)))
{
while
((
row
=
tGetSubmitBlkNext
(
&
blkIter
)))
{
tdSRowPrint
(
row
,
pSchema
,
__tags
);
tdSRowPrint
(
row
,
pSchema
,
__tags
);
}
}
}
taosMemoryFreeClear
(
pSchema
);
taosMemoryFreeClear
(
pSchema
);
return
TSDB_CODE_SUCCESS
;
}
static
int
vnodeDebugPrintSubmitMsg
(
SVnode
*
pVnode
,
SSubmitReq
*
pMsg
,
const
char
*
tags
)
{
ASSERT
(
pMsg
!=
NULL
);
SSubmitMsgIter
msgIter
=
{
0
};
SMeta
*
pMeta
=
pVnode
->
pMeta
;
SSubmitBlk
*
pBlock
=
NULL
;
if
(
tInitSubmitMsgIter
(
pMsg
,
&
msgIter
)
<
0
)
return
-
1
;
while
(
true
)
{
if
(
tGetSubmitMsgNext
(
&
msgIter
,
&
pBlock
)
<
0
)
return
-
1
;
if
(
pBlock
==
NULL
)
break
;
vnodeDebugPrintSingleSubmitMsg
(
pMeta
,
pBlock
,
&
msgIter
,
tags
);
}
return
0
;
return
0
;
}
}
static
int
vnodeProcessSubmitReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
)
{
static
int
vnodeProcessSubmitReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
)
{
SSubmitReq
*
pSubmitReq
=
(
SSubmitReq
*
)
pReq
;
SSubmitReq
*
pSubmitReq
=
(
SSubmitReq
*
)
pReq
;
SSubmitRsp
submitRsp
=
{
0
};
SSubmitMsgIter
msgIter
=
{
0
};
SSubmitMsgIter
msgIter
=
{
0
};
SSubmitBlk
*
pBlock
;
SSubmitBlk
*
pBlock
;
SSubmitRsp
rsp
=
{
0
};
SSubmitRsp
rsp
=
{
0
};
SVCreateTbReq
createTbReq
=
{
0
};
SVCreateTbReq
createTbReq
=
{
0
};
SDecoder
decoder
=
{
0
};
SDecoder
decoder
=
{
0
};
int32_t
nRows
;
int32_t
nRows
;
int32_t
tsize
,
ret
;
SEncoder
encoder
=
{
0
};
pRsp
->
code
=
0
;
pRsp
->
code
=
0
;
...
@@ -564,12 +575,17 @@ static int vnodeProcessSubmitReq(SVnode *pVnode, int64_t version, void *pReq, in
...
@@ -564,12 +575,17 @@ static int vnodeProcessSubmitReq(SVnode *pVnode, int64_t version, void *pReq, in
goto
_exit
;
goto
_exit
;
}
}
for
(;;)
{
submitRsp
.
pArray
=
taosArrayInit
(
pSubmitReq
->
numOfBlocks
,
sizeof
(
SSubmitBlkRsp
));
for
(
int
i
=
0
;;)
{
tGetSubmitMsgNext
(
&
msgIter
,
&
pBlock
);
tGetSubmitMsgNext
(
&
msgIter
,
&
pBlock
);
if
(
pBlock
==
NULL
)
break
;
if
(
pBlock
==
NULL
)
break
;
SSubmitBlkRsp
submitBlkRsp
=
{
0
};
// create table for auto create table mode
// create table for auto create table mode
if
(
msgIter
.
schemaLen
>
0
)
{
if
(
msgIter
.
schemaLen
>
0
)
{
submitBlkRsp
.
hashMeta
=
1
;
tDecoderInit
(
&
decoder
,
pBlock
->
data
,
msgIter
.
schemaLen
);
tDecoderInit
(
&
decoder
,
pBlock
->
data
,
msgIter
.
schemaLen
);
if
(
tDecodeSVCreateTbReq
(
&
decoder
,
&
createTbReq
)
<
0
)
{
if
(
tDecodeSVCreateTbReq
(
&
decoder
,
&
createTbReq
)
<
0
)
{
pRsp
->
code
=
TSDB_CODE_INVALID_MSG
;
pRsp
->
code
=
TSDB_CODE_INVALID_MSG
;
...
@@ -585,6 +601,10 @@ static int vnodeProcessSubmitReq(SVnode *pVnode, int64_t version, void *pReq, in
...
@@ -585,6 +601,10 @@ static int vnodeProcessSubmitReq(SVnode *pVnode, int64_t version, void *pReq, in
}
}
}
}
submitBlkRsp
.
uid
=
createTbReq
.
uid
;
submitBlkRsp
.
tblFName
=
taosMemoryMalloc
(
strlen
(
pVnode
->
config
.
dbname
)
+
strlen
(
createTbReq
.
name
)
+
2
);
sprintf
(
submitBlkRsp
.
tblFName
,
"%s.%s"
,
pVnode
->
config
.
dbname
,
createTbReq
.
name
);
msgIter
.
uid
=
createTbReq
.
uid
;
msgIter
.
uid
=
createTbReq
.
uid
;
if
(
createTbReq
.
type
==
TSDB_CHILD_TABLE
)
{
if
(
createTbReq
.
type
==
TSDB_CHILD_TABLE
)
{
msgIter
.
suid
=
createTbReq
.
ctb
.
suid
;
msgIter
.
suid
=
createTbReq
.
ctb
.
suid
;
...
@@ -592,22 +612,33 @@ static int vnodeProcessSubmitReq(SVnode *pVnode, int64_t version, void *pReq, in
...
@@ -592,22 +612,33 @@ static int vnodeProcessSubmitReq(SVnode *pVnode, int64_t version, void *pReq, in
msgIter
.
suid
=
0
;
msgIter
.
suid
=
0
;
}
}
vnodeDebugPrintSingleSubmitMsg
(
pVnode
->
pMeta
,
pBlock
,
&
msgIter
,
"real uid"
);
tDecoderClear
(
&
decoder
);
tDecoderClear
(
&
decoder
);
}
}
if
(
tsdbInsertTableData
(
pVnode
->
pTsdb
,
&
msgIter
,
pBlock
,
&
nRows
)
<
0
)
{
if
(
tsdbInsertTableData
(
pVnode
->
pTsdb
,
&
msgIter
,
pBlock
,
&
submitBlkRsp
)
<
0
)
{
pRsp
->
code
=
terrno
;
pRsp
->
code
=
terrno
;
goto
_exit
;
goto
_exit
;
}
}
rsp
.
affectedRows
+=
nRows
;
submitRsp
.
numOfRows
+=
submitBlkRsp
.
numOfRows
;
submitRsp
.
affectedRows
+=
submitBlkRsp
.
affectedRows
;
taosArrayPush
(
submitRsp
.
pArray
,
&
submitBlkRsp
);
}
}
_exit:
_exit:
// encode the response (TODO)
tEncodeSize
(
tEncodeSSubmitRsp
,
&
submitRsp
,
tsize
,
ret
);
pRsp
->
pCont
=
rpcMallocCont
(
sizeof
(
SSubmitRsp
));
pRsp
->
pCont
=
rpcMallocCont
(
tsize
);
memcpy
(
pRsp
->
pCont
,
&
rsp
,
sizeof
(
rsp
));
pRsp
->
contLen
=
tsize
;
pRsp
->
contLen
=
sizeof
(
SSubmitRsp
);
tEncoderInit
(
&
encoder
,
pRsp
->
pCont
,
tsize
);
tEncodeSSubmitRsp
(
&
encoder
,
&
submitRsp
);
tEncoderClear
(
&
encoder
);
for
(
int32_t
i
=
0
;
i
<
taosArrayGetSize
(
submitRsp
.
pArray
);
i
++
)
{
taosMemoryFree
(((
SSubmitBlkRsp
*
)
taosArrayGet
(
submitRsp
.
pArray
,
i
))[
0
].
tblFName
);
}
taosArrayDestroy
(
submitRsp
.
pArray
);
tsdbTriggerRSma
(
pVnode
->
pTsdb
,
pReq
,
STREAM_DATA_TYPE_SUBMIT_BLOCK
);
tsdbTriggerRSma
(
pVnode
->
pTsdb
,
pReq
,
STREAM_DATA_TYPE_SUBMIT_BLOCK
);
...
...
source/libs/executor/inc/indexoperator.h
浏览文件 @
ed1a71f1
...
@@ -13,11 +13,23 @@
...
@@ -13,11 +13,23 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
*/
#include "filter.h"
#ifndef _INDEX_OPERATOR_H
#define _INDEX_OPERATOR_H
#ifdef __cplusplus
extern
"C"
{
#endif
#include "nodes.h"
#include "tglobal.h"
#include "tglobal.h"
typedef
enum
{
SFLT_NOT_INDEX
,
SFLT_COARSE_INDEX
,
SFLT_ACCURATE_INDEX
}
SIdxFltStatus
;
typedef
enum
{
SFLT_NOT_INDEX
,
SFLT_COARSE_INDEX
,
SFLT_ACCURATE_INDEX
}
SIdxFltStatus
;
SIdxFltStatus
idxGetFltStatus
(
SNode
*
pFilterNode
);
SIdxFltStatus
idxGetFltStatus
(
SNode
*
pFilterNode
);
// construct tag filter operator later
// construct tag filter operator later
int32_t
doFilterTag
(
const
SNode
*
pFilterNode
,
SArray
*
resutl
);
int32_t
doFilterTag
(
const
SNode
*
pFilterNode
,
SArray
*
result
);
#ifdef __cplusplus
}
#endif
#endif
/*INDEX_OPERATOR_*/
source/libs/executor/src/indexoperator.c
浏览文件 @
ed1a71f1
...
@@ -583,7 +583,7 @@ int32_t doFilterTag(const SNode *pFilterNode, SArray *result) {
...
@@ -583,7 +583,7 @@ int32_t doFilterTag(const SNode *pFilterNode, SArray *result) {
SFilterInfo
*
filter
=
NULL
;
SFilterInfo
*
filter
=
NULL
;
// todo move to the initialization function
// todo move to the initialization function
SIF_ERR_RET
(
filterInitFromNode
((
SNode
*
)
pFilterNode
,
&
filter
,
0
));
//
SIF_ERR_RET(filterInitFromNode((SNode *)pFilterNode, &filter, 0));
SIFParam
param
=
{
0
};
SIFParam
param
=
{
0
};
SIF_ERR_RET
(
sifCalculate
((
SNode
*
)
pFilterNode
,
&
param
));
SIF_ERR_RET
(
sifCalculate
((
SNode
*
)
pFilterNode
,
&
param
));
...
@@ -598,9 +598,9 @@ SIdxFltStatus idxGetFltStatus(SNode *pFilterNode) {
...
@@ -598,9 +598,9 @@ SIdxFltStatus idxGetFltStatus(SNode *pFilterNode) {
if
(
pFilterNode
==
NULL
)
{
if
(
pFilterNode
==
NULL
)
{
return
SFLT_NOT_INDEX
;
return
SFLT_NOT_INDEX
;
}
}
SFilterInfo
*
filter
=
NULL
;
//
SFilterInfo *filter = NULL;
// todo move to the initialization function
// todo move to the initialization function
SIF_ERR_RET
(
filterInitFromNode
((
SNode
*
)
pFilterNode
,
&
filter
,
0
));
//
SIF_ERR_RET(filterInitFromNode((SNode *)pFilterNode, &filter, 0));
SIF_ERR_RET
(
sifGetFltHint
((
SNode
*
)
pFilterNode
,
&
st
));
SIF_ERR_RET
(
sifGetFltHint
((
SNode
*
)
pFilterNode
,
&
st
));
return
st
;
return
st
;
...
...
source/libs/executor/test/executorTests.cpp
浏览文件 @
ed1a71f1
...
@@ -948,10 +948,6 @@ TEST(testCase, build_executor_tree_Test) {
...
@@ -948,10 +948,6 @@ TEST(testCase, build_executor_tree_Test) {
code
=
qCreateExecTask
(
&
handle
,
2
,
1
,
plan
,
(
void
**
)
&
pTaskInfo
,
&
sinkHandle
,
OPTR_EXEC_MODEL_BATCH
);
code
=
qCreateExecTask
(
&
handle
,
2
,
1
,
plan
,
(
void
**
)
&
pTaskInfo
,
&
sinkHandle
,
OPTR_EXEC_MODEL_BATCH
);
ASSERT_EQ
(
code
,
0
);
ASSERT_EQ
(
code
,
0
);
}
}
TEST
(
testCase
,
index_plan_test
)
{
// add later
EXPECT_EQ
(
0
,
0
);
}
#if 0
#if 0
TEST(testCase, inMem_sort_Test) {
TEST(testCase, inMem_sort_Test) {
...
...
source/libs/executor/test/indexexcutorTests.cpp
0 → 100644
浏览文件 @
ed1a71f1
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <gtest/gtest.h>
#include <tglobal.h>
#include <tsort.h>
#include <iostream>
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wwrite-strings"
#pragma GCC diagnostic ignored "-Wunused-function"
#pragma GCC diagnostic ignored "-Wunused-variable"
#pragma GCC diagnostic ignored "-Wsign-compare"
#include "executor.h"
#include "executorimpl.h"
#include "indexoperator.h"
#include "os.h"
#include "stub.h"
#include "taos.h"
#include "tcompare.h"
#include "tdatablock.h"
#include "tdef.h"
#include "trpc.h"
#include "tvariant.h"
namespace
{
SColumnInfo
createColumnInfo
(
int32_t
colId
,
int32_t
type
,
int32_t
bytes
)
{
SColumnInfo
info
=
{
0
};
info
.
colId
=
colId
;
info
.
type
=
type
;
info
.
bytes
=
bytes
;
return
info
;
}
int64_t
sifLeftV
=
21
,
sifRightV
=
10
;
double
sifLeftVd
=
21.0
,
sifRightVd
=
10.0
;
void
sifFreeDataBlock
(
void
*
block
)
{
blockDataDestroy
(
*
(
SSDataBlock
**
)
block
);
}
void
sifInitLogFile
()
{
const
char
*
defaultLogFileNamePrefix
=
"taoslog"
;
const
int32_t
maxLogFileNum
=
10
;
tsAsyncLog
=
0
;
qDebugFlag
=
159
;
strcpy
(
tsLogDir
,
"/tmp/sif"
);
taosRemoveDir
(
tsLogDir
);
taosMkDir
(
tsLogDir
);
if
(
taosInitLog
(
defaultLogFileNamePrefix
,
maxLogFileNum
)
<
0
)
{
printf
(
"failed to open log file in directory:%s
\n
"
,
tsLogDir
);
}
}
void
sifAppendReservedSlot
(
SArray
*
pBlockList
,
int16_t
*
dataBlockId
,
int16_t
*
slotId
,
bool
newBlock
,
int32_t
rows
,
SColumnInfo
*
colInfo
)
{
if
(
newBlock
)
{
SSDataBlock
*
res
=
(
SSDataBlock
*
)
taosMemoryCalloc
(
1
,
sizeof
(
SSDataBlock
));
res
->
info
.
numOfCols
=
1
;
res
->
info
.
rows
=
rows
;
res
->
pDataBlock
=
taosArrayInit
(
1
,
sizeof
(
SColumnInfoData
));
SColumnInfoData
idata
=
{
0
};
idata
.
info
=
*
colInfo
;
taosArrayPush
(
res
->
pDataBlock
,
&
idata
);
taosArrayPush
(
pBlockList
,
&
res
);
blockDataEnsureCapacity
(
res
,
rows
);
*
dataBlockId
=
taosArrayGetSize
(
pBlockList
)
-
1
;
res
->
info
.
blockId
=
*
dataBlockId
;
*
slotId
=
0
;
}
else
{
SSDataBlock
*
res
=
*
(
SSDataBlock
**
)
taosArrayGetLast
(
pBlockList
);
res
->
info
.
numOfCols
++
;
SColumnInfoData
idata
=
{
0
};
idata
.
info
=
*
colInfo
;
colInfoDataEnsureCapacity
(
&
idata
,
0
,
rows
);
taosArrayPush
(
res
->
pDataBlock
,
&
idata
);
*
dataBlockId
=
taosArrayGetSize
(
pBlockList
)
-
1
;
*
slotId
=
taosArrayGetSize
(
res
->
pDataBlock
)
-
1
;
}
}
void
sifMakeValueNode
(
SNode
**
pNode
,
int32_t
dataType
,
void
*
value
)
{
SNode
*
node
=
(
SNode
*
)
nodesMakeNode
(
QUERY_NODE_VALUE
);
SValueNode
*
vnode
=
(
SValueNode
*
)
node
;
vnode
->
node
.
resType
.
type
=
dataType
;
if
(
IS_VAR_DATA_TYPE
(
dataType
))
{
vnode
->
datum
.
p
=
(
char
*
)
taosMemoryMalloc
(
varDataTLen
(
value
));
varDataCopy
(
vnode
->
datum
.
p
,
value
);
vnode
->
node
.
resType
.
bytes
=
varDataTLen
(
value
);
}
else
{
vnode
->
node
.
resType
.
bytes
=
tDataTypes
[
dataType
].
bytes
;
assignVal
((
char
*
)
nodesGetValueFromNode
(
vnode
),
(
const
char
*
)
value
,
0
,
dataType
);
}
*
pNode
=
(
SNode
*
)
vnode
;
}
void
sifMakeColumnNode
(
SNode
**
pNode
,
const
char
*
db
,
const
char
*
colName
,
EColumnType
colType
,
uint8_t
colValType
)
{
SNode
*
node
=
(
SNode
*
)
nodesMakeNode
(
QUERY_NODE_COLUMN
);
SColumnNode
*
rnode
=
(
SColumnNode
*
)
node
;
memcpy
(
rnode
->
dbName
,
db
,
strlen
(
db
));
memcpy
(
rnode
->
colName
,
colName
,
strlen
(
colName
));
rnode
->
colType
=
colType
;
rnode
->
node
.
resType
.
type
=
colValType
;
*
pNode
=
(
SNode
*
)
rnode
;
}
void
sifMakeOpNode
(
SNode
**
pNode
,
EOperatorType
opType
,
int32_t
resType
,
SNode
*
pLeft
,
SNode
*
pRight
)
{
SNode
*
node
=
(
SNode
*
)
nodesMakeNode
(
QUERY_NODE_OPERATOR
);
SOperatorNode
*
onode
=
(
SOperatorNode
*
)
node
;
onode
->
node
.
resType
.
type
=
resType
;
onode
->
node
.
resType
.
bytes
=
tDataTypes
[
resType
].
bytes
;
onode
->
opType
=
opType
;
onode
->
pLeft
=
pLeft
;
onode
->
pRight
=
pRight
;
*
pNode
=
(
SNode
*
)
onode
;
}
void
sifMakeListNode
(
SNode
**
pNode
,
SNodeList
*
list
,
int32_t
resType
)
{
SNode
*
node
=
(
SNode
*
)
nodesMakeNode
(
QUERY_NODE_NODE_LIST
);
SNodeListNode
*
lnode
=
(
SNodeListNode
*
)
node
;
lnode
->
dataType
.
type
=
resType
;
lnode
->
pNodeList
=
list
;
*
pNode
=
(
SNode
*
)
lnode
;
}
void
sifMakeLogicNode
(
SNode
**
pNode
,
ELogicConditionType
opType
,
SNode
**
nodeList
,
int32_t
nodeNum
)
{
SNode
*
node
=
(
SNode
*
)
nodesMakeNode
(
QUERY_NODE_LOGIC_CONDITION
);
SLogicConditionNode
*
onode
=
(
SLogicConditionNode
*
)
node
;
onode
->
condType
=
opType
;
onode
->
node
.
resType
.
type
=
TSDB_DATA_TYPE_BOOL
;
onode
->
node
.
resType
.
bytes
=
sizeof
(
bool
);
onode
->
pParameterList
=
nodesMakeList
();
for
(
int32_t
i
=
0
;
i
<
nodeNum
;
++
i
)
{
nodesListAppend
(
onode
->
pParameterList
,
nodeList
[
i
]);
}
*
pNode
=
(
SNode
*
)
onode
;
}
void
sifMakeTargetNode
(
SNode
**
pNode
,
int16_t
dataBlockId
,
int16_t
slotId
,
SNode
*
snode
)
{
SNode
*
node
=
(
SNode
*
)
nodesMakeNode
(
QUERY_NODE_TARGET
);
STargetNode
*
onode
=
(
STargetNode
*
)
node
;
onode
->
pExpr
=
snode
;
onode
->
dataBlockId
=
dataBlockId
;
onode
->
slotId
=
slotId
;
*
pNode
=
(
SNode
*
)
onode
;
}
}
// namespace
#if 1
TEST
(
testCase
,
index_filter
)
{
{
SNode
*
pLeft
=
NULL
,
*
pRight
=
NULL
,
*
opNode
=
NULL
,
*
res
=
NULL
;
sifMakeColumnNode
(
&
pLeft
,
"test"
,
"col"
,
COLUMN_TYPE_TAG
,
TSDB_DATA_TYPE_INT
);
sifMakeValueNode
(
&
pRight
,
TSDB_DATA_TYPE_INT
,
&
sifRightV
);
sifMakeOpNode
(
&
opNode
,
OP_TYPE_LOWER_THAN
,
TSDB_DATA_TYPE_INT
,
pLeft
,
pRight
);
SArray
*
result
=
taosArrayInit
(
4
,
sizeof
(
uint64_t
));
doFilterTag
(
opNode
,
result
);
EXPECT_EQ
(
1
,
taosArrayGetSize
(
result
));
taosArrayDestroy
(
result
);
nodesDestroyNode
(
res
);
}
{
SNode
*
pLeft
=
NULL
,
*
pRight
=
NULL
,
*
opNode
=
NULL
,
*
res
=
NULL
;
sifMakeColumnNode
(
&
pLeft
,
"test"
,
"col"
,
COLUMN_TYPE_TAG
,
TSDB_DATA_TYPE_INT
);
sifMakeValueNode
(
&
pRight
,
TSDB_DATA_TYPE_INT
,
&
sifRightV
);
sifMakeOpNode
(
&
opNode
,
OP_TYPE_LOWER_THAN
,
TSDB_DATA_TYPE_DOUBLE
,
pLeft
,
pRight
);
SArray
*
result
=
taosArrayInit
(
4
,
sizeof
(
uint64_t
));
doFilterTag
(
opNode
,
result
);
EXPECT_EQ
(
1
,
taosArrayGetSize
(
result
));
taosArrayDestroy
(
result
);
nodesDestroyNode
(
res
);
}
}
TEST
(
testCase
,
index_filter_varify
)
{
{
SNode
*
pLeft
=
NULL
,
*
pRight
=
NULL
,
*
opNode
=
NULL
,
*
res
=
NULL
;
sifMakeColumnNode
(
&
pLeft
,
"test"
,
"col"
,
COLUMN_TYPE_TAG
,
TSDB_DATA_TYPE_INT
);
sifMakeValueNode
(
&
pRight
,
TSDB_DATA_TYPE_INT
,
&
sifRightV
);
sifMakeOpNode
(
&
opNode
,
OP_TYPE_LOWER_THAN
,
TSDB_DATA_TYPE_INT
,
pLeft
,
pRight
);
nodesDestroyNode
(
res
);
SIdxFltStatus
st
=
idxGetFltStatus
(
opNode
);
EXPECT_EQ
(
st
,
SFLT_ACCURATE_INDEX
);
}
{
SNode
*
pLeft
=
NULL
,
*
pRight
=
NULL
,
*
opNode
=
NULL
,
*
res
=
NULL
;
sifMakeColumnNode
(
&
pLeft
,
"test"
,
"col"
,
COLUMN_TYPE_TAG
,
TSDB_DATA_TYPE_INT
);
sifMakeValueNode
(
&
pRight
,
TSDB_DATA_TYPE_INT
,
&
sifRightV
);
sifMakeOpNode
(
&
opNode
,
OP_TYPE_LOWER_THAN
,
TSDB_DATA_TYPE_DOUBLE
,
pLeft
,
pRight
);
SIdxFltStatus
st
=
idxGetFltStatus
(
opNode
);
EXPECT_EQ
(
st
,
SFLT_COARSE_INDEX
);
nodesDestroyNode
(
res
);
}
{
SNode
*
pLeft
=
NULL
,
*
pRight
=
NULL
,
*
opNode
=
NULL
,
*
res
=
NULL
;
sifMakeColumnNode
(
&
pLeft
,
"test"
,
"col"
,
COLUMN_TYPE_TAG
,
TSDB_DATA_TYPE_INT
);
sifMakeValueNode
(
&
pRight
,
TSDB_DATA_TYPE_INT
,
&
sifRightV
);
sifMakeOpNode
(
&
opNode
,
OP_TYPE_GREATER_THAN
,
TSDB_DATA_TYPE_INT
,
pLeft
,
pRight
);
nodesDestroyNode
(
res
);
SIdxFltStatus
st
=
idxGetFltStatus
(
opNode
);
EXPECT_EQ
(
st
,
SFLT_ACCURATE_INDEX
);
}
{
SNode
*
pLeft
=
NULL
,
*
pRight
=
NULL
,
*
opNode
=
NULL
,
*
res
=
NULL
;
sifMakeColumnNode
(
&
pLeft
,
"test"
,
"col"
,
COLUMN_TYPE_TAG
,
TSDB_DATA_TYPE_INT
);
sifMakeValueNode
(
&
pRight
,
TSDB_DATA_TYPE_INT
,
&
sifRightV
);
sifMakeOpNode
(
&
opNode
,
OP_TYPE_GREATER_THAN
,
TSDB_DATA_TYPE_DOUBLE
,
pLeft
,
pRight
);
SIdxFltStatus
st
=
idxGetFltStatus
(
opNode
);
EXPECT_EQ
(
st
,
SFLT_COARSE_INDEX
);
nodesDestroyNode
(
res
);
}
}
#endif
#pragma GCC diagnostic pop
source/libs/function/src/builtins.c
浏览文件 @
ed1a71f1
...
@@ -239,7 +239,7 @@ static int32_t translateLeastSQR(SFunctionNode* pFunc, char* pErrBuf, int32_t le
...
@@ -239,7 +239,7 @@ static int32_t translateLeastSQR(SFunctionNode* pFunc, char* pErrBuf, int32_t le
}
}
}
}
pFunc
->
node
.
resType
=
(
SDataType
)
{
.
bytes
=
64
,
.
type
=
TSDB_DATA_TYPE_BINARY
};
pFunc
->
node
.
resType
=
(
SDataType
)
{.
bytes
=
64
,
.
type
=
TSDB_DATA_TYPE_BINARY
};
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
@@ -1042,26 +1042,6 @@ const SBuiltinFuncDefinition funcMgtBuiltins[] = {
...
@@ -1042,26 +1042,6 @@ const SBuiltinFuncDefinition funcMgtBuiltins[] = {
.
sprocessFunc
=
timezoneFunction
,
.
sprocessFunc
=
timezoneFunction
,
.
finalizeFunc
=
NULL
.
finalizeFunc
=
NULL
},
},
{
.
name
=
"_rowts"
,
.
type
=
FUNCTION_TYPE_ROWTS
,
.
classification
=
FUNC_MGT_PSEUDO_COLUMN_FUNC
,
.
translateFunc
=
translateTimePseudoColumn
,
.
getEnvFunc
=
getTimePseudoFuncEnv
,
.
initFunc
=
NULL
,
.
sprocessFunc
=
NULL
,
.
finalizeFunc
=
NULL
},
{
.
name
=
"_c0"
,
.
type
=
FUNCTION_TYPE_ROWTS
,
.
classification
=
FUNC_MGT_PSEUDO_COLUMN_FUNC
,
.
translateFunc
=
translateTimePseudoColumn
,
.
getEnvFunc
=
getTimePseudoFuncEnv
,
.
initFunc
=
NULL
,
.
sprocessFunc
=
NULL
,
.
finalizeFunc
=
NULL
},
{
{
.
name
=
"tbname"
,
.
name
=
"tbname"
,
.
type
=
FUNCTION_TYPE_TBNAME
,
.
type
=
FUNCTION_TYPE_TBNAME
,
...
...
source/libs/parser/inc/parInsertData.h
浏览文件 @
ed1a71f1
...
@@ -137,7 +137,7 @@ void destroyBlockArrayList(SArray* pDataBlockList);
...
@@ -137,7 +137,7 @@ void destroyBlockArrayList(SArray* pDataBlockList);
void
destroyBlockHashmap
(
SHashObj
*
pDataBlockHash
);
void
destroyBlockHashmap
(
SHashObj
*
pDataBlockHash
);
int
initRowBuilder
(
SRowBuilder
*
pBuilder
,
int16_t
schemaVer
,
SParsedDataColInfo
*
pColInfo
);
int
initRowBuilder
(
SRowBuilder
*
pBuilder
,
int16_t
schemaVer
,
SParsedDataColInfo
*
pColInfo
);
int32_t
allocateMemIfNeed
(
STableDataBlocks
*
pDataBlock
,
int32_t
rowSize
,
int32_t
*
numOfRows
);
int32_t
allocateMemIfNeed
(
STableDataBlocks
*
pDataBlock
,
int32_t
rowSize
,
int32_t
*
numOfRows
);
int32_t
getDataBlockFromList
(
SHashObj
*
pHashList
,
int64_t
id
,
int32_t
size
,
int32_t
startOffset
,
int32_t
rowSize
,
int32_t
getDataBlockFromList
(
SHashObj
*
pHashList
,
void
*
id
,
int32_t
idLen
,
int32_t
size
,
int32_t
startOffset
,
int32_t
rowSize
,
STableMeta
*
pTableMeta
,
STableDataBlocks
**
dataBlocks
,
SArray
*
pBlockList
,
SVCreateTbReq
*
pCreateTbReq
);
STableMeta
*
pTableMeta
,
STableDataBlocks
**
dataBlocks
,
SArray
*
pBlockList
,
SVCreateTbReq
*
pCreateTbReq
);
int32_t
mergeTableDataBlocks
(
SHashObj
*
pHashObj
,
uint8_t
payloadType
,
SArray
**
pVgDataBlocks
);
int32_t
mergeTableDataBlocks
(
SHashObj
*
pHashObj
,
uint8_t
payloadType
,
SArray
**
pVgDataBlocks
);
int32_t
buildCreateTbMsg
(
STableDataBlocks
*
pBlocks
,
SVCreateTbReq
*
pCreateTbReq
);
int32_t
buildCreateTbMsg
(
STableDataBlocks
*
pBlocks
,
SVCreateTbReq
*
pCreateTbReq
);
...
...
source/libs/parser/src/parAstCreater.c
浏览文件 @
ed1a71f1
...
@@ -350,7 +350,18 @@ SNode* createNotBetweenAnd(SAstCreateContext* pCxt, SNode* pExpr, SNode* pLeft,
...
@@ -350,7 +350,18 @@ SNode* createNotBetweenAnd(SAstCreateContext* pCxt, SNode* pExpr, SNode* pLeft,
createOperatorNode
(
pCxt
,
OP_TYPE_GREATER_THAN
,
nodesCloneNode
(
pExpr
),
pRight
));
createOperatorNode
(
pCxt
,
OP_TYPE_GREATER_THAN
,
nodesCloneNode
(
pExpr
),
pRight
));
}
}
static
SNode
*
createPrimaryKeyCol
(
SAstCreateContext
*
pCxt
)
{
SColumnNode
*
pCol
=
nodesMakeNode
(
QUERY_NODE_COLUMN
);
CHECK_OUT_OF_MEM
(
pCol
);
pCol
->
colId
=
PRIMARYKEY_TIMESTAMP_COL_ID
;
strcpy
(
pCol
->
colName
,
PK_TS_COL_INTERNAL_NAME
);
return
(
SNode
*
)
pCol
;
}
SNode
*
createFunctionNode
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pFuncName
,
SNodeList
*
pParameterList
)
{
SNode
*
createFunctionNode
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pFuncName
,
SNodeList
*
pParameterList
)
{
if
(
0
==
strncasecmp
(
"_rowts"
,
pFuncName
->
z
,
pFuncName
->
n
)
||
0
==
strncasecmp
(
"_c0"
,
pFuncName
->
z
,
pFuncName
->
n
))
{
return
createPrimaryKeyCol
(
pCxt
);
}
SFunctionNode
*
func
=
(
SFunctionNode
*
)
nodesMakeNode
(
QUERY_NODE_FUNCTION
);
SFunctionNode
*
func
=
(
SFunctionNode
*
)
nodesMakeNode
(
QUERY_NODE_FUNCTION
);
CHECK_OUT_OF_MEM
(
func
);
CHECK_OUT_OF_MEM
(
func
);
strncpy
(
func
->
functionName
,
pFuncName
->
z
,
pFuncName
->
n
);
strncpy
(
func
->
functionName
,
pFuncName
->
z
,
pFuncName
->
n
);
...
@@ -467,13 +478,11 @@ SNode* createSessionWindowNode(SAstCreateContext* pCxt, SNode* pCol, SNode* pGap
...
@@ -467,13 +478,11 @@ SNode* createSessionWindowNode(SAstCreateContext* pCxt, SNode* pCol, SNode* pGap
SNode
*
createStateWindowNode
(
SAstCreateContext
*
pCxt
,
SNode
*
pExpr
)
{
SNode
*
createStateWindowNode
(
SAstCreateContext
*
pCxt
,
SNode
*
pExpr
)
{
SStateWindowNode
*
state
=
(
SStateWindowNode
*
)
nodesMakeNode
(
QUERY_NODE_STATE_WINDOW
);
SStateWindowNode
*
state
=
(
SStateWindowNode
*
)
nodesMakeNode
(
QUERY_NODE_STATE_WINDOW
);
CHECK_OUT_OF_MEM
(
state
);
CHECK_OUT_OF_MEM
(
state
);
state
->
pCol
=
nodesMakeNode
(
QUERY_NODE_COLUMN
);
state
->
pCol
=
createPrimaryKeyCol
(
pCxt
);
if
(
NULL
==
state
->
pCol
)
{
if
(
NULL
==
state
->
pCol
)
{
nodesDestroyNode
(
state
);
nodesDestroyNode
(
state
);
CHECK_OUT_OF_MEM
(
state
->
pCol
);
CHECK_OUT_OF_MEM
(
state
->
pCol
);
}
}
((
SColumnNode
*
)
state
->
pCol
)
->
colId
=
PRIMARYKEY_TIMESTAMP_COL_ID
;
strcpy
(((
SColumnNode
*
)
state
->
pCol
)
->
colName
,
PK_TS_COL_INTERNAL_NAME
);
state
->
pExpr
=
pExpr
;
state
->
pExpr
=
pExpr
;
return
(
SNode
*
)
state
;
return
(
SNode
*
)
state
;
}
}
...
@@ -482,13 +491,11 @@ SNode* createIntervalWindowNode(SAstCreateContext* pCxt, SNode* pInterval, SNode
...
@@ -482,13 +491,11 @@ SNode* createIntervalWindowNode(SAstCreateContext* pCxt, SNode* pInterval, SNode
SNode
*
pFill
)
{
SNode
*
pFill
)
{
SIntervalWindowNode
*
interval
=
(
SIntervalWindowNode
*
)
nodesMakeNode
(
QUERY_NODE_INTERVAL_WINDOW
);
SIntervalWindowNode
*
interval
=
(
SIntervalWindowNode
*
)
nodesMakeNode
(
QUERY_NODE_INTERVAL_WINDOW
);
CHECK_OUT_OF_MEM
(
interval
);
CHECK_OUT_OF_MEM
(
interval
);
interval
->
pCol
=
nodesMakeNode
(
QUERY_NODE_COLUMN
);
interval
->
pCol
=
createPrimaryKeyCol
(
pCxt
);
if
(
NULL
==
interval
->
pCol
)
{
if
(
NULL
==
interval
->
pCol
)
{
nodesDestroyNode
(
interval
);
nodesDestroyNode
(
interval
);
CHECK_OUT_OF_MEM
(
interval
->
pCol
);
CHECK_OUT_OF_MEM
(
interval
->
pCol
);
}
}
((
SColumnNode
*
)
interval
->
pCol
)
->
colId
=
PRIMARYKEY_TIMESTAMP_COL_ID
;
strcpy
(((
SColumnNode
*
)
interval
->
pCol
)
->
colName
,
PK_TS_COL_INTERNAL_NAME
);
interval
->
pInterval
=
pInterval
;
interval
->
pInterval
=
pInterval
;
interval
->
pOffset
=
pOffset
;
interval
->
pOffset
=
pOffset
;
interval
->
pSliding
=
pSliding
;
interval
->
pSliding
=
pSliding
;
...
@@ -667,7 +674,7 @@ SNode* setDatabaseOption(SAstCreateContext* pCxt, SNode* pOptions, EDatabaseOpti
...
@@ -667,7 +674,7 @@ SNode* setDatabaseOption(SAstCreateContext* pCxt, SNode* pOptions, EDatabaseOpti
case
DB_OPTION_DAYS
:
{
case
DB_OPTION_DAYS
:
{
SToken
*
pToken
=
pVal
;
SToken
*
pToken
=
pVal
;
if
(
TK_NK_INTEGER
==
pToken
->
type
)
{
if
(
TK_NK_INTEGER
==
pToken
->
type
)
{
((
SDatabaseOptions
*
)
pOptions
)
->
daysPerFile
=
strtol
(
pToken
->
z
,
NULL
,
10
);
((
SDatabaseOptions
*
)
pOptions
)
->
daysPerFile
=
strtol
(
pToken
->
z
,
NULL
,
10
)
*
1440
;
}
else
{
}
else
{
((
SDatabaseOptions
*
)
pOptions
)
->
pDaysPerFile
=
(
SValueNode
*
)
createDurationValueNode
(
pCxt
,
pToken
);
((
SDatabaseOptions
*
)
pOptions
)
->
pDaysPerFile
=
(
SValueNode
*
)
createDurationValueNode
(
pCxt
,
pToken
);
}
}
...
...
source/libs/parser/src/parInsert.c
浏览文件 @
ed1a71f1
...
@@ -237,36 +237,32 @@ static int32_t createSName(SName* pName, SToken* pTableName, int32_t acctId, con
...
@@ -237,36 +237,32 @@ static int32_t createSName(SName* pName, SToken* pTableName, int32_t acctId, con
return
code
;
return
code
;
}
}
static
int32_t
getTableMetaImpl
(
SInsertParseContext
*
pCxt
,
S
Token
*
pT
name
,
bool
isStb
)
{
static
int32_t
getTableMetaImpl
(
SInsertParseContext
*
pCxt
,
S
Name
*
name
,
char
*
dbF
name
,
bool
isStb
)
{
SParseContext
*
pBasicCtx
=
pCxt
->
pComCxt
;
SParseContext
*
pBasicCtx
=
pCxt
->
pComCxt
;
SName
name
=
{
0
};
createSName
(
&
name
,
pTname
,
pBasicCtx
->
acctId
,
pBasicCtx
->
db
,
&
pCxt
->
msg
);
char
dbFname
[
TSDB_DB_FNAME_LEN
]
=
{
0
};
tNameGetFullDbName
(
&
name
,
dbFname
);
bool
pass
=
false
;
bool
pass
=
false
;
CHECK_CODE
(
catalogChkAuth
(
pBasicCtx
->
pCatalog
,
pBasicCtx
->
pTransporter
,
&
pBasicCtx
->
mgmtEpSet
,
pBasicCtx
->
pUser
,
dbFname
,
AUTH_TYPE_WRITE
,
&
pass
));
CHECK_CODE
(
catalogChkAuth
(
pBasicCtx
->
pCatalog
,
pBasicCtx
->
pTransporter
,
&
pBasicCtx
->
mgmtEpSet
,
pBasicCtx
->
pUser
,
dbFname
,
AUTH_TYPE_WRITE
,
&
pass
));
if
(
!
pass
)
{
if
(
!
pass
)
{
return
TSDB_CODE_PAR_PERMISSION_DENIED
;
return
TSDB_CODE_PAR_PERMISSION_DENIED
;
}
}
if
(
isStb
)
{
if
(
isStb
)
{
CHECK_CODE
(
catalogGetSTableMeta
(
pBasicCtx
->
pCatalog
,
pBasicCtx
->
pTransporter
,
&
pBasicCtx
->
mgmtEpSet
,
&
name
,
CHECK_CODE
(
catalogGetSTableMeta
(
pBasicCtx
->
pCatalog
,
pBasicCtx
->
pTransporter
,
&
pBasicCtx
->
mgmtEpSet
,
name
,
&
pCxt
->
pTableMeta
));
&
pCxt
->
pTableMeta
));
}
else
{
}
else
{
CHECK_CODE
(
catalogGetTableMeta
(
pBasicCtx
->
pCatalog
,
pBasicCtx
->
pTransporter
,
&
pBasicCtx
->
mgmtEpSet
,
&
name
,
CHECK_CODE
(
catalogGetTableMeta
(
pBasicCtx
->
pCatalog
,
pBasicCtx
->
pTransporter
,
&
pBasicCtx
->
mgmtEpSet
,
name
,
&
pCxt
->
pTableMeta
));
&
pCxt
->
pTableMeta
));
SVgroupInfo
vg
;
SVgroupInfo
vg
;
CHECK_CODE
(
CHECK_CODE
(
catalogGetTableHashVgroup
(
pBasicCtx
->
pCatalog
,
pBasicCtx
->
pTransporter
,
&
pBasicCtx
->
mgmtEpSet
,
&
name
,
&
vg
));
catalogGetTableHashVgroup
(
pBasicCtx
->
pCatalog
,
pBasicCtx
->
pTransporter
,
&
pBasicCtx
->
mgmtEpSet
,
name
,
&
vg
));
CHECK_CODE
(
taosHashPut
(
pCxt
->
pVgroupsHashObj
,
(
const
char
*
)
&
vg
.
vgId
,
sizeof
(
vg
.
vgId
),
(
char
*
)
&
vg
,
sizeof
(
vg
)));
CHECK_CODE
(
taosHashPut
(
pCxt
->
pVgroupsHashObj
,
(
const
char
*
)
&
vg
.
vgId
,
sizeof
(
vg
.
vgId
),
(
char
*
)
&
vg
,
sizeof
(
vg
)));
}
}
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
int32_t
getTableMeta
(
SInsertParseContext
*
pCxt
,
S
Token
*
pTname
)
{
return
getTableMetaImpl
(
pCxt
,
pT
name
,
false
);
}
static
int32_t
getTableMeta
(
SInsertParseContext
*
pCxt
,
S
Name
*
name
,
char
*
dbFname
)
{
return
getTableMetaImpl
(
pCxt
,
name
,
dbF
name
,
false
);
}
static
int32_t
getSTableMeta
(
SInsertParseContext
*
pCxt
,
S
Token
*
pTname
)
{
return
getTableMetaImpl
(
pCxt
,
pT
name
,
true
);
}
static
int32_t
getSTableMeta
(
SInsertParseContext
*
pCxt
,
S
Name
*
name
,
char
*
dbFname
)
{
return
getTableMetaImpl
(
pCxt
,
name
,
dbF
name
,
true
);
}
static
int32_t
findCol
(
SToken
*
pColname
,
int32_t
start
,
int32_t
end
,
SSchema
*
pSchema
)
{
static
int32_t
findCol
(
SToken
*
pColname
,
int32_t
start
,
int32_t
end
,
SSchema
*
pSchema
)
{
while
(
start
<
end
)
{
while
(
start
<
end
)
{
...
@@ -349,8 +345,7 @@ static int parseTime(char** end, SToken* pToken, int16_t timePrec, int64_t* time
...
@@ -349,8 +345,7 @@ static int parseTime(char** end, SToken* pToken, int16_t timePrec, int64_t* time
}
else
if
(
pToken
->
type
==
TK_TODAY
)
{
}
else
if
(
pToken
->
type
==
TK_TODAY
)
{
ts
=
taosGetTimestampToday
(
timePrec
);
ts
=
taosGetTimestampToday
(
timePrec
);
}
else
if
(
pToken
->
type
==
TK_NK_INTEGER
)
{
}
else
if
(
pToken
->
type
==
TK_NK_INTEGER
)
{
bool
isSigned
=
false
;
toInteger
(
pToken
->
z
,
pToken
->
n
,
10
,
&
ts
);
toInteger
(
pToken
->
z
,
pToken
->
n
,
10
,
&
ts
,
&
isSigned
);
}
else
{
// parse the RFC-3339/ISO-8601 timestamp format string
}
else
{
// parse the RFC-3339/ISO-8601 timestamp format string
if
(
taosParseTime
(
pToken
->
z
,
time
,
pToken
->
n
,
timePrec
,
tsDaylight
)
!=
TSDB_CODE_SUCCESS
)
{
if
(
taosParseTime
(
pToken
->
z
,
time
,
pToken
->
n
,
timePrec
,
tsDaylight
)
!=
TSDB_CODE_SUCCESS
)
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid timestamp format"
,
pToken
->
z
);
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid timestamp format"
,
pToken
->
z
);
...
@@ -454,8 +449,8 @@ static FORCE_INLINE int32_t toDouble(SToken* pToken, double* value, char** endPt
...
@@ -454,8 +449,8 @@ static FORCE_INLINE int32_t toDouble(SToken* pToken, double* value, char** endPt
static
int32_t
parseValueToken
(
char
**
end
,
SToken
*
pToken
,
SSchema
*
pSchema
,
int16_t
timePrec
,
char
*
tmpTokenBuf
,
static
int32_t
parseValueToken
(
char
**
end
,
SToken
*
pToken
,
SSchema
*
pSchema
,
int16_t
timePrec
,
char
*
tmpTokenBuf
,
_row_append_fn_t
func
,
void
*
param
,
SMsgBuf
*
pMsgBuf
)
{
_row_append_fn_t
func
,
void
*
param
,
SMsgBuf
*
pMsgBuf
)
{
int64_t
iv
;
int64_t
iv
;
uint64_t
uv
;
char
*
endptr
=
NULL
;
char
*
endptr
=
NULL
;
bool
isSigned
=
false
;
int32_t
code
=
checkAndTrimValue
(
pToken
,
pSchema
->
type
,
tmpTokenBuf
,
pMsgBuf
);
int32_t
code
=
checkAndTrimValue
(
pToken
,
pSchema
->
type
,
tmpTokenBuf
,
pMsgBuf
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
...
@@ -490,7 +485,7 @@ static int32_t parseValueToken(char** end, SToken* pToken, SSchema* pSchema, int
...
@@ -490,7 +485,7 @@ static int32_t parseValueToken(char** end, SToken* pToken, SSchema* pSchema, int
}
}
case
TSDB_DATA_TYPE_TINYINT
:
{
case
TSDB_DATA_TYPE_TINYINT
:
{
if
(
TSDB_CODE_SUCCESS
!=
toInteger
(
pToken
->
z
,
pToken
->
n
,
10
,
&
iv
,
&
isSigned
))
{
if
(
TSDB_CODE_SUCCESS
!=
toInteger
(
pToken
->
z
,
pToken
->
n
,
10
,
&
iv
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid tinyint data"
,
pToken
->
z
);
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid tinyint data"
,
pToken
->
z
);
}
else
if
(
!
IS_VALID_TINYINT
(
iv
))
{
}
else
if
(
!
IS_VALID_TINYINT
(
iv
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"tinyint data overflow"
,
pToken
->
z
);
return
buildSyntaxErrMsg
(
pMsgBuf
,
"tinyint data overflow"
,
pToken
->
z
);
...
@@ -501,17 +496,17 @@ static int32_t parseValueToken(char** end, SToken* pToken, SSchema* pSchema, int
...
@@ -501,17 +496,17 @@ static int32_t parseValueToken(char** end, SToken* pToken, SSchema* pSchema, int
}
}
case
TSDB_DATA_TYPE_UTINYINT
:
{
case
TSDB_DATA_TYPE_UTINYINT
:
{
if
(
TSDB_CODE_SUCCESS
!=
to
Integer
(
pToken
->
z
,
pToken
->
n
,
10
,
&
iv
,
&
isSigned
))
{
if
(
TSDB_CODE_SUCCESS
!=
to
UInteger
(
pToken
->
z
,
pToken
->
n
,
10
,
&
uv
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid unsigned tinyint data"
,
pToken
->
z
);
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid unsigned tinyint data"
,
pToken
->
z
);
}
else
if
(
!
IS_VALID_UTINYINT
(
i
v
))
{
}
else
if
(
!
IS_VALID_UTINYINT
(
u
v
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"unsigned tinyint data overflow"
,
pToken
->
z
);
return
buildSyntaxErrMsg
(
pMsgBuf
,
"unsigned tinyint data overflow"
,
pToken
->
z
);
}
}
uint8_t
tmpVal
=
(
uint8_t
)
i
v
;
uint8_t
tmpVal
=
(
uint8_t
)
u
v
;
return
func
(
pMsgBuf
,
&
tmpVal
,
pSchema
->
bytes
,
param
);
return
func
(
pMsgBuf
,
&
tmpVal
,
pSchema
->
bytes
,
param
);
}
}
case
TSDB_DATA_TYPE_SMALLINT
:
{
case
TSDB_DATA_TYPE_SMALLINT
:
{
if
(
TSDB_CODE_SUCCESS
!=
toInteger
(
pToken
->
z
,
pToken
->
n
,
10
,
&
iv
,
&
isSigned
))
{
if
(
TSDB_CODE_SUCCESS
!=
toInteger
(
pToken
->
z
,
pToken
->
n
,
10
,
&
iv
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid smallint data"
,
pToken
->
z
);
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid smallint data"
,
pToken
->
z
);
}
else
if
(
!
IS_VALID_SMALLINT
(
iv
))
{
}
else
if
(
!
IS_VALID_SMALLINT
(
iv
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"smallint data overflow"
,
pToken
->
z
);
return
buildSyntaxErrMsg
(
pMsgBuf
,
"smallint data overflow"
,
pToken
->
z
);
...
@@ -521,17 +516,17 @@ static int32_t parseValueToken(char** end, SToken* pToken, SSchema* pSchema, int
...
@@ -521,17 +516,17 @@ static int32_t parseValueToken(char** end, SToken* pToken, SSchema* pSchema, int
}
}
case
TSDB_DATA_TYPE_USMALLINT
:
{
case
TSDB_DATA_TYPE_USMALLINT
:
{
if
(
TSDB_CODE_SUCCESS
!=
to
Integer
(
pToken
->
z
,
pToken
->
n
,
10
,
&
iv
,
&
isSigned
))
{
if
(
TSDB_CODE_SUCCESS
!=
to
UInteger
(
pToken
->
z
,
pToken
->
n
,
10
,
&
uv
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid unsigned smallint data"
,
pToken
->
z
);
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid unsigned smallint data"
,
pToken
->
z
);
}
else
if
(
!
IS_VALID_USMALLINT
(
i
v
))
{
}
else
if
(
!
IS_VALID_USMALLINT
(
u
v
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"unsigned smallint data overflow"
,
pToken
->
z
);
return
buildSyntaxErrMsg
(
pMsgBuf
,
"unsigned smallint data overflow"
,
pToken
->
z
);
}
}
uint16_t
tmpVal
=
(
uint16_t
)
i
v
;
uint16_t
tmpVal
=
(
uint16_t
)
u
v
;
return
func
(
pMsgBuf
,
&
tmpVal
,
pSchema
->
bytes
,
param
);
return
func
(
pMsgBuf
,
&
tmpVal
,
pSchema
->
bytes
,
param
);
}
}
case
TSDB_DATA_TYPE_INT
:
{
case
TSDB_DATA_TYPE_INT
:
{
if
(
TSDB_CODE_SUCCESS
!=
toInteger
(
pToken
->
z
,
pToken
->
n
,
10
,
&
iv
,
&
isSigned
))
{
if
(
TSDB_CODE_SUCCESS
!=
toInteger
(
pToken
->
z
,
pToken
->
n
,
10
,
&
iv
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid int data"
,
pToken
->
z
);
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid int data"
,
pToken
->
z
);
}
else
if
(
!
IS_VALID_INT
(
iv
))
{
}
else
if
(
!
IS_VALID_INT
(
iv
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"int data overflow"
,
pToken
->
z
);
return
buildSyntaxErrMsg
(
pMsgBuf
,
"int data overflow"
,
pToken
->
z
);
...
@@ -541,17 +536,17 @@ static int32_t parseValueToken(char** end, SToken* pToken, SSchema* pSchema, int
...
@@ -541,17 +536,17 @@ static int32_t parseValueToken(char** end, SToken* pToken, SSchema* pSchema, int
}
}
case
TSDB_DATA_TYPE_UINT
:
{
case
TSDB_DATA_TYPE_UINT
:
{
if
(
TSDB_CODE_SUCCESS
!=
to
Integer
(
pToken
->
z
,
pToken
->
n
,
10
,
&
iv
,
&
isSigned
))
{
if
(
TSDB_CODE_SUCCESS
!=
to
UInteger
(
pToken
->
z
,
pToken
->
n
,
10
,
&
uv
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid unsigned int data"
,
pToken
->
z
);
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid unsigned int data"
,
pToken
->
z
);
}
else
if
(
!
IS_VALID_UINT
(
i
v
))
{
}
else
if
(
!
IS_VALID_UINT
(
u
v
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"unsigned int data overflow"
,
pToken
->
z
);
return
buildSyntaxErrMsg
(
pMsgBuf
,
"unsigned int data overflow"
,
pToken
->
z
);
}
}
uint32_t
tmpVal
=
(
uint32_t
)
i
v
;
uint32_t
tmpVal
=
(
uint32_t
)
u
v
;
return
func
(
pMsgBuf
,
&
tmpVal
,
pSchema
->
bytes
,
param
);
return
func
(
pMsgBuf
,
&
tmpVal
,
pSchema
->
bytes
,
param
);
}
}
case
TSDB_DATA_TYPE_BIGINT
:
{
case
TSDB_DATA_TYPE_BIGINT
:
{
if
(
TSDB_CODE_SUCCESS
!=
toInteger
(
pToken
->
z
,
pToken
->
n
,
10
,
&
iv
,
&
isSigned
))
{
if
(
TSDB_CODE_SUCCESS
!=
toInteger
(
pToken
->
z
,
pToken
->
n
,
10
,
&
iv
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid bigint data"
,
pToken
->
z
);
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid bigint data"
,
pToken
->
z
);
}
else
if
(
!
IS_VALID_BIGINT
(
iv
))
{
}
else
if
(
!
IS_VALID_BIGINT
(
iv
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"bigint data overflow"
,
pToken
->
z
);
return
buildSyntaxErrMsg
(
pMsgBuf
,
"bigint data overflow"
,
pToken
->
z
);
...
@@ -560,13 +555,12 @@ static int32_t parseValueToken(char** end, SToken* pToken, SSchema* pSchema, int
...
@@ -560,13 +555,12 @@ static int32_t parseValueToken(char** end, SToken* pToken, SSchema* pSchema, int
}
}
case
TSDB_DATA_TYPE_UBIGINT
:
{
case
TSDB_DATA_TYPE_UBIGINT
:
{
if
(
TSDB_CODE_SUCCESS
!=
to
Integer
(
pToken
->
z
,
pToken
->
n
,
10
,
&
iv
,
&
isSigned
))
{
if
(
TSDB_CODE_SUCCESS
!=
to
UInteger
(
pToken
->
z
,
pToken
->
n
,
10
,
&
uv
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid unsigned bigint data"
,
pToken
->
z
);
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid unsigned bigint data"
,
pToken
->
z
);
}
else
if
(
!
IS_VALID_UBIGINT
(
(
uint64_t
)
i
v
))
{
}
else
if
(
!
IS_VALID_UBIGINT
(
u
v
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"unsigned bigint data overflow"
,
pToken
->
z
);
return
buildSyntaxErrMsg
(
pMsgBuf
,
"unsigned bigint data overflow"
,
pToken
->
z
);
}
}
uint64_t
tmpVal
=
(
uint64_t
)
iv
;
return
func
(
pMsgBuf
,
&
uv
,
pSchema
->
bytes
,
param
);
return
func
(
pMsgBuf
,
&
tmpVal
,
pSchema
->
bytes
,
param
);
}
}
case
TSDB_DATA_TYPE_FLOAT
:
{
case
TSDB_DATA_TYPE_FLOAT
:
{
...
@@ -771,7 +765,7 @@ static int32_t KvRowAppend(SMsgBuf* pMsgBuf, const void* value, int32_t len, voi
...
@@ -771,7 +765,7 @@ static int32_t KvRowAppend(SMsgBuf* pMsgBuf, const void* value, int32_t len, voi
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
int32_t
buildCreateTbReq
(
SVCreateTbReq
*
pTbReq
,
const
char
*
tname
,
SKVRow
row
,
int64_t
suid
)
{
static
int32_t
buildCreateTbReq
(
SVCreateTbReq
*
pTbReq
,
const
char
*
tname
,
SKVRow
row
,
int64_t
suid
)
{
pTbReq
->
type
=
TD_CHILD_TABLE
;
pTbReq
->
type
=
TD_CHILD_TABLE
;
pTbReq
->
name
=
strdup
(
tname
);
pTbReq
->
name
=
strdup
(
tname
);
pTbReq
->
ctb
.
suid
=
suid
;
pTbReq
->
ctb
.
suid
=
suid
;
...
@@ -842,8 +836,9 @@ static int32_t storeTableMeta(SInsertParseContext* pCxt, SHashObj* pHash, SName*
...
@@ -842,8 +836,9 @@ static int32_t storeTableMeta(SInsertParseContext* pCxt, SHashObj* pHash, SName*
catalogGetTableHashVgroup
(
pBasicCtx
->
pCatalog
,
pBasicCtx
->
pTransporter
,
&
pBasicCtx
->
mgmtEpSet
,
pTableName
,
&
vg
));
catalogGetTableHashVgroup
(
pBasicCtx
->
pCatalog
,
pBasicCtx
->
pTransporter
,
&
pBasicCtx
->
mgmtEpSet
,
pTableName
,
&
vg
));
CHECK_CODE
(
taosHashPut
(
pCxt
->
pVgroupsHashObj
,
(
const
char
*
)
&
vg
.
vgId
,
sizeof
(
vg
.
vgId
),
(
char
*
)
&
vg
,
sizeof
(
vg
)));
CHECK_CODE
(
taosHashPut
(
pCxt
->
pVgroupsHashObj
,
(
const
char
*
)
&
vg
.
vgId
,
sizeof
(
vg
.
vgId
),
(
char
*
)
&
vg
,
sizeof
(
vg
)));
pMeta
->
uid
=
tGenIdPI64
()
;
pMeta
->
uid
=
0
;
pMeta
->
vgId
=
vg
.
vgId
;
pMeta
->
vgId
=
vg
.
vgId
;
pMeta
->
tableType
=
TSDB_CHILD_TABLE
;
STableMeta
*
pBackup
=
NULL
;
STableMeta
*
pBackup
=
NULL
;
if
(
TSDB_CODE_SUCCESS
!=
cloneTableMeta
(
pMeta
,
&
pBackup
))
{
if
(
TSDB_CODE_SUCCESS
!=
cloneTableMeta
(
pMeta
,
&
pBackup
))
{
...
@@ -853,11 +848,7 @@ static int32_t storeTableMeta(SInsertParseContext* pCxt, SHashObj* pHash, SName*
...
@@ -853,11 +848,7 @@ static int32_t storeTableMeta(SInsertParseContext* pCxt, SHashObj* pHash, SName*
}
}
// pSql -> stb_name [(tag1_name, ...)] TAGS (tag1_value, ...)
// pSql -> stb_name [(tag1_name, ...)] TAGS (tag1_value, ...)
static
int32_t
parseUsingClause
(
SInsertParseContext
*
pCxt
,
SToken
*
pTbnameToken
)
{
static
int32_t
parseUsingClause
(
SInsertParseContext
*
pCxt
,
SName
*
name
,
char
*
tbFName
)
{
SName
name
;
createSName
(
&
name
,
pTbnameToken
,
pCxt
->
pComCxt
->
acctId
,
pCxt
->
pComCxt
->
db
,
&
pCxt
->
msg
);
char
tbFName
[
TSDB_TABLE_FNAME_LEN
];
tNameExtractFullName
(
&
name
,
tbFName
);
int32_t
len
=
strlen
(
tbFName
);
int32_t
len
=
strlen
(
tbFName
);
STableMeta
**
pMeta
=
taosHashGet
(
pCxt
->
pSubTableHashObj
,
tbFName
,
len
);
STableMeta
**
pMeta
=
taosHashGet
(
pCxt
->
pSubTableHashObj
,
tbFName
,
len
);
if
(
NULL
!=
pMeta
)
{
if
(
NULL
!=
pMeta
)
{
...
@@ -867,11 +858,17 @@ static int32_t parseUsingClause(SInsertParseContext* pCxt, SToken* pTbnameToken)
...
@@ -867,11 +858,17 @@ static int32_t parseUsingClause(SInsertParseContext* pCxt, SToken* pTbnameToken)
SToken
sToken
;
SToken
sToken
;
// pSql -> stb_name [(tag1_name, ...)] TAGS (tag1_value, ...)
// pSql -> stb_name [(tag1_name, ...)] TAGS (tag1_value, ...)
NEXT_TOKEN
(
pCxt
->
pSql
,
sToken
);
NEXT_TOKEN
(
pCxt
->
pSql
,
sToken
);
CHECK_CODE
(
getSTableMeta
(
pCxt
,
&
sToken
));
SName
sname
;
createSName
(
&
sname
,
&
sToken
,
pCxt
->
pComCxt
->
acctId
,
pCxt
->
pComCxt
->
db
,
&
pCxt
->
msg
);
char
stbFName
[
TSDB_TABLE_FNAME_LEN
];
tNameExtractFullName
(
&
sname
,
stbFName
);
CHECK_CODE
(
getSTableMeta
(
pCxt
,
&
sname
,
stbFName
));
if
(
TSDB_SUPER_TABLE
!=
pCxt
->
pTableMeta
->
tableType
)
{
if
(
TSDB_SUPER_TABLE
!=
pCxt
->
pTableMeta
->
tableType
)
{
return
buildInvalidOperationMsg
(
&
pCxt
->
msg
,
"create table only from super table is allowed"
);
return
buildInvalidOperationMsg
(
&
pCxt
->
msg
,
"create table only from super table is allowed"
);
}
}
CHECK_CODE
(
storeTableMeta
(
pCxt
,
pCxt
->
pSubTableHashObj
,
&
name
,
tbFName
,
len
,
pCxt
->
pTableMeta
));
CHECK_CODE
(
storeTableMeta
(
pCxt
,
pCxt
->
pSubTableHashObj
,
name
,
tbFName
,
len
,
pCxt
->
pTableMeta
));
SSchema
*
pTagsSchema
=
getTableTagSchema
(
pCxt
->
pTableMeta
);
SSchema
*
pTagsSchema
=
getTableTagSchema
(
pCxt
->
pTableMeta
);
setBoundColumnInfo
(
&
pCxt
->
tags
,
pTagsSchema
,
getNumOfTags
(
pCxt
->
pTableMeta
));
setBoundColumnInfo
(
&
pCxt
->
tags
,
pTagsSchema
,
getNumOfTags
(
pCxt
->
pTableMeta
));
...
@@ -891,7 +888,7 @@ static int32_t parseUsingClause(SInsertParseContext* pCxt, SToken* pTbnameToken)
...
@@ -891,7 +888,7 @@ static int32_t parseUsingClause(SInsertParseContext* pCxt, SToken* pTbnameToken)
if
(
TK_NK_LP
!=
sToken
.
type
)
{
if
(
TK_NK_LP
!=
sToken
.
type
)
{
return
buildSyntaxErrMsg
(
&
pCxt
->
msg
,
"( is expected"
,
sToken
.
z
);
return
buildSyntaxErrMsg
(
&
pCxt
->
msg
,
"( is expected"
,
sToken
.
z
);
}
}
CHECK_CODE
(
parseTagsClause
(
pCxt
,
pCxt
->
pTableMeta
->
schema
,
getTableInfo
(
pCxt
->
pTableMeta
).
precision
,
name
.
tname
));
CHECK_CODE
(
parseTagsClause
(
pCxt
,
pCxt
->
pTableMeta
->
schema
,
getTableInfo
(
pCxt
->
pTableMeta
).
precision
,
name
->
tname
));
NEXT_TOKEN
(
pCxt
->
pSql
,
sToken
);
NEXT_TOKEN
(
pCxt
->
pSql
,
sToken
);
if
(
TK_NK_RP
!=
sToken
.
type
)
{
if
(
TK_NK_RP
!=
sToken
.
type
)
{
return
buildSyntaxErrMsg
(
&
pCxt
->
msg
,
") is expected"
,
sToken
.
z
);
return
buildSyntaxErrMsg
(
&
pCxt
->
msg
,
") is expected"
,
sToken
.
z
);
...
@@ -1066,6 +1063,8 @@ static void destroyInsertParseContext(SInsertParseContext* pCxt) {
...
@@ -1066,6 +1063,8 @@ static void destroyInsertParseContext(SInsertParseContext* pCxt) {
// [...];
// [...];
static
int32_t
parseInsertBody
(
SInsertParseContext
*
pCxt
)
{
static
int32_t
parseInsertBody
(
SInsertParseContext
*
pCxt
)
{
int32_t
tbNum
=
0
;
int32_t
tbNum
=
0
;
char
tbFName
[
TSDB_TABLE_FNAME_LEN
];
bool
autoCreateTbl
=
false
;
// for each table
// for each table
while
(
1
)
{
while
(
1
)
{
...
@@ -1103,16 +1102,21 @@ static int32_t parseInsertBody(SInsertParseContext* pCxt) {
...
@@ -1103,16 +1102,21 @@ static int32_t parseInsertBody(SInsertParseContext* pCxt) {
SToken
tbnameToken
=
sToken
;
SToken
tbnameToken
=
sToken
;
NEXT_TOKEN
(
pCxt
->
pSql
,
sToken
);
NEXT_TOKEN
(
pCxt
->
pSql
,
sToken
);
SName
name
;
createSName
(
&
name
,
&
tbnameToken
,
pCxt
->
pComCxt
->
acctId
,
pCxt
->
pComCxt
->
db
,
&
pCxt
->
msg
);
tNameExtractFullName
(
&
name
,
tbFName
);
// USING cluase
// USING cluase
if
(
TK_USING
==
sToken
.
type
)
{
if
(
TK_USING
==
sToken
.
type
)
{
CHECK_CODE
(
parseUsingClause
(
pCxt
,
&
tbnameToken
));
CHECK_CODE
(
parseUsingClause
(
pCxt
,
&
name
,
tbFName
));
NEXT_TOKEN
(
pCxt
->
pSql
,
sToken
);
NEXT_TOKEN
(
pCxt
->
pSql
,
sToken
);
autoCreateTbl
=
true
;
}
else
{
}
else
{
CHECK_CODE
(
getTableMeta
(
pCxt
,
&
tbnameToken
));
CHECK_CODE
(
getTableMeta
(
pCxt
,
&
name
,
tbFName
));
}
}
STableDataBlocks
*
dataBuf
=
NULL
;
STableDataBlocks
*
dataBuf
=
NULL
;
CHECK_CODE
(
getDataBlockFromList
(
pCxt
->
pTableBlockHashObj
,
pCxt
->
pTableMeta
->
uid
,
TSDB_DEFAULT_PAYLOAD_SIZE
,
CHECK_CODE
(
getDataBlockFromList
(
pCxt
->
pTableBlockHashObj
,
tbFName
,
strlen
(
tbFName
)
,
TSDB_DEFAULT_PAYLOAD_SIZE
,
sizeof
(
SSubmitBlk
),
getTableInfo
(
pCxt
->
pTableMeta
).
rowSize
,
pCxt
->
pTableMeta
,
sizeof
(
SSubmitBlk
),
getTableInfo
(
pCxt
->
pTableMeta
).
rowSize
,
pCxt
->
pTableMeta
,
&
dataBuf
,
NULL
,
&
pCxt
->
createTblReq
));
&
dataBuf
,
NULL
,
&
pCxt
->
createTblReq
));
...
@@ -1154,10 +1158,9 @@ static int32_t parseInsertBody(SInsertParseContext* pCxt) {
...
@@ -1154,10 +1158,9 @@ static int32_t parseInsertBody(SInsertParseContext* pCxt) {
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
}
memcpy
(
tags
,
&
pCxt
->
tags
,
sizeof
(
pCxt
->
tags
));
memcpy
(
tags
,
&
pCxt
->
tags
,
sizeof
(
pCxt
->
tags
));
(
*
pCxt
->
pStmtCb
->
setBindInfoFn
)(
pCxt
->
pStmtCb
->
pStmt
,
pCxt
->
pTableMeta
,
tags
);
(
*
pCxt
->
pStmtCb
->
setInfoFn
)(
pCxt
->
pStmtCb
->
pStmt
,
pCxt
->
pTableMeta
,
tags
,
tbFName
,
autoCreateTbl
,
pCxt
->
pVgroupsHashObj
,
pCxt
->
pTableBlockHashObj
);
memset
(
&
pCxt
->
tags
,
0
,
sizeof
(
pCxt
->
tags
));
(
*
pCxt
->
pStmtCb
->
setExecInfoFn
)(
pCxt
->
pStmtCb
->
pStmt
,
pCxt
->
pVgroupsHashObj
,
pCxt
->
pTableBlockHashObj
);
memset
(
&
pCxt
->
tags
,
0
,
sizeof
(
pCxt
->
tags
)
);
pCxt
->
pVgroupsHashObj
=
NULL
;
pCxt
->
pVgroupsHashObj
=
NULL
;
pCxt
->
pTableBlockHashObj
=
NULL
;
pCxt
->
pTableBlockHashObj
=
NULL
;
pCxt
->
pTableMeta
=
NULL
;
pCxt
->
pTableMeta
=
NULL
;
...
@@ -1194,7 +1197,7 @@ int32_t parseInsertSql(SParseContext* pContext, SQuery** pQuery) {
...
@@ -1194,7 +1197,7 @@ int32_t parseInsertSql(SParseContext* pContext, SQuery** pQuery) {
&
context
.
pTableBlockHashObj
);
&
context
.
pTableBlockHashObj
);
}
else
{
}
else
{
context
.
pVgroupsHashObj
=
taosHashInit
(
128
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_INT
),
true
,
false
);
context
.
pVgroupsHashObj
=
taosHashInit
(
128
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_INT
),
true
,
false
);
context
.
pTableBlockHashObj
=
taosHashInit
(
128
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BI
GINT
),
true
,
false
);
context
.
pTableBlockHashObj
=
taosHashInit
(
128
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BI
NARY
),
true
,
false
);
}
}
if
(
NULL
==
context
.
pVgroupsHashObj
||
NULL
==
context
.
pTableBlockHashObj
||
NULL
==
context
.
pSubTableHashObj
||
if
(
NULL
==
context
.
pVgroupsHashObj
||
NULL
==
context
.
pTableBlockHashObj
||
NULL
==
context
.
pSubTableHashObj
||
...
@@ -1273,8 +1276,9 @@ int32_t qBuildStmtOutput(SQuery* pQuery, SHashObj* pVgHash, SHashObj* pBlockHash
...
@@ -1273,8 +1276,9 @@ int32_t qBuildStmtOutput(SQuery* pQuery, SHashObj* pVgHash, SHashObj* pBlockHash
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int32_t
qBindStmtTagsValue
(
void
*
pBlock
,
void
*
boundTags
,
int64_t
suid
,
char
*
tName
,
TAOS_MULTI_BIND
*
bind
,
char
*
msgBuf
,
int32_t
msgBufLen
){
int32_t
qBindStmtTagsValue
(
void
*
pBlock
,
void
*
boundTags
,
int64_t
suid
,
char
*
tName
,
TAOS_MULTI_BIND
*
bind
,
STableDataBlocks
*
pDataBlock
=
(
STableDataBlocks
*
)
pBlock
;
char
*
msgBuf
,
int32_t
msgBufLen
)
{
STableDataBlocks
*
pDataBlock
=
(
STableDataBlocks
*
)
pBlock
;
SMsgBuf
pBuf
=
{.
buf
=
msgBuf
,
.
len
=
msgBufLen
};
SMsgBuf
pBuf
=
{.
buf
=
msgBuf
,
.
len
=
msgBufLen
};
SParsedDataColInfo
*
tags
=
(
SParsedDataColInfo
*
)
boundTags
;
SParsedDataColInfo
*
tags
=
(
SParsedDataColInfo
*
)
boundTags
;
if
(
NULL
==
tags
)
{
if
(
NULL
==
tags
)
{
...
@@ -1389,7 +1393,6 @@ int32_t qBindStmtColsValue(void* pBlock, TAOS_MULTI_BIND* bind, char* msgBuf, in
...
@@ -1389,7 +1393,6 @@ int32_t qBindStmtColsValue(void* pBlock, TAOS_MULTI_BIND* bind, char* msgBuf, in
tdSRowPrint
(
row
,
pSTSchema
,
__func__
);
tdSRowPrint
(
row
,
pSTSchema
,
__func__
);
taosMemoryFree
(
pSTSchema
);
taosMemoryFree
(
pSTSchema
);
#endif
#endif
pDataBlock
->
size
+=
extendedRowSize
;
pDataBlock
->
size
+=
extendedRowSize
;
}
}
...
@@ -1476,6 +1479,7 @@ int32_t qBindStmtSingleColValue(void* pBlock, TAOS_MULTI_BIND* bind, char* msgBu
...
@@ -1476,6 +1479,7 @@ int32_t qBindStmtSingleColValue(void* pBlock, TAOS_MULTI_BIND* bind, char* msgBu
taosMemoryFree
(
pSTSchema
);
taosMemoryFree
(
pSTSchema
);
}
}
#endif
#endif
}
}
if
(
rowEnd
)
{
if
(
rowEnd
)
{
...
@@ -1559,7 +1563,7 @@ typedef struct SmlExecHandle {
...
@@ -1559,7 +1563,7 @@ typedef struct SmlExecHandle {
SQuery
*
pQuery
;
SQuery
*
pQuery
;
}
SSmlExecHandle
;
}
SSmlExecHandle
;
static
int32_t
smlBoundColumnData
(
SArray
*
cols
,
SParsedDataColInfo
*
pColList
,
SSchema
*
pSchema
)
{
static
int32_t
smlBoundColumnData
(
SArray
*
cols
,
SParsedDataColInfo
*
pColList
,
SSchema
*
pSchema
)
{
col_id_t
nCols
=
pColList
->
numOfCols
;
col_id_t
nCols
=
pColList
->
numOfCols
;
pColList
->
numOfBound
=
0
;
pColList
->
numOfBound
=
0
;
...
@@ -1572,8 +1576,8 @@ static int32_t smlBoundColumnData(SArray *cols, SParsedDataColInfo* pColList, SS
...
@@ -1572,8 +1576,8 @@ static int32_t smlBoundColumnData(SArray *cols, SParsedDataColInfo* pColList, SS
bool
isOrdered
=
true
;
bool
isOrdered
=
true
;
col_id_t
lastColIdx
=
-
1
;
// last column found
col_id_t
lastColIdx
=
-
1
;
// last column found
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
cols
);
++
i
)
{
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
cols
);
++
i
)
{
SSmlKv
*
kv
=
taosArrayGetP
(
cols
,
i
);
SSmlKv
*
kv
=
taosArrayGetP
(
cols
,
i
);
SToken
sToken
=
{.
n
=
kv
->
keyLen
,
.
z
=
(
char
*
)
kv
->
key
};
SToken
sToken
=
{.
n
=
kv
->
keyLen
,
.
z
=
(
char
*
)
kv
->
key
};
col_id_t
t
=
lastColIdx
+
1
;
col_id_t
t
=
lastColIdx
+
1
;
col_id_t
index
=
findCol
(
&
sToken
,
t
,
nCols
,
pSchema
);
col_id_t
index
=
findCol
(
&
sToken
,
t
,
nCols
,
pSchema
);
if
(
index
<
0
&&
t
>
0
)
{
if
(
index
<
0
&&
t
>
0
)
{
...
@@ -1622,7 +1626,7 @@ static int32_t smlBoundColumnData(SArray *cols, SParsedDataColInfo* pColList, SS
...
@@ -1622,7 +1626,7 @@ static int32_t smlBoundColumnData(SArray *cols, SParsedDataColInfo* pColList, SS
qsort
(
pColIdx
,
pColList
->
numOfBound
,
sizeof
(
SBoundIdxInfo
),
boundIdxCompar
);
qsort
(
pColIdx
,
pColList
->
numOfBound
,
sizeof
(
SBoundIdxInfo
),
boundIdxCompar
);
}
}
if
(
pColList
->
numOfCols
>
pColList
->
numOfBound
)
{
if
(
pColList
->
numOfCols
>
pColList
->
numOfBound
)
{
memset
(
&
pColList
->
boundColumns
[
pColList
->
numOfBound
],
0
,
memset
(
&
pColList
->
boundColumns
[
pColList
->
numOfBound
],
0
,
sizeof
(
col_id_t
)
*
(
pColList
->
numOfCols
-
pColList
->
numOfBound
));
sizeof
(
col_id_t
)
*
(
pColList
->
numOfCols
-
pColList
->
numOfBound
));
}
}
...
@@ -1630,7 +1634,8 @@ static int32_t smlBoundColumnData(SArray *cols, SParsedDataColInfo* pColList, SS
...
@@ -1630,7 +1634,8 @@ static int32_t smlBoundColumnData(SArray *cols, SParsedDataColInfo* pColList, SS
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
int32_t
smlBuildTagRow
(
SArray
*
cols
,
SKVRowBuilder
*
tagsBuilder
,
SParsedDataColInfo
*
tags
,
SSchema
*
pSchema
,
SKVRow
*
row
,
SMsgBuf
*
msg
)
{
static
int32_t
smlBuildTagRow
(
SArray
*
cols
,
SKVRowBuilder
*
tagsBuilder
,
SParsedDataColInfo
*
tags
,
SSchema
*
pSchema
,
SKVRow
*
row
,
SMsgBuf
*
msg
)
{
if
(
tdInitKVRowBuilder
(
tagsBuilder
)
<
0
)
{
if
(
tdInitKVRowBuilder
(
tagsBuilder
)
<
0
)
{
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
}
...
@@ -1639,41 +1644,40 @@ static int32_t smlBuildTagRow(SArray *cols, SKVRowBuilder *tagsBuilder, SParsedD
...
@@ -1639,41 +1644,40 @@ static int32_t smlBuildTagRow(SArray *cols, SKVRowBuilder *tagsBuilder, SParsedD
for
(
int
i
=
0
;
i
<
tags
->
numOfBound
;
++
i
)
{
for
(
int
i
=
0
;
i
<
tags
->
numOfBound
;
++
i
)
{
SSchema
*
pTagSchema
=
&
pSchema
[
tags
->
boundColumns
[
i
]
-
1
];
// colId starts with 1
SSchema
*
pTagSchema
=
&
pSchema
[
tags
->
boundColumns
[
i
]
-
1
];
// colId starts with 1
param
.
schema
=
pTagSchema
;
param
.
schema
=
pTagSchema
;
SSmlKv
*
kv
=
taosArrayGetP
(
cols
,
i
);
SSmlKv
*
kv
=
taosArrayGetP
(
cols
,
i
);
KvRowAppend
(
msg
,
kv
->
value
,
kv
->
valueLen
,
&
param
)
;
KvRowAppend
(
msg
,
kv
->
value
,
kv
->
valueLen
,
&
param
);
}
}
*
row
=
tdGetKVRowFromBuilder
(
tagsBuilder
);
*
row
=
tdGetKVRowFromBuilder
(
tagsBuilder
);
if
(
*
row
==
NULL
)
{
if
(
*
row
==
NULL
)
{
return
TSDB_CODE_SML_INVALID_DATA
;
return
TSDB_CODE_SML_INVALID_DATA
;
}
}
tdSortKVRowByColIdx
(
*
row
);
tdSortKVRowByColIdx
(
*
row
);
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int32_t
smlBindData
(
void
*
handle
,
SArray
*
tags
,
SArray
*
colsFormat
,
SArray
*
colsSchema
,
SArray
*
cols
,
bool
format
,
int32_t
smlBindData
(
void
*
handle
,
SArray
*
tags
,
SArray
*
colsFormat
,
SArray
*
colsSchema
,
SArray
*
cols
,
bool
format
,
STableMeta
*
pTableMeta
,
char
*
tableName
,
char
*
msgBuf
,
int16_t
msgBufLen
)
{
STableMeta
*
pTableMeta
,
char
*
tableName
,
char
*
msgBuf
,
int16_t
msgBufLen
)
{
SMsgBuf
pBuf
=
{.
buf
=
msgBuf
,
.
len
=
msgBufLen
};
SMsgBuf
pBuf
=
{.
buf
=
msgBuf
,
.
len
=
msgBufLen
};
SSmlExecHandle
*
smlHandle
=
(
SSmlExecHandle
*
)
handle
;
SSmlExecHandle
*
smlHandle
=
(
SSmlExecHandle
*
)
handle
;
SSchema
*
pTagsSchema
=
getTableTagSchema
(
pTableMeta
);
SSchema
*
pTagsSchema
=
getTableTagSchema
(
pTableMeta
);
setBoundColumnInfo
(
&
smlHandle
->
tags
,
pTagsSchema
,
getNumOfTags
(
pTableMeta
));
setBoundColumnInfo
(
&
smlHandle
->
tags
,
pTagsSchema
,
getNumOfTags
(
pTableMeta
));
int
ret
=
smlBoundColumnData
(
tags
,
&
smlHandle
->
tags
,
pTagsSchema
);
int
ret
=
smlBoundColumnData
(
tags
,
&
smlHandle
->
tags
,
pTagsSchema
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
buildInvalidOperationMsg
(
&
pBuf
,
"bound tags error"
);
buildInvalidOperationMsg
(
&
pBuf
,
"bound tags error"
);
return
ret
;
return
ret
;
}
}
SKVRow
row
=
NULL
;
SKVRow
row
=
NULL
;
ret
=
smlBuildTagRow
(
tags
,
&
smlHandle
->
tagsBuilder
,
&
smlHandle
->
tags
,
pTagsSchema
,
&
row
,
&
pBuf
);
ret
=
smlBuildTagRow
(
tags
,
&
smlHandle
->
tagsBuilder
,
&
smlHandle
->
tags
,
pTagsSchema
,
&
row
,
&
pBuf
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
return
ret
;
return
ret
;
}
}
buildCreateTbReq
(
&
smlHandle
->
createTblReq
,
tableName
,
row
,
pTableMeta
->
suid
);
buildCreateTbReq
(
&
smlHandle
->
createTblReq
,
tableName
,
row
,
pTableMeta
->
suid
);
STableDataBlocks
*
pDataBlock
=
NULL
;
STableDataBlocks
*
pDataBlock
=
NULL
;
ret
=
getDataBlockFromList
(
smlHandle
->
pBlockHash
,
pTableMeta
->
uid
,
TSDB_DEFAULT_PAYLOAD_SIZE
,
ret
=
getDataBlockFromList
(
smlHandle
->
pBlockHash
,
&
pTableMeta
->
uid
,
sizeof
(
pTableMeta
->
uid
)
,
TSDB_DEFAULT_PAYLOAD_SIZE
,
sizeof
(
SSubmitBlk
),
getTableInfo
(
pTableMeta
).
rowSize
,
pTableMeta
,
sizeof
(
SSubmitBlk
),
getTableInfo
(
pTableMeta
).
rowSize
,
pTableMeta
,
&
pDataBlock
,
NULL
,
&
smlHandle
->
createTblReq
);
&
pDataBlock
,
NULL
,
&
smlHandle
->
createTblReq
);
if
(
ret
!=
TSDB_CODE_SUCCESS
){
if
(
ret
!=
TSDB_CODE_SUCCESS
){
...
@@ -1684,7 +1688,7 @@ int32_t smlBindData(void *handle, SArray *tags, SArray *colsFormat, SArray *cols
...
@@ -1684,7 +1688,7 @@ int32_t smlBindData(void *handle, SArray *tags, SArray *colsFormat, SArray *cols
SSchema
*
pSchema
=
getTableColumnSchema
(
pTableMeta
);
SSchema
*
pSchema
=
getTableColumnSchema
(
pTableMeta
);
ret
=
smlBoundColumnData
(
colsSchema
,
&
pDataBlock
->
boundColumnInfo
,
pSchema
);
ret
=
smlBoundColumnData
(
colsSchema
,
&
pDataBlock
->
boundColumnInfo
,
pSchema
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
buildInvalidOperationMsg
(
&
pBuf
,
"bound cols error"
);
buildInvalidOperationMsg
(
&
pBuf
,
"bound cols error"
);
return
ret
;
return
ret
;
}
}
...
@@ -1696,23 +1700,23 @@ int32_t smlBindData(void *handle, SArray *tags, SArray *colsFormat, SArray *cols
...
@@ -1696,23 +1700,23 @@ int32_t smlBindData(void *handle, SArray *tags, SArray *colsFormat, SArray *cols
initRowBuilder
(
&
pDataBlock
->
rowBuilder
,
pDataBlock
->
pTableMeta
->
sversion
,
&
pDataBlock
->
boundColumnInfo
);
initRowBuilder
(
&
pDataBlock
->
rowBuilder
,
pDataBlock
->
pTableMeta
->
sversion
,
&
pDataBlock
->
boundColumnInfo
);
int32_t
rowNum
=
format
?
taosArrayGetSize
(
colsFormat
)
:
taosArrayGetSize
(
cols
);
int32_t
rowNum
=
format
?
taosArrayGetSize
(
colsFormat
)
:
taosArrayGetSize
(
cols
);
if
(
rowNum
<=
0
)
{
if
(
rowNum
<=
0
)
{
return
buildInvalidOperationMsg
(
&
pBuf
,
"cols size <= 0"
);
return
buildInvalidOperationMsg
(
&
pBuf
,
"cols size <= 0"
);
}
}
ret
=
allocateMemForSize
(
pDataBlock
,
extendedRowSize
*
rowNum
);
ret
=
allocateMemForSize
(
pDataBlock
,
extendedRowSize
*
rowNum
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
buildInvalidOperationMsg
(
&
pBuf
,
"allocate memory error"
);
buildInvalidOperationMsg
(
&
pBuf
,
"allocate memory error"
);
return
ret
;
return
ret
;
}
}
for
(
int32_t
r
=
0
;
r
<
rowNum
;
++
r
)
{
for
(
int32_t
r
=
0
;
r
<
rowNum
;
++
r
)
{
STSRow
*
row
=
(
STSRow
*
)(
pDataBlock
->
pData
+
pDataBlock
->
size
);
// skip the SSubmitBlk header
STSRow
*
row
=
(
STSRow
*
)(
pDataBlock
->
pData
+
pDataBlock
->
size
);
// skip the SSubmitBlk header
tdSRowResetBuf
(
pBuilder
,
row
);
tdSRowResetBuf
(
pBuilder
,
row
);
void
*
rowData
=
NULL
;
void
*
rowData
=
NULL
;
size_t
rowDataSize
=
0
;
size_t
rowDataSize
=
0
;
if
(
format
)
{
if
(
format
)
{
rowData
=
taosArrayGetP
(
colsFormat
,
r
);
rowData
=
taosArrayGetP
(
colsFormat
,
r
);
rowDataSize
=
taosArrayGetSize
(
rowData
);
rowDataSize
=
taosArrayGetSize
(
rowData
);
}
else
{
}
else
{
rowData
=
taosArrayGetP
(
cols
,
r
);
rowData
=
taosArrayGetP
(
cols
,
r
);
}
}
...
@@ -1723,19 +1727,20 @@ int32_t smlBindData(void *handle, SArray *tags, SArray *colsFormat, SArray *cols
...
@@ -1723,19 +1727,20 @@ int32_t smlBindData(void *handle, SArray *tags, SArray *colsFormat, SArray *cols
param
.
schema
=
pColSchema
;
param
.
schema
=
pColSchema
;
getSTSRowAppendInfo
(
pBuilder
->
rowType
,
spd
,
c
,
&
param
.
toffset
,
&
param
.
colIdx
);
getSTSRowAppendInfo
(
pBuilder
->
rowType
,
spd
,
c
,
&
param
.
toffset
,
&
param
.
colIdx
);
SSmlKv
*
kv
=
NULL
;
SSmlKv
*
kv
=
NULL
;
if
(
format
)
{
if
(
format
)
{
if
(
j
<
rowDataSize
)
{
if
(
j
<
rowDataSize
)
{
kv
=
taosArrayGetP
(
rowData
,
j
);
kv
=
taosArrayGetP
(
rowData
,
j
);
if
(
rowDataSize
!=
spd
->
numOfBound
&&
(
kv
->
keyLen
!=
strlen
(
pColSchema
->
name
)
||
strncmp
(
kv
->
key
,
pColSchema
->
name
,
kv
->
keyLen
)
!=
0
)){
if
(
rowDataSize
!=
spd
->
numOfBound
&&
(
kv
->
keyLen
!=
strlen
(
pColSchema
->
name
)
||
strncmp
(
kv
->
key
,
pColSchema
->
name
,
kv
->
keyLen
)
!=
0
))
{
kv
=
NULL
;
kv
=
NULL
;
}
else
{
}
else
{
j
++
;
j
++
;
}
}
}
}
}
else
{
}
else
{
void
**
p
=
taosHashGet
(
rowData
,
pColSchema
->
name
,
strlen
(
pColSchema
->
name
));
void
**
p
=
taosHashGet
(
rowData
,
pColSchema
->
name
,
strlen
(
pColSchema
->
name
));
if
(
p
)
kv
=
*
p
;
if
(
p
)
kv
=
*
p
;
}
}
if
(
!
kv
||
kv
->
length
==
0
)
{
if
(
!
kv
||
kv
->
length
==
0
)
{
...
@@ -1744,7 +1749,7 @@ int32_t smlBindData(void *handle, SArray *tags, SArray *colsFormat, SArray *cols
...
@@ -1744,7 +1749,7 @@ int32_t smlBindData(void *handle, SArray *tags, SArray *colsFormat, SArray *cols
int32_t
colLen
=
pColSchema
->
bytes
;
int32_t
colLen
=
pColSchema
->
bytes
;
if
(
IS_VAR_DATA_TYPE
(
pColSchema
->
type
))
{
if
(
IS_VAR_DATA_TYPE
(
pColSchema
->
type
))
{
colLen
=
kv
->
length
;
colLen
=
kv
->
length
;
}
else
if
(
pColSchema
->
type
==
TSDB_DATA_TYPE_TIMESTAMP
)
{
}
else
if
(
pColSchema
->
type
==
TSDB_DATA_TYPE_TIMESTAMP
)
{
kv
->
i
=
convertTimePrecision
(
kv
->
i
,
TSDB_TIME_PRECISION_NANO
,
pTableMeta
->
tableInfo
.
precision
);
kv
->
i
=
convertTimePrecision
(
kv
->
i
,
TSDB_TIME_PRECISION_NANO
,
pTableMeta
->
tableInfo
.
precision
);
}
}
...
@@ -1753,7 +1758,7 @@ int32_t smlBindData(void *handle, SArray *tags, SArray *colsFormat, SArray *cols
...
@@ -1753,7 +1758,7 @@ int32_t smlBindData(void *handle, SArray *tags, SArray *colsFormat, SArray *cols
if
(
PRIMARYKEY_TIMESTAMP_COL_ID
==
pColSchema
->
colId
)
{
if
(
PRIMARYKEY_TIMESTAMP_COL_ID
==
pColSchema
->
colId
)
{
TSKEY
tsKey
=
TD_ROW_KEY
(
row
);
TSKEY
tsKey
=
TD_ROW_KEY
(
row
);
checkTimestamp
(
pDataBlock
,
(
const
char
*
)
&
tsKey
);
checkTimestamp
(
pDataBlock
,
(
const
char
*
)
&
tsKey
);
}
}
}
}
...
@@ -1770,7 +1775,7 @@ int32_t smlBindData(void *handle, SArray *tags, SArray *colsFormat, SArray *cols
...
@@ -1770,7 +1775,7 @@ int32_t smlBindData(void *handle, SArray *tags, SArray *colsFormat, SArray *cols
pDataBlock
->
size
+=
extendedRowSize
;
pDataBlock
->
size
+=
extendedRowSize
;
}
}
SSubmitBlk
*
pBlocks
=
(
SSubmitBlk
*
)(
pDataBlock
->
pData
);
SSubmitBlk
*
pBlocks
=
(
SSubmitBlk
*
)(
pDataBlock
->
pData
);
if
(
TSDB_CODE_SUCCESS
!=
setBlockInfo
(
pBlocks
,
pDataBlock
,
rowNum
))
{
if
(
TSDB_CODE_SUCCESS
!=
setBlockInfo
(
pBlocks
,
pDataBlock
,
rowNum
))
{
return
buildInvalidOperationMsg
(
&
pBuf
,
"too many rows in sql, total number of rows should be less than 32767"
);
return
buildInvalidOperationMsg
(
&
pBuf
,
"too many rows in sql, total number of rows should be less than 32767"
);
}
}
...
@@ -1778,25 +1783,24 @@ int32_t smlBindData(void *handle, SArray *tags, SArray *colsFormat, SArray *cols
...
@@ -1778,25 +1783,24 @@ int32_t smlBindData(void *handle, SArray *tags, SArray *colsFormat, SArray *cols
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
void
*
smlInitHandle
(
SQuery
*
pQuery
)
{
void
*
smlInitHandle
(
SQuery
*
pQuery
)
{
SSmlExecHandle
*
handle
=
taosMemoryCalloc
(
1
,
sizeof
(
SSmlExecHandle
));
SSmlExecHandle
*
handle
=
taosMemoryCalloc
(
1
,
sizeof
(
SSmlExecHandle
));
if
(
!
handle
)
return
NULL
;
if
(
!
handle
)
return
NULL
;
handle
->
pBlockHash
=
taosHashInit
(
16
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BIGINT
),
true
,
false
);
handle
->
pBlockHash
=
taosHashInit
(
16
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BIGINT
),
true
,
false
);
handle
->
pQuery
=
pQuery
;
handle
->
pQuery
=
pQuery
;
return
handle
;
return
handle
;
}
}
void
smlDestroyHandle
(
void
*
pHandle
)
{
void
smlDestroyHandle
(
void
*
pHandle
)
{
if
(
!
pHandle
)
return
;
if
(
!
pHandle
)
return
;
SSmlExecHandle
*
handle
=
(
SSmlExecHandle
*
)
pHandle
;
SSmlExecHandle
*
handle
=
(
SSmlExecHandle
*
)
pHandle
;
destroyBlockHashmap
(
handle
->
pBlockHash
);
destroyBlockHashmap
(
handle
->
pBlockHash
);
taosMemoryFree
(
handle
);
taosMemoryFree
(
handle
);
}
}
int32_t
smlBuildOutput
(
void
*
handle
,
SHashObj
*
pVgHash
)
{
int32_t
smlBuildOutput
(
void
*
handle
,
SHashObj
*
pVgHash
)
{
SSmlExecHandle
*
smlHandle
=
(
SSmlExecHandle
*
)
handle
;
SSmlExecHandle
*
smlHandle
=
(
SSmlExecHandle
*
)
handle
;
return
qBuildStmtOutput
(
smlHandle
->
pQuery
,
pVgHash
,
smlHandle
->
pBlockHash
);
return
qBuildStmtOutput
(
smlHandle
->
pQuery
,
pVgHash
,
smlHandle
->
pBlockHash
);
}
}
// schemaless logic end
// schemaless logic end
source/libs/parser/src/parInsertData.c
浏览文件 @
ed1a71f1
...
@@ -185,11 +185,11 @@ int32_t buildCreateTbMsg(STableDataBlocks* pBlocks, SVCreateTbReq* pCreateTbReq)
...
@@ -185,11 +185,11 @@ int32_t buildCreateTbMsg(STableDataBlocks* pBlocks, SVCreateTbReq* pCreateTbReq)
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int32_t
getDataBlockFromList
(
SHashObj
*
pHashList
,
int64_t
id
,
int32_t
size
,
int32_t
startOffset
,
int32_t
rowSize
,
int32_t
getDataBlockFromList
(
SHashObj
*
pHashList
,
void
*
id
,
int32_t
idLen
,
int32_t
size
,
int32_t
startOffset
,
int32_t
rowSize
,
STableMeta
*
pTableMeta
,
STableDataBlocks
**
dataBlocks
,
SArray
*
pBlockList
,
STableMeta
*
pTableMeta
,
STableDataBlocks
**
dataBlocks
,
SArray
*
pBlockList
,
SVCreateTbReq
*
pCreateTbReq
)
{
SVCreateTbReq
*
pCreateTbReq
)
{
*
dataBlocks
=
NULL
;
*
dataBlocks
=
NULL
;
STableDataBlocks
**
t1
=
(
STableDataBlocks
**
)
taosHashGet
(
pHashList
,
(
const
char
*
)
&
id
,
sizeof
(
id
)
);
STableDataBlocks
**
t1
=
(
STableDataBlocks
**
)
taosHashGet
(
pHashList
,
(
const
char
*
)
id
,
idLen
);
if
(
t1
!=
NULL
)
{
if
(
t1
!=
NULL
)
{
*
dataBlocks
=
*
t1
;
*
dataBlocks
=
*
t1
;
}
}
...
@@ -207,7 +207,7 @@ int32_t getDataBlockFromList(SHashObj* pHashList, int64_t id, int32_t size, int3
...
@@ -207,7 +207,7 @@ int32_t getDataBlockFromList(SHashObj* pHashList, int64_t id, int32_t size, int3
}
}
}
}
taosHashPut
(
pHashList
,
(
const
char
*
)
&
id
,
sizeof
(
int64_t
)
,
(
char
*
)
dataBlocks
,
POINTER_BYTES
);
taosHashPut
(
pHashList
,
(
const
char
*
)
id
,
idLen
,
(
char
*
)
dataBlocks
,
POINTER_BYTES
);
if
(
pBlockList
)
{
if
(
pBlockList
)
{
taosArrayPush
(
pBlockList
,
dataBlocks
);
taosArrayPush
(
pBlockList
,
dataBlocks
);
}
}
...
@@ -445,7 +445,7 @@ int32_t mergeTableDataBlocks(SHashObj* pHashObj, uint8_t payloadType, SArray** p
...
@@ -445,7 +445,7 @@ int32_t mergeTableDataBlocks(SHashObj* pHashObj, uint8_t payloadType, SArray** p
const
int
INSERT_HEAD_SIZE
=
sizeof
(
SSubmitReq
);
const
int
INSERT_HEAD_SIZE
=
sizeof
(
SSubmitReq
);
int
code
=
0
;
int
code
=
0
;
bool
isRawPayload
=
IS_RAW_PAYLOAD
(
payloadType
);
bool
isRawPayload
=
IS_RAW_PAYLOAD
(
payloadType
);
SHashObj
*
pVnodeDataBlockHashList
=
taosHashInit
(
128
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_
BIG
INT
),
true
,
false
);
SHashObj
*
pVnodeDataBlockHashList
=
taosHashInit
(
128
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_INT
),
true
,
false
);
SArray
*
pVnodeDataBlockList
=
taosArrayInit
(
8
,
POINTER_BYTES
);
SArray
*
pVnodeDataBlockList
=
taosArrayInit
(
8
,
POINTER_BYTES
);
STableDataBlocks
**
p
=
taosHashIterate
(
pHashObj
,
NULL
);
STableDataBlocks
**
p
=
taosHashIterate
(
pHashObj
,
NULL
);
...
@@ -457,7 +457,7 @@ int32_t mergeTableDataBlocks(SHashObj* pHashObj, uint8_t payloadType, SArray** p
...
@@ -457,7 +457,7 @@ int32_t mergeTableDataBlocks(SHashObj* pHashObj, uint8_t payloadType, SArray** p
STableDataBlocks
*
dataBuf
=
NULL
;
STableDataBlocks
*
dataBuf
=
NULL
;
pOneTableBlock
->
pTableMeta
->
vgId
=
pOneTableBlock
->
vgId
;
// for schemaless, restore origin vgId
pOneTableBlock
->
pTableMeta
->
vgId
=
pOneTableBlock
->
vgId
;
// for schemaless, restore origin vgId
int32_t
ret
=
int32_t
ret
=
getDataBlockFromList
(
pVnodeDataBlockHashList
,
pOneTableBlock
->
vgId
,
TSDB_PAYLOAD_SIZE
,
INSERT_HEAD_SIZE
,
0
,
getDataBlockFromList
(
pVnodeDataBlockHashList
,
&
pOneTableBlock
->
vgId
,
sizeof
(
pOneTableBlock
->
vgId
)
,
TSDB_PAYLOAD_SIZE
,
INSERT_HEAD_SIZE
,
0
,
pOneTableBlock
->
pTableMeta
,
&
dataBuf
,
pVnodeDataBlockList
,
NULL
);
pOneTableBlock
->
pTableMeta
,
&
dataBuf
,
pVnodeDataBlockList
,
NULL
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
taosHashCleanup
(
pVnodeDataBlockHashList
);
taosHashCleanup
(
pVnodeDataBlockHashList
);
...
@@ -620,7 +620,7 @@ int32_t qCloneStmtDataBlock(void** pDst, void* pSrc) {
...
@@ -620,7 +620,7 @@ int32_t qCloneStmtDataBlock(void** pDst, void* pSrc) {
return
qResetStmtDataBlock
(
*
pDst
,
false
);
return
qResetStmtDataBlock
(
*
pDst
,
false
);
}
}
int32_t
qRebuildStmtDataBlock
(
void
**
pDst
,
void
*
pSrc
)
{
int32_t
qRebuildStmtDataBlock
(
void
**
pDst
,
void
*
pSrc
,
uint64_t
uid
,
int32_t
vgId
)
{
int32_t
code
=
qCloneStmtDataBlock
(
pDst
,
pSrc
);
int32_t
code
=
qCloneStmtDataBlock
(
pDst
,
pSrc
);
if
(
code
)
{
if
(
code
)
{
return
code
;
return
code
;
...
@@ -633,11 +633,22 @@ int32_t qRebuildStmtDataBlock(void** pDst, void* pSrc) {
...
@@ -633,11 +633,22 @@ int32_t qRebuildStmtDataBlock(void** pDst, void* pSrc) {
return
TSDB_CODE_OUT_OF_MEMORY
;
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
pBlock
->
vgId
=
vgId
;
if
(
pBlock
->
pTableMeta
)
{
pBlock
->
pTableMeta
->
uid
=
uid
;
pBlock
->
pTableMeta
->
vgId
=
vgId
;
}
memset
(
pBlock
->
pData
,
0
,
sizeof
(
SSubmitBlk
));
memset
(
pBlock
->
pData
,
0
,
sizeof
(
SSubmitBlk
));
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
STableMeta
*
qGetTableMetaInDataBlock
(
void
*
pDataBlock
)
{
return
((
STableDataBlocks
*
)
pDataBlock
)
->
pTableMeta
;
}
void
qFreeStmtDataBlock
(
void
*
pDataBlock
)
{
void
qFreeStmtDataBlock
(
void
*
pDataBlock
)
{
if
(
pDataBlock
==
NULL
)
{
if
(
pDataBlock
==
NULL
)
{
return
;
return
;
...
...
source/libs/parser/src/parTranslater.c
浏览文件 @
ed1a71f1
...
@@ -1886,6 +1886,9 @@ static int32_t checkDbKeepOption(STranslateContext* pCxt, SDatabaseOptions* pOpt
...
@@ -1886,6 +1886,9 @@ static int32_t checkDbKeepOption(STranslateContext* pCxt, SDatabaseOptions* pOpt
TIME_UNIT_DAY
!=
pVal
->
unit
)
{
TIME_UNIT_DAY
!=
pVal
->
unit
)
{
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_KEEP_UNIT
,
pVal
->
unit
);
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_KEEP_UNIT
,
pVal
->
unit
);
}
}
if
(
!
pVal
->
isDuration
)
{
pVal
->
datum
.
i
=
pVal
->
datum
.
i
*
1440
;
}
}
}
pOptions
->
keep
[
0
]
=
getBigintFromValueNode
((
SValueNode
*
)
nodesListGetNode
(
pOptions
->
pKeep
,
0
));
pOptions
->
keep
[
0
]
=
getBigintFromValueNode
((
SValueNode
*
)
nodesListGetNode
(
pOptions
->
pKeep
,
0
));
...
...
source/libs/parser/test/parInitialCTest.cpp
浏览文件 @
ed1a71f1
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
*
*
* This program is free software: you can use, redistribute, and/or modify
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"),
as
published by the Free Software Foundation.
* or later ("AGPL"),
AS
published by the Free Software Foundation.
*
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
*/
*/
#include "parTestUtil.h"
#include "parTestUtil.h"
#include "ttime.h"
using
namespace
std
;
using
namespace
std
;
...
@@ -26,72 +27,226 @@ class ParserInitialCTest : public ParserDdlTest {};
...
@@ -26,72 +27,226 @@ class ParserInitialCTest : public ParserDdlTest {};
TEST_F
(
ParserInitialCTest
,
createAccount
)
{
TEST_F
(
ParserInitialCTest
,
createAccount
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
run
(
"
create account ac_wxy pass
'123456'"
,
TSDB_CODE_PAR_EXPRIE_STATEMENT
);
run
(
"
CREATE ACCOUNT ac_wxy PASS
'123456'"
,
TSDB_CODE_PAR_EXPRIE_STATEMENT
);
}
}
TEST_F
(
ParserInitialCTest
,
createBnode
)
{
TEST_F
(
ParserInitialCTest
,
createBnode
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
run
(
"
create bnode on dnode
1"
);
run
(
"
CREATE BNODE ON DNODE
1"
);
}
}
/*
* CREATE DATABASE [IF NOT EXISTS] db_name [database_options]
*
* database_options:
* database_option ...
*
* database_option: {
* BUFFER value
* | CACHELAST value
* | COMP {0 | 1 | 2}
* | DAYS value
* | FSYNC value
* | MAXROWS value
* | MINROWS value
* | KEEP value
* | PAGES value
* | PAGESIZE value
* | PRECISION {'ms' | 'us' | 'ns'}
* | REPLICA value
* | RETENTIONS ingestion_duration:keep_duration ...
* | STRICT value
* | WAL value
* | VGROUPS value
* | SINGLE_STABLE {0 | 1}
* }
*/
TEST_F
(
ParserInitialCTest
,
createDatabase
)
{
TEST_F
(
ParserInitialCTest
,
createDatabase
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
run
(
"create database wxy_db"
);
SCreateDbReq
expect
=
{
0
};
run
(
"create database if not exists wxy_db "
auto
setCreateDbReqFunc
=
[
&
](
const
char
*
pDbname
,
int8_t
igExists
=
0
)
{
"cachelast 2 "
memset
(
&
expect
,
0
,
sizeof
(
SCreateDbReq
));
"comp 1 "
int32_t
len
=
snprintf
(
expect
.
db
,
sizeof
(
expect
.
db
),
"0.%s"
,
pDbname
);
"days 100 "
expect
.
db
[
len
]
=
'\0'
;
"fsync 100 "
expect
.
ignoreExist
=
igExists
;
"maxrows 1000 "
expect
.
buffer
=
TSDB_DEFAULT_BUFFER_PER_VNODE
;
"minrows 100 "
expect
.
cacheLastRow
=
TSDB_DEFAULT_CACHE_LAST_ROW
;
"keep 1440 "
expect
.
compression
=
TSDB_DEFAULT_COMP_LEVEL
;
"precision 'ms' "
expect
.
daysPerFile
=
TSDB_DEFAULT_DAYS_PER_FILE
;
"replica 3 "
expect
.
fsyncPeriod
=
TSDB_DEFAULT_FSYNC_PERIOD
;
"wal 2 "
expect
.
maxRows
=
TSDB_DEFAULT_MAXROWS_FBLOCK
;
"vgroups 100 "
expect
.
minRows
=
TSDB_DEFAULT_MINROWS_FBLOCK
;
"single_stable 0 "
expect
.
daysToKeep0
=
TSDB_DEFAULT_KEEP
;
"retentions 15s:7d,1m:21d,15m:5y"
);
expect
.
daysToKeep1
=
TSDB_DEFAULT_KEEP
;
expect
.
daysToKeep2
=
TSDB_DEFAULT_KEEP
;
run
(
"create database if not exists wxy_db "
expect
.
pages
=
TSDB_DEFAULT_PAGES_PER_VNODE
;
"days 100m "
expect
.
pageSize
=
TSDB_DEFAULT_PAGESIZE_PER_VNODE
;
"keep 1440m,300h,400d "
);
expect
.
precision
=
TSDB_DEFAULT_PRECISION
;
expect
.
replications
=
TSDB_DEFAULT_DB_REPLICA
;
expect
.
strict
=
TSDB_DEFAULT_DB_STRICT
;
expect
.
walLevel
=
TSDB_DEFAULT_WAL_LEVEL
;
expect
.
numOfVgroups
=
TSDB_DEFAULT_VN_PER_DB
;
expect
.
numOfStables
=
TSDB_DEFAULT_DB_SINGLE_STABLE
;
};
auto
setDbBufferFunc
=
[
&
](
int32_t
buffer
)
{
expect
.
buffer
=
buffer
;
};
auto
setDbCachelastFunc
=
[
&
](
int8_t
CACHELAST
)
{
expect
.
cacheLastRow
=
CACHELAST
;
};
auto
setDbCompressionFunc
=
[
&
](
int8_t
compressionLevel
)
{
expect
.
compression
=
compressionLevel
;
};
auto
setDbDaysFunc
=
[
&
](
int32_t
daysPerFile
)
{
expect
.
daysPerFile
=
daysPerFile
;
};
auto
setDbFsyncFunc
=
[
&
](
int32_t
fsyncPeriod
)
{
expect
.
fsyncPeriod
=
fsyncPeriod
;
};
auto
setDbMaxRowsFunc
=
[
&
](
int32_t
maxRowsPerBlock
)
{
expect
.
maxRows
=
maxRowsPerBlock
;
};
auto
setDbMinRowsFunc
=
[
&
](
int32_t
minRowsPerBlock
)
{
expect
.
minRows
=
minRowsPerBlock
;
};
auto
setDbKeepFunc
=
[
&
](
int32_t
keep0
,
int32_t
keep1
=
0
,
int32_t
keep2
=
0
)
{
expect
.
daysToKeep0
=
keep0
;
expect
.
daysToKeep1
=
0
==
keep1
?
expect
.
daysToKeep0
:
keep1
;
expect
.
daysToKeep2
=
0
==
keep2
?
expect
.
daysToKeep1
:
keep2
;
};
auto
setDbPagesFunc
=
[
&
](
int32_t
pages
)
{
expect
.
pages
=
pages
;
};
auto
setDbPageSizeFunc
=
[
&
](
int32_t
pagesize
)
{
expect
.
pageSize
=
pagesize
;
};
auto
setDbPrecisionFunc
=
[
&
](
int8_t
precision
)
{
expect
.
precision
=
precision
;
};
auto
setDbReplicaFunc
=
[
&
](
int8_t
replica
)
{
expect
.
replications
=
replica
;
};
auto
setDbStrictaFunc
=
[
&
](
int8_t
strict
)
{
expect
.
strict
=
strict
;
};
auto
setDbWalLevelFunc
=
[
&
](
int8_t
walLevel
)
{
expect
.
walLevel
=
walLevel
;
};
auto
setDbVgroupsFunc
=
[
&
](
int32_t
numOfVgroups
)
{
expect
.
numOfVgroups
=
numOfVgroups
;
};
auto
setDbSingleStableFunc
=
[
&
](
int8_t
singleStable
)
{
expect
.
numOfStables
=
singleStable
;
};
auto
addDbRetentionFunc
=
[
&
](
int64_t
freq
,
int64_t
keep
,
int8_t
freqUnit
,
int8_t
keepUnit
)
{
SRetention
retention
=
{
0
};
retention
.
freq
=
freq
;
retention
.
keep
=
keep
;
retention
.
freqUnit
=
freqUnit
;
retention
.
keepUnit
=
keepUnit
;
if
(
NULL
==
expect
.
pRetensions
)
{
expect
.
pRetensions
=
taosArrayInit
(
TARRAY_MIN_SIZE
,
sizeof
(
SRetention
));
}
taosArrayPush
(
expect
.
pRetensions
,
&
retention
);
++
expect
.
numOfRetensions
;
};
setCheckDdlFunc
([
&
](
const
SQuery
*
pQuery
,
ParserStage
stage
)
{
ASSERT_EQ
(
nodeType
(
pQuery
->
pRoot
),
QUERY_NODE_CREATE_DATABASE_STMT
);
SCreateDbReq
req
=
{
0
};
ASSERT_TRUE
(
TSDB_CODE_SUCCESS
==
tDeserializeSCreateDbReq
(
pQuery
->
pCmdMsg
->
pMsg
,
pQuery
->
pCmdMsg
->
msgLen
,
&
req
));
ASSERT_EQ
(
std
::
string
(
req
.
db
),
std
::
string
(
expect
.
db
));
ASSERT_EQ
(
req
.
numOfVgroups
,
expect
.
numOfVgroups
);
ASSERT_EQ
(
req
.
numOfStables
,
expect
.
numOfStables
);
ASSERT_EQ
(
req
.
buffer
,
expect
.
buffer
);
ASSERT_EQ
(
req
.
pageSize
,
expect
.
pageSize
);
ASSERT_EQ
(
req
.
pages
,
expect
.
pages
);
ASSERT_EQ
(
req
.
daysPerFile
,
expect
.
daysPerFile
);
ASSERT_EQ
(
req
.
daysToKeep0
,
expect
.
daysToKeep0
);
ASSERT_EQ
(
req
.
daysToKeep1
,
expect
.
daysToKeep1
);
ASSERT_EQ
(
req
.
daysToKeep2
,
expect
.
daysToKeep2
);
ASSERT_EQ
(
req
.
minRows
,
expect
.
minRows
);
ASSERT_EQ
(
req
.
maxRows
,
expect
.
maxRows
);
ASSERT_EQ
(
req
.
fsyncPeriod
,
expect
.
fsyncPeriod
);
ASSERT_EQ
(
req
.
walLevel
,
expect
.
walLevel
);
ASSERT_EQ
(
req
.
precision
,
expect
.
precision
);
ASSERT_EQ
(
req
.
compression
,
expect
.
compression
);
ASSERT_EQ
(
req
.
replications
,
expect
.
replications
);
ASSERT_EQ
(
req
.
strict
,
expect
.
strict
);
ASSERT_EQ
(
req
.
cacheLastRow
,
expect
.
cacheLastRow
);
ASSERT_EQ
(
req
.
ignoreExist
,
expect
.
ignoreExist
);
ASSERT_EQ
(
req
.
numOfRetensions
,
expect
.
numOfRetensions
);
if
(
expect
.
numOfRetensions
>
0
)
{
ASSERT_EQ
(
taosArrayGetSize
(
req
.
pRetensions
),
expect
.
numOfRetensions
);
ASSERT_EQ
(
taosArrayGetSize
(
req
.
pRetensions
),
taosArrayGetSize
(
expect
.
pRetensions
));
for
(
int32_t
i
=
0
;
i
<
expect
.
numOfRetensions
;
++
i
)
{
SRetention
*
pReten
=
(
SRetention
*
)
taosArrayGet
(
req
.
pRetensions
,
i
);
SRetention
*
pExpectReten
=
(
SRetention
*
)
taosArrayGet
(
expect
.
pRetensions
,
i
);
ASSERT_EQ
(
pReten
->
freq
,
pExpectReten
->
freq
);
ASSERT_EQ
(
pReten
->
keep
,
pExpectReten
->
keep
);
ASSERT_EQ
(
pReten
->
freqUnit
,
pExpectReten
->
freqUnit
);
ASSERT_EQ
(
pReten
->
keepUnit
,
pExpectReten
->
keepUnit
);
}
}
});
setCreateDbReqFunc
(
"wxy_db"
);
run
(
"CREATE DATABASE wxy_db"
);
setCreateDbReqFunc
(
"wxy_db"
,
1
);
setDbBufferFunc
(
64
);
setDbCachelastFunc
(
2
);
setDbCompressionFunc
(
1
);
setDbDaysFunc
(
100
*
1440
);
setDbFsyncFunc
(
100
);
setDbMaxRowsFunc
(
1000
);
setDbMinRowsFunc
(
100
);
setDbKeepFunc
(
1440
*
1440
);
setDbPagesFunc
(
96
);
setDbPageSizeFunc
(
8
);
setDbPrecisionFunc
(
TSDB_TIME_PRECISION_NANO
);
setDbReplicaFunc
(
3
);
addDbRetentionFunc
(
15
*
MILLISECOND_PER_SECOND
,
7
*
MILLISECOND_PER_DAY
,
TIME_UNIT_SECOND
,
TIME_UNIT_DAY
);
addDbRetentionFunc
(
1
*
MILLISECOND_PER_MINUTE
,
21
*
MILLISECOND_PER_DAY
,
TIME_UNIT_MINUTE
,
TIME_UNIT_DAY
);
addDbRetentionFunc
(
15
*
MILLISECOND_PER_MINUTE
,
5
,
TIME_UNIT_MINUTE
,
TIME_UNIT_YEAR
);
setDbStrictaFunc
(
1
);
setDbWalLevelFunc
(
2
);
setDbVgroupsFunc
(
100
);
setDbSingleStableFunc
(
1
);
run
(
"CREATE DATABASE IF NOT EXISTS wxy_db "
"BUFFER 64 "
"CACHELAST 2 "
"COMP 1 "
"DAYS 100 "
"FSYNC 100 "
"MAXROWS 1000 "
"MINROWS 100 "
"KEEP 1440 "
"PAGES 96 "
"PAGESIZE 8 "
"PRECISION 'ns' "
"REPLICA 3 "
"RETENTIONS 15s:7d,1m:21d,15m:5y "
"STRICT 1 "
"WAL 2 "
"VGROUPS 100 "
"SINGLE_STABLE 1 "
);
setCreateDbReqFunc
(
"wxy_db"
,
1
);
setDbDaysFunc
(
100
);
setDbKeepFunc
(
1440
,
300
*
60
,
400
*
1440
);
run
(
"CREATE DATABASE IF NOT EXISTS wxy_db "
"DAYS 100m "
"KEEP 1440m,300h,400d "
);
}
}
TEST_F
(
ParserInitialCTest
,
createDnode
)
{
TEST_F
(
ParserInitialCTest
,
createDnode
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
run
(
"
create dnode abc1 port
7000"
);
run
(
"
CREATE DNODE abc1 PORT
7000"
);
run
(
"
create dnode 1.1.1.1 port
9000"
);
run
(
"
CREATE DNODE 1.1.1.1 PORT
9000"
);
}
}
// todo
create function
// todo
CREATE FUNCTION
TEST_F
(
ParserInitialCTest
,
createIndexSma
)
{
TEST_F
(
ParserInitialCTest
,
createIndexSma
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
run
(
"
create sma index index1 on t1 function(max(c1), min(c3 + 10), sum
(c4)) INTERVAL(10s)"
);
run
(
"
CREATE SMA INDEX index1 ON t1 FUNCTION(MAX(c1), MIN(c3 + 10), SUM
(c4)) INTERVAL(10s)"
);
}
}
TEST_F
(
ParserInitialCTest
,
createMnode
)
{
TEST_F
(
ParserInitialCTest
,
createMnode
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
run
(
"
create mnode on dnode
1"
);
run
(
"
CREATE MNODE ON DNODE
1"
);
}
}
TEST_F
(
ParserInitialCTest
,
createQnode
)
{
TEST_F
(
ParserInitialCTest
,
createQnode
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
run
(
"
create qnode on dnode
1"
);
run
(
"
CREATE QNODE ON DNODE
1"
);
}
}
TEST_F
(
ParserInitialCTest
,
createSnode
)
{
TEST_F
(
ParserInitialCTest
,
createSnode
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
run
(
"
create snode on dnode
1"
);
run
(
"
CREATE SNODE ON DNODE
1"
);
}
}
TEST_F
(
ParserInitialCTest
,
createStable
)
{
TEST_F
(
ParserInitialCTest
,
createStable
)
{
...
@@ -194,7 +349,7 @@ TEST_F(ParserInitialCTest, createStable) {
...
@@ -194,7 +349,7 @@ TEST_F(ParserInitialCTest, createStable) {
addFieldToCreateStbReqFunc
(
true
,
"ts"
,
TSDB_DATA_TYPE_TIMESTAMP
);
addFieldToCreateStbReqFunc
(
true
,
"ts"
,
TSDB_DATA_TYPE_TIMESTAMP
);
addFieldToCreateStbReqFunc
(
true
,
"c1"
,
TSDB_DATA_TYPE_INT
);
addFieldToCreateStbReqFunc
(
true
,
"c1"
,
TSDB_DATA_TYPE_INT
);
addFieldToCreateStbReqFunc
(
false
,
"id"
,
TSDB_DATA_TYPE_INT
);
addFieldToCreateStbReqFunc
(
false
,
"id"
,
TSDB_DATA_TYPE_INT
);
run
(
"
create stable t1(ts timestamp, c1 int) TAGS(id int
)"
);
run
(
"
CREATE STABLE t1(ts TIMESTAMP, c1 INT) TAGS(id INT
)"
);
setCreateStbReqFunc
(
"t1"
,
1
,
0.1
,
2
,
100
,
"test create table"
);
setCreateStbReqFunc
(
"t1"
,
1
,
0.1
,
2
,
100
,
"test create table"
);
addFieldToCreateStbReqFunc
(
true
,
"ts"
,
TSDB_DATA_TYPE_TIMESTAMP
,
0
,
0
);
addFieldToCreateStbReqFunc
(
true
,
"ts"
,
TSDB_DATA_TYPE_TIMESTAMP
,
0
,
0
);
...
@@ -227,80 +382,72 @@ TEST_F(ParserInitialCTest, createStable) {
...
@@ -227,80 +382,72 @@ TEST_F(ParserInitialCTest, createStable) {
addFieldToCreateStbReqFunc
(
false
,
"a13"
,
TSDB_DATA_TYPE_BOOL
);
addFieldToCreateStbReqFunc
(
false
,
"a13"
,
TSDB_DATA_TYPE_BOOL
);
addFieldToCreateStbReqFunc
(
false
,
"a14"
,
TSDB_DATA_TYPE_NCHAR
,
30
*
TSDB_NCHAR_SIZE
+
VARSTR_HEADER_SIZE
);
addFieldToCreateStbReqFunc
(
false
,
"a14"
,
TSDB_DATA_TYPE_NCHAR
,
30
*
TSDB_NCHAR_SIZE
+
VARSTR_HEADER_SIZE
);
addFieldToCreateStbReqFunc
(
false
,
"a15"
,
TSDB_DATA_TYPE_VARCHAR
,
50
+
VARSTR_HEADER_SIZE
);
addFieldToCreateStbReqFunc
(
false
,
"a15"
,
TSDB_DATA_TYPE_VARCHAR
,
50
+
VARSTR_HEADER_SIZE
);
run
(
"
create stable if not exists
test.t1("
run
(
"
CREATE STABLE IF NOT EXISTS
test.t1("
"ts TIMESTAMP, c1 INT, c2 INT UNSIGNED, c3 BIGINT, c4 BIGINT UNSIGNED, c5 FLOAT, c6 DOUBLE, c7 BINARY(20), "
"ts TIMESTAMP, c1 INT, c2 INT UNSIGNED, c3 BIGINT, c4 BIGINT UNSIGNED, c5 FLOAT, c6 DOUBLE, c7 BINARY(20), "
"c8 SMALLINT, c9 SMALLINT UNSIGNED COMMENT 'test column comment', c10 TINYINT, c11 TINYINT UNSIGNED, c12 BOOL, "
"c8 SMALLINT, c9 SMALLINT UNSIGNED COMMENT 'test column comment', c10 TINYINT, c11 TINYINT UNSIGNED, c12 BOOL, "
"c13 NCHAR(30), c14 VARCHAR(50)) "
"c13 NCHAR(30), c14 VARCHAR(50)) "
"TAGS (a1 TIMESTAMP, a2 INT, a3 INT UNSIGNED, a4 BIGINT, a5 BIGINT UNSIGNED, a6 FLOAT, a7 DOUBLE, "
"TAGS (a1 TIMESTAMP, a2 INT, a3 INT UNSIGNED, a4 BIGINT, a5 BIGINT UNSIGNED, a6 FLOAT, a7 DOUBLE, "
"a8 BINARY(20), a9 SMALLINT, a10 SMALLINT UNSIGNED COMMENT 'test column comment', a11 TINYINT, "
"a8 BINARY(20), a9 SMALLINT, a10 SMALLINT UNSIGNED COMMENT 'test column comment', a11 TINYINT, "
"a12 TINYINT UNSIGNED, a13 BOOL, a14 NCHAR(30), a15 VARCHAR(50)) "
"a12 TINYINT UNSIGNED, a13 BOOL, a14 NCHAR(30), a15 VARCHAR(50)) "
"TTL 100 COMMENT 'test create table' SMA(c1, c2, c3) ROLLUP (
min
) FILE_FACTOR 0.1 DELAY 2"
);
"TTL 100 COMMENT 'test create table' SMA(c1, c2, c3) ROLLUP (
MIN
) FILE_FACTOR 0.1 DELAY 2"
);
}
}
TEST_F
(
ParserInitialCTest
,
createStream
)
{
TEST_F
(
ParserInitialCTest
,
createStream
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
run
(
"
create stream s1 as select * from
t1"
);
run
(
"
CREATE STREAM s1 AS SELECT * FROM
t1"
);
run
(
"
create stream if not exists s1 as select * from
t1"
);
run
(
"
CREATE STREAM IF NOT EXISTS s1 AS SELECT * FROM
t1"
);
run
(
"
create stream s1 into st1 as select * from
t1"
);
run
(
"
CREATE STREAM s1 INTO st1 AS SELECT * FROM
t1"
);
run
(
"
create stream if not exists s1 trigger window_close watermark 10s into st1 as select * from
t1"
);
run
(
"
CREATE STREAM IF NOT EXISTS s1 TRIGGER WINDOW_CLOSE WATERMARK 10s INTO st1 AS SELECT * FROM
t1"
);
}
}
TEST_F
(
ParserInitialCTest
,
createTable
)
{
TEST_F
(
ParserInitialCTest
,
createTable
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
run
(
"
create table t1(ts timestamp, c1 int
)"
);
run
(
"
CREATE TABLE t1(ts TIMESTAMP, c1 INT
)"
);
run
(
"create table if not exists test.t1("
run
(
"CREATE TABLE IF NOT EXISTS test.t1("
"ts TIMESTAMP, c1 INT, c2 INT UNSIGNED, c3 BIGINT, c4 BIGINT UNSIGNED, c5 FLOAT, c6 DOUBLE, c7 BINARY(20), c8 "
"ts TIMESTAMP, c1 INT, c2 INT UNSIGNED, c3 BIGINT, c4 BIGINT UNSIGNED, c5 FLOAT, c6 DOUBLE, c7 BINARY(20), "
"SMALLINT, "
"c8 SMALLINT, c9 SMALLINT UNSIGNED COMMENT 'test column comment', c10 TINYINT, c11 TINYINT UNSIGNED, c12 BOOL, "
"c9 SMALLINT UNSIGNED COMMENT 'test column comment', c10 TINYINT, c11 TINYINT UNSIGNED, c12 BOOL, c13 "
"c13 NCHAR(30), c15 VARCHAR(50)) "
"NCHAR(30), "
"c15 VARCHAR(50)) "
"TTL 100 COMMENT 'test create table' SMA(c1, c2, c3)"
);
"TTL 100 COMMENT 'test create table' SMA(c1, c2, c3)"
);
run
(
"create table if not exists test.t1("
run
(
"CREATE TABLE IF NOT EXISTS test.t1("
"ts TIMESTAMP, c1 INT, c2 INT UNSIGNED, c3 BIGINT, c4 BIGINT UNSIGNED, c5 FLOAT, c6 DOUBLE, c7 BINARY(20), c8 "
"ts TIMESTAMP, c1 INT, c2 INT UNSIGNED, c3 BIGINT, c4 BIGINT UNSIGNED, c5 FLOAT, c6 DOUBLE, c7 BINARY(20), "
"SMALLINT, "
"c8 SMALLINT, c9 SMALLINT UNSIGNED COMMENT 'test column comment', c10 TINYINT, c11 TINYINT UNSIGNED, c12 BOOL, "
"c9 SMALLINT UNSIGNED COMMENT 'test column comment', c10 TINYINT, c11 TINYINT UNSIGNED, c12 BOOL, c13 "
"c13 NCHAR(30), c14 VARCHAR(50)) "
"NCHAR(30), "
"TAGS (a1 TIMESTAMP, a2 INT, a3 INT UNSIGNED, a4 BIGINT, a5 BIGINT UNSIGNED, a6 FLOAT, a7 DOUBLE, a8 BINARY(20), "
"c15 VARCHAR(50)) "
"a9 SMALLINT, a10 SMALLINT UNSIGNED COMMENT 'test column comment', a11 TINYINT, a12 TINYINT UNSIGNED, a13 BOOL, "
"TAGS (tsa TIMESTAMP, a1 INT, a2 INT UNSIGNED, a3 BIGINT, a4 BIGINT UNSIGNED, "
"a14 NCHAR(30), a15 VARCHAR(50)) "
"a5 FLOAT, a6 DOUBLE, a7 "
"TTL 100 COMMENT 'test create table' SMA(c1, c2, c3) ROLLUP (MIN) FILE_FACTOR 0.1 DELAY 2"
);
"BINARY(20), a8 SMALLINT, "
"a9 SMALLINT UNSIGNED COMMENT 'test column comment', a10 "
run
(
"CREATE TABLE IF NOT EXISTS t1 USING st1 TAGS(1, 'wxy')"
);
"TINYINT, a11 TINYINT UNSIGNED, a12 BOOL, a13 NCHAR(30), "
"a15 VARCHAR(50)) "
run
(
"CREATE TABLE "
"TTL 100 COMMENT 'test create "
"IF NOT EXISTS test.t1 USING test.st1 (tag1, tag2) TAGS(1, 'abc') "
"table' SMA(c1, c2, c3) ROLLUP (min) FILE_FACTOR 0.1 DELAY 2"
);
"IF NOT EXISTS test.t2 USING test.st1 (tag1, tag2) TAGS(2, 'abc') "
"IF NOT EXISTS test.t3 USING test.st1 (tag1, tag2) TAGS(3, 'abc') "
);
run
(
"create table if not exists t1 using st1 tags(1, 'wxy')"
);
run
(
"create table "
"if not exists test.t1 using test.st1 (tag1, tag2) tags(1, 'abc') "
"if not exists test.t2 using test.st1 (tag1, tag2) tags(2, 'abc') "
"if not exists test.t3 using test.st1 (tag1, tag2) tags(3, 'abc') "
);
}
}
TEST_F
(
ParserInitialCTest
,
createTopic
)
{
TEST_F
(
ParserInitialCTest
,
createTopic
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
run
(
"
create topic tp1 as select * from
t1"
);
run
(
"
CREATE TOPIC tp1 AS SELECT * FROM
t1"
);
run
(
"
create topic if not exists tp1 as select * from
t1"
);
run
(
"
CREATE TOPIC IF NOT EXISTS tp1 AS SELECT * FROM
t1"
);
run
(
"
create topic tp1 as
test"
);
run
(
"
CREATE TOPIC tp1 AS
test"
);
run
(
"
create topic if not exists tp1 as
test"
);
run
(
"
CREATE TOPIC IF NOT EXISTS tp1 AS
test"
);
}
}
TEST_F
(
ParserInitialCTest
,
createUser
)
{
TEST_F
(
ParserInitialCTest
,
createUser
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
run
(
"
create user wxy pass
'123456'"
);
run
(
"
CREATE USER wxy PASS
'123456'"
);
}
}
}
// namespace ParserTest
}
// namespace ParserTest
source/libs/planner/src/planner.c
浏览文件 @
ed1a71f1
...
@@ -16,6 +16,7 @@
...
@@ -16,6 +16,7 @@
#include "planner.h"
#include "planner.h"
#include "planInt.h"
#include "planInt.h"
#include "scalar.h"
typedef
struct
SCollectPlaceholderValuesCxt
{
typedef
struct
SCollectPlaceholderValuesCxt
{
int32_t
errCode
;
int32_t
errCode
;
...
@@ -146,7 +147,8 @@ static int32_t setValueByBindParam(SValueNode* pVal, TAOS_MULTI_BIND* pParam) {
...
@@ -146,7 +147,8 @@ static int32_t setValueByBindParam(SValueNode* pVal, TAOS_MULTI_BIND* pParam) {
}
}
int32_t
output
=
0
;
int32_t
output
=
0
;
if
(
!
taosMbsToUcs4
(
pParam
->
buffer
,
inputSize
,
(
TdUcs4
*
)
varDataVal
(
pVal
->
datum
.
p
),
pVal
->
node
.
resType
.
bytes
,
&
output
))
{
if
(
!
taosMbsToUcs4
(
pParam
->
buffer
,
inputSize
,
(
TdUcs4
*
)
varDataVal
(
pVal
->
datum
.
p
),
pVal
->
node
.
resType
.
bytes
,
&
output
))
{
return
errno
;
return
errno
;
}
}
varDataSetLen
(
pVal
->
datum
.
p
,
output
);
varDataSetLen
(
pVal
->
datum
.
p
,
output
);
...
@@ -181,7 +183,7 @@ static int32_t setValueByBindParam(SValueNode* pVal, TAOS_MULTI_BIND* pParam) {
...
@@ -181,7 +183,7 @@ static int32_t setValueByBindParam(SValueNode* pVal, TAOS_MULTI_BIND* pParam) {
}
}
static
EDealRes
updatePlanQueryId
(
SNode
*
pNode
,
void
*
pContext
)
{
static
EDealRes
updatePlanQueryId
(
SNode
*
pNode
,
void
*
pContext
)
{
int64_t
queryId
=
*
(
uint64_t
*
)
pContext
;
int64_t
queryId
=
*
(
uint64_t
*
)
pContext
;
if
(
QUERY_NODE_PHYSICAL_PLAN
==
nodeType
(
pNode
))
{
if
(
QUERY_NODE_PHYSICAL_PLAN
==
nodeType
(
pNode
))
{
SQueryPlan
*
planNode
=
(
SQueryPlan
*
)
pNode
;
SQueryPlan
*
planNode
=
(
SQueryPlan
*
)
pNode
;
...
@@ -194,7 +196,127 @@ static EDealRes updatePlanQueryId(SNode* pNode, void* pContext) {
...
@@ -194,7 +196,127 @@ static EDealRes updatePlanQueryId(SNode* pNode, void* pContext) {
return
DEAL_RES_CONTINUE
;
return
DEAL_RES_CONTINUE
;
}
}
int32_t
qStmtBindParam
(
SQueryPlan
*
pPlan
,
TAOS_MULTI_BIND
*
pParams
,
int32_t
colIdx
,
uint64_t
queryId
)
{
static
int32_t
calcConstNode
(
SNode
**
pNode
)
{
if
(
NULL
==
*
pNode
)
{
return
TSDB_CODE_SUCCESS
;
}
SNode
*
pNew
=
NULL
;
int32_t
code
=
scalarCalculateConstants
(
*
pNode
,
&
pNew
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
*
pNode
=
pNew
;
}
return
code
;
}
static
int32_t
calcConstList
(
SNodeList
*
pList
)
{
SNode
*
pNode
=
NULL
;
FOREACH
(
pNode
,
pList
)
{
SNode
*
pNew
=
NULL
;
int32_t
code
=
scalarCalculateConstants
(
pNode
,
&
pNew
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
REPLACE_NODE
(
pNew
);
}
else
{
return
code
;
}
}
return
TSDB_CODE_SUCCESS
;
}
static
bool
isEmptyResultCond
(
SNode
**
pCond
)
{
if
(
QUERY_NODE_VALUE
!=
nodeType
(
*
pCond
))
{
return
false
;
}
if
(((
SValueNode
*
)
*
pCond
)
->
datum
.
b
)
{
nodesDestroyNode
(
*
pCond
);
*
pCond
=
NULL
;
return
false
;
}
return
true
;
}
static
int32_t
calcConstSpecificPhysiNode
(
SPhysiNode
*
pPhyNode
)
{
switch
(
nodeType
(
pPhyNode
))
{
case
QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_TABLE_SEQ_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_SYSTABLE_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_EXCHANGE
:
case
QUERY_NODE_PHYSICAL_PLAN_FILL
:
return
TSDB_CODE_SUCCESS
;
case
QUERY_NODE_PHYSICAL_PLAN_PROJECT
:
return
calcConstList
(((
SProjectPhysiNode
*
)
pPhyNode
)
->
pProjections
);
case
QUERY_NODE_PHYSICAL_PLAN_JOIN
:
return
calcConstNode
(
&
(((
SJoinPhysiNode
*
)
pPhyNode
)
->
pOnConditions
));
case
QUERY_NODE_PHYSICAL_PLAN_AGG
:
return
calcConstList
(((
SAggPhysiNode
*
)
pPhyNode
)
->
pExprs
);
case
QUERY_NODE_PHYSICAL_PLAN_SORT
:
return
calcConstList
(((
SSortPhysiNode
*
)
pPhyNode
)
->
pExprs
);
case
QUERY_NODE_PHYSICAL_PLAN_INTERVAL
:
case
QUERY_NODE_PHYSICAL_PLAN_STREAM_INTERVAL
:
case
QUERY_NODE_PHYSICAL_PLAN_SESSION_WINDOW
:
case
QUERY_NODE_PHYSICAL_PLAN_STATE_WINDOW
:
return
calcConstList
(((
SWinodwPhysiNode
*
)
pPhyNode
)
->
pExprs
);
case
QUERY_NODE_PHYSICAL_PLAN_PARTITION
:
return
calcConstList
(((
SPartitionPhysiNode
*
)
pPhyNode
)
->
pExprs
);
default:
break
;
}
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
calcConstSubplan
(
SPhysiNode
*
pPhyNode
,
bool
*
pEmptyResult
)
{
int32_t
code
=
calcConstNode
(
&
pPhyNode
->
pConditions
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
calcConstSpecificPhysiNode
(
pPhyNode
);
}
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
return
code
;
}
*
pEmptyResult
=
isEmptyResultCond
(
&
pPhyNode
->
pConditions
);
if
(
*
pEmptyResult
)
{
return
TSDB_CODE_SUCCESS
;
}
*
pEmptyResult
=
true
;
bool
subEmptyResult
=
false
;
SNode
*
pChild
=
NULL
;
FOREACH
(
pChild
,
pPhyNode
->
pChildren
)
{
code
=
calcConstSubplan
((
SPhysiNode
*
)
pChild
,
&
subEmptyResult
);
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
return
code
;
}
if
(
!
subEmptyResult
)
{
*
pEmptyResult
=
false
;
}
}
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
calcConstPhysiPlan
(
SQueryPlan
*
pPlan
,
bool
*
pEmptyResult
)
{
*
pEmptyResult
=
true
;
bool
subEmptyResult
=
false
;
SNodeListNode
*
pNode
=
nodesListGetNode
(
pPlan
->
pSubplans
,
0
);
SNode
*
pSubplan
=
NULL
;
FOREACH
(
pSubplan
,
pNode
->
pNodeList
)
{
int32_t
code
=
calcConstSubplan
(((
SSubplan
*
)
pSubplan
)
->
pNode
,
pEmptyResult
);
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
return
code
;
}
if
(
!
subEmptyResult
)
{
*
pEmptyResult
=
false
;
}
}
return
TSDB_CODE_SUCCESS
;
}
int32_t
qStmtBindParam
(
SQueryPlan
*
pPlan
,
TAOS_MULTI_BIND
*
pParams
,
int32_t
colIdx
,
uint64_t
queryId
,
bool
*
pEmptyResult
)
{
int32_t
size
=
taosArrayGetSize
(
pPlan
->
pPlaceholderValues
);
int32_t
size
=
taosArrayGetSize
(
pPlan
->
pPlaceholderValues
);
int32_t
code
=
0
;
int32_t
code
=
0
;
...
@@ -214,9 +336,10 @@ int32_t qStmtBindParam(SQueryPlan* pPlan, TAOS_MULTI_BIND* pParams, int32_t colI
...
@@ -214,9 +336,10 @@ int32_t qStmtBindParam(SQueryPlan* pPlan, TAOS_MULTI_BIND* pParams, int32_t colI
if
(
colIdx
<
0
||
((
colIdx
+
1
)
==
size
))
{
if
(
colIdx
<
0
||
((
colIdx
+
1
)
==
size
))
{
nodesWalkPhysiPlan
((
SNode
*
)
pPlan
,
updatePlanQueryId
,
&
queryId
);
nodesWalkPhysiPlan
((
SNode
*
)
pPlan
,
updatePlanQueryId
,
&
queryId
);
code
=
calcConstPhysiPlan
(
pPlan
,
pEmptyResult
);
}
}
return
TSDB_CODE_SUCCESS
;
return
code
;
}
}
int32_t
qSubPlanToString
(
const
SSubplan
*
pSubplan
,
char
**
pStr
,
int32_t
*
pLen
)
{
int32_t
qSubPlanToString
(
const
SSubplan
*
pSubplan
,
char
**
pStr
,
int32_t
*
pLen
)
{
...
...
source/libs/scalar/src/filter.c
浏览文件 @
ed1a71f1
...
@@ -260,7 +260,7 @@ int8_t filterGetCompFuncIdx(int32_t type, int32_t optr) {
...
@@ -260,7 +260,7 @@ int8_t filterGetCompFuncIdx(int32_t type, int32_t optr) {
comparFn
=
20
;
comparFn
=
20
;
}
else
if
(
optr
==
OP_TYPE_LIKE
)
{
}
else
if
(
optr
==
OP_TYPE_LIKE
)
{
comparFn
=
9
;
comparFn
=
9
;
}
else
if
(
optr
==
OP_TYPE_LIKE
)
{
}
else
if
(
optr
==
OP_TYPE_
NOT_
LIKE
)
{
comparFn
=
27
;
comparFn
=
27
;
}
else
if
(
optr
==
OP_TYPE_IN
)
{
}
else
if
(
optr
==
OP_TYPE_IN
)
{
comparFn
=
8
;
comparFn
=
8
;
...
@@ -3513,6 +3513,7 @@ void fltConvertToTsValueNode(SFltTreeStat *stat, SValueNode* valueNode) {
...
@@ -3513,6 +3513,7 @@ void fltConvertToTsValueNode(SFltTreeStat *stat, SValueNode* valueNode) {
}
}
taosMemoryFree
(
timeStr
);
taosMemoryFree
(
timeStr
);
valueNode
->
typeData
=
valueNode
->
datum
.
i
;
valueNode
->
node
.
resType
.
type
=
TSDB_DATA_TYPE_TIMESTAMP
;
valueNode
->
node
.
resType
.
type
=
TSDB_DATA_TYPE_TIMESTAMP
;
valueNode
->
node
.
resType
.
bytes
=
tDataTypes
[
TSDB_DATA_TYPE_TIMESTAMP
].
bytes
;
valueNode
->
node
.
resType
.
bytes
=
tDataTypes
[
TSDB_DATA_TYPE_TIMESTAMP
].
bytes
;
}
}
...
...
source/libs/scalar/src/scalar.c
浏览文件 @
ed1a71f1
...
@@ -92,8 +92,9 @@ int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type) {
...
@@ -92,8 +92,9 @@ int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type) {
}
}
if
(
IS_VAR_DATA_TYPE
(
type
))
{
if
(
IS_VAR_DATA_TYPE
(
type
))
{
len
=
varDataLen
(
out
.
columnData
->
pData
);
char
*
data
=
colDataGetVarData
(
out
.
columnData
,
0
);
buf
=
varDataVal
(
out
.
columnData
->
pData
);
len
=
varDataLen
(
data
);
buf
=
varDataVal
(
data
);
}
else
{
}
else
{
len
=
tDataTypes
[
type
].
bytes
;
len
=
tDataTypes
[
type
].
bytes
;
buf
=
out
.
columnData
->
pData
;
buf
=
out
.
columnData
->
pData
;
...
@@ -109,7 +110,7 @@ int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type) {
...
@@ -109,7 +110,7 @@ int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type) {
}
}
if
(
taosHashPut
(
pObj
,
buf
,
(
size_t
)
len
,
NULL
,
0
))
{
if
(
taosHashPut
(
pObj
,
buf
,
(
size_t
)
len
,
NULL
,
0
))
{
sclError
(
"taosHashPut failed"
);
sclError
(
"taosHashPut
to set
failed"
);
SCL_ERR_JRET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
SCL_ERR_JRET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
}
}
...
...
source/libs/scalar/src/sclvector.c
浏览文件 @
ed1a71f1
...
@@ -328,9 +328,10 @@ static FORCE_INLINE void varToBool(char *buf, SScalarParam* pOut, int32_t rowInd
...
@@ -328,9 +328,10 @@ static FORCE_INLINE void varToBool(char *buf, SScalarParam* pOut, int32_t rowInd
static
FORCE_INLINE
void
varToNchar
(
char
*
buf
,
SScalarParam
*
pOut
,
int32_t
rowIndex
)
{
static
FORCE_INLINE
void
varToNchar
(
char
*
buf
,
SScalarParam
*
pOut
,
int32_t
rowIndex
)
{
int32_t
len
=
0
;
int32_t
len
=
0
;
int32_t
inputLen
=
varDataLen
(
buf
);
int32_t
inputLen
=
varDataLen
(
buf
);
int32_t
outputMaxLen
=
(
inputLen
+
1
)
*
TSDB_NCHAR_SIZE
+
VARSTR_HEADER_SIZE
;
char
*
t
=
taosMemoryCalloc
(
1
,
(
inputLen
+
1
)
*
TSDB_NCHAR_SIZE
+
VARSTR_HEADER_SIZE
);
char
*
t
=
taosMemoryCalloc
(
1
,
outputMaxLen
);
/*int32_t resLen = */
taosMbsToUcs4
(
varDataVal
(
buf
),
inputLen
,
(
TdUcs4
*
)
varDataVal
(
t
),
pOut
->
columnData
->
info
.
bytes
,
&
len
);
/*int32_t resLen = */
taosMbsToUcs4
(
varDataVal
(
buf
),
inputLen
,
(
TdUcs4
*
)
varDataVal
(
t
),
outputMaxLen
,
&
len
);
varDataSetLen
(
t
,
len
);
varDataSetLen
(
t
,
len
);
colDataAppend
(
pOut
->
columnData
,
rowIndex
,
t
,
false
);
colDataAppend
(
pOut
->
columnData
,
rowIndex
,
t
,
false
);
...
@@ -512,7 +513,7 @@ int32_t vectorConvertToVarData(const SScalarParam* pIn, SScalarParam* pOut, int1
...
@@ -512,7 +513,7 @@ int32_t vectorConvertToVarData(const SScalarParam* pIn, SScalarParam* pOut, int1
if
(
outType
==
TSDB_DATA_TYPE_NCHAR
)
{
if
(
outType
==
TSDB_DATA_TYPE_NCHAR
)
{
varToNchar
(
tmp
,
pOut
,
i
);
varToNchar
(
tmp
,
pOut
,
i
);
}
else
{
}
else
{
colDataAppend
(
pOutputCol
,
i
,
(
char
*
)
&
value
,
false
);
colDataAppend
(
pOutputCol
,
i
,
(
char
*
)
tmp
,
false
);
}
}
}
}
}
else
if
(
IS_UNSIGNED_NUMERIC_TYPE
(
inType
))
{
}
else
if
(
IS_UNSIGNED_NUMERIC_TYPE
(
inType
))
{
...
@@ -529,7 +530,7 @@ int32_t vectorConvertToVarData(const SScalarParam* pIn, SScalarParam* pOut, int1
...
@@ -529,7 +530,7 @@ int32_t vectorConvertToVarData(const SScalarParam* pIn, SScalarParam* pOut, int1
if
(
outType
==
TSDB_DATA_TYPE_NCHAR
)
{
if
(
outType
==
TSDB_DATA_TYPE_NCHAR
)
{
varToNchar
(
tmp
,
pOut
,
i
);
varToNchar
(
tmp
,
pOut
,
i
);
}
else
{
}
else
{
colDataAppend
(
pOutputCol
,
i
,
(
char
*
)
&
value
,
false
);
colDataAppend
(
pOutputCol
,
i
,
(
char
*
)
tmp
,
false
);
}
}
}
}
}
else
if
(
IS_FLOAT_TYPE
(
inType
))
{
}
else
if
(
IS_FLOAT_TYPE
(
inType
))
{
...
@@ -546,7 +547,7 @@ int32_t vectorConvertToVarData(const SScalarParam* pIn, SScalarParam* pOut, int1
...
@@ -546,7 +547,7 @@ int32_t vectorConvertToVarData(const SScalarParam* pIn, SScalarParam* pOut, int1
if
(
outType
==
TSDB_DATA_TYPE_NCHAR
)
{
if
(
outType
==
TSDB_DATA_TYPE_NCHAR
)
{
varToNchar
(
tmp
,
pOut
,
i
);
varToNchar
(
tmp
,
pOut
,
i
);
}
else
{
}
else
{
colDataAppend
(
pOutputCol
,
i
,
(
char
*
)
&
value
,
false
);
colDataAppend
(
pOutputCol
,
i
,
(
char
*
)
tmp
,
false
);
}
}
}
}
}
else
{
}
else
{
...
...
source/libs/scheduler/inc/schedulerInt.h
浏览文件 @
ed1a71f1
...
@@ -159,6 +159,7 @@ typedef struct SSchTask {
...
@@ -159,6 +159,7 @@ typedef struct SSchTask {
typedef
struct
SSchJobAttr
{
typedef
struct
SSchJobAttr
{
EExplainMode
explainMode
;
EExplainMode
explainMode
;
bool
needRes
;
bool
syncSchedule
;
bool
syncSchedule
;
bool
queryJob
;
bool
queryJob
;
bool
needFlowCtrl
;
bool
needFlowCtrl
;
...
@@ -190,6 +191,7 @@ typedef struct SSchJob {
...
@@ -190,6 +191,7 @@ typedef struct SSchJob {
SSchTask
*
fetchTask
;
SSchTask
*
fetchTask
;
int32_t
errCode
;
int32_t
errCode
;
SArray
*
errList
;
// SArray<SQueryErrorInfo>
SArray
*
errList
;
// SArray<SQueryErrorInfo>
SRWLatch
resLock
;
void
*
resData
;
//TODO free it or not
void
*
resData
;
//TODO free it or not
int32_t
resNumOfRows
;
int32_t
resNumOfRows
;
const
char
*
sql
;
const
char
*
sql
;
...
...
source/libs/scheduler/src/scheduler.c
浏览文件 @
ed1a71f1
...
@@ -70,7 +70,7 @@ int32_t schInitTask(SSchJob *pJob, SSchTask *pTask, SSubplan *pPlan, SSchLevel *
...
@@ -70,7 +70,7 @@ int32_t schInitTask(SSchJob *pJob, SSchTask *pTask, SSubplan *pPlan, SSchLevel *
}
}
int32_t
schInitJob
(
SSchJob
**
pSchJob
,
SQueryPlan
*
pDag
,
void
*
transport
,
SArray
*
pNodeList
,
const
char
*
sql
,
int32_t
schInitJob
(
SSchJob
**
pSchJob
,
SQueryPlan
*
pDag
,
void
*
transport
,
SArray
*
pNodeList
,
const
char
*
sql
,
int64_t
startTs
,
bool
syncSchedule
)
{
int64_t
startTs
,
bool
needRes
,
bool
syncSchedule
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
int64_t
refId
=
-
1
;
int64_t
refId
=
-
1
;
SSchJob
*
pJob
=
taosMemoryCalloc
(
1
,
sizeof
(
SSchJob
));
SSchJob
*
pJob
=
taosMemoryCalloc
(
1
,
sizeof
(
SSchJob
));
...
@@ -81,6 +81,7 @@ int32_t schInitJob(SSchJob **pSchJob, SQueryPlan *pDag, void *transport, SArray
...
@@ -81,6 +81,7 @@ int32_t schInitJob(SSchJob **pSchJob, SQueryPlan *pDag, void *transport, SArray
pJob
->
attr
.
explainMode
=
pDag
->
explainInfo
.
mode
;
pJob
->
attr
.
explainMode
=
pDag
->
explainInfo
.
mode
;
pJob
->
attr
.
syncSchedule
=
syncSchedule
;
pJob
->
attr
.
syncSchedule
=
syncSchedule
;
pJob
->
attr
.
needRes
=
needRes
;
pJob
->
transport
=
transport
;
pJob
->
transport
=
transport
;
pJob
->
sql
=
sql
;
pJob
->
sql
=
sql
;
...
@@ -1133,16 +1134,39 @@ int32_t schHandleResponseMsg(SSchJob *pJob, SSchTask *pTask, int32_t msgType, ch
...
@@ -1133,16 +1134,39 @@ int32_t schHandleResponseMsg(SSchJob *pJob, SSchTask *pTask, int32_t msgType, ch
break
;
break
;
}
}
case
TDMT_VND_SUBMIT_RSP
:
{
case
TDMT_VND_SUBMIT_RSP
:
{
SCH_ERR_JRET
(
rspCode
);
if
(
msg
)
{
if
(
msg
)
{
SSubmitRsp
*
rsp
=
(
SSubmitRsp
*
)
msg
;
SDecoder
coder
=
{
0
};
SCH_ERR_JRET
(
rsp
->
code
);
SSubmitRsp
*
rsp
=
taosMemoryMalloc
(
sizeof
(
*
rsp
));
tDecoderInit
(
&
coder
,
msg
,
msgSize
);
code
=
tDecodeSSubmitRsp
(
&
coder
,
rsp
);
if
(
code
)
{
SCH_TASK_ELOG
(
"decode submitRsp failed, code:%d"
,
code
);
tFreeSSubmitRsp
(
rsp
);
SCH_ERR_JRET
(
code
);
}
}
SCH_ERR_JRET
(
rspCode
);
atomic_add_fetch_32
(
&
pJob
->
resNumOfRows
,
rsp
->
affectedRows
);
SCH_TASK_DLOG
(
"submit succeed, affectedRows:%d"
,
rsp
->
affectedRows
);
SSubmitRsp
*
rsp
=
(
SSubmitRsp
*
)
msg
;
if
(
pJob
->
attr
.
needRes
)
{
if
(
rsp
)
{
SCH_LOCK
(
SCH_WRITE
,
&
pJob
->
resLock
);
pJob
->
resNumOfRows
+=
rsp
->
affectedRows
;
if
(
pJob
->
resData
)
{
SSubmitRsp
*
sum
=
pJob
->
resData
;
sum
->
affectedRows
+=
rsp
->
affectedRows
;
sum
->
nBlocks
+=
rsp
->
nBlocks
;
sum
->
pBlocks
=
taosMemoryRealloc
(
sum
->
pBlocks
,
sum
->
nBlocks
*
sizeof
(
*
sum
->
pBlocks
));
memcpy
(
sum
->
pBlocks
+
sum
->
nBlocks
-
rsp
->
nBlocks
,
rsp
->
pBlocks
,
rsp
->
nBlocks
*
sizeof
(
*
sum
->
pBlocks
));
taosMemoryFree
(
rsp
->
pBlocks
);
taosMemoryFree
(
rsp
);
}
else
{
pJob
->
resData
=
rsp
;
}
SCH_UNLOCK
(
SCH_WRITE
,
&
pJob
->
resLock
);
}
else
{
tFreeSSubmitRsp
(
rsp
);
}
}
}
SCH_ERR_RET
(
schProcessOnTaskSuccess
(
pJob
,
pTask
));
SCH_ERR_RET
(
schProcessOnTaskSuccess
(
pJob
,
pTask
));
...
@@ -2350,7 +2374,7 @@ void schFreeJobImpl(void *job) {
...
@@ -2350,7 +2374,7 @@ void schFreeJobImpl(void *job) {
}
}
static
int32_t
schExecJobImpl
(
void
*
transport
,
SArray
*
pNodeList
,
SQueryPlan
*
pDag
,
int64_t
*
job
,
const
char
*
sql
,
static
int32_t
schExecJobImpl
(
void
*
transport
,
SArray
*
pNodeList
,
SQueryPlan
*
pDag
,
int64_t
*
job
,
const
char
*
sql
,
int64_t
startTs
,
bool
syncSchedule
)
{
int64_t
startTs
,
bool
needRes
,
bool
syncSchedule
)
{
qDebug
(
"QID:0x%"
PRIx64
" job started"
,
pDag
->
queryId
);
qDebug
(
"QID:0x%"
PRIx64
" job started"
,
pDag
->
queryId
);
if
(
pNodeList
==
NULL
||
taosArrayGetSize
(
pNodeList
)
<=
0
)
{
if
(
pNodeList
==
NULL
||
taosArrayGetSize
(
pNodeList
)
<=
0
)
{
...
@@ -2359,7 +2383,7 @@ static int32_t schExecJobImpl(void *transport, SArray *pNodeList, SQueryPlan *pD
...
@@ -2359,7 +2383,7 @@ static int32_t schExecJobImpl(void *transport, SArray *pNodeList, SQueryPlan *pD
int32_t
code
=
0
;
int32_t
code
=
0
;
SSchJob
*
pJob
=
NULL
;
SSchJob
*
pJob
=
NULL
;
SCH_ERR_JRET
(
schInitJob
(
&
pJob
,
pDag
,
transport
,
pNodeList
,
sql
,
startTs
,
syncSchedule
));
SCH_ERR_JRET
(
schInitJob
(
&
pJob
,
pDag
,
transport
,
pNodeList
,
sql
,
startTs
,
needRes
,
syncSchedule
));
SCH_ERR_JRET
(
schLaunchJob
(
pJob
));
SCH_ERR_JRET
(
schLaunchJob
(
pJob
));
...
@@ -2473,7 +2497,7 @@ int32_t schedulerInit(SSchedulerCfg *cfg) {
...
@@ -2473,7 +2497,7 @@ int32_t schedulerInit(SSchedulerCfg *cfg) {
}
}
int32_t
schedulerExecJob
(
void
*
transport
,
SArray
*
nodeList
,
SQueryPlan
*
pDag
,
int64_t
*
pJob
,
const
char
*
sql
,
int32_t
schedulerExecJob
(
void
*
transport
,
SArray
*
nodeList
,
SQueryPlan
*
pDag
,
int64_t
*
pJob
,
const
char
*
sql
,
int64_t
startTs
,
SQueryResult
*
pRes
)
{
int64_t
startTs
,
bool
needRes
,
SQueryResult
*
pRes
)
{
if
(
NULL
==
transport
||
NULL
==
pDag
||
NULL
==
pDag
->
pSubplans
||
NULL
==
pJob
||
NULL
==
pRes
)
{
if
(
NULL
==
transport
||
NULL
==
pDag
||
NULL
==
pDag
->
pSubplans
||
NULL
==
pJob
||
NULL
==
pRes
)
{
SCH_ERR_RET
(
TSDB_CODE_QRY_INVALID_INPUT
);
SCH_ERR_RET
(
TSDB_CODE_QRY_INVALID_INPUT
);
}
}
...
@@ -2481,13 +2505,17 @@ int32_t schedulerExecJob(void *transport, SArray *nodeList, SQueryPlan *pDag, in
...
@@ -2481,13 +2505,17 @@ int32_t schedulerExecJob(void *transport, SArray *nodeList, SQueryPlan *pDag, in
if
(
EXPLAIN_MODE_STATIC
==
pDag
->
explainInfo
.
mode
)
{
if
(
EXPLAIN_MODE_STATIC
==
pDag
->
explainInfo
.
mode
)
{
SCH_ERR_RET
(
schExecStaticExplain
(
transport
,
nodeList
,
pDag
,
pJob
,
sql
,
true
));
SCH_ERR_RET
(
schExecStaticExplain
(
transport
,
nodeList
,
pDag
,
pJob
,
sql
,
true
));
}
else
{
}
else
{
SCH_ERR_RET
(
schExecJobImpl
(
transport
,
nodeList
,
pDag
,
pJob
,
sql
,
startTs
,
true
));
SCH_ERR_RET
(
schExecJobImpl
(
transport
,
nodeList
,
pDag
,
pJob
,
sql
,
startTs
,
needRes
,
true
));
}
}
SSchJob
*
job
=
schAcquireJob
(
*
pJob
);
SSchJob
*
job
=
schAcquireJob
(
*
pJob
);
pRes
->
code
=
atomic_load_32
(
&
job
->
errCode
);
pRes
->
code
=
atomic_load_32
(
&
job
->
errCode
);
pRes
->
numOfRows
=
job
->
resNumOfRows
;
pRes
->
numOfRows
=
job
->
resNumOfRows
;
if
(
needRes
)
{
pRes
->
res
=
job
->
resData
;
job
->
resData
=
NULL
;
}
schReleaseJob
(
*
pJob
);
schReleaseJob
(
*
pJob
);
...
@@ -2502,7 +2530,7 @@ int32_t schedulerAsyncExecJob(void *transport, SArray *pNodeList, SQueryPlan *pD
...
@@ -2502,7 +2530,7 @@ int32_t schedulerAsyncExecJob(void *transport, SArray *pNodeList, SQueryPlan *pD
if
(
EXPLAIN_MODE_STATIC
==
pDag
->
explainInfo
.
mode
)
{
if
(
EXPLAIN_MODE_STATIC
==
pDag
->
explainInfo
.
mode
)
{
SCH_ERR_RET
(
schExecStaticExplain
(
transport
,
pNodeList
,
pDag
,
pJob
,
sql
,
false
));
SCH_ERR_RET
(
schExecStaticExplain
(
transport
,
pNodeList
,
pDag
,
pJob
,
sql
,
false
));
}
else
{
}
else
{
SCH_ERR_RET
(
schExecJobImpl
(
transport
,
pNodeList
,
pDag
,
pJob
,
sql
,
0
,
false
));
SCH_ERR_RET
(
schExecJobImpl
(
transport
,
pNodeList
,
pDag
,
pJob
,
sql
,
0
,
false
,
false
));
}
}
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
...
...
source/libs/scheduler/test/schedulerTests.cpp
浏览文件 @
ed1a71f1
...
@@ -985,7 +985,7 @@ TEST(insertTest, normalCase) {
...
@@ -985,7 +985,7 @@ TEST(insertTest, normalCase) {
taosThreadCreate
(
&
(
thread1
),
&
thattr
,
schtSendRsp
,
&
insertJobRefId
);
taosThreadCreate
(
&
(
thread1
),
&
thattr
,
schtSendRsp
,
&
insertJobRefId
);
SQueryResult
res
=
{
0
};
SQueryResult
res
=
{
0
};
code
=
schedulerExecJob
(
mockPointer
,
qnodeList
,
&
dag
,
&
insertJobRefId
,
"insert into tb values(now,1)"
,
0
,
&
res
);
code
=
schedulerExecJob
(
mockPointer
,
qnodeList
,
&
dag
,
&
insertJobRefId
,
"insert into tb values(now,1)"
,
0
,
false
,
&
res
);
ASSERT_EQ
(
code
,
0
);
ASSERT_EQ
(
code
,
0
);
ASSERT_EQ
(
res
.
numOfRows
,
20
);
ASSERT_EQ
(
res
.
numOfRows
,
20
);
...
...
source/libs/sync/src/syncRaftLog.c
浏览文件 @
ed1a71f1
...
@@ -62,7 +62,7 @@ int32_t logStoreAppendEntry(SSyncLogStore* pLogStore, SSyncRaftEntry* pEntry) {
...
@@ -62,7 +62,7 @@ int32_t logStoreAppendEntry(SSyncLogStore* pLogStore, SSyncRaftEntry* pEntry) {
const
char
*
errStr
=
tstrerror
(
err
);
const
char
*
errStr
=
tstrerror
(
err
);
int32_t
linuxErr
=
errno
;
int32_t
linuxErr
=
errno
;
const
char
*
linuxErrMsg
=
strerror
(
errno
);
const
char
*
linuxErrMsg
=
strerror
(
errno
);
sError
(
"walWriteWithSyncInfo error, err:%d
, msg:%s, linuxErr:%d, linuxErrMsg:%s"
,
err
,
errStr
,
linuxErr
,
linuxErrMsg
);
sError
(
"walWriteWithSyncInfo error, err:%d
%X, msg:%s, linuxErr:%d, linuxErrMsg:%s"
,
err
,
err
,
errStr
,
linuxErr
,
linuxErrMsg
);
ASSERT
(
0
);
ASSERT
(
0
);
}
}
//assert(code == 0);
//assert(code == 0);
...
@@ -83,7 +83,7 @@ SSyncRaftEntry* logStoreGetEntry(SSyncLogStore* pLogStore, SyncIndex index) {
...
@@ -83,7 +83,7 @@ SSyncRaftEntry* logStoreGetEntry(SSyncLogStore* pLogStore, SyncIndex index) {
const
char
*
errStr
=
tstrerror
(
err
);
const
char
*
errStr
=
tstrerror
(
err
);
int32_t
linuxErr
=
errno
;
int32_t
linuxErr
=
errno
;
const
char
*
linuxErrMsg
=
strerror
(
errno
);
const
char
*
linuxErrMsg
=
strerror
(
errno
);
sError
(
"walReadWithHandle error, err:%d
, msg:%s, linuxErr:%d, linuxErrMsg:%s"
,
err
,
errStr
,
linuxErr
,
linuxErrMsg
);
sError
(
"walReadWithHandle error, err:%d
%X, msg:%s, linuxErr:%d, linuxErrMsg:%s"
,
err
,
err
,
errStr
,
linuxErr
,
linuxErrMsg
);
ASSERT
(
0
);
ASSERT
(
0
);
}
}
//assert(walReadWithHandle(pWalHandle, index) == 0);
//assert(walReadWithHandle(pWalHandle, index) == 0);
...
@@ -119,7 +119,7 @@ int32_t logStoreTruncate(SSyncLogStore* pLogStore, SyncIndex fromIndex) {
...
@@ -119,7 +119,7 @@ int32_t logStoreTruncate(SSyncLogStore* pLogStore, SyncIndex fromIndex) {
const
char
*
errStr
=
tstrerror
(
err
);
const
char
*
errStr
=
tstrerror
(
err
);
int32_t
linuxErr
=
errno
;
int32_t
linuxErr
=
errno
;
const
char
*
linuxErrMsg
=
strerror
(
errno
);
const
char
*
linuxErrMsg
=
strerror
(
errno
);
sError
(
"walRollback error, err:%d
, msg:%s, linuxErr:%d, linuxErrMsg:%s"
,
err
,
errStr
,
linuxErr
,
linuxErrMsg
);
sError
(
"walRollback error, err:%d
%X, msg:%s, linuxErr:%d, linuxErrMsg:%s"
,
err
,
err
,
errStr
,
linuxErr
,
linuxErrMsg
);
ASSERT
(
0
);
ASSERT
(
0
);
}
}
return
0
;
// to avoid compiler error
return
0
;
// to avoid compiler error
...
@@ -152,7 +152,7 @@ int32_t logStoreUpdateCommitIndex(SSyncLogStore* pLogStore, SyncIndex index) {
...
@@ -152,7 +152,7 @@ int32_t logStoreUpdateCommitIndex(SSyncLogStore* pLogStore, SyncIndex index) {
const
char
*
errStr
=
tstrerror
(
err
);
const
char
*
errStr
=
tstrerror
(
err
);
int32_t
linuxErr
=
errno
;
int32_t
linuxErr
=
errno
;
const
char
*
linuxErrMsg
=
strerror
(
errno
);
const
char
*
linuxErrMsg
=
strerror
(
errno
);
sError
(
"walCommit error, err:%d
, msg:%s, linuxErr:%d, linuxErrMsg:%s"
,
err
,
errStr
,
linuxErr
,
linuxErrMsg
);
sError
(
"walCommit error, err:%d
%X, msg:%s, linuxErr:%d, linuxErrMsg:%s"
,
err
,
err
,
errStr
,
linuxErr
,
linuxErrMsg
);
ASSERT
(
0
);
ASSERT
(
0
);
}
}
return
0
;
// to avoid compiler error
return
0
;
// to avoid compiler error
...
...
source/os/src/osMemory.c
浏览文件 @
ed1a71f1
...
@@ -103,7 +103,8 @@ Dwarf_Debug tDbg;
...
@@ -103,7 +103,8 @@ Dwarf_Debug tDbg;
static
TdThreadOnce
traceThreadInit
=
PTHREAD_ONCE_INIT
;
static
TdThreadOnce
traceThreadInit
=
PTHREAD_ONCE_INIT
;
void
endTrace
()
{
void
endTrace
()
{
if
(
traceThreadInit
!=
PTHREAD_ONCE_INIT
)
{
TdThreadOnce
tmp
=
PTHREAD_ONCE_INIT
;
if
(
memcmp
(
&
traceThreadInit
,
&
tmp
,
sizeof
(
TdThreadOnce
))
!=
0
)
{
delete_lookup_table
(
&
lookup_table
);
delete_lookup_table
(
&
lookup_table
);
dwarf_finish
(
tDbg
);
dwarf_finish
(
tDbg
);
}
}
...
...
source/util/src/tcache.c
浏览文件 @
ed1a71f1
...
@@ -911,7 +911,8 @@ void taosCacheRefresh(SCacheObj *pCacheObj, __cache_trav_fn_t fp, void *param1)
...
@@ -911,7 +911,8 @@ void taosCacheRefresh(SCacheObj *pCacheObj, __cache_trav_fn_t fp, void *param1)
void
taosStopCacheRefreshWorker
(
void
)
{
void
taosStopCacheRefreshWorker
(
void
)
{
stopRefreshWorker
=
true
;
stopRefreshWorker
=
true
;
if
(
cacheThreadInit
!=
PTHREAD_ONCE_INIT
)
taosThreadJoin
(
cacheRefreshWorker
,
NULL
);
TdThreadOnce
tmp
=
PTHREAD_ONCE_INIT
;
if
(
memcmp
(
&
cacheRefreshWorker
,
&
tmp
,
sizeof
(
TdThreadOnce
))
!=
0
)
taosThreadJoin
(
cacheRefreshWorker
,
NULL
);
taosArrayDestroy
(
pCacheArrayList
);
taosArrayDestroy
(
pCacheArrayList
);
}
}
...
...
source/util/src/tuuid.c
浏览文件 @
ed1a71f1
...
@@ -48,10 +48,18 @@ int64_t tGenIdPI64(void) {
...
@@ -48,10 +48,18 @@ int64_t tGenIdPI64(void) {
}
}
}
}
int64_t
id
;
while
(
true
)
{
int64_t
ts
=
taosGetTimestampMs
();
int64_t
ts
=
taosGetTimestampMs
();
uint64_t
pid
=
taosGetPId
();
uint64_t
pid
=
taosGetPId
();
int32_t
val
=
atomic_add_fetch_32
(
&
tUUIDSerialNo
,
1
);
int32_t
val
=
atomic_add_fetch_32
(
&
tUUIDSerialNo
,
1
);
int64_t
id
=
((
tUUIDHashId
&
0x07FF
)
<<
52
)
|
((
pid
&
0x0FFF
)
<<
40
)
|
((
ts
&
0xFFFFFF
)
<<
16
)
|
(
val
&
0xFFFF
);
id
=
((
tUUIDHashId
&
0x07FF
)
<<
52
)
|
((
pid
&
0x0FFF
)
<<
40
)
|
((
ts
&
0xFFFFFF
)
<<
16
)
|
(
val
&
0xFFFF
);
if
(
id
)
{
break
;
}
}
return
id
;
return
id
;
}
}
tests/script/api/batchprepare.c
浏览文件 @
ed1a71f1
...
@@ -11,8 +11,8 @@
...
@@ -11,8 +11,8 @@
int32_t
shortColList
[]
=
{
TSDB_DATA_TYPE_TIMESTAMP
,
TSDB_DATA_TYPE_INT
};
int32_t
shortColList
[]
=
{
TSDB_DATA_TYPE_TIMESTAMP
,
TSDB_DATA_TYPE_INT
};
int32_t
fullColList
[]
=
{
TSDB_DATA_TYPE_TIMESTAMP
,
TSDB_DATA_TYPE_BOOL
,
TSDB_DATA_TYPE_TINYINT
,
TSDB_DATA_TYPE_UTINYINT
,
TSDB_DATA_TYPE_SMALLINT
,
TSDB_DATA_TYPE_USMALLINT
,
TSDB_DATA_TYPE_INT
,
TSDB_DATA_TYPE_UINT
,
TSDB_DATA_TYPE_BIGINT
,
TSDB_DATA_TYPE_UBIGINT
,
TSDB_DATA_TYPE_FLOAT
,
TSDB_DATA_TYPE_DOUBLE
,
TSDB_DATA_TYPE_BINARY
,
TSDB_DATA_TYPE_NCHAR
};
int32_t
fullColList
[]
=
{
TSDB_DATA_TYPE_TIMESTAMP
,
TSDB_DATA_TYPE_BOOL
,
TSDB_DATA_TYPE_TINYINT
,
TSDB_DATA_TYPE_UTINYINT
,
TSDB_DATA_TYPE_SMALLINT
,
TSDB_DATA_TYPE_USMALLINT
,
TSDB_DATA_TYPE_INT
,
TSDB_DATA_TYPE_UINT
,
TSDB_DATA_TYPE_BIGINT
,
TSDB_DATA_TYPE_UBIGINT
,
TSDB_DATA_TYPE_FLOAT
,
TSDB_DATA_TYPE_DOUBLE
,
TSDB_DATA_TYPE_BINARY
,
TSDB_DATA_TYPE_NCHAR
};
int32_t
bindColTypeList
[]
=
{
TSDB_DATA_TYPE_TIMESTAMP
,
TSDB_DATA_TYPE_
SMALLINT
,
TSDB_DATA_TYPE_
NCHAR
};
int32_t
bindColTypeList
[]
=
{
TSDB_DATA_TYPE_TIMESTAMP
,
TSDB_DATA_TYPE_NCHAR
};
int32_t
optrIdxList
[]
=
{
0
,
1
,
2
};
int32_t
optrIdxList
[]
=
{
0
,
9
};
typedef
struct
{
typedef
struct
{
char
*
oper
;
char
*
oper
;
...
@@ -92,7 +92,8 @@ int insertMBMETest3(TAOS_STMT *stmt, TAOS *taos);
...
@@ -92,7 +92,8 @@ int insertMBMETest3(TAOS_STMT *stmt, TAOS *taos);
int
insertMBMETest4
(
TAOS_STMT
*
stmt
,
TAOS
*
taos
);
int
insertMBMETest4
(
TAOS_STMT
*
stmt
,
TAOS
*
taos
);
int
insertMPMETest1
(
TAOS_STMT
*
stmt
,
TAOS
*
taos
);
int
insertMPMETest1
(
TAOS_STMT
*
stmt
,
TAOS
*
taos
);
int
insertAUTOTest1
(
TAOS_STMT
*
stmt
,
TAOS
*
taos
);
int
insertAUTOTest1
(
TAOS_STMT
*
stmt
,
TAOS
*
taos
);
int
querySUBTTest1
(
TAOS_STMT
*
stmt
,
TAOS
*
taos
);
int
queryColumnTest
(
TAOS_STMT
*
stmt
,
TAOS
*
taos
);
int
queryMiscTest
(
TAOS_STMT
*
stmt
,
TAOS
*
taos
);
enum
{
enum
{
TTYPE_INSERT
=
1
,
TTYPE_INSERT
=
1
,
...
@@ -152,7 +153,8 @@ CaseCfg gCase[] = {
...
@@ -152,7 +153,8 @@ CaseCfg gCase[] = {
// 22
// 22
{
"insert:AUTO1-FULL"
,
tListLen
(
fullColList
),
fullColList
,
TTYPE_INSERT
,
true
,
true
,
insertAUTOTest1
,
10
,
10
,
2
,
0
,
0
,
0
,
1
,
-
1
},
{
"insert:AUTO1-FULL"
,
tListLen
(
fullColList
),
fullColList
,
TTYPE_INSERT
,
true
,
true
,
insertAUTOTest1
,
10
,
10
,
2
,
0
,
0
,
0
,
1
,
-
1
},
{
"query:SUBT-FULL"
,
tListLen
(
fullColList
),
fullColList
,
TTYPE_QUERY
,
false
,
false
,
querySUBTTest1
,
10
,
10
,
1
,
3
,
0
,
0
,
1
,
2
},
{
"query:SUBT-COLUMN"
,
tListLen
(
fullColList
),
fullColList
,
TTYPE_QUERY
,
false
,
false
,
queryColumnTest
,
10
,
10
,
1
,
3
,
0
,
0
,
1
,
2
},
{
"query:SUBT-MISC"
,
tListLen
(
fullColList
),
fullColList
,
TTYPE_QUERY
,
false
,
false
,
queryMiscTest
,
10
,
10
,
1
,
3
,
0
,
0
,
1
,
2
},
};
};
...
@@ -184,7 +186,7 @@ typedef struct {
...
@@ -184,7 +186,7 @@ typedef struct {
int32_t
caseRunNum
;
// total run case num
int32_t
caseRunNum
;
// total run case num
}
CaseCtrl
;
}
CaseCtrl
;
#if
0
#if
1
CaseCtrl
gCaseCtrl
=
{
// default
CaseCtrl
gCaseCtrl
=
{
// default
.
bindNullNum
=
0
,
.
bindNullNum
=
0
,
.
printCreateTblSql
=
false
,
.
printCreateTblSql
=
false
,
...
@@ -202,7 +204,7 @@ CaseCtrl gCaseCtrl = { // default
...
@@ -202,7 +204,7 @@ CaseCtrl gCaseCtrl = { // default
.
optrIdxListNum
=
0
,
.
optrIdxListNum
=
0
,
.
optrIdxList
=
NULL
,
.
optrIdxList
=
NULL
,
.
checkParamNum
=
false
,
.
checkParamNum
=
false
,
.printRes =
tru
e,
.
printRes
=
fals
e
,
.
runTimes
=
0
,
.
runTimes
=
0
,
.
caseIdx
=
-
1
,
.
caseIdx
=
-
1
,
.
caseNum
=
-
1
,
.
caseNum
=
-
1
,
...
@@ -212,8 +214,8 @@ CaseCtrl gCaseCtrl = { // default
...
@@ -212,8 +214,8 @@ CaseCtrl gCaseCtrl = { // default
#endif
#endif
#if
1
#if
0
CaseCtrl
gCaseCtrl
=
{
// default
CaseCtrl gCaseCtrl = {
.bindNullNum = 0,
.bindNullNum = 0,
.printCreateTblSql = true,
.printCreateTblSql = true,
.printQuerySql = true,
.printQuerySql = true,
...
@@ -223,18 +225,18 @@ CaseCtrl gCaseCtrl = { // default
...
@@ -223,18 +225,18 @@ CaseCtrl gCaseCtrl = { // default
.bindColNum = 0,
.bindColNum = 0,
.bindTagNum = 0,
.bindTagNum = 0,
.bindRowNum = 0,
.bindRowNum = 0,
.
bindColTypeNum
=
0
,
.bindColTypeNum =
tListLen(bindColTypeList)
,
.
bindColTypeList
=
NULL
,
.bindColTypeList =
bindColTypeList
,
.bindTagTypeNum = 0,
.bindTagTypeNum = 0,
.bindTagTypeList = NULL,
.bindTagTypeList = NULL,
.
optrIdxListNum
=
0
,
.optrIdxListNum =
tListLen(optrIdxList)
,
.
optrIdxList
=
NULL
,
.optrIdxList =
optrIdxList
,
.checkParamNum = false,
.checkParamNum = false,
.
printRes
=
tru
e
,
.printRes =
fals
e,
.runTimes = 0,
.runTimes = 0,
.
caseIdx
=
-
1
,
.caseIdx =
23
,
.caseNum = 1,
.caseNum = 1,
.
caseRunIdx
=
1
1
,
.caseRunIdx =
-
1,
.caseRunNum = 1,
.caseRunNum = 1,
};
};
#endif
#endif
...
@@ -253,14 +255,14 @@ CaseCtrl gCaseCtrl = { // query case with specified col&oper
...
@@ -253,14 +255,14 @@ CaseCtrl gCaseCtrl = { // query case with specified col&oper
.optrIdxListNum = 0,
.optrIdxListNum = 0,
.optrIdxList = NULL,
.optrIdxList = NULL,
.checkParamNum = false,
.checkParamNum = false,
.printRes =
tru
e,
.printRes =
fals
e,
.runTimes = 0,
.runTimes = 0,
.caseRunIdx = -1,
.caseRunIdx = -1,
.optrIdxListNum = 0,
.optrIdxListNum = 0,
.optrIdxList = NULL,
.optrIdxList = NULL,
.bindColTypeNum = 0,
.bindColTypeNum = 0,
.bindColTypeList = NULL,
.bindColTypeList = NULL,
.caseIdx = 2
2
,
.caseIdx = 2
3
,
.caseNum = 1,
.caseNum = 1,
.caseRunNum = 1,
.caseRunNum = 1,
};
};
...
@@ -1749,7 +1751,7 @@ int insertAUTOTest1(TAOS_STMT *stmt, TAOS *taos) {
...
@@ -1749,7 +1751,7 @@ int insertAUTOTest1(TAOS_STMT *stmt, TAOS *taos) {
/* select * from table */
/* select * from table */
int
query
SUBTTest1
(
TAOS_STMT
*
stmt
,
TAOS
*
taos
)
{
int
query
ColumnTest
(
TAOS_STMT
*
stmt
,
TAOS
*
taos
)
{
BindData
data
=
{
0
};
BindData
data
=
{
0
};
for
(
int32_t
t
=
0
;
t
<
gCurCase
->
tblNum
;
++
t
)
{
for
(
int32_t
t
=
0
;
t
<
gCurCase
->
tblNum
;
++
t
)
{
...
@@ -1795,7 +1797,7 @@ int querySUBTTest1(TAOS_STMT *stmt, TAOS *taos) {
...
@@ -1795,7 +1797,7 @@ int querySUBTTest1(TAOS_STMT *stmt, TAOS *taos) {
}
}
/* value in query sql */
/* value in query sql */
int
query
SUBTTest2
(
TAOS_STMT
*
stmt
,
TAOS
*
taos
)
{
int
query
MiscTest
(
TAOS_STMT
*
stmt
,
TAOS
*
taos
)
{
BindData
data
=
{
0
};
BindData
data
=
{
0
};
for
(
int32_t
t
=
0
;
t
<
gCurCase
->
tblNum
;
++
t
)
{
for
(
int32_t
t
=
0
;
t
<
gCurCase
->
tblNum
;
++
t
)
{
...
@@ -1862,1119 +1864,6 @@ int errorSQLTest1(TAOS_STMT *stmt, TAOS *taos) {
...
@@ -1862,1119 +1864,6 @@ int errorSQLTest1(TAOS_STMT *stmt, TAOS *taos) {
return
0
;
return
0
;
}
}
#if 0
//1 tables 10 records
int stmt_funcb_autoctb1(TAOS_STMT *stmt) {
struct {
int64_t *ts;
int8_t b[10];
int8_t v1[10];
int16_t v2[10];
int32_t v4[10];
int64_t v8[10];
float f4[10];
double f8[10];
char bin[10][40];
} v = {0};
v.ts = taosMemoryMalloc(sizeof(int64_t) * 1 * 10);
int *lb = taosMemoryMalloc(10 * sizeof(int));
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 1*10);
unsigned long long starttime = taosGetTimestampUs();
char *sql = "insert into ? using stb1 tags(?,?,?,?,?,?,?,?,?) values(?,?,?,?,?,?,?,?,?,?)";
int code = taos_stmt_prepare(stmt, sql, 0);
if (code != 0){
printf("failed to execute taos_stmt_prepare. code:0x%x\n", code);
exit(1);
}
int id = 0;
for (int zz = 0; zz < 1; zz++) {
char buf[32];
sprintf(buf, "m%d", zz);
code = taos_stmt_set_tbname_tags(stmt, buf, tags);
if (code != 0){
printf("failed to execute taos_stmt_set_tbname_tags. code:0x%x\n", code);
}
taos_stmt_bind_param_batch(stmt, params + id * 10);
taos_stmt_add_batch(stmt);
}
if (taos_stmt_execute(stmt) != 0) {
printf("failed to execute insert statement.\n");
exit(1);
}
++id;
unsigned long long endtime = taosGetTimestampUs();
printf("insert total %d records, used %u seconds, avg:%u useconds\n", 10, (endtime-starttime)/1000000UL, (endtime-starttime)/(10));
taosMemoryFree(v.ts);
taosMemoryFree(lb);
taosMemoryFree(params);
taosMemoryFree(is_null);
taosMemoryFree(no_null);
taosMemoryFree(tags);
return 0;
}
//1 tables 10 records
int stmt_funcb_autoctb2(TAOS_STMT *stmt) {
struct {
int64_t *ts;
int8_t b[10];
int8_t v1[10];
int16_t v2[10];
int32_t v4[10];
int64_t v8[10];
float f4[10];
double f8[10];
char bin[10][40];
} v = {0};
v.ts = taosMemoryMalloc(sizeof(int64_t) * 1 * 10);
int *lb = taosMemoryMalloc(10 * sizeof(int));
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 1*10);
// int one_null = 1;
int one_not_null = 0;
char* is_null = taosMemoryMalloc(sizeof(char) * 10);
char* no_null = taosMemoryMalloc(sizeof(char) * 10);
for (int i = 0; i < 10; ++i) {
lb[i] = 40;
no_null[i] = 0;
is_null[i] = (i % 10 == 2) ? 1 : 0;
v.b[i] = (int8_t)(i % 2);
v.v1[i] = (int8_t)((i+1) % 2);
v.v2[i] = (int16_t)i;
v.v4[i] = (int32_t)(i+1);
v.v8[i] = (int64_t)(i+2);
v.f4[i] = (float)(i+3);
v.f8[i] = (double)(i+4);
memset(v.bin[i], '0'+i%10, 40);
}
for (int i = 0; i < 10; i+=10) {
params[i+0].buffer_type = TSDB_DATA_TYPE_TIMESTAMP;
params[i+0].buffer_length = sizeof(int64_t);
params[i+0].buffer = &v.ts[10*i/10];
params[i+0].length = NULL;
params[i+0].is_null = no_null;
params[i+0].num = 10;
params[i+1].buffer_type = TSDB_DATA_TYPE_BOOL;
params[i+1].buffer_length = sizeof(int8_t);
params[i+1].buffer = v.b;
params[i+1].length = NULL;
params[i+1].is_null = is_null;
params[i+1].num = 10;
params[i+2].buffer_type = TSDB_DATA_TYPE_TINYINT;
params[i+2].buffer_length = sizeof(int8_t);
params[i+2].buffer = v.v1;
params[i+2].length = NULL;
params[i+2].is_null = is_null;
params[i+2].num = 10;
params[i+3].buffer_type = TSDB_DATA_TYPE_SMALLINT;
params[i+3].buffer_length = sizeof(int16_t);
params[i+3].buffer = v.v2;
params[i+3].length = NULL;
params[i+3].is_null = is_null;
params[i+3].num = 10;
params[i+4].buffer_type = TSDB_DATA_TYPE_INT;
params[i+4].buffer_length = sizeof(int32_t);
params[i+4].buffer = v.v4;
params[i+4].length = NULL;
params[i+4].is_null = is_null;
params[i+4].num = 10;
params[i+5].buffer_type = TSDB_DATA_TYPE_BIGINT;
params[i+5].buffer_length = sizeof(int64_t);
params[i+5].buffer = v.v8;
params[i+5].length = NULL;
params[i+5].is_null = is_null;
params[i+5].num = 10;
params[i+6].buffer_type = TSDB_DATA_TYPE_FLOAT;
params[i+6].buffer_length = sizeof(float);
params[i+6].buffer = v.f4;
params[i+6].length = NULL;
params[i+6].is_null = is_null;
params[i+6].num = 10;
params[i+7].buffer_type = TSDB_DATA_TYPE_DOUBLE;
params[i+7].buffer_length = sizeof(double);
params[i+7].buffer = v.f8;
params[i+7].length = NULL;
params[i+7].is_null = is_null;
params[i+7].num = 10;
params[i+8].buffer_type = TSDB_DATA_TYPE_BINARY;
params[i+8].buffer_length = 40;
params[i+8].buffer = v.bin;
params[i+8].length = lb;
params[i+8].is_null = is_null;
params[i+8].num = 10;
params[i+9].buffer_type = TSDB_DATA_TYPE_BINARY;
params[i+9].buffer_length = 40;
params[i+9].buffer = v.bin;
params[i+9].length = lb;
params[i+9].is_null = is_null;
params[i+9].num = 10;
}
int64_t tts = 1591060628000;
for (int i = 0; i < 10; ++i) {
v.ts[i] = tts + i;
}
for (int i = 0; i < 1; ++i) {
tags[i+0].buffer_type = TSDB_DATA_TYPE_INT;
tags[i+0].buffer = v.v4;
tags[i+0].is_null = &one_not_null;
tags[i+0].length = NULL;
tags[i+1].buffer_type = TSDB_DATA_TYPE_BOOL;
tags[i+1].buffer = v.b;
tags[i+1].is_null = &one_not_null;
tags[i+1].length = NULL;
tags[i+2].buffer_type = TSDB_DATA_TYPE_TINYINT;
tags[i+2].buffer = v.v1;
tags[i+2].is_null = &one_not_null;
tags[i+2].length = NULL;
tags[i+3].buffer_type = TSDB_DATA_TYPE_SMALLINT;
tags[i+3].buffer = v.v2;
tags[i+3].is_null = &one_not_null;
tags[i+3].length = NULL;
tags[i+4].buffer_type = TSDB_DATA_TYPE_BIGINT;
tags[i+4].buffer = v.v8;
tags[i+4].is_null = &one_not_null;
tags[i+4].length = NULL;
tags[i+5].buffer_type = TSDB_DATA_TYPE_FLOAT;
tags[i+5].buffer = v.f4;
tags[i+5].is_null = &one_not_null;
tags[i+5].length = NULL;
tags[i+6].buffer_type = TSDB_DATA_TYPE_DOUBLE;
tags[i+6].buffer = v.f8;
tags[i+6].is_null = &one_not_null;
tags[i+6].length = NULL;
tags[i+7].buffer_type = TSDB_DATA_TYPE_BINARY;
tags[i+7].buffer = v.bin;
tags[i+7].is_null = &one_not_null;
tags[i+7].length = (uintptr_t *)lb;
tags[i+8].buffer_type = TSDB_DATA_TYPE_NCHAR;
tags[i+8].buffer = v.bin;
tags[i+8].is_null = &one_not_null;
tags[i+8].length = (uintptr_t *)lb;
}
unsigned long long starttime = taosGetTimestampUs();
char *sql = "insert into ? using stb1 tags(1,true,2,3,4,5.0,6.0,'a','b') values(?,?,?,?,?,?,?,?,?,?)";
int code = taos_stmt_prepare(stmt, sql, 0);
if (code != 0){
printf("failed to execute taos_stmt_prepare. code:0x%x\n", code);
exit(1);
}
int id = 0;
for (int zz = 0; zz < 1; zz++) {
char buf[32];
sprintf(buf, "m%d", zz);
code = taos_stmt_set_tbname_tags(stmt, buf, tags);
if (code != 0){
printf("failed to execute taos_stmt_set_tbname_tags. code:0x%x\n", code);
}
taos_stmt_bind_param_batch(stmt, params + id * 10);
taos_stmt_add_batch(stmt);
}
if (taos_stmt_execute(stmt) != 0) {
printf("failed to execute insert statement.\n");
exit(1);
}
++id;
unsigned long long endtime = taosGetTimestampUs();
printf("insert total %d records, used %u seconds, avg:%u useconds\n", 10, (endtime-starttime)/1000000UL, (endtime-starttime)/(10));
taosMemoryFree(v.ts);
taosMemoryFree(lb);
taosMemoryFree(params);
taosMemoryFree(is_null);
taosMemoryFree(no_null);
taosMemoryFree(tags);
return 0;
}
//1 tables 10 records
int stmt_funcb_autoctb3(TAOS_STMT *stmt) {
struct {
int64_t *ts;
int8_t b[10];
int8_t v1[10];
int16_t v2[10];
int32_t v4[10];
int64_t v8[10];
float f4[10];
double f8[10];
char bin[10][40];
} v = {0};
v.ts = taosMemoryMalloc(sizeof(int64_t) * 1 * 10);
int *lb = taosMemoryMalloc(10 * sizeof(int));
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 1*10);
// int one_null = 1;
int one_not_null = 0;
char* is_null = taosMemoryMalloc(sizeof(char) * 10);
char* no_null = taosMemoryMalloc(sizeof(char) * 10);
for (int i = 0; i < 10; ++i) {
lb[i] = 40;
no_null[i] = 0;
is_null[i] = (i % 10 == 2) ? 1 : 0;
v.b[i] = (int8_t)(i % 2);
v.v1[i] = (int8_t)((i+1) % 2);
v.v2[i] = (int16_t)i;
v.v4[i] = (int32_t)(i+1);
v.v8[i] = (int64_t)(i+2);
v.f4[i] = (float)(i+3);
v.f8[i] = (double)(i+4);
memset(v.bin[i], '0'+i%10, 40);
}
for (int i = 0; i < 10; i+=10) {
params[i+0].buffer_type = TSDB_DATA_TYPE_TIMESTAMP;
params[i+0].buffer_length = sizeof(int64_t);
params[i+0].buffer = &v.ts[10*i/10];
params[i+0].length = NULL;
params[i+0].is_null = no_null;
params[i+0].num = 10;
params[i+1].buffer_type = TSDB_DATA_TYPE_BOOL;
params[i+1].buffer_length = sizeof(int8_t);
params[i+1].buffer = v.b;
params[i+1].length = NULL;
params[i+1].is_null = is_null;
params[i+1].num = 10;
params[i+2].buffer_type = TSDB_DATA_TYPE_TINYINT;
params[i+2].buffer_length = sizeof(int8_t);
params[i+2].buffer = v.v1;
params[i+2].length = NULL;
params[i+2].is_null = is_null;
params[i+2].num = 10;
params[i+3].buffer_type = TSDB_DATA_TYPE_SMALLINT;
params[i+3].buffer_length = sizeof(int16_t);
params[i+3].buffer = v.v2;
params[i+3].length = NULL;
params[i+3].is_null = is_null;
params[i+3].num = 10;
params[i+4].buffer_type = TSDB_DATA_TYPE_INT;
params[i+4].buffer_length = sizeof(int32_t);
params[i+4].buffer = v.v4;
params[i+4].length = NULL;
params[i+4].is_null = is_null;
params[i+4].num = 10;
params[i+5].buffer_type = TSDB_DATA_TYPE_BIGINT;
params[i+5].buffer_length = sizeof(int64_t);
params[i+5].buffer = v.v8;
params[i+5].length = NULL;
params[i+5].is_null = is_null;
params[i+5].num = 10;
params[i+6].buffer_type = TSDB_DATA_TYPE_FLOAT;
params[i+6].buffer_length = sizeof(float);
params[i+6].buffer = v.f4;
params[i+6].length = NULL;
params[i+6].is_null = is_null;
params[i+6].num = 10;
params[i+7].buffer_type = TSDB_DATA_TYPE_DOUBLE;
params[i+7].buffer_length = sizeof(double);
params[i+7].buffer = v.f8;
params[i+7].length = NULL;
params[i+7].is_null = is_null;
params[i+7].num = 10;
params[i+8].buffer_type = TSDB_DATA_TYPE_BINARY;
params[i+8].buffer_length = 40;
params[i+8].buffer = v.bin;
params[i+8].length = lb;
params[i+8].is_null = is_null;
params[i+8].num = 10;
params[i+9].buffer_type = TSDB_DATA_TYPE_BINARY;
params[i+9].buffer_length = 40;
params[i+9].buffer = v.bin;
params[i+9].length = lb;
params[i+9].is_null = is_null;
params[i+9].num = 10;
}
int64_t tts = 1591060628000;
for (int i = 0; i < 10; ++i) {
v.ts[i] = tts + i;
}
for (int i = 0; i < 1; ++i) {
tags[i+0].buffer_type = TSDB_DATA_TYPE_BOOL;
tags[i+0].buffer = v.b;
tags[i+0].is_null = &one_not_null;
tags[i+0].length = NULL;
tags[i+1].buffer_type = TSDB_DATA_TYPE_SMALLINT;
tags[i+1].buffer = v.v2;
tags[i+1].is_null = &one_not_null;
tags[i+1].length = NULL;
tags[i+2].buffer_type = TSDB_DATA_TYPE_FLOAT;
tags[i+2].buffer = v.f4;
tags[i+2].is_null = &one_not_null;
tags[i+2].length = NULL;
tags[i+3].buffer_type = TSDB_DATA_TYPE_BINARY;
tags[i+3].buffer = v.bin;
tags[i+3].is_null = &one_not_null;
tags[i+3].length = (uintptr_t *)lb;
}
unsigned long long starttime = taosGetTimestampUs();
char *sql = "insert into ? using stb1 tags(1,?,2,?,4,?,6.0,?,'b') values(?,?,?,?,?,?,?,?,?,?)";
int code = taos_stmt_prepare(stmt, sql, 0);
if (code != 0){
printf("failed to execute taos_stmt_prepare. code:0x%x\n", code);
exit(1);
}
int id = 0;
for (int zz = 0; zz < 1; zz++) {
char buf[32];
sprintf(buf, "m%d", zz);
code = taos_stmt_set_tbname_tags(stmt, buf, tags);
if (code != 0){
printf("failed to execute taos_stmt_set_tbname_tags. code:0x%x\n", code);
}
taos_stmt_bind_param_batch(stmt, params + id * 10);
taos_stmt_add_batch(stmt);
}
if (taos_stmt_execute(stmt) != 0) {
printf("failed to execute insert statement.\n");
exit(1);
}
++id;
unsigned long long endtime = taosGetTimestampUs();
printf("insert total %d records, used %u seconds, avg:%u useconds\n", 10, (endtime-starttime)/1000000UL, (endtime-starttime)/(10));
taosMemoryFree(v.ts);
taosMemoryFree(lb);
taosMemoryFree(params);
taosMemoryFree(is_null);
taosMemoryFree(no_null);
taosMemoryFree(tags);
return 0;
}
//1 tables 10 records
int stmt_funcb_autoctb4(TAOS_STMT *stmt) {
struct {
int64_t *ts;
int8_t b[10];
int8_t v1[10];
int16_t v2[10];
int32_t v4[10];
int64_t v8[10];
float f4[10];
double f8[10];
char bin[10][40];
} v = {0};
v.ts = taosMemoryMalloc(sizeof(int64_t) * 1 * 10);
int *lb = taosMemoryMalloc(10 * sizeof(int));
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 1*5);
// int one_null = 1;
int one_not_null = 0;
char* is_null = taosMemoryMalloc(sizeof(char) * 10);
char* no_null = taosMemoryMalloc(sizeof(char) * 10);
for (int i = 0; i < 10; ++i) {
lb[i] = 40;
no_null[i] = 0;
is_null[i] = (i % 10 == 2) ? 1 : 0;
v.b[i] = (int8_t)(i % 2);
v.v1[i] = (int8_t)((i+1) % 2);
v.v2[i] = (int16_t)i;
v.v4[i] = (int32_t)(i+1);
v.v8[i] = (int64_t)(i+2);
v.f4[i] = (float)(i+3);
v.f8[i] = (double)(i+4);
memset(v.bin[i], '0'+i%10, 40);
}
for (int i = 0; i < 5; i+=5) {
params[i+0].buffer_type = TSDB_DATA_TYPE_TIMESTAMP;
params[i+0].buffer_length = sizeof(int64_t);
params[i+0].buffer = &v.ts[10*i/10];
params[i+0].length = NULL;
params[i+0].is_null = no_null;
params[i+0].num = 10;
params[i+1].buffer_type = TSDB_DATA_TYPE_BOOL;
params[i+1].buffer_length = sizeof(int8_t);
params[i+1].buffer = v.b;
params[i+1].length = NULL;
params[i+1].is_null = is_null;
params[i+1].num = 10;
params[i+2].buffer_type = TSDB_DATA_TYPE_INT;
params[i+2].buffer_length = sizeof(int32_t);
params[i+2].buffer = v.v4;
params[i+2].length = NULL;
params[i+2].is_null = is_null;
params[i+2].num = 10;
params[i+3].buffer_type = TSDB_DATA_TYPE_BIGINT;
params[i+3].buffer_length = sizeof(int64_t);
params[i+3].buffer = v.v8;
params[i+3].length = NULL;
params[i+3].is_null = is_null;
params[i+3].num = 10;
params[i+4].buffer_type = TSDB_DATA_TYPE_DOUBLE;
params[i+4].buffer_length = sizeof(double);
params[i+4].buffer = v.f8;
params[i+4].length = NULL;
params[i+4].is_null = is_null;
params[i+4].num = 10;
}
int64_t tts = 1591060628000;
for (int i = 0; i < 10; ++i) {
v.ts[i] = tts + i;
}
for (int i = 0; i < 1; ++i) {
tags[i+0].buffer_type = TSDB_DATA_TYPE_BOOL;
tags[i+0].buffer = v.b;
tags[i+0].is_null = &one_not_null;
tags[i+0].length = NULL;
tags[i+1].buffer_type = TSDB_DATA_TYPE_SMALLINT;
tags[i+1].buffer = v.v2;
tags[i+1].is_null = &one_not_null;
tags[i+1].length = NULL;
tags[i+2].buffer_type = TSDB_DATA_TYPE_FLOAT;
tags[i+2].buffer = v.f4;
tags[i+2].is_null = &one_not_null;
tags[i+2].length = NULL;
tags[i+3].buffer_type = TSDB_DATA_TYPE_BINARY;
tags[i+3].buffer = v.bin;
tags[i+3].is_null = &one_not_null;
tags[i+3].length = (uintptr_t *)lb;
}
unsigned long long starttime = taosGetTimestampUs();
char *sql = "insert into ? using stb1 tags(1,?,2,?,4,?,6.0,?,'b') (ts,b,v4,v8,f8) values(?,?,?,?,?)";
int code = taos_stmt_prepare(stmt, sql, 0);
if (code != 0){
printf("failed to execute taos_stmt_prepare. code:0x%x\n", code);
exit(1);
}
int id = 0;
for (int zz = 0; zz < 1; zz++) {
char buf[32];
sprintf(buf, "m%d", zz);
code = taos_stmt_set_tbname_tags(stmt, buf, tags);
if (code != 0){
printf("failed to execute taos_stmt_set_tbname_tags. code:0x%x\n", code);
}
taos_stmt_bind_param_batch(stmt, params + id * 5);
taos_stmt_add_batch(stmt);
}
if (taos_stmt_execute(stmt) != 0) {
printf("failed to execute insert statement.\n");
exit(1);
}
++id;
unsigned long long endtime = taosGetTimestampUs();
printf("insert total %d records, used %u seconds, avg:%u useconds\n", 10, (endtime-starttime)/1000000UL, (endtime-starttime)/(10));
taosMemoryFree(v.ts);
taosMemoryFree(lb);
taosMemoryFree(params);
taosMemoryFree(is_null);
taosMemoryFree(no_null);
taosMemoryFree(tags);
return 0;
}
//1 tables 10 records
int stmt_funcb_autoctb_e1(TAOS_STMT *stmt) {
struct {
int64_t *ts;
int8_t b[10];
int8_t v1[10];
int16_t v2[10];
int32_t v4[10];
int64_t v8[10];
float f4[10];
double f8[10];
char bin[10][40];
} v = {0};
v.ts = taosMemoryMalloc(sizeof(int64_t) * 1 * 10);
int *lb = taosMemoryMalloc(10 * sizeof(int));
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 1*10);
// int one_null = 1;
int one_not_null = 0;
char* is_null = taosMemoryMalloc(sizeof(char) * 10);
char* no_null = taosMemoryMalloc(sizeof(char) * 10);
for (int i = 0; i < 10; ++i) {
lb[i] = 40;
no_null[i] = 0;
is_null[i] = (i % 10 == 2) ? 1 : 0;
v.b[i] = (int8_t)(i % 2);
v.v1[i] = (int8_t)((i+1) % 2);
v.v2[i] = (int16_t)i;
v.v4[i] = (int32_t)(i+1);
v.v8[i] = (int64_t)(i+2);
v.f4[i] = (float)(i+3);
v.f8[i] = (double)(i+4);
memset(v.bin[i], '0'+i%10, 40);
}
for (int i = 0; i < 10; i+=10) {
params[i+0].buffer_type = TSDB_DATA_TYPE_TIMESTAMP;
params[i+0].buffer_length = sizeof(int64_t);
params[i+0].buffer = &v.ts[10*i/10];
params[i+0].length = NULL;
params[i+0].is_null = no_null;
params[i+0].num = 10;
params[i+1].buffer_type = TSDB_DATA_TYPE_BOOL;
params[i+1].buffer_length = sizeof(int8_t);
params[i+1].buffer = v.b;
params[i+1].length = NULL;
params[i+1].is_null = is_null;
params[i+1].num = 10;
params[i+2].buffer_type = TSDB_DATA_TYPE_TINYINT;
params[i+2].buffer_length = sizeof(int8_t);
params[i+2].buffer = v.v1;
params[i+2].length = NULL;
params[i+2].is_null = is_null;
params[i+2].num = 10;
params[i+3].buffer_type = TSDB_DATA_TYPE_SMALLINT;
params[i+3].buffer_length = sizeof(int16_t);
params[i+3].buffer = v.v2;
params[i+3].length = NULL;
params[i+3].is_null = is_null;
params[i+3].num = 10;
params[i+4].buffer_type = TSDB_DATA_TYPE_INT;
params[i+4].buffer_length = sizeof(int32_t);
params[i+4].buffer = v.v4;
params[i+4].length = NULL;
params[i+4].is_null = is_null;
params[i+4].num = 10;
params[i+5].buffer_type = TSDB_DATA_TYPE_BIGINT;
params[i+5].buffer_length = sizeof(int64_t);
params[i+5].buffer = v.v8;
params[i+5].length = NULL;
params[i+5].is_null = is_null;
params[i+5].num = 10;
params[i+6].buffer_type = TSDB_DATA_TYPE_FLOAT;
params[i+6].buffer_length = sizeof(float);
params[i+6].buffer = v.f4;
params[i+6].length = NULL;
params[i+6].is_null = is_null;
params[i+6].num = 10;
params[i+7].buffer_type = TSDB_DATA_TYPE_DOUBLE;
params[i+7].buffer_length = sizeof(double);
params[i+7].buffer = v.f8;
params[i+7].length = NULL;
params[i+7].is_null = is_null;
params[i+7].num = 10;
params[i+8].buffer_type = TSDB_DATA_TYPE_BINARY;
params[i+8].buffer_length = 40;
params[i+8].buffer = v.bin;
params[i+8].length = lb;
params[i+8].is_null = is_null;
params[i+8].num = 10;
params[i+9].buffer_type = TSDB_DATA_TYPE_BINARY;
params[i+9].buffer_length = 40;
params[i+9].buffer = v.bin;
params[i+9].length = lb;
params[i+9].is_null = is_null;
params[i+9].num = 10;
}
int64_t tts = 1591060628000;
for (int i = 0; i < 10; ++i) {
v.ts[i] = tts + i;
}
for (int i = 0; i < 1; ++i) {
tags[i+0].buffer_type = TSDB_DATA_TYPE_BOOL;
tags[i+0].buffer = v.b;
tags[i+0].is_null = &one_not_null;
tags[i+0].length = NULL;
tags[i+1].buffer_type = TSDB_DATA_TYPE_SMALLINT;
tags[i+1].buffer = v.v2;
tags[i+1].is_null = &one_not_null;
tags[i+1].length = NULL;
tags[i+2].buffer_type = TSDB_DATA_TYPE_FLOAT;
tags[i+2].buffer = v.f4;
tags[i+2].is_null = &one_not_null;
tags[i+2].length = NULL;
tags[i+3].buffer_type = TSDB_DATA_TYPE_BINARY;
tags[i+3].buffer = v.bin;
tags[i+3].is_null = &one_not_null;
tags[i+3].length = (uintptr_t *)lb;
}
unsigned long long starttime = taosGetTimestampUs();
char *sql = "insert into ? using stb1 (id1,id2,id3,id4,id5,id6,id7,id8,id9) tags(1,?,2,?,4,?,6.0,?,'b') values(?,?,?,?,?,?,?,?,?,?)";
int code = taos_stmt_prepare(stmt, sql, 0);
if (code != 0){
printf("failed to execute taos_stmt_prepare. error:%s\n", taos_stmt_errstr(stmt));
return -1;
}
int id = 0;
for (int zz = 0; zz < 1; zz++) {
char buf[32];
sprintf(buf, "m%d", zz);
code = taos_stmt_set_tbname_tags(stmt, buf, tags);
if (code != 0){
printf("failed to execute taos_stmt_set_tbname_tags. code:0x%x\n", code);
}
taos_stmt_bind_param_batch(stmt, params + id * 10);
taos_stmt_add_batch(stmt);
}
if (taos_stmt_execute(stmt) != 0) {
printf("failed to execute insert statement.\n");
exit(1);
}
++id;
unsigned long long endtime = taosGetTimestampUs();
printf("insert total %d records, used %u seconds, avg:%u useconds\n", 10, (endtime-starttime)/1000000UL, (endtime-starttime)/(10));
taosMemoryFree(v.ts);
taosMemoryFree(lb);
taosMemoryFree(params);
taosMemoryFree(is_null);
taosMemoryFree(no_null);
taosMemoryFree(tags);
return 0;
}
//1 tables 10 records
int stmt_funcb_autoctb_e2(TAOS_STMT *stmt) {
struct {
int64_t *ts;
int8_t b[10];
int8_t v1[10];
int16_t v2[10];
int32_t v4[10];
int64_t v8[10];
float f4[10];
double f8[10];
char bin[10][40];
} v = {0};
v.ts = taosMemoryMalloc(sizeof(int64_t) * 1 * 10);
int *lb = taosMemoryMalloc(10 * sizeof(int));
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 1*10);
unsigned long long starttime = taosGetTimestampUs();
char *sql = "insert into ? using stb1 tags(?,?,?,?,?,?,?,?,?) values(?,?,?,?,?,?,?,?,?,?)";
int code = taos_stmt_prepare(stmt, sql, 0);
if (code != 0){
printf("failed to execute taos_stmt_prepare. code:0x%x\n", code);
exit(1);
}
int id = 0;
for (int zz = 0; zz < 1; zz++) {
char buf[32];
sprintf(buf, "m%d", zz);
code = taos_stmt_set_tbname_tags(stmt, buf, NULL);
if (code != 0){
printf("failed to execute taos_stmt_set_tbname_tags. code:%s\n", taos_stmt_errstr(stmt));
return -1;
}
taos_stmt_bind_param_batch(stmt, params + id * 10);
taos_stmt_add_batch(stmt);
}
if (taos_stmt_execute(stmt) != 0) {
printf("failed to execute insert statement.\n");
exit(1);
}
++id;
unsigned long long endtime = taosGetTimestampUs();
printf("insert total %d records, used %u seconds, avg:%u useconds\n", 10, (endtime-starttime)/1000000UL, (endtime-starttime)/(10));
taosMemoryFree(v.ts);
taosMemoryFree(lb);
taosMemoryFree(params);
taosMemoryFree(is_null);
taosMemoryFree(no_null);
taosMemoryFree(tags);
return 0;
}
//1 tables 10 records
int stmt_funcb_autoctb_e3(TAOS_STMT *stmt) {
struct {
int64_t *ts;
int8_t b[10];
int8_t v1[10];
int16_t v2[10];
int32_t v4[10];
int64_t v8[10];
float f4[10];
double f8[10];
char bin[10][40];
} v = {0};
v.ts = taosMemoryMalloc(sizeof(int64_t) * 1 * 10);
int *lb = taosMemoryMalloc(10 * sizeof(int));
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 1*10);
unsigned long long starttime = taosGetTimestampUs();
char *sql = "insert into ? using stb1 (id1,id2,id3,id4,id5,id6,id7,id8,id9) tags(?,?,?,?,?,?,?,?,?) values(?,?,?,?,?,?,?,?,?,?)";
int code = taos_stmt_prepare(stmt, sql, 0);
if (code != 0){
printf("failed to execute taos_stmt_prepare. code:%s\n", taos_stmt_errstr(stmt));
return -1;
//exit(1);
}
int id = 0;
for (int zz = 0; zz < 1; zz++) {
char buf[32];
sprintf(buf, "m%d", zz);
code = taos_stmt_set_tbname_tags(stmt, buf, NULL);
if (code != 0){
printf("failed to execute taos_stmt_set_tbname_tags. code:0x%x\n", code);
return -1;
}
taos_stmt_bind_param_batch(stmt, params + id * 10);
taos_stmt_add_batch(stmt);
}
if (taos_stmt_execute(stmt) != 0) {
printf("failed to execute insert statement.\n");
exit(1);
}
++id;
unsigned long long endtime = taosGetTimestampUs();
printf("insert total %d records, used %u seconds, avg:%u useconds\n", 10, (endtime-starttime)/1000000UL, (endtime-starttime)/(10));
taosMemoryFree(v.ts);
taosMemoryFree(lb);
taosMemoryFree(params);
taosMemoryFree(is_null);
taosMemoryFree(no_null);
taosMemoryFree(tags);
return 0;
}
//1 tables 10 records
int stmt_funcb_autoctb_e4(TAOS_STMT *stmt) {
struct {
int64_t *ts;
int8_t b[10];
int8_t v1[10];
int16_t v2[10];
int32_t v4[10];
int64_t v8[10];
float f4[10];
double f8[10];
char bin[10][40];
} v = {0};
v.ts = taosMemoryMalloc(sizeof(int64_t) * 1 * 10);
int *lb = taosMemoryMalloc(10 * sizeof(int));
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 1*10);
unsigned long long starttime = taosGetTimestampUs();
char *sql = "insert into ? using stb1 tags(?,?,?,?,?,?,?,?,?) values(?,?,?,?,?,?,?,?,?,?)";
int code = taos_stmt_prepare(stmt, sql, 0);
if (code != 0){
printf("failed to execute taos_stmt_prepare. code:%s\n", taos_stmt_errstr(stmt));
exit(1);
}
int id = 0;
for (int zz = 0; zz < 1; zz++) {
char buf[32];
sprintf(buf, "m%d", zz);
code = taos_stmt_set_tbname_tags(stmt, buf, tags);
if (code != 0){
printf("failed to execute taos_stmt_set_tbname_tags. error:%s\n", taos_stmt_errstr(stmt));
exit(1);
}
code = taos_stmt_bind_param_batch(stmt, params + id * 10);
if (code != 0) {
printf("failed to execute taos_stmt_bind_param_batch. error:%s\n", taos_stmt_errstr(stmt));
exit(1);
}
code = taos_stmt_bind_param_batch(stmt, params + id * 10);
if (code != 0) {
printf("failed to execute taos_stmt_bind_param_batch. error:%s\n", taos_stmt_errstr(stmt));
return -1;
}
taos_stmt_add_batch(stmt);
}
if (taos_stmt_execute(stmt) != 0) {
printf("failed to execute insert statement.\n");
exit(1);
}
++id;
unsigned long long endtime = taosGetTimestampUs();
printf("insert total %d records, used %u seconds, avg:%u useconds\n", 10, (endtime-starttime)/1000000UL, (endtime-starttime)/(10));
taosMemoryFree(v.ts);
taosMemoryFree(lb);
taosMemoryFree(params);
taosMemoryFree(is_null);
taosMemoryFree(no_null);
taosMemoryFree(tags);
return 0;
}
//1 tables 10 records
int stmt_funcb_autoctb_e5(TAOS_STMT *stmt) {
struct {
int64_t *ts;
int8_t b[10];
int8_t v1[10];
int16_t v2[10];
int32_t v4[10];
int64_t v8[10];
float f4[10];
double f8[10];
char bin[10][40];
} v = {0};
v.ts = taosMemoryMalloc(sizeof(int64_t) * 1 * 10);
int *lb = taosMemoryMalloc(10 * sizeof(int));
TAOS_BIND *tags = taosMemoryCalloc(1, sizeof(TAOS_BIND) * 9 * 1);
TAOS_MULTI_BIND *params = taosMemoryCalloc(1, sizeof(TAOS_MULTI_BIND) * 1*10);
unsigned long long starttime = taosGetTimestampUs();
char *sql = "insert into ? using stb1 tags(?,?,?,?,?,?,?,?,?) values(?,?,?,?,?,?,?,?,?,?)";
int code = taos_stmt_prepare(NULL, sql, 0);
if (code != 0){
printf("failed to execute taos_stmt_prepare. code:%s\n", taos_stmt_errstr(NULL));
return -1;
}
int id = 0;
for (int zz = 0; zz < 1; zz++) {
char buf[32];
sprintf(buf, "m%d", zz);
code = taos_stmt_set_tbname_tags(stmt, buf, tags);
if (code != 0){
printf("failed to execute taos_stmt_set_tbname_tags. error:%s\n", taos_stmt_errstr(stmt));
exit(1);
}
code = taos_stmt_bind_param_batch(stmt, params + id * 10);
if (code != 0) {
printf("failed to execute taos_stmt_bind_param_batch. error:%s\n", taos_stmt_errstr(stmt));
exit(1);
}
code = taos_stmt_bind_param_batch(stmt, params + id * 10);
if (code != 0) {
printf("failed to execute taos_stmt_bind_param_batch. error:%s\n", taos_stmt_errstr(stmt));
return -1;
}
taos_stmt_add_batch(stmt);
}
if (taos_stmt_execute(stmt) != 0) {
printf("failed to execute insert statement.\n");
exit(1);
}
++id;
unsigned long long endtime = taosGetTimestampUs();
printf("insert total %d records, used %u seconds, avg:%u useconds\n", 10, (endtime-starttime)/1000000UL, (endtime-starttime)/(10));
taosMemoryFree(v.ts);
taosMemoryFree(lb);
taosMemoryFree(params);
taosMemoryFree(is_null);
taosMemoryFree(no_null);
taosMemoryFree(tags);
return 0;
}
#endif
void
prepareCheckResultImpl
(
TAOS
*
taos
,
char
*
tname
,
bool
printr
,
int
expected
,
bool
silent
)
{
void
prepareCheckResultImpl
(
TAOS
*
taos
,
char
*
tname
,
bool
printr
,
int
expected
,
bool
silent
)
{
char
sql
[
255
]
=
"SELECT * FROM "
;
char
sql
[
255
]
=
"SELECT * FROM "
;
int32_t
rows
=
0
;
int32_t
rows
=
0
;
...
@@ -3332,6 +2221,7 @@ int32_t runCase(TAOS *taos, int32_t caseIdx, int32_t caseRunIdx, bool silent) {
...
@@ -3332,6 +2221,7 @@ int32_t runCase(TAOS *taos, int32_t caseIdx, int32_t caseRunIdx, bool silent) {
TAOS_STMT
*
stmt
=
NULL
;
TAOS_STMT
*
stmt
=
NULL
;
int64_t
beginUs
,
endUs
,
totalUs
;
int64_t
beginUs
,
endUs
,
totalUs
;
CaseCfg
cfg
=
gCase
[
caseIdx
];
CaseCfg
cfg
=
gCase
[
caseIdx
];
CaseCfg
cfgBk
;
gCurCase
=
&
cfg
;
gCurCase
=
&
cfg
;
if
((
gCaseCtrl
.
bindColTypeNum
||
gCaseCtrl
.
bindColNum
)
&&
(
gCurCase
->
colNum
!=
gFullColNum
))
{
if
((
gCaseCtrl
.
bindColTypeNum
||
gCaseCtrl
.
bindColNum
)
&&
(
gCurCase
->
colNum
!=
gFullColNum
))
{
...
@@ -3402,6 +2292,7 @@ int32_t runCase(TAOS *taos, int32_t caseIdx, int32_t caseRunIdx, bool silent) {
...
@@ -3402,6 +2292,7 @@ int32_t runCase(TAOS *taos, int32_t caseIdx, int32_t caseRunIdx, bool silent) {
}
}
totalUs
=
0
;
totalUs
=
0
;
cfgBk
=
cfg
;
for
(
int32_t
n
=
0
;
n
<
gCurCase
->
runTimes
;
++
n
)
{
for
(
int32_t
n
=
0
;
n
<
gCurCase
->
runTimes
;
++
n
)
{
if
(
gCurCase
->
preCaseIdx
<
0
)
{
if
(
gCurCase
->
preCaseIdx
<
0
)
{
prepare
(
taos
,
gCurCase
->
colNum
,
gCurCase
->
colList
,
gCurCase
->
autoCreateTbl
);
prepare
(
taos
,
gCurCase
->
colNum
,
gCurCase
->
colList
,
gCurCase
->
autoCreateTbl
);
...
@@ -3423,6 +2314,8 @@ int32_t runCase(TAOS *taos, int32_t caseIdx, int32_t caseRunIdx, bool silent) {
...
@@ -3423,6 +2314,8 @@ int32_t runCase(TAOS *taos, int32_t caseIdx, int32_t caseRunIdx, bool silent) {
totalUs
+=
(
endUs
-
beginUs
);
totalUs
+=
(
endUs
-
beginUs
);
prepareCheckResult
(
taos
,
silent
);
prepareCheckResult
(
taos
,
silent
);
cfg
=
cfgBk
;
}
}
if
(
!
silent
)
{
if
(
!
silent
)
{
...
@@ -3465,17 +2358,21 @@ void* runCaseList(TAOS *taos) {
...
@@ -3465,17 +2358,21 @@ void* runCaseList(TAOS *taos) {
}
}
void
runAll
(
TAOS
*
taos
)
{
void
runAll
(
TAOS
*
taos
)
{
/*
#if 1
strcpy
(
gCaseCtrl
.
caseCatalog
,
"Normal Test"
);
strcpy
(
gCaseCtrl
.
caseCatalog
,
"Normal Test"
);
printf
(
"%s Begin
\n
"
,
gCaseCtrl
.
caseCatalog
);
printf
(
"%s Begin
\n
"
,
gCaseCtrl
.
caseCatalog
);
runCaseList
(
taos
);
runCaseList
(
taos
);
*/
strcpy
(
gCaseCtrl
.
caseCatalog
,
"Auto Create Table Test"
);
strcpy
(
gCaseCtrl
.
caseCatalog
,
"Auto Create Table Test"
);
gCaseCtrl
.
autoCreateTbl
=
true
;
gCaseCtrl
.
autoCreateTbl
=
true
;
printf
(
"%s Begin
\n
"
,
gCaseCtrl
.
caseCatalog
);
printf
(
"%s Begin
\n
"
,
gCaseCtrl
.
caseCatalog
);
runCaseList
(
taos
);
runCaseList
(
taos
);
gCaseCtrl
.
autoCreateTbl
=
false
;
gCaseCtrl
.
autoCreateTbl
=
false
;
#endif
/*
/*
strcpy(gCaseCtrl.caseCatalog, "Null Test");
strcpy(gCaseCtrl.caseCatalog, "Null Test");
printf("%s Begin\n", gCaseCtrl.caseCatalog);
printf("%s Begin\n", gCaseCtrl.caseCatalog);
...
@@ -3496,6 +2393,7 @@ void runAll(TAOS *taos) {
...
@@ -3496,6 +2393,7 @@ void runAll(TAOS *taos) {
runCaseList(taos);
runCaseList(taos);
gCaseCtrl.rowNum = 0;
gCaseCtrl.rowNum = 0;
gCaseCtrl.printRes = true;
gCaseCtrl.printRes = true;
*/
strcpy
(
gCaseCtrl
.
caseCatalog
,
"Runtimes Test"
);
strcpy
(
gCaseCtrl
.
caseCatalog
,
"Runtimes Test"
);
printf
(
"%s Begin
\n
"
,
gCaseCtrl
.
caseCatalog
);
printf
(
"%s Begin
\n
"
,
gCaseCtrl
.
caseCatalog
);
...
@@ -3503,12 +2401,15 @@ void runAll(TAOS *taos) {
...
@@ -3503,12 +2401,15 @@ void runAll(TAOS *taos) {
runCaseList
(
taos
);
runCaseList
(
taos
);
gCaseCtrl
.
runTimes
=
0
;
gCaseCtrl
.
runTimes
=
0
;
#if 1
strcpy
(
gCaseCtrl
.
caseCatalog
,
"Check Param Test"
);
strcpy
(
gCaseCtrl
.
caseCatalog
,
"Check Param Test"
);
printf
(
"%s Begin
\n
"
,
gCaseCtrl
.
caseCatalog
);
printf
(
"%s Begin
\n
"
,
gCaseCtrl
.
caseCatalog
);
gCaseCtrl
.
checkParamNum
=
true
;
gCaseCtrl
.
checkParamNum
=
true
;
runCaseList
(
taos
);
runCaseList
(
taos
);
gCaseCtrl
.
checkParamNum
=
false
;
gCaseCtrl
.
checkParamNum
=
false
;
#endif
/*
strcpy(gCaseCtrl.caseCatalog, "Bind Col Num Test");
strcpy(gCaseCtrl.caseCatalog, "Bind Col Num Test");
printf("%s Begin\n", gCaseCtrl.caseCatalog);
printf("%s Begin\n", gCaseCtrl.caseCatalog);
gCaseCtrl.bindColNum = 6;
gCaseCtrl.bindColNum = 6;
...
...
tests/script/tsim/db/alter_option.sim
浏览文件 @
ed1a71f1
...
@@ -66,7 +66,7 @@ print ============= create database
...
@@ -66,7 +66,7 @@ print ============= create database
# | REPLICA value [1 | 3]
# | REPLICA value [1 | 3]
# | WAL value [1 | 2]
# | WAL value [1 | 2]
sql create database db CACHELAST 3 COMP 0 DAYS
345600 FSYNC 1000 MAXROWS 8000 MINROWS 10 KEEP 1440
000 PRECISION 'ns' REPLICA 3 WAL 2 VGROUPS 6 SINGLE_STABLE 1
sql create database db CACHELAST 3 COMP 0 DAYS
240 FSYNC 1000 MAXROWS 8000 MINROWS 10 KEEP 1
000 PRECISION 'ns' REPLICA 3 WAL 2 VGROUPS 6 SINGLE_STABLE 1
sql show databases
sql show databases
print rows: $rows
print rows: $rows
print $data00 $data01 $data02 $data03 $data04 $data05 $data06 $data07 $data08 $data09
print $data00 $data01 $data02 $data03 $data04 $data05 $data06 $data07 $data08 $data09
...
@@ -229,7 +229,7 @@ sql_error alter database db days 0
...
@@ -229,7 +229,7 @@ sql_error alter database db days 0
sql_error alter database db days 14400 # set over than keep
sql_error alter database db days 14400 # set over than keep
print ============== modify keep
print ============== modify keep
sql alter database db keep
34560
00
sql alter database db keep
24
00
sql show databases
sql show databases
print keep $data7_db
print keep $data7_db
if $data7_db != 3456000,3456000,3456000 then
if $data7_db != 3456000,3456000,3456000 then
...
...
tests/script/tsim/db/basic6.sim
浏览文件 @
ed1a71f1
...
@@ -15,8 +15,7 @@ $tb = $tbPrefix . $i
...
@@ -15,8 +15,7 @@ $tb = $tbPrefix . $i
print =============== step1
print =============== step1
# quorum presicion
# quorum presicion
#sql create database $db vgroups 8 replica 1 days 2880 keep 3650 cache 32 blocks 12 minrows 80 maxrows 10000 wal 2 fsync 1000 comp 0 cachelast 2 precision 'us'
sql create database $db vgroups 8 replica 1 days 2 keep 10 minrows 80 maxrows 10000 wal 2 fsync 1000 comp 0 cachelast 2 precision 'us'
sql create database $db vgroups 8 replica 1 days 2880 keep 3650 minrows 80 maxrows 10000 wal 2 fsync 1000 comp 0 cachelast 2 precision 'us'
sql show databases
sql show databases
print $data00 $data01 $data02 $data03 $data04 $data05 $data06 $data07 $data08 $data09
print $data00 $data01 $data02 $data03 $data04 $data05 $data06 $data07 $data08 $data09
...
@@ -38,7 +37,7 @@ endi
...
@@ -38,7 +37,7 @@ endi
if $data26 != 2880 then
if $data26 != 2880 then
return -1
return -1
endi
endi
if $data27 !=
3650,3650,365
0 then
if $data27 !=
14400,14400,1440
0 then
return -1
return -1
endi
endi
#if $data28 != 32 then
#if $data28 != 32 then
...
@@ -67,7 +66,7 @@ print =============== step4
...
@@ -67,7 +66,7 @@ print =============== step4
sql_error drop database $db
sql_error drop database $db
print =============== step5
print =============== step5
sql create database $db replica 1 days
21600 keep 21600
00
sql create database $db replica 1 days
15 keep 15
00
sql show databases
sql show databases
print $data00 $data01 $data02 $data03 $data04 $data05 $data06 $data07
print $data00 $data01 $data02 $data03 $data04 $data05 $data06 $data07
if $data20 != $db then
if $data20 != $db then
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录