Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
2a6262f9
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1187
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
2a6262f9
编写于
3月 28, 2022
作者:
H
Haojun Liao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[td-13039] support taos_fetch_block
上级
f036052e
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
68 addition
and
41 deletion
+68
-41
source/client/inc/clientInt.h
source/client/inc/clientInt.h
+1
-1
source/client/src/clientImpl.c
source/client/src/clientImpl.c
+42
-34
source/client/src/clientMain.c
source/client/src/clientMain.c
+25
-6
未找到文件。
source/client/inc/clientInt.h
浏览文件 @
2a6262f9
...
...
@@ -235,7 +235,7 @@ void initMsgHandleFp();
TAOS
*
taos_connect_internal
(
const
char
*
ip
,
const
char
*
user
,
const
char
*
pass
,
const
char
*
auth
,
const
char
*
db
,
uint16_t
port
);
void
*
doFetchRow
(
SRequestObj
*
pRequest
);
void
*
doFetchRow
(
SRequestObj
*
pRequest
,
bool
setupOneRowPtr
);
int32_t
setResultDataPtr
(
SReqResultInfo
*
pResultInfo
,
TAOS_FIELD
*
pFields
,
int32_t
numOfCols
,
int32_t
numOfRows
);
...
...
source/client/src/clientImpl.c
浏览文件 @
2a6262f9
...
...
@@ -545,7 +545,42 @@ TAOS* taos_connect_l(const char* ip, int ipLen, const char* user, int userLen, c
return
taos_connect
(
ipStr
,
userStr
,
passStr
,
dbStr
,
port
);
}
void
*
doFetchRow
(
SRequestObj
*
pRequest
)
{
static
void
doSetOneRowPtr
(
SReqResultInfo
*
pResultInfo
)
{
for
(
int32_t
i
=
0
;
i
<
pResultInfo
->
numOfCols
;
++
i
)
{
SResultColumn
*
pCol
=
&
pResultInfo
->
pCol
[
i
];
int32_t
type
=
pResultInfo
->
fields
[
i
].
type
;
int32_t
bytes
=
pResultInfo
->
fields
[
i
].
bytes
;
if
(
IS_VAR_DATA_TYPE
(
type
))
{
if
(
pCol
->
offset
[
pResultInfo
->
current
]
!=
-
1
)
{
char
*
pStart
=
pResultInfo
->
pCol
[
i
].
offset
[
pResultInfo
->
current
]
+
pResultInfo
->
pCol
[
i
].
pData
;
pResultInfo
->
length
[
i
]
=
varDataLen
(
pStart
);
pResultInfo
->
row
[
i
]
=
varDataVal
(
pStart
);
if
(
type
==
TSDB_DATA_TYPE_NCHAR
)
{
int32_t
len
=
taosUcs4ToMbs
((
TdUcs4
*
)
varDataVal
(
pStart
),
varDataLen
(
pStart
),
varDataVal
(
pResultInfo
->
convertBuf
[
i
]));
ASSERT
(
len
<=
bytes
);
pResultInfo
->
row
[
i
]
=
varDataVal
(
pResultInfo
->
convertBuf
[
i
]);
varDataSetLen
(
pResultInfo
->
convertBuf
[
i
],
len
);
pResultInfo
->
length
[
i
]
=
len
;
}
}
else
{
pResultInfo
->
row
[
i
]
=
NULL
;
}
}
else
{
if
(
!
colDataIsNull_f
(
pCol
->
nullbitmap
,
pResultInfo
->
current
))
{
pResultInfo
->
row
[
i
]
=
pResultInfo
->
pCol
[
i
].
pData
+
bytes
*
pResultInfo
->
current
;
}
else
{
pResultInfo
->
row
[
i
]
=
NULL
;
}
}
}
}
void
*
doFetchRow
(
SRequestObj
*
pRequest
,
bool
setupOneRowPtr
)
{
assert
(
pRequest
!=
NULL
);
SReqResultInfo
*
pResultInfo
=
&
pRequest
->
body
.
resInfo
;
...
...
@@ -555,17 +590,20 @@ void* doFetchRow(SRequestObj* pRequest) {
if
(
pRequest
->
type
==
TDMT_VND_QUERY
)
{
// All data has returned to App already, no need to try again
if
(
pResultInfo
->
completed
)
{
pResultInfo
->
numOfRows
=
0
;
return
NULL
;
}
SReqResultInfo
*
pResInfo
=
&
pRequest
->
body
.
resInfo
;
pRequest
->
code
=
schedulerFetchRows
(
pRequest
->
body
.
queryJob
,
(
void
**
)
&
pResInfo
->
pData
);
if
(
pRequest
->
code
!=
TSDB_CODE_SUCCESS
)
{
pResultInfo
->
numOfRows
=
0
;
return
NULL
;
}
pRequest
->
code
=
setQueryResultFromRsp
(
&
pRequest
->
body
.
resInfo
,
(
SRetrieveTableRsp
*
)
pResInfo
->
pData
);
if
(
pRequest
->
code
!=
TSDB_CODE_SUCCESS
)
{
pResultInfo
->
numOfRows
=
0
;
return
NULL
;
}
...
...
@@ -633,41 +671,11 @@ void* doFetchRow(SRequestObj* pRequest) {
}
_return:
for
(
int32_t
i
=
0
;
i
<
pResultInfo
->
numOfCols
;
++
i
)
{
SResultColumn
*
pCol
=
&
pResultInfo
->
pCol
[
i
];
int32_t
type
=
pResultInfo
->
fields
[
i
].
type
;
int32_t
bytes
=
pResultInfo
->
fields
[
i
].
bytes
;
if
(
IS_VAR_DATA_TYPE
(
type
))
{
if
(
pCol
->
offset
[
pResultInfo
->
current
]
!=
-
1
)
{
char
*
pStart
=
pResultInfo
->
pCol
[
i
].
offset
[
pResultInfo
->
current
]
+
pResultInfo
->
pCol
[
i
].
pData
;
pResultInfo
->
length
[
i
]
=
varDataLen
(
pStart
);
pResultInfo
->
row
[
i
]
=
varDataVal
(
pStart
);
if
(
type
==
TSDB_DATA_TYPE_NCHAR
)
{
int32_t
len
=
taosUcs4ToMbs
((
TdUcs4
*
)
varDataVal
(
pStart
),
varDataLen
(
pStart
),
varDataVal
(
pResultInfo
->
convertBuf
[
i
]));
ASSERT
(
len
<=
bytes
);
pResultInfo
->
row
[
i
]
=
varDataVal
(
pResultInfo
->
convertBuf
[
i
]);
varDataSetLen
(
pResultInfo
->
convertBuf
[
i
],
len
);
pResultInfo
->
length
[
i
]
=
len
;
}
}
else
{
pResultInfo
->
row
[
i
]
=
NULL
;
}
}
else
{
if
(
!
colDataIsNull_f
(
pCol
->
nullbitmap
,
pResultInfo
->
current
))
{
pResultInfo
->
row
[
i
]
=
pResultInfo
->
pCol
[
i
].
pData
+
bytes
*
pResultInfo
->
current
;
}
else
{
pResultInfo
->
row
[
i
]
=
NULL
;
}
}
if
(
setupOneRowPtr
)
{
doSetOneRowPtr
(
pResultInfo
);
pResultInfo
->
current
+=
1
;
}
pResultInfo
->
current
+=
1
;
return
pResultInfo
->
row
;
}
...
...
source/client/src/clientMain.c
浏览文件 @
2a6262f9
...
...
@@ -138,20 +138,20 @@ TAOS_RES *taos_query(TAOS *taos, const char *sql) {
return
taos_query_l
(
taos
,
sql
,
(
int32_t
)
strlen
(
sql
));
}
TAOS_ROW
taos_fetch_row
(
TAOS_RES
*
pR
es
)
{
if
(
pR
es
==
NULL
)
{
TAOS_ROW
taos_fetch_row
(
TAOS_RES
*
r
es
)
{
if
(
r
es
==
NULL
)
{
return
NULL
;
}
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
pR
es
;
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
r
es
;
if
(
pRequest
->
type
==
TSDB_SQL_RETRIEVE_EMPTY_RESULT
||
pRequest
->
type
==
TSDB_SQL_INSERT
||
pRequest
->
code
!=
TSDB_CODE_SUCCESS
||
taos_num_fields
(
pR
es
)
==
0
)
{
taos_num_fields
(
r
es
)
==
0
)
{
return
NULL
;
}
return
doFetchRow
(
pRequest
);
return
doFetchRow
(
pRequest
,
true
);
}
int
taos_print_row
(
char
*
str
,
TAOS_ROW
row
,
TAOS_FIELD
*
fields
,
int
num_fields
)
{
...
...
@@ -330,7 +330,26 @@ bool taos_is_null(TAOS_RES *res, int32_t row, int32_t col) {
}
int
taos_fetch_block
(
TAOS_RES
*
res
,
TAOS_ROW
*
rows
)
{
return
0
;
if
(
res
==
NULL
)
{
return
0
;
}
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
res
;
if
(
pRequest
->
type
==
TSDB_SQL_RETRIEVE_EMPTY_RESULT
||
pRequest
->
type
==
TSDB_SQL_INSERT
||
pRequest
->
code
!=
TSDB_CODE_SUCCESS
||
taos_num_fields
(
res
)
==
0
)
{
return
0
;
}
doFetchRow
(
pRequest
,
false
);
// TODO refactor
SReqResultInfo
*
pResultInfo
=
&
pRequest
->
body
.
resInfo
;
pResultInfo
->
current
=
pResultInfo
->
numOfRows
;
*
rows
=
pResultInfo
->
row
;
return
pResultInfo
->
numOfRows
;
}
int
taos_validate_sql
(
TAOS
*
taos
,
const
char
*
sql
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录