Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
KASAKI11
TDengine
提交
fb56f9dc
T
TDengine
项目概览
KASAKI11
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
fb56f9dc
编写于
4月 05, 2020
作者:
S
slguan
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/develop' into refactor/cluster
上级
158cf673
f5c561aa
变更
40
隐藏空白更改
内联
并排
Showing
40 changed file
with
235 addition
and
439 deletion
+235
-439
.travis.yml
.travis.yml
+5
-5
src/client/inc/tscUtil.h
src/client/inc/tscUtil.h
+1
-0
src/client/inc/tsclient.h
src/client/inc/tsclient.h
+0
-1
src/client/src/tscAsync.c
src/client/src/tscAsync.c
+0
-2
src/client/src/tscLocal.c
src/client/src/tscLocal.c
+3
-3
src/client/src/tscPrepare.c
src/client/src/tscPrepare.c
+3
-3
src/client/src/tscSchemaUtil.c
src/client/src/tscSchemaUtil.c
+1
-1
src/client/src/tscServer.c
src/client/src/tscServer.c
+11
-9
src/client/src/tscSql.c
src/client/src/tscSql.c
+16
-16
src/client/src/tscSub.c
src/client/src/tscSub.c
+3
-3
src/client/src/tscSubquery.c
src/client/src/tscSubquery.c
+9
-9
src/client/src/tscSystem.c
src/client/src/tscSystem.c
+0
-1
src/client/src/tscUtil.c
src/client/src/tscUtil.c
+2
-16
src/common/inc/name.h
src/common/inc/name.h
+1
-1
src/common/src/name.c
src/common/src/name.c
+2
-2
src/dnode/src/dnodeMgmt.c
src/dnode/src/dnodeMgmt.c
+6
-56
src/dnode/src/dnodeRead.c
src/dnode/src/dnodeRead.c
+3
-1
src/dnode/src/dnodeWrite.c
src/dnode/src/dnodeWrite.c
+2
-2
src/inc/dnode.h
src/inc/dnode.h
+0
-1
src/inc/vnode.h
src/inc/vnode.h
+4
-0
src/mnode/src/mgmtTable.c
src/mnode/src/mgmtTable.c
+1
-2
src/query/inc/queryUtil.h
src/query/inc/queryUtil.h
+2
-0
src/query/src/qparserImpl.c
src/query/src/qparserImpl.c
+0
-170
src/query/src/queryExecutor.c
src/query/src/queryExecutor.c
+25
-24
src/query/tests/astTest.cpp
src/query/tests/astTest.cpp
+3
-0
src/query/tests/tsBufTest.cpp
src/query/tests/tsBufTest.cpp
+12
-12
src/query/tests/unitTest.cpp
src/query/tests/unitTest.cpp
+3
-0
src/util/inc/tcache.h
src/util/inc/tcache.h
+1
-1
src/util/src/tcache.c
src/util/src/tcache.c
+4
-4
src/util/src/tqueue.c
src/util/src/tqueue.c
+2
-2
src/util/src/tutil.c
src/util/src/tutil.c
+1
-1
src/util/tests/cacheTest.cpp
src/util/tests/cacheTest.cpp
+15
-15
src/util/tests/skiplistTest.cpp
src/util/tests/skiplistTest.cpp
+3
-3
src/vnode/main/inc/vnodeInt.h
src/vnode/main/inc/vnodeInt.h
+7
-7
src/vnode/main/src/vnodeMain.c
src/vnode/main/src/vnodeMain.c
+42
-5
src/vnode/main/src/vnodeWrite.c
src/vnode/main/src/vnodeWrite.c
+1
-1
src/vnode/tsdb/src/tsdbMain.c
src/vnode/tsdb/src/tsdbMain.c
+1
-1
src/vnode/tsdb/src/tsdbRead.c
src/vnode/tsdb/src/tsdbRead.c
+25
-20
src/vnode/wal/src/walMain.c
src/vnode/wal/src/walMain.c
+1
-1
tests/examples/c/demo.c
tests/examples/c/demo.c
+14
-38
未找到文件。
.travis.yml
浏览文件 @
fb56f9dc
...
...
@@ -12,7 +12,7 @@ compiler:
os
:
-
linux
-
osx
#
- osx
addons
:
coverity_scan
:
...
...
@@ -59,8 +59,8 @@ matrix:
-
build-essential
-
cmake
-
os
:
osx
addons
:
homebrew
:
-
cmake
#
- os: osx
#
addons:
#
homebrew:
#
- cmake
src/client/inc/tscUtil.h
浏览文件 @
fb56f9dc
...
...
@@ -134,6 +134,7 @@ void tscFieldInfoSetBinExpr(SFieldInfo* pFieldInfo, int32_t index, SSqlFunctionE
void
tscFieldInfoCalOffset
(
SQueryInfo
*
pQueryInfo
);
void
tscFieldInfoCopy
(
SFieldInfo
*
src
,
SFieldInfo
*
dst
,
const
int32_t
*
indexList
,
int32_t
size
);
void
tscFieldInfoCopyAll
(
SFieldInfo
*
dst
,
SFieldInfo
*
src
);
void
tscFieldInfoUpdateOffsetForInterResult
(
SQueryInfo
*
pQueryInfo
);
TAOS_FIELD
*
tscFieldInfoGetField
(
SQueryInfo
*
pQueryInfo
,
int32_t
index
);
int16_t
tscFieldInfoGetOffset
(
SQueryInfo
*
pQueryInfo
,
int32_t
index
);
...
...
src/client/inc/tsclient.h
浏览文件 @
fb56f9dc
...
...
@@ -468,7 +468,6 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo);
extern
void
*
pVnodeConn
;
extern
void
*
pTscMgmtConn
;
extern
void
*
tscCacheHandle
;
extern
int32_t
globalCode
;
extern
int
slaveIndex
;
extern
void
*
tscTmr
;
extern
void
*
tscQhandle
;
...
...
src/client/src/tscAsync.c
浏览文件 @
fb56f9dc
...
...
@@ -200,7 +200,6 @@ void taos_fetch_rows_a(TAOS_RES *taosa, void (*fp)(void *, TAOS_RES *, int), voi
SSqlObj
*
pSql
=
(
SSqlObj
*
)
taosa
;
if
(
pSql
==
NULL
||
pSql
->
signature
!=
pSql
)
{
tscError
(
"sql object is NULL"
);
// globalCode = TSDB_CODE_DISCONNECTED;
tscQueueAsyncError
(
fp
,
param
,
TSDB_CODE_DISCONNECTED
);
return
;
}
...
...
@@ -232,7 +231,6 @@ void taos_fetch_row_a(TAOS_RES *taosa, void (*fp)(void *, TAOS_RES *, TAOS_ROW),
SSqlObj
*
pSql
=
(
SSqlObj
*
)
taosa
;
if
(
pSql
==
NULL
||
pSql
->
signature
!=
pSql
)
{
tscError
(
"sql object is NULL"
);
// globalCode = TSDB_CODE_DISCONNECTED;
tscQueueAsyncError
(
fp
,
param
,
TSDB_CODE_DISCONNECTED
);
return
;
}
...
...
src/client/src/tscLocal.c
浏览文件 @
fb56f9dc
...
...
@@ -343,10 +343,10 @@ static int tscBuildMetricTagProjectionResult(SSqlObj *pSql) {
}
static
int
tscBuildMetricTagSqlFunctionResult
(
SSqlObj
*
pSql
)
{
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
//
SSqlCmd *pCmd = &pSql->cmd;
//
SSqlRes *pRes = &pSql->res;
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
pCmd
,
0
);
//
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(pCmd, 0);
#if 0
SSuperTableMeta *pMetricMeta = tscGetMetaInfo(pQueryInfo, 0)->pMetricMeta;
int32_t totalNumOfResults = 1; // count function only produce one result
...
...
src/client/src/tscPrepare.c
浏览文件 @
fb56f9dc
...
...
@@ -467,14 +467,14 @@ static int insertStmtExecute(STscStmt* stmt) {
TAOS_STMT
*
taos_stmt_init
(
TAOS
*
taos
)
{
STscObj
*
pObj
=
(
STscObj
*
)
taos
;
if
(
pObj
==
NULL
||
pObj
->
signature
!=
pObj
)
{
globalCode
=
TSDB_CODE_DISCONNECTED
;
terrno
=
TSDB_CODE_DISCONNECTED
;
tscError
(
"connection disconnected"
);
return
NULL
;
}
STscStmt
*
pStmt
=
calloc
(
1
,
sizeof
(
STscStmt
));
if
(
pStmt
==
NULL
)
{
globalCode
=
TSDB_CODE_CLI_OUT_OF_MEMORY
;
terrno
=
TSDB_CODE_CLI_OUT_OF_MEMORY
;
tscError
(
"failed to allocate memory for statement"
);
return
NULL
;
}
...
...
@@ -482,7 +482,7 @@ TAOS_STMT* taos_stmt_init(TAOS* taos) {
SSqlObj
*
pSql
=
calloc
(
1
,
sizeof
(
SSqlObj
));
if
(
pSql
==
NULL
)
{
free
(
pStmt
);
globalCode
=
TSDB_CODE_CLI_OUT_OF_MEMORY
;
terrno
=
TSDB_CODE_CLI_OUT_OF_MEMORY
;
tscError
(
"failed to allocate memory for statement"
);
return
NULL
;
}
...
...
src/client/src/tscSchemaUtil.c
浏览文件 @
fb56f9dc
...
...
@@ -131,7 +131,7 @@ bool isValidSchema(struct SSchema* pSchema, int32_t numOfCols) {
SSchema
*
tscGetTableColumnSchema
(
const
STableMeta
*
pTableMeta
,
int32_t
startCol
)
{
assert
(
pTableMeta
!=
NULL
);
SSchema
*
pSchema
=
pTableMeta
->
schema
;
SSchema
*
pSchema
=
(
SSchema
*
)
pTableMeta
->
schema
;
#if 0
if (pTableMeta->tableType == TSDB_CHILD_TABLE) {
assert (pTableMeta->pSTable != NULL);
...
...
src/client/src/tscServer.c
浏览文件 @
fb56f9dc
...
...
@@ -1420,10 +1420,10 @@ int tscProcessDescribeTableRsp(SSqlObj *pSql) {
}
int
tscProcessTagRetrieveRsp
(
SSqlObj
*
pSql
)
{
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
//
SSqlCmd *pCmd = &pSql->cmd;
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
pCmd
,
pCmd
->
clauseIndex
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
//
SQueryInfo * pQueryInfo = tscGetQueryInfoDetail(pCmd, pCmd->clauseIndex);
//
STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
int32_t
numOfRes
=
0
;
#if 0
...
...
@@ -1569,7 +1569,7 @@ int tscBuildMultiMeterMetaMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
return
pCmd
->
payloadLen
;
}
static
int32_t
tscEstimateMetricMetaMsgSize
(
SSqlCmd
*
pCmd
)
{
static
UNUSED_FUNC
int32_t
tscEstimateMetricMetaMsgSize
(
SSqlCmd
*
pCmd
)
{
const
int32_t
defaultSize
=
minMsgSize
()
+
sizeof
(
SSuperTableMetaMsg
)
+
sizeof
(
SMgmtHead
)
+
sizeof
(
int16_t
)
*
TSDB_MAX_TAGS
;
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
pCmd
,
0
);
...
...
@@ -1884,10 +1884,10 @@ int tscProcessTableMetaRsp(SSqlObj *pSql) {
* |...... 1B 1B 4B
**/
int
tscProcessMultiMeterMetaRsp
(
SSqlObj
*
pSql
)
{
uint8_t
ieType
;
int32_t
totalNum
;
int32_t
i
;
//
uint8_t ieType;
//
int32_t totalNum;
//
int32_t i;
#if 0
char *rsp = pSql->res.pRsp;
ieType = *rsp;
...
...
@@ -1985,6 +1985,8 @@ int tscProcessMultiMeterMetaRsp(SSqlObj *pSql) {
pSql->res.code = TSDB_CODE_SUCCESS;
pSql->res.numOfTotal = i;
tscTrace("%p load multi-metermeta resp complete num:%d", pSql, pSql->res.numOfTotal);
#endif
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -2467,7 +2469,7 @@ int tscGetSTableVgroupInfo(SSqlObj *pSql, int32_t clauseIndex) {
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
//the query condition is serialized into pCmd->payload, we need to rebuild key for stable meta info in cache.
bool
required
=
false
;
//
bool required = false;
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
pCmd
,
clauseIndex
);
if
(
pQueryInfo
->
pTableMetaInfo
[
0
]
->
vgroupIdList
!=
NULL
)
{
...
...
src/client/src/tscSql.c
浏览文件 @
fb56f9dc
...
...
@@ -57,17 +57,17 @@ STscObj *taosConnectImpl(const char *ip, const char *user, const char *pass, con
taos_init
();
if
(
!
validUserName
(
user
))
{
globalCode
=
TSDB_CODE_INVALID_ACCT
;
terrno
=
TSDB_CODE_INVALID_ACCT
;
return
NULL
;
}
if
(
!
validPassword
(
pass
))
{
globalCode
=
TSDB_CODE_INVALID_PASS
;
terrno
=
TSDB_CODE_INVALID_PASS
;
return
NULL
;
}
if
(
tscInitRpc
(
user
,
pass
)
!=
0
)
{
globalCode
=
TSDB_CODE_NETWORK_UNAVAIL
;
terrno
=
TSDB_CODE_NETWORK_UNAVAIL
;
return
NULL
;
}
...
...
@@ -92,7 +92,7 @@ STscObj *taosConnectImpl(const char *ip, const char *user, const char *pass, con
STscObj
*
pObj
=
(
STscObj
*
)
calloc
(
1
,
sizeof
(
STscObj
));
if
(
NULL
==
pObj
)
{
globalCode
=
TSDB_CODE_CLI_OUT_OF_MEMORY
;
terrno
=
TSDB_CODE_CLI_OUT_OF_MEMORY
;
return
NULL
;
}
...
...
@@ -107,7 +107,7 @@ STscObj *taosConnectImpl(const char *ip, const char *user, const char *pass, con
/* db name is too long */
if
(
len
>
TSDB_DB_NAME_LEN
)
{
free
(
pObj
);
globalCode
=
TSDB_CODE_INVALID_DB
;
terrno
=
TSDB_CODE_INVALID_DB
;
return
NULL
;
}
...
...
@@ -122,7 +122,7 @@ STscObj *taosConnectImpl(const char *ip, const char *user, const char *pass, con
SSqlObj
*
pSql
=
(
SSqlObj
*
)
calloc
(
1
,
sizeof
(
SSqlObj
));
if
(
NULL
==
pSql
)
{
globalCode
=
TSDB_CODE_CLI_OUT_OF_MEMORY
;
terrno
=
TSDB_CODE_CLI_OUT_OF_MEMORY
;
free
(
pObj
);
return
NULL
;
}
...
...
@@ -140,7 +140,7 @@ STscObj *taosConnectImpl(const char *ip, const char *user, const char *pass, con
pSql
->
cmd
.
command
=
TSDB_SQL_CONNECT
;
if
(
TSDB_CODE_SUCCESS
!=
tscAllocPayload
(
&
pSql
->
cmd
,
TSDB_DEFAULT_PAYLOAD_SIZE
))
{
globalCode
=
TSDB_CODE_CLI_OUT_OF_MEMORY
;
terrno
=
TSDB_CODE_CLI_OUT_OF_MEMORY
;
free
(
pSql
);
free
(
pObj
);
return
NULL
;
...
...
@@ -303,7 +303,7 @@ int taos_query(TAOS *taos, const char *sqlstr) {
TAOS_RES
*
taos_use_result
(
TAOS
*
taos
)
{
STscObj
*
pObj
=
(
STscObj
*
)
taos
;
if
(
pObj
==
NULL
||
pObj
->
signature
!=
pObj
)
{
globalCode
=
TSDB_CODE_DISCONNECTED
;
terrno
=
TSDB_CODE_DISCONNECTED
;
return
NULL
;
}
...
...
@@ -535,11 +535,11 @@ static bool tscHashRemainDataInSubqueryResultSet(SSqlObj *pSql) {
continue
;
}
SSqlRes
*
pRes1
=
&
pSql
->
pSubs
[
i
]
->
res
;
//
SSqlRes *pRes1 = &pSql->pSubs[i]->res;
SSqlCmd
*
pCmd1
=
&
pSql
->
pSubs
[
i
]
->
cmd
;
SQueryInfo
*
pQueryInfo1
=
tscGetQueryInfoDetail
(
pCmd1
,
pCmd1
->
clauseIndex
);
STableMetaInfo
*
pMetaInfo
=
tscGetMetaInfo
(
pQueryInfo1
,
0
);
//
STableMetaInfo *pMetaInfo = tscGetMetaInfo(pQueryInfo1, 0);
assert
(
pQueryInfo1
->
numOfTables
==
1
);
...
...
@@ -576,7 +576,7 @@ static bool tscHashRemainDataInSubqueryResultSet(SSqlObj *pSql) {
return
hasData
;
}
static
void
**
tscBuildResFromSubqueries
(
SSqlObj
*
pSql
)
{
static
UNUSED_FUNC
void
**
tscBuildResFromSubqueries
(
SSqlObj
*
pSql
)
{
SSqlRes
*
pRes
=
&
pSql
->
res
;
while
(
1
)
{
...
...
@@ -662,7 +662,7 @@ static void waitForRetrieveRsp(void *param, TAOS_RES *tres, int numOfRows) {
TAOS_ROW
taos_fetch_row
(
TAOS_RES
*
res
)
{
SSqlObj
*
pSql
=
(
SSqlObj
*
)
res
;
if
(
pSql
==
NULL
||
pSql
->
signature
!=
pSql
)
{
globalCode
=
TSDB_CODE_DISCONNECTED
;
terrno
=
TSDB_CODE_DISCONNECTED
;
return
NULL
;
}
...
...
@@ -694,7 +694,7 @@ int taos_fetch_block(TAOS_RES *res, TAOS_ROW *rows) {
int
nRows
=
0
;
if
(
pSql
==
NULL
||
pSql
->
signature
!=
pSql
)
{
globalCode
=
TSDB_CODE_DISCONNECTED
;
terrno
=
TSDB_CODE_DISCONNECTED
;
*
rows
=
NULL
;
return
0
;
}
...
...
@@ -733,7 +733,7 @@ int taos_select_db(TAOS *taos, const char *db) {
STscObj
*
pObj
=
(
STscObj
*
)
taos
;
if
(
pObj
==
NULL
||
pObj
->
signature
!=
pObj
)
{
globalCode
=
TSDB_CODE_DISCONNECTED
;
terrno
=
TSDB_CODE_DISCONNECTED
;
return
TSDB_CODE_DISCONNECTED
;
}
...
...
@@ -1011,7 +1011,7 @@ int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields)
int
taos_validate_sql
(
TAOS
*
taos
,
const
char
*
sql
)
{
STscObj
*
pObj
=
(
STscObj
*
)
taos
;
if
(
pObj
==
NULL
||
pObj
->
signature
!=
pObj
)
{
globalCode
=
TSDB_CODE_DISCONNECTED
;
terrno
=
TSDB_CODE_DISCONNECTED
;
return
TSDB_CODE_DISCONNECTED
;
}
...
...
@@ -1143,7 +1143,7 @@ int taos_load_table_info(TAOS *taos, const char *tableNameList) {
STscObj
*
pObj
=
(
STscObj
*
)
taos
;
if
(
pObj
==
NULL
||
pObj
->
signature
!=
pObj
)
{
globalCode
=
TSDB_CODE_DISCONNECTED
;
terrno
=
TSDB_CODE_DISCONNECTED
;
return
TSDB_CODE_DISCONNECTED
;
}
...
...
src/client/src/tscSub.c
浏览文件 @
fb56f9dc
...
...
@@ -99,14 +99,14 @@ void tscUpdateSubscriptionProgress(void* sub, int64_t uid, TSKEY ts) {
static
SSub
*
tscCreateSubscription
(
STscObj
*
pObj
,
const
char
*
topic
,
const
char
*
sql
)
{
SSub
*
pSub
=
calloc
(
1
,
sizeof
(
SSub
));
if
(
pSub
==
NULL
)
{
globalCode
=
TSDB_CODE_CLI_OUT_OF_MEMORY
;
terrno
=
TSDB_CODE_CLI_OUT_OF_MEMORY
;
tscError
(
"failed to allocate memory for subscription"
);
return
NULL
;
}
SSqlObj
*
pSql
=
calloc
(
1
,
sizeof
(
SSqlObj
));
if
(
pSql
==
NULL
)
{
globalCode
=
TSDB_CODE_CLI_OUT_OF_MEMORY
;
terrno
=
TSDB_CODE_CLI_OUT_OF_MEMORY
;
tscError
(
"failed to allocate SSqlObj for subscription"
);
goto
failed
;
}
...
...
@@ -309,7 +309,7 @@ void tscSaveSubscriptionProgress(void* sub) {
TAOS_SUB
*
taos_subscribe
(
TAOS
*
taos
,
int
restart
,
const
char
*
topic
,
const
char
*
sql
,
TAOS_SUBSCRIBE_CALLBACK
fp
,
void
*
param
,
int
interval
)
{
STscObj
*
pObj
=
(
STscObj
*
)
taos
;
if
(
pObj
==
NULL
||
pObj
->
signature
!=
pObj
)
{
globalCode
=
TSDB_CODE_DISCONNECTED
;
terrno
=
TSDB_CODE_DISCONNECTED
;
tscError
(
"connection disconnected"
);
return
NULL
;
}
...
...
src/client/src/tscSubquery.c
浏览文件 @
fb56f9dc
...
...
@@ -279,7 +279,7 @@ int32_t tscLaunchSecondPhaseSubqueries(SSqlObj* pSql) {
assert
(
pSubQueryInfo
->
exprsInfo
.
numOfExprs
==
1
);
// ts_comp query only requires one resutl columns
taos_free_result
(
pPrevSub
);
SSqlObj
*
pNew
=
createSubqueryObj
(
pSql
,
(
int16_t
)
i
,
tscJoinQueryCallback
,
TSDB_SQL_SELECT
,
pSupporter
,
NULL
);
SSqlObj
*
pNew
=
createSubqueryObj
(
pSql
,
(
int16_t
)
i
,
tscJoinQueryCallback
,
pSupporter
,
TSDB_SQL_SELECT
,
NULL
);
if
(
pNew
==
NULL
)
{
tscDestroyJoinSupporter
(
pSupporter
);
success
=
false
;
...
...
@@ -538,7 +538,7 @@ static void joinRetrieveCallback(void* param, TAOS_RES* tres, int numOfRows) {
}
if
(
tscNonOrderedProjectionQueryOnSTable
(
pQueryInfo
,
0
)
&&
numOfRows
==
0
)
{
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
//
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
assert
(
pQueryInfo
->
numOfTables
==
1
);
// for projection query, need to try next vnode if current vnode is exhausted
...
...
@@ -606,7 +606,7 @@ void tscFetchDatablockFromSubquery(SSqlObj* pSql) {
SSqlRes
*
pRes
=
&
pSql
->
pSubs
[
i
]
->
res
;
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
&
pSql
->
pSubs
[
i
]
->
cmd
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
//
STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
if
(
tscNonOrderedProjectionQueryOnSTable
(
pQueryInfo
,
0
))
{
// if (pRes->row >= pRes->numOfRows && pTableMetaInfo->vnodeIndex < pTableMetaInfo->pMetricMeta->numOfVnodes &&
...
...
@@ -834,7 +834,7 @@ int32_t tscLaunchJoinSubquery(SSqlObj *pSql, int16_t tableIndex, SJoinSubquerySu
}
}
SSqlObj
*
pNew
=
createSubqueryObj
(
pSql
,
tableIndex
,
tscJoinQueryCallback
,
TSDB_SQL_SELECT
,
pSupporter
,
NULL
);
SSqlObj
*
pNew
=
createSubqueryObj
(
pSql
,
tableIndex
,
tscJoinQueryCallback
,
pSupporter
,
TSDB_SQL_SELECT
,
NULL
);
if
(
pNew
==
NULL
)
{
return
TSDB_CODE_CLI_OUT_OF_MEMORY
;
}
...
...
@@ -1237,7 +1237,7 @@ static void tscAllDataRetrievedFromDnode(SRetrieveSupport *trsupport, SSqlObj* p
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
&
pSql
->
cmd
,
0
);
// data in from current vnode is stored in cache and disk
uint32_t
numOfRowsFromSubquery
=
trsupport
->
pExtMemBuffer
[
idx
]
->
numOfTotalElems
+
trsupport
->
localBuffer
->
numOfElems
;
//
uint32_t numOfRowsFromSubquery = trsupport->pExtMemBuffer[idx]->numOfTotalElems + trsupport->localBuffer->numOfElems;
// tscTrace("%p sub:%p all data retrieved from ip:%u,vid:%d, numOfRows:%d, orderOfSub:%d", pPObj, pSql, pSvd->ip,
// pSvd->vnode, numOfRowsFromSubquery, idx);
...
...
@@ -1333,7 +1333,7 @@ static void tscRetrieveFromDnodeCallBack(void *param, TAOS_RES *tres, int numOfR
SSqlRes
*
pRes
=
&
pSql
->
res
;
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
&
pSql
->
cmd
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
//
STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
// SVnodeSidList *vnodeInfo = tscGetVnodeSidList(pTableMetaInfo->pMetricMeta, idx);
// SVnodeSidList *vnodeInfo = 0;
...
...
@@ -1409,10 +1409,10 @@ void tscRetrieveDataRes(void *param, TAOS_RES *tres, int code) {
SSqlObj
*
pParentSql
=
trsupport
->
pParentSqlObj
;
SSqlObj
*
pSql
=
(
SSqlObj
*
)
tres
;
STableMetaInfo
*
pTableMetaInfo
=
tscGetTableMetaInfoFromCmd
(
&
pSql
->
cmd
,
0
,
0
);
//
STableMetaInfo *pTableMetaInfo = tscGetTableMetaInfoFromCmd(&pSql->cmd, 0, 0);
assert
(
pSql
->
cmd
.
numOfClause
==
1
&&
pSql
->
cmd
.
pQueryInfo
[
0
]
->
numOfTables
==
1
);
int32_t
idx
=
pTableMetaInfo
->
vnodeIndex
;
//
int32_t idx = pTableMetaInfo->vnodeIndex;
SVnodeSidList
*
vnodeInfo
=
NULL
;
SVnodeDesc
*
pSvd
=
NULL
;
...
...
@@ -1459,7 +1459,7 @@ void tscRetrieveDataRes(void *param, TAOS_RES *tres, int code) {
pState
->
code
=
-
TSDB_CODE_CLI_OUT_OF_MEMORY
;
trsupport
->
numOfRetry
=
MAX_NUM_OF_SUBQUERY_RETRY
;
}
else
{
SQueryInfo
*
pNewQueryInfo
=
tscGetQueryInfoDetail
(
&
pNew
->
cmd
,
0
);
//
SQueryInfo *pNewQueryInfo = tscGetQueryInfoDetail(&pNew->cmd, 0);
// assert(pNewQueryInfo->pTableMetaInfo[0]->pTableMeta != NULL && pNewQueryInfo->pTableMetaInfo[0]->pMetricMeta != NULL);
tscProcessSql
(
pNew
);
return
;
...
...
src/client/src/tscSystem.c
浏览文件 @
fb56f9dc
...
...
@@ -33,7 +33,6 @@ void * pVMeterConn;
void
*
pTscMgmtConn
;
void
*
pSlaveConn
;
void
*
tscCacheHandle
;
int32_t
globalCode
=
0
;
int
slaveIndex
;
void
*
tscTmr
;
void
*
tscQhandle
;
...
...
src/client/src/tscUtil.c
浏览文件 @
fb56f9dc
...
...
@@ -819,7 +819,7 @@ void tscCloseTscObj(STscObj* pObj) {
pObj
->
signature
=
NULL
;
SSqlObj
*
pSql
=
pObj
->
pSql
;
if
(
pSql
)
{
globalCode
=
pSql
->
res
.
code
;
terrno
=
pSql
->
res
.
code
;
}
taosTmrStopA
(
&
(
pObj
->
pTimer
));
...
...
@@ -993,20 +993,6 @@ void tscFieldInfoCalOffset(SQueryInfo* pQueryInfo) {
}
void
tscFieldInfoUpdateOffsetForInterResult
(
SQueryInfo
*
pQueryInfo
)
{
// SFieldInfo* pFieldInfo = &pQueryInfo->fieldsInfo;
// if (pFieldInfo->numOfOutputCols == 0) {
// return;
// }
//
// pFieldInfo->pOffset[0] = 0;
//
// /*
// * the retTypeLen is used to store the intermediate result length
// * for potential secondary merge exists
// */
// for (int32_t i = 1; i < pFieldInfo->numOfOutputCols; ++i) {
// pFieldInfo->pOffset[i] = pFieldInfo->pOffset[i - 1] + tscSqlExprGet(pQueryInfo, i - 1)->resBytes;
// }
SSqlExprInfo
*
pExprInfo
=
&
pQueryInfo
->
exprsInfo
;
if
(
pExprInfo
->
numOfExprs
==
0
)
{
return
;
...
...
@@ -2167,7 +2153,7 @@ int16_t tscGetJoinTagColIndexByUid(STagCond* pTagCond, uint64_t uid) {
bool
tscIsUpdateQuery
(
STscObj
*
pObj
)
{
if
(
pObj
==
NULL
||
pObj
->
signature
!=
pObj
)
{
globalCode
=
TSDB_CODE_DISCONNECTED
;
terrno
=
TSDB_CODE_DISCONNECTED
;
return
TSDB_CODE_DISCONNECTED
;
}
...
...
src/common/inc/name.h
浏览文件 @
fb56f9dc
...
...
@@ -19,7 +19,7 @@ typedef struct SColumnInfoEx {
void
*
pData
;
// the corresponding block data in memory
}
SColumnInfoEx
;
int32_t
extractTableName
(
const
char
*
tableId
,
char
*
name
);
void
extractTableName
(
const
char
*
tableId
,
char
*
name
);
char
*
extractDBName
(
const
char
*
tableId
,
char
*
name
);
...
...
src/common/src/name.c
浏览文件 @
fb56f9dc
...
...
@@ -24,11 +24,11 @@ static FORCE_INLINE size_t copy(char* dst, const char* src, char delimiter) {
return
len
;
}
int32_t
extractTableName
(
const
char
*
tableId
,
char
*
name
)
{
void
extractTableName
(
const
char
*
tableId
,
char
*
name
)
{
size_t
offset
=
strcspn
(
tableId
,
&
TS_PATH_DELIMITER
[
0
]);
offset
=
strcspn
(
&
tableId
[
offset
],
&
TS_PATH_DELIMITER
[
0
]);
return
strncpy
(
name
,
&
tableId
[
offset
],
TSDB_TABLE_NAME_LEN
);
strncpy
(
name
,
&
tableId
[
offset
],
TSDB_TABLE_NAME_LEN
);
// char* r = skipSegments(tableId, TS_PATH_DELIMITER[0], 2);
// return copy(name, r, TS_PATH_DELIMITER[0]);
...
...
src/dnode/src/dnodeMgmt.c
浏览文件 @
fb56f9dc
...
...
@@ -31,22 +31,7 @@
#include "dnodeWrite.h"
#include "vnode.h"
typedef
struct
{
int32_t
vgId
;
// global vnode group ID
int32_t
refCount
;
// reference count
EVnodeStatus
status
;
// status: master, slave, notready, deleting
int64_t
version
;
void
*
wworker
;
void
*
rworker
;
void
*
wal
;
void
*
tsdb
;
void
*
replica
;
void
*
events
;
void
*
cq
;
// continuous query
}
SVnodeObj
;
static
int32_t
dnodeOpenVnodes
();
static
void
dnodeCleanupVnodes
();
static
int32_t
dnodeProcessCreateVnodeMsg
(
SRpcMsg
*
pMsg
);
static
int32_t
dnodeProcessDropVnodeMsg
(
SRpcMsg
*
pMsg
);
static
int32_t
dnodeProcessAlterVnodeMsg
(
SRpcMsg
*
pMsg
);
...
...
@@ -56,7 +41,6 @@ static int32_t (*dnodeProcessMgmtMsgFp[TSDB_MSG_TYPE_MAX])(SRpcMsg *pMsg);
static
void
dnodeSendStatusMsg
(
void
*
handle
,
void
*
tmrId
);
static
void
dnodeReadDnodeId
();
void
*
tsDnodeVnodesHash
=
NULL
;
static
void
*
tsDnodeTmr
=
NULL
;
static
void
*
tsStatusTimer
=
NULL
;
static
uint32_t
tsRebootTime
;
...
...
@@ -72,12 +56,6 @@ int32_t dnodeInitMgmt() {
dnodeProcessMgmtMsgFp
[
TSDB_MSG_TYPE_MD_ALTER_STREAM
]
=
dnodeProcessAlterStreamMsg
;
dnodeProcessMgmtMsgFp
[
TSDB_MSG_TYPE_MD_CONFIG_DNODE
]
=
dnodeProcessConfigDnodeMsg
;
tsDnodeVnodesHash
=
taosInitIntHash
(
TSDB_MAX_VNODES
,
sizeof
(
SVnodeObj
),
taosHashInt
);
if
(
tsDnodeVnodesHash
==
NULL
)
{
dError
(
"failed to init vnode list"
);
return
-
1
;
}
tsRebootTime
=
taosGetTimestampSec
();
tsDnodeTmr
=
taosTmrInit
(
100
,
200
,
60000
,
"DND-DM"
);
...
...
@@ -86,6 +64,10 @@ int32_t dnodeInitMgmt() {
return
-
1
;
}
if
(
vnodeInitModule
()
!=
TSDB_CODE_SUCCESS
)
{
return
-
1
;
}
int32_t
code
=
dnodeOpenVnodes
();
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
return
-
1
;
...
...
@@ -106,11 +88,7 @@ void dnodeCleanupMgmt() {
tsDnodeTmr
=
NULL
;
}
dnodeCleanupVnodes
();
if
(
tsDnodeVnodesHash
==
NULL
)
{
taosCleanUpIntHash
(
tsDnodeVnodesHash
);
tsDnodeVnodesHash
=
NULL
;
}
vnodeCleanupModule
();
}
void
dnodeMgmt
(
SRpcMsg
*
pMsg
)
{
...
...
@@ -129,14 +107,6 @@ void dnodeMgmt(SRpcMsg *pMsg) {
rpcFreeCont
(
pMsg
->
pCont
);
}
void
*
dnodeGetVnodeWworker
(
void
*
pVnode
)
{
return
((
SVnodeObj
*
)
pVnode
)
->
wworker
;
}
void
*
dnodeGetVnodeRworker
(
void
*
pVnode
)
{
return
((
SVnodeObj
*
)
pVnode
)
->
rworker
;
}
static
int32_t
dnodeOpenVnodes
()
{
DIR
*
dir
=
opendir
(
tsVnodeDir
);
if
(
dir
==
NULL
)
{
...
...
@@ -166,13 +136,6 @@ static int32_t dnodeOpenVnodes() {
return
TSDB_CODE_SUCCESS
;
}
typedef
void
(
*
CleanupFp
)(
char
*
);
static
void
dnodeCleanupVnodes
()
{
int32_t
num
=
taosGetIntHashSize
(
tsDnodeVnodesHash
);
taosCleanUpIntHashWithFp
(
tsDnodeVnodesHash
,
(
CleanupFp
)
vnodeClose
);
dPrint
(
"dnode mgmt is closed, vnodes:%d"
,
num
);
}
static
int32_t
dnodeProcessCreateVnodeMsg
(
SRpcMsg
*
rpcMsg
)
{
SMDCreateVnodeMsg
*
pCreate
=
rpcMsg
->
pCont
;
...
...
@@ -219,19 +182,6 @@ static int32_t dnodeProcessConfigDnodeMsg(SRpcMsg *pMsg) {
return
tsCfgDynamicOptions
(
pCfg
->
config
);
}
static
void
dnodeBuildVloadMsg
(
char
*
pNode
,
void
*
param
)
{
SVnodeObj
*
pVnode
=
(
SVnodeObj
*
)
pNode
;
if
(
pVnode
->
status
==
TSDB_VN_STATUS_DELETING
)
return
;
SDMStatusMsg
*
pStatus
=
param
;
if
(
pStatus
->
openVnodes
>=
TSDB_MAX_VNODES
)
return
;
SVnodeLoad
*
pLoad
=
&
pStatus
->
load
[
pStatus
->
openVnodes
++
];
pLoad
->
vgId
=
htonl
(
pVnode
->
vgId
);
pLoad
->
vnode
=
htonl
(
pVnode
->
vgId
);
pLoad
->
status
=
pVnode
->
status
;
}
static
void
dnodeSendStatusMsg
(
void
*
handle
,
void
*
tmrId
)
{
if
(
tsDnodeTmr
==
NULL
)
{
dError
(
"dnode timer is already released"
);
...
...
@@ -263,7 +213,7 @@ static void dnodeSendStatusMsg(void *handle, void *tmrId) {
pStatus
->
diskAvailable
=
tsAvailDataDirGB
;
pStatus
->
alternativeRole
=
(
uint8_t
)
tsAlternativeRole
;
taosVisitIntHashWithFp
(
tsDnodeVnodesHash
,
dnodeBuildVloadMsg
,
pStatus
);
vnodeBuildStatusMsg
(
pStatus
);
contLen
=
sizeof
(
SDMStatusMsg
)
+
pStatus
->
openVnodes
*
sizeof
(
SVnodeLoad
);
pStatus
->
openVnodes
=
htons
(
pStatus
->
openVnodes
);
...
...
src/dnode/src/dnodeRead.c
浏览文件 @
fb56f9dc
...
...
@@ -127,7 +127,7 @@ void dnodeRead(SRpcMsg *pMsg) {
}
void
*
dnodeAllocateRqueue
(
void
*
pVnode
)
{
taos_queue
*
queue
=
taosOpenQueue
(
sizeof
(
SReadMsg
)
);
taos_queue
queue
=
taosOpenQueue
(
);
if
(
queue
==
NULL
)
return
NULL
;
taosAddIntoQset
(
readQset
,
queue
,
pVnode
);
...
...
@@ -144,6 +144,8 @@ void *dnodeAllocateRqueue(void *pVnode) {
}
}
dTrace
(
"pVnode:%p, queue:%p is allocated"
,
pVnode
,
queue
);
return
queue
;
}
...
...
src/dnode/src/dnodeWrite.c
浏览文件 @
fb56f9dc
...
...
@@ -106,7 +106,7 @@ void dnodeWrite(SRpcMsg *pMsg) {
void
*
dnodeAllocateWqueue
(
void
*
pVnode
)
{
SWriteWorker
*
pWorker
=
wWorkerPool
.
writeWorker
+
wWorkerPool
.
nextId
;
taos_queue
*
queue
=
taosOpenQueue
();
void
*
queue
=
taosOpenQueue
();
if
(
queue
==
NULL
)
return
NULL
;
if
(
pWorker
->
qset
==
NULL
)
{
...
...
@@ -129,7 +129,7 @@ void *dnodeAllocateWqueue(void *pVnode) {
wWorkerPool
.
nextId
=
(
wWorkerPool
.
nextId
+
1
)
%
wWorkerPool
.
max
;
}
dTrace
(
"
queue:%p is allocated for pVnode:%p"
,
queue
,
pVnod
e
);
dTrace
(
"
pVnode:%p, queue:%p is allocated"
,
pVnode
,
queu
e
);
return
queue
;
}
...
...
src/inc/dnode.h
浏览文件 @
fb56f9dc
...
...
@@ -44,7 +44,6 @@ void *dnodeAllocateRqueue(void *pVnode);
void
dnodeFreeRqueue
(
void
*
rqueue
);
void
dnodeSendWriteResponse
(
void
*
pVnode
,
void
*
param
,
int32_t
code
);
#ifdef __cplusplus
}
#endif
...
...
src/inc/vnode.h
浏览文件 @
fb56f9dc
...
...
@@ -25,6 +25,9 @@ typedef struct {
void
*
rsp
;
}
SRspRet
;
int32_t
vnodeInitModule
();
void
vnodeCleanupModule
();
int32_t
vnodeCreate
(
SMDCreateVnodeMsg
*
pVnodeCfg
);
int32_t
vnodeDrop
(
int32_t
vgId
);
int32_t
vnodeOpen
(
int32_t
vnode
,
char
*
rootDir
);
...
...
@@ -39,6 +42,7 @@ void* vnodeGetWal(void *pVnode);
void
*
vnodeGetTsdb
(
void
*
pVnode
);
int32_t
vnodeProcessWrite
(
void
*
pVnode
,
int
qtype
,
SWalHead
*
pHead
,
void
*
item
);
void
vnodeBuildStatusMsg
(
void
*
param
);
#ifdef __cplusplus
}
...
...
src/mnode/src/mgmtTable.c
浏览文件 @
fb56f9dc
...
...
@@ -1897,9 +1897,8 @@ static int32_t mgmtRetrieveShowTables(SShowObj *pShow, char *data, int32_t rows,
}
char
tableName
[
TSDB_TABLE_NAME_LEN
]
=
{
0
};
memset
(
tableName
,
0
,
tListLen
(
tableName
));
// pattern compare for
meter
name
// pattern compare for
table
name
mgmtExtractTableName
(
pTable
->
info
.
tableId
,
tableName
);
if
(
pShow
->
payloadLen
>
0
&&
...
...
src/query/inc/queryUtil.h
浏览文件 @
fb56f9dc
...
...
@@ -36,4 +36,6 @@ bool isWindowResClosed(SWindowResInfo *pWindowResInfo, int32_t slot);
void
createQueryResultInfo
(
SQuery
*
pQuery
,
SWindowResult
*
pResultRow
,
bool
isSTableQuery
,
SPosInfo
*
posInfo
);
char
*
getPosInResultPage
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
int32_t
columnIndex
,
SWindowResult
*
pResult
);
#endif // TDENGINE_QUERYUTIL_H
src/query/src/qparserImpl.c
浏览文件 @
fb56f9dc
...
...
@@ -900,174 +900,4 @@ void setDefaultCreateDbOption(SCreateDBInfo *pDBInfo) {
pDBInfo
->
keep
=
NULL
;
memset
(
&
pDBInfo
->
precision
,
0
,
sizeof
(
SSQLToken
));
}
static
bool
isExprLeafNode
(
tSQLExpr
*
pExpr
)
{
return
(
pExpr
->
pRight
==
NULL
&&
pExpr
->
pLeft
==
NULL
)
&&
(
pExpr
->
nSQLOptr
==
TK_ID
||
(
pExpr
->
nSQLOptr
>=
TK_BOOL
&&
pExpr
->
nSQLOptr
<=
TK_NCHAR
)
||
pExpr
->
nSQLOptr
==
TK_SET
);
}
static
bool
isExprParentOfLeafNode
(
tSQLExpr
*
pExpr
)
{
return
(
pExpr
->
pLeft
!=
NULL
&&
pExpr
->
pRight
!=
NULL
)
&&
(
isExprLeafNode
(
pExpr
->
pLeft
)
&&
isExprLeafNode
(
pExpr
->
pRight
));
}
static
int32_t
tSQLExprNodeToString
(
tSQLExpr
*
pExpr
,
SStringBuilder
*
pBuilder
)
{
if
(
pExpr
->
nSQLOptr
==
TK_ID
)
{
// column name
// strncpy(*str, pExpr->colInfo.z, pExpr->colInfo.n);
// *str += pExpr->colInfo.n;
}
else
if
(
pExpr
->
nSQLOptr
>=
TK_BOOL
&&
pExpr
->
nSQLOptr
<=
TK_STRING
)
{
// value
// *str += tVariantToString(&pExpr->val, *str);
// taosStringBuilderAppendStringLen()
}
else
if
(
pExpr
->
nSQLOptr
>=
TK_COUNT
&&
pExpr
->
nSQLOptr
<=
TK_AVG_IRATE
)
{
taosStringBuilderAppendStringLen
(
pBuilder
,
pExpr
->
operand
.
z
,
pExpr
->
operand
.
n
);
}
else
{
// not supported operation
assert
(
false
);
}
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
optrToString
(
tSQLExpr
*
pExpr
,
char
**
exprString
)
{
const
char
*
le
=
"<="
;
const
char
*
ge
=
">="
;
const
char
*
ne
=
"<>"
;
const
char
*
likeOptr
=
"LIKE"
;
switch
(
pExpr
->
nSQLOptr
)
{
case
TK_LE
:
{
*
(
int16_t
*
)(
*
exprString
)
=
*
(
int16_t
*
)
le
;
*
exprString
+=
1
;
break
;
}
case
TK_GE
:
{
*
(
int16_t
*
)(
*
exprString
)
=
*
(
int16_t
*
)
ge
;
*
exprString
+=
1
;
break
;
}
case
TK_NE
:
{
*
(
int16_t
*
)(
*
exprString
)
=
*
(
int16_t
*
)
ne
;
*
exprString
+=
1
;
break
;
}
case
TK_LT
:
*
(
*
exprString
)
=
'<'
;
break
;
case
TK_GT
:
*
(
*
exprString
)
=
'>'
;
break
;
case
TK_EQ
:
*
(
*
exprString
)
=
'='
;
break
;
case
TK_PLUS
:
*
(
*
exprString
)
=
'+'
;
break
;
case
TK_MINUS
:
*
(
*
exprString
)
=
'-'
;
break
;
case
TK_STAR
:
*
(
*
exprString
)
=
'*'
;
break
;
case
TK_DIVIDE
:
*
(
*
exprString
)
=
'/'
;
break
;
case
TK_REM
:
*
(
*
exprString
)
=
'%'
;
break
;
case
TK_LIKE
:
{
int32_t
len
=
sprintf
(
*
exprString
,
" %s "
,
likeOptr
);
*
exprString
+=
(
len
-
1
);
break
;
}
default:
return
TSDB_CODE_INVALID_SQL
;
}
*
exprString
+=
1
;
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
tSQLExprLeafToBinary
(
tSQLExpr
*
pExpr
,
SStringBuilder
*
pBuilder
)
{
if
(
!
isExprParentOfLeafNode
(
pExpr
))
{
return
TSDB_CODE_INVALID_SQL
;
}
tSQLExpr
*
pLeft
=
pExpr
->
pLeft
;
tSQLExpr
*
pRight
=
pExpr
->
pRight
;
// if (addParentheses) {
// *(*output) = '(';
// *output += 1;
// }
tSQLExprNodeToString
(
pLeft
,
pBuilder
);
tSQLExprNodeToString
(
pRight
,
pBuilder
);
if
(
optrToString
(
pExpr
,
pBuilder
)
!=
TSDB_CODE_SUCCESS
)
{
return
TSDB_CODE_INVALID_SQL
;
}
// if (addParentheses) {
// *(*output) = ')';
// *output += 1;
// }
return
TSDB_CODE_SUCCESS
;
}
static
void
relToString
(
tSQLExpr
*
pExpr
,
SStringBuilder
*
pBuilder
)
{
assert
(
pExpr
->
nSQLOptr
==
TK_AND
||
pExpr
->
nSQLOptr
==
TK_OR
);
const
char
*
or
=
"OR"
;
const
char
*
and
=
"AND"
;
// if (pQueryInfo->tagCond.relType == TSQL_STABLE_QTYPE_COND) {
// if (pExpr->nSQLOptr == TK_AND) {
// strcpy(*str, and);
// *str += strlen(and);
// } else {
// strcpy(*str, or);
// *str += strlen(or);
// }
}
static
int32_t
doSQLExprToBinary
(
tSQLExpr
*
pExpr
,
SStringBuilder
*
pBuilder
)
{
if
(
pExpr
==
NULL
)
{
return
TSDB_CODE_SUCCESS
;
}
if
(
!
isExprParentOfLeafNode
(
pExpr
))
{
// *(*str) = '(';
// *str += 1;
int32_t
ret
=
doSQLExprToBinary
(
pExpr
->
pLeft
,
pBuilder
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
return
ret
;
}
ret
=
doSQLExprToBinary
(
pExpr
->
pRight
,
pBuilder
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
return
ret
;
}
relToString
(
pExpr
,
pBuilder
);
// *(*str) = ')';
// *str += 1;
return
ret
;
}
return
tSQLExprLeafToBinary
(
pExpr
,
pBuilder
);
}
// post order seralize to binary data
int32_t
tSQLExprToBinary
(
tSQLExpr
*
pExpr
,
SStringBuilder
*
pBuilder
)
{
assert
(
pExpr
!=
NULL
&&
pBuilder
!=
NULL
);
}
\ No newline at end of file
src/query/src/queryExecutor.c
浏览文件 @
fb56f9dc
...
...
@@ -47,7 +47,7 @@
#define SET_SUPPLEMENT_SCAN_FLAG(runtime) ((runtime)->scanFlag = SUPPLEMENTARY_SCAN)
#define SET_MASTER_SCAN_FLAG(runtime) ((runtime)->scanFlag = MASTER_SCAN)
#define GET_QINFO_ADDR(x) ((
char *)(x)-offsetof(SQInfo, runtimeEnv
))
#define GET_QINFO_ADDR(x) ((
void*)((char *)(x)-offsetof(SQInfo, runtimeEnv)
))
#define GET_COL_DATA_POS(query, index, step) ((query)->pos + (index) * (step))
...
...
@@ -1140,13 +1140,13 @@ static int32_t rowwiseApplyAllFunctions(SQueryRuntimeEnv *pRuntimeEnv, SDataStat
bool
hasNull
=
hasNullValue
(
pQuery
,
k
,
pDataBlockInfo
,
pStatis
,
&
pColStatis
);
char
*
dataBlock
=
getDataBlocks
(
pRuntimeEnv
,
&
sasArray
[
k
],
k
,
pDataBlockInfo
->
size
,
pDataBlock
);
setExecParams
(
pQuery
,
&
pCtx
[
k
],
dataBlock
,
(
char
*
)
primaryKeyCol
,
pDataBlockInfo
->
size
,
functionId
,
pColStatis
,
setExecParams
(
pQuery
,
&
pCtx
[
k
],
dataBlock
,
primaryKeyCol
,
pDataBlockInfo
->
size
,
functionId
,
pColStatis
,
hasNull
,
&
sasArray
[
k
],
pRuntimeEnv
->
scanFlag
);
}
// set the input column data
for
(
int32_t
k
=
0
;
k
<
pQuery
->
numOfFilterCols
;
++
k
)
{
SSingleColumnFilterInfo
*
pFilterInfo
=
&
pQuery
->
pFilterInfo
[
k
];
//
SSingleColumnFilterInfo *pFilterInfo = &pQuery->pFilterInfo[k];
assert
(
0
);
/*
* NOTE: here the tbname/tags column cannot reach here, since it will never be a filter column,
...
...
@@ -1465,7 +1465,7 @@ static int32_t setupQueryRuntimeEnv(SQueryRuntimeEnv *pRuntimeEnv, SColumnModel
pRuntimeEnv
->
offset
[
0
]
=
0
;
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfOutputCols
;
++
i
)
{
SSqlFuncExprMsg
*
pSqlFuncMsg
=
&
pQuery
->
pSelectExpr
[
i
].
pBase
;
SColIndexEx
*
pColIndexEx
=
&
pSqlFuncMsg
->
colInfo
;
//
SColIndexEx * pColIndexEx = &pSqlFuncMsg->colInfo;
SQLFunctionCtx
*
pCtx
=
&
pRuntimeEnv
->
pCtx
[
i
];
pCtx
->
inputType
=
GET_COLUMN_TYPE
(
pQuery
,
i
);
...
...
@@ -1586,7 +1586,7 @@ static bool isQueryKilled(SQInfo *pQInfo) {
#endif
}
static
bool
setQueryKilled
(
SQInfo
*
pQInfo
)
{
static
void
setQueryKilled
(
SQInfo
*
pQInfo
)
{
pQInfo
->
code
=
TSDB_CODE_QUERY_CANCELLED
;
}
...
...
@@ -1738,6 +1738,7 @@ static UNUSED_FUNC bool doGetQueryPos(TSKEY key, SQInfo *pQInfo, SPointInterpoSu
}
}
#endif
return
true
;
}
static
UNUSED_FUNC
bool
doSetDataInfo
(
SQInfo
*
pQInfo
,
SPointInterpoSupporter
*
pPointInterpSupporter
,
void
*
pMeterObj
,
...
...
@@ -2924,11 +2925,11 @@ int32_t tableResultComparFn(const void *pLeft, const void *pRight, void *param)
}
int32_t
mergeResultsToGroup
(
SQInfo
*
pQInfo
)
{
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
//
SQueryRuntimeEnv *pRuntimeEnv = &pQInfo->runtimeEnv;
//
SQuery * pQuery = pRuntimeEnv->pQuery;
int64_t
st
=
taosGetTimestampMs
();
int32_t
ret
=
TSDB_CODE_SUCCESS
;
//
int64_t st = taosGetTimestampMs();
//
int32_t ret = TSDB_CODE_SUCCESS;
// while (pQInfo->subgroupIdx < pQInfo->pSidSet->numOfSubSet) {
// int32_t start = pQInfo->pSidSet->starterPos[pQInfo->subgroupIdx];
...
...
@@ -2994,7 +2995,7 @@ void copyResToQueryResultBuf(SQInfo *pQInfo, SQuery *pQuery) {
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfOutputCols
;
++
i
)
{
int32_t
bytes
=
pRuntimeEnv
->
pCtx
[
i
].
outputBytes
;
char
*
pDest
=
pQuery
->
sdata
[
i
];
char
*
pDest
=
pQuery
->
sdata
[
i
]
->
data
;
memcpy
(
pDest
+
offset
*
bytes
,
pData
->
data
+
pRuntimeEnv
->
offset
[
i
]
*
pData
->
numOfElems
,
bytes
*
pData
->
numOfElems
);
...
...
@@ -3033,7 +3034,7 @@ int64_t getNumOfResultWindowRes(SQueryRuntimeEnv *pRuntimeEnv, SWindowResult *pW
return
maxOutput
;
}
int32_t
doMergeMetersResultsToGroupRes
(
SQInfo
*
pQInfo
,
STableDataInfo
*
pTableDataInfo
,
int32_t
start
,
int32_t
end
)
{
UNUSED_FUNC
int32_t
doMergeMetersResultsToGroupRes
(
SQInfo
*
pQInfo
,
STableDataInfo
*
pTableDataInfo
,
int32_t
start
,
int32_t
end
)
{
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
SQuery
*
pQuery
=
pQInfo
->
runtimeEnv
.
pQuery
;
...
...
@@ -3204,7 +3205,7 @@ int32_t flushFromResultBuf(SQInfo *pQInfo) {
void
resetMergeResultBuf
(
SQuery
*
pQuery
,
SQLFunctionCtx
*
pCtx
,
SResultInfo
*
pResultInfo
)
{
for
(
int32_t
k
=
0
;
k
<
pQuery
->
numOfOutputCols
;
++
k
)
{
pCtx
[
k
].
aOutputBuf
=
pQuery
->
sdata
[
k
]
-
pCtx
[
k
].
outputBytes
;
pCtx
[
k
].
aOutputBuf
=
pQuery
->
sdata
[
k
]
->
data
-
pCtx
[
k
].
outputBytes
;
pCtx
[
k
].
size
=
1
;
pCtx
[
k
].
startOffset
=
0
;
pCtx
[
k
].
resultInfo
=
&
pResultInfo
[
k
];
...
...
@@ -3561,7 +3562,7 @@ void scanAllDataBlocks(SQueryRuntimeEnv *pRuntimeEnv) {
}
// set the correct start position, and load the corresponding block in buffer for next round scan all data blocks.
int32_t
ret
=
tsdbDataBlockSeek
(
pRuntimeEnv
->
pQueryHandle
,
pos
);
/*int32_t ret =*/
tsdbDataBlockSeek
(
pRuntimeEnv
->
pQueryHandle
,
pos
);
status
=
pQuery
->
status
;
pRuntimeEnv
->
windowResInfo
.
curIndex
=
activeSlot
;
...
...
@@ -3582,7 +3583,7 @@ void scanAllDataBlocks(SQueryRuntimeEnv *pRuntimeEnv) {
pQuery
->
window
.
skey
=
skey
;
pQuery
->
window
.
ekey
=
pQuery
->
lastKey
-
step
;
tsdbpos_t
current
=
tsdbDataBlockTell
(
pRuntimeEnv
->
pQueryHandle
);
/*tsdbpos_t current =*/
tsdbDataBlockTell
(
pRuntimeEnv
->
pQueryHandle
);
doSingleMeterSupplementScan
(
pRuntimeEnv
);
...
...
@@ -3591,7 +3592,7 @@ void scanAllDataBlocks(SQueryRuntimeEnv *pRuntimeEnv) {
pQuery
->
lastKey
=
lkey
;
pQuery
->
window
.
ekey
=
ekey
;
STimeWindow
win
=
{.
skey
=
pQuery
->
window
.
skey
,
.
ekey
=
pQuery
->
window
.
ekey
};
//
STimeWindow win = {.skey = pQuery->window.skey, .ekey = pQuery->window.ekey};
// tsdbResetQuery(pRuntimeEnv->pQueryHandle, &win, current, pQuery->order.order);
// tsdbNextDataBlock(pRuntimeEnv->pQueryHandle);
}
...
...
@@ -4020,7 +4021,7 @@ bool vnodeHasRemainResults(void *handle) {
// query has completed
if
(
Q_STATUS_EQUAL
(
pQuery
->
status
,
QUERY_COMPLETED
))
{
TSKEY
ekey
=
taosGetRevisedEndKey
(
pQuery
->
window
.
ekey
,
pQuery
->
order
.
order
,
pQuery
->
intervalTime
,
/*TSKEY ekey =*/
taosGetRevisedEndKey
(
pQuery
->
window
.
ekey
,
pQuery
->
order
.
order
,
pQuery
->
intervalTime
,
pQuery
->
slidingTimeUnit
,
pQuery
->
precision
);
// int32_t numOfTotal = taosGetNumOfResultWithInterpo(pInterpoInfo, (TSKEY
// *)pRuntimeEnv->pInterpoBuf[0]->data,
...
...
@@ -4088,8 +4089,8 @@ static void doCopyQueryResultToMsg(SQInfo *pQInfo, int32_t numOfRows, char *data
int32_t
vnodeQueryResultInterpolate
(
SQInfo
*
pQInfo
,
tFilePage
**
pDst
,
tFilePage
**
pDataSrc
,
int32_t
numOfRows
,
int32_t
*
numOfInterpo
)
{
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
//
SQueryRuntimeEnv *pRuntimeEnv = &pQInfo->runtimeEnv;
//
SQuery * pQuery = pRuntimeEnv->pQuery;
#if 0
while (1) {
numOfRows = taosNumOfRemainPoints(&pRuntimeEnv->interpoInfo);
...
...
@@ -4390,8 +4391,8 @@ static int64_t queryOnDataBlocks(SQInfo *pQInfo) {
static
bool
multimeterMultioutputHelper
(
SQInfo
*
pQInfo
,
bool
*
dataInDisk
,
bool
*
dataInCache
,
int32_t
index
,
int32_t
start
)
{
// STableIdInfo **pMeterSidExtInfo = pQInfo->pMeterSidExtInfo;
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
SQuery
*
pQuery
=
&
pRuntimeEnv
->
pQuery
;
//
SQueryRuntimeEnv *pRuntimeEnv = &pQInfo->runtimeEnv;
// SQuery * pQuery =
pRuntimeEnv->pQuery;
#if 0
setQueryStatus(pQuery, QUERY_NOT_COMPLETED);
...
...
@@ -4438,7 +4439,7 @@ static bool multimeterMultioutputHelper(SQInfo *pQInfo, bool *dataInDisk, bool *
#endif
initCtxOutputBuf
(
pRuntimeEnv
);
//
initCtxOutputBuf(pRuntimeEnv);
return
true
;
}
...
...
@@ -5457,8 +5458,8 @@ static int32_t convertQueryMsg(SQueryTableMsg *pQueryMsg, SArray **pTableIdList,
}
static
int32_t
buildAirthmeticExprFromMsg
(
SSqlFunctionExpr
*
pExpr
,
SQueryTableMsg
*
pQueryMsg
)
{
SSqlBinaryExprInfo
*
pBinaryExprInfo
=
&
pExpr
->
binExprInfo
;
SColumnInfo
*
pColMsg
=
pQueryMsg
->
colList
;
//
SSqlBinaryExprInfo *pBinaryExprInfo = &pExpr->binExprInfo;
//
SColumnInfo * pColMsg = pQueryMsg->colList;
#if 0
tExprNode* pBinExpr = NULL;
SSchema* pSchema = toSchema(pQueryMsg, pColMsg, pQueryMsg->numOfCols);
...
...
@@ -5874,7 +5875,7 @@ static bool isValidQInfo(void *param) {
* pQInfo->signature may be changed by another thread, so we assign value of signature
* into local variable, then compare by using local variable
*/
uint64_t
sig
=
pQInfo
->
signature
;
uint64_t
sig
=
(
uint64_t
)
pQInfo
->
signature
;
return
(
sig
==
(
uint64_t
)
pQInfo
);
}
...
...
src/query/tests/astTest.cpp
浏览文件 @
fb56f9dc
...
...
@@ -9,6 +9,9 @@
#include "tsdb.h"
#include "tskiplist.h"
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wwrite-strings"
typedef
struct
ResultObj
{
int32_t
numOfResult
;
char
*
resultName
[
64
];
...
...
src/query/tests/tsBufTest.cpp
浏览文件 @
fb56f9dc
...
...
@@ -158,7 +158,7 @@ void loadDataTest() {
for
(
int32_t
i
=
0
;
i
<
numOfTags
;
++
i
)
{
int64_t
*
list
=
createTsList
(
num
,
start
,
step
);
tsBufAppend
(
pTSBuf
,
j
,
i
,
(
const
char
*
)
list
,
num
*
sizeof
(
int64_t
));
printf
(
"%d - %
lld
\n
"
,
i
,
list
[
0
]);
printf
(
"%d - %
"
PRIu64
"
\n
"
,
i
,
list
[
0
]);
free
(
list
);
start
+=
step
*
num
;
...
...
@@ -195,7 +195,7 @@ void loadDataTest() {
tsBufResetPos
(
pNewBuf
);
int64_t
s
=
taosGetTimestampUs
();
printf
(
"start:%
lld
\n
"
,
s
);
printf
(
"start:%
"
PRIu64
"
\n
"
,
s
);
int32_t
x
=
0
;
while
(
tsBufNextPos
(
pNewBuf
))
{
...
...
@@ -204,11 +204,11 @@ void loadDataTest() {
break
;
}
// printf("%d-%
lld-%lld
\n", elem.vnode, elem.tag, elem.ts);
// printf("%d-%
" PRIu64 "-%" PRIu64 "
\n", elem.vnode, elem.tag, elem.ts);
}
int64_t
e
=
taosGetTimestampUs
();
printf
(
"end:%
lld, elapsed:%lld
, total obj:%d
\n
"
,
e
,
e
-
s
,
x
);
printf
(
"end:%
"
PRIu64
", elapsed:%"
PRIu64
"
, total obj:%d
\n
"
,
e
,
e
-
s
,
x
);
}
void
randomIncTsTest
()
{}
...
...
@@ -229,14 +229,14 @@ void TSTraverse() {
for
(
int32_t
i
=
0
;
i
<
numOfTags
;
++
i
)
{
int64_t
*
list
=
createTsList
(
num
,
start
,
step
);
tsBufAppend
(
pTSBuf
,
j
,
i
,
(
const
char
*
)
list
,
num
*
sizeof
(
int64_t
));
printf
(
"%d - %d - %
lld, %lld
\n
"
,
j
,
i
,
list
[
0
],
list
[
num
-
1
]);
printf
(
"%d - %d - %
"
PRIu64
", %"
PRIu64
"
\n
"
,
j
,
i
,
list
[
0
],
list
[
num
-
1
]);
free
(
list
);
start
+=
step
*
num
;
list
=
createTsList
(
num
,
start
,
step
);
tsBufAppend
(
pTSBuf
,
j
,
i
,
(
const
char
*
)
list
,
num
*
sizeof
(
int64_t
));
printf
(
"%d - %d - %
lld, %lld
\n
"
,
j
,
i
,
list
[
0
],
list
[
num
-
1
]);
printf
(
"%d - %d - %
"
PRIu64
", %"
PRIu64
"
\n
"
,
j
,
i
,
list
[
0
],
list
[
num
-
1
]);
free
(
list
);
start
+=
step
*
num
;
...
...
@@ -250,7 +250,7 @@ void TSTraverse() {
////////////////////////////////////////////////////////////////////////////////////////
// reverse traverse
int64_t
s
=
taosGetTimestampUs
();
printf
(
"start:%
lld
\n
"
,
s
);
printf
(
"start:%
"
PRIu64
"
\n
"
,
s
);
pTSBuf
->
cur
.
order
=
TSQL_SO_DESC
;
...
...
@@ -258,7 +258,7 @@ void TSTraverse() {
int32_t
x
=
0
;
while
(
tsBufNextPos
(
pTSBuf
))
{
STSElem
elem
=
tsBufGetElem
(
pTSBuf
);
// printf("%d-%
lld-%lld
\n", elem.vnode, elem.tag, elem.ts);
// printf("%d-%
" PRIu64 "-%" PRIu64 "
\n", elem.vnode, elem.tag, elem.ts);
}
// specify the data block with vnode and tags value
...
...
@@ -273,7 +273,7 @@ void TSTraverse() {
int32_t
totalOutput
=
10
;
while
(
1
)
{
STSElem
elem
=
tsBufGetElem
(
pTSBuf
);
printf
(
"%d-%
lld-%lld
\n
"
,
elem
.
vnode
,
elem
.
tag
,
elem
.
ts
);
printf
(
"%d-%
"
PRIu64
"-%"
PRIu64
"
\n
"
,
elem
.
vnode
,
elem
.
tag
,
elem
.
ts
);
if
(
!
tsBufNextPos
(
pTSBuf
))
{
break
;
...
...
@@ -303,7 +303,7 @@ void TSTraverse() {
// complete forwards traverse
while
(
tsBufNextPos
(
pTSBuf
))
{
STSElem
elem
=
tsBufGetElem
(
pTSBuf
);
// printf("%d-%
lld-%lld
\n", elem.vnode, elem.tag, elem.ts);
// printf("%d-%
" PRIu64 "-%" PRIu64 "
\n", elem.vnode, elem.tag, elem.ts);
}
// specify the data block with vnode and tags value
...
...
@@ -318,7 +318,7 @@ void TSTraverse() {
totalOutput
=
10
;
while
(
1
)
{
STSElem
elem
=
tsBufGetElem
(
pTSBuf
);
printf
(
"%d-%
lld-%lld
\n
"
,
elem
.
vnode
,
elem
.
tag
,
elem
.
ts
);
printf
(
"%d-%
"
PRIu64
"-%"
PRIu64
"
\n
"
,
elem
.
vnode
,
elem
.
tag
,
elem
.
ts
);
if
(
!
tsBufNextPos
(
pTSBuf
))
{
break
;
...
...
@@ -429,7 +429,7 @@ void mergeIdenticalVnodeBufferTest() {
STSElem
elem
=
tsBufGetElem
(
pTSBuf1
);
EXPECT_EQ
(
elem
.
vnode
,
12
);
printf
(
"%d-%
lld-%lld
\n
"
,
elem
.
vnode
,
elem
.
tag
,
elem
.
ts
);
printf
(
"%d-%
"
PRIu64
"-%"
PRIu64
"
\n
"
,
elem
.
vnode
,
elem
.
tag
,
elem
.
ts
);
}
tsBufDestory
(
pTSBuf1
);
...
...
src/query/tests/unitTest.cpp
浏览文件 @
fb56f9dc
...
...
@@ -11,6 +11,9 @@
#include "tvariant.h"
#include "ttokendef.h"
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wwrite-strings"
namespace
{
int32_t
testValidateName
(
char
*
name
)
{
SSQLToken
token
=
{
0
};
...
...
src/util/inc/tcache.h
浏览文件 @
fb56f9dc
...
...
@@ -98,7 +98,7 @@ SCacheObj *taosCacheInit(void *tmrCtrl, int64_t refreshTimeInSeconds);
* @param keepTime survival time in second
* @return cached element
*/
void
*
taosCachePut
(
SCacheObj
*
pCacheObj
,
c
har
*
key
,
void
*
pData
,
size_t
dataSize
,
int
keepTimeInSeconds
);
void
*
taosCachePut
(
SCacheObj
*
pCacheObj
,
c
onst
char
*
key
,
const
void
*
pData
,
size_t
dataSize
,
int
keepTimeInSeconds
);
/**
* get data from cache
...
...
src/util/src/tcache.c
浏览文件 @
fb56f9dc
...
...
@@ -233,8 +233,8 @@ static FORCE_INLINE void taosCacheMoveToTrash(SCacheObj *pCacheObj, SCacheDataNo
* @param dataSize
* @return
*/
static
SCacheDataNode
*
taosUpdateCacheImpl
(
SCacheObj
*
pCacheObj
,
SCacheDataNode
*
pNode
,
char
*
key
,
int32_t
keyLen
,
void
*
pData
,
uint32_t
dataSize
,
uint64_t
duration
)
{
static
SCacheDataNode
*
taosUpdateCacheImpl
(
SCacheObj
*
pCacheObj
,
SCacheDataNode
*
pNode
,
c
onst
c
har
*
key
,
int32_t
keyLen
,
const
void
*
pData
,
uint32_t
dataSize
,
uint64_t
duration
)
{
SCacheDataNode
*
pNewNode
=
NULL
;
// only a node is not referenced by any other object, in-place update it
...
...
@@ -288,7 +288,7 @@ static SCacheDataNode *taosUpdateCacheImpl(SCacheObj *pCacheObj, SCacheDataNode
* @param pNode
* @return
*/
static
FORCE_INLINE
SCacheDataNode
*
taosAddToCacheImpl
(
SCacheObj
*
pCacheObj
,
char
*
key
,
size_t
keyLen
,
const
void
*
pData
,
static
FORCE_INLINE
SCacheDataNode
*
taosAddToCacheImpl
(
SCacheObj
*
pCacheObj
,
c
onst
c
har
*
key
,
size_t
keyLen
,
const
void
*
pData
,
size_t
dataSize
,
uint64_t
duration
)
{
SCacheDataNode
*
pNode
=
taosCreateHashNode
(
key
,
keyLen
,
pData
,
dataSize
,
duration
);
if
(
pNode
==
NULL
)
{
...
...
@@ -401,7 +401,7 @@ SCacheObj *taosCacheInit(void *tmrCtrl, int64_t refreshTime) {
return
pCacheObj
;
}
void
*
taosCachePut
(
SCacheObj
*
pCacheObj
,
c
har
*
key
,
void
*
pData
,
size_t
dataSize
,
int
duration
)
{
void
*
taosCachePut
(
SCacheObj
*
pCacheObj
,
c
onst
char
*
key
,
const
void
*
pData
,
size_t
dataSize
,
int
duration
)
{
SCacheDataNode
*
pNode
;
if
(
pCacheObj
==
NULL
||
pCacheObj
->
pHashTable
==
NULL
)
{
...
...
src/util/src/tqueue.c
浏览文件 @
fb56f9dc
...
...
@@ -117,7 +117,7 @@ int taosWriteQitem(taos_queue param, int type, void *item) {
queue
->
numOfItems
++
;
if
(
queue
->
qset
)
atomic_add_fetch_32
(
&
queue
->
qset
->
numOfItems
,
1
);
//pTrace("item:%p is put into queue,
items:%d", item
, queue->numOfItems);
//pTrace("item:%p is put into queue,
type:%d items:%d", item, type
, queue->numOfItems);
pthread_mutex_unlock
(
&
queue
->
mutex
);
...
...
@@ -197,7 +197,7 @@ int taosGetQitem(taos_qall param, int *type, void **pitem) {
*
pitem
=
pNode
->
item
;
*
type
=
pNode
->
type
;
num
=
1
;
//
pTrace("item:%p is fetched", *pitem
);
//
pTrace("item:%p is fetched, type:%d", *pitem, *type
);
}
return
num
;
...
...
src/util/src/tutil.c
浏览文件 @
fb56f9dc
...
...
@@ -645,7 +645,7 @@ void * taosbsearch(const void *key, const void *base, size_t nmemb, size_t size,
}
}
if
((
*
compar
)(
key
,
elePtrAt
(
base
,
size
,
idx
)
<
0
)
)
{
if
((
*
compar
)(
key
,
elePtrAt
(
base
,
size
,
idx
)
)
<
0
)
{
return
elePtrAt
(
base
,
size
,
idx
);
}
else
{
if
(
idx
+
1
>
nmemb
-
1
)
{
...
...
src/util/tests/cacheTest.cpp
浏览文件 @
fb56f9dc
...
...
@@ -22,15 +22,15 @@ TEST(testCase, client_cache_test) {
void
*
tscTmr
=
taosTmrInit
(
tsMaxMgmtConnections
*
2
,
200
,
6000
,
"TSC"
);
SCacheObj
*
tscCacheHandle
=
taosCacheInit
(
tscTmr
,
REFRESH_TIME_IN_SEC
);
char
*
key1
=
"test1"
;
char
*
data1
=
"test11"
;
c
onst
c
har
*
key1
=
"test1"
;
char
data1
[]
=
"test11"
;
char
*
cachedObj
=
(
char
*
)
taosCachePut
(
tscCacheHandle
,
key1
,
data1
,
strlen
(
data1
),
1
);
sleep
(
REFRESH_TIME_IN_SEC
+
1
);
printf
(
"obj is still valid: %s
\n
"
,
cachedObj
);
char
*
data2
=
"test22"
;
char
data2
[]
=
"test22"
;
taosCacheRelease
(
tscCacheHandle
,
(
void
**
)
&
cachedObj
,
false
);
/* the object is cleared by cache clean operation */
...
...
@@ -43,8 +43,8 @@ TEST(testCase, client_cache_test) {
getchar
();
char
*
key3
=
"test2"
;
char
*
data3
=
"kkkkkkk"
;
c
onst
c
har
*
key3
=
"test2"
;
c
onst
c
har
*
data3
=
"kkkkkkk"
;
char
*
cachedObj2
=
(
char
*
)
taosCachePut
(
tscCacheHandle
,
key3
,
data3
,
strlen
(
data3
),
1
);
printf
(
"%s
\n
"
,
cachedObj2
);
...
...
@@ -55,11 +55,11 @@ TEST(testCase, client_cache_test) {
char
*
d
=
(
char
*
)
taosCacheAcquireByName
(
tscCacheHandle
,
key3
);
// assert(d == NULL);
char
*
key5
=
"test5"
;
char
*
data5
=
"data5kkkkk"
;
char
key5
[]
=
"test5"
;
char
data5
[]
=
"data5kkkkk"
;
cachedObj2
=
(
char
*
)
taosCachePut
(
tscCacheHandle
,
key5
,
data5
,
strlen
(
data5
),
20
);
char
*
data6
=
"new Data after updated"
;
c
onst
c
har
*
data6
=
"new Data after updated"
;
taosCacheRelease
(
tscCacheHandle
,
(
void
**
)
&
cachedObj2
,
false
);
cachedObj2
=
(
char
*
)
taosCachePut
(
tscCacheHandle
,
key5
,
data6
,
strlen
(
data6
),
20
);
...
...
@@ -67,7 +67,7 @@ TEST(testCase, client_cache_test) {
taosCacheRelease
(
tscCacheHandle
,
(
void
**
)
&
cachedObj2
,
true
);
char
*
data7
=
"add call update procedure"
;
c
onst
c
har
*
data7
=
"add call update procedure"
;
cachedObj2
=
(
char
*
)
taosCachePut
(
tscCacheHandle
,
key5
,
data7
,
strlen
(
data7
),
20
);
printf
(
"%s
\n
=======================================
\n\n
"
,
cachedObj2
);
...
...
@@ -76,8 +76,8 @@ TEST(testCase, client_cache_test) {
taosCacheRelease
(
tscCacheHandle
,
(
void
**
)
&
cachedObj2
,
true
);
taosCacheRelease
(
tscCacheHandle
,
(
void
**
)
&
cc
,
false
);
char
*
data8
=
"ttft"
;
char
*
key6
=
"key6"
;
c
onst
c
har
*
data8
=
"ttft"
;
c
onst
c
har
*
key6
=
"key6"
;
char
*
ft
=
(
char
*
)
taosCachePut
(
tscCacheHandle
,
key6
,
data8
,
strlen
(
data8
),
20
);
taosCacheRelease
(
tscCacheHandle
,
(
void
**
)
&
ft
,
false
);
...
...
@@ -86,7 +86,7 @@ TEST(testCase, client_cache_test) {
* 140ns
*/
uint64_t
startTime
=
taosGetTimestampUs
();
printf
(
"Cache Performance Test
\n
start time:%
lld
\n
"
,
startTime
);
printf
(
"Cache Performance Test
\n
start time:%
"
PRIu64
"
\n
"
,
startTime
);
for
(
int32_t
i
=
0
;
i
<
1000
;
++
i
)
{
char
*
dd
=
(
char
*
)
taosCacheAcquireByName
(
tscCacheHandle
,
key6
);
if
(
dd
!=
NULL
)
{
...
...
@@ -101,7 +101,7 @@ TEST(testCase, client_cache_test) {
uint64_t
endTime
=
taosGetTimestampUs
();
int64_t
el
=
endTime
-
startTime
;
printf
(
"End of Test, %
lld
\n
Total Elapsed Time:%lld
us.avg:%f us
\n
"
,
endTime
,
el
,
el
/
1000.0
);
printf
(
"End of Test, %
"
PRIu64
"
\n
Total Elapsed Time:%"
PRIu64
"
us.avg:%f us
\n
"
,
endTime
,
el
,
el
/
1000.0
);
taosCacheCleanup
(
tscCacheHandle
);
}
...
...
@@ -125,7 +125,7 @@ TEST(testCase, cache_resize_test) {
}
uint64_t
endTime
=
taosGetTimestampUs
();
printf
(
"add %d object cost:%
lld
us, avg:%f us
\n
"
,
num
,
endTime
-
startTime
,
(
endTime
-
startTime
)
/
(
double
)
num
);
printf
(
"add %d object cost:%
"
PRIu64
"
us, avg:%f us
\n
"
,
num
,
endTime
-
startTime
,
(
endTime
-
startTime
)
/
(
double
)
num
);
startTime
=
taosGetTimestampUs
();
for
(
int32_t
i
=
0
;
i
<
num
;
++
i
)
{
...
...
@@ -134,7 +134,7 @@ TEST(testCase, cache_resize_test) {
assert
(
k
!=
0
);
}
endTime
=
taosGetTimestampUs
();
printf
(
"retrieve %d object cost:%
lld
us,avg:%f
\n
"
,
num
,
endTime
-
startTime
,
(
endTime
-
startTime
)
/
(
double
)
num
);
printf
(
"retrieve %d object cost:%
"
PRIu64
"
us,avg:%f
\n
"
,
num
,
endTime
-
startTime
,
(
endTime
-
startTime
)
/
(
double
)
num
);
taosCacheCleanup
(
pCache
);
taosMsleep
(
20000
);
...
...
src/util/tests/skiplistTest.cpp
浏览文件 @
fb56f9dc
...
...
@@ -175,7 +175,7 @@ void stringKeySkiplistTest() {
}
int64_t
e
=
taosGetTimestampUs
();
printf
(
"elapsed time:%
lld
us to insert %d data, avg:%f us
\n
"
,
(
e
-
s
),
total
,
(
double
)(
e
-
s
)
/
total
);
printf
(
"elapsed time:%
"
PRIu64
"
us to insert %d data, avg:%f us
\n
"
,
(
e
-
s
),
total
,
(
double
)(
e
-
s
)
/
total
);
printf
(
"level two------------------
\n
"
);
tSkipListPrint
(
pSkipList
,
1
);
...
...
@@ -237,13 +237,13 @@ void skiplistPerformanceTest() {
int64_t
cur
=
taosGetTimestampMs
();
int64_t
elapsed
=
cur
-
prev
;
printf
(
"add %d, elapsed time: %
lld
ms, avg elapsed:%f ms, total:%d
\n
"
,
100000
,
elapsed
,
elapsed
/
100000.0
,
i
);
printf
(
"add %d, elapsed time: %
"
PRIu64
"
ms, avg elapsed:%f ms, total:%d
\n
"
,
100000
,
elapsed
,
elapsed
/
100000.0
,
i
);
prev
=
cur
;
}
}
int64_t
e
=
taosGetTimestampMs
();
printf
(
"total:%
lld
ms, avg:%f
\n
"
,
e
-
s
,
(
e
-
s
)
/
(
double
)
size
);
printf
(
"total:%
"
PRIu64
"
ms, avg:%f
\n
"
,
e
-
s
,
(
e
-
s
)
/
(
double
)
size
);
printf
(
"max level of skiplist:%d, actually level:%d
\n
"
,
pSkipList
->
maxLevel
,
pSkipList
->
level
);
assert
(
tSkipListGetSize
(
pSkipList
)
==
size
);
...
...
src/vnode/main/inc/vnodeInt.h
浏览文件 @
fb56f9dc
...
...
@@ -34,13 +34,13 @@ typedef struct {
EVnStatus
status
;
int
role
;
int64_t
version
;
void
*
wqueue
;
void
*
rqueue
;
void
*
wal
;
void
*
tsdb
;
void
*
sync
;
void
*
events
;
void
*
cq
;
// continuous query
void
*
wqueue
;
void
*
rqueue
;
void
*
wal
;
void
*
tsdb
;
void
*
sync
;
void
*
events
;
void
*
cq
;
// continuous query
}
SVnodeObj
;
int
vnodeWriteToQueue
(
void
*
param
,
SWalHead
*
pHead
,
int
type
);
...
...
src/vnode/main/src/vnodeMain.c
浏览文件 @
fb56f9dc
...
...
@@ -25,10 +25,32 @@
#include "ttime.h"
#include "ttimer.h"
#include "twal.h"
#include "dnode.h"
#include "vnode.h"
#include "vnodeInt.h"
extern
void
*
tsDnodeVnodesHash
;
static
void
vnodeCleanUp
(
SVnodeObj
*
pVnode
);
static
void
*
tsDnodeVnodesHash
;
static
void
vnodeCleanUp
(
SVnodeObj
*
pVnode
);
static
void
vnodeBuildVloadMsg
(
char
*
pNode
,
void
*
param
);
int32_t
vnodeInitModule
()
{
vnodeInitWriteFp
();
tsDnodeVnodesHash
=
taosInitIntHash
(
TSDB_MAX_VNODES
,
sizeof
(
SVnodeObj
),
taosHashInt
);
if
(
tsDnodeVnodesHash
==
NULL
)
{
dError
(
"failed to init vnode list"
);
return
-
1
;
}
return
0
;
}
typedef
void
(
*
CleanupFp
)(
char
*
);
void
vnodeCleanupModule
()
{
taosCleanUpIntHashWithFp
(
tsDnodeVnodesHash
,
(
CleanupFp
)
vnodeClose
);
taosCleanUpIntHash
(
tsDnodeVnodesHash
);
}
int32_t
vnodeCreate
(
SMDCreateVnodeMsg
*
pVnodeCfg
)
{
int32_t
code
;
...
...
@@ -95,9 +117,6 @@ int32_t vnodeDrop(int32_t vgId) {
int32_t
vnodeOpen
(
int32_t
vnode
,
char
*
rootDir
)
{
char
temp
[
TSDB_FILENAME_LEN
];
static
pthread_once_t
vnodeInitWrite
=
PTHREAD_ONCE_INIT
;
pthread_once
(
&
vnodeInitWrite
,
vnodeInitWriteFp
);
SVnodeObj
vnodeObj
=
{
0
};
vnodeObj
.
vgId
=
vnode
;
vnodeObj
.
status
=
VN_STATUS_INIT
;
...
...
@@ -194,6 +213,24 @@ void *vnodeGetTsdb(void *pVnode) {
return
((
SVnodeObj
*
)
pVnode
)
->
tsdb
;
}
void
vnodeBuildStatusMsg
(
void
*
param
)
{
SDMStatusMsg
*
pStatus
=
param
;
taosVisitIntHashWithFp
(
tsDnodeVnodesHash
,
vnodeBuildVloadMsg
,
pStatus
);
}
static
void
vnodeBuildVloadMsg
(
char
*
pNode
,
void
*
param
)
{
SVnodeObj
*
pVnode
=
(
SVnodeObj
*
)
pNode
;
if
(
pVnode
->
status
==
VN_STATUS_DELETING
)
return
;
SDMStatusMsg
*
pStatus
=
param
;
if
(
pStatus
->
openVnodes
>=
TSDB_MAX_VNODES
)
return
;
SVnodeLoad
*
pLoad
=
&
pStatus
->
load
[
pStatus
->
openVnodes
++
];
pLoad
->
vgId
=
htonl
(
pVnode
->
vgId
);
pLoad
->
vnode
=
htonl
(
pVnode
->
vgId
);
pLoad
->
status
=
pVnode
->
status
;
}
static
void
vnodeCleanUp
(
SVnodeObj
*
pVnode
)
{
taosDeleteIntHash
(
tsDnodeVnodesHash
,
pVnode
->
vgId
);
...
...
src/vnode/main/src/vnodeWrite.c
浏览文件 @
fb56f9dc
...
...
@@ -26,7 +26,7 @@
#include "vnode.h"
#include "vnodeInt.h"
static
int32_t
(
*
vnodeProcessWriteMsgFp
[
TSDB_MSG_TYPE_MAX
])(
SVnodeObj
*
,
void
*
,
void
*
);
static
int32_t
(
*
vnodeProcessWriteMsgFp
[
TSDB_MSG_TYPE_MAX
])(
SVnodeObj
*
,
void
*
,
SRspRet
*
);
static
int32_t
vnodeProcessSubmitMsg
(
SVnodeObj
*
pVnode
,
void
*
pMsg
,
SRspRet
*
);
static
int32_t
vnodeProcessCreateTableMsg
(
SVnodeObj
*
pVnode
,
void
*
pMsg
,
SRspRet
*
);
static
int32_t
vnodeProcessDropTableMsg
(
SVnodeObj
*
pVnode
,
void
*
pMsg
,
SRspRet
*
);
...
...
src/vnode/tsdb/src/tsdbMain.c
浏览文件 @
fb56f9dc
...
...
@@ -183,7 +183,7 @@ tsdb_repo_t *tsdbOpenRepo(char *tsdbDir) {
return
NULL
;
}
STsdbRepo
*
pRepo
=
(
STsdbRepo
*
)
malloc
(
sizeof
(
STsdbRepo
));
STsdbRepo
*
pRepo
=
(
STsdbRepo
*
)
calloc
(
1
,
sizeof
(
STsdbRepo
));
if
(
pRepo
==
NULL
)
{
return
NULL
;
}
...
...
src/vnode/tsdb/src/tsdbRead.c
浏览文件 @
fb56f9dc
...
...
@@ -301,6 +301,7 @@ tsdb_query_handle_t *tsdbQueryByTableId(tsdb_repo_t* tsdb, STsdbQueryCond *pCond
.
pCompInfo
=
calloc
(
1
,
1024
),
};
assert
(
info
.
pTableObj
!=
NULL
);
taosArrayPush
(
pQueryHandle
->
pTableCheckInfo
,
&
info
);
}
...
...
@@ -1008,17 +1009,21 @@ SArray *tsdbRetrieveDataBlock(tsdb_query_handle_t *pQueryHandle, SArray *pIdList
}
}
int32_t
tsdbResetQuery
(
tsdb_query_handle_t
*
pQueryHandle
,
STimeWindow
*
window
,
tsdbpos_t
position
,
int16_t
order
)
{}
int32_t
tsdbResetQuery
(
tsdb_query_handle_t
*
pQueryHandle
,
STimeWindow
*
window
,
tsdbpos_t
position
,
int16_t
order
)
{
return
0
;
}
int32_t
tsdbDataBlockSeek
(
tsdb_query_handle_t
*
pQueryHandle
,
tsdbpos_t
pos
)
{}
int32_t
tsdbDataBlockSeek
(
tsdb_query_handle_t
*
pQueryHandle
,
tsdbpos_t
pos
)
{
return
0
;
}
tsdbpos_t
tsdbDataBlockTell
(
tsdb_query_handle_t
*
pQueryHandle
)
{
return
NULL
;
}
SArray
*
tsdbRetrieveDataRow
(
tsdb_query_handle_t
*
pQueryHandle
,
SArray
*
pIdList
,
SQueryRowCond
*
pCond
)
{}
SArray
*
tsdbRetrieveDataRow
(
tsdb_query_handle_t
*
pQueryHandle
,
SArray
*
pIdList
,
SQueryRowCond
*
pCond
)
{
return
NULL
;
}
tsdb_query_handle_t
*
tsdbQueryFromTagConds
(
STsdbQueryCond
*
pCond
,
int16_t
stableId
,
const
char
*
pTagFilterStr
)
{}
tsdb_query_handle_t
*
tsdbQueryFromTagConds
(
STsdbQueryCond
*
pCond
,
int16_t
stableId
,
const
char
*
pTagFilterStr
)
{
return
NULL
;
}
SArray
*
tsdbGetTableList
(
tsdb_query_handle_t
*
pQueryHandle
)
{}
SArray
*
tsdbGetTableList
(
tsdb_query_handle_t
*
pQueryHandle
)
{
return
NULL
;
}
static
SArray
*
createTableIdArrayList
(
STsdbRepo
*
tsdb
,
int64_t
uid
)
{
STable
*
pTable
=
tsdbGetTableByUid
(
tsdbGetMeta
(
tsdb
),
uid
);
...
...
@@ -1048,7 +1053,7 @@ typedef struct SSyntaxTreeFilterSupporter {
* convert the result pointer to STabObj instead of tSkipListNode
* @param pRes
*/
static
void
tansformQueryResult
(
SArray
*
pRes
)
{
static
UNUSED_FUNC
void
tansformQueryResult
(
SArray
*
pRes
)
{
if
(
pRes
==
NULL
||
taosArrayGetSize
(
pRes
)
==
0
)
{
return
;
}
...
...
@@ -1300,10 +1305,10 @@ bool tSkipListNodeFilterCallback(const void* pNode, void* param) {
}
static
int32_t
doQueryTableList
(
STable
*
pSTable
,
SArray
*
pRes
,
const
char
*
pCond
)
{
STColumn
*
stcol
=
schemaColAt
(
pSTable
->
tagSchema
,
0
);
//
STColumn* stcol = schemaColAt(pSTable->tagSchema, 0);
tExprNode
*
pExpr
=
NULL
;
tSQLBinaryExprFromString
(
&
pExpr
,
stcol
,
schemaNCols
(
pSTable
->
tagSchema
),
pCond
,
strlen
(
pCond
));
// tSQLBinaryExprFromString(&pExpr, stcol, schemaNCols(pSTable->tagSchema), (char*)
pCond, strlen(pCond));
// failed to build expression, no result, return immediately
if
(
pExpr
==
NULL
)
{
...
...
@@ -1314,18 +1319,18 @@ static int32_t doQueryTableList(STable* pSTable, SArray* pRes, const char* pCond
}
// query according to the binary expression
SSyntaxTreeFilterSupporter
s
=
{.
pTagSchema
=
stcol
,
.
numOfTags
=
schemaNCols
(
pSTable
->
tagSchema
)};
SBinaryFilterSupp
supp
=
{
.
fp
=
(
__result_filter_fn_t
)
tSkipListNodeFilterCallback
,
.
setupInfoFn
=
(
__do_filter_suppl_fn_t
)
filterPrepare
,
.
pExtInfo
=
&
s
};
tSQLBinaryExprTraverse
(
pExpr
,
pSTable
->
pIndex
,
pRes
,
&
supp
);
tExprTreeDestroy
(
&
pExpr
,
tSQLListTraverseDestroyInfo
);
tansformQueryResult
(
pRes
);
//
SSyntaxTreeFilterSupporter s = {.pTagSchema = stcol, .numOfTags = schemaNCols(pSTable->tagSchema)};
//
//
SBinaryFilterSupp supp = {
//
.fp = (__result_filter_fn_t)tSkipListNodeFilterCallback,
//
.setupInfoFn = (__do_filter_suppl_fn_t)filterPrepare,
//
.pExtInfo = &s
//
};
//
//
tSQLBinaryExprTraverse(pExpr, pSTable->pIndex, pRes, &supp);
//
tExprTreeDestroy(&pExpr, tSQLListTraverseDestroyInfo);
//
//
tansformQueryResult(pRes);
return
TSDB_CODE_SUCCESS
;
}
...
...
src/vnode/wal/src/walMain.c
浏览文件 @
fb56f9dc
...
...
@@ -284,7 +284,7 @@ static int walRestoreWalFile(char *name, void *pVnode, int (*writeFp)(void *, SW
}
// write into queue
(
*
writeFp
)(
pVnode
,
buffer
,
TAOS_QTYPE_WAL
);
(
*
writeFp
)(
pVnode
,
pHead
,
TAOS_QTYPE_WAL
);
}
return
code
;
...
...
tests/examples/c/demo.c
浏览文件 @
fb56f9dc
...
...
@@ -28,47 +28,23 @@ int main(int argc, char *argv[]) {
TAOS
*
taos
;
char
qstr
[
1024
];
TAOS_RES
*
result
;
// connect to server
if
(
argc
<
2
)
{
printf
(
"please input server-ip
\n
"
);
return
0
;
}
taos_options
(
TSDB_OPTION_CONFIGDIR
,
"~/first/cfg"
);
// init TAOS
taos_init
();
taos
=
taos_connect
(
argv
[
1
],
"root"
,
"taosdata"
,
NULL
,
0
);
if
(
taos
==
NULL
)
{
printf
(
"failed to connect to server, reason:%s
\n
"
,
taos_errstr
(
taos
));
exit
(
1
);
}
printf
(
"success to connect to server
\n
"
);
// int32_t code = taos_query(taos, "insert into test.tm2 values(now, 1)(now+1m,2)(now+2m,3) (now+3m, 4) (now+4m, 5);");
int32_t
code
=
taos_query
(
taos
,
"insert into test.tm2 values(now, 99)"
);
if
(
code
!=
0
)
{
printf
(
"failed to execute query, reason:%s
\n
"
,
taos_errstr
(
taos
));
}
TAOS_RES
*
res
=
taos_use_result
(
taos
);
TAOS_ROW
row
=
NULL
;
char
buf
[
512
]
=
{
0
};
int32_t
numOfFields
=
taos_num_fields
(
res
);
TAOS_FIELD
*
pFields
=
taos_fetch_fields
(
res
);
while
((
row
=
taos_fetch_row
(
res
))
!=
NULL
)
{
taos_print_row
(
buf
,
row
,
pFields
,
numOfFields
);
printf
(
"%s
\n
"
,
buf
);
memset
(
buf
,
0
,
512
);
}
taos_close
(
taos
);
getchar
();
return
0
;
taos_query
(
taos
,
"drop database demo"
);
if
(
taos_query
(
taos
,
"create database demo"
)
!=
0
)
{
...
...
@@ -76,19 +52,19 @@ int main(int argc, char *argv[]) {
exit
(
1
);
}
printf
(
"success to create database
\n
"
);
taos_query
(
taos
,
"use demo"
);
// create table
if
(
taos_query
(
taos
,
"create table m1 (ts timestamp, speed int)"
)
!=
0
)
{
printf
(
"failed to create table, reason:%s
\n
"
,
taos_errstr
(
taos
));
exit
(
1
);
}
printf
(
"success to create table
\n
"
);
// sleep for one second to make sure table is created on data node
// taosMsleep(1000);
// insert 10 records
int
i
=
0
;
for
(
i
=
0
;
i
<
10
;
++
i
)
{
...
...
@@ -99,27 +75,27 @@ int main(int argc, char *argv[]) {
//sleep(1);
}
printf
(
"success to insert rows, total %d rows
\n
"
,
i
);
// query the records
sprintf
(
qstr
,
"SELECT * FROM m1"
);
if
(
taos_query
(
taos
,
qstr
)
!=
0
)
{
printf
(
"failed to select, reason:%s
\n
"
,
taos_errstr
(
taos
));
exit
(
1
);
}
result
=
taos_use_result
(
taos
);
if
(
result
==
NULL
)
{
printf
(
"failed to get result, reason:%s
\n
"
,
taos_errstr
(
taos
));
exit
(
1
);
}
//
TAOS_ROW row;
TAOS_ROW
row
;
int
rows
=
0
;
int
num_fields
=
taos_field_count
(
taos
);
TAOS_FIELD
*
fields
=
taos_fetch_fields
(
result
);
char
temp
[
256
];
printf
(
"select * from table, result:
\n
"
);
// fetch the records row by row
while
((
row
=
taos_fetch_row
(
result
)))
{
...
...
@@ -127,7 +103,7 @@ int main(int argc, char *argv[]) {
taos_print_row
(
temp
,
row
,
fields
,
num_fields
);
printf
(
"%s
\n
"
,
temp
);
}
taos_free_result
(
result
);
printf
(
"====demo end====
\n\n
"
);
return
getchar
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录