Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
69afe77e
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
69afe77e
编写于
11月 03, 2022
作者:
dengyihao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add req_id interface
上级
53052a29
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
257 addition
and
106 deletion
+257
-106
include/client/taos.h
include/client/taos.h
+21
-14
source/client/inc/clientInt.h
source/client/inc/clientInt.h
+8
-4
source/client/inc/clientStmt.h
source/client/inc/clientStmt.h
+9
-2
source/client/src/clientEnv.c
source/client/src/clientEnv.c
+13
-13
source/client/src/clientImpl.c
source/client/src/clientImpl.c
+51
-4
source/client/src/clientMain.c
source/client/src/clientMain.c
+27
-4
source/client/src/clientRawBlockWrite.c
source/client/src/clientRawBlockWrite.c
+12
-12
source/client/src/clientSml.c
source/client/src/clientSml.c
+107
-47
source/client/src/clientStmt.c
source/client/src/clientStmt.c
+9
-6
未找到文件。
include/client/taos.h
浏览文件 @
69afe77e
...
...
@@ -130,17 +130,16 @@ typedef struct TAOS_VGROUP_HASH_INFO {
int32_t
vgId
;
uint32_t
hashBegin
;
uint32_t
hashEnd
;
}
TAOS_VGROUP_HASH_INFO
;
}
TAOS_VGROUP_HASH_INFO
;
typedef
struct
TAOS_DB_ROUTE_INFO
{
int32_t
routeVersion
;
int16_t
hashPrefix
;
int16_t
hashSuffix
;
int8_t
hashMethod
;
int32_t
vgNum
;
int32_t
routeVersion
;
int16_t
hashPrefix
;
int16_t
hashSuffix
;
int8_t
hashMethod
;
int32_t
vgNum
;
TAOS_VGROUP_HASH_INFO
*
vgHash
;
}
TAOS_DB_ROUTE_INFO
;
}
TAOS_DB_ROUTE_INFO
;
DLL_EXPORT
void
taos_cleanup
(
void
);
DLL_EXPORT
int
taos_options
(
TSDB_OPTION
option
,
const
void
*
arg
,
...);
...
...
@@ -153,6 +152,7 @@ DLL_EXPORT void taos_close(TAOS *taos);
const
char
*
taos_data_type
(
int
type
);
DLL_EXPORT
TAOS_STMT
*
taos_stmt_init
(
TAOS
*
taos
);
DLL_EXPORT
TAOS_STMT
*
taos_stmt_init_with_reqid
(
TAOS
*
taos
,
int64_t
reqid
);
DLL_EXPORT
int
taos_stmt_prepare
(
TAOS_STMT
*
stmt
,
const
char
*
sql
,
unsigned
long
length
);
DLL_EXPORT
int
taos_stmt_set_tbname_tags
(
TAOS_STMT
*
stmt
,
const
char
*
name
,
TAOS_MULTI_BIND
*
tags
);
DLL_EXPORT
int
taos_stmt_set_tbname
(
TAOS_STMT
*
stmt
,
const
char
*
name
);
...
...
@@ -176,6 +176,7 @@ DLL_EXPORT int taos_stmt_affected_rows(TAOS_STMT *stmt);
DLL_EXPORT
int
taos_stmt_affected_rows_once
(
TAOS_STMT
*
stmt
);
DLL_EXPORT
TAOS_RES
*
taos_query
(
TAOS
*
taos
,
const
char
*
sql
);
DLL_EXPORT
TAOS_RES
*
taos_query_with_reqid
(
TAOS
*
taos
,
const
char
*
sql
,
int64_t
reqId
);
DLL_EXPORT
TAOS_ROW
taos_fetch_row
(
TAOS_RES
*
res
);
DLL_EXPORT
int
taos_result_precision
(
TAOS_RES
*
res
);
// get the time precision of result
...
...
@@ -207,17 +208,23 @@ DLL_EXPORT const char *taos_get_client_info();
DLL_EXPORT
const
char
*
taos_errstr
(
TAOS_RES
*
res
);
DLL_EXPORT
int
taos_errno
(
TAOS_RES
*
res
);
DLL_EXPORT
void
taos_query_a
(
TAOS
*
taos
,
const
char
*
sql
,
__taos_async_fn_t
fp
,
void
*
param
);
DLL_EXPORT
void
taos_fetch_rows_a
(
TAOS_RES
*
res
,
__taos_async_fn_t
fp
,
void
*
param
);
DLL_EXPORT
void
taos_fetch_raw_block_a
(
TAOS_RES
*
res
,
__taos_async_fn_t
fp
,
void
*
param
);
DLL_EXPORT
void
taos_query_a
(
TAOS
*
taos
,
const
char
*
sql
,
__taos_async_fn_t
fp
,
void
*
param
);
DLL_EXPORT
void
taos_query_a_with_reqid
(
TAOS
*
taos
,
const
char
*
sql
,
__taos_async_fn_t
fp
,
void
*
param
,
int64_t
reqid
);
DLL_EXPORT
void
taos_fetch_rows_a
(
TAOS_RES
*
res
,
__taos_async_fn_t
fp
,
void
*
param
);
DLL_EXPORT
void
taos_fetch_raw_block_a
(
TAOS_RES
*
res
,
__taos_async_fn_t
fp
,
void
*
param
);
DLL_EXPORT
const
void
*
taos_get_raw_block
(
TAOS_RES
*
res
);
DLL_EXPORT
int
taos_get_db_route_info
(
TAOS
*
taos
,
const
char
*
db
,
TAOS_DB_ROUTE_INFO
*
dbInfo
);
DLL_EXPORT
int
taos_get_table_vgId
(
TAOS
*
taos
,
const
char
*
db
,
const
char
*
table
,
int
*
vgId
);
DLL_EXPORT
int
taos_get_db_route_info
(
TAOS
*
taos
,
const
char
*
db
,
TAOS_DB_ROUTE_INFO
*
dbInfo
);
DLL_EXPORT
int
taos_get_table_vgId
(
TAOS
*
taos
,
const
char
*
db
,
const
char
*
table
,
int
*
vgId
);
DLL_EXPORT
int
taos_load_table_info
(
TAOS
*
taos
,
const
char
*
tableNameList
);
DLL_EXPORT
TAOS_RES
*
taos_schemaless_insert
(
TAOS
*
taos
,
char
*
lines
[],
int
numLines
,
int
protocol
,
int
precision
);
DLL_EXPORT
TAOS_RES
*
taos_schemaless_insert_raw
(
TAOS
*
taos
,
char
*
lines
,
int
len
,
int32_t
*
totalRows
,
int
protocol
,
int
precision
);
DLL_EXPORT
TAOS_RES
*
taos_schemaless_insert_with_reqid
(
TAOS
*
taos
,
char
*
lines
[],
int
numLines
,
int
protocol
,
int
precision
,
int64_t
reqid
);
DLL_EXPORT
TAOS_RES
*
taos_schemaless_insert_raw
(
TAOS
*
taos
,
char
*
lines
,
int
len
,
int32_t
*
totalRows
,
int
protocol
,
int
precision
);
DLL_EXPORT
TAOS_RES
*
taos_schemaless_insert_raw_with_reqid
(
TAOS
*
taos
,
char
*
lines
,
int
len
,
int32_t
*
totalRows
,
int
protocol
,
int
precision
,
int64_t
reqid
);
/* --------------------------TMQ INTERFACE------------------------------- */
...
...
source/client/inc/clientInt.h
浏览文件 @
69afe77e
...
...
@@ -271,7 +271,11 @@ int32_t transferTableNameList(const char* tbList, int32_t acctId, char* dbName,
void
syncCatalogFn
(
SMetaData
*
pResult
,
void
*
param
,
int32_t
code
);
TAOS_RES
*
taosQueryImpl
(
TAOS
*
taos
,
const
char
*
sql
,
bool
validateOnly
);
void
taosAsyncQueryImpl
(
uint64_t
connId
,
const
char
*
sql
,
__taos_async_fn_t
fp
,
void
*
param
,
bool
validateOnly
);
TAOS_RES
*
taosQueryImplWithReqid
(
TAOS
*
taos
,
const
char
*
sql
,
bool
validateOnly
,
int64_t
reqid
);
void
taosAsyncQueryImpl
(
uint64_t
connId
,
const
char
*
sql
,
__taos_async_fn_t
fp
,
void
*
param
,
bool
validateOnly
);
void
taosAsyncQueryImplWithReqid
(
uint64_t
connId
,
const
char
*
sql
,
__taos_async_fn_t
fp
,
void
*
param
,
bool
validateOnly
,
int64_t
reqid
);
int32_t
getVersion1BlockMetaSize
(
const
char
*
p
,
int32_t
numOfCols
);
...
...
@@ -318,11 +322,11 @@ void* createTscObj(const char* user, const char* auth, const char* db, int32_
void
destroyTscObj
(
void
*
pObj
);
STscObj
*
acquireTscObj
(
int64_t
rid
);
int32_t
releaseTscObj
(
int64_t
rid
);
void
destroyAppInst
(
SAppInstInfo
*
pAppInfo
);
void
destroyAppInst
(
SAppInstInfo
*
pAppInfo
);
uint64_t
generateRequestId
();
void
*
createRequest
(
uint64_t
connId
,
int32_t
type
);
void
*
createRequest
(
uint64_t
connId
,
int32_t
type
,
int64_t
reqid
);
void
destroyRequest
(
SRequestObj
*
pRequest
);
SRequestObj
*
acquireRequest
(
int64_t
rid
);
int32_t
releaseRequest
(
int64_t
rid
);
...
...
@@ -353,7 +357,7 @@ int32_t parseSql(SRequestObj* pRequest, bool topicQuery, SQuery** pQuery, SStmtC
int32_t
getPlan
(
SRequestObj
*
pRequest
,
SQuery
*
pQuery
,
SQueryPlan
**
pPlan
,
SArray
*
pNodeList
);
int32_t
buildRequest
(
uint64_t
connId
,
const
char
*
sql
,
int
sqlLen
,
void
*
param
,
bool
validateSql
,
SRequestObj
**
pRequest
);
SRequestObj
**
pRequest
,
int64_t
reqid
);
void
taos_close_internal
(
void
*
taos
);
...
...
source/client/inc/clientStmt.h
浏览文件 @
69afe77e
...
...
@@ -101,11 +101,18 @@ typedef struct STscStmt {
SStmtSQLInfo
sql
;
SStmtExecInfo
exec
;
SStmtBindInfo
bInfo
;
int64_t
reqid
;
}
STscStmt
;
extern
char
*
gStmtStatusStr
[];
#define STMT_LOG_SEQ(n) do { (pStmt)->seqId++; (pStmt)->seqIds[n]++; STMT_DLOG("the %dth:%d %s", (pStmt)->seqIds[n], (pStmt)->seqId, gStmtStatusStr[n]); } while (0)
#define STMT_LOG_SEQ(n) \
do { \
(pStmt)->seqId++; \
(pStmt)->seqIds[n]++; \
STMT_DLOG("the %dth:%d %s", (pStmt)->seqIds[n], (pStmt)->seqId, gStmtStatusStr[n]); \
} while (0)
#define STMT_STATUS_NE(S) (pStmt->sql.status != STMT_##S)
#define STMT_STATUS_EQ(S) (pStmt->sql.status == STMT_##S)
...
...
@@ -141,7 +148,7 @@ extern char *gStmtStatusStr[];
#define STMT_ELOG_E(param) qError("stmt:%p " param, pStmt)
#define STMT_DLOG_E(param) qDebug("stmt:%p " param, pStmt)
TAOS_STMT
*
stmtInit
(
STscObj
*
taos
);
TAOS_STMT
*
stmtInit
(
STscObj
*
taos
,
int64_t
reqid
);
int
stmtClose
(
TAOS_STMT
*
stmt
);
int
stmtExec
(
TAOS_STMT
*
stmt
);
const
char
*
stmtErrstr
(
TAOS_STMT
*
stmt
);
...
...
source/client/src/clientEnv.c
浏览文件 @
69afe77e
...
...
@@ -77,19 +77,19 @@ static void deregisterRequest(SRequestObj *pRequest) {
pRequest
->
self
,
pTscObj
->
id
,
pRequest
->
requestId
,
duration
/
1000
.
0
,
num
,
currentInst
);
if
(
QUERY_NODE_VNODE_MODIF_STMT
==
pRequest
->
stmtType
)
{
// tscPerf("insert duration %" PRId64 "us: syntax:%" PRId64 "us, ctg:%" PRId64 "us, semantic:%" PRId64
// "us, exec:%" PRId64 "us",
// duration, pRequest->metric.syntaxEnd - pRequest->metric.syntaxStart,
// pRequest->metric.ctgEnd - pRequest->metric.ctgStart, pRequest->metric.semanticEnd - pRequest->metric.ctgEnd,
//
pRequest->metric.execEnd - pRequest->metric.semanticEnd);
// tscPerf("insert duration %" PRId64 "us: syntax:%" PRId64 "us, ctg:%" PRId64 "us, semantic:%" PRId64
// "us, exec:%" PRId64 "us",
// duration, pRequest->metric.syntaxEnd - pRequest->metric.syntaxStart,
// pRequest->metric.ctgEnd - pRequest->metric.ctgStart, pRequest->metric.semanticEnd -
// pRequest->metric.ctgEnd,
pRequest->metric.execEnd - pRequest->metric.semanticEnd);
atomic_add_fetch_64
((
int64_t
*
)
&
pActivity
->
insertElapsedTime
,
duration
);
}
else
if
(
QUERY_NODE_SELECT_STMT
==
pRequest
->
stmtType
)
{
// tscPerf("select duration %" PRId64 "us: syntax:%" PRId64 "us, ctg:%" PRId64 "us, semantic:%" PRId64
// "us, planner:%" PRId64 "us, exec:%" PRId64 "us, reqId:0x%" PRIx64,
// duration, pRequest->metric.syntaxEnd - pRequest->metric.syntaxStart,
// pRequest->metric.ctgEnd - pRequest->metric.ctgStart, pRequest->metric.semanticEnd - pRequest->metric.ctgEnd,
//
pRequest->metric.planEnd - pRequest->metric.semanticEnd,
// pRequest->metric.resultReady - pRequest->metric.planEnd, pRequest->requestId);
// tscPerf("select duration %" PRId64 "us: syntax:%" PRId64 "us, ctg:%" PRId64 "us, semantic:%" PRId64
// "us, planner:%" PRId64 "us, exec:%" PRId64 "us, reqId:0x%" PRIx64,
// duration, pRequest->metric.syntaxEnd - pRequest->metric.syntaxStart,
// pRequest->metric.ctgEnd - pRequest->metric.ctgStart, pRequest->metric.semanticEnd -
// pRequest->metric.ctgEnd,
pRequest->metric.planEnd - pRequest->metric.semanticEnd,
// pRequest->metric.resultReady - pRequest->metric.planEnd, pRequest->requestId);
atomic_add_fetch_64
((
int64_t
*
)
&
pActivity
->
queryElapsedTime
,
duration
);
}
...
...
@@ -271,7 +271,7 @@ STscObj *acquireTscObj(int64_t rid) { return (STscObj *)taosAcquireRef(clientCon
int32_t
releaseTscObj
(
int64_t
rid
)
{
return
taosReleaseRef
(
clientConnRefPool
,
rid
);
}
void
*
createRequest
(
uint64_t
connId
,
int32_t
type
)
{
void
*
createRequest
(
uint64_t
connId
,
int32_t
type
,
int64_t
reqid
)
{
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
taosMemoryCalloc
(
1
,
sizeof
(
SRequestObj
));
if
(
NULL
==
pRequest
)
{
terrno
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
...
...
@@ -286,7 +286,7 @@ void *createRequest(uint64_t connId, int32_t type) {
}
pRequest
->
resType
=
RES_TYPE__QUERY
;
pRequest
->
requestId
=
generateRequestId
()
;
pRequest
->
requestId
=
reqid
<=
0
?
generateRequestId
()
:
reqid
;
pRequest
->
metric
.
start
=
taosGetTimestampUs
();
pRequest
->
body
.
resInfo
.
convertUcs4
=
true
;
// convert ucs4 by default
...
...
source/client/src/clientImpl.c
浏览文件 @
69afe77e
...
...
@@ -154,8 +154,8 @@ STscObj* taos_connect_internal(const char* ip, const char* user, const char* pas
}
int32_t
buildRequest
(
uint64_t
connId
,
const
char
*
sql
,
int
sqlLen
,
void
*
param
,
bool
validateSql
,
SRequestObj
**
pRequest
)
{
*
pRequest
=
createRequest
(
connId
,
TSDB_SQL_SELECT
);
SRequestObj
**
pRequest
,
int64_t
reqid
)
{
*
pRequest
=
createRequest
(
connId
,
TSDB_SQL_SELECT
,
reqid
);
if
(
*
pRequest
==
NULL
)
{
tscError
(
"failed to malloc sqlObj, %s"
,
sql
);
return
terrno
;
...
...
@@ -1230,7 +1230,7 @@ STscObj* taosConnectImpl(const char* user, const char* auth, const char* db, __t
return
pTscObj
;
}
SRequestObj
*
pRequest
=
createRequest
(
pTscObj
->
id
,
TDMT_MND_CONNECT
);
SRequestObj
*
pRequest
=
createRequest
(
pTscObj
->
id
,
TDMT_MND_CONNECT
,
0
);
if
(
pRequest
==
NULL
)
{
destroyTscObj
(
pTscObj
);
return
NULL
;
...
...
@@ -2234,7 +2234,37 @@ void taosAsyncQueryImpl(uint64_t connId, const char* sql, __taos_async_fn_t fp,
}
SRequestObj
*
pRequest
=
NULL
;
int32_t
code
=
buildRequest
(
connId
,
sql
,
sqlLen
,
param
,
validateOnly
,
&
pRequest
);
int32_t
code
=
buildRequest
(
connId
,
sql
,
sqlLen
,
param
,
validateOnly
,
&
pRequest
,
0
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
terrno
=
code
;
fp
(
param
,
NULL
,
terrno
);
return
;
}
pRequest
->
body
.
queryFp
=
fp
;
doAsyncQuery
(
pRequest
,
false
);
}
void
taosAsyncQueryImplWithReqid
(
uint64_t
connId
,
const
char
*
sql
,
__taos_async_fn_t
fp
,
void
*
param
,
bool
validateOnly
,
int64_t
reqid
)
{
if
(
sql
==
NULL
||
NULL
==
fp
)
{
terrno
=
TSDB_CODE_INVALID_PARA
;
if
(
fp
)
{
fp
(
param
,
NULL
,
terrno
);
}
return
;
}
size_t
sqlLen
=
strlen
(
sql
);
if
(
sqlLen
>
(
size_t
)
TSDB_MAX_ALLOWED_SQL_LEN
)
{
tscError
(
"sql string exceeds max length:%d"
,
TSDB_MAX_ALLOWED_SQL_LEN
);
terrno
=
TSDB_CODE_TSC_EXCEED_SQL_LIMIT
;
fp
(
param
,
NULL
,
terrno
);
return
;
}
SRequestObj
*
pRequest
=
NULL
;
int32_t
code
=
buildRequest
(
connId
,
sql
,
sqlLen
,
param
,
validateOnly
,
&
pRequest
,
reqid
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
terrno
=
code
;
fp
(
param
,
NULL
,
terrno
);
...
...
@@ -2261,3 +2291,20 @@ TAOS_RES* taosQueryImpl(TAOS* taos, const char* sql, bool validateOnly) {
}
return
param
->
pRequest
;
}
TAOS_RES
*
taosQueryImplWithReqid
(
TAOS
*
taos
,
const
char
*
sql
,
bool
validateOnly
,
int64_t
reqid
)
{
if
(
NULL
==
taos
)
{
terrno
=
TSDB_CODE_TSC_DISCONNECTED
;
return
NULL
;
}
SSyncQueryParam
*
param
=
taosMemoryCalloc
(
1
,
sizeof
(
SSyncQueryParam
));
tsem_init
(
&
param
->
sem
,
0
,
0
);
taosAsyncQueryImplWithReqid
(
*
(
int64_t
*
)
taos
,
sql
,
syncQueryFn
,
param
,
validateOnly
,
reqid
);
tsem_wait
(
&
param
->
sem
);
if
(
param
->
pRequest
!=
NULL
)
{
param
->
pRequest
->
syncQuery
=
true
;
}
return
param
->
pRequest
;
}
source/client/src/clientMain.c
浏览文件 @
69afe77e
...
...
@@ -248,6 +248,9 @@ TAOS_FIELD *taos_fetch_fields(TAOS_RES *res) {
}
TAOS_RES
*
taos_query
(
TAOS
*
taos
,
const
char
*
sql
)
{
return
taosQueryImpl
(
taos
,
sql
,
false
);
}
TAOS_RES
*
taos_query_with_reqid
(
TAOS
*
taos
,
const
char
*
sql
,
int64_t
reqid
)
{
return
taosQueryImplWithReqid
(
taos
,
sql
,
false
,
reqid
);
}
TAOS_ROW
taos_fetch_row
(
TAOS_RES
*
res
)
{
if
(
res
==
NULL
)
{
...
...
@@ -763,6 +766,11 @@ void taos_query_a(TAOS *taos, const char *sql, __taos_async_fn_t fp, void *param
taosAsyncQueryImpl
(
connId
,
sql
,
fp
,
param
,
false
);
}
void
taos_query_a_with_reqid
(
TAOS
*
taos
,
const
char
*
sql
,
__taos_async_fn_t
fp
,
void
*
param
,
int64_t
reqid
)
{
int64_t
connId
=
*
(
int64_t
*
)
taos
;
taosAsyncQueryImplWithReqid
(
connId
,
sql
,
fp
,
param
,
false
,
reqid
);
}
int32_t
createParseContext
(
const
SRequestObj
*
pRequest
,
SParseContext
**
pCxt
)
{
const
STscObj
*
pTscObj
=
pRequest
->
pTscObj
;
...
...
@@ -992,7 +1000,7 @@ int taos_get_db_route_info(TAOS *taos, const char *db, TAOS_DB_ROUTE_INFO *dbInf
int64_t
connId
=
*
(
int64_t
*
)
taos
;
SRequestObj
*
pRequest
=
NULL
;
char
*
sql
=
"taos_get_db_route_info"
;
int32_t
code
=
buildRequest
(
connId
,
sql
,
strlen
(
sql
),
NULL
,
false
,
&
pRequest
);
int32_t
code
=
buildRequest
(
connId
,
sql
,
strlen
(
sql
),
NULL
,
false
,
&
pRequest
,
0
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
terrno
=
code
;
return
terrno
;
...
...
@@ -1041,7 +1049,7 @@ int taos_get_table_vgId(TAOS *taos, const char *db, const char *table, int *vgId
int64_t
connId
=
*
(
int64_t
*
)
taos
;
SRequestObj
*
pRequest
=
NULL
;
char
*
sql
=
"taos_get_table_vgId"
;
int32_t
code
=
buildRequest
(
connId
,
sql
,
strlen
(
sql
),
NULL
,
false
,
&
pRequest
);
int32_t
code
=
buildRequest
(
connId
,
sql
,
strlen
(
sql
),
NULL
,
false
,
&
pRequest
,
0
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
return
terrno
;
}
...
...
@@ -1102,7 +1110,7 @@ int taos_load_table_info(TAOS *taos, const char *tableNameList) {
}
char
*
sql
=
"taos_load_table_info"
;
code
=
buildRequest
(
connId
,
sql
,
strlen
(
sql
),
NULL
,
false
,
&
pRequest
);
code
=
buildRequest
(
connId
,
sql
,
strlen
(
sql
),
NULL
,
false
,
&
pRequest
,
0
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
terrno
=
code
;
goto
_return
;
...
...
@@ -1147,7 +1155,22 @@ TAOS_STMT *taos_stmt_init(TAOS *taos) {
return
NULL
;
}
TAOS_STMT
*
pStmt
=
stmtInit
(
pObj
);
TAOS_STMT
*
pStmt
=
stmtInit
(
pObj
,
0
);
releaseTscObj
(
*
(
int64_t
*
)
taos
);
return
pStmt
;
}
TAOS_STMT
*
taos_stmt_init_with_reqid
(
TAOS
*
taos
,
int64_t
reqid
)
{
STscObj
*
pObj
=
acquireTscObj
(
*
(
int64_t
*
)
taos
);
if
(
NULL
==
pObj
)
{
tscError
(
"invalid parameter for %s"
,
__FUNCTION__
);
terrno
=
TSDB_CODE_TSC_DISCONNECTED
;
return
NULL
;
}
TAOS_STMT
*
pStmt
=
stmtInit
(
pObj
,
reqid
);
releaseTscObj
(
*
(
int64_t
*
)
taos
);
...
...
source/client/src/clientRawBlockWrite.c
浏览文件 @
69afe77e
...
...
@@ -410,7 +410,7 @@ static char* processAlterTable(SMqMetaRsp* metaRsp) {
SDecoder
decoder
=
{
0
};
SVAlterTbReq
vAlterTbReq
=
{
0
};
char
*
string
=
NULL
;
cJSON
*
json
=
NULL
;
cJSON
*
json
=
NULL
;
// decode
void
*
data
=
POINTER_SHIFT
(
metaRsp
->
metaRsp
,
sizeof
(
SMsgHead
));
...
...
@@ -525,7 +525,7 @@ static char* processDropSTable(SMqMetaRsp* metaRsp) {
SDecoder
decoder
=
{
0
};
SVDropStbReq
req
=
{
0
};
char
*
string
=
NULL
;
cJSON
*
json
=
NULL
;
cJSON
*
json
=
NULL
;
// decode
void
*
data
=
POINTER_SHIFT
(
metaRsp
->
metaRsp
,
sizeof
(
SMsgHead
));
...
...
@@ -558,7 +558,7 @@ static char* processDropTable(SMqMetaRsp* metaRsp) {
SDecoder
decoder
=
{
0
};
SVDropTbBatchReq
req
=
{
0
};
char
*
string
=
NULL
;
cJSON
*
json
=
NULL
;
cJSON
*
json
=
NULL
;
// decode
void
*
data
=
POINTER_SHIFT
(
metaRsp
->
metaRsp
,
sizeof
(
SMsgHead
));
...
...
@@ -603,7 +603,7 @@ static int32_t taosCreateStb(TAOS* taos, void* meta, int32_t metaLen) {
int32_t
code
=
TSDB_CODE_SUCCESS
;
SRequestObj
*
pRequest
=
NULL
;
code
=
buildRequest
(
*
(
int64_t
*
)
taos
,
""
,
0
,
NULL
,
false
,
&
pRequest
);
code
=
buildRequest
(
*
(
int64_t
*
)
taos
,
""
,
0
,
NULL
,
false
,
&
pRequest
,
0
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
end
;
}
...
...
@@ -692,7 +692,7 @@ static int32_t taosDropStb(TAOS* taos, void* meta, int32_t metaLen) {
int32_t
code
=
TSDB_CODE_SUCCESS
;
SRequestObj
*
pRequest
=
NULL
;
code
=
buildRequest
(
*
(
int64_t
*
)
taos
,
""
,
0
,
NULL
,
false
,
&
pRequest
);
code
=
buildRequest
(
*
(
int64_t
*
)
taos
,
""
,
0
,
NULL
,
false
,
&
pRequest
,
0
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
end
;
}
...
...
@@ -773,7 +773,7 @@ static int32_t taosCreateTable(TAOS* taos, void* meta, int32_t metaLen) {
SQuery
*
pQuery
=
NULL
;
SHashObj
*
pVgroupHashmap
=
NULL
;
code
=
buildRequest
(
*
(
int64_t
*
)
taos
,
""
,
0
,
NULL
,
false
,
&
pRequest
);
code
=
buildRequest
(
*
(
int64_t
*
)
taos
,
""
,
0
,
NULL
,
false
,
&
pRequest
,
0
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
end
;
}
...
...
@@ -926,7 +926,7 @@ static int32_t taosDropTable(TAOS* taos, void* meta, int32_t metaLen) {
SQuery
*
pQuery
=
NULL
;
SHashObj
*
pVgroupHashmap
=
NULL
;
code
=
buildRequest
(
*
(
int64_t
*
)
taos
,
""
,
0
,
NULL
,
false
,
&
pRequest
);
code
=
buildRequest
(
*
(
int64_t
*
)
taos
,
""
,
0
,
NULL
,
false
,
&
pRequest
,
0
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
end
;
}
...
...
@@ -1097,7 +1097,7 @@ static int32_t taosAlterTable(TAOS* taos, void* meta, int32_t metaLen) {
SArray
*
pArray
=
NULL
;
SVgDataBlocks
*
pVgData
=
NULL
;
code
=
buildRequest
(
*
(
int64_t
*
)
taos
,
""
,
0
,
NULL
,
false
,
&
pRequest
);
code
=
buildRequest
(
*
(
int64_t
*
)
taos
,
""
,
0
,
NULL
,
false
,
&
pRequest
,
0
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
end
;
...
...
@@ -1217,7 +1217,7 @@ int taos_write_raw_block(TAOS* taos, int rows, char* pData, const char* tbname)
SQuery
*
pQuery
=
NULL
;
SSubmitReq
*
subReq
=
NULL
;
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
createRequest
(
*
(
int64_t
*
)
taos
,
TSDB_SQL_INSERT
);
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
createRequest
(
*
(
int64_t
*
)
taos
,
TSDB_SQL_INSERT
,
0
);
if
(
!
pRequest
)
{
uError
(
"WriteRaw:createRequest error request is null"
);
code
=
terrno
;
...
...
@@ -1281,7 +1281,7 @@ int taos_write_raw_block(TAOS* taos, int rows, char* pData, const char* tbname)
int32_t
schemaLen
=
0
;
int32_t
submitLen
=
sizeof
(
SSubmitBlk
)
+
schemaLen
+
rows
*
extendedRowSize
;
int32_t
totalLen
=
sizeof
(
SSubmitReq
)
+
submitLen
;
int32_t
totalLen
=
sizeof
(
SSubmitReq
)
+
submitLen
;
subReq
=
taosMemoryCalloc
(
1
,
totalLen
);
SSubmitBlk
*
blk
=
POINTER_SHIFT
(
subReq
,
sizeof
(
SSubmitReq
));
void
*
blkSchema
=
POINTER_SHIFT
(
blk
,
sizeof
(
SSubmitBlk
));
...
...
@@ -1407,7 +1407,7 @@ static int32_t tmqWriteRawDataImpl(TAOS* taos, void* data, int32_t dataLen) {
STableMeta
*
pTableMeta
=
NULL
;
terrno
=
TSDB_CODE_SUCCESS
;
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
createRequest
(
*
(
int64_t
*
)
taos
,
TSDB_SQL_INSERT
);
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
createRequest
(
*
(
int64_t
*
)
taos
,
TSDB_SQL_INSERT
,
0
);
if
(
!
pRequest
)
{
uError
(
"WriteRaw:createRequest error request is null"
);
return
terrno
;
...
...
@@ -1674,7 +1674,7 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen)
STableMeta
*
pTableMeta
=
NULL
;
terrno
=
TSDB_CODE_SUCCESS
;
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
createRequest
(
*
(
int64_t
*
)
taos
,
TSDB_SQL_INSERT
);
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
createRequest
(
*
(
int64_t
*
)
taos
,
TSDB_SQL_INSERT
,
0
);
if
(
!
pRequest
)
{
uError
(
"WriteRaw:createRequest error request is null"
);
return
terrno
;
...
...
source/client/src/clientSml.c
浏览文件 @
69afe77e
...
...
@@ -28,12 +28,12 @@
#define QUOTE '"'
#define SLASH '\\'
#define JUMP_SPACE(sql, sqlEnd)
\
while (sql < sqlEnd) { \
if (*sql == SPACE) \
sql++; \
else \
break; \
#define JUMP_SPACE(sql, sqlEnd) \
while (sql < sqlEnd) {
\
if (*sql == SPACE)
\
sql++;
\
else
\
break;
\
}
// comma ,
#define IS_SLASH_COMMA(sql) (*(sql) == COMMA && *((sql)-1) == SLASH)
...
...
@@ -353,7 +353,7 @@ static int32_t smlSendMetaMsg(SSmlHandle *info, SName *pName, SArray *pColumns,
pReq
.
numOfTags
=
taosArrayGetSize
(
pTags
);
pReq
.
pTags
=
pTags
;
code
=
buildRequest
(
info
->
taos
->
id
,
""
,
0
,
NULL
,
false
,
&
pRequest
);
code
=
buildRequest
(
info
->
taos
->
id
,
""
,
0
,
NULL
,
false
,
&
pRequest
,
0
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
end
;
}
...
...
@@ -1010,9 +1010,9 @@ static void smlParseTelnetElement(const char **sql, const char *sqlEnd, const ch
}
}
static
int32_t
smlParseTelnetTags
(
const
char
*
data
,
const
char
*
sqlEnd
,
SArray
*
cols
,
char
*
childTableName
,
SHashObj
*
dumplicateKey
,
SSmlMsgBuf
*
msg
)
{
if
(
!
cols
)
return
TSDB_CODE_OUT_OF_MEMORY
;
static
int32_t
smlParseTelnetTags
(
const
char
*
data
,
const
char
*
sqlEnd
,
SArray
*
cols
,
char
*
childTableName
,
S
HashObj
*
dumplicateKey
,
S
SmlMsgBuf
*
msg
)
{
if
(
!
cols
)
return
TSDB_CODE_OUT_OF_MEMORY
;
const
char
*
sql
=
data
;
size_t
childTableNameLen
=
strlen
(
tsSmlChildTableName
);
while
(
sql
<
sqlEnd
)
{
...
...
@@ -1093,7 +1093,8 @@ static int32_t smlParseTelnetTags(const char *data, const char *sqlEnd, SArray *
}
// format: <metric> <timestamp> <value> <tagk_1>=<tagv_1>[ <tagk_n>=<tagv_n>]
static
int32_t
smlParseTelnetString
(
SSmlHandle
*
info
,
const
char
*
sql
,
const
char
*
sqlEnd
,
SSmlTableInfo
*
tinfo
,
SArray
*
cols
)
{
static
int32_t
smlParseTelnetString
(
SSmlHandle
*
info
,
const
char
*
sql
,
const
char
*
sqlEnd
,
SSmlTableInfo
*
tinfo
,
SArray
*
cols
)
{
if
(
!
sql
)
return
TSDB_CODE_SML_INVALID_DATA
;
// parse metric
...
...
@@ -1372,19 +1373,19 @@ static int32_t smlKvTimeArrayCompare(const void *key1, const void *key2) {
static
int32_t
smlKvTimeHashCompare
(
const
void
*
key1
,
const
void
*
key2
)
{
SHashObj
*
s1
=
*
(
SHashObj
**
)
key1
;
SHashObj
*
s2
=
*
(
SHashObj
**
)
key2
;
SSmlKv
**
kv1pp
=
(
SSmlKv
**
)
taosHashGet
(
s1
,
TS
,
TS_LEN
);
SSmlKv
**
kv2pp
=
(
SSmlKv
**
)
taosHashGet
(
s2
,
TS
,
TS_LEN
);
if
(
!
kv1pp
||
!
kv2pp
)
{
SSmlKv
**
kv1pp
=
(
SSmlKv
**
)
taosHashGet
(
s1
,
TS
,
TS_LEN
);
SSmlKv
**
kv2pp
=
(
SSmlKv
**
)
taosHashGet
(
s2
,
TS
,
TS_LEN
);
if
(
!
kv1pp
||
!
kv2pp
)
{
uError
(
"smlKvTimeHashCompare kv is null"
);
return
-
1
;
}
SSmlKv
*
kv1
=
*
kv1pp
;
SSmlKv
*
kv2
=
*
kv2pp
;
if
(
!
kv1
||
kv1
->
type
!=
TSDB_DATA_TYPE_TIMESTAMP
)
{
SSmlKv
*
kv1
=
*
kv1pp
;
SSmlKv
*
kv2
=
*
kv2pp
;
if
(
!
kv1
||
kv1
->
type
!=
TSDB_DATA_TYPE_TIMESTAMP
)
{
uError
(
"smlKvTimeHashCompare kv1"
);
return
-
1
;
}
if
(
!
kv2
||
kv2
->
type
!=
TSDB_DATA_TYPE_TIMESTAMP
)
{
if
(
!
kv2
||
kv2
->
type
!=
TSDB_DATA_TYPE_TIMESTAMP
)
{
uError
(
"smlKvTimeHashCompare kv2"
);
return
-
1
;
}
...
...
@@ -1947,7 +1948,7 @@ static int32_t smlParseValueFromJSON(cJSON *root, SSmlKv *kv) {
}
static
int32_t
smlParseColsFromJSON
(
cJSON
*
root
,
SArray
*
cols
)
{
if
(
!
cols
)
return
TSDB_CODE_OUT_OF_MEMORY
;
if
(
!
cols
)
return
TSDB_CODE_OUT_OF_MEMORY
;
cJSON
*
metricVal
=
cJSON_GetObjectItem
(
root
,
"value"
);
if
(
metricVal
==
NULL
)
{
return
TSDB_CODE_TSC_INVALID_JSON
;
...
...
@@ -1971,7 +1972,7 @@ static int32_t smlParseColsFromJSON(cJSON *root, SArray *cols) {
static
int32_t
smlParseTagsFromJSON
(
cJSON
*
root
,
SArray
*
pKVs
,
char
*
childTableName
,
SHashObj
*
dumplicateKey
,
SSmlMsgBuf
*
msg
)
{
int32_t
ret
=
TSDB_CODE_SUCCESS
;
if
(
!
pKVs
){
if
(
!
pKVs
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
cJSON
*
tags
=
cJSON_GetObjectItem
(
root
,
"tags"
);
...
...
@@ -2204,7 +2205,7 @@ static int32_t smlParseTelnetLine(SSmlHandle *info, void *data, const int len) {
}
if
(
info
->
protocol
==
TSDB_SML_TELNET_PROTOCOL
)
{
ret
=
smlParseTelnetString
(
info
,
(
const
char
*
)
data
,
(
char
*
)
data
+
len
,
tinfo
,
cols
);
ret
=
smlParseTelnetString
(
info
,
(
const
char
*
)
data
,
(
char
*
)
data
+
len
,
tinfo
,
cols
);
}
else
if
(
info
->
protocol
==
TSDB_SML_JSON_PROTOCOL
)
{
ret
=
smlParseJSONString
(
info
,
(
cJSON
*
)
data
,
tinfo
,
cols
);
}
else
{
...
...
@@ -2384,16 +2385,16 @@ static void smlPrintStatisticInfo(SSmlHandle *info) {
info
->
cost
.
endTime
-
info
->
cost
.
insertRpcTime
,
info
->
cost
.
endTime
-
info
->
cost
.
parseTime
);
}
static
int32_t
smlParseLine
(
SSmlHandle
*
info
,
char
*
lines
[],
char
*
rawLine
,
char
*
rawLineEnd
,
int
numLines
)
{
static
int32_t
smlParseLine
(
SSmlHandle
*
info
,
char
*
lines
[],
char
*
rawLine
,
char
*
rawLineEnd
,
int
numLines
)
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
if
(
info
->
protocol
==
TSDB_SML_JSON_PROTOCOL
)
{
if
(
lines
)
{
if
(
lines
)
{
code
=
smlParseJSON
(
info
,
*
lines
);
}
else
if
(
rawLine
)
{
}
else
if
(
rawLine
)
{
code
=
smlParseJSON
(
info
,
rawLine
);
}
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
uError
(
"SML:0x%"
PRIx64
" smlParseJSON failed:%s"
,
info
->
id
,
lines
?*
lines
:
rawLine
);
uError
(
"SML:0x%"
PRIx64
" smlParseJSON failed:%s"
,
info
->
id
,
lines
?
*
lines
:
rawLine
);
return
code
;
}
return
code
;
...
...
@@ -2401,19 +2402,19 @@ static int32_t smlParseLine(SSmlHandle *info, char *lines[], char* rawLine, char
for
(
int32_t
i
=
0
;
i
<
numLines
;
++
i
)
{
char
*
tmp
=
NULL
;
int
len
=
0
;
if
(
lines
)
{
int
len
=
0
;
if
(
lines
)
{
tmp
=
lines
[
i
];
len
=
strlen
(
tmp
);
}
else
if
(
rawLine
)
{
}
else
if
(
rawLine
)
{
tmp
=
rawLine
;
while
(
rawLine
<
rawLineEnd
)
{
if
(
*
(
rawLine
++
)
==
'\n'
)
{
while
(
rawLine
<
rawLineEnd
)
{
if
(
*
(
rawLine
++
)
==
'\n'
)
{
break
;
}
len
++
;
}
if
(
info
->
protocol
==
TSDB_SML_LINE_PROTOCOL
&&
tmp
[
0
]
==
'#'
){
// this line is comment
if
(
info
->
protocol
==
TSDB_SML_LINE_PROTOCOL
&&
tmp
[
0
]
==
'#'
)
{
// this line is comment
continue
;
}
}
...
...
@@ -2433,7 +2434,7 @@ static int32_t smlParseLine(SSmlHandle *info, char *lines[], char* rawLine, char
return
code
;
}
static
int
smlProcess
(
SSmlHandle
*
info
,
char
*
lines
[],
char
*
rawLine
,
char
*
rawLineEnd
,
int
numLines
)
{
static
int
smlProcess
(
SSmlHandle
*
info
,
char
*
lines
[],
char
*
rawLine
,
char
*
rawLineEnd
,
int
numLines
)
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
int32_t
retryNum
=
0
;
...
...
@@ -2532,8 +2533,8 @@ static void smlInsertCallback(void *param, void *res, int32_t code) {
smlDestroyInfo
(
info
);
}
TAOS_RES
*
taos_schemaless_insert_inner
(
SRequestObj
*
request
,
char
*
lines
[],
char
*
rawLine
,
char
*
rawLineEnd
,
int
numLines
,
int
protocol
,
int
precision
)
{
TAOS_RES
*
taos_schemaless_insert_inner
(
SRequestObj
*
request
,
char
*
lines
[],
char
*
rawLine
,
char
*
rawLineEnd
,
int
numLines
,
int
protocol
,
int
precision
)
{
int
batchs
=
0
;
STscObj
*
pTscObj
=
request
->
pTscObj
;
...
...
@@ -2581,7 +2582,7 @@ TAOS_RES *taos_schemaless_insert_inner(SRequestObj *request, char *lines[], char
batchs
=
ceil
(((
double
)
numLines
)
/
LINE_BATCH
);
params
.
total
=
batchs
;
for
(
int
i
=
0
;
i
<
batchs
;
++
i
)
{
SRequestObj
*
req
=
(
SRequestObj
*
)
createRequest
(
pTscObj
->
id
,
TSDB_SQL_INSERT
);
SRequestObj
*
req
=
(
SRequestObj
*
)
createRequest
(
pTscObj
->
id
,
TSDB_SQL_INSERT
,
0
);
if
(
!
req
)
{
request
->
code
=
TSDB_CODE_OUT_OF_MEMORY
;
uError
(
"SML:taos_schemaless_insert error request is null"
);
...
...
@@ -2608,16 +2609,16 @@ TAOS_RES *taos_schemaless_insert_inner(SRequestObj *request, char *lines[], char
info
->
pRequest
->
body
.
queryFp
=
smlInsertCallback
;
info
->
pRequest
->
body
.
param
=
info
;
int32_t
code
=
smlProcess
(
info
,
lines
,
rawLine
,
rawLineEnd
,
perBatch
);
if
(
lines
)
{
if
(
lines
)
{
lines
+=
perBatch
;
}
if
(
rawLine
)
{
if
(
rawLine
)
{
int
num
=
0
;
while
(
rawLine
<
rawLineEnd
)
{
if
(
*
(
rawLine
++
)
==
'\n'
)
{
while
(
rawLine
<
rawLineEnd
)
{
if
(
*
(
rawLine
++
)
==
'\n'
)
{
num
++
;
}
if
(
num
==
perBatch
)
{
if
(
num
==
perBatch
)
{
break
;
}
}
...
...
@@ -2628,7 +2629,7 @@ TAOS_RES *taos_schemaless_insert_inner(SRequestObj *request, char *lines[], char
}
tsem_wait
(
&
params
.
sem
);
end:
end:
taosThreadSpinDestroy
(
&
params
.
lock
);
tsem_destroy
(
&
params
.
sem
);
// ((STscObj *)taos)->schemalessType = 0;
...
...
@@ -2664,7 +2665,30 @@ TAOS_RES *taos_schemaless_insert(TAOS *taos, char *lines[], int numLines, int pr
return
NULL
;
}
SRequestObj
*
request
=
(
SRequestObj
*
)
createRequest
(
*
(
int64_t
*
)
taos
,
TSDB_SQL_INSERT
);
SRequestObj
*
request
=
(
SRequestObj
*
)
createRequest
(
*
(
int64_t
*
)
taos
,
TSDB_SQL_INSERT
,
0
);
if
(
!
request
)
{
uError
(
"SML:taos_schemaless_insert error request is null"
);
return
NULL
;
}
if
(
!
lines
)
{
SSmlMsgBuf
msg
=
{
ERROR_MSG_BUF_DEFAULT_SIZE
,
request
->
msgBuf
};
request
->
code
=
TSDB_CODE_SML_INVALID_DATA
;
smlBuildInvalidDataMsg
(
&
msg
,
"lines is null"
,
NULL
);
return
(
TAOS_RES
*
)
request
;
}
return
taos_schemaless_insert_inner
(
request
,
lines
,
NULL
,
NULL
,
numLines
,
protocol
,
precision
);
}
TAOS_RES
*
taos_schemaless_insert_with_reqid
(
TAOS
*
taos
,
char
*
lines
[],
int
numLines
,
int
protocol
,
int
precision
,
int64_t
reqid
)
{
if
(
NULL
==
taos
)
{
terrno
=
TSDB_CODE_TSC_DISCONNECTED
;
return
NULL
;
}
SRequestObj
*
request
=
(
SRequestObj
*
)
createRequest
(
*
(
int64_t
*
)
taos
,
TSDB_SQL_INSERT
,
reqid
);
if
(
!
request
)
{
uError
(
"SML:taos_schemaless_insert error request is null"
);
return
NULL
;
...
...
@@ -2680,13 +2704,49 @@ TAOS_RES *taos_schemaless_insert(TAOS *taos, char *lines[], int numLines, int pr
return
taos_schemaless_insert_inner
(
request
,
lines
,
NULL
,
NULL
,
numLines
,
protocol
,
precision
);
}
TAOS_RES
*
taos_schemaless_insert_raw
(
TAOS
*
taos
,
char
*
lines
,
int
len
,
int32_t
*
totalRows
,
int
protocol
,
int
precision
){
TAOS_RES
*
taos_schemaless_insert_raw
(
TAOS
*
taos
,
char
*
lines
,
int
len
,
int32_t
*
totalRows
,
int
protocol
,
int
precision
)
{
if
(
NULL
==
taos
)
{
terrno
=
TSDB_CODE_TSC_DISCONNECTED
;
return
NULL
;
}
SRequestObj
*
request
=
(
SRequestObj
*
)
createRequest
(
*
(
int64_t
*
)
taos
,
TSDB_SQL_INSERT
,
0
);
if
(
!
request
)
{
uError
(
"SML:taos_schemaless_insert error request is null"
);
return
NULL
;
}
if
(
!
lines
||
len
<=
0
)
{
SSmlMsgBuf
msg
=
{
ERROR_MSG_BUF_DEFAULT_SIZE
,
request
->
msgBuf
};
request
->
code
=
TSDB_CODE_SML_INVALID_DATA
;
smlBuildInvalidDataMsg
(
&
msg
,
"lines is null"
,
NULL
);
return
(
TAOS_RES
*
)
request
;
}
int
numLines
=
0
;
*
totalRows
=
0
;
char
*
tmp
=
lines
;
for
(
int
i
=
0
;
i
<
len
;
i
++
)
{
if
(
lines
[
i
]
==
'\n'
||
i
==
len
-
1
)
{
numLines
++
;
if
(
tmp
[
0
]
!=
'#'
||
protocol
!=
TSDB_SML_LINE_PROTOCOL
)
{
// ignore comment
(
*
totalRows
)
++
;
}
tmp
=
lines
+
i
+
1
;
}
}
return
taos_schemaless_insert_inner
(
request
,
NULL
,
lines
,
lines
+
len
,
numLines
,
protocol
,
precision
);
}
TAOS_RES
*
taos_schemaless_insert_raw_with_reqid
(
TAOS
*
taos
,
char
*
lines
,
int
len
,
int32_t
*
totalRows
,
int
protocol
,
int
precision
,
int64_t
reqid
)
{
if
(
NULL
==
taos
)
{
terrno
=
TSDB_CODE_TSC_DISCONNECTED
;
return
NULL
;
}
SRequestObj
*
request
=
(
SRequestObj
*
)
createRequest
(
*
(
int64_t
*
)
taos
,
TSDB_SQL_INSERT
);
SRequestObj
*
request
=
(
SRequestObj
*
)
createRequest
(
*
(
int64_t
*
)
taos
,
TSDB_SQL_INSERT
,
reqid
);
if
(
!
request
)
{
uError
(
"SML:taos_schemaless_insert error request is null"
);
return
NULL
;
...
...
@@ -2702,10 +2762,10 @@ TAOS_RES *taos_schemaless_insert_raw(TAOS* taos, char* lines, int len, int32_t *
int
numLines
=
0
;
*
totalRows
=
0
;
char
*
tmp
=
lines
;
for
(
int
i
=
0
;
i
<
len
;
i
++
)
{
if
(
lines
[
i
]
==
'\n'
||
i
==
len
-
1
)
{
for
(
int
i
=
0
;
i
<
len
;
i
++
)
{
if
(
lines
[
i
]
==
'\n'
||
i
==
len
-
1
)
{
numLines
++
;
if
(
tmp
[
0
]
!=
'#'
||
protocol
!=
TSDB_SML_LINE_PROTOCOL
){
//
ignore comment
if
(
tmp
[
0
]
!=
'#'
||
protocol
!=
TSDB_SML_LINE_PROTOCOL
)
{
//
ignore comment
(
*
totalRows
)
++
;
}
tmp
=
lines
+
i
+
1
;
...
...
source/client/src/clientStmt.c
浏览文件 @
69afe77e
...
...
@@ -5,13 +5,15 @@
#include "clientStmt.h"
char
*
gStmtStatusStr
[]
=
{
"unknown"
,
"init"
,
"prepare"
,
"settbname"
,
"settags"
,
"fetchFields"
,
"bind"
,
"bindCol"
,
"addBatch"
,
"exec"
};
char
*
gStmtStatusStr
[]
=
{
"unknown"
,
"init"
,
"prepare"
,
"settbname"
,
"settags"
,
"fetchFields"
,
"bind"
,
"bindCol"
,
"addBatch"
,
"exec"
};
static
int32_t
stmtCreateRequest
(
STscStmt
*
pStmt
)
{
int32_t
code
=
0
;
if
(
pStmt
->
exec
.
pRequest
==
NULL
)
{
code
=
buildRequest
(
pStmt
->
taos
->
id
,
pStmt
->
sql
.
sqlStr
,
pStmt
->
sql
.
sqlLen
,
NULL
,
false
,
&
pStmt
->
exec
.
pRequest
);
code
=
buildRequest
(
pStmt
->
taos
->
id
,
pStmt
->
sql
.
sqlStr
,
pStmt
->
sql
.
sqlLen
,
NULL
,
false
,
&
pStmt
->
exec
.
pRequest
,
pStmt
->
reqid
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
pStmt
->
exec
.
pRequest
->
syncQuery
=
true
;
}
...
...
@@ -207,10 +209,10 @@ int32_t stmtCacheBlock(STscStmt* pStmt) {
}
STableDataBlocks
**
pSrc
=
taosHashGet
(
pStmt
->
exec
.
pBlockHash
,
pStmt
->
bInfo
.
tbFName
,
strlen
(
pStmt
->
bInfo
.
tbFName
));
if
(
!
pSrc
)
{
if
(
!
pSrc
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
STableDataBlocks
*
pDst
=
NULL
;
STableDataBlocks
*
pDst
=
NULL
;
STMT_ERR_RET
(
qCloneStmtDataBlock
(
&
pDst
,
*
pSrc
));
...
...
@@ -513,7 +515,7 @@ int32_t stmtResetStmt(STscStmt* pStmt) {
return
TSDB_CODE_SUCCESS
;
}
TAOS_STMT
*
stmtInit
(
STscObj
*
taos
)
{
TAOS_STMT
*
stmtInit
(
STscObj
*
taos
,
int64_t
reqid
)
{
STscObj
*
pObj
=
(
STscObj
*
)
taos
;
STscStmt
*
pStmt
=
NULL
;
...
...
@@ -533,9 +535,10 @@ TAOS_STMT* stmtInit(STscObj* taos) {
pStmt
->
taos
=
pObj
;
pStmt
->
bInfo
.
needParse
=
true
;
pStmt
->
sql
.
status
=
STMT_INIT
;
pStmt
->
reqid
=
reqid
;
STMT_LOG_SEQ
(
STMT_INIT
);
tscDebug
(
"stmt:%p initialized"
,
pStmt
);
return
pStmt
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录