Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
慢慢CG
TDengine
提交
a8f15124
T
TDengine
项目概览
慢慢CG
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
a8f15124
编写于
12月 11, 2019
作者:
S
slguan
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'develop' into feature/slguan
# Conflicts: # src/util/src/version.c
上级
ca27c92c
77f2784f
变更
50
展开全部
显示空白变更内容
内联
并排
Showing
50 changed file
with
540 addition
and
496 deletion
+540
-496
documentation/tdenginedocs-cn/getting-started/index.html
documentation/tdenginedocs-cn/getting-started/index.html
+2
-2
documentation/tdenginedocs-en/getting-started/index.html
documentation/tdenginedocs-en/getting-started/index.html
+2
-2
src/client/inc/tscUtil.h
src/client/inc/tscUtil.h
+2
-4
src/client/inc/tsclient.h
src/client/inc/tsclient.h
+18
-13
src/client/src/tscAst.c
src/client/src/tscAst.c
+3
-4
src/client/src/tscFunctionImpl.c
src/client/src/tscFunctionImpl.c
+105
-103
src/client/src/tscJoinProcess.c
src/client/src/tscJoinProcess.c
+6
-6
src/client/src/tscLocal.c
src/client/src/tscLocal.c
+2
-2
src/client/src/tscParseInsert.c
src/client/src/tscParseInsert.c
+4
-4
src/client/src/tscPrepare.c
src/client/src/tscPrepare.c
+0
-1
src/client/src/tscProfile.c
src/client/src/tscProfile.c
+6
-4
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+136
-180
src/client/src/tscSchemaUtil.c
src/client/src/tscSchemaUtil.c
+8
-1
src/client/src/tscSecondaryMerge.c
src/client/src/tscSecondaryMerge.c
+4
-2
src/client/src/tscServer.c
src/client/src/tscServer.c
+9
-5
src/client/src/tscSql.c
src/client/src/tscSql.c
+3
-3
src/client/src/tscStream.c
src/client/src/tscStream.c
+19
-16
src/client/src/tscSub.c
src/client/src/tscSub.c
+3
-3
src/client/src/tscSystem.c
src/client/src/tscSystem.c
+19
-6
src/client/src/tscUtil.c
src/client/src/tscUtil.c
+56
-27
src/inc/taosmsg.h
src/inc/taosmsg.h
+2
-2
src/inc/tschemautil.h
src/inc/tschemautil.h
+1
-0
src/inc/tsqlfunction.h
src/inc/tsqlfunction.h
+0
-2
src/inc/ttypes.h
src/inc/ttypes.h
+1
-1
src/inc/tutil.h
src/inc/tutil.h
+1
-1
src/kit/shell/src/shellCommand.c
src/kit/shell/src/shellCommand.c
+2
-0
src/kit/shell/src/shellEngine.c
src/kit/shell/src/shellEngine.c
+10
-6
src/kit/shell/src/shellLinux.c
src/kit/shell/src/shellLinux.c
+7
-5
src/kit/taosdemo/taosdemo.c
src/kit/taosdemo/taosdemo.c
+23
-18
src/modules/http/src/gcJson.c
src/modules/http/src/gcJson.c
+1
-1
src/modules/http/src/restJson.c
src/modules/http/src/restJson.c
+1
-1
src/modules/http/src/tgHandle.c
src/modules/http/src/tgHandle.c
+2
-0
src/modules/monitor/src/monitorSystem.c
src/modules/monitor/src/monitorSystem.c
+13
-12
src/os/linux/inc/os.h
src/os/linux/inc/os.h
+2
-0
src/os/linux/src/tsystem.c
src/os/linux/src/tsystem.c
+10
-10
src/system/detail/inc/mgmtUtil.h
src/system/detail/inc/mgmtUtil.h
+1
-1
src/system/detail/src/mgmtSupertableQuery.c
src/system/detail/src/mgmtSupertableQuery.c
+7
-12
src/system/detail/src/mgmtVgroup.c
src/system/detail/src/mgmtVgroup.c
+1
-0
src/system/detail/src/vnodeQueryImpl.c
src/system/detail/src/vnodeQueryImpl.c
+24
-9
src/system/detail/src/vnodeQueryProcess.c
src/system/detail/src/vnodeQueryProcess.c
+5
-5
src/system/detail/src/vnodeShell.c
src/system/detail/src/vnodeShell.c
+1
-3
src/util/src/textbuffer.c
src/util/src/textbuffer.c
+0
-1
src/util/src/thistogram.c
src/util/src/thistogram.c
+0
-1
src/util/src/tskiplist.c
src/util/src/tskiplist.c
+1
-5
src/util/src/tstrbuild.c
src/util/src/tstrbuild.c
+0
-1
src/util/src/ttimer.c
src/util/src/ttimer.c
+0
-1
src/util/src/ttokenizer.c
src/util/src/ttokenizer.c
+4
-4
src/util/src/ttypes.c
src/util/src/ttypes.c
+10
-3
src/util/src/tutil.c
src/util/src/tutil.c
+2
-1
src/util/src/version.c
src/util/src/version.c
+1
-2
未找到文件。
documentation/tdenginedocs-cn/getting-started/index.html
浏览文件 @
a8f15124
...
...
@@ -28,7 +28,7 @@
<p>
在TDengine终端中,用户可以通过SQL命令来创建/删除数据库、表等,并进行插入查询操作。在终端中运行的SQL语句需要以分号结束来运行。示例:
</p>
<pre><code
class=
"mysql language-mysql"
>
create database db;
use db;
create table t (ts timestamp,
cdata
int);
create table t (ts timestamp,
speed
int);
insert into t values ('2019-07-15 00:00:00', 10);
insert into t values ('2019-07-15 01:00:00', 20);
select * from t;
...
...
documentation/tdenginedocs-en/getting-started/index.html
浏览文件 @
a8f15124
...
...
@@ -28,7 +28,7 @@
<p>
In the TDengine shell, you can create databases, create tables and insert/query data with SQL. Each query command ends with a semicolon. It works like MySQL, for example:
</p>
<pre><code
class=
"mysql language-mysql"
>
create database db;
use db;
create table t (ts timestamp,
cdata
int);
create table t (ts timestamp,
speed
int);
insert into t values ('2019-07-15 10:00:00', 10);
insert into t values ('2019-07-15 10:01:05', 20);
select * from t;
...
...
src/client/inc/tscUtil.h
浏览文件 @
a8f15124
...
...
@@ -67,7 +67,7 @@ typedef struct SJoinSubquerySupporter {
}
SJoinSubquerySupporter
;
void
tscDestroyDataBlock
(
STableDataBlocks
*
pDataBlock
);
STableDataBlocks
*
tscCreateDataBlock
(
int32_t
siz
e
);
STableDataBlocks
*
tscCreateDataBlock
(
size_t
initialBufSize
,
int32_t
rowSize
,
int32_t
startOffset
,
const
char
*
nam
e
);
void
tscAppendDataBlock
(
SDataBlockList
*
pList
,
STableDataBlocks
*
pBlocks
);
SParamInfo
*
tscAddParamToDataBlock
(
STableDataBlocks
*
pDataBlock
,
char
type
,
uint8_t
timePrec
,
short
bytes
,
uint32_t
offset
);
...
...
@@ -78,9 +78,7 @@ int32_t tscCopyDataBlockToPayload(SSqlObj* pSql, STableDataBlocks* pDa
void
tscFreeUnusedDataBlocks
(
SDataBlockList
*
pList
);
int32_t
tscMergeTableDataBlocks
(
SSqlObj
*
pSql
,
SDataBlockList
*
pDataList
);
STableDataBlocks
*
tscGetDataBlockFromList
(
void
*
pHashList
,
SDataBlockList
*
pDataBlockList
,
int64_t
id
,
int32_t
size
,
int32_t
startOffset
,
int32_t
rowSize
,
char
*
tableId
);
STableDataBlocks
*
tscCreateDataBlockEx
(
size_t
size
,
int32_t
rowSize
,
int32_t
startOffset
,
char
*
name
);
int32_t
startOffset
,
int32_t
rowSize
,
const
char
*
tableId
);
SVnodeSidList
*
tscGetVnodeSidList
(
SMetricMeta
*
pMetricmeta
,
int32_t
vnodeIdx
);
SMeterSidExtInfo
*
tscGetMeterSidInfo
(
SVnodeSidList
*
pSidList
,
int32_t
idx
);
...
...
src/client/inc/tsclient.h
浏览文件 @
a8f15124
...
...
@@ -231,17 +231,22 @@ typedef struct SParamInfo {
typedef
struct
STableDataBlocks
{
char
meterId
[
TSDB_METER_ID_LEN
];
int8_t
tsSource
;
bool
ordered
;
int8_t
tsSource
;
// where does the UNIX timestamp come from, server or client
bool
ordered
;
// if current rows are ordered or not
int64_t
vgid
;
// virtual group id
int64_t
prevTS
;
// previous timestamp, recorded to decide if the records array is ts ascending
int32_t
numOfMeters
;
// number of tables in current submit block
int64_t
vgid
;
int64_t
prevTS
;
int32_t
numOfMeters
;
int32_t
rowSize
;
int32_t
rowSize
;
// row size for current table
uint32_t
nAllocSize
;
uint32_t
size
;
/*
* the metermeta for current table, the metermeta will be used during submit stage, keep a ref
* to avoid it to be removed from cache
*/
SMeterMeta
*
pMeterMeta
;
union
{
char
*
filename
;
char
*
pData
;
...
...
@@ -255,8 +260,8 @@ typedef struct STableDataBlocks {
typedef
struct
SDataBlockList
{
int32_t
idx
;
int32_t
nSize
;
int32_t
nAlloc
;
uint32_t
nSize
;
uint32_t
nAlloc
;
char
*
userParam
;
/* user assigned parameters for async query */
void
*
udfp
;
/* user defined function pointer, used in async model */
STableDataBlocks
**
pData
;
...
...
@@ -274,7 +279,7 @@ typedef struct {
int8_t
isInsertFromFile
;
// load data from file or not
bool
import
;
// import/insert type
char
msgType
;
uint8_t
msgType
;
uint16_t
type
;
// query type
char
intervalTimeUnit
;
int64_t
etime
,
stime
;
...
...
@@ -378,14 +383,14 @@ typedef struct _sql_obj {
char
*
sqlstr
;
char
retry
;
char
maxRetry
;
char
index
;
uint8_t
index
;
char
freed
:
4
;
char
listed
:
4
;
tsem_t
rspSem
;
tsem_t
emptyRspSem
;
SSqlCmd
cmd
;
SSqlRes
res
;
char
numOfSubs
;
uint8_t
numOfSubs
;
struct
_sql_obj
**
pSubs
;
struct
_sql_obj
*
prev
,
*
next
;
}
SSqlObj
;
...
...
src/client/src/tscAst.c
浏览文件 @
a8f15124
...
...
@@ -643,13 +643,12 @@ int32_t intersect(tQueryResultset *pLeft, tQueryResultset *pRight, tQueryResults
}
/*
*
*
traverse the result and apply the function to each item to check if the item is qualified or not
*/
void
tSQLListTraverseOnResult
(
struct
tSQLBinaryExpr
*
pExpr
,
bool
(
*
fp
)(
tSkipListNode
*
,
void
*
),
tQueryResultset
*
pResult
)
{
static
void
tSQLListTraverseOnResult
(
struct
tSQLBinaryExpr
*
pExpr
,
__result_filter_fn_t
fp
,
tQueryResultset
*
pResult
)
{
assert
(
pExpr
->
pLeft
->
nodeType
==
TSQL_NODE_COL
&&
pExpr
->
pRight
->
nodeType
==
TSQL_NODE_VALUE
);
// brutal force s
earch
// brutal force s
can the result list and check for each item in the list
int64_t
num
=
pResult
->
num
;
for
(
int32_t
i
=
0
,
j
=
0
;
i
<
pResult
->
num
;
++
i
)
{
if
(
fp
==
NULL
||
(
fp
(
pResult
->
pRes
[
i
],
pExpr
->
info
)
==
true
))
{
...
...
src/client/src/tscFunctionImpl.c
浏览文件 @
a8f15124
此差异已折叠。
点击以展开。
src/client/src/tscJoinProcess.c
浏览文件 @
a8f15124
...
...
@@ -13,8 +13,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "tscJoinProcess.h"
#include "os.h"
#include "tscJoinProcess.h"
#include "tcache.h"
#include "tscUtil.h"
#include "tsclient.h"
...
...
@@ -88,7 +88,7 @@ static int64_t doTSBlockIntersect(SSqlObj* pSql, SJoinSubquerySupporter* pSuppor
#ifdef _DEBUG_VIEW
// for debug purpose
tscPrint
(
"%
lld, tags:%d
\t
%lld
, tags:%d"
,
elem1
.
ts
,
elem1
.
tag
,
elem2
.
ts
,
elem2
.
tag
);
tscPrint
(
"%
"
PRId64
", tags:%d
\t
%"
PRId64
"
, tags:%d"
,
elem1
.
ts
,
elem1
.
tag
,
elem2
.
ts
,
elem2
.
tag
);
#endif
if
(
elem1
.
tag
<
elem2
.
tag
||
(
elem1
.
tag
==
elem2
.
tag
&&
doCompare
(
order
,
elem1
.
ts
,
elem2
.
ts
)))
{
...
...
@@ -150,7 +150,7 @@ static int64_t doTSBlockIntersect(SSqlObj* pSql, SJoinSubquerySupporter* pSuppor
tsBufDestory
(
pSupporter1
->
pTSBuf
);
tsBufDestory
(
pSupporter2
->
pTSBuf
);
tscTrace
(
"%p input1:%
lld, input2:%lld, final:%lld
for secondary query after ts blocks intersecting"
,
pSql
,
tscTrace
(
"%p input1:%
"
PRId64
", input2:%"
PRId64
", final:%"
PRId64
"
for secondary query after ts blocks intersecting"
,
pSql
,
numOfInput1
,
numOfInput2
,
output1
->
numOfTotal
);
return
output1
->
numOfTotal
;
...
...
@@ -528,8 +528,8 @@ void tscFetchDatablockFromSubquery(SSqlObj* pSql) {
numOfFetch
++
;
}
}
else
{
if
((
pRes
->
row
>=
pRes
->
numOfRows
&&
(
!
tscHasReachLimitation
(
pSql
->
pSubs
[
i
]))
&&
tscProjectionQueryOnTable
(
pSql
))
||
(
pRes
->
numOfRows
==
0
))
{
if
((
pRes
->
row
>=
pRes
->
numOfRows
&&
(
!
tscHasReachLimitation
(
pSql
->
pSubs
[
i
]))
&&
tscProjectionQueryOnTable
(
&
pSql
->
cmd
))
||
(
pRes
->
numOfRows
==
0
))
{
numOfFetch
++
;
}
}
...
...
@@ -1619,7 +1619,7 @@ void tsBufDisplay(STSBuf* pTSBuf) {
while
(
tsBufNextPos
(
pTSBuf
))
{
STSElem
elem
=
tsBufGetElem
(
pTSBuf
);
printf
(
"%d-%
lld-%lld
\n
"
,
elem
.
vnode
,
elem
.
tag
,
elem
.
ts
);
printf
(
"%d-%
"
PRId64
"-%"
PRId64
"
\n
"
,
elem
.
vnode
,
*
(
int64_t
*
)
elem
.
tag
,
elem
.
ts
);
}
pTSBuf
->
cur
.
order
=
old
;
...
...
src/client/src/tscLocal.c
浏览文件 @
a8f15124
...
...
@@ -64,7 +64,7 @@ static int32_t getToStringLength(const char *pData, int32_t length, int32_t type
}
break
;
case
TSDB_DATA_TYPE_TIMESTAMP
:
case
TSDB_DATA_TYPE_BIGINT
:
len
=
sprintf
(
buf
,
"%
lld
"
,
*
(
int64_t
*
)
pData
);
len
=
sprintf
(
buf
,
"%
"
PRId64
"
"
,
*
(
int64_t
*
)
pData
);
break
;
case
TSDB_DATA_TYPE_BOOL
:
len
=
MAX_BOOL_TYPE_LENGTH
;
...
...
@@ -228,7 +228,7 @@ static int32_t tscSetValueToResObj(SSqlObj *pSql, int32_t rowLen) {
sprintf
(
target
,
"%d"
,
*
(
int32_t
*
)
pTagValue
);
break
;
case
TSDB_DATA_TYPE_BIGINT
:
sprintf
(
target
,
"%
lld
"
,
*
(
int64_t
*
)
pTagValue
);
sprintf
(
target
,
"%
"
PRId64
"
"
,
*
(
int64_t
*
)
pTagValue
);
break
;
case
TSDB_DATA_TYPE_BOOL
:
{
char
*
val
=
(
*
((
int8_t
*
)
pTagValue
)
==
0
)
?
"false"
:
"true"
;
...
...
src/client/src/tscParseInsert.c
浏览文件 @
a8f15124
...
...
@@ -441,7 +441,7 @@ int tsParseOneRowData(char **str, STableDataBlocks *pDataBlocks, SSchema schema[
}
}
tmpTokenBuf
[
j
]
=
sToken
.
z
[
i
];
tmpTokenBuf
[
j
]
=
sToken
.
z
[
k
];
j
++
;
}
tmpTokenBuf
[
j
]
=
0
;
...
...
@@ -982,7 +982,7 @@ int doParserInsertSql(SSqlObj *pSql, char *str) {
strcpy
(
fname
,
full_path
.
we_wordv
[
0
]);
wordfree
(
&
full_path
);
STableDataBlocks
*
pDataBlock
=
tscCreateDataBlock
Ex
(
PATH_MAX
,
pMeterMetaInfo
->
pMeterMeta
->
rowSize
,
STableDataBlocks
*
pDataBlock
=
tscCreateDataBlock
(
PATH_MAX
,
pMeterMetaInfo
->
pMeterMeta
->
rowSize
,
sizeof
(
SShellSubmitBlock
),
pMeterMetaInfo
->
name
);
tscAppendDataBlock
(
pCmd
->
pDataBlocks
,
pDataBlock
);
...
...
@@ -1219,8 +1219,8 @@ static int tscInsertDataFromFile(SSqlObj *pSql, FILE *fp, char *tmpTokenBuf) {
int32_t
rowSize
=
pMeterMeta
->
rowSize
;
pCmd
->
pDataBlocks
=
tscCreateBlockArrayList
();
STableDataBlocks
*
pTableDataBlock
=
tscCreateDataBlockEx
(
TSDB_PAYLOAD_SIZE
,
pMeterMeta
->
rowSize
,
sizeof
(
SShellSubmitBlock
),
pMeterMetaInfo
->
name
);
STableDataBlocks
*
pTableDataBlock
=
tscCreateDataBlock
(
TSDB_PAYLOAD_SIZE
,
pMeterMeta
->
rowSize
,
sizeof
(
SShellSubmitBlock
),
pMeterMetaInfo
->
name
);
tscAppendDataBlock
(
pCmd
->
pDataBlocks
,
pTableDataBlock
);
...
...
src/client/src/tscPrepare.c
浏览文件 @
a8f15124
...
...
@@ -75,7 +75,6 @@ static int normalStmtAddPart(SNormalStmt* stmt, bool isParam, char* str, uint32_
if
(
isParam
)
{
++
stmt
->
numParams
;
}
return
TSDB_CODE_SUCCESS
;
}
...
...
src/client/src/tscProfile.c
浏览文件 @
a8f15124
...
...
@@ -93,10 +93,10 @@ void tscSaveSlowQuery(SSqlObj *pSql) {
const
static
int64_t
SLOW_QUERY_INTERVAL
=
3000000L
;
if
(
pSql
->
res
.
useconds
<
SLOW_QUERY_INTERVAL
)
return
;
tscTrace
(
"%p query time:%
lld
sql:%s"
,
pSql
,
pSql
->
res
.
useconds
,
pSql
->
sqlstr
);
tscTrace
(
"%p query time:%
"
PRId64
"
sql:%s"
,
pSql
,
pSql
->
res
.
useconds
,
pSql
->
sqlstr
);
char
*
sql
=
malloc
(
200
);
int
len
=
snprintf
(
sql
,
200
,
"insert into %s.slowquery values(now, '%s', %
lld, %lld
, '"
,
tsMonitorDbName
,
int
len
=
snprintf
(
sql
,
200
,
"insert into %s.slowquery values(now, '%s', %
"
PRId64
", %"
PRId64
"
, '"
,
tsMonitorDbName
,
pSql
->
pTscObj
->
user
,
pSql
->
stime
,
pSql
->
res
.
useconds
);
int
sqlLen
=
snprintf
(
sql
+
len
,
TSDB_SHOW_SQL_LEN
,
"%s"
,
pSql
->
sqlstr
);
if
(
sqlLen
>
TSDB_SHOW_SQL_LEN
-
1
)
{
...
...
@@ -198,7 +198,9 @@ void tscKillStream(STscObj *pObj, uint32_t killId) {
pthread_mutex_unlock
(
&
pObj
->
mutex
);
if
(
pStream
)
{
tscTrace
(
"%p stream:%p is killed, streamId:%d"
,
pStream
->
pSql
,
pStream
,
killId
);
}
taos_close_stream
(
pStream
);
if
(
pStream
->
callback
)
{
...
...
src/client/src/tscSQLParser.c
浏览文件 @
a8f15124
此差异已折叠。
点击以展开。
src/client/src/tscSchemaUtil.c
浏览文件 @
a8f15124
...
...
@@ -83,6 +83,13 @@ struct SSchema* tsGetColumnSchema(SMeterMeta* pMeta, int32_t startCol) {
return
(
SSchema
*
)(((
char
*
)
pMeta
+
sizeof
(
SMeterMeta
))
+
startCol
*
sizeof
(
SSchema
));
}
struct
SSchema
tsGetTbnameColumnSchema
()
{
struct
SSchema
s
=
{.
colId
=
TSDB_TBNAME_COLUMN_INDEX
,
.
type
=
TSDB_DATA_TYPE_BINARY
,
.
bytes
=
TSDB_METER_NAME_LEN
};
strcpy
(
s
.
name
,
TSQL_TBNAME_L
);
return
s
;
}
/**
* the MeterMeta data format in memory is as follows:
*
...
...
@@ -123,7 +130,7 @@ bool tsMeterMetaIdentical(SMeterMeta* p1, SMeterMeta* p2) {
return
memcmp
(
p1
,
p2
,
size
)
==
0
;
}
//todo refactor
//
todo refactor
static
FORCE_INLINE
char
*
skipSegments
(
char
*
input
,
char
delimiter
,
int32_t
num
)
{
for
(
int32_t
i
=
0
;
i
<
num
;
++
i
)
{
while
(
*
input
!=
0
&&
*
input
++
!=
delimiter
)
{
...
...
src/client/src/tscSecondaryMerge.c
浏览文件 @
a8f15124
...
...
@@ -1314,8 +1314,10 @@ int32_t tscLocalDoReduce(SSqlObj *pSql) {
tscTrace
(
"%s call the drop local reducer"
,
__FUNCTION__
);
tscDestroyLocalReducer
(
pSql
);
if
(
pRes
)
{
pRes
->
numOfRows
=
0
;
pRes
->
row
=
0
;
}
return
0
;
}
...
...
src/client/src/tscServer.c
浏览文件 @
a8f15124
...
...
@@ -2312,6 +2312,7 @@ int tscBuildCreateTableMsg(SSqlObj *pSql) {
size
=
tscEstimateCreateTableMsgLength
(
pSql
);
if
(
TSDB_CODE_SUCCESS
!=
tscAllocPayload
(
pCmd
,
size
))
{
tscError
(
"%p failed to malloc for create table msg"
,
pSql
);
free
(
tmpData
);
return
-
1
;
}
...
...
@@ -3350,7 +3351,7 @@ int tscProcessShowRsp(SSqlObj *pSql) {
}
int
tscProcessConnectRsp
(
SSqlObj
*
pSql
)
{
char
temp
[
TSDB_METER_ID_LEN
];
char
temp
[
TSDB_METER_ID_LEN
*
2
];
SConnectRsp
*
pConnect
;
STscObj
*
pObj
=
pSql
->
pTscObj
;
...
...
@@ -3358,8 +3359,11 @@ int tscProcessConnectRsp(SSqlObj *pSql) {
pConnect
=
(
SConnectRsp
*
)
pRes
->
pRsp
;
strcpy
(
pObj
->
acctId
,
pConnect
->
acctId
);
// copy acctId from response
sprintf
(
temp
,
"%s%s%s"
,
pObj
->
acctId
,
TS_PATH_DELIMITER
,
pObj
->
db
);
strcpy
(
pObj
->
db
,
temp
);
int32_t
len
=
sprintf
(
temp
,
"%s%s%s"
,
pObj
->
acctId
,
TS_PATH_DELIMITER
,
pObj
->
db
);
assert
(
len
<=
tListLen
(
pObj
->
db
));
strncpy
(
pObj
->
db
,
temp
,
tListLen
(
pObj
->
db
));
#ifdef CLUSTER
SIpList
*
pIpList
;
char
*
rsp
=
pRes
->
pRsp
+
sizeof
(
SConnectRsp
);
...
...
@@ -3634,7 +3638,7 @@ int tscRenewMeterMeta(SSqlObj *pSql, char *meterId) {
*/
if
(
pMeterMetaInfo
->
pMeterMeta
==
NULL
||
!
tscQueryOnMetric
(
pCmd
))
{
if
(
pMeterMetaInfo
->
pMeterMeta
)
{
tscTrace
(
"%p update meter meta, old: numOfTags:%d, numOfCols:%d, uid:%
lld
, addr:%p"
,
pSql
,
tscTrace
(
"%p update meter meta, old: numOfTags:%d, numOfCols:%d, uid:%
"
PRId64
"
, addr:%p"
,
pSql
,
pMeterMetaInfo
->
numOfTags
,
pCmd
->
numOfCols
,
pMeterMetaInfo
->
pMeterMeta
->
uid
,
pMeterMetaInfo
->
pMeterMeta
);
}
tscWaitingForCreateTable
(
&
pSql
->
cmd
);
...
...
@@ -3642,7 +3646,7 @@ int tscRenewMeterMeta(SSqlObj *pSql, char *meterId) {
code
=
tscDoGetMeterMeta
(
pSql
,
meterId
,
0
);
// todo ??
}
else
{
tscTrace
(
"%p metric query not update metric meta, numOfTags:%d, numOfCols:%d, uid:%
lld
, addr:%p"
,
pSql
,
tscTrace
(
"%p metric query not update metric meta, numOfTags:%d, numOfCols:%d, uid:%
"
PRId64
"
, addr:%p"
,
pSql
,
pMeterMetaInfo
->
pMeterMeta
->
numOfTags
,
pCmd
->
numOfCols
,
pMeterMetaInfo
->
pMeterMeta
->
uid
,
pMeterMetaInfo
->
pMeterMeta
);
}
...
...
src/client/src/tscSql.c
浏览文件 @
a8f15124
...
...
@@ -532,7 +532,7 @@ static void **tscJoinResultsetFromBuf(SSqlObj *pSql) {
doSetResultRowData
(
pSql
->
pSubs
[
1
]);
// TSKEY key1 = *(TSKEY *)pRes1->tsrow[0];
// TSKEY key2 = *(TSKEY *)pRes2->tsrow[0];
// printf("first:%
lld, second:%lld
\n", key1, key2);
// printf("first:%
" PRId64 ", second:%" PRId64 "
\n", key1, key2);
success
=
true
;
pRes1
->
row
++
;
pRes2
->
row
++
;
...
...
@@ -903,7 +903,7 @@ int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields)
break
;
case
TSDB_DATA_TYPE_BIGINT
:
len
+=
sprintf
(
str
+
len
,
"%
lld
"
,
*
((
int64_t
*
)
row
[
i
]));
len
+=
sprintf
(
str
+
len
,
"%
"
PRId64
"
"
,
*
((
int64_t
*
)
row
[
i
]));
break
;
case
TSDB_DATA_TYPE_FLOAT
:
...
...
@@ -928,7 +928,7 @@ int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields)
}
break
;
case
TSDB_DATA_TYPE_TIMESTAMP
:
len
+=
sprintf
(
str
+
len
,
"%
lld
"
,
*
((
int64_t
*
)
row
[
i
]));
len
+=
sprintf
(
str
+
len
,
"%
"
PRId64
"
"
,
*
((
int64_t
*
)
row
[
i
]));
break
;
case
TSDB_DATA_TYPE_BOOL
:
...
...
src/client/src/tscStream.c
浏览文件 @
a8f15124
...
...
@@ -85,7 +85,7 @@ static void tscProcessStreamLaunchQuery(SSchedMsg *pMsg) {
// failed to get meter/metric meta, retry in 10sec.
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
int64_t
retryDelayTime
=
tscGetRetryDelayTime
(
pStream
->
slidingTime
,
pStream
->
precision
);
tscError
(
"%p stream:%p,get metermeta failed, retry in %
lld
ms"
,
pStream
->
pSql
,
pStream
,
retryDelayTime
);
tscError
(
"%p stream:%p,get metermeta failed, retry in %
"
PRId64
"
ms"
,
pStream
->
pSql
,
pStream
,
retryDelayTime
);
tscSetRetryTimer
(
pStream
,
pSql
,
retryDelayTime
);
return
;
...
...
@@ -136,7 +136,7 @@ static void tscProcessStreamQueryCallback(void *param, TAOS_RES *tres, int numOf
SSqlStream
*
pStream
=
(
SSqlStream
*
)
param
;
if
(
tres
==
NULL
||
numOfRows
<
0
)
{
int64_t
retryDelay
=
tscGetRetryDelayTime
(
pStream
->
slidingTime
,
pStream
->
precision
);
tscError
(
"%p stream:%p, query data failed, code:%d, retry in %
lld
ms"
,
pStream
->
pSql
,
pStream
,
numOfRows
,
tscError
(
"%p stream:%p, query data failed, code:%d, retry in %
"
PRId64
"
ms"
,
pStream
->
pSql
,
pStream
,
numOfRows
,
retryDelay
);
SMeterMetaInfo
*
pMeterMetaInfo
=
tscGetMeterMetaInfo
(
&
pStream
->
pSql
->
cmd
,
0
);
...
...
@@ -158,7 +158,7 @@ static void tscSetTimestampForRes(SSqlStream *pStream, SSqlObj *pSql) {
if
(
timestamp
!=
actualTimestamp
)
{
// reset the timestamp of each agg point by using start time of each interval
*
((
int64_t
*
)
pRes
->
data
)
=
actualTimestamp
;
tscWarn
(
"%p stream:%p, timestamp of points is:%
lld, reset to %lld
"
,
pSql
,
pStream
,
timestamp
,
actualTimestamp
);
tscWarn
(
"%p stream:%p, timestamp of points is:%
"
PRId64
", reset to %"
PRId64
"
"
,
pSql
,
pStream
,
timestamp
,
actualTimestamp
);
}
}
...
...
@@ -169,7 +169,7 @@ static void tscProcessStreamRetrieveResult(void *param, TAOS_RES *res, int numOf
if
(
pSql
==
NULL
||
numOfRows
<
0
)
{
int64_t
retryDelayTime
=
tscGetRetryDelayTime
(
pStream
->
slidingTime
,
pStream
->
precision
);
tscError
(
"%p stream:%p, retrieve data failed, code:%d, retry in %
lld
ms"
,
pSql
,
pStream
,
numOfRows
,
retryDelayTime
);
tscError
(
"%p stream:%p, retrieve data failed, code:%d, retry in %
"
PRId64
"
ms"
,
pSql
,
pStream
,
numOfRows
,
retryDelayTime
);
tscClearMeterMetaInfo
(
pMeterMetaInfo
,
true
);
tscSetRetryTimer
(
pStream
,
pStream
->
pSql
,
retryDelayTime
);
...
...
@@ -235,7 +235,7 @@ static void tscProcessStreamRetrieveResult(void *param, TAOS_RES *res, int numOf
/* no resuls in the query range, retry */
// todo set retry dynamic time
int32_t
retry
=
tsProjectExecInterval
;
tscError
(
"%p stream:%p, retrieve no data, code:%d, retry in %
lld
ms"
,
pSql
,
pStream
,
numOfRows
,
retry
);
tscError
(
"%p stream:%p, retrieve no data, code:%d, retry in %
"
PRId64
"
ms"
,
pSql
,
pStream
,
numOfRows
,
retry
);
tscClearSqlMetaInfoForce
(
&
(
pStream
->
pSql
->
cmd
));
tscSetRetryTimer
(
pStream
,
pStream
->
pSql
,
retry
);
...
...
@@ -265,7 +265,7 @@ static void tscSetRetryTimer(SSqlStream *pStream, SSqlObj *pSql, int64_t timer)
/*
* current time window will be closed, since it too early to exceed the maxRetentWindow value
*/
tscTrace
(
"%p stream:%p, etime:%
lld is too old, exceeds the max retention time window:%lld
, stop the stream"
,
tscTrace
(
"%p stream:%p, etime:%
"
PRId64
" is too old, exceeds the max retention time window:%"
PRId64
"
, stop the stream"
,
pStream
->
pSql
,
pStream
,
pStream
->
stime
,
pStream
->
etime
);
// TODO : How to terminate stream here
taos_close_stream
(
pStream
);
...
...
@@ -276,10 +276,10 @@ static void tscSetRetryTimer(SSqlStream *pStream, SSqlObj *pSql, int64_t timer)
return
;
}
tscTrace
(
"%p stream:%p, next query start at %
lld, in %lldms. query range %lld-%lld
"
,
pStream
->
pSql
,
pStream
,
tscTrace
(
"%p stream:%p, next query start at %
"
PRId64
", in %"
PRId64
"ms. query range %"
PRId64
"-%"
PRId64
"
"
,
pStream
->
pSql
,
pStream
,
now
+
timer
,
timer
,
pStream
->
stime
,
etime
);
}
else
{
tscTrace
(
"%p stream:%p, next query start at %
lld, in %lldms. query range %lld-%lld
"
,
pStream
->
pSql
,
pStream
,
tscTrace
(
"%p stream:%p, next query start at %
"
PRId64
", in %"
PRId64
"ms. query range %"
PRId64
"-%"
PRId64
"
"
,
pStream
->
pSql
,
pStream
,
pStream
->
stime
,
timer
,
pStream
->
stime
-
pStream
->
interval
,
pStream
->
stime
-
1
);
}
...
...
@@ -299,7 +299,7 @@ static void tscSetNextLaunchTimer(SSqlStream *pStream, SSqlObj *pSql) {
*/
timer
=
pStream
->
slidingTime
;
if
(
pStream
->
stime
>
pStream
->
etime
)
{
tscTrace
(
"%p stream:%p, stime:%
lld is larger than end time: %lld
, stop the stream"
,
pStream
->
pSql
,
pStream
,
tscTrace
(
"%p stream:%p, stime:%
"
PRId64
" is larger than end time: %"
PRId64
"
, stop the stream"
,
pStream
->
pSql
,
pStream
,
pStream
->
stime
,
pStream
->
etime
);
// TODO : How to terminate stream here
taos_close_stream
(
pStream
);
...
...
@@ -353,7 +353,7 @@ static void tscSetSlidingWindowInfo(SSqlObj *pSql, SSqlStream *pStream) {
int64_t
minIntervalTime
=
(
pStream
->
precision
==
TSDB_TIME_PRECISION_MICRO
)
?
tsMinIntervalTime
*
1000L
:
tsMinIntervalTime
;
if
(
pCmd
->
nAggTimeInterval
<
minIntervalTime
)
{
tscWarn
(
"%p stream:%p, original sample interval:%ld too small, reset to:%
lld
"
,
pSql
,
pStream
,
tscWarn
(
"%p stream:%p, original sample interval:%ld too small, reset to:%
"
PRId64
"
"
,
pSql
,
pStream
,
pCmd
->
nAggTimeInterval
,
minIntervalTime
);
pCmd
->
nAggTimeInterval
=
minIntervalTime
;
}
...
...
@@ -368,14 +368,14 @@ static void tscSetSlidingWindowInfo(SSqlObj *pSql, SSqlStream *pStream) {
(
pStream
->
precision
==
TSDB_TIME_PRECISION_MICRO
)
?
tsMinSlidingTime
*
1000L
:
tsMinSlidingTime
;
if
(
pCmd
->
nSlidingTime
<
minSlidingTime
)
{
tscWarn
(
"%p stream:%p, original sliding value:%
lld too small, reset to:%lld
"
,
pSql
,
pStream
,
pCmd
->
nSlidingTime
,
tscWarn
(
"%p stream:%p, original sliding value:%
"
PRId64
" too small, reset to:%"
PRId64
"
"
,
pSql
,
pStream
,
pCmd
->
nSlidingTime
,
minSlidingTime
);
pCmd
->
nSlidingTime
=
minSlidingTime
;
}
if
(
pCmd
->
nSlidingTime
>
pCmd
->
nAggTimeInterval
)
{
tscWarn
(
"%p stream:%p, sliding value:%
lld can not be larger than interval range, reset to:%lld
"
,
pSql
,
pStream
,
tscWarn
(
"%p stream:%p, sliding value:%
"
PRId64
" can not be larger than interval range, reset to:%"
PRId64
"
"
,
pSql
,
pStream
,
pCmd
->
nSlidingTime
,
pCmd
->
nAggTimeInterval
);
pCmd
->
nSlidingTime
=
pCmd
->
nAggTimeInterval
;
...
...
@@ -401,11 +401,11 @@ static int64_t tscGetStreamStartTimestamp(SSqlObj *pSql, SSqlStream *pStream, in
}
else
{
// timewindow based aggregation stream
if
(
stime
==
0
)
{
// no data in meter till now
stime
=
((
int64_t
)
taosGetTimestamp
(
pStream
->
precision
)
/
pStream
->
interval
)
*
pStream
->
interval
;
tscWarn
(
"%p stream:%p, last timestamp:0, reset to:%
lld
"
,
pSql
,
pStream
,
stime
);
tscWarn
(
"%p stream:%p, last timestamp:0, reset to:%
"
PRId64
"
"
,
pSql
,
pStream
,
stime
);
}
else
{
int64_t
newStime
=
(
stime
/
pStream
->
interval
)
*
pStream
->
interval
;
if
(
newStime
!=
stime
)
{
tscWarn
(
"%p stream:%p, last timestamp:%
lld, reset to:%lld
"
,
pSql
,
pStream
,
stime
,
newStime
);
tscWarn
(
"%p stream:%p, last timestamp:%
"
PRId64
", reset to:%"
PRId64
"
"
,
pSql
,
pStream
,
stime
,
newStime
);
stime
=
newStime
;
}
}
...
...
@@ -447,7 +447,10 @@ static void setErrorInfo(STscObj* pObj, int32_t code, char* info) {
SSqlCmd
*
pCmd
=
&
pObj
->
pSql
->
cmd
;
pObj
->
pSql
->
res
.
code
=
code
;
if
(
info
!=
NULL
)
{
strncpy
(
pCmd
->
payload
,
info
,
pCmd
->
payloadLen
);
}
}
TAOS_STREAM
*
taos_open_stream
(
TAOS
*
taos
,
const
char
*
sqlstr
,
void
(
*
fp
)(
void
*
param
,
TAOS_RES
*
,
TAOS_ROW
row
),
...
...
@@ -537,7 +540,7 @@ TAOS_STREAM *taos_open_stream(TAOS *taos, const char *sqlstr, void (*fp)(void *p
int64_t
starttime
=
tscGetLaunchTimestamp
(
pStream
);
taosTmrReset
(
tscProcessStreamTimer
,
starttime
,
pStream
,
tscTmr
,
&
pStream
->
pTimer
);
tscTrace
(
"%p stream:%p is opened, query on:%s, interval:%
lld, sliding:%lld, first launched in:%lld
, sql:%s"
,
pSql
,
tscTrace
(
"%p stream:%p is opened, query on:%s, interval:%
"
PRId64
", sliding:%"
PRId64
", first launched in:%"
PRId64
"
, sql:%s"
,
pSql
,
pStream
,
pMeterMetaInfo
->
name
,
pStream
->
interval
,
pStream
->
slidingTime
,
starttime
,
sqlstr
);
return
pStream
;
...
...
src/client/src/tscSub.c
浏览文件 @
a8f15124
...
...
@@ -56,7 +56,7 @@ TAOS_SUB *taos_subscribe(const char *host, const char *user, const char *pass, c
if
(
pSub
->
taos
==
NULL
)
{
tfree
(
pSub
);
}
else
{
char
qstr
[
128
]
;
char
qstr
[
256
]
=
{
0
}
;
sprintf
(
qstr
,
"use %s"
,
db
);
int
res
=
taos_query
(
pSub
->
taos
,
qstr
);
if
(
res
!=
0
)
{
...
...
@@ -64,7 +64,7 @@ TAOS_SUB *taos_subscribe(const char *host, const char *user, const char *pass, c
taos_close
(
pSub
->
taos
);
tfree
(
pSub
);
}
else
{
s
printf
(
qstr
,
"select * from %s where _c0 > now+1000d"
,
pSub
->
name
);
s
nprintf
(
qstr
,
tListLen
(
qstr
)
,
"select * from %s where _c0 > now+1000d"
,
pSub
->
name
);
if
(
taos_query
(
pSub
->
taos
,
qstr
))
{
tscTrace
(
"failed to select, reason:%s"
,
taos_errstr
(
pSub
->
taos
));
taos_close
(
pSub
->
taos
);
...
...
@@ -106,7 +106,7 @@ TAOS_ROW taos_consume(TAOS_SUB *tsub) {
pSub
->
stime
=
taosGetTimestampMs
();
sprintf
(
qstr
,
"select * from %s where _c0 > %
lld
order by _c0 asc"
,
pSub
->
name
,
pSub
->
lastKey
);
sprintf
(
qstr
,
"select * from %s where _c0 > %
"
PRId64
"
order by _c0 asc"
,
pSub
->
name
,
pSub
->
lastKey
);
if
(
taos_query
(
pSub
->
taos
,
qstr
))
{
tscTrace
(
"failed to select, reason:%s"
,
taos_errstr
(
pSub
->
taos
));
return
NULL
;
...
...
src/client/src/tscSystem.c
浏览文件 @
a8f15124
...
...
@@ -198,7 +198,9 @@ static int taos_options_imp(TSDB_OPTION option, const char *pStr) {
switch
(
option
)
{
case
TSDB_OPTION_CONFIGDIR
:
cfg
=
tsGetConfigOption
(
"configDir"
);
if
(
cfg
&&
cfg
->
cfgStatus
<=
TSDB_CFG_CSTATUS_OPTION
)
{
assert
(
cfg
!=
NULL
);
if
(
cfg
->
cfgStatus
<=
TSDB_CFG_CSTATUS_OPTION
)
{
strncpy
(
configDir
,
pStr
,
TSDB_FILENAME_LEN
);
cfg
->
cfgStatus
=
TSDB_CFG_CSTATUS_OPTION
;
tscPrint
(
"set config file directory:%s"
,
pStr
);
...
...
@@ -210,7 +212,9 @@ static int taos_options_imp(TSDB_OPTION option, const char *pStr) {
case
TSDB_OPTION_SHELL_ACTIVITY_TIMER
:
cfg
=
tsGetConfigOption
(
"shellActivityTimer"
);
if
(
cfg
&&
cfg
->
cfgStatus
<=
TSDB_CFG_CSTATUS_OPTION
)
{
assert
(
cfg
!=
NULL
);
if
(
cfg
->
cfgStatus
<=
TSDB_CFG_CSTATUS_OPTION
)
{
tsShellActivityTimer
=
atoi
(
pStr
);
if
(
tsShellActivityTimer
<
1
)
tsShellActivityTimer
=
1
;
if
(
tsShellActivityTimer
>
3600
)
tsShellActivityTimer
=
3600
;
...
...
@@ -224,13 +228,15 @@ static int taos_options_imp(TSDB_OPTION option, const char *pStr) {
case
TSDB_OPTION_LOCALE
:
{
// set locale
cfg
=
tsGetConfigOption
(
"locale"
);
assert
(
cfg
!=
NULL
);
size_t
len
=
strlen
(
pStr
);
if
(
len
==
0
||
len
>
TSDB_LOCALE_LEN
)
{
tscPrint
(
"Invalid locale:%s, use default"
,
pStr
);
return
-
1
;
}
if
(
cfg
&&
cfg
&&
cfg
->
cfgStatus
<=
TSDB_CFG_CSTATUS_OPTION
)
{
if
(
cfg
->
cfgStatus
<=
TSDB_CFG_CSTATUS_OPTION
)
{
char
sep
=
'.'
;
if
(
strlen
(
tsLocale
)
==
0
)
{
// locale does not set yet
...
...
@@ -285,13 +291,15 @@ static int taos_options_imp(TSDB_OPTION option, const char *pStr) {
case
TSDB_OPTION_CHARSET
:
{
/* set charset will override the value of charset, assigned during system locale changed */
cfg
=
tsGetConfigOption
(
"charset"
);
assert
(
cfg
!=
NULL
);
size_t
len
=
strlen
(
pStr
);
if
(
len
==
0
||
len
>
TSDB_LOCALE_LEN
)
{
tscPrint
(
"failed to set charset:%s"
,
pStr
);
return
-
1
;
}
if
(
cfg
&&
cfg
->
cfgStatus
<=
TSDB_CFG_CSTATUS_OPTION
)
{
if
(
cfg
->
cfgStatus
<=
TSDB_CFG_CSTATUS_OPTION
)
{
if
(
taosValidateEncodec
(
pStr
))
{
if
(
strlen
(
tsCharset
)
==
0
)
{
tscPrint
(
"charset is set:%s"
,
pStr
);
...
...
@@ -314,7 +322,9 @@ static int taos_options_imp(TSDB_OPTION option, const char *pStr) {
case
TSDB_OPTION_TIMEZONE
:
cfg
=
tsGetConfigOption
(
"timezone"
);
if
(
cfg
&&
cfg
->
cfgStatus
<=
TSDB_CFG_CSTATUS_OPTION
)
{
assert
(
cfg
!=
NULL
);
if
(
cfg
->
cfgStatus
<=
TSDB_CFG_CSTATUS_OPTION
)
{
strcpy
(
tsTimezone
,
pStr
);
tsSetTimeZone
();
cfg
->
cfgStatus
=
TSDB_CFG_CSTATUS_OPTION
;
...
...
@@ -327,7 +337,9 @@ static int taos_options_imp(TSDB_OPTION option, const char *pStr) {
case
TSDB_OPTION_SOCKET_TYPE
:
cfg
=
tsGetConfigOption
(
"sockettype"
);
if
(
cfg
&&
cfg
->
cfgStatus
<=
TSDB_CFG_CSTATUS_OPTION
)
{
assert
(
cfg
!=
NULL
);
if
(
cfg
->
cfgStatus
<=
TSDB_CFG_CSTATUS_OPTION
)
{
if
(
strcasecmp
(
pStr
,
TAOS_SOCKET_TYPE_NAME_UDP
)
!=
0
&&
strcasecmp
(
pStr
,
TAOS_SOCKET_TYPE_NAME_TCP
)
!=
0
)
{
tscError
(
"only 'tcp' or 'udp' allowed for configuring the socket type"
);
return
-
1
;
...
...
@@ -340,6 +352,7 @@ static int taos_options_imp(TSDB_OPTION option, const char *pStr) {
break
;
default:
// TODO return the correct error code to client in the format for taos_errstr()
tscError
(
"Invalid option %d"
,
option
);
return
-
1
;
}
...
...
src/client/src/tscUtil.c
浏览文件 @
a8f15124
...
...
@@ -451,15 +451,6 @@ void tscFreeSqlObj(SSqlObj* pSql) {
free
(
pSql
);
}
STableDataBlocks
*
tscCreateDataBlock
(
int32_t
size
)
{
STableDataBlocks
*
dataBuf
=
(
STableDataBlocks
*
)
calloc
(
1
,
sizeof
(
STableDataBlocks
));
dataBuf
->
nAllocSize
=
(
uint32_t
)
size
;
dataBuf
->
pData
=
calloc
(
1
,
dataBuf
->
nAllocSize
);
dataBuf
->
ordered
=
true
;
dataBuf
->
prevTS
=
INT64_MIN
;
return
dataBuf
;
}
void
tscDestroyDataBlock
(
STableDataBlocks
*
pDataBlock
)
{
if
(
pDataBlock
==
NULL
)
{
return
;
...
...
@@ -467,6 +458,9 @@ void tscDestroyDataBlock(STableDataBlocks* pDataBlock) {
tfree
(
pDataBlock
->
pData
);
tfree
(
pDataBlock
->
params
);
// free the refcount for metermeta
taosRemoveDataFromCache
(
tscCacheHandle
,
(
void
**
)
&
(
pDataBlock
->
pMeterMeta
),
false
);
tfree
(
pDataBlock
);
}
...
...
@@ -513,11 +507,11 @@ SDataBlockList* tscCreateBlockArrayList() {
void
tscAppendDataBlock
(
SDataBlockList
*
pList
,
STableDataBlocks
*
pBlocks
)
{
if
(
pList
->
nSize
>=
pList
->
nAlloc
)
{
pList
->
nAlloc
=
pList
->
nAlloc
<<
1
;
pList
->
pData
=
realloc
(
pList
->
pData
,
sizeof
(
void
*
)
*
(
size_t
)
pList
->
nAlloc
);
pList
->
nAlloc
=
(
pList
->
nAlloc
)
<<
1U
;
pList
->
pData
=
realloc
(
pList
->
pData
,
POINTER_BYTES
*
(
size_t
)
pList
->
nAlloc
);
// reset allocated memory
memset
(
pList
->
pData
+
pList
->
nSize
,
0
,
sizeof
(
void
*
)
*
(
pList
->
nAlloc
-
pList
->
nSize
));
memset
(
pList
->
pData
+
pList
->
nSize
,
0
,
POINTER_BYTES
*
(
pList
->
nAlloc
-
pList
->
nSize
));
}
pList
->
pData
[
pList
->
nSize
++
]
=
pBlocks
;
...
...
@@ -539,11 +533,22 @@ void* tscDestroyBlockArrayList(SDataBlockList* pList) {
}
int32_t
tscCopyDataBlockToPayload
(
SSqlObj
*
pSql
,
STableDataBlocks
*
pDataBlock
)
{
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
assert
(
pDataBlock
->
pMeterMeta
!=
NULL
);
pCmd
->
count
=
pDataBlock
->
numOfMeters
;
SMeterMetaInfo
*
pMeterMetaInfo
=
tscGetMeterMetaInfo
(
pCmd
,
0
);
SMeterMetaInfo
*
pMeterMetaInfo
=
tscGetMeterMetaInfo
(
pCmd
,
0
);
//set the correct metermeta object, the metermeta has been locked in pDataBlocks, so it must be in the cache
if
(
pMeterMetaInfo
->
pMeterMeta
!=
pDataBlock
->
pMeterMeta
)
{
strcpy
(
pMeterMetaInfo
->
name
,
pDataBlock
->
meterId
);
taosRemoveDataFromCache
(
tscCacheHandle
,
(
void
**
)
&
(
pMeterMetaInfo
->
pMeterMeta
),
false
);
pMeterMetaInfo
->
pMeterMeta
=
pDataBlock
->
pMeterMeta
;
pDataBlock
->
pMeterMeta
=
NULL
;
// delegate the ownership of metermeta to pMeterMetaInfo
}
else
{
assert
(
strncmp
(
pMeterMetaInfo
->
name
,
pDataBlock
->
meterId
,
tListLen
(
pDataBlock
->
meterId
))
==
0
);
}
/*
* the submit message consists of : [RPC header|message body|digest]
...
...
@@ -551,7 +556,10 @@ int32_t tscCopyDataBlockToPayload(SSqlObj* pSql, STableDataBlocks* pDataBlock) {
* additional space.
*/
int
ret
=
tscAllocPayload
(
pCmd
,
pDataBlock
->
nAllocSize
+
sizeof
(
STaosDigest
));
if
(
TSDB_CODE_SUCCESS
!=
ret
)
return
ret
;
if
(
TSDB_CODE_SUCCESS
!=
ret
)
{
return
ret
;
}
memcpy
(
pCmd
->
payload
,
pDataBlock
->
pData
,
pDataBlock
->
nAllocSize
);
/*
...
...
@@ -561,7 +569,7 @@ int32_t tscCopyDataBlockToPayload(SSqlObj* pSql, STableDataBlocks* pDataBlock) {
pCmd
->
payloadLen
=
pDataBlock
->
nAllocSize
-
tsRpcHeadSize
;
assert
(
pCmd
->
allocSize
>=
pCmd
->
payloadLen
+
tsRpcHeadSize
+
sizeof
(
STaosDigest
));
return
tscGetMeterMeta
(
pSql
,
pMeterMetaInfo
->
name
,
0
)
;
return
TSDB_CODE_SUCCESS
;
}
void
tscFreeUnusedDataBlocks
(
SDataBlockList
*
pList
)
{
...
...
@@ -573,19 +581,38 @@ void tscFreeUnusedDataBlocks(SDataBlockList* pList) {
}
}
STableDataBlocks
*
tscCreateDataBlockEx
(
size_t
size
,
int32_t
rowSize
,
int32_t
startOffset
,
char
*
name
)
{
STableDataBlocks
*
dataBuf
=
tscCreateDataBlock
(
size
);
/**
* create the in-memory buffer for each table to keep the submitted data block
* @param initialSize
* @param rowSize
* @param startOffset
* @param name
* @param pMeterMeta the ownership of pMeterMeta should be transfer to STableDataBlocks
* @return
*/
STableDataBlocks
*
tscCreateDataBlock
(
size_t
initialSize
,
int32_t
rowSize
,
int32_t
startOffset
,
const
char
*
name
)
{
STableDataBlocks
*
dataBuf
=
(
STableDataBlocks
*
)
calloc
(
1
,
sizeof
(
STableDataBlocks
));
dataBuf
->
nAllocSize
=
(
uint32_t
)
initialSize
;
dataBuf
->
pData
=
calloc
(
1
,
dataBuf
->
nAllocSize
);
dataBuf
->
ordered
=
true
;
dataBuf
->
prevTS
=
INT64_MIN
;
dataBuf
->
rowSize
=
rowSize
;
dataBuf
->
size
=
startOffset
;
dataBuf
->
tsSource
=
-
1
;
strncpy
(
dataBuf
->
meterId
,
name
,
TSDB_METER_ID_LEN
);
// sure that the metermeta must be in the local client cache
dataBuf
->
pMeterMeta
=
taosGetDataFromCache
(
tscCacheHandle
,
dataBuf
->
meterId
);
assert
(
dataBuf
->
pMeterMeta
!=
NULL
&&
initialSize
>
0
);
return
dataBuf
;
}
STableDataBlocks
*
tscGetDataBlockFromList
(
void
*
pHashList
,
SDataBlockList
*
pDataBlockList
,
int64_t
id
,
int32_t
size
,
int32_t
startOffset
,
int32_t
rowSize
,
char
*
tableId
)
{
int32_t
startOffset
,
int32_t
rowSize
,
c
onst
c
har
*
tableId
)
{
STableDataBlocks
*
dataBuf
=
NULL
;
STableDataBlocks
**
t1
=
(
STableDataBlocks
**
)
taosGetIntHashData
(
pHashList
,
id
);
...
...
@@ -594,7 +621,7 @@ STableDataBlocks* tscGetDataBlockFromList(void* pHashList, SDataBlockList* pData
}
if
(
dataBuf
==
NULL
)
{
dataBuf
=
tscCreateDataBlock
Ex
((
size_t
)
size
,
rowSize
,
startOffset
,
tableId
);
dataBuf
=
tscCreateDataBlock
((
size_t
)
size
,
rowSize
,
startOffset
,
tableId
);
dataBuf
=
*
(
STableDataBlocks
**
)
taosAddIntHash
(
pHashList
,
id
,
(
char
*
)
&
dataBuf
);
tscAppendDataBlock
(
pDataBlockList
,
dataBuf
);
}
...
...
@@ -1138,7 +1165,8 @@ void tscColumnFilterInfoCopy(SColumnFilterInfo* dst, const SColumnFilterInfo* sr
*
dst
=
*
src
;
if
(
dst
->
filterOnBinary
)
{
size_t
len
=
(
size_t
)
dst
->
len
+
1
;
dst
->
pz
=
calloc
(
1
,
len
);
char
*
pTmp
=
calloc
(
1
,
len
);
dst
->
pz
=
(
int64_t
)
pTmp
;
memcpy
((
char
*
)
dst
->
pz
,
(
char
*
)
src
->
pz
,
(
size_t
)
len
);
}
}
...
...
@@ -1202,7 +1230,8 @@ void tscColumnBaseInfoDestroy(SColumnBaseInfo* pColumnBaseInfo) {
assert
(
pColBase
->
filterInfo
[
j
].
filterOnBinary
==
0
||
pColBase
->
filterInfo
[
j
].
filterOnBinary
==
1
);
if
(
pColBase
->
filterInfo
[
j
].
filterOnBinary
)
{
tfree
(
pColBase
->
filterInfo
[
j
].
pz
);
free
((
char
*
)
pColBase
->
filterInfo
[
j
].
pz
);
pColBase
->
filterInfo
[
j
].
pz
=
0
;
}
}
}
...
...
src/inc/taosmsg.h
浏览文件 @
a8f15124
...
...
@@ -279,7 +279,7 @@ typedef struct {
}
SShellSubmitMsg
;
typedef
struct
SSchema
{
char
type
;
uint8_t
type
;
char
name
[
TSDB_COL_NAME_LEN
];
short
colId
;
short
bytes
;
...
...
@@ -622,7 +622,7 @@ typedef struct {
char
repStrategy
;
char
loadLatest
;
// load into mem or not
char
precision
;
// time resolua
tion
uint8_t
precision
;
// time resolu
tion
char
reserved
[
16
];
}
SVnodeCfg
,
SCreateDbMsg
,
SDbCfg
,
SAlterDbMsg
;
...
...
src/inc/tschemautil.h
浏览文件 @
a8f15124
...
...
@@ -47,6 +47,7 @@ struct SSchema *tsGetSchema(SMeterMeta *pMeta);
struct
SSchema
*
tsGetTagSchema
(
SMeterMeta
*
pMeta
);
struct
SSchema
*
tsGetColumnSchema
(
SMeterMeta
*
pMeta
,
int32_t
startCol
);
struct
SSchema
tsGetTbnameColumnSchema
();
char
*
tsGetTagsValue
(
SMeterMeta
*
pMeta
);
...
...
src/inc/tsqlfunction.h
浏览文件 @
a8f15124
...
...
@@ -227,8 +227,6 @@ typedef struct SPatternCompareInfo {
int32_t
getResultDataInfo
(
int32_t
dataType
,
int32_t
dataBytes
,
int32_t
functionId
,
int32_t
param
,
int16_t
*
type
,
int16_t
*
len
,
int16_t
*
interResBytes
,
int16_t
extLength
,
bool
isSuperTable
);
SResultInfo
*
getResultSupportInfo
(
SQLFunctionCtx
*
pCtx
);
int
patternMatch
(
const
char
*
zPattern
,
const
char
*
zString
,
size_t
size
,
const
SPatternCompareInfo
*
pInfo
);
int
WCSPatternMatch
(
const
wchar_t
*
zPattern
,
const
wchar_t
*
zString
,
size_t
size
,
const
SPatternCompareInfo
*
pInfo
);
...
...
src/inc/ttypes.h
浏览文件 @
a8f15124
...
...
@@ -50,7 +50,7 @@ bool isNull(const char *val, int32_t type);
void
setNull
(
char
*
val
,
int32_t
type
,
int32_t
bytes
);
void
setNullN
(
char
*
val
,
int32_t
type
,
int32_t
bytes
,
int32_t
numOfElems
);
void
assignVal
(
char
*
val
,
char
*
src
,
int32_t
len
,
int32_t
type
);
void
assignVal
(
char
*
val
,
c
onst
c
har
*
src
,
int32_t
len
,
int32_t
type
);
void
tsDataSwap
(
void
*
pLeft
,
void
*
pRight
,
int32_t
type
,
int32_t
size
);
// variant, each number/string/field_id has a corresponding struct during parsing sql
...
...
src/inc/tutil.h
浏览文件 @
a8f15124
...
...
@@ -175,7 +175,7 @@ bool taosMbsToUcs4(char *mbs, int32_t mbs_len, char *ucs4, int32_t ucs4_max_len)
bool
taosUcs4ToMbs
(
void
*
ucs4
,
int32_t
ucs4_max_len
,
char
*
mbs
);
bool
taosValidateEncodec
(
char
*
encodec
);
bool
taosValidateEncodec
(
c
onst
c
har
*
encodec
);
bool
taosGetVersionNumber
(
char
*
versionStr
,
int
*
versionNubmer
);
...
...
src/kit/shell/src/shellCommand.c
浏览文件 @
a8f15124
...
...
@@ -19,6 +19,8 @@
#include "shell.h"
#include "shellCommand.h"
extern
int
wcwidth
(
wchar_t
c
);
extern
int
wcswidth
(
const
wchar_t
*
s
,
size_t
n
);
typedef
struct
{
char
widthInString
;
char
widthOnScreen
;
...
...
src/kit/shell/src/shellEngine.c
浏览文件 @
a8f15124
...
...
@@ -16,6 +16,7 @@
#define _XOPEN_SOURCE
#define _DEFAULT_SOURCE
#include <inttypes.h>
#include "os.h"
#include "shell.h"
#include "shellCommand.h"
...
...
@@ -446,7 +447,7 @@ int shellDumpResult(TAOS *con, char *fname, int *error_no, bool printMode) {
printf
(
"%*d|"
,
l
[
i
],
*
((
int
*
)
row
[
i
]));
break
;
case
TSDB_DATA_TYPE_BIGINT
:
printf
(
"%*
lld
|"
,
l
[
i
],
*
((
int64_t
*
)
row
[
i
]));
printf
(
"%*
"
PRId64
"
|"
,
l
[
i
],
*
((
int64_t
*
)
row
[
i
]));
break
;
case
TSDB_DATA_TYPE_FLOAT
:
{
#ifdef _TD_ARM_32_
...
...
@@ -481,7 +482,7 @@ int shellDumpResult(TAOS *con, char *fname, int *error_no, bool printMode) {
break
;
case
TSDB_DATA_TYPE_TIMESTAMP
:
if
(
args
.
is_raw_time
)
{
printf
(
" %
lld
|"
,
*
(
int64_t
*
)
row
[
i
]);
printf
(
" %
"
PRId64
"
|"
,
*
(
int64_t
*
)
row
[
i
]);
}
else
{
if
(
taos_result_precision
(
result
)
==
TSDB_TIME_PRECISION_MICRO
)
{
tt
=
(
time_t
)((
*
(
int64_t
*
)
row
[
i
])
/
1000000
);
...
...
@@ -531,7 +532,7 @@ int shellDumpResult(TAOS *con, char *fname, int *error_no, bool printMode) {
printf
(
"%d
\n
"
,
*
((
int
*
)
row
[
i
]));
break
;
case
TSDB_DATA_TYPE_BIGINT
:
printf
(
"%
lld
\n
"
,
*
((
int64_t
*
)
row
[
i
]));
printf
(
"%
"
PRId64
"
\n
"
,
*
((
int64_t
*
)
row
[
i
]));
break
;
case
TSDB_DATA_TYPE_FLOAT
:
{
#ifdef _TD_ARM_32_
...
...
@@ -564,7 +565,7 @@ int shellDumpResult(TAOS *con, char *fname, int *error_no, bool printMode) {
break
;
case
TSDB_DATA_TYPE_TIMESTAMP
:
if
(
args
.
is_raw_time
)
{
printf
(
"%
lld
\n
"
,
*
(
int64_t
*
)
row
[
i
]);
printf
(
"%
"
PRId64
"
\n
"
,
*
(
int64_t
*
)
row
[
i
]);
}
else
{
if
(
taos_result_precision
(
result
)
==
TSDB_TIME_PRECISION_MICRO
)
{
tt
=
(
time_t
)((
*
(
int64_t
*
)
row
[
i
])
/
1000000
);
...
...
@@ -619,7 +620,7 @@ int shellDumpResult(TAOS *con, char *fname, int *error_no, bool printMode) {
fprintf
(
fp
,
"%d"
,
*
((
int
*
)
row
[
i
]));
break
;
case
TSDB_DATA_TYPE_BIGINT
:
fprintf
(
fp
,
"%
lld"
,
*
((
int64_t
*
)
row
[
i
]));
fprintf
(
fp
,
"%
"
PRId64
,
*
((
int64_t
*
)
row
[
i
]));
break
;
case
TSDB_DATA_TYPE_FLOAT
:
{
#ifdef _TD_ARM_32_
...
...
@@ -651,7 +652,7 @@ int shellDumpResult(TAOS *con, char *fname, int *error_no, bool printMode) {
break
;
case
TSDB_DATA_TYPE_TIMESTAMP
:
if
(
args
.
is_raw_time
)
{
fprintf
(
fp
,
"%
lld"
,
*
(
int64_t
*
)
row
[
i
]);
fprintf
(
fp
,
"%
"
PRId64
,
*
(
int64_t
*
)
row
[
i
]);
}
else
{
if
(
taos_result_precision
(
result
)
==
TSDB_TIME_PRECISION_MICRO
)
{
tt
=
(
time_t
)((
*
(
int64_t
*
)
row
[
i
])
/
1000000
);
...
...
@@ -780,6 +781,7 @@ void source_file(TAOS *con, char *fptr) {
if
(
wordexp
(
fptr
,
&
full_path
,
0
)
!=
0
)
{
fprintf
(
stderr
,
"ERROR: illegal file name
\n
"
);
free
(
cmd
);
return
;
}
...
...
@@ -788,6 +790,7 @@ void source_file(TAOS *con, char *fptr) {
if
(
access
(
fname
,
R_OK
)
==
-
1
)
{
fprintf
(
stderr
,
"ERROR: file %s is not readable
\n
"
,
fptr
);
wordfree
(
&
full_path
);
free
(
cmd
);
return
;
}
...
...
@@ -795,6 +798,7 @@ void source_file(TAOS *con, char *fptr) {
if
(
f
==
NULL
)
{
fprintf
(
stderr
,
"ERROR: failed to open file %s
\n
"
,
fname
);
wordfree
(
&
full_path
);
free
(
cmd
);
return
;
}
...
...
src/kit/shell/src/shellLinux.c
浏览文件 @
a8f15124
...
...
@@ -26,6 +26,7 @@
int
indicator
=
1
;
struct
termios
oldtio
;
extern
int
wcwidth
(
wchar_t
c
);
void
insertChar
(
Command
*
cmd
,
char
*
c
,
int
size
);
const
char
*
argp_program_version
=
version
;
const
char
*
argp_program_bug_address
=
"<support@taosdata.com>"
;
...
...
@@ -277,7 +278,10 @@ void *shellLoopQuery(void *arg) {
pthread_cleanup_push
(
cleanup_handler
,
NULL
);
char
*
command
=
malloc
(
MAX_COMMAND_SIZE
);
if
(
command
==
NULL
){
tscError
(
"failed to malloc command"
);
return
NULL
;
}
while
(
1
)
{
// Read command from shell.
...
...
@@ -286,11 +290,9 @@ void *shellLoopQuery(void *arg) {
shellReadCommand
(
con
,
command
);
reset_terminal_mode
();
if
(
command
!=
NULL
)
{
// Run the command
shellRunCommand
(
con
,
command
);
}
}
pthread_cleanup_pop
(
1
);
...
...
src/kit/taosdemo/taosdemo.c
浏览文件 @
a8f15124
...
...
@@ -265,30 +265,35 @@ double getCurrentTime();
void
callBack
(
void
*
param
,
TAOS_RES
*
res
,
int
code
);
int
main
(
int
argc
,
char
*
argv
[])
{
struct
arguments
arguments
=
{
NULL
,
0
,
"root"
,
"taosdata"
,
"test"
,
"t"
,
false
,
false
,
"./output.txt"
,
0
,
"int"
,
struct
arguments
arguments
=
{
NULL
,
// host
0
,
// port
"root"
,
// user
"taosdata"
,
// password
"test"
,
// database
"t"
,
// tb_prefix
false
,
// use_metric
false
,
// insert_only
"./output.txt"
,
// output_file
0
,
// mode
{
"int"
,
// datatype
""
,
""
,
""
,
""
,
""
,
""
,
""
,
8
,
1
,
1
,
1
,
1
,
50000
};
""
},
8
,
// len_of_binary
1
,
// num_of_CPR
1
,
// num_of_connections
1
,
// num_of_RPR
1
,
// num_of_tables
50000
,
// num_of_DPT
0
,
// abort
NULL
// arg_list
};
/* Parse our arguments; every option seen by parse_opt will be
reflected in arguments. */
...
...
src/modules/http/src/gcJson.c
浏览文件 @
a8f15124
...
...
@@ -119,7 +119,7 @@ bool gcBuildQueryJson(HttpContext *pContext, HttpSqlCmd *cmd, TAOS_RES *result,
cmd
->
numOfRows
+=
numOfRows
;
}
for
(
int
i
=
0
;
i
<
numOfRows
;
++
i
)
{
for
(
int
k
=
0
;
k
<
numOfRows
;
++
k
)
{
TAOS_ROW
row
=
taos_fetch_row
(
result
);
// for group by
...
...
src/modules/http/src/restJson.c
浏览文件 @
a8f15124
...
...
@@ -94,7 +94,7 @@ bool restBuildSqlJson(HttpContext *pContext, HttpSqlCmd *cmd, TAOS_RES *result,
int
num_fields
=
taos_num_fields
(
result
);
TAOS_FIELD
*
fields
=
taos_fetch_fields
(
result
);
for
(
int
i
=
0
;
i
<
numOfRows
;
++
i
)
{
for
(
int
k
=
0
;
k
<
numOfRows
;
++
k
)
{
TAOS_ROW
row
=
taos_fetch_row
(
result
);
// data row array begin
...
...
src/modules/http/src/tgHandle.c
浏览文件 @
a8f15124
...
...
@@ -262,6 +262,8 @@ int tgReadSchema(char *fileName) {
size_t
result
=
fread
(
content
,
1
,
contentSize
,
fp
);
if
(
result
!=
contentSize
)
{
httpError
(
"failed to read telegraf schema file:%s"
,
fileName
);
fclose
(
fp
);
free
(
content
);
return
-
1
;
}
...
...
src/modules/monitor/src/monitorSystem.c
浏览文件 @
a8f15124
...
...
@@ -14,6 +14,7 @@
*/
#include "monitor.h"
#include <inttypes.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
...
...
@@ -376,7 +377,7 @@ void monitorSaveSystemInfo() {
int64_t
ts
=
taosGetTimestampUs
();
char
*
sql
=
monitor
->
sql
;
int
pos
=
snprintf
(
sql
,
SQL_LENGTH
,
"insert into %s.dn_%s values(%
ld"
,
tsMonitorDbName
,
monitor
->
privateIpStr
,
ts
);
int
pos
=
snprintf
(
sql
,
SQL_LENGTH
,
"insert into %s.dn_%s values(%
"
PRId64
,
tsMonitorDbName
,
monitor
->
privateIpStr
,
ts
);
pos
+=
monitorBuildCpuSql
(
sql
+
pos
);
pos
+=
monitorBuildMemorySql
(
sql
+
pos
);
...
...
@@ -402,16 +403,16 @@ void monitorSaveAcctLog(char *acctId, int64_t currentPointsPerSecond, int64_t ma
char
sql
[
1024
]
=
{
0
};
sprintf
(
sql
,
"insert into %s.acct_%s using %s.acct tags('%s') values(now"
", %ld, %ld "
", %ld, %ld"
", %ld, %ld"
", %ld, %ld"
", %ld, %ld"
", %ld, %ld"
", %ld, %ld"
", %ld, %ld"
", %ld, %ld"
", %ld, %ld"
", %"
PRId64
,
"%"
PRId64
", %"
PRId64
,
"%"
PRId64
", %"
PRId64
,
"%"
PRId64
", %"
PRId64
,
"%"
PRId64
", %"
PRId64
,
"%"
PRId64
", %"
PRId64
,
"%"
PRId64
", %"
PRId64
,
"%"
PRId64
", %"
PRId64
,
"%"
PRId64
", %"
PRId64
,
"%"
PRId64
", %"
PRId64
,
"%"
PRId64
", %d)"
,
tsMonitorDbName
,
acctId
,
tsMonitorDbName
,
acctId
,
currentPointsPerSecond
,
maxPointsPerSecond
,
totalTimeSeries
,
maxTimeSeries
,
totalStorage
,
maxStorage
,
totalQueryTime
,
maxQueryTime
,
totalInbound
,
maxInbound
,
...
...
@@ -431,7 +432,7 @@ void monitorSaveLog(int level, const char *const format, ...) {
return
;
}
int
len
=
snprintf
(
sql
,
(
size_t
)
max_length
,
"import into %s.log values(%
ld
, %d,'"
,
tsMonitorDbName
,
int
len
=
snprintf
(
sql
,
(
size_t
)
max_length
,
"import into %s.log values(%
\"
PRId64
\"
, %d,'"
,
tsMonitorDbName
,
taosGetTimestampUs
(),
level
);
va_start
(
argpointer
,
format
);
...
...
src/os/linux/inc/os.h
浏览文件 @
a8f15124
...
...
@@ -23,6 +23,7 @@ extern "C" {
#include <stdio.h>
#include <stdlib.h>
#include <error.h>
#include <argp.h>
#include <arpa/inet.h>
#include <assert.h>
...
...
@@ -71,6 +72,7 @@ extern "C" {
#include <wchar.h>
#include <wordexp.h>
#include <wctype.h>
#include <inttypes.h>
#define taosCloseSocket(x) \
...
...
src/os/linux/src/tsystem.c
浏览文件 @
a8f15124
...
...
@@ -12,7 +12,7 @@
* 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 <inttypes.h>
#include <ifaddrs.h>
#include <locale.h>
#include <netdb.h>
...
...
@@ -99,7 +99,7 @@ bool taosGetProcMemory(float *memoryUsedMB) {
int64_t
memKB
=
0
;
char
tmp
[
10
];
sscanf
(
line
,
"%s %
ld"
,
tmp
,
&
memKB
);
sscanf
(
line
,
"%s %
"
PRId64
,
tmp
,
&
memKB
);
*
memoryUsedMB
=
(
float
)((
double
)
memKB
/
1024
);
tfree
(
line
);
...
...
@@ -124,7 +124,7 @@ bool taosGetSysCpuInfo(SysCpuInfo *cpuInfo) {
}
char
cpu
[
10
]
=
{
0
};
sscanf
(
line
,
"%s %
ld %ld %ld %ld"
,
cpu
,
&
cpuInfo
->
user
,
&
cpuInfo
->
nice
,
&
cpuInfo
->
system
,
&
cpuInfo
->
idle
);
sscanf
(
line
,
"%s %
"
PRIu64
" %"
PRIu64
" %"
PRIu64
" %"
PRIu64
,
cpu
,
&
cpuInfo
->
user
,
&
cpuInfo
->
nice
,
&
cpuInfo
->
system
,
&
cpuInfo
->
idle
);
tfree
(
line
);
fclose
(
fp
);
...
...
@@ -150,7 +150,7 @@ bool taosGetProcCpuInfo(ProcCpuInfo *cpuInfo) {
for
(
int
i
=
0
,
blank
=
0
;
line
[
i
]
!=
0
;
++
i
)
{
if
(
line
[
i
]
==
' '
)
blank
++
;
if
(
blank
==
PROCESS_ITEM
)
{
sscanf
(
line
+
i
+
1
,
"%
ld %ld %ld %ld"
,
&
cpuInfo
->
utime
,
&
cpuInfo
->
stime
,
&
cpuInfo
->
cutime
,
&
cpuInfo
->
cstime
);
sscanf
(
line
+
i
+
1
,
"%
"
PRIu64
" %"
PRIu64
" %"
PRIu64
" %"
PRIu64
,
&
cpuInfo
->
utime
,
&
cpuInfo
->
stime
,
&
cpuInfo
->
cutime
,
&
cpuInfo
->
cstime
);
break
;
}
}
...
...
@@ -420,7 +420,7 @@ bool taosGetCardInfo(int64_t *bytes) {
}
}
if
(
line
!=
NULL
)
{
sscanf
(
line
,
"%s %
ld %ld %ld %ld %ld %ld %ld %ld %ld %ld"
,
nouse0
,
&
rbytes
,
&
rpackts
,
&
nouse1
,
&
nouse2
,
&
nouse3
,
sscanf
(
line
,
"%s %
"
PRId64
" %"
PRId64
" %"
PRId64
" %"
PRId64
" %"
PRId64
" %"
PRId64
" %"
PRId64
" %"
PRId64
" %"
PRId64
" %"
PRId64
,
nouse0
,
&
rbytes
,
&
rpackts
,
&
nouse1
,
&
nouse2
,
&
nouse3
,
&
nouse4
,
&
nouse5
,
&
nouse6
,
&
tbytes
,
&
tpackets
);
*
bytes
=
rbytes
+
tbytes
;
tfree
(
line
);
...
...
@@ -488,10 +488,10 @@ bool taosReadProcIO(int64_t *readbyte, int64_t *writebyte) {
break
;
}
if
(
strstr
(
line
,
"rchar:"
)
!=
NULL
)
{
sscanf
(
line
,
"%s %
ld"
,
tmp
,
readbyte
);
sscanf
(
line
,
"%s %
"
PRId64
,
tmp
,
readbyte
);
readIndex
++
;
}
else
if
(
strstr
(
line
,
"wchar:"
)
!=
NULL
)
{
sscanf
(
line
,
"%s %
ld"
,
tmp
,
writebyte
);
sscanf
(
line
,
"%s %
"
PRId64
,
tmp
,
writebyte
);
readIndex
++
;
}
else
{
}
...
...
@@ -564,9 +564,9 @@ void taosGetSystemInfo() {
}
void
tsPrintOsInfo
()
{
pPrint
(
" os pageSize: %
ld
(KB)"
,
tsPageSize
);
pPrint
(
" os openMax: %
ld"
,
tsOpenMax
);
pPrint
(
" os streamMax: %
ld"
,
tsStreamMax
);
pPrint
(
" os pageSize: %
"
PRId64
"
(KB)"
,
tsPageSize
);
pPrint
(
" os openMax: %
"
PRId64
,
tsOpenMax
);
pPrint
(
" os streamMax: %
"
PRId64
,
tsStreamMax
);
pPrint
(
" os numOfCores: %d"
,
tsNumOfCores
);
pPrint
(
" os totalDisk: %f(GB)"
,
tsTotalDataDirGB
);
pPrint
(
" os totalMemory: %d(MB)"
,
tsTotalMemoryMB
);
...
...
src/system/detail/inc/mgmtUtil.h
浏览文件 @
a8f15124
...
...
@@ -37,6 +37,6 @@ int32_t mgmtRetrieveMetersFromMetric(SMetricMetaMsg* pInfo, int32_t tableIndex,
int32_t
mgmtDoJoin
(
SMetricMetaMsg
*
pMetricMetaMsg
,
tQueryResultset
*
pRes
);
void
mgmtReorganizeMetersInMetricMeta
(
SMetricMetaMsg
*
pInfo
,
int32_t
index
,
tQueryResultset
*
pRes
);
bool
tSkipListNodeFilterCallback
(
struct
tSkipListNode
*
pNode
,
void
*
param
);
bool
tSkipListNodeFilterCallback
(
const
void
*
pNode
,
void
*
param
);
#endif //TBASE_MGMTUTIL_H
src/system/detail/src/mgmtSupertableQuery.c
浏览文件 @
a8f15124
...
...
@@ -203,7 +203,7 @@ static bool mgmtTablenameFilterCallback(tSkipListNode* pNode, void* param) {
static
void
mgmtRetrieveFromLikeOptr
(
tQueryResultset
*
pRes
,
const
char
*
str
,
STabObj
*
pMetric
)
{
SPatternCompareInfo
info
=
PATTERN_COMPARE_INFO_INITIALIZER
;
SMeterNameFilterSupporter
supporter
=
{
info
,
(
char
*
)
str
};
SMeterNameFilterSupporter
supporter
=
{
info
,
(
char
*
)
str
};
pRes
->
num
=
tSkipListIterateList
(
pMetric
->
pSkipList
,
(
tSkipListNode
***
)
&
pRes
->
pRes
,
mgmtTablenameFilterCallback
,
&
supporter
);
...
...
@@ -230,13 +230,7 @@ static void mgmtFilterByTableNameCond(tQueryResultset* pRes, char* condStr, int3
free
(
str
);
}
/*
*-Wunused-function"
*/
#if 0
static bool mgmtJoinFilterCallback(tSkipListNode* pNode, void* param) {
UNUSED_FUNC
static
bool
mgmtJoinFilterCallback
(
tSkipListNode
*
pNode
,
void
*
param
)
{
SJoinSupporter
*
pSupporter
=
(
SJoinSupporter
*
)
param
;
SSchema
s
=
{
0
};
...
...
@@ -265,7 +259,6 @@ static bool mgmtJoinFilterCallback(tSkipListNode* pNode, void* param) {
return
false
;
}
#endif
static
void
orderResult
(
SMetricMetaMsg
*
pMetricMetaMsg
,
tQueryResultset
*
pRes
,
int16_t
colIndex
,
int32_t
tableIndex
)
{
SMetricMetaElemMsg
*
pElem
=
(
SMetricMetaElemMsg
*
)((
char
*
)
pMetricMetaMsg
+
pMetricMetaMsg
->
metaElem
[
tableIndex
]);
...
...
@@ -646,7 +639,8 @@ static void getTagColumnInfo(SSyntaxTreeFilterSupporter* pSupporter, SSchema* pS
}
}
void
filterPrepare
(
tSQLBinaryExpr
*
pExpr
,
void
*
param
)
{
void
filterPrepare
(
void
*
expr
,
void
*
param
)
{
tSQLBinaryExpr
*
pExpr
=
(
tSQLBinaryExpr
*
)
expr
;
if
(
pExpr
->
info
!=
NULL
)
{
return
;
}
...
...
@@ -800,9 +794,10 @@ static char* getTagValueFromMeter(STabObj* pMeter, int32_t offset, void* param)
}
}
bool
tSkipListNodeFilterCallback
(
tSkipListNode
*
pNode
,
void
*
param
)
{
bool
tSkipListNodeFilterCallback
(
const
void
*
pNode
,
void
*
param
)
{
tQueryInfo
*
pInfo
=
(
tQueryInfo
*
)
param
;
STabObj
*
pMeter
=
(
STabObj
*
)
pNode
->
pData
;
STabObj
*
pMeter
=
(
STabObj
*
)
(((
tSkipListNode
*
)
pNode
)
->
pData
)
;
char
name
[
TSDB_METER_NAME_LEN
+
1
]
=
{
0
};
char
*
val
=
getTagValueFromMeter
(
pMeter
,
pInfo
->
offset
,
name
);
...
...
src/system/detail/src/mgmtVgroup.c
浏览文件 @
a8f15124
...
...
@@ -289,6 +289,7 @@ int mgmtRetrieveVgroups(SShowObj *pShow, char *data, int rows, SConnObj *pConn)
SDbObj
*
pDb
=
NULL
;
if
(
pConn
->
pDb
!=
NULL
)
pDb
=
mgmtGetDb
(
pConn
->
pDb
->
name
);
assert
(
pDb
!=
NULL
);
pVgroup
=
pDb
->
pHead
;
while
(
pVgroup
!=
NULL
)
{
...
...
src/system/detail/src/vnodeQueryImpl.c
浏览文件 @
a8f15124
...
...
@@ -252,15 +252,31 @@ static void vnodeSetOpenedFileNames(SQueryFilesInfo* pVnodeFilesInfo) {
SHeaderFileInfo
*
pCurrentFileInfo
=
&
pVnodeFilesInfo
->
pFileInfo
[
pVnodeFilesInfo
->
current
];
// set the full file path for current opened files
snprintf
(
pVnodeFilesInfo
->
headerFilePath
,
PATH_MAX
,
"%sv%df%d.head"
,
pVnodeFilesInfo
->
dbFilePathPrefix
,
pVnodeFilesInfo
->
vnodeId
,
pCurrentFileInfo
->
fileID
);
/*
* set the full file path for current opened files
* the maximum allowed path string length is PATH_MAX in Linux, 100 bytes is used to
* suppress the compiler warnings
*/
char
str
[
PATH_MAX
+
100
]
=
{
0
};
int32_t
PATH_WITH_EXTRA
=
PATH_MAX
+
100
;
int32_t
vnodeId
=
pVnodeFilesInfo
->
vnodeId
;
int32_t
fileId
=
pCurrentFileInfo
->
fileID
;
int32_t
len
=
snprintf
(
str
,
PATH_WITH_EXTRA
,
"%sv%df%d.head"
,
pVnodeFilesInfo
->
dbFilePathPrefix
,
vnodeId
,
fileId
);
assert
(
len
<=
PATH_MAX
);
strncpy
(
pVnodeFilesInfo
->
headerFilePath
,
str
,
PATH_MAX
);
len
=
snprintf
(
str
,
PATH_WITH_EXTRA
,
"%sv%df%d.data"
,
pVnodeFilesInfo
->
dbFilePathPrefix
,
vnodeId
,
fileId
);
assert
(
len
<=
PATH_MAX
);
strncpy
(
pVnodeFilesInfo
->
dataFilePath
,
str
,
PATH_MAX
);
snprintf
(
pVnodeFilesInfo
->
dataFilePath
,
PATH_MAX
,
"%sv%df%d.data"
,
pVnodeFilesInfo
->
dbFilePathPrefix
,
pVnodeFilesInfo
->
vnodeId
,
pCurrentFileInfo
->
fileID
);
len
=
snprintf
(
str
,
PATH_WITH_EXTRA
,
"%sv%df%d.last"
,
pVnodeFilesInfo
->
dbFilePathPrefix
,
vnodeId
,
fileId
);
assert
(
len
<=
PATH_MAX
);
snprintf
(
pVnodeFilesInfo
->
lastFilePath
,
PATH_MAX
,
"%sv%df%d.last"
,
pVnodeFilesInfo
->
dbFilePathPrefix
,
pVnodeFilesInfo
->
vnodeId
,
pCurrentFileInfo
->
fileID
);
strncpy
(
pVnodeFilesInfo
->
lastFilePath
,
str
,
PATH_MAX
);
}
/**
...
...
@@ -4555,8 +4571,7 @@ static void doMerge(SQueryRuntimeEnv *pRuntimeEnv, int64_t timestamp, tFilePage
}
static
void
printBinaryData
(
int32_t
functionId
,
char
*
data
,
int32_t
srcDataType
)
{
if
(
functionId
==
TSDB_FUNC_FIRST_DST
||
functionId
==
TSDB_FUNC_LAST_DST
||
functionId
==
TSDB_FUNC_FIRST_DST
||
functionId
==
TSDB_FUNC_LAST_DST
)
{
if
(
functionId
==
TSDB_FUNC_FIRST_DST
||
functionId
==
TSDB_FUNC_LAST_DST
)
{
switch
(
srcDataType
)
{
case
TSDB_DATA_TYPE_BINARY
:
printf
(
"%ld,%s
\t
"
,
*
(
TSKEY
*
)
data
,
(
data
+
TSDB_KEYSIZE
+
1
));
...
...
src/system/detail/src/vnodeQueryProcess.c
浏览文件 @
a8f15124
...
...
@@ -1213,8 +1213,8 @@ void vnodeSingleMeterQuery(SSchedMsg *pMsg) {
dTrace
(
"QInfo:%p reset signature"
,
pQInfo
);
TSDB_QINFO_RESET_SIG
(
pQInfo
);
sem_post
(
&
pQInfo
->
dataReady
);
TSDB_QINFO_RESET_SIG
(
pQInfo
);
return
;
}
...
...
@@ -1235,8 +1235,8 @@ void vnodeSingleMeterQuery(SSchedMsg *pMsg) {
dTrace
(
"QInfo:%p reset signature"
,
pQInfo
);
TSDB_QINFO_RESET_SIG
(
pQInfo
);
sem_post
(
&
pQInfo
->
dataReady
);
TSDB_QINFO_RESET_SIG
(
pQInfo
);
return
;
}
}
...
...
@@ -1247,8 +1247,8 @@ void vnodeSingleMeterQuery(SSchedMsg *pMsg) {
pMeterObj
->
vnode
,
pMeterObj
->
sid
,
pMeterObj
->
meterId
,
pQInfo
->
pointsRead
);
vnodePrintQueryStatistics
(
pQInfo
->
pMeterQuerySupporter
);
TSDB_QINFO_RESET_SIG
(
pQInfo
);
sem_post
(
&
pQInfo
->
dataReady
);
TSDB_QINFO_RESET_SIG
(
pQInfo
);
return
;
}
...
...
@@ -1284,8 +1284,8 @@ void vnodeSingleMeterQuery(SSchedMsg *pMsg) {
pQInfo
,
pMeterObj
->
vnode
,
pMeterObj
->
sid
,
pMeterObj
->
meterId
,
pQuery
->
pointsRead
);
}
TSDB_QINFO_RESET_SIG
(
pQInfo
);
sem_post
(
&
pQInfo
->
dataReady
);
TSDB_QINFO_RESET_SIG
(
pQInfo
);
}
void
vnodeMultiMeterQuery
(
SSchedMsg
*
pMsg
)
{
...
...
@@ -1335,6 +1335,6 @@ void vnodeMultiMeterQuery(SSchedMsg *pMsg) {
vnodePrintQueryStatistics
(
pSupporter
);
}
TSDB_QINFO_RESET_SIG
(
pQInfo
);
sem_post
(
&
pQInfo
->
dataReady
);
TSDB_QINFO_RESET_SIG
(
pQInfo
);
}
src/system/detail/src/vnodeShell.c
浏览文件 @
a8f15124
...
...
@@ -472,7 +472,7 @@ void vnodeExecuteRetrieveReq(SSchedMsg *pSched) {
if
(
numOfRows
==
0
&&
(
pRetrieve
->
qhandle
==
(
uint64_t
)
pObj
->
qhandle
)
&&
(
code
!=
TSDB_CODE_ACTION_IN_PROGRESS
))
{
dTrace
(
"QInfo:%p %s free qhandle code:%d"
,
pObj
->
qhandle
,
__FUNCTION__
,
code
);
vnodeFreeQInfo
InQueue
(
pObj
->
qhandl
e
);
vnodeFreeQInfo
(
pObj
->
qhandle
,
tru
e
);
pObj
->
qhandle
=
NULL
;
}
...
...
@@ -480,8 +480,6 @@ void vnodeExecuteRetrieveReq(SSchedMsg *pSched) {
_exit:
free
(
pSched
->
msg
);
return
;
}
int
vnodeProcessRetrieveRequest
(
char
*
pMsg
,
int
msgLen
,
SShellObj
*
pObj
)
{
...
...
src/util/src/textbuffer.c
浏览文件 @
a8f15124
...
...
@@ -12,7 +12,6 @@
* 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 <inttypes.h>
#include "os.h"
#include "taos.h"
#include "taosmsg.h"
...
...
src/util/src/thistogram.c
浏览文件 @
a8f15124
...
...
@@ -12,7 +12,6 @@
* 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 <inttypes.h>
#include "os.h"
#include "taosmsg.h"
...
...
src/util/src/tskiplist.c
浏览文件 @
a8f15124
...
...
@@ -12,11 +12,7 @@
* 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 <inttypes.h>
#include <float.h>
#include <math.h>
#include <stdbool.h>
#include <stdlib.h>
#include "os.h"
#include "tlog.h"
#include "tsdb.h"
...
...
src/util/src/tstrbuild.c
浏览文件 @
a8f15124
...
...
@@ -12,7 +12,6 @@
* 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 <inttypes.h>
#include "os.h"
#include "tstrbuild.h"
...
...
src/util/src/ttimer.c
浏览文件 @
a8f15124
...
...
@@ -14,7 +14,6 @@
*/
#include "os.h"
#include <inttypes.h>
#include "tlog.h"
#include "tsched.h"
#include "ttime.h"
...
...
src/util/src/ttokenizer.c
浏览文件 @
a8f15124
...
...
@@ -510,7 +510,7 @@ uint32_t tSQLGetToken(char* z, uint32_t* tokenType) {
if
((
z
[
i
]
==
'a'
||
z
[
i
]
==
's'
||
z
[
i
]
==
'm'
||
z
[
i
]
==
'h'
||
z
[
i
]
==
'd'
||
z
[
i
]
==
'n'
||
z
[
i
]
==
'y'
||
z
[
i
]
==
'w'
||
z
[
i
]
==
'A'
||
z
[
i
]
==
'S'
||
z
[
i
]
==
'M'
||
z
[
i
]
==
'H'
||
z
[
i
]
==
'D'
||
z
[
i
]
==
'N'
||
z
[
i
]
==
'Y'
||
z
[
i
]
==
'W'
)
&&
(
isIdChar
[(
int
)(
z
[
i
+
1
])
]
==
0
))
{
(
isIdChar
[(
uint8_t
)
z
[
i
+
1
]
]
==
0
))
{
*
tokenType
=
TK_VARIABLE
;
i
+=
1
;
return
i
;
...
...
@@ -551,7 +551,7 @@ uint32_t tSQLGetToken(char* z, uint32_t* tokenType) {
case
't'
:
case
'F'
:
case
'f'
:
{
for
(
i
=
1
;
((
z
[
i
]
&
0x80
)
==
0
)
&&
isIdChar
[(
int
)(
z
[
i
])
];
i
++
)
{
for
(
i
=
1
;
((
z
[
i
]
&
0x80
)
==
0
)
&&
isIdChar
[(
uint8_t
)
z
[
i
]
];
i
++
)
{
}
if
((
i
==
4
&&
strncasecmp
(
z
,
"true"
,
4
)
==
0
)
||
(
i
==
5
&&
strncasecmp
(
z
,
"false"
,
5
)
==
0
))
{
...
...
@@ -560,10 +560,10 @@ uint32_t tSQLGetToken(char* z, uint32_t* tokenType) {
}
}
default:
{
if
(((
*
z
&
0x80
)
!=
0
)
||
!
isIdChar
[(
int
)(
*
z
)
])
{
if
(((
*
z
&
0x80
)
!=
0
)
||
!
isIdChar
[(
uint8_t
)
*
z
])
{
break
;
}
for
(
i
=
1
;
((
z
[
i
]
&
0x80
)
==
0
)
&&
isIdChar
[(
int
)(
z
[
i
])
];
i
++
)
{
for
(
i
=
1
;
((
z
[
i
]
&
0x80
)
==
0
)
&&
isIdChar
[(
uint8_t
)
z
[
i
]
];
i
++
)
{
}
*
tokenType
=
tSQLKeywordCode
(
z
,
i
);
return
i
;
...
...
src/util/src/ttypes.c
浏览文件 @
a8f15124
...
...
@@ -12,7 +12,6 @@
* 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 <inttypes.h>
#include "os.h"
#include "taos.h"
#include "tsdb.h"
...
...
@@ -140,7 +139,7 @@ void tVariantCreateFromBinary(tVariant *pVar, char *pz, uint32_t len, uint32_t t
}
case
TSDB_DATA_TYPE_NCHAR
:
{
// here we get the nchar length from raw binary bits length
pVar
->
nLen
=
len
/
TSDB_NCHAR_SIZE
;
pVar
->
wpz
=
malloc
(
(
pVar
->
nLen
+
1
)
*
TSDB_NCHAR_SIZE
);
pVar
->
wpz
=
calloc
(
1
,
(
pVar
->
nLen
+
1
)
*
TSDB_NCHAR_SIZE
);
wcsncpy
(
pVar
->
wpz
,
(
wchar_t
*
)
pz
,
pVar
->
nLen
);
pVar
->
wpz
[
pVar
->
nLen
]
=
0
;
...
...
@@ -971,7 +970,7 @@ void setNullN(char *val, int32_t type, int32_t bytes, int32_t numOfElems) {
}
}
void
assignVal
(
char
*
val
,
char
*
src
,
int32_t
len
,
int32_t
type
)
{
void
assignVal
(
char
*
val
,
c
onst
c
har
*
src
,
int32_t
len
,
int32_t
type
)
{
switch
(
type
)
{
case
TSDB_DATA_TYPE_INT
:
{
*
((
int32_t
*
)
val
)
=
GET_INT32_VAL
(
src
);
...
...
@@ -999,6 +998,14 @@ void assignVal(char *val, char *src, int32_t len, int32_t type) {
*
((
int8_t
*
)
val
)
=
GET_INT8_VAL
(
src
);
break
;
};
case
TSDB_DATA_TYPE_BINARY
:
{
strncpy
(
val
,
src
,
len
);
break
;
};
case
TSDB_DATA_TYPE_NCHAR
:
{
wcsncpy
((
wchar_t
*
)
val
,
(
wchar_t
*
)
src
,
len
/
TSDB_NCHAR_SIZE
);
break
;
};
default:
{
memcpy
(
val
,
src
,
len
);
break
;
...
...
src/util/src/tutil.c
浏览文件 @
a8f15124
...
...
@@ -106,6 +106,7 @@ char **strsplit(char *z, const char *delim, int32_t *num) {
if
((
*
num
)
>=
size
)
{
size
=
(
size
<<
1
);
split
=
realloc
(
split
,
POINTER_BYTES
*
size
);
assert
(
NULL
!=
split
);
}
}
...
...
@@ -443,7 +444,7 @@ bool taosMbsToUcs4(char *mbs, int32_t mbs_len, char *ucs4, int32_t ucs4_max_len)
#endif
}
bool
taosValidateEncodec
(
char
*
encodec
)
{
bool
taosValidateEncodec
(
c
onst
c
har
*
encodec
)
{
#ifdef USE_LIBICONV
iconv_t
cd
=
iconv_open
(
encodec
,
DEFAULT_UNICODE_ENCODEC
);
if
(
cd
==
(
iconv_t
)(
-
1
))
{
...
...
src/util/src/version.c
浏览文件 @
a8f15124
char
version
[
64
]
=
"1.6.4.2"
;
char
compatible_version
[
64
]
=
"1.6.1.0"
;
char
gitinfo
[
128
]
=
"b9a62d60dc1d4a41452a9bc94e3a0924485c3a75"
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录